BM25算法的实现过程

本文档详细介绍了BM25算法的计算过程,包括IDF的计算公式和TF权重调整,以及如何利用训练集和测试集进行预处理和相似度计算。通过对示例文档的分析,阐述了如何计算两个文档之间的相似度得分。

最近需要帮别人写一个BM25的文档,写完顺便上传了

BM25是一个计算文本相似度的算法

1.      BM25公式:


 

BM25是通过q和s中的公共词汇进行相似度计算的算法,其中

q: 待测试文档

s:需要进行相似度比较的文档

 

2.      IDF的计算公式如下:

N是训练集的总文档数,即需要比较的文档(s)的总数量

Nt是含有单词t的文档(s)的总数量

 

3.      tf(t,s):公共单词t在文档s中出现的次数

4.      tq(t,q): 公共单词t在文档q中出现的次数

5.      k1,k3,b 都是需要调节的参数,大小在(0,1)

 

 

实现方法:

训练集:s的集合(假设组成为:ID + 文本内容)

测试集:q的集合(假设组成为:ID + 文本内容)

预处理:

1.      定义全局变量map<string1,set<string2> > ,其中string1是指训练集S中的单词所有单词,set<string>是指单词string1,出现在了哪几个训练集中,记录的是ID号

 

2.      创建一个文本类,记录文档的组成,组成部分如下

a.      ID号

b.      文本内容(分词后,将文本以单词为单位存储在set中,注:set已经去除了重复单词)

c.      hashMap(记录文档Si中,每个单词Ti出现的次数)

 

过程:

假设训练集有2个文档,分别为

001 : aa bb cc aa

002 : cc dd dd

1.      读取文档001的所有词汇aa bb cc aa

读取的过程中,将aa bb cc分别保存在全局变量map<string1,set<string2> >中,以此类推

2.      计算相似度

假设q为003 aa ee bb

计算q与001的相似度,使用BM25的公式

Q与001的公共词汇为aa,bb

第一步,计算单词aa的值

IDF中,N为文档总数量,即为2,Nt是指出现aa这个单词的总数,由于002中没有出现,Nt为1,所以IDF即为 log()

Tf(t,s)即,aa在001中出现的次数,为2

Tf(t,q)即,aa在q中出现的次数,为1

第二步,计算单词bb的值,步骤同上

第三步,把aa,bb计算的值加起来,即为q与001的BM25相似度

 

### BM25文本向量化效果评估及优化 BM25是一种基于统计的方法,广泛应用于信息检索领域以估算文档与查询之间的相关性。其核心在于通过词频(TF)、逆文档频率(IDF)以及长度归一化的组合来生成更精确的评分[^1]。然而,当涉及到文本向量化时,BM25通常被扩展为一种稀疏嵌入技术,能够将文档转化为高维空间中的稀疏向量表示。 #### 效果评估指标 为了全面评价BM25在文本向量化方面的表现,可以从以下几个方面入手: 1. **召回率和准确率** 召回率衡量的是模型能否找到所有相关的文档,而准确率则反映所返回的结果中有多少是实际相关的。尽管这两个指标非常重要,但在某些场景下它们可能不足以完全描述系统的性能[^3]。 2. **MRR (Mean Reciprocal Rank)** 平均倒数排名特别适合于排序任务,尤其是当用户只关心第一个正确答案的位置时。较高的MRR表明相关结果倾向于出现在列表顶部。 3. **NDCG (Normalized Discounted Cumulative Gain)** 归一化折损累积增益考虑了不同位置上的收益差异,因此对于需要综合考量多个结果质量的任务尤为重要。例如,在电子商务推荐系统中,即使细微改善也可能带来显著经济效益——如案例所示,NDCG@10增加0.15可使转化率提高2.3%[^3]。 4. **语义相似度匹配能力** 尽管BM25擅长处理关键词驱动的信息检索问题,但它本质上依赖显式的词汇重叠来进行打分。这意味着如果两个文档之间存在很强的主题关联但缺乏共同单词,则可能会低估彼此间的联系强度。此时引入外部资源(比如Word Embeddings)或者采用深度学习框架下的双塔结构可能是必要的补充措施之一。 #### 优化策略探讨 针对上述提到的各种局限性和挑战,这里列举了几种可行的方向供参考: - **参数调优**: ElasticSearch允许灵活配置k1,b等超参值以便更好地适配具体应用场景需求[^1]; 同样地, PyMilvus也提供了相应接口让用户自定义这些系数从而影响最终输出结果的质量. ```python bm25_func = BM25EmbeddingFunction(k1=1.2, b=0.75) embeddings = bm25_func(corpus) ``` - **混合搜索模式**: 结合稠密向量编码(Dense Vectors),形成所谓的Hybrid Search架构。这样既能保留传统IR方法的优势又能弥补各自短板之处。 - **预训练语言模型辅助**: 利用Transformer类的大规模预训练模型提取深层次特征作为输入源再经过适当转换映射至目标维度完成整个流程改造工作. 综上所述,BM25作为一种经典有效的算法仍然具有广阔的应用前景;不过随着时代发展和技术进步,我们也应该积极探索更多创新性的改进手段使其焕发新的活力.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值