信息检索是当前应用十分广泛的一种技术,论文检索、搜索引擎都属于信息检索的范畴。在搜索引擎等实际应用中广泛使用的是tf-idf模型。

1 TF-IDF模型

tf-idf模型的主要思想是:如果词w在一篇文档d中出现的频率高,并且在其他文档中很少出现,则认为词w具有很好的区分能力,适合用来把文章d和其他文章区分开来。该模型主要包含了两个因素:

  1. 词w在文档d中的词频tf(Term Frequency),即词w在文档d中出现次数count(w,d)和文档d中总词数size(d)的比值:tf(w,d) = count(w,d)/size(d)
  2. 词w在整个文档集合中的逆向文档频率idf(Inverse Document Frequency),即文档总数n与词w所出现文件数docs(w,D)比值的对数:idf = log(n/docs(w,D))

tf-idf模型根据tf和idf为每一个文档d和由关键词w[1]…w[k]组成的查询串q计算一个权值,用于表示查询串q与文档d的匹配度:

tf-idf(q,d)
= sum{ i = 1..k | tf-idf(w[i],d) }
= sum{ i = 1..k | tf(w[i],d)*idf(w[i]) }

2 信息检索问题的概率视角

直观上看,tf描述的是文档中词出现的频率;而idf是和词出现文档数相关的权重。我们比较容易定性地理解tf-idf的基本思想,但具体到tf-idf的一些细节却并不是那么容易说清楚为什么。比如:

  • 为什么tf是count(w,d)/size(d)?能不能是log(count(w,d)/size(d))等其他形式?
  • 为什么idf是一个log形式?
  • 为什么tf和idf之间是乘积关系,而不是加法或指数关系?
  • 为什么多个关键词的tf-idf值是加法关系,而不是乘法或者指数关系?
  • 除了tf-idf值,Google还会计算网页的PageRank值,二者相乘得到最后的权值,为什么是乘法,而不是加法或指数?

据说,最初甚至tf-idf的提出者自己也没有对诸如“为什么idf是log形式”这个问题给出有力的解释,虽然后来有人从信息论的角度对idf的log形式给出了令人信服的解释,但是剩下的其他一些疑问仍然存在。如果说向量模型的用向量夹角来表示匹配度概念还有一定的理论基础,那么用tf-idf来表达匹配度就有点“与其说是科学,不如说是艺术”的味道。推荐阅读:TF-IDF模型的概率解释

3 TF-IDF实现自动提取关键词

这个问题涉及到数据挖掘、文本处理、信息检索等很多计算机前沿领域,但是出乎意料的是,有一个非常简单的经典算法,可以给出令人相当满意的结果。它简单到都不需要高等数学,普通人只用10分钟就可以理解,这就是TF-IDF算法。

让我们从一个实例开始。假定现在有一篇长文《中国的蜜蜂养殖》,我们准备用计算机提取它的关键词。

一个容易想到的思路,就是找到出现次数最多的词。如果某个词很重要,它应该在这篇文章中多次出现。于是,我们进行“词频”(Term Frequency,缩写为TF)统计。

结果你肯定猜到了,出现次数最多的词是的、是、在这一类词。它们叫做“停用词”(stop words),表示对找到结果毫无帮助、必须过滤掉的词。假设我们把它们都过滤掉了,只考虑剩下的有实际意义的词。这样又会遇到了另一个问题,我们可能发现“中国”、“蜜蜂”、“养殖”这三个词的出现次数一样多。这是不是意味着,作为关键词,它们的重要性是一样的?

显然不是这样。因为“中国”是很常见的词,相对而言“蜜蜂”和“养殖”不那么常见。如果这三个词在一篇文章的出现次数一样多,有理由认为“蜜蜂”和“养殖”的重要程度要大于“中国”。也就是说,在关键词排序上面,“蜜蜂”和“养殖”应该排在“中国”的前面。所以,我们需要一个重要性调整系数,衡量一个词是不是常见词。如果某个词比较少见,但是它在这篇文章中多次出现,那么它很可能就反映了这篇文章的特性,正是我们所需要的关键词。

用统计学语言表达,就是在词频的基础上,要对每个词分配一个“重要性”权重。最常见的词(的、是、在)给予最小的权重,较常见的词(中国)给予较小的权重,较少见的词(蜜蜂、养殖)给予较大的权重。这个权重叫做“逆文档频率”(Inverse Document Frequency,缩写为IDF),它的大小与一个词的常见程度成反比。

知道了“词频”(TF)和“逆文档频率”(IDF)以后,将这两个值相乘,就得到了一个词的TF-IDF值。某个词对文章的重要性越高,它的TF-IDF值就越大。所以,排在最前面的几个词,就是这篇文章的关键词。

除了自动提取关键词,TF-IDF算法还可以用于许多别的地方。比如信息检索,对于每个文档,都可以分别计算一组搜索词(中国、蜜蜂、养殖)的TF-IDF,将它们相加,就可以得到整个文档的TF-IDF。这个值最高的文档就是与搜索词最相关的文档。

TF-IDF算法的优点是简单快速,结果比较符合实际情况。缺点是,单纯以“词频”衡量一个词的重要性,不够全面,有时重要的词可能出现次数并不多。而且,这种算法无法体现词的位置信息,出现位置靠前的词与出现位置靠后的词,都被视为重要性相同,这是不正确的。(一种解决方法是,对全文的第一段和每一段的第一句话,给予较大的权重。)

