TF-IDF 算法

TF-IDF算法介绍

基本原理

TF-IDF(term frequency–inverse document frequency,词频-逆向文件频率)是一种用于信息检索(information retrieval)与文本挖掘(textmining)的常用加权技术。\ TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。 字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。\ TF-IDF的主要思想是:如果某个单词在一篇文章中出现的频率高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。

算法

词频(Term Frequency,tf)

词频(TF)是搜索词语在文章中出现的频率。词频(term frequency,tf)指的是某一个给定的词语在该文件中出现的频率。这个数字是对词数(termcount)的标准化,以防止它偏向长的文件。\ (同一个词语在长文件里可能会比短文件有更高的词数,而不管该词语重要与否。)

单词i在文件j中出现的词频公式为:

tfi,j=ni,jknk,j {\displaystyle \mathrm {tf_{i,j}} ={\frac {n_{i,j}}{\sum _{k}n_{k,j}}}}

以上式子中假设

  • 文件dj{\displaystyle d_{j}}中共有k个词语
  • nk,j{\displaystyle n_{k,j}}tk{\displaystyle t_{k}}在文件dj{\displaystyle d_{j}}中出现的次数。
  • 分子ni,j{\displaystyle n_{i,j}}是该词在文件dj{\displaystyle d_{j}}中的出现次数
  • 而分母则是在文件dj{\displaystyle d_{j}}中所有字词的出现次数之和。

逆向文件频率(Inverse Document Frequency,idf)

逆向文件频率(inverse document frequency,idf)是一个词语普遍重要性的度量。某一特定词语的idf,可以由总文件数目除以包含该词语之文件的数目,再将得到的商取对数得到。通常,这个对数取以10为底(记为lg)

idfi=lgD{j:tidj} {\displaystyle \mathrm {idf_{i}} =\lg {\frac {|D|}{|\{j:t_{i}\in d_{j}\}|}}} 其中

  • D|D|:语料库中的文件总数
  • {j:tidj}{\displaystyle |\{j:t_{i}\in d_{j}\}|}:包含词语ti{\displaystyle t_{i}}的文件数目(即ni,j0{\displaystyle n_{i,j}\neq 0}的文件数目)如果词语不在资料中,就导致分母为零,因此一般情况下使用1+1+{j:tidj}1+|{\displaystyle 1+|\{j:t_{i}\in d_{j}\}|}

TF-IDF

tfidf=tfidf {tf-idf=tf*idf}

例子

mysql 全文索引的case,score=tfidfidfscore=tf*idf*idf,且tf不做归一化处理,查找单词是 “database”

数据

id title body score
6 Database, Database, Database database database database 1.0886961221694946
3 Optimizing Your Database In this database tutorial ... 0.36289870738983154
1 MySQL Tutorial This database tutorial ... 0.18144935369491577
2 How To Use MySQL After you went through a ... 0
4 MySQL vs. YourSQL When comparing databases ... 0
5 MySQL Security When configured properly, MySQL ... 0
7 1001 MySQL Tricks 1. Never run mysqld as root. 2. ... 0
8 MySQL Full-Text Indexes MySQL fulltext indexes use a .. 0

说明

共8条数据,其中3条匹配到了“database”,其中id=6的数据共匹配了6次,所以 tf=6{ tf=6}idf=log83=0.42596873216370745idf={\log{\frac {8}{3}}=0.42596873216370745} score=tfidfidf=6log83log83=1.088696164686938 score=tf*idf*idf=6*\log{\frac {8}{3}} *\log{\frac {8}{3}}=1.088696164686938

参考文档

results matching ""

    No results matching ""