TF-IDF(termfrequency–inverse document frequency)
- 定义
- 主要思想
- 公式
- TF-IDF的实现
定义
TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。
- TF(term frequency ):词频,指的是在给定的文件中,某一个给定的词语在该文件中出现的次数
- IDF(inverse document frequency):逆向文件频率,这是一个词语“权重”的度量,在词频的基础上,如果一个词在多篇文档中词频较低,也就表示这是一个比较少见的词,但在某一篇文章中却出现了很多次,则这个词IDF值越大,在这篇文章中的“权重”越大。所以当一个词越常见,IDF越低。
主要思想
如果某个词或短语在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。
TF-IDF实际上是TF*IDF,一个词的TF-IDF越高就表示在这篇文章中的重要性越大,越有可能就是文章的关键词。
公式
对一个词语x,
考虑到某一个生僻词在语料库中没有,则分母变为0,为了使得式子有意义,常用的IDF需做一些平滑,使得语料库中没有出现的词也可以得到一个合适的IDF值,常用的平滑公式如下:
它原本是指词x在当前文本的词频,但是这个数字是对词数的归一化,以防止它偏向长的文件,(同一个词语在长文件里可能会比短文件有更高的词数,而不管该词语重要与否)。对于某一特定文件里的词语x来说,它的重要性可表示为:
则TF-IDF可表示为:
TF-IDF的实现
这里介绍两种用scikit-learn包计算TF-IDF的预处理的方法,
CountVectorizer+TfidfTransformer
- CountVectorizer类会将文本中的词语转换为词频矩阵,矩阵中word[ i ][ j ],它表示j词在i类文本下的词频;
- fit_transform(),学习词语词典并返回文档矩阵,矩阵中元素为词语出现的次数
直接用TfidfVectorizer处理
这里选择用TfidfVectorizer来对比赛的数据做处理,接上一篇处理数据的代码,
from sklearn.feature_extraction.text import TfidfVectorizer
tfidf=TfidfVectorizer()
x_train_tfidf=tfidf.fit_transform(x_train['word_seg'])
x_test_tfidf=tfidf.fit_transform(x_test['word_seg'])
print(x_train_tfidf)
print(x_test_tfidf)
x_train_tfidf:
x_test_tfidf: