有一个词a,有一个语料D,D中有n篇文档
TF,Term Frequency的缩写,中文为词频,意思是一个词在某一语料库中出现的次数频率,用公式表达就是这样:
a 在 这 篇 语 料 库 中 出 现 的 次 数 语 料 库 的 词 汇 总 数 \frac{a在这篇语料库中出现的次数}{语料库的词汇总数} 语料库的词汇总数a在这篇语料库中出现的次数
IDF,Inverse Document Frequency的缩写,中文为逆文档频率,意思是这个词在所有语料中的分布情况,用公式表达:
$ log\frac{语料库文档总数n}{语料库出现这个词的文档数+1} $
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就把它的重要性降低了,而且分布越光,重要性越低。。
在搜索引擎中,通常使用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的这种算法后来被简化,不再区分"簇",只考虑句子包含的关键词。
单纯以"词频"衡量一个词的重要性,不够全面,有时重要的词可能出现次数并不多
种算法无法体现词的位置信息,出现位置靠前的词与出现位置靠后的词,都被视为重要性相同,这是不正确的
看不到语义或者结构信息
我们可以根据我们的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