【NLP】TF-IDF

有一个词a,有一个语料D,D中有n篇文档

TF


TF,Term Frequency的缩写,中文为词频,意思是一个词在某一语料库中出现的次数频率,用公式表达就是这样:

a 在 这 篇 语 料 库 中 出 现 的 次 数 语 料 库 的 词 汇 总 数 \frac{a在这篇语料库中出现的次数}{语料库的词汇总数} a


IDF


IDF,Inverse Document Frequency的缩写,中文为逆文档频率,意思是这个词在所有语料中的分布情况,用公式表达:
$ log\frac{语料库文档总数n}{语料库出现这个词的文档数+1} $

TF-IDF


TF-IDF就是把上面两个公式相乘:

TF-IDF = TF * IDF = a 在 这 篇 语 料 库 中 出 现 的 次 数 语 料 库 的 词 汇 总 数 \frac{a在这篇语料库中出现的次数}{语料库的词汇总数} a * $ log\frac{语料库文档总数n}{语料库出现这个词的文档数+1} $

TF-IDF是一个表示某个词在一堆语料中的重要程度的值,这个值:

与一个词在文档中的出现次数成正比,与该词在整个语言中的出现次数成反比。

我们来说一下这个公式的由来以及怎么理解比较好:

现在这个大数据时代,在NLP领域,如果我们需要分类或者其他task

第一步是数据预处理、第二步是特征提取

尤其用机器学习训练模型的时候,特征提取是模型质量的关键

所以我要看特征提取,提取什么呢?

当然是能代表文章的元素,包括词、短语、句子、标点以及其他信息

从词的角度考虑,我们需要提取对文章表达贡献度大的词

我们以一个分类任务为例

分类的依据当然是找能区别出不同文档类别的元素(字、词、短语、句等),这些就是特征

比如这里用有几篇文章,A篇讲中国足球,B篇讲中国篮球。。

首先预处理我们会分词,并去掉虚词(比如的,了)

我们会想到,一个词在文章出现的次数越多,就越有代表性,这就是词频

我们又发现,A中出现最多的词两个词是中国、足球,B中出现最多的是中国、篮球,显然我们应该通过足球和篮球这两个词区分A和B,这时,IDF发挥了作用:

根据$ log\frac{语料库文档总数n}{语料库出现这个词的文档数+1} $ ,也就是这个词分布越广泛,区分度越小

如果一个语料的每篇文章都出现这个词,虽然它的TF会很高,但很显然它是不重要的,idf就把它的重要性降低了,而且分布越光,重要性越低。。

应用在NLP的task:


搜索引擎

在搜索引擎中,通常使用TF-IDF模型计算查询串q(由关键词w1、w2、… wk组成)和文档d之间的匹配度:
TF-IDF(q, d) = sum{i=1,2,…k | TF(wi, d)* IDF(wi)}
可见,如果关键词wi在一篇文档中出现的频率很高,同时在其他文档中很少出现,则该词具有很好的区分能力;

自动提取关键词

比如我们要想提取一篇新闻的关键词,先要对该新闻进行分词,然后根据TF-IDF计算每个单词的权重,并将权重最大的N个单词作为此新闻的关键词。

找出相似文章

计算大概过程如下(更详细内容可参考这里):

使用TF-IDF算法,找出两篇文章的关键词;
每篇文章各取出若干个关键词(比如20个),合并成一个集合,计算每篇文章对于这个集合中的词的词频(为了避免文章长度的差异,可以使用相对词频);
生成两篇文章各自的词频向量;
计算两个向量的余弦相似度,值越大就表示越相似。

自动摘要

2007年,美国学者的论文《A Survey on Automatic Text Summarization》(Dipanjan Das, Andre F.T. Martins, 2007)总结了目前的自动摘要算法。其中很重要的一种就是词频统计,这种方法最早出自1958年的IBM公司科学家H.P. Luhn的论文《The Automatic Creation of Literature Abstracts》。

Luhn博士认为,文章的信息都包含在句子中,有些句子包含的信息多,有些句子包含的信息少。“自动摘要"就是要找出那些包含信息最多的句子。句子的信息量用"关键词"来衡量。如果包含的关键词越多,就说明这个句子越重要。Luhn提出用"簇”(cluster)表示关键词的聚集。所谓"簇"就是包含多个关键词的句子片段。
只要关键词之间的距离小于"门槛值",它们就被认为处于同一个簇之中。Luhn建议的门槛值是4或5。也就是说,如果两个关键词之间有5个以上的其他词,就可以把这两个关键词分在两个簇。
下一步,对于每个簇,都计算它的重要性分值。
比如簇一共有7个词,其中4个是关键词。因此,它的重要性分值等于 ( 4 x 4 ) / 7 = 2.3。
然后,找出包含分值最高的簇的句子(比如5句),把它们合在一起,就构成了这篇文章的自动摘要。
PS:Luhn的这种算法后来被简化,不再区分"簇",只考虑句子包含的关键词。

More


缺点

  • 单纯以"词频"衡量一个词的重要性,不够全面,有时重要的词可能出现次数并不多

  • 种算法无法体现词的位置信息,出现位置靠前的词与出现位置靠后的词,都被视为重要性相同,这是不正确的

  • 看不到语义或者结构信息

优化

我们可以根据我们的task在公式中引入一些自己设定的权重因子,比如在做情感分析时,我们更关注包含能体现情感特征的词或标点,我们可以在公式中引入情感倾向权重,从而在考虑词频和词分布的同时,更偏向于选出带有情感元素的词;

总结


总而言之,我们需要知道的是

1、TF-IDF表示这个词在一个语料库的重要程度,(在文本分类任务中做区分的特征)

2、公式:

TF-IDF = TF * IDF = a 在 这 篇 语 料 库 中 出 现 的 次 数 语 料 库 的 词 汇 总 数 \frac{a在这篇语料库中出现的次数}{语料库的词汇总数} a * $ log\frac{语料库文档总数n}{语料库出现这个词的文档数+1} $

3、与一个词在文档中的出现次数成正比,与该词在整个语言中的出现次数成反比。

参考


http://www.52nlp.cn/forgetnlp4
http://www.ruanyifeng.com/blog/2013/03/tf-idf.html

你可能感兴趣的:(【NLP】)