使用sklearn提取TF-IDF文本特征

TF-IDF统计算法

参考资料

TF-IDF(词频-逆文档频率)算法是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。

对于文本数据,我们要想提取特征,首先要分词,然后提取他的关键词(过滤出现次数最多的停用词),最后将关键词转化为特征向量。
最容易想到的思路,就是找到出现次数最多的词。如果某个词很重要,它应该在这篇文章中多次出现。于是,我们进行"词频"(Term Frequency,缩写为TF)统计。TF指某一个给定的词语在该文件中出现的频率,相当于关于文档对词数(term count)的归一化,以防止它偏向长的文档。


使用sklearn提取TF-IDF文本特征_第1张图片
image.png

如果某个词比较少见,但是它在这篇文章中多次出现,那么它很可能就反映了这篇文章的特性,正是关键词。用统计学语言表达,就是在词频的基础上,要对每个词分配一个"重要性"权重。这个权重叫做"逆文档频率"(Inverse Document Frequency,缩写为IDF),它的大小与一个词的常见程度成反比。


使用sklearn提取TF-IDF文本特征_第2张图片
image.png

IDF的计算建立在一个语料库的基础上。如果一个词越常见,那么分母就越大,逆文档频率就越小越接近0。

最后我们可以通过一个词的TF与IDF值相乘得到这个词的TF-IDF值,该值可以用来衡量这个词的重要程度。


image.png

一个词的TF在不同的文档中不一样,IDF衡量一个词在语料库中的重要程度。

TfidfVectorizer

TfidfVectorizer是sklearn中一个类,用于提取TF-IDF文本特征。

from sklearn.feature_extraction.text import TfidfVectorizer

X_train = ['This is the first document.', 'This is the second document.']
X_test = ['This is the third document.']
vectorizer = TfidfVectorizer()
# 用X_train数据来fit
vectorizer.fit(X_train)
# 得到tfidf的矩阵
tfidf_train = vectorizer.transform(X_train)
tfidf_test = vectorizer.transform(X_test)

tfidf_train.toarray()
  • transform()函数返回的矩阵的储存形式是稀疏矩阵。
  • 使用toarray()函数将得到一个ndarray类型的完整矩阵。
  • 常用参数:

max_df, min_df: 在建立单词表的时候会取df在[min_df, max_df]区间内的单词。使用整数时,表示单词出现的document个数,使用浮点数时,表示出现的document个数再除以总的document个数(即频率)。
ngram_range: 取ngram的范围。N-Gram(有时也称为N元模型)是自然语言处理中一个非常重要的概念,通常在NLP中,人们基于一定的语料库,可以利用N-Gram来预计或者评估一个句子是否合理。

你可能感兴趣的:(使用sklearn提取TF-IDF文本特征)