当前位置:网站首页>自然语言处理-搜索中常用的bm25
自然语言处理-搜索中常用的bm25
2020-11-06 01:22:00 【IT界的小小小学生】
BM25算法是一种常见用来做相关度打分的公式,思路比较简单,主要就是计算一个query里面所有词和文档的相关度,然后在把分数做累加操作,而每个词的相关度分数主要还是受到tf/idf的影响。
关于Bim
BIM(二元假设模型)对于单词特征,只考虑单词是否在doc中出现过,并没有考虑单词本身的相关特征,BM25在BIM的基础上引入单词在查询中的权值,单词在doc中的权值,以及一些经验参数,所以BM25在实际应用中效果要远远好于BIM模型。
具体的bm25
bm25算法是常见的用来计算query和文章相关度的相似度的。其实这个算法的原理很简单,就是将需要计算的query分词成w1,w2,…,wn,然后求出每一个词和文章的相关度,最后将这些相关度进行累加,最终就可以的得到文本相似度计算结果。

首先Wi表示第i个词的权重,这里我们一般会使用TF-IDF算法来计算词语的权重这个公式第二项R(qi,d)表示我们查询query中的每一个词和文章d的相关度,这一项就涉及到复杂的运算,我们慢慢来看。一般来说Wi的计算我们一般用逆项文本频率IDF的计算公式:

在这个公式中,N表示文档的总数,n(qi)表示包含这个词的文章数,为了避免对数里面分母项等于0,我们给分子分母同时加上0.5,这个0.5被称作调教系数,所以当n(qi)越小的时候IDF值就越大,表示词的权重就越大。
来举个栗子:“bm25”这个词只在很少一部分的文章中出现,n(qi)就会很小,那么“bm25”的IDF值就很大;“我们”,“是”,“的”这样的词,基本上在每一篇文章中都会出现,那么n(qi)就很接近N,所以IDF值就很接近于0,
接着我们来看公式中的第二项R(qi,d),接着来看看第二项的计算公式:

在这个公式中,一般来说,k1、k2和b都是调节因子,k1=1、k2=1、b = 0.75,qfi表示qi在查询query中出现的频率,fi表示qi在文档d中出现的频率,因为在一般的情况下,qi在查询query中只会出现一次,因此把qfi=1和k2=1代入上述公式中,后面一项就等于1,最终可以得到:

我们再来看看K,在这里其实K的值也是一个公式的缩写,我们把K展开来看:
在K的展开式中dl表示文档的长度,avg(dl)表示文档的平均长度,b是前面提到的调节因子,从公式中可以看出在文章长度比平均文章长度固定的情况下,调节因子b越大,文章长度占有的影响权重就越大,反之则越小。在调节因子b固定的时候,当文章的长度比文章的平均长度越大,则K越大,R(qi,d)就越小。我们把K的展开式带入到bm25计算公式中去:

以上就是bm25算法的流程了。
以下是实现过程:
版权声明
本文为[IT界的小小小学生]所创,转载请带上原文链接,感谢
https://vip01.blog.csdn.net/article/details/103206166
边栏推荐
- 使用Asponse.Words處理Word模板
- 基於MVC的RESTFul風格API實戰
- Leetcode's ransom letter
- 中国提出的AI方法影响越来越大,天大等从大量文献中挖掘AI发展规律
- 快快使用ModelArts,零基礎小白也能玩轉AI!
- [C#] (原創)一步一步教你自定義控制元件——04,ProgressBar(進度條)
- 6.9.2 session flashmapmanager redirection management
- 哇,ElasticSearch多字段权重排序居然可以这么玩
- Aprelu: cross border application, adaptive relu | IEEE tie 2020 for machine fault detection
- Didi elasticsearch cluster cross version upgrade and platform reconfiguration
猜你喜欢

Anomaly detection method based on SVM

你的财务报告该换个高级的套路了——财务分析驾驶舱

Aprelu: cross border application, adaptive relu | IEEE tie 2020 for machine fault detection

Using Es5 to realize the class of ES6

Use of vuepress

事半功倍:在没有机柜的情况下实现自动化

Troubleshooting and summary of JVM Metaspace memory overflow

网络安全工程师演示:原来***是这样获取你的计算机管理员权限的!【维持】

Pattern matching: The gestalt approach一种序列的文本相似度方法

用Python构建和可视化决策树
随机推荐
2018中国云厂商TOP5:阿里云、腾讯云、AWS、电信、联通 ...
[C#] (原創)一步一步教你自定義控制元件——04,ProgressBar(進度條)
“颜值经济”的野望:华熙生物净利率六连降,收购案遭上交所问询
用Keras LSTM构建编码器-解码器模型
接口压力测试:Siege压测安装、使用和说明
Kitty中的动态线程池支持Nacos,Apollo多配置中心了
简直骚操作,ThreadLocal还能当缓存用
Analysis of ThreadLocal principle
The practice of the architecture of Internet public opinion system
Network programming NiO: Bio and NiO
100元扫货阿里云是怎样的体验?
词嵌入教程
xmppmini 專案詳解:一步一步從原理跟我學實用 xmpp 技術開發 4.字串解碼祕笈與訊息包
網路程式設計NIO:BIO和NIO
Listening to silent words: hand in hand teaching you sign language recognition with modelarts
【QT】 QThread部分原始碼淺析
Using Es5 to realize the class of ES6
PLC模拟量输入和数字量输入是什么
读取、创建和运行多个文件的3个Python技巧
Elasticsearch database | elasticsearch-7.5.0 application construction