TF-IDF是什么

TF-IDF是一种统计方法,用以评估一个词对于一篇文章或语料库中一篇文章的重要性。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。

TF-IDF的使用场景

TF-IDF加权的各种形式常被搜索引擎应用,作为文件与用户查询之间相关程度的度量或评级。除了TF-IDF以外,因特网上的搜索引擎还会使用基于链接分析的评级方法,以确定文件在搜寻结果中出现的顺序。

TF-IDF原理

  • TF(Term Frequency) 表示词频,即一个词在在一篇文章中出现的次数,但在实际应用时会有一个漏洞,就是篇幅长的文章给定词出现的次数会更多一点。因此我们需要对次数进行归一化,通常用给定词的次数除以文章的总词数。

\[TF_w = \frac{给定词w出现的次数}{文章的总次数}\]

这其中还有一个漏洞,就是 ”的“ ”是“ ”啊“ 等类似的词在文章中出现的此时是非常多的,但是这些大多都是没有意义词,对于判断文章的关键词几乎没有什么用处,我们称这些词为”停用词“,也就是说,在度量相关性的时候不应该考虑这些词的频率。

  • IDF(Inverse Document Frequency)逆文本频率指数,如果包含关键词w的文档越少,则说明关键词w具有很好的类别区分能力。某一关键词的IDF,可以用总的文章数量除以包含该关键词的文章的数量,然后对结果取对数得到
    \[
    IDF_w = \log(\frac{语料库文章的总数}{包含关键词w的文章数量 + 1})
    \]
    ​ 注:分母加1是为了避免没有包含关键词的文章时分母是0的情况

一个词预测主题的能力越强,权重就越大,反之,权重越小,因此一个词的TF-IDF就是:
\[
TF-IDF = TF*IDF
\]

实际应用

通常在新闻的分类,或者说文章的分类的时候我们会用到ID-IDF。如果让编辑来对新闻或者文章分类,他一定要先读懂文章,然后找出主题,最后根据主题的不同对文章进行分类。而让电脑对文章进行分类,就要求我们先把文字的文章变成一组可以计算的数字,然后通过算法来算出文章的相似性。

首先我们先来看怎么用一组数字(或者说一个向量)来表示一篇文章。对于一篇文章的所有实词(除去无意义的停用词),计算出他们的TF-IDF值,把这些值按照对应的实词在词汇表的位置依次排列,就得到了一个向量。比如,词汇表中有64000个词,其编号和词:

单词编号 汉字词
1
2
... ...
789 服装
... ...
64000 做作

在某一篇文章中,文章中的词的TF-IDF值对应为:

单词编号 TF-IDF
1 0
2 0.0034
... ...
789 0.034
... ...
64000 0.075

如果单词表的某个词在文章中没有出现,对应的值为零,这样我们就得到了一个64000维的向量,我们称为这篇文章的特征向量。然后每篇文章就可以用一个向量来表示,这样我们就可以计算文章之间的相似程度了。

向量的夹角是衡量两个向量相近程度的度量。因此,可以通过计算两篇文章的特征向量的夹角来判断两篇文章的主题的接近程度。那么我们就需要用余弦地理了。

∠A的余弦值为:
\[
cosA = \frac{b^2+c^2-a^2}{2bc}
\]
如果将三角形的两边b和c看成是两个以A为起点的向量,那么上述公式等于:
\[
cosA=\frac{<b,c>}{|b|·|c|}
\]
其中,分母便是两个向量b和c的长度,分子表示两个向量的内积。假设文章X和文章Y对应的向量是
\[
X_1,X_2,...,X_{64000}和Y_1,Y_2,...,Y_{64000}
\]
那么他们的夹角的余弦等于
\[
cosθ=\frac{x_1y_1+x_2y_2+...+x_{64000}y_{64000}}{\sqrt{x_1^2+x_2^2+x_{64000}^2}\cdot\sqrt{y_1^2+y_2^2+y_{64000}^2}}
\]
由于向量中的每一个变量都是正数,所以余弦的取值在0到1之间。当两篇文章向量的余弦等于1时,这两个向量夹角为零,两篇文章完全相同;当夹角的余弦接近于1时两篇文章越相似,从而可以归成一类;夹角的余弦越小,夹角越大,两篇文章越不相关。

现在假定我们已知一些文章的特征向量,那么对于任何一个要被分类的文章,就很容易计算出它和各类文章的余弦相似性,并将其归入它该去的那一类中。

如果事先没有已知的文章的特征向量呢,可以用自底向上不断合并的方法。

  1. 计算所有文章之间凉凉的余弦相似性,把相似性大于一个阈值的合并成一小类
  2. 把每个小类中的所有文章作为一个整体,计算小类的特征向量,在计算小雷之间两两的余弦相似性,然后合并成一个大类

这样不断做下去,类别越来越少,而每个类越来越大。当某一类太大时,这一类里的文章的相似性就很小了,这时就要停止迭代过程了,然后完成分类。


欢迎关注公众号:「努力给自己看」

TF-IDF介绍的更多相关文章

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

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

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

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

  3. 55.TF/IDF算法

    主要知识点: TF/IDF算法介绍 查看es计算_source的过程及各词条的分数 查看一个document是如何被匹配到的         一.算法介绍 relevance score算法,简单来说 ...

  4. Elasticsearch由浅入深(十)搜索引擎:相关度评分 TF&IDF算法、doc value正排索引、解密query、fetch phrase原理、Bouncing Results问题、基于scoll技术滚动搜索大量数据

    相关度评分 TF&IDF算法 Elasticsearch的相关度评分(relevance score)算法采用的是term frequency/inverse document frequen ...

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

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

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

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

  7. TF/IDF计算方法

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

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

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

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

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

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

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

随机推荐

  1. AspNetCore发布到Centos7

    1.Centos安装netcore2 sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc sudo sh -c 'e ...

  2. HTML 的 style 属性

    style 属性用于改变 HTML 元素的样式. This text is in Verdana and red This text is in Times and blue This text is ...

  3. 微软在WPC 2015中为“伙伴们”带来了什么?

    在微软 WPC 2015(微软全球合作伙伴大会)上,微软全球渠道总监 Phil Sorgen 指出,微软总营收的 92% 来自合作伙伴.这句话验证了微软与合作伙伴间日益紧密的合作关系,也点出了本次大会 ...

  4. course & time

  5. iOS设计模式 - 外观

    iOS设计模式 - 外观 原理图 说明 1. 当客服端需要使用一个复杂的子系统(子系统之间关系错综复杂),但又不想和他们扯上关系时,我们需要单独的写出一个类来与子系统交互,隔离客户端与子系统之间的联系 ...

  6. Linux下的Mysql的远程访问

    mysql的服务端[192.168.25.136] 1,在远程访问之前需先配置防火墙 service iptables stop (不推荐,可配置开通3306端口) 2,授权 mysql> gr ...

  7. magento2站点迁移

    当文件与数据库都迁到新服务器上之后 rm -rf ./var/cache/ rm -rf ./var/generation/ rm -rf ./var/log/ rm -rf ./var/maps/ ...

  8. MD5随机盐值生成法

    public class Test3 { /** * 生成含有随机盐的密码 */ public static String generate(String password) { Random r = ...

  9. BZOJ 2440 完全平方数 莫比乌斯反演模板题

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=2440 题目大意: 求第k个无平方因子的数 思路: 二分答案x,求1-x中有多少个平方因 ...

  10. SpringBoot接口返回去掉空字段

    返回的接口中存在值为null或者空的字段过滤掉 @Configuration public class JacksonConfig { @Bean @Primary @ConditionalOnMis ...