【基础2】文本分析-TF-IDF

来源:互联网 发布:没有域名需要备案吗 编辑:程序博客网 时间:2024/06/10 11:42

上文中留下了一个问题:

当文本很长的时候,词频向量的维度会很大,下面《水浒传》里的一段:

这吴氏年纪二十五六,是八月十五生的,小名叫做月姐,后来嫁到西门庆家,都顺口叫他月娘。却说这月娘秉性贤能,夫主面上百依百随。房中也有三四个丫鬟妇女,都是西门庆收用过的。
咦...怎么越读越不对劲...这段话好像不是《水浒传》里的,貌似是另一本神书里的,先截这么多吧......

说正经,先分词:

这/ 吴氏/ 年纪/ 二十五/ 六,是/ 八月十五/ 生/ 的,小名/ 叫做/ 月姐,后来/ 嫁到/ 西门庆/ 家,都/ 顺口/ 叫/ 他/ 月娘。却/ 说/ 这/ 月娘/ 秉性/ 贤能,夫主/ 面上/ 百依百随。房中/ 也有/ 三四/ 个/ 丫鬟/ 妇女,都是/ 西门庆/ 收用/ 过/ 的。
将文本生成词频向量:

这2/ 吴氏1/ 年纪1/ 二十五1/ 六1,是1/ 八月十五1/ 生1/ 的2,小名1/ 叫做1/ 月姐1,后来1/ 嫁到1/ 西门庆2/ 家1,都1/ 顺口1/ 叫1/ 他1/ 月娘2。却1/ 说1/ 秉性1/ 贤能1,夫主1/ 面上1/ 百依百随1。房中1/ 也有1/ 三四1/ 个1/ 丫鬟1/ 妇女1,都是1/ 收用1/ 过1/
(2,1,1,1,1,1,1,2,1,1,1,1,1,2,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1)

这只是这个长篇爱情小说的一小小小部分,已经有35维了,随便一节、一章,上千上万维是必须有的。如果这些文本后期用来跑模型、做分析,计算开销会非常大。

而且,这其中有很多像“的”、“吗”、“是”这样的无用词维度,也有很多只出现极少次的词维度,造成了稀疏矩阵和不必要的计算开销。

因此,抓住关键信息,降低词维度,非常重要。如果你还不能切实感觉到,请阅读以下这段话:

要加强领导,明确责任,认真对照相关要求,把目标任务分解到部门、具体到项目、落实到岗位、量化到个人,真正做到以责任促落实,以责任促成效,形成一级抓一级、层层抓落实的工作局面。目前,有个别同志、个别部门,存在一些很不好的现象,即热衷于搞形式主义,以会议落实会议,用文件传达文件。当然,适当的会议、文件是必要的,但光讲空话、打官腔,是远远不够的,只有扎扎实实推动数据工作的深入开展,抓出实效,抓出成绩,才能确保圆满完成今年的目标任务。

我想你在阅读的时候,大脑都在跟你提意见——能不能告诉我核心信息啊?

TF-IDF是最常用的方法,它通过计算每个词的TF-IDF值,筛选出每个文档中最关键一些词。

那么问题来了,TF-IDF是怎么定义“关键”?作为一个文档中的关键词,我想应该同时满足如下2个特征:

  • 特征1:出现次数多,存在感强,这个没毛病;

  • 特征2:作为某文档的关键词,它尽可能只在这一个文档中出现。类似“的”、“是”、“在”...这样的词,存在感强的都感知不到它的存在了,原因就是因为它——不够关键,因此,关键词要尽可能的唯一

TF-IDF(Term Frequency–Inverse Document Frequency),就是平衡这两者的产物,它由两个部分相乘得到:TF × IDF,下面分别介绍一下:

1. TF

  

TF不用说了意思很明显,TF值越大,词的存在感越强,他是将特征1进行量化。

这里注意,我们之前的词频是计算词出现的次数,它这里除了文档总词数作为分母,只是做了一个标准化,因为有的文章长,有的文章短,出现100次的不一定算多,出现3次的不一定就少。有时候也用其他作为分母进行标准化(留个问题,你知道会用哪些么?)
2. IDF

 

计算IDF,我们首先要有一个语料库,可以是关于某个领域的新闻库——可以是聊天记录,也可以是谷歌上亿级的网页文本等等。语料库的作用在于模拟某种语境,当IDF值越大,说明在语境中包含该词的文档树越少,这个词越具有唯一性代表性,某种意义上说,它越关键。它是将特征2进行量化。


注意这里+1的位置,可以有些小变化,在scikit-learn的TfidfTransformer()方法中,如果声明TfidfTransformer(smooth_idf=false),那么IDF的计算就变为:


我们就叫它“不愿smooth的IDF”吧。


最后,将TF与IDF相乘,就可以计算出文档中每个词的TF-IDF值。它综合考虑了一个词的存在感和唯一性。






https://mp.weixin.qq.com/s/VWgxCOl20RMHROP4Tmkz7Q