TF-IDF 加权及其应用

TF-IDF(term frequency–inverse document frequency)是一种用于资讯检索的常用加权技术。TF-IDF是一种统计方法,用以评估某个单词对于一个文档集合(或一个语料库)中的其中一份文件的重要程度。单词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。TF-IDF加权的各种形式常被搜寻引擎应用,作为文件与用户查询之间相关程度的度量或评级。

一、原理

在一份给定的文件里,词频 (term frequency, TF) 指的是某一个给定的单词在该文件中出现的次数。这个数字通常会被归一化,以防止它偏向长的文件(同一个单词在长文件里可能会比短文件有更高的词频,而不管该词语重要与否)。

TF(w,d) = count(w,d)/size(d)
其中,count(w,d):单词w在文档d中出现次数;size(d):文档d中总的单词个数;

逆向文件频率 (inverse document frequency, IDF) 是一个单词普遍重要性的度量。某一特定单词的IDF,可以由总文件数目除以包含该词语之文件的数目,再将得到的商取对数得到。IDF是一个全局因子,其考虑的不是文档本身的特征,而是特征单词之间的相对重要性。特征词出现在其中的文档数目越多,IDF值越低,这个词区分不同文档的能力就越差。

IDF(w)=log(n/docs(w, D))

其中,n是文档总数;docs(w, D)是词w所出现过的文件数;
 

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

二、应用

1、搜索引擎

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

2、自动提取关键词

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

3、找出相似文章

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

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

4、自动摘要

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原始论文的插图,被框起来的部分就是一个"簇"。只要关键词之间的距离小于"门槛值",它们就被认为处于同一个簇之中。Luhn建议的门槛值是4或5。也就是说,如果两个关键词之间有5个以上的其他词,就可以把这两个关键词分在两个簇。
下一步,对于每个簇,都计算它的重要性分值。

以前图为例,其中的簇一共有7个词,其中4个是关键词。因此,它的重要性分值等于 ( 4 x 4 ) / 7 = 2.3。
然后,找出包含分值最高的簇的句子(比如5句),把它们合在一起,就构成了这篇文章的自动摘要。

PS:Luhn的这种算法后来被简化,不再区分"簇",只考虑句子包含的关键词。

参考文档:

http://www.cnblogs.com/biyeymyhjob/archive/2012/07/17/2595249.html

http://www.ruanyifeng.com/blog/2013/03/tf-idf.html

http://www.ruanyifeng.com/blog/2013/03/cosine_similarity.html

http://www.ruanyifeng.com/blog/2013/03/automatic_summarization.html

TF-IDF 加权及其应用的更多相关文章

  1. TF/IDF计算方法

    FROM:http://blog.csdn.net/pennyliang/article/details/1231028 我们已经谈过了如何自动下载网页.如何建立索引.如何衡量网页的质量(Page R ...

  2. 信息检索中的TF/IDF概念与算法的解释

    https://blog.csdn.net/class_brick/article/details/79135909 概念 TF-IDF(term frequency–inverse document ...

  3. TF/IDF(term frequency/inverse document frequency)

    TF/IDF(term frequency/inverse document frequency) 的概念被公认为信息检索中最重要的发明. 一. TF/IDF描述单个term与特定document的相 ...

  4. 基于TF/IDF的聚类算法原理

        一.TF/IDF描述单个term与特定document的相关性TF(Term Frequency): 表示一个term与某个document的相关性. 公式为这个term在document中出 ...

  5. 使用solr的函数查询,并获取tf*idf值

    1. 使用函数df(field,keyword) 和idf(field,keyword). http://118.85.207.11:11100/solr/mobile/select?q={!func ...

  6. tf–idf算法解释及其python代码实现(下)

    tf–idf算法python代码实现 这是我写的一个tf-idf的简单实现的代码,我们知道tfidf=tf*idf,所以可以分别计算tf和idf值在相乘,首先我们创建一个简单的语料库,作为例子,只有四 ...

  7. tf–idf算法解释及其python代码实现(上)

    tf–idf算法解释 tf–idf, 是term frequency–inverse document frequency的缩写,它通常用来衡量一个词对在一个语料库中对它所在的文档有多重要,常用在信息 ...

  8. 文本分类学习(三) 特征权重(TF/IDF)和特征提取

    上一篇中,主要说的就是词袋模型.回顾一下,在进行文本分类之前,我们需要把待分类文本先用词袋模型进行文本表示.首先是将训练集中的所有单词经过去停用词之后组合成一个词袋,或者叫做字典,实际上一个维度很大的 ...

  9. Elasticsearch学习之相关度评分TF&IDF

    relevance score算法,简单来说,就是计算出,一个索引中的文本,与搜索文本,他们之间的关联匹配程度 Elasticsearch使用的是 term frequency/inverse doc ...

  10. tf idf公式及sklearn中TfidfVectorizer

    在文本挖掘预处理之向量化与Hash Trick中我们讲到在文本挖掘的预处理中,向量化之后一般都伴随着TF-IDF的处理,那么什么是TF-IDF,为什么一般我们要加这一步预处理呢?这里就对TF-IDF的 ...

随机推荐

  1. js-设置焦点

    function CheckForm() { if(document.form1.trainingName.value==""){ alert("培训班名称不能为空!&q ...

  2. Web 安全:隐藏服务版本号

    前述 为了防止一些恶意用户对 apache.nginx.php 等显示出来的版本信息进行攻击,生产环境需要关闭 web 服务的版本信息: apache 隐藏版本号 修改 httpd.conf,添加如下 ...

  3. 【POJ 2342】Anniversary party(入门树形dp)

    dp[i][0..1]表示i不来/来参加的最大总高兴值. 则dp[i][1]+=dp[v][0](v是i的所有直接下属) dp[i][0]+=max(dp[v][0],dp[v][1]) 没有告诉你树 ...

  4. OneThink学习笔记02----数据字典(即OneThink项目数据库里的表及其字段)

    action 字段 类型 注释 id int(11) unsigned 自增主键 name char(30) 行为唯一标识 title char(80) 行为说明 remark char(140) 行 ...

  5. [vijos1982][NOIP2015]子串

    Description 有两个仅包含小写英文字母的字符串和.现在要从字符串中取出个互不重叠的非空子串,然后把这个子串按照其在字符串中出现的顺序依次连接起来得到一个新的字符串,请问有多少种方案可以使得这 ...

  6. 【BZOJ-3337】ORZJRY I 块状链表

    3337: ORZJRY I Time Limit: 30 Sec  Memory Limit: 512 MBSubmit: 190  Solved: 50[Submit][Status][Discu ...

  7. 【BZOJ-3876】支线剧情 有上下界的网络流(有下界有源有汇最小费用最大流)

    3876: [Ahoi2014]支线剧情 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 821  Solved: 502[Submit][Status ...

  8. springMVC-JSR303数据效验

    JSR 303 是java为Bean数据合法性校验提供的标准框架, 它已经包含在javaEE6.0中 JSR 303 通过Bean属性上标注类似于@NotNull.@Max等标准的注解指定校验规则, ...

  9. 【poj1041】 John's trip

    http://poj.org/problem?id=1041 (题目链接) 题意 给出一张无向图,求字典序最小欧拉回路. Solution 这鬼畜的输入是什么心态啊mdzz,这里用vector储存边, ...

  10. Visual Studio 2015 未响应/已停止工作的问题解决

    在我把之前项目从10版本升级到15版本的时候,一打开转换的项目过几分钟立马卡死,出现未响应/已停止工作的问题,我试过了很多方法: 1.升级操作系统,8.1升级10,没用! 2.重装VS,没用! 3.卸 ...