用go构建个简单的搜索(七) BM25打分

1,018 阅读1分钟

对于搜索结果最关键的是打分,打分越高说明对搜索结果越匹配。

本篇介绍下BM25的打分说明,BM25是对TF-IDF(用go构建个简单的搜索(六)搜索结果的排序)的升级改进。

传统        TF Score = sqrt(tf) tf会无限大的 
抑止TF的增长 TF=T(单词出现的次数) 一般会用-》 TF=T/C (是单词总数或者是文件长度)

BM25的做法  TF Score = ((k1 + 1) * tf) / (K + tf)
                                         K = k1(1 - b + b*dl/avgdl)
            
                  IDF * TF * (k1 + 1)
    BM25 = sum ----------------------------
               TF + k1 * (1 - b + b * D / L)
  • K1 0-3 可调参数
  • b 0-1 可调参数
  • 但 k1 = 1.2 和 b = 0.75 的 BM25 似乎在大多数情况下都能给出非常好的结果
  • D文档长度
  • L(Lavgdl)为所有文档的平均长度。

简要概括

  • TFIDF:基于词频的越高值越大,如果某个词或短语在某个文档中出现的频率较高则对词频较低的文档能很好区分出来,适合分类。

  • bm25:一种用来评价搜索词和文档之间相关性的算法,它是一种基于概率检索模型提出的算法

  • 这两种打分都是基于词的属于精确匹配和上下文的语义搜索无关。例如搜网红关键词匹配出主播(当然这个可以用同义词处理 同义词有哈工大有个词典或者同义词挖掘算法word2vector)