TF-IDF和BM25原理和区别

TF-IDF

TF-IDF是TF(词频,Term Frequency)和IDF(逆文档频率,Inverse Document Frequency)的乘积。我们先来看他们分别是怎么计算的:

TF的计算有多种方式,常见的是

除以文章总词数是为了标准化

IDF为:

如果一个词越常见,那么分母就越大,逆文档频率就越小越接近0。分母之所以要加1,是为了避免分母为0(即所有文档都不包含该词)。log表示对得到的值取对数,求log是为了归一化,保证IDF不会过大

所以TF-IDF 的计算就是:

以下有几个细节点的理解:

  1. IDF表征的是区分度、稀缺性,用以评估一个单词在语料库中的重要程度,一个词在少数几篇文档中出现的次数越多,它的IDF值越高,如果这个词在大多数文档中都出现了,这个值就不大了。从公式也可以看出来,由于log函数是单增函数,当文档总数固定时,包含该词的文档数越少,IDF值越大,稀缺性越强。背后的思想是某个词或者短语在一篇文章中出现的频率高(TF大),并且在其他文档中很少出现(IDF也大),则认为该词或短语具备很好的类别区分能力(TF-IDF就越大)
  2. TF刻画了词语w对某篇文档的重要性,IDF刻画了w对整个文档集的重要性。TF与IDF没有必然联系,TF低并不一定伴随着IDF高。实际上我们可以看出来,IDF其实是给TF加了一个权重

优点与不足

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

BM25

因为在TF-IDF 中去停用词被认为是一种标准实践,故TF-IDF没有考虑词频上限的问题(因为高频停用词已经被移除了)。而在某些频率较高的停用词不被去除的情况下,停用词的权重会被无意义地放大。比如文中提到的:

Elasticsearch 的 standard 标准分析器( string 字段默认使用)不会移除停用词,因为尽管这些词的重要性很低,但也不是毫无用处。这导致:在一个相当长的文档中,像 the 和 and 这样词出现的数量会高得离谱,以致它们的权重被人为放大。

这就是所谓的词频饱和度,TF-IDF的词频饱和度是线性的,而BM25的词频饱和度是非线性的:

公式:

 C = tf = \frac{word}{whole\_words},k > 0,b \in [0, 1],d为文档的长度,avdl是文档的平均长度

BM25和tfidf的计算结果很相似,唯一的区别在于中多了一项,这一项是用来对tf的结果进行的一种变换。把1 - b + b (\frac{d}{avdl})中的b看成0,那么此时项的结果为(\frac{(k + 1)tf}{k + tf}),通过设置一个k,就能够保证其最大值为1,达到限制tf过大的目的。

即:

[ \frac{(k + 1)tf}{k + tf} = \frac{k + 1}{1 + \frac{k}{tf}} ] 上下同除tf

k不变的情况下,上式随着tf的增大而增大,上限为k + 1,但是增加的程度会变小,如下图所示。在一个句子中,某个词重要程度应该是随着词语的数量逐渐衰减的,所以中间项对词频进行了一定罚,随着次数的增加,影响程度的增加会越来越小。通过设置k值,能够保证其最大值为k + 1,k往往取值1.2。

其变化如下图(无论k为多少,中间项的变化程度会随着次数的增加,越来越小):

1 - b + b \frac{d}{avdl}的作用是用来对文本的长度进行归一化。
例如在考虑整个句子的 tdidf 的时候,如果句子的长度太短,那么计算的总的 tdidf 的值是要比长句子的 tdidf 的值要低的。所以可以考虑对句子的长度进行归一化处理。

可以看到,当句子的长度越短,1 - b + b \frac{d}{\text{avdl}} 的值是越小,作为分母的位置,会让整个第二项越大,从而达到提高短文本句子的 BM25 的值的效果。当 b 的值为 0,可以禁用归一化,b 往往取值 0.75。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/40225.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从CPU的视角看C++的构造函数和this指针

从汇编角度,清晰的去看构造函数和this指针到底是个什么东西呢?也许可以解决你的一点小疑问 首先写一个很简单的代码demo: class A{ public:int a;A(){;}void seta(int _a){a_a;}A* getA(){return this;} };int fun1(int px){return px; }in…

【FreeRTOS】同步互斥与通信 有缺陷的同步示例

目录 1 同步互斥与通信1.1 同步互斥与通信概述1.2 同步与互斥的概念1.3 同步的例子:有缺陷1.4 freertos.c源码3. 互斥的例子:有缺陷4. 通信的例子:有缺陷5. FreeRTOS的解决方案 1 同步互斥与通信 1.1 同步互斥与通信概述 参考《FreeRTOS入门…

搞钱四步:干活、出名、破圈、整合

搞钱这事儿,说起来有四步:干活、出名、破圈、整合。 咱们现在这个时代,谁要是能把自尊心放一边,勇敢站到舞台上展示才华,变现那是分钟的事儿。 只要你敢承认自己想要财富,并且不停地使用正确的方法论&…

python语句前面有一个$是什么意思

“$”是汇编语言中的一个预定义符号,等价于当前正汇编到的段的当前偏移值。例如:指令“jmp $3”中的“$”表示当前这条指令在代码段中的偏移量。 代表当前指令的地址,如: data segment str1 db a,b,c,d leng equ $-str 就是当前地…

