【NLP】非监督文本匹配算法——BM25

背景

在信息搜索中,我们做的第一步就是检索。对于文本检索中,第一步就是数据库中的内容与检索的内容进行匹配,符合匹配要求的话就根据相关业务处理。

在NLP中,我们可以认为是要让机器去理解检索内容,然后从现有数据库中返回对应内容。从这看文本匹配就是NLU(Nature Language Understand ,自然语言理解)中的核心内容了。

再延展一下,搜索这项功能在我们生活中也是太多太多。大众一点就是搜索引擎,商品搜索等,在问题系统中可以匹配相似的问题,然后返回对应答案等。

文本匹配包括监督学习方法以及非监督学习方法。或者分为传统方法和深度学习方法。传统的非监督学习方法有:Jaccard,Levenshtein(编辑距离),Simhash,BM25,VSM(向量空间)等,最具代表的算法当属BM25。其在著名的搜索解决方案Elastic中就有相关的使用。

BM25

BM25 在 20 世纪 70 年代到 80 年代被提出,到目前为止已经过去二三十年了,但是这个算法依然在很多信息检索的任务中表现优异,是很多工程师首选的算法之一。有时候全称是 Okapi BM25,这里的“BM”是“最佳匹配”(Best Match)的简称。

现代 BM25 算法是用来计算某一个目标文档(Document)相对于一个查询关键字(Query)的“相关性”(Relevance)的流程。通常情况下,BM25 是“非监督学习”排序算法中的一个典型代表。

下面部分内容参考文本相似度-bm25算法原理及实现

假如我们有一系列的文档 D \mathbf{D} D,现在要搜索 Q u e r y Query Query。BM25的思想是,对 Q u e r y Query Query进行语素解析,生成语素 Q \mathbf{Q} Q;然后对于每个搜索文档 D i D_i Di计算每个语素 Q i Q_i Qi与文档 D j D_j Dj的相关性,最后将所有的语素 Q i Q_i Qi D j D_j Dj进行加权求和,从而对搜索 Q u e r y Query Query D j D_j Dj之间的相似性得分。将BM25算法总结成以下公式:
S c o r e ( Q u e r y , D i ) = ∑ i n W i ⋅ R ( Q i , D j ) Score(Query, D_i) = \sum_{i}^{n}W_i\cdot R(Q_i, D_j) Score(Query,Di)=inWiR(Qi,Dj)
在中文中,我们通常将每一个词语当做 Q i Q_i Qi W i W_i Wi表示语素 Q i Q_i Qi的权重, R ( Q i , D j ) R(Q_i, D_j) R(Qi,Dj)表示语素 Q i Q_i Qi与文档 D i D_i Di的相关性得分关系。

判断一个词语与一个文档的相关性权重,较常用的就是TF-IDF算法中的IDF,该算法使用的公式如下:
I D F ( q i ) = log ⁡ N − n ( Q i ) + 0.5 n ( Q i ) + 0.5 IDF(q_i) = \log \frac{N-n(Q_i) + 0.5}{n(Q_i) + 0.5} IDF(qi)=logn(Qi)+0.5Nn(Qi)+0.5
其中:

  • N 表示待检索文档的数目
  • n ( Q i ) n(Q_i) n(Qi)表示包含 Q i Q_i Qi的文档数

IDF的物理意义就是:对应给定的文档集合,包含 Q i Q_i Qi的文档多了,那么 Q i Q_i Qi的权重就应该低一点。

对于语素 Q i Q_i Qi与文档 D j D_j Dj的相关性得分 R ( Q i , D i ) R(Q_i, D_i) R(Qi,Di),其在BM25算法中的公式如下:
R ( Q i , D j ) = f i ⋅ ( k 1 + 1 ) f i + K ⋅ q f i ( k 2 + 1 ) q f i + k 2 R(Q_i, D_j) = \frac{f_i\cdot(k_1 + 1)}{f_i + K}\cdot \frac{qf_i(k_2+1)}{qf_i + k_2} R(Qi,Dj)=fi+Kfi(k1+1)qfi+k2qfi(k2+1)
K = k 1 ⋅ ( 1 − b + b ⋅ D j l a v g D l ) K=k_1\cdot(1 - b+ b\cdot\frac{D_j^l}{avg D^l}) K=k1(1b+bavgDlDjl)
这里引入多个变量,其中:

  • k 1 k_1 k1 k 2 k_2 k2 b b b为调节因子,根据经验通常为 k 1 = 2 , b = 0.75 k_1=2,b=0.75 k1=2,b=0.75
  • f i f_i fi表示 Q i Q_i Qi D j D_j Dj中出现的频率(次数)
  • q f i qf_i qfi表示 Q i Q_i Qi Q u e r y Query Query中出现的频率(次数)
  • D j l D_j^l Djl表示文档 D j D_j Dj长度
  • a v g D l avg D^l avgDl表示所有文档的平均长度

从公式可以看出 b b b的物理意义:调整文档长度对相关性的影响。 b b b越大,则 K K K就越小,相关性得分就越大,反之越小。文档长度越长, K K K也会变大,相关性得分就会越小,其在相关性得分作用可以这样理解:当文档较长时,那么包含 Q i Q_i Qi的概率就变大,那么长文档与 q i q_i qi的相关性应该比段文档与 Q i Q_i Qi的相关性要弱。

通常, Q i Q_i Qi Q u e r y Query Query中出现的一次,则也可将公式化简成以下形式:
R ( Q i , D j ) = f i ⋅ ( k 1 + 1 ) f i + K R(Q_i, D_j) = \frac{f_i\cdot(k_1 + 1)}{f_i + K} R(Qi,Dj)=fi+Kfi(k1+1)

综上来说,BM25算法的相关性得分公式可有如下形式:
S c o r e ( Q u e r y , D i ) = ∑ i n I D F ( Q i ) ⋅ f i ⋅ ( k 1 + 1 ) f i + k 1 ⋅ ( 1 − b + b ⋅ D j l a v g D l ) Score(Query, D_i) = \sum_{i}^{n}IDF(Q_i) \cdot \frac{f_i \cdot (k_1+1)}{f_i + k_1 \cdot (1- b + b\cdot \frac{D_j^l}{avg D^l})} Score(Query,Di)=inIDF(Qi)fi+k1(1b+bavgDlDjl)fi(k1+1)

那么,当通过使用不同的语素分析方法,语素权重判定方法以及语素与文档的相关性判定方法,可以衍生很多不同的搜索相关性计算方法,灵活性也比较大。

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智绘山河

你的鼓励可能解决你下一个问题

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值