TF-IDF算法是关键词提取算法中基础,并且有效的一种算法,实现简单效果比较明显,在使用中非常广泛。
假设现在有一批“短文本“,比如很多条一句话的新闻。现在需要提取这些一句话新闻的关键词。我们可以采取tf-idf算法来实现。TF-IDF(term frequency - inverse document frequency) 是一种统计方法。可以用来评估一个词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数呈正比增加,但同时也会随着它在语料库中出现的频率呈反比下降。
TF-IDF具体算法如下:
TFIDFi,j = TFi,j * IDFi 其中TFIDF i,j 是指词i 相对于文档j的重要性值。
tf i,j 指的是某个给定的词语在指定文档中出现的次数占比。即给定的词语在该文档中出现的频率。这个数字是对term count的归一化,防止它偏向长文档。计算公式为:
i,j = n i,j / sum (n k,j) 其中 ni,j 是这个词在d j 中出现的次数。 sum (n k,j) 是在文件d j 中所有的字词出现的次数和。
idf i 是指词 i 的你想文件频率。使用总文档数据除以包含指定词语的文档的数目。 再降得到的商取对数。 这是一种度量词语重要性的指标。 计算公式为:
idf i = log( |D| / |{j: t i 属于d j}| ) 其中|D|为语料库中的文档数。 |{j: t i 属于d j}| 为包含词语t i 的文档数目。
TF-IDF 算法会倾向于选出某一特定文档内的高频词语,同时该词语在整个文档集合中分布是比较集中的。因此,TF-IDF倾向于过滤掉常见的词语,保留“独有”词语。但是这也造成了tf-idf的缺陷。 因为IDF的主要思想是:如果包含词条t的文档越少,也就是n越小,idf越大,则说明词条t 具有很好的类别区分能力。如果某一文档C中包含词条t的文档数为m, 而其他类包含t的文档总数为k,显然所有包含t的文档数n = m + k, 当m大的时候,n也大,按照IDF公式得到的IDF的值会小,就说明该词条t 类别区分能力不强。但实际上,如果一个词条在一个类的文档中频繁出现,则说明该词条能够很好地代表这个类的文本特征,这样的词条应该给它们赋予较高的权重,并选来作为该类文本的特征词,以区别于其他类的文档。比如对于如下几个短文本:
1、鲜花多少钱?
2、白百合多少钱?
3、月季多少钱?
4、香蕉多少钱?
如果按照TF-IDF算法,鲜花、香蕉这些主体词会成为关键词,但是从这些语句的总体来看,他们又都属于询问价格的类型,所以“多少钱”应该成为关键词。这就是IDF的不足之处。
改进的方法可以通过改变文档结构,比如将上述短文本归并为一个文档,这样就可以在增加TF值的同时,也增加IDF值。但是这样就会增加模型的计算成本,需要大量的人为经验加入其中。