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

相关推荐
Hello server1 小时前
DeepSeek Harness 深度体验:把「万物皆插件」做到极致的 AI 编程 Agent
人工智能
驴友花雕5 小时前
【花雕动手做】行空板 K10 系列实验之人工智能语音识别小车的10个参考案例
人工智能·单片机·嵌入式硬件·语音识别·行空板 k10 系列实验·花雕动手做·小车的10个参考案例
火山引擎开发者社区6 小时前
DeepSeek-V4 Pro 发布,veStack Day 0 完成模型适配
人工智能
2501_926978336 小时前
AGI 的四种瓶颈:资源型还是发现型--以及DSH的位置
人工智能·经验分享·笔记·ai写作
Q463913497 小时前
线下销售复盘难落地,AI 会话设备能帮上啥忙
人工智能·自然语言处理
ebok.7 小时前
国产大模型落地业务系统的优选载体:京微智枢信创 AI 业务支撑平台
大数据·人工智能·低代码·ai
wujian83117 小时前
怎么用文心生成word文档?从格式错乱到智能导出,AI导出鸭让创作再无后顾之忧
人工智能·ai·word·豆包·deepseek·ai导出鸭
动物园猫8 小时前
猪危险行为目标检测数据集:3类别、5,000+张图像 | 目标检测
人工智能·目标检测·计算机视觉
ai产品老杨8 小时前
AI视频分析并发优化完整流程:解决多路视频并发不足与高延迟排查指南
人工智能·音视频
why技术8 小时前
AI 写的文章,可能都带着手敲一遍都去不掉的“隐形水印”。
前端·人工智能·后端