TF-IDF

  资讯检索与资讯勘探

Posted by Xiaoran on June 3, 2018

TF-IDF

  • TF 意思是词频 (Term Frequency)
  • IDF 意思是逆文本频率指数 (Inverse Document Frequency)
TF 	= 某词在某文档中出现的次数 / 某文档中的总词数
IDF = log(文档总数 / 包含该词的文档数 + 1) //分母加1 避免分母为0

TF-IDF = TF * IDF

TF-IDF(Term Frequency–Inverse Document Frequency)是一种用于资讯检索与资讯勘探的常用加权技术TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。TF-IDF加权的各种形式常被搜索引擎应用,作为文件与用户查询之间相关程度的度量或评级。除了TF-IDF以外,因特网上的搜索引擎还会使用基于连结分析的评级方法,以确定文件在搜寻结果中出现的顺序。

1、TF-IDF 原理

TF-IDF实际上是:TF * IDF。主要思想是:如果某个词或短语在一篇文章中出现的频率高(即TF高),并且在其他文章中很少出现(即IDF高),则认为此词或者短语具有很好的类别区分能力,适合用来分类。

TF(Term Frequency,词频)表示一个给定词语t在一篇给定文档d中出现的频率。TF越高,则词语t对文档d来说越重要,TF越低,则词语t对文档d来说越不重要。那是否可以以TF作为文本相似度评价标准呢?答案是不行的,举个例子,常用的中文词语如等,在给定的一篇中文文档中出现的频率是很高的,但这些中文词几乎在每篇文档中都具有非常高的词频,如果以TF作为文本相似度评价标准,那么几乎每篇文档都能被命中。

  IDF(Inverse Document Frequency,逆向文件频率)的主要思想是:如果包含词语t的文档越少,则IDF越大,说明词语t在整个文档集层面上具有很好的类别区分能力。IDF说明了什么问题呢?还是举个例子,常用的中文词语如等在每篇文档中几乎具有非常高的词频,那么对于整个文档集而言,这些词都是不重要的。对于整个文档集而言,评价词语重要性的标准就是IDF。

  通俗理解TF-IDF就是:TF刻画了词语t对某篇文档的重要性,IDF刻画了词语t对整个文档集的重要性。

2、例子: 搜索原子能的应用

2.1 词频 (TF)

在某个一共有一千词的网页中原子能应用分别出现了 2 次、35 次 和 5 次,那么它们的词频就分别是 0.002、0.035 和 0.005。 我们将这三个数相加,其和 0.042 就是相应网页和查询原子能的应用相关性的一个简单的度量。概括地讲,如果一个查询包含关键词 w~1~, w~2~, …, w~N~ , 它们在一篇特定网页中的词频分别是: TF~1~, TF~2~, …, TF~N~ , 那么,这个查询和该网页的相关性就是:TF~1~ + TF~2~ + … + TF~N~ 。

2.2 停用词 (Stopwords)

一个漏洞。在上面的例子中,词占了总词频的 80% 以上,而它对确定网页的主题几乎没有用。我们称这种词叫“停用词”,也就是说在度量相关性是不应考虑它们的频率。在汉语中,应删除词还有等等几十个。忽略这些停用词后,上述网页的相似度就变成了0.007,其中原子能贡献了 0.002,应用贡献了 0.005。

2.3 逆文本频率指数 (IDF)

另一个漏洞。在汉语中,应用是个很通用的词,而原子能是个很专业的词,后者在相关性排名中比前者重要。如果一个关键词只在很少的网页中出现,我们通过它就容易锁定搜索目标,它的权重也就应该大。反之如果一个词在大量网页中出现,我们看到它仍然不是很清楚要找什么内容,因此它的权重应该小。

概括地讲,假定一个关键词 w 在 Dw 个网页中出现过,那么 Dw 越大,w的权重越小,反之亦然。在信息检索中,使用最多的权重是“逆文本频率指数”,它的公式为 log(D/Dw) 其中D是全部网页数。

比如,我们假定中文网页数是D=10亿,应删除词在所有的网页中都出现,即Dw=10亿,那么它的IDF=log(10亿/10亿)= log (1) = 0。假如专用词原子能在两百万个网页中出现,即Dw=200万,则它的权重IDF=log(500) =2.7。又假定通用词应用,出现在五亿个网页中,它的权重IDF = log(2)则只有 0.3。也就是说,在网页中找到一个原子能的匹配相当于找到九个应用的匹配。

利用 IDF,上述相关性计算的公式就由词频的简单求和变成了加权求和,即 TF~1~ * IDF~1~ + TF~2~ * IDF~2~ +… + TF~N~ * IDF~N~ 。在上面的例子中,该网页和原子能的应用的相关性为 0.0069,其中原子能贡献了 0.0054,而应用只贡献了0.0015。这个比例和我们的直觉比较一致了。

3、TF-IDF 的实现

  • 基于 Spark1.4.1 ml算法包的 TF-IDF 算法 (Python, Scala)
  • sklearn (Python)