python - 在线版scikit-learn的TfidfVectorizer

标签 python machine-learning nlp scikit-learn vectorization

我希望使用 scikit-learn 的 HashingVectorizer,因为它非常适合在线学习问题(文本中的新标记保证映射到“桶”)。不幸的是,scikit-learn 中包含的实现似乎不包含对 tf-idf 功能的支持。通过 TfidfTransformer 传递矢量化器输出是使用 tf-idf 功能进行在线更新的唯一方法,还是有更优雅的解决方案?

最佳答案

您可以进行“在线”TF-IDF,这与接受的答案中所说的相反。

事实上,每个搜索引擎(例如 Lucene)都这样做。

如果假设内存中有 TF-IDF 向量,什么不起作用。

lucene 等搜索引擎自然会避免将所有数据都保存在内存中。相反,他们一次加载一列(由于稀疏性不是很多)。 IDF 由倒排列表的长度产生。

重点是,您不会您的数据转换为 TF-IDF,然后进行标准余弦相似度计算。

相反,您在计算相似度时使用当前 IDF 权重,使用加权余弦相似度(通常用额外的权重修改,增强项,惩罚条款等)

这种方法基本上适用于任何允许在评估时对属性加权的算法。许多算法都可以,但不幸的是,很少有实现足够灵活。不幸的是,大多数人希望您在训练前将权重乘以数据矩阵。

关于python - 在线版scikit-learn的TfidfVectorizer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24517793/

相关文章:

python - Python 中 int 实例的 int 值存储在哪里?

python - 第二种滤除非黑色像素方式的实现

python - 在 tensorflow GPU 中训练卷积神经网络时出现 "Python has stopped Working"

python - 如何合并2个数组python(类似于SQL Join)

python - 确定 POS-Tagger 的 HMM 模型的准确性

python - 从具有日期索引的多个 csv 文件创建 pandas DataFrame

python - Kmeans 不知道集群的数量?

python - Theano学习与门

machine-learning - 用于潜在语义分析 (LSA) 的奇异值分解 (SVD) 生成的矩阵的含义/含义

java - 我如何在 Java 中访问布朗语料库(又名 NLTK 之外)