概率检索模型是当前信息检索领域效果最好的模型之一,它基于对已有反馈结果的分析,根据贝叶斯原理为当前查询排序。
我在之前的博客 朴素贝叶斯分类 中介绍了如何用朴素贝叶斯算法对数据进行分类,其实概率检索模型的基本原理与朴素贝叶斯分类是一样的。先回忆一下朴素贝叶斯算法的原理:对于测试元组 X X ,最终目的是要计算对于不同的类 Ci C i ,计算后验概率 p(Ci|X) p ( C i | X ) ,哪个类最大,就属于哪个类。而为了计算 p(Ci|X) p ( C i | X ) ,则需要用贝叶斯公式做如下分解:
因为要比较大小,所以忽略 p(X) p ( X ) ,只需要考虑分子中的 p(X|Ci)p(Ci) p ( X | C i ) p ( C i ) ,其中 p(Ci) p ( C i ) 可以通过抽样得到,那么问题转化为计算 p(X|Ci) p ( X | C i ) , p(X|Ci) p ( X | C i ) 代表 X X 在类 Ci C i 中的概率。如果 X X 由 n n 个相互之间无关的属性组成,那么这个概率一般如下计算:
其中 Xj X j 为测试元组的第 j j 个属性值,如果属性是离散属性,那么 p(Xj|Ci)=|Xj||Ci| p ( X j | C i ) = | X j | | C i | ,其中 |Xj||Ci| | X j | | C i | 表示类 Ci C i 的数据元组中拥有属性 Xj X j 的概率。如果属性是连续属性呢,你自己看上面那篇博文,我这里不说了。之所以说离散时的情况,是因为本文后面要用。以上就是朴素贝叶斯分类法的原理,我大概复述一遍,方便理解后面要说的东西。
概率检索模型与贝叶斯分类的思想非常接近,但还是有本质区别的。概率检索模型的根本目的不是分类,它不需要根据查询判断一个文档属于“相关”或者“不相关”,而是计算这个文档属于属于“相关”或者“不相关”的概率大小为文档排序。我将概率检索模型要解决的问题刻画如下。
问题模型:现在对于一个查询 q q ,已知文档集中哪些与 q q 是相关的(这类文档的类标号记为 C1 C 1 ),哪些与 q q 是不相关的(这类文档的类标号记为 C0 C 0 )。概率检索模型的核心是对于每一个文档 X X 计算公式(1),公式(1)计算出的 α α 代表了文档 X X 属于“相关”类的概率与属于“不相关”类的概率的比值(也叫“优势比”)。显然,这个比值越大,代表该文档与查询的相关度越大,因此我们就把 α α 看做是相关度得分,最后通过 α α 将文档排序。
其中, p(C1|X) p ( C 1 | X ) 和 p(C0|X) p ( C 0 | X ) 的计算过程如下:
现在看看具体怎样计算公式(1)。首先, p(C1) p ( C 1 ) 和 p(C0) p ( C 0 ) 其实对于所有的文档来说都是一样的,因为最终的目的是比较大小,所以我们忽略掉。 α α 的计算可以简写成如下形式:
接下来计算 p(X|Ci) p ( X | C i ) 的方法就跟朴素贝叶斯中那个连乘的公式是一样的了,但是有一点不同,用朴素贝叶斯做数据分类的时候,一般默认所有数据元组的属性值都是存在的,而到了信息检索这就不一样了,我们知道文档由词项组成,而某一个词项可能在某一个文档中,也可能不在。
所以我们不妨记单词 wj w j 在类 Ci C i 中随机选择的一篇文档中出现的概率为 p(wj|Ci) p ( w j | C i ) ;那么单词 wj w j 不在类 Ci C i 中随机选择的一篇文档中出现的概率就是 1−p(wj|Ci) 1 − p ( w j | C i ) ,那么记为 p(wj⎯⎯⎯⎯⎯⎯|Ci) p ( w j ¯ | C i ) 好了。
现在就可以将 α α 的计算公式写成如下形式:
为了方便推导,将 p(wj|C1) p ( w j | C 1 ) 记为 pj p j ,将 p(wj|C0) p ( w j | C 0 ) 记为 sj s j ,则 α α 可以表示成下面的公式(3):
直接看公式(3)可能有点抽象,我举个例子尝试说明一下,假如文档集的词典为 {w1,w2,w3,w4} { w 1 , w 2 , w 3 , w 4 } ,文档1拥有的词项为 {w1,w3} { w 1 , w 3 } ,那么文档1的 α α 值可以如下计算:
现在,对公式(3)做一个数学上的等价变换,如下:
其中 pj p j 和 sj s j 对于任意文档来说都一样,所以公式(4)的第二部分可以忽略,这也是我上面经过这么复杂的公式计算的原因,就是要将文档排序的比较依据化简成
用 log log 函数进一步处理,得到:
也就是说,现在只要能计算出 pj p j 和 sj s j 就成功了。在计算之前,我们先写出下面的索引项出现列联表:
相关文档数 相 关 文 档 数 | 不相关文档数 不 相 关 文 档 数 | 总文档数 总 文 档 数 | |
---|---|---|---|
包含 wj w j 的文档 | rj r j | nj−rj n j − r j | nj n j |
不包含 wj w j 的文档 | |C1|−rj | C 1 | − r j | N−nj−|C1|+rj N − n j − | C 1 | + r j | N−nj N − n j |
所有文档 | |C1| | C 1 | | |C0| | C 0 | | N |
根据这个表可以得到以下计算公式:
因为在公式(5)中,我们用 log log 函数进行了处理,所以我们在 pj p j 和 sj s j 的计算公式中分子加0.5,分母加1,做平滑计算:
把上面的结果代入公式(5),得到:
这个公式(6)也叫做Robertson-Sparck Jones等式。
Robertson-Sparck Jones等式的计算条件是知道 |C1| | C 1 | ,但是如果不知道呢?实际上,大多时候我们是不知道的。一种可行的方案是,初始时令 |C1|=0 | C 1 | = 0 ,则公式(6)化简为:
可以看到,公式(7)里面有一个IDF的成分,但是既没有TF成分,也没有文档长度归一化的处理过程。这些问题导致上面所说的概率检索模型并不实用。后来的BM25模型解决了这些问题,成为了商业搜索系统中非常成功的案例。
我们知道,在向量空间模型的经典权重算法 TF−IDF T F − I D F 中,好的索引权重模型应该考虑三方面的内容:(1)词频;(2)逆文档频率;(3)文档长度。而上面由概率检索模型推导出的公式(6)显然只是包含了逆文档频率的因素,而未考虑词频和文档长度。实验结果也证明Robertson-Sparck Jones等式直接应用的效果并不好。所以学者们考虑在Robertson-Sparck Jones等式中加入代表词频和文档长度的因子,重新计算文档排序。这就是经典的BM25模型。
BM25模型为文档 Di D i 每个索引项 tj t j 分配了一个系数 Bi,j B i , j ,由公式(8)计算生成:
其中, K1 K 1 和 b b 为经验参数,用于调节词频和文档长度在权重计算中起到的作用,一般来讲, K1 K 1 取1, b b 取0.75已经被证明是合理的假设。而 fi,j f i , j 则为词 wj w j 在文档 Di D i 中的词频, avg_doclen a v g _ d o c l e n 为平均文档长度。
计算得到了系数 Bi,j B i , j ,就可以基于Robertson-Sparck Jones等式最终计算出文档关于查询的排序:
如果不知道哪些文档是相关的,那么根据公式(7),还可以简化上式:
这个公式(9),就是BM25模型最为经典的计算公式。