位置向量器是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_range
和analyzer
参数被自动测试。 - 实现 max_features 参数。
项目详情
关闭
positional_vectorizer-0.0.9.tar.gz 的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 32f321240ea74e2f9fb61ce30c4c522a93e35f666bdc5ce20cca0f6ea7b8cf15 |
|
MD5 | 77d6d9556df84c63a94720b915d497ac |
|
BLAKE2b-256 | 3b70131f25eebc618decca060d0e47130c8a8856384ad7a5b41b091394375e77 |