Daya Jin's Blog Python and Machine Leaning

TF-IDF

2019-04-20

NLP

概述

TFIDF全称为词频-逆文档频率(Term Frequency-Inverse Document Frequency),最早用于搜索引擎中的匹配打分,在比赛中也可用来提取特征。

TF(Term Frequency)指的是单词在当前文档中出现的频数:

\[tf(t,d)=n_{t,d}\]

其中$t$表示某个单词term,$d$表示当前文档document,$n$表示出现次数。不难看出若某个文档特别长,那么每个单词的TF都会变大,为了消除这种影响,将TF归一化,除以文档总词数:

\[tf(t,d)=\frac{n_{t,d}}{\sum_{t'\in{d}}n_{t',d}}\]

TF表征了文档中各单词的归一化频率,该值越大,说明单词在文档中的占比越大。

IDF(Inverse Document Frequency)指的是包含某个词的文档数所占总文档数的比例倒数:

\[df(t,D)=d_{t} \\ idf(t,D)=\frac{N_{d}}{df(t,D)} \\\]

其中$D$表示整个文档集,$df(t,D)$表示某一单词的文档频数(document frequency),即包含某一单词的文档数量;$N_{d}$表示文档总数。为了避免除零,对分母$+1$,且为了避免$idf$值过大,取对数:

\[idf(t,D)=\log\frac{N_{D}}{df(t,D)+1}\]

可以看出DF值表征了单词在所有文档库中的常见程度,如果一个单词要能体现出文档的特征,那么应该同时满足TF值大与DF值小,即在某一文档中经常出现,但是在其他文档中不常出现。将DF值取倒数,那么得到TF-IDF权重的计算方式:

\[tfidf(t,d,D)=tf(t,d)\times{idf(t,D)}\]

简单实现见此


上一篇 PySpark Start

下一篇 Attention

Content