前言
文本处理中很多时候会需要给每个单词分配权重,有了权重以便后续进一步处理。常用的算法主要是TF-IDF。
TF
TF,即Term Frequency。我们可以将文档看成由若干词(term)组成,那么文档中某个term出现的频率就是TF。词频和词权重存在关系,可以用来作为词权重的衡量因素之一。
IDF
IDF,即Inverse Document Frequency。TF算法存在一个问题:比如某文档中多个term出现的次数相同,则不好判别他们之间哪个更重要。因此又引入逆文档频率(IDF),某个term的IDF可定为:
IDF = log(\frac{T}{t})
其中,T为统计样本中总文档数,t为包含某term的文档数。由此说明包含某term的文档数越多,该term越不重要。
获取IDF方式
其实有几种方式来统计IDF。
* 自己收集样本库进行统计。
* 第三方统计好的IDF表。
* 借助百度或谷歌搜索引擎,这种方式不准确。随便取个m值假设为总文档,再搜索某个term得到n条结果,则认为n除以m即为IDF。
TF-IDF
有了前面的TF和IDF就可以通过他们一起决定某个Term的权重。定义TF-IDF为TF乘以IDF。
实现代码
https://github.com/sea-boat/nlp_lab/tree/master/tf_idf
————-推荐阅读————
——————广告时间—————-
公众号的菜单已分为“分布式”、“机器学习”、“深度学习”、“NLP”、“Java深度”、“Java并发核心”、“JDK源码”、“Tomcat内核”等,可能有一款适合你的胃口。
鄙人的新书《Tomcat内核设计剖析》已经在京东销售了,有需要的朋友可以购买。感谢各位朋友。
欢迎关注: