跳转到主要内容

位置向量器是scikit-learn的一个转换器,它使用位置排名算法作为评分,将文本转换为词袋向量。

项目描述

位置向量器

位置向量器是scikit-learn中的一个转换器,它使用位置排名算法来分配分数,将文本转换为词袋向量。与scikit-learn的CountVectorizer和TFIDFVectorizer类似,它根据原始文本中术语的位置为每个维度分配一个值。

如何使用

pip install positional-vectorizer

用于生成文本向量

from positional_vectorizer import PositionalVectorizer

input_texts = ["my text here", "other text here"]

vectorizer = PositionalVectorizer()
vectorizer.fit(input_texts)

encoded_texts = vectorizer.transform(input_texts)

与scikit-learn管道一起使用

from positional_vectorizer import PositionalVectorizer
from sklearn.pipeline import Pipeline
from sklearn.linear_model import SGDClassifier

pipeline = Pipeline([
    ('vect', PositionalVectorizer(ngram_range=(1, 2))),
    ('clf', SGDClassifier(random_state=42, loss='modified_huber'))
])

pipeline.fit(X_train, y_train)

为什么需要这个新的向量器?

基于词袋的文本嵌入,使用计数、二进制或TF-IDF归一化在大多数情况下非常有效。然而,在某些情况下,例如涉及如拉丁语等语言的情况下,术语的位置变得至关重要,而这些技术无法捕捉到这一点。

例如,考虑在区分智能手机设备和智能手机配件的葡萄牙语分类任务中,单词位置的重要性。在移除停用词的传统词袋方法中,以下标题产生相同的表现

  • "xiaomi com fone de ouvido" => {"xiaomi", "fone", "ouvido"}
  • "fone de ouvido do xiaomi" => {"xiaomi", "fone", "ouvido"}

如所示,单词的顺序显著改变了意义,但这种意义在向量化中未得到反映。

一种常见的解决方案是使用n-gram而不是单个单词,但这可能会增加特征维度,从而增加过拟合的风险。

工作原理

每个维度的值计算为1 / math.log(rank + 1)(类似于折现累积增益公式),其中rank表示对应术语的位置,从1开始。

如果一个术语在文本中多次出现,只考虑其最低的排名。

待办事项

  • 测试 _VectorizerMixin 的常用参数,以识别升级 scikit-learn 时可能存在的问题。目前,只有 ngrams_rangeanalyzer 参数被自动测试。
  • 实现 max_features 参数。

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。

源分布

positional_vectorizer-0.0.9.tar.gz (5.1 kB 查看散列)

上传时间

由以下提供支持