TF-IDF原理及应用

1. 什么是TF-IDF

TF-IDF(Term Frequency-Inverse Document Frequency,
词频-逆文档频率),是一种用于资讯检索与资讯探勘的常用加权技术。TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降

词频 (term frequency, TF) 指的是某一个给定的词语在该文件中出现的次数。这个数字通常会被归一化(一般是词频除以文章总词数), 以防止它偏向长的文件。(同一个词语在长文件里可能会比短文件有更高的词频,而不管该词语重要与否。)

逆文档频率(Inverse Document Frequency,IDF) 指的是文件总数和某个词语出现文件数之比。

TF-IDF 就是TF和IDF的乘积。

TF是一个词语在一篇文章中的出现次数,IDF是一个词语在所有文档中出现次数的倒数,一个词语在一篇文档中出现次数越多, 同时在所有文档中出现次数越少, 越能够代表该文章,所以二者相乘的TF-IDF就可以用来衡量一个词在一篇文档中的重要性。

对于语料库D中给定的文档d里的词项t,有:

t f ( t , d ) = ( t 在 d 中 出 现 的 次 数 ) / ( d 的 长 度 ) tf(t, d) = (t在d中出现的次数)/(d的长度) tf(t,d)=(td)/(d)

i d f ( t , D ) = l o g ( 文 档 数 ) / ( 包 含 t 的 文 档 数 ) idf(t, D) = log(文档数)/(包含t的文档数) idf(t,D)=log()/(t)

t f i d f ( t , d , D ) = t f ( t , d ) × i d f ( t , D ) tfidf(t, d, D) = tf(t, d)\times idf(t, D) tfidf(t,d,D)=tf(t,d)×idf(t,D)

2. 用TF-IDF找到文档的主题

认为在一篇文档中某个词的TF-IDF值越大,这个词就越能代表这篇文档。

  1 from sklearn.feature_extraction.text import TfidfVectorizer
  2
  3 if __name__ == "__main__":
  6     docs = ["The faster Harry got to the store, the faster and faster Harry would get home."]
  7     docs.append("Harry is hairy and faster than Jill.")
  8     docs.append("Jill is not as hairy as Harry.")
  9     corpus = docs
 10     vectorizer = TfidfVectorizer(min_df=1)
 11     model = vectorizer.fit_transform(corpus)
 12     print(vectorizer.get_feature_names())
 13     print(model.todense().round(2))
~

这是一段使用sklearn来计算文档TF-IDF的代码,结果如下:
TF-IDF原理及应用_第1张图片
根据TF-IDF的数值可以看到,这种方法认为第一、二个句子中"the"这个词的最重要,而第三个句子认为"as"这个词最重要,但是在常识上我们知道这两个词是不能够代表这三个句子的。这种常见的但对短语而言承载实际意义很少的词被称为“停用词”,在实际用的时候回去掉的,或者当语料足够多的情况下因为它们在每一个文档中都大量存在,所以TF-IDF分数会变小。

3. 用TF-IDF的向量计算两个文档的相关度

我们已经得到了每篇文档使用TF-IDF表示的向量,之后只要对两个向量做点乘就可以得到对应的两篇文档的相关性了。

你可能感兴趣的:(NLP,自然语言处理,机器学习,深度学习)