tfidf包括两部分:tf:词语在文档中出现的次数,idf中的df是在整个语料库中有多少篇文档包含了该词语,其中的i是逆的意思,核心思想是:如果一个词在某篇文档中出现的次数多并且包含该词语的文档少,那么这个词语很重要。如果一个词在很多个文档中都出现,那么说明这个词只是个高频词,没有意义(例如:“的”这个字)。
tfidf有很多变种,可以参考下面图表。
上图的出处:https://rare-technologies.com/pivoted-document-length-normalisation/
gensim中的函数是通过指定字母来确定用哪个公式,
上面是理论方面,实现方面,可以用gensim也可以用sklearn
额外要补充的:
1.gensim里面可以自定义wlocals(也就是tf的函数)和wglobal(也就是idf的函数)
2.gensim里面有pivot和slope,据说可以解决cosine normalize倾向于给短文本赋予更大权重的问题。
slope * old_norm + (1.0 -slope) * pivot
这两个参数有默认值,默认值就挺好的,基本不用动,pivot是如果有corpus或者dictionary的话,会自动设置,而slope是取的一个经典的值0.25。