JVM专题之性能优化

运行时优化 方法内联 > 方法内联,是指 **JVM在运行时将调用次数达到一定阈值的方法调用替换为方法体本身** ,从而消除调用成本,并为接下来进一步的代码性能优化提供基础,是JVM的一个重要优化手段之一。 > > **注:** > > * **C++的inline属于编译后内联,…

数据库实训复习(1)

目录 一、关于表结构的相关操作(与表中字段的数据操作有区别) (1)往已有的表中添加字段 (2)修改表中已有字段的数据类型 (3)修改已有的表中的字段名和字段类型 (4&a…

TopK问题与堆排序

目录 TopK问题: 定义: 应用场景: 搜索引擎: 推荐系统: 数据分析: 数据挖掘: TopK问题初阶:(数据量较小情况) TopK问题进阶:(…

知名品牌因商标痛失市场:114家直营店山寨店7000多家!

奶茶知名品牌“鹿角巷”当年红遍大江南北,是最早的新茶饮品牌,但是当年商标注册存在问题,被同行奶茶品牌抢占了先机,发声明“对大陆商标注册细则不详,在商标注册过程中让假店钻了法律空档”,最夸张的时候全…

qml required property

目录 前言 示例代码 创建一个自定义组件(MyComponent.qml) 使用自定义组件(main.qml) 解释 运行效果 运行时错误示例 前言 在 QML 中,你可以使用 required 关键字来声明一个属性是必需的。这意味着在创建该对象…

如何用Python向PPT中批量插入图片

办公自动化办公中,Python最大的优势是可以批量操作,省去了用户粘贴、复制、插入等繁琐的操作。经常做PPT的朋友都知道,把图片插入到PPT当中的固定位置是一个非常繁琐的操作,往往调整图片时耗费大量的时间和精力。如何能省时省力插…

【数据结构】使用C语言 从零实现一个栈的数据结构

栈 什么是栈?栈是一种特殊的线性表,它只能在在表尾进行插入和删除操作。 栈的底部称为栈底,顶部称为栈顶,所有的操作只能在栈顶进行,也就是说,被压在下方的元素,只能等待其上方的元素出栈之后…

LeetCode-简单-回文数

给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。 回文数 是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 例如,121 是回文,…

windows启动Docker闪退Docker desktop stopped

Windows启动Docker闪退-Docker desktop stopped 电脑上很早就安装有Docker了,但是有一段时间都没有启动了,今天想启动启动不起来了,打开没几秒就闪退,记录一下解决方案。仅供参考 首先,参照其他解决方案,本…

Ubuntu20安装mysql方法,适用于wsl

itopen组织1、提供OpenHarmony优雅实用的小工具2、手把手适配riscv qemu linux的三方库移植3、未来计划riscv qemu ohos的三方库移植 小程序开发4、一切拥抱开源,拥抱国产化 一、Ubunt20安装mysql 适用于wsl中安装mysql sudo apt update# 查看可使用的安装包…

【刷题汇总--游游的you、腐烂的苹果、孩子们的游戏(圆圈中最后剩下的数)】

C日常刷题积累 今日刷题汇总 - day0051、游游的you1.1、题目1.2、思路1.3、程序实现 - 蛮力法1.4、程序实现 - 贪心(优化) 2、腐烂的苹果2.1、题目2.2、思路2.3、程序实现 - bfs 3、孩子们的游戏(圆圈中最后剩下的数)3.1、题目3.2、思路3.3、程序实现 -- 环形链表3.4、程序实现…

2个方法教你轻松移除pdf文件编辑限制

PDF是一种常见的办公文档格式,常用于文件共享和保护。然而,有时候我们需要编辑PDF文件中的内容,但受到了编辑限制。本文将介绍一些有效的方法,帮助您解除PDF的编辑限制,轻松进行编辑和修改。 一、通过密码取消PDF“限制…

雷电模拟器报错remount of the / superblock failed: Permission denied remount failed

报错截图 解决方法 打开设置 设置配置system.vmdk可写入 解决

Transformer和Mamba强强结合!最新混合架构全面开源,推理速度狂飙8倍

最近发现,将Mamba和Transformer模块混合使用,效果会比单独使用好很多,这是因为该方法结合了Mamba的长序列处理能力和Transformer的建模能力,可以显著提升计算效率和模型性能。 典型案例如大名鼎鼎的Jamba:Jamba利用Tr…

ELK优化之Elasticsearch

目录 1.ELK优化 2.优化 ES 索引设置 2.1 优化 fsync 2.2 优化 refresh 2.3 优化 merge 2.4 优化设置 2.5 打开索引 3.优化线程池配置 3.1 优化的方案 4.锁定内存,不让 JVM 使用 Swap 5.减少分片数、副本数 6.ES优化总结 1.ELK优化 ELK优化可以围绕着 li…

Python统计实战:时间序列分析之简单指数平滑和Holt指数平滑

为了解决特定问题而进行的学习是提高效率的最佳途径。这种方法能够使我们专注于最相关的知识和技能,从而更快地掌握解决问题所需的能力。 (以下练习题来源于《统计学—基于Python》。请在Q群455547227下载原始数据。) 练习题 下表是某只股票…