通过上面对于文本的处理之后,我们得到了一篇文章中的所有词语的向量表示,这一部分我们着重解决如何通过一篇文章中词语的向量来构建文本的特征向量。
TF-IDF
在构建文本的特征向量的时候,当然我们首先想到的是将所有词语的特征向量求平均值来获取,这种方法本质上是所有的词语对于文章的重要性同等重要,但事实并非如此。在一篇文章中,存在一些关键词,这些关键词往往对于文章中心内容的理解起着关键的作用,显然这些词语应该赋予更大的权重,但如何找出一篇文章中的关键词呢,常用的方法由TF-IDF算法。
一个词语在文章中重要与否取决于两个方面。一方面,对于一篇特定的文章来说,如果一个词语在一篇文章中出现次数较多,那这个词语一定是比较重要的词语。比如在一篇介绍计算机的文章中,“计算机”这个词语出现的频率比较高,那么这个词语是比较重要的。另一方面,对于全部的文章来说,一个词语出现在文章中次数越少,这个词语的重要性越大。比如上面的例子,“中国”这个词语在100篇文章中出现了99次,那么这个词语并不是这篇文章所特有的,也就体现不出这篇文章的特征。相反,“计算机”这个词语在100篇文章中只出现了2词,那么这个词语更能体现出这篇文章的特征。
综上,找出一篇文章中的关键词要综合考虑上面两点因素,而TF-IDF算法正是这么做的。TF(Term Frequency)词频,考虑一篇文章中词语出现的次数多少,出现次数越多越重要。IDF(Inverse Document Frequence)逆文档频率,考虑词语在所有文章出现的比例,出现次数越少越重要。
最终的评价指标为 其中
,+1操作是为了防止词语出现的文章数为0(包含词语的文章数应该不能为0,因为都是通过文章分出来的词,至少也应该为1),这样就得到了每个词语的权重,考虑到不同文章词语数量不同,将权重向量通过一个softmax归一化即可。
在jieba分词中提供了关键词提取函数,sklearn中也提供了tfidfVectorizer函数来实现此算法。
