我希望使用 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/