在线版本的scikit-learn的TfidfVectorizer

时间:2014-07-01 19:22:32

标签: python machine-learning nlp scikit-learn vectorization

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

2 个答案:

答案 0 :(得分:3)

从本质上讲,您不能以在线方式使用TF IDF,因为所有过去功能的IDF将随着每个新文档而改变 - 这意味着将重新访问并重新培训所有以前的文档,这将不再是在线。

可能有一些近似值,但您必须自己实现它们。

答案 1 :(得分:2)

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

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

假设你在内存中有TF-IDF 向量,那么什么是行不通的。

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

关键是,你没有数据转换成TF-IDF,然后进行标准余弦相似性。

相反,您在使用加权余弦相似度计算相似度时使用当前 IDF 权重 (通常通过额外加权修改,提升术语) ,惩罚条款等。)

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