前言

本文主要是对TF-IDF和BM25在公式推演、发展沿革方面的演述,全文思路、图片基本来源于此篇公众号推文《搜索中的权重度量利器: TF-IDF和BM25》,侵删。

一 术语

  • TF: Term Frequency,词频;衡量某个指定的词语在某份【文档】中出现的【频率】
  • IDF: Inverse Document Frequency,逆文档频率;一个词语【普遍重要性】的度量。
  • TF-IDF = TF*IDF

一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。TF-IDF加权的各种形式常被搜索引擎应用,作为文件与用户查询之间相关程度的度量或评级。 -----《TF-IDF 百度百科》

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

  • BM25

    • 应用:BM25相关度打分,基于BM25与TextRank的单文档自动文摘(经Rouge评测,效果较为优异)

bm25 是一种用来评价搜索词和文档之间相关性的算法,它是一种基于概率检索模型提出的算法

二 TF-IDF

  • <1>传统的TF-IDF

    • 【TF】词汇word的词频(TF)值
      \[ TF_{Score} = tf = \frac{ 指定词汇word在第i份文档documents[i]中出现的次数 }{ 文档documents[i]的长度 } \]
    • 【IDF】词汇word的逆文档频率(IDF)值
      \[ IDF_{Score} = log( \frac{ 文档集documents的总数 }{ 指定词word在文档集documents中出现过的文档总数 } ) \]
    • 【TF-IDF/关联度计算】词汇word与某份文档documents[j]的关联度得分(TF-IDF)
      \[ TFIDF(word | docuements ) = Similarity(word | documents ) \]
      \[ Similarity(word | documents ) = TF_{Score}*IDF_{Score} \]
    • 短语sentence与某份文档documents[j]的关联度得分(TF-IDF)
      \[ sentence = [word1,word2,...,wordi,...,wordn] \]
      \[ TFIDF_{_{sentence}}(word | docuements ) = TFIDF_{_{word1}} + TFIDF_{_{word2}} + ... + TFIDF_{_{wordi}} + ... + TFIDF_{_{wordn}} \]
  • <2>早期Lucence版的TF-IDF
    • 【TF】
      \[ TF_{Score} = sqrt(tf) \]
    • 【IDF】
      \[ IDF_{Score} = log( \frac{ 文档集documents的总数 }{ 指定词word在文档集documents中出现过的文档总数 + 1 } ) \]
    • 【filedNorms】fieldNorms:对文本长度的归一化(Normalization)
      \[ fieldNorms = (\frac{1}{sqrt(文档documents[j]的长度)}) \]
    • 【TF-IDF/关联度计算】
      \[ TF-IDF(word | docuements ) = Similarity(word | documents ) \]
      \[ Similarity(word | documents ) = TF_{Score} * IDF_{Score} * fieldNorms \]

三 BM25

下一代的TF-IDF。
新版的lucence不再把TF-IDF作为默认的相关性算法,而是采用了BM25(BM是Best Matching的意思)。BM25是基于TF-IDF并做了改进的算法。

  • <3>BM25

    • 【TF】传统的TF值理论上是可以无限大的。而BM25与之不同,它在TF计算方法中增加了一个常量k,用来限制TF值的增长极限。

      • 早期Lucence版的TF-IDF
        \[ TF_{Score} = sqrt(tf) \]
      • BM25的TF Score(作者默认对k取值为1.2)
        \[ TF_{Score} = \frac{ ((k + 1) * tf) }{ k + tf } \]
      • 如何对待文档长度?(再优化)
        \[ TF_{Score} = \frac{ ((k + 1) * tf) }{ k * (1.0 - b + b * L) + tf } \]

        BM25还引入了平均文档长度的概念,单个文档长度对相关性的影响力与它和平均长度的比值有关系。
        BM25的TF公式里,除了k外,引入另外两个参数:L和b。
        L是文档长度与平均长度的比值。如果文档长度是平均长度的2倍,则L=2。
        b是一个常数,它的作用是规定L对评分的影响有多大。如果把b设置为0,则L完全失去对评分的影响力。b的值越大,L对总评分的影响力越大。加了L和b的公式如上所示。

    • 【IDF】
      \[ IDF_{Score} = log( \frac{ 文档集documents的总数 }{ 指定词word在文档集documents中出现过的文档总数 + 1 } ) \]
    • 【TF-IDF/关联度计算】
      \[ Similarity(word | documents ) = \frac{ IDF_{Score}*(k + 1)*tf } { k * (1.0 - b + b * \frac{|D|}{avgD_{l}}) + tf } \]
      \[ L= \frac{|D|}{avgD_{l}} \]
      \[ 其中,|D|系文档集documents的文档总数;avgD_{l}系文档集documents的平均文档长度(即 平均词汇数) \]

