搜索算法相似度问题之BM25

本文介绍了BM25算法在文本相似度搜索中的优势,对比了TFIDF,讨论了一个包含20万篇论文的匹配任务。任务要求为描述段落找到最相关的论文,通过Mean Average Precision @ 3评估。解决方案包括Word2Vec结合SIF、InferSent和BERT的多种建模思路,其中SIF Sentence Embedding在验证集上表现最佳。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在实践中,无论是搜索问题,还是文本问题,如何找到相似的文本都是一个常见的场景,但TFIDF文本相似度计算用多了,年轻人往往会不记得曾经的经典。

毕业快4年了,最近准备梳理一下《我毕业这4年》,在整理文档时看到了好久之前的一个比赛,想起了当时TFIDF、BERT的方案都没在指标上赢过BM25的情景,本期我们来聊一聊相似文本搜索的相关知识点。

791c84bd84dad0c0703806d72db7f0f9.png

BM25是信息索引领域用来计算Query与文档相似度得分的经典算法,不同于TFIDF,BM25的公式主要由三个部分组成:

  • 对Query进行语素解析,生成语素qi;
  • 对于每个搜索结果D,计算每个语素qi与D的相关性得分;
  • 将qi相对于D的相关性得分进行加权求和,从而得到Query与D的相关性得分。

公式如下:

837defca0308dad9ce6c6a02054f53f6.png

其中,Q表示Query,qi表示Q解析之后的一个语素,d表示一个搜索结果文档,Wi表示语速qi的权重,R(qi,d)表示语素qi与文档d的相关性得分。

5076c9e8effb73d97926590e20383c5d.png
 class BM25:
    def __init__(self, corpus, tokenizer=None):
        self.corpus_size = len(corpus)
        self.avgdl = 0
        self.doc_freqs = []
        self.idf = {}
        self.doc_len = []
        self.tokenizer = tokenizer

        if tokenizer:
            corpus = self._tokenize_corpus(corpus)

        nd 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值