转载自点击打开链接

深入浅出TF-IDF模型相关推荐

  1. 文本特征抽取的向量空间模型(VSM)和TF/IDF方法

    文本特征抽取 两组小说,一组是爱情的,另一组是科幻的.我们能否用支持向量机训练一个模型,用来识别小说类型呢? 这个并不容易.因为支持向量机这类机器学习算法只能接受数学里面的向量作为输入.如果用它来做文 ...

  2. 关键词提取算法—TF/IDF算法

    关键词提取算法一般可分为有监督学习和无监督学习两类. 有监督的关键词提取方法可以通过分类的方式进行,通过构建一个较为完善的词表,然后判断每个文档与词表中的每个词的匹配程度,以类似打标签的方式,达到关键 ...

  3. 使用lingpipe自然语言处理包进行文本分类/** * 使用 lingpipe的tf/idf分类器训练语料 * * @author laigood */ public class trai

    /**  * 使用 lingpipe的tf/idf分类器训练语料  *   * @author laigood  */ public class traintclassifier { //训练语料文件 ...

  4. tf-idf词向量和bow_使用词袋Bow和TF IDF进行多标签分类

    tf-idf词向量和bow 1.加载数据 (1. Load the data) For this study, we are using Kaggle data for Toxic Comment C ...

  5. 搜索引擎:文本分类——TF/IDF算法

    原理 TFIDF的主要思想是:如果某个词或短语在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类.TFIDF实际上是:TF * IDF,TF ...

  6. tf/idf_Neo4j:带密码的TF / IDF(和变体)

    tf/idf 几周前,我写了一篇博客文章,介绍了如何使用scikit-learn在HIMYM成绩单上运行TF / IDF,以按情节找到最重要的短语,然后我很好奇在Neo4j中很难做到. 我首先将Wik ...

  7. Neo4j:带密码的TF / IDF(和变体)

    几周前,我写了一篇博客文章,介绍了如何使用scikit-learn在HIMYM成绩单上运行TF / IDF,以按情节找到最重要的短语,然后我很好奇在Neo4j中很难做到. 我首先将Wikipedia的 ...

  8. scitkit-learn:计算机科学论文的TF / IDF和余弦相似度

    几个月前,我下载了数千篇计算机科学论文的元数据,这样我就可以尝试编写一个迷你推荐引擎来告诉我接下来应该读什么论文. 由于我没有任何人可以阅读每篇论文的数据,因此排除了协作过滤方法,所以我认为我可以尝试 ...

  9. 随笔_从《芳华》影评到TF/IDF算法

     前两天看好多<芳华>的影评说:为什么好人没好报?于是感叹一堆世态炎凉,人性丑陋什么的.我觉得这问题是:为什么中央空调(对谁都温暖)往往不被看好.  先说说TF/IDF算法,这是一种信息处 ...

  10. 【笔记】手敲版 TF IDF

    注1: 1.  涉及计算向向量夹角  [笔记]向量点乘(内积)和叉乘(外积.向量积):对两个向量执行点乘运算,是对这两个向量对应位一一相乘之后求和的操作,点乘的结果是一个标量:叉乘结果是一个向量,它垂 ...

最新文章

  1. 配置kickstart脚本--图形篇
  2. mysql消除重复行的关键字_MySQL 消除重复行的一些方法
  3. 对vuex的一点理解
  4. 错误 LINK : fatal error LNK1158: 无法运行“rc.exe”
  5. 经典项目|手撸一个高质量RPC框架
  6. .NET Core+Selenium+Github+Travis CI =amp;gt; SiteHistory
  7. Chrome 开发工具指南——通过工作空间保存更改
  8. 计算机二级考vb试题,2017计算机二级考试VB练习题及答案
  9. 6-6 求二叉树高度 (15 分)
  10. 疑似运行Android 4.4 诺基亚Android手机再曝光
  11. Gitorious基本配置流程
  12. 浏览器被7654和2345网页劫持解决办法
  13. 图片的后缀是什么意思
  14. spring-advisor-advised
  15. 区块链开发(五)区块链ICO:互联网进化的驱动力
  16. 亲身体验 北京-环球嘉年华!
  17. Anroid 逆向工具
  18. PHP做大转盘抽奖的思路,jQuery实现幸运大转盘(php抽奖程序)抽奖程序
  19. 价值100亿美元!微软刚刚击败亚马逊,拿下美国国防部十年云计算基建订单
  20. mysql 一 、关系模型——主键——外键——索引

热门文章

  1. Java中内部做监视器_监视器模式 java
  2. 【布隆过滤器】世界上大概有1 亿种小蛋糕,客户康宝要求这辈子不吃重复的小蛋糕。
  3. 新版开运网运势测算网站源码 支持微信/支付宝H5支付 支持分销代理 可封装APP
  4. IFTTT在开发环境中使用Docker的经验
  5. 种群相互竞争Matlab,种群相互竞争模型
  6. 卡巴斯基防火墙反***的设置技巧
  7. 【树】你真的会二叉树了嘛? --二叉树LeetCode专题Ⅱ
  8. 日期时间格式转换为date
  9. 信息隐藏——数字水印
  10. 怎么用账号登陆公司服务器地址,大企业邮箱登录入口,如何在foxmail上设置企业邮箱账号?...