TF-IDF(term frequency–inverse document frequency,词频-逆文档频率)是一种用于信息检索(information retrieval)与文本挖掘(text mining)的常用加权技术。
TF-IDF是一种统计方法,用以评估一字词(Token)对于一个文件集或一个语料库中的其中一份文件的重要程度。
- 字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。
- 一个词语在 一篇文章 中出现次数越多, 同时在 所有文档 中出现次数越少, 越能够代表该文章,越能与其它文章区分开来。
TF-IDF的主要思想是:如果某个单词在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。
背后的假设:查询关键字中的单词应该相对于其他单词更加重要,而文档的重要程度,也就是相关度,与单词在文档中出现的次数成正比。
比如,“Car” 这个单词在文档 A 里出现了 5 次,而在文档 B 里出现了 20 次,那么 TF 计算就认为文档 B 可能更相关。
词频表示词条(关键字)在文本中出现的频率。
由于文章有长短之分,为了便于不同文章的比较,于是做"词频"标准化:
-
词频(TF) = 某个词在文章中的出现次数 / 文章总词数。
-
或者 词频(TF) = 某个词在文章中的出现次数 / 拥有最高词频的词的次数。
-
这个数字通常会被归一化(一般是词频除以文章总词数), 以防止它偏向长的文件。因为同一个词语在长文本里通常 / 可能会比短文本有更高的词频,而不管该词语重要与否。
-
某一类 == 一篇文章
-
词条 == token == 字或词语
常用的计算公式如下:
是否可以以TF作为文本相似度评价标准呢?
- 答案是不行的,举个例子,常用的中文词语如“我”,“了”,“是”等,在给定的一篇中文文档中出现的频率是很高的,但这些中文词几乎在每篇文档中都具有非常高的词频,如果以TF作为文本相似度评价标准,那么几乎每篇文档都能被命中。
1 信息检索工作者很快就发现,仅有 TF 不能比较完整地描述文档的相关度。
2 因为语言的因素,有一些单词可能会比较自然地在很多文档中反复出现,比如英语中的 “The”、“An”、“But” 等等。这些词大多起到了链接语句的作用,是保持语言连贯不可或缺的部分。
3 然而,如果我们要搜索 “How to Build A Car” 这个关键词,其中的 “How”、“To” 以及 “A” 都极可能在绝大多数的文档中出现,这个时候 TF 就无法帮助我们区分文档的相关度了
- 注意到:一些通用的词语对于主题并没有太大的作用, 反倒是一些出现频率较少的词才能够表达文章的主题, 所以单纯使用是TF不合适的。
- 权重的设计必须满足:一个词预测主题的能力越强,权重越大,反之,权重越小。
- 所有统计的文章中,一些词只是在其中很少几篇文章中出现,那么这样的词对文章的主题的作用很大,这些词的权重应该设计的较大。IDF就是在完成这样的工作。
背后的假设: “惩罚”(Penalize)那些出现在太多文档中的单词。
逆向文件频率 (IDF) :某一特定词语的IDF,可以由总文件数目除以包含该词语的文件的数目,再将得到的商取对数得到。
如果包含词条 t 的文档越少, IDF越大,则说明词条具有很好的类别区分能力。
常用 的计算公式如下
其中,|D| 是语料库中的文件总数。 |{j:ti∈dj}| 表示包含词语 ti 的文件数目(即 ni,j≠0 的文件数目)。如果该词语不在语料库中,就会导致分母为零,因此一般情况下让分母 + 1。
- 如果一个词越常见,那么分母就越大,逆文档频率就越小越接近0。分母之所以要加1(平滑因子),是为了避免分母为0(即所有文档都不包含该词)。
- log表示对得到的值取对数,底数为:10。
其他版本计算公式:分母少了平滑因子,1移到log的外面
- 举个例子,常用的中文词语如“我”,“了”,“是”等停用词在每篇文档中几乎具有非常高的词频,那么对于整个文档集而言,这些词都是不重要的。
- 对于整个文档集而言,评价词语重要性的标准就是IDF。
- 语料库的文档总数实际上是一个词分布的可能性大小,n篇文档,有n种可能。
- 包含词ti的文档数m,表示词ti的真实分布有m个“可能”。
- 那么log(n/m) = log(n) - log(m)就可以表示词ti在m篇文档中的出现,导致的词ti分布可能性的减少(即信息增益),这个值越小,表示词ti分布越散,我们认为一个词越集中出现在某一类文档,它对这类文档的分类越有贡献,那么当一个词分布太散了,那他对文档归类的作用也不那么大了。
主要思想是:如果某个词或短语在一篇文章中出现的频率高(即TF高),并且在其他文章中很少出现(即IDF高),则认为此词或者短语具有很好的类别区分能力,适合用来分类。
某一特定文件内的高词语频率,以及该词语在整个文件集合中的低文件频率,可以产生出高权重的TF-IDF。因此,TF-IDF倾向于过滤掉常见的词语,保留重要的词语。
- 可以看到,TF-IDF与一个词在文档中的出现次数成正比,与该词在整个语料库中的出现次数成反比。
- 所以,自动提取关键词的算法就很清楚了,就是计算出文档的每个词的TF-IDF值,然后按降序排列,取排在最前面的几个词。
简而言之,TF刻画了词语t对某篇文档的重要性,IDF刻画了词语t对整个文档集的重要性。
- TF-IDF算法的优点是简单快速,结果比较符合实际情况。
- 一个词的重要程度跟它在文章中出现的次数成正比,跟它在语料库出现的次数成反比。
- 这种计算方式能有效避免常用词对关键词的影响,提高了关键词与文章之间的相关性。
没有考虑词语的语义信息,无法处理一词多义与一义多词的情况。
- 单纯以"词频"衡量一个词的重要性,不够全面,有时重要的词可能出现次数并不多。
- 而且,这种算法无法体现词的位置信息,出现位置靠前的词与出现位置靠后的词,都被视为重要性相同,这是不正确的。
一种解决方法: 对全文的第一段和每一段的第一句话,给予较大的权重。
-
TF-IDF 采用文本逆频率 IDF 对 TF 值加权取权值大的作为关键词,但 IDF 的简单结构并不能有效地反映单词的重要程度和特征词的分布情况,使其无法很好地完成对权值调整的功能,所以 TF-IDF 算法的精度并不是很高,尤其是当文本集已经分类的情况下。
-
在本质上 IDF 是一种试图抑制噪音的加权,并且单纯地认为文本频率小的单词就越重要,文本频率大的单词就越无用。这对于大部分文本信息,并不是完全正确的。IDF 的简单结构并不能使提取的关键词, 不能十分有效地反映单词的重要程度和特征词的分布情况,使其无法很好地完成对权值调整的功能。尤其是在同类语料库中,这一方法有很大弊端,往往一些同类文本的关键词被盖。
TF-IDF算法实现简单快速,但是仍有许多不足之处:
-
(1)没有考虑特征词的位置因素对文本的区分度,词条出现在文档的不同位置时,对区分度的贡献大小是不一样的。
-
(2)按照传统TF-IDF,往往一些生僻词的IDF(逆文档频率)会比较高、因此这些生僻词常会被误认为是文档关键词。
-
(3)传统TF-IDF中的IDF部分只考虑了特征词与它出现的文本数之间的关系,而忽略了特征项在一个类别中不同的类别间的分布情况。
-
(4)对于文档中出现次数较少的重要人名、地名信息提取效果不佳。
TFIDF算法是建立在这样一个假设之上的:对区别文档最有意义的词语应该是那些在文档中出现频率高,而在整个文档集合的其他文档中出现频率少的词语,所以如果特征空间坐标系取TF词频作为测度,就可以体现同类文本的特点。另外考虑到单词区别不同类别的能力,TF-IDF法认为一个单词出现的文本频数越小,它区别不同类别文本的能力就越大。因此引入了逆文本频度IDF的概念,以TF和IDF的乘积作为特征空间坐标系的取值测度,并用它完成对权值TF的调整,调整权值的目的在于突出重要单词,抑制次要单词。但是在本质上IDF是一种试图抑制噪声的加权,并且单纯地认为文本频率小的单词就越重要,文本频率大的单词就越无用,显然这并不是完全正确的。IDF的简单结构并不能有效地反映单词的重要程度和特征词的分布情况,使其无法很好地完成对权值调整的功能,所以TF-IDF法的精度并不是很高。
此外,在TFIDF算法中并没有体现出单词的位置信息,对于Web文档而言,权重的计算方法应该体现出HTML的结构特征。特征词在不同的标记符中对文章内容的反映程度不同,其权重的计算方法也应不同。因此应该对于处于网页不同位置的特征词分别赋予不同的系数,然后乘以特征词的词频,以提高文本表示的效果。
TF-IDF 算法主要适用于英文
中文首先要分词,分词后要解决多词一义,以及一词多义问题,这两个问题通过简单的tf-idf方法不能很好的解决。
于是就有了后来的词嵌入方法,用向量来表征一个词。
- 搜索引擎
- 关键词提取
- 文本相似度计算
- 文本摘要
- 文本分类
很多人注意到 TF 的值在原始的定义中没有任何上限。虽然我们一般认为一个文档包含查询关键词多次相对来说表达了某种相关度,但这样的关系很难说是线性的。拿我们刚才举过的关于 “Car Insurance” 的例子来说,文档 A 可能包含 “Car” 这个词 100 次,而文档 B 可能包含 200 次,是不是说文档 B 的相关度就是文档 A 的 2 倍呢?其实,很多人意识到,超过了某个阈值之后,这个 TF 也就没那么有区分度了。
**用 Log,也就是对数函数,对 TF 进行变换,就是一个不让 TF 线性增长的技巧。**具体来说,人们常常用 1+Log(TF) 这个值来代替原来的 TF 取值。在这样新的计算下,假设 “Car” 出现一次,新的值是 1,出现 100 次,新的值是 5.6,而出现 200 次,新的值是 6.3。很明显,这样的计算保持了一个平衡,既有区分度,但也不至于完全线性增长。
经典的计算并没有考虑 “长文档” 和“短文档”的区别。一个文档 A 有 3,000 个单词,一个文档 B 有 250 个单词,很明显,即便 “Car” 在这两个文档中都同样出现过 20 次,也不能说这两个文档都同等相关。对 TF 进行 “标准化”(Normalization),特别是根据文档的最大 TF 值进行的标准化,成了另外一个比较常用的技巧。
**第三个常用的技巧,也是利用了对数函数进行变换的,是对 IDF 进行处理。**相对于直接使用 IDF 来作为 “惩罚因素”,我们可以使用 N+1 然后除以 DF 作为一个新的 DF 的倒数,并且再在这个基础上通过一个对数变化。这里的 N 是所有文档的总数。这样做的好处就是,第一,使用了文档总数来做标准化,很类似上面提到的标准化的思路;第二,利用对数来达到非线性增长的目的。
以上就是本篇文章【【NLP学习笔记】TF-IDF】的全部内容了,欢迎阅览 ! 文章地址:http://dfvalve.xrbh.cn/news/3744.html 资讯 企业新闻 行情 企业黄页 同类资讯 首页 网站地图 返回首页 迅博思语资讯移动站 http://keant.xrbh.cn/ , 查看更多