bm25算法详解

2024-02-18  本文已影响0人  又双叒叕苟了一天

bm25算法是TF-IDF算法的改进版本,考虑了查询中单词在文档中出现的频率、单词自身的重要性和文档的长度
应用:信息检索领域的排名函数

公式

Score(D,Q)=\sum_{i=1}^nIDF(q_i)\cdot\frac{f(q_i,D)\cdot(k_1+1)}{f(q_i,D)+k_i1(1-b+b\frac{|D|}{avgdl})}
说明:

  1. Score(D,Q)表示查询Q文档D的匹配分
  2. 首先对查询D进行分词,获得每个单词q_i
  3. 计算单词q_i的逆文档频率IDF(q_i)=\log(\frac{N-n(q_i)+0.5}{n(q_i)+0.5}+1),其中N为文档总数(常量),n(q_i)是包含单词q_i的文档数,意味着出现单词q_i的文档数越多,单词越不重要。例如:the,is,是,的这些单词。
  4. f(q_i,D)表示单词q_i在文档D中出现的频率,出现的频率越高,说明匹配分越高。
  5. k_1:正系数,控制词频的饱和度,取值范围[1.2,2]。k_1越大,词频,即单词q_i在文档D中出现的频率越大,文档D的匹配分数越高
  6. b:通常设置为0.75,取值范围[0,1],控制文档长度对评分的影响,b越大影响越大,0时没有影响。文档长度越大,评分越低。avgdl为所有文档的平均长度,为常量。|D|为文档D的长度。|D|越大,分母越大,则分数越低。

与TFIDF的区别

公式

\mathrm{tfidf_{i,j}}=\mathrm{idf_{i,j}}\cdot\mathrm{tf_{i,j}}=\lg\frac{|D|}{|\{j:t_i\in d_j\}|}\cdot \frac{n_{i,j}}{\sum_kn_{i,k}}

  1. \mathrm{tf_{i,j}}表示单词n_{i,j}的词频,词频越高,重要性越高
  2. \mathrm{tfidf_{i,j}}表示单词n_{i,j}在所有文档中出现的频率的倒数,再以log为底数得到,出现的频率越高,越不重要
  3. bm25相对tfidf,引入了系数k1,b,衡量了tf和文档长度对评分的影响

Best Matching 25 其中25的含义是此算法经过 25 次迭代调整之后得到的,这也是这个匹配算法经久不衰的原因。

参考文章

RAG提效利器——BM25检索算法原理和Python实现
科普一下Elasticsearch中BM25算法的使用

上一篇 下一篇

猜你喜欢

热点阅读