介绍
SAE提供了效果不错的中文分词服务,于是花了点时间做了个基于TF-IDF的关键字提取算法。
语料库来自语料库在线。
TF-IDF
在把一篇文章分词过后,要从中提取出最能代表文章主题的关键字,最young最simple的办法就是基于词频(TF, term frequency):
$$TF(t, d) = f(t, d)$$
其中$t$为一个单词,$d$为文档,$f(t, d)$为这个单词在文档中出现的频率。
这样带来的问题很显然,即使通过停止词干掉一些频率极高,但对内容毫无贡献的词汇(如“的、地、得”),依然无法排除某些本身频率就很高的词汇。
比如在天朝,“中国”一词在所有文章里都有很高的出现概率,但并不见得所有文章都和天朝相关。
假如有一个语料库,包含了大量具有代表性的文章。如果一个词汇在这个语料库里大量出现,则认为这个词汇本身就是个高频词;
如果一个词汇在语料库里出现频率不高,但在一篇文章里频繁出现,显然这个词汇是这篇文章里特有的。
基于这个想法,就引入了IDF(inverse document frequency):
$$IDF(t, D) = log \frac{N}{ 1 + \|\{d \in D: t \in D\}\| }$$
TF-IDF值,就能用来判断一个词汇是否是一篇文章里的关键字:
$$ TFIDF = w(t) * TF(t, d) * IDF(t, D) $$
这里加入了一个权重函数,按词性对词汇进行过滤:
$$w(t) = \left\{
\begin{array}{l l}
0.8 & t\ is\ v.\ or\ n.\\
0.6 & t\ is\ adv.\ or\ adj.\\
0 & other
\end{array} \right.$$