四 文献

《Variations of the Similarity Function of TextRank for Automated Summarization》

.important{ color:red;font-weight:bloder; }

NLP之TF-IDF与BM25原理探究的更多相关文章

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

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

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

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

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

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

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

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

  5. tf idf公式及sklearn中TfidfVectorizer

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

  6. [原] KVM 虚拟化原理探究(1)— overview

    KVM 虚拟化原理探究- overview 标签(空格分隔): KVM 写在前面的话 本文不介绍kvm和qemu的基本安装操作,希望读者具有一定的KVM实践经验.同时希望借此系列博客,能够对KVM底层 ...

  7. [原] KVM 虚拟化原理探究 —— 目录

    KVM 虚拟化原理探究 -- 目录 标签(空格分隔): KVM KVM 虚拟化原理探究(1)- overview KVM 虚拟化原理探究(2)- QEMU启动过程 KVM 虚拟化原理探究(3)- CP ...

  8. [原] KVM 虚拟化原理探究(6)— 块设备IO虚拟化

    KVM 虚拟化原理探究(6)- 块设备IO虚拟化 标签(空格分隔): KVM [toc] 块设备IO虚拟化简介 上一篇文章讲到了网络IO虚拟化,作为另外一个重要的虚拟化资源,块设备IO的虚拟化也是同样 ...

  9. [原] KVM 虚拟化原理探究(5)— 网络IO虚拟化

    KVM 虚拟化原理探究(5)- 网络IO虚拟化 标签(空格分隔): KVM IO 虚拟化简介 前面的文章介绍了KVM的启动过程,CPU虚拟化,内存虚拟化原理.作为一个完整的风诺依曼计算机系统,必然有输 ...

随机推荐

  1. Python 多版本管理利器 pythonbrew

    在$HOME目录中管理python安装 简介 pythonbrew是受 perlbrew 和 rvm 启发,在用户的$HOME目录中进行python构建和安装自动化的项目. 另一衍生版本 : pyth ...

  2. DeviceSupport 路径

    /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSuppor

  3. Python+request 登录接口reponse中token传递给其他接口使用,小示例介绍《一》

    要求: 1.调用登录login 2.调用通过登录接口返回的reponse中的token和uuid,实现test_create_todo接口的测试 实现: 1.login登录接口的调用,直接填写对应的U ...

  4. dubbo注册ip混乱的问题

    a) 通过hostname命令得到机器名 b) 通过vim /etc/hosts设置机器名对应的外网IP 127.0.0.1  localhost  localhost.localdomain 外网I ...

  5. Java中String为什么是不可变

    什么是不可变对象? 众所周知, 在Java中, String类是不可变的.那么到底什么是不可变的对象呢? 可以这样认为:如果一个对象,在它创建完成之后,不能再改变它的状态,那么这个对象就是不可变的.不 ...

  6. ArrayBuffer、TypedArray、DataView二进制数组

    三个是处理二进制数据的接口.都是类数组. 1.ArrayBuffer是什么? ArrayBuffer是一个二进制对象(文件,图片等).它指向固定长度的,连续的内存区域. const buffer = ...

  7. 10 | MySQL为什么有时候会选错索引?

    前面我们介绍过索引,你已经知道了在MySQL中一张表其实是可以支持多个索引的.但是,你写SQL语句的时候,并没有主动指定使用哪个索引.也就是说,使用哪个索引是由MySQL来确定的. 不知道你有没有碰到 ...

  8. word图片上传到服务器

    参考:http://blog.ncmem.com/wordpress/2019/08/07/word%e5%9b%be%e7%89%87%e4%b8%8a%e4%bc%a0%e5%88%b0%e6%9 ...

  9. 洛谷 P2251 质量检测(st表)

    P2251 质量检测 题目提供者ws_ly 标签 难度 普及/提高- 题目描述 为了检测生产流水线上总共N件产品的质量,我们首先给每一件产品打一个分数A表示其品质,然后统计前M件产品中质量最差的产品的 ...

  10. 关于openstack 网络相关的文章收集

    journalctl工具基础介绍(你需要这个的.) https://blog.51cto.com/13598893/2072212 新版devstack使用systemd的方式来管理OpenStack ...