TF-IDF / BM25:经典的传统信息检索算法

前言

开放域问答(Open-Domain Question Answering, ODQA)中的检索通常使用TF-IDF或BM25来实现,它通过倒排索引有效地匹配关键字,可以看作是用高维稀疏向量(带加权)表示问题和上下文。


一、TF-IDF

TF-IDF(词频-逆文档频率)是信息检索领域最经典的特征加权方法,用于衡量一个词在文档中的重要程度。

1.1 核心公式

TF-IDF的核心公式如下所示:

等式右边的第一项为,第二项为。其中:

  • :完整的查询

  • :词项(term)

  • :当前文档(document)

  • :词项 在文档 中的出现次数

  • :文档 的总词数(文档长度)

  • :语料库中文档总数

  • :包含词项 的文档数


1.2 举例说明

假设查询为 "苹果手机"

有以下三个文档库:

D1:"苹果公司发布了新款手机,这款手机搭载了先进芯片。"

D2:"今天吃了一个红苹果,非常甜。"

D3:"手机市场竞争激烈,苹果手机销量领先。"

(1)首先使用分词库(例如jieba中文分词)对文档进行分词:

D1:["苹果", "公司", "发布", "新款", "手机", "手机", "搭载", "先进", "芯片"](总词数 9)

D2:["今天", "吃", "红", "苹果", "非常", "甜"](总词数 6)

D3:["手机", "市场", "竞争", "激烈", "苹果", "手机", "销量", "领先"](总词数 8)

(2)计算TF:

计算各个词项 对各个文档的TF:

D1:

  • TF(苹果, D1) = 1/9 ≈ 0.111

  • TF(手机, D1) = 2/9 ≈ 0.222

D2:

  • TF(苹果, D2) = 1/6 ≈ 0.167

  • TF(手机, D2) = 0/6 = 0

D3:

  • TF(苹果, D3) = 1/8 = 0.125

  • TF(手机, D3) = 2/8 = 0.250

(3)计算IDF:

  • 包含"苹果"的文档数:n_苹果 = 3

  • 包含"手机"的文档数:n_手机 = 2

(4)计算各个词项 对各个文档的TF-IDF:

D1:

  • TF-IDF(苹果, D1) = 0.111 × 0 = 0

  • TF-IDF(手机, D1) = 0.222 × 0.176 ≈ 0.039

D2:

  • TF-IDF(苹果, D2) = 0.167 × 0 = 0

  • TF-IDF(手机, D2) = 0

D3:

  • TF-IDF(苹果, D3) = 0.125 × 0 = 0

  • TF-IDF(手机, D3) = 0.250 × 0.176 ≈ 0.044

(5)文档-查询相关性得分:

将查询中所有词项 的TF-IDF值相加(即求和):

  • D1得分 = 0 + 0.039 = 0.039

  • D2得分 = 0 + 0 = 0

  • D3得分 = 0 + 0.044 = 0.044

排序结果:D3 > D1 > D2


二、BM25

BM25(Best Matching 25)是 TF-IDF 的改进版本 ,通过引入非线性词频处理文档长度归一化,显著提升了检索效果。

2.1 核心公式

BM25的核心公式如下所示:

  • 表示文档, 表示查询,​ 为查询中的词项。

  • :词项 在文档 中的出现次数。

  • :文档长度(单词数)。

  • :语料库中所有文档的平均长度。

  • :控制词频饱和度的参数(通常取 1.2~2.0)。

  • :控制文档长度归一化强度的参数(通常取 0.75)。

  • :逆文档频率,衡量词 ​ 的全局重要性。公式如下:

其中 是文档总数, 是包含词项 的文档数。


2.2 举例说明

假设查询为 "苹果手机"

有以下三个文档库:

D1:"苹果公司发布了新款手机,这款手机搭载了先进芯片。"

D2:"今天吃了一个红苹果,非常甜。"

D3:"手机市场竞争激烈,苹果手机销量领先。"

(1)首先使用分词库(例如jieba中文分词)对文档进行分词:

D1:["苹果", "公司", "发布", "新款", "手机", "手机", "搭载", "先进", "芯片"](总词数 9)

D2:["今天", "吃", "红", "苹果", "非常", "甜"](总词数 6)

D3:["手机", "市场", "竞争", "激烈", "苹果", "手机", "销量", "领先"](总词数 8)

(2)计算基础统计量:

  • 文档总数

  • 各文档长度:

  • 平均长度

  • 设为 (经典默认值)

(3)计算TF:

假设,计算各个词项 对各个文档的TF:

D1:

苹果 = 1,手机 = 2

  • TF(苹果, D1)

  • TF(手机, D1)

D2:

苹果 = 1,手机 = 0

  • TF(苹果, D2)

  • TF(手机, D2) = 0

D3:

苹果 = 1,手机 = 2

  • TF(苹果, D3)

  • TF(手机, D3)

(4)计算IDF:

  • 包含"苹果"的文档数:n_苹果 = 3

  • 包含"手机"的文档数:n_手机 = 2

(5)计算各个词项 对各个文档的TF-IDF:

D1:

  • TF-IDF(苹果, D1) = 0.9275 × 0.05799 ≈ 0.05378

  • TF-IDF(手机, D1) = 1.3527 × 0.20412 ≈ 0.2760

D2:

  • TF-IDF(苹果, D2) = 1.1084 × 0.05799 ≈ 0.06427

  • TF-IDF(手机, D2) = 0 × -0.2218 ≈ 0

D3:

  • TF-IDF(苹果, D3) = 0.9808 × 0.05799 ≈ 0.05687

  • TF-IDF(手机, D3) = 1.4089 × 0.20412 ≈ 0.28748

(6)文档-查询相关性得分:

将查询中所有词项 的TF-IDF值相加(即求和):

  • D1得分 = 0.05378 + 0.2760 = 0.32978

  • D2得分 = 0.06427 + 0 = 0.06427

  • D3得分 = 0.05687 + 0.28748 = 0.34435

排序结果:D3 > D1 > D2

相关推荐
databook2 小时前
回归分析全家桶(16种回归模型实现方式总结)
人工智能·python·机器学习
天竺鼠不该去劝架2 小时前
传统财务管理瓶颈:财务机器人如何提升效率
大数据·数据库·人工智能
zhongerzixunshi2 小时前
“首版次高端软件”:国产工业软件皇冠上的明珠
人工智能·云计算
virtaitech2 小时前
【免费申请】趋动科技OrionX社区版开放:GPU池化神器
人工智能·科技·gpu·池化技术·永久免费
WZGL12302 小时前
“近邻+数智”:解码智慧养老的温情答案
大数据·人工智能·科技·生活·智能家居
elangyipi1232 小时前
2025 搜索优化新革命:GEO 正在悄然取代 SEO?
前端·人工智能
Toky丶2 小时前
QLoRA Efficient Finetuning of Quantized LLMs
人工智能·chatgpt
丝斯20112 小时前
AI学习笔记整理(39)——自然语言处理算法之词向量 Word2vec
人工智能·学习·自然语言处理
星云POLOAPI2 小时前
大模型API调用延迟过高?深度解析影响首Token时间的五大因素及优化方案
人工智能·python·算法·ai