概率检索模型

概率检索模型是当前信息检索领域效果最好的模型之一,它基于对已有反馈结果的分析,根据贝叶斯原理为当前查询排序。

我在之前的博客 朴素贝叶斯分类 中介绍了如何用朴素贝叶斯算法对数据进行分类,其实概率检索模型的基本原理与朴素贝叶斯分类是一样的。先回忆一下朴素贝叶斯算法的原理:对于测试元组 X X ,最终目的是要计算对于不同的类 Ci C i ,计算后验概率 p(Ci|X) p ( C i | X ) ,哪个类最大,就属于哪个类。而为了计算 p(Ci|X) p ( C i | X ) ,则需要用贝叶斯公式做如下分解:

p(Ci|X)=p(X|Ci)p(Ci)p(X)(10) (10) p ( C i | X ) = p ( X | C i ) p ( C i ) p ( 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 个相互之间无关的属性组成,那么这个概率一般如下计算:

p(X|Ci)=j=1np(Xj|Ci)(11) (11) p ( X | C i ) = ∏ j = 1 n p ( X j | C i )

其中 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 的概率。如果属性是连续属性呢,你自己看上面那篇博文,我这里不说了。之所以说离散时的情况,是因为本文后面要用。以上就是朴素贝叶斯分类法的原理,我大概复述一遍,方便理解后面要说的东西。

1. 基本思想

概率检索模型与贝叶斯分类的思想非常接近,但还是有本质区别的。概率检索模型的根本目的不是分类,它不需要根据查询判断一个文档属于“相关”或者“不相关”,而是计算这个文档属于属于“相关”或者“不相关”的概率大小为文档排序。我将概率检索模型要解决的问题刻画如下。

问题模型:现在对于一个查询 q q ,已知文档集中哪些与 q q 是相关的(这类文档的类标号记为 C1 C 1 ),哪些与 q q 是不相关的(这类文档的类标号记为 C0 C 0 )。概率检索模型的核心是对于每一个文档 X X 计算公式(1),公式(1)计算出的 α α 代表了文档 X X 属于“相关”类的概率与属于“不相关”类的概率的比值(也叫“优势比”)。显然,这个比值越大,代表该文档与查询的相关度越大,因此我们就把 α α 看做是相关度得分,最后通过 α α 将文档排序。

α=p(C1|X)p(C0|X)=p(X|C1)p(C1)p(X|C0)p(C0)(1) (1) α = p ( C 1 | X ) p ( C 0 | X ) = p ( X | C 1 ) p ( C 1 ) p ( X | C 0 ) p ( C 0 )

其中, p(C1|X) p ( C 1 | X ) p(C0|X) p ( C 0 | X ) 的计算过程如下:

p(C1|X)=p(X|C1)p(C1)p(X)p(C0|X)=p(X|C0)p(C0)p(X)(12) (12) p ( C 1 | X ) = p ( X | C 1 ) p ( C 1 ) p ( X ) p ( C 0 | X ) = p ( X | C 0 ) p ( C 0 ) p ( X )

2. 推导过程

现在看看具体怎样计算公式(1)。首先, p(C1) p ( C 1 ) p(C0) p ( C 0 ) 其实对于所有的文档来说都是一样的,因为最终的目的是比较大小,所以我们忽略掉。 α α 的计算可以简写成如下形式:

α=p(X|C1)p(X|C0)(2) (2) α = p ( X | C 1 ) p ( X | 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 中随机选择的一篇文档中出现的概率就是 1p(wj|Ci) 1 − p ( w j | C i ) ,那么记为 p(wj|Ci) p ( w j ¯ | C i ) 好了。

现在就可以将 α α 的计算公式写成如下形式:

α=wjXp(wj|C1)wjXp(wj|C1)wjXp(wj|C0)wjXp(wj|C0)(13) (13) α = ∏ w j ∈ X p ( w j | C 1 ) ∏ w j ∉ X p ( w j ¯ | C 1 ) ∏ w j ∈ X p ( w j | C 0 ) ∏ w j ∉ X p ( w j ¯ | C 0 )

为了方便推导,将 p(wj|C1) p ( w j | C 1 ) 记为 pj p j ,将 p(wj|C0) p ( w j | C 0 ) 记为 sj s j ,则 α α 可以表示成下面的公式(3):

α=wjXpjwjX1pjwjXsjwjX1sj(3) (3) α = ∏ w j ∈ X p j ∏ w j ∉ X 1 − p j ∏ w j ∈ X s j ∏ w j ∉ X 1 − s j

直接看公式(3)可能有点抽象,我举个例子尝试说明一下,假如文档集的词典为 {w1,w2,w3,w4} { w 1 , w 2 , w 3 , w 4 } ,文档1拥有的词项为 {w1,w3} { w 1 , w 3 } ,那么文档1的 α α 值可以如下计算:

α=p1p3(1p2)(1p4)s1s3(1s2)(1s4)(14) (14) α = p 1 p 3 ⋅ ( 1 − p 2 ) ( 1 − p 4 ) s 1 s 3 ⋅ ( 1 − s 2 ) ( 1 − s 4 )

现在,对公式(3)做一个数学上的等价变换,如下:

α=wjXpjwjX1pjwjXsjwjX1sj=wjXpjwjXsjwjX1pjwjX1sj=(wjXpjwjXsjwjX1sjwjX1pj)(wjX1pjwjX1sjwjX1pjwjX1sj)=wjXpj(1sj)wjXsj(1pj)1pj1sj(4) (4) α = ∏ w j ∈ X p j ∏ w j ∉ X 1 − p j ∏ w j ∈ X s j ∏ w j ∉ X 1 − s j = ∏ w j ∈ X p j ∏ w j ∈ X s j ⋅ ∏ w j ∉ X 1 − p j ∏ w j ∉ X 1 − s j = ( ∏ w j ∈ X p j ∏ w j ∈ X s j ⋅ ∏ w j ∈ X 1 − s j ∏ w j ∈ X 1 − p j ) ⋅ ( ∏ w j ∈ X 1 − p j ∏ w j ∈ X 1 − s j ∏ w j ∉ X 1 − p j ∏ w j ∉ X 1 − s j ) = ∏ w j ∈ X p j ( 1 − s j ) ∏ w j ∈ X s j ( 1 − p j ) ⋅ ∏ 1 − p j ∏ 1 − s j

其中 pj p j sj s j 对于任意文档来说都一样,所以公式(4)的第二部分可以忽略,这也是我上面经过这么复杂的公式计算的原因,就是要将文档排序的比较依据化简成

α=wjXpj(1sj)wjXsj(1pj)(15) (15) α = ∏ w j ∈ X p j ( 1 − s j ) ∏ w j ∈ X s j ( 1 − p j )

log log 函数进一步处理,得到:

j=1nlogpj1pj+log1sjsj(5) (5) ∑ j = 1 n log ⁡ p j 1 − p j + log ⁡ 1 − s j s j

也就是说,现在只要能计算出 pj p j sj s j 就成功了。在计算之前,我们先写出下面的索引项出现列联表:

    相 关 文 档 数 不 相 关 文 档 数 总 文 档 数
包含 wj w j 的文档 rj r j njrj n j − r j nj n j
不包含 wj w j 的文档 |C1|rj | C 1 | − r j Nnj|C1|+rj N − n j − | C 1 | + r j Nnj N − n j
所有文档 |C1| | C 1 | |C0| | C 0 | N

根据这个表可以得到以下计算公式:

pj=rj|C1|sj=njrj|C0|(16) (16) p j = r j | C 1 | s j = n j − r j | C 0 |

因为在公式(5)中,我们用 log log 函数进行了处理,所以我们在 pj p j sj s j 的计算公式中分子加0.5,分母加1,做平滑计算:

pj=rj+0.5|C1|+1sj=njrj+0.5|C0|+1(17) (17) p j = r j + 0.5 | C 1 | + 1 s j = n j − r j + 0.5 | C 0 | + 1

把上面的结果代入公式(5),得到:

j=1nlog(rj+0.5)(|C0|nj+rj+0.5)(|C1|rj+0.5)(njrj+0.5)(6) (6) ∑ j = 1 n log ⁡ ( r j + 0.5 ) ( | C 0 | − n j + r j + 0.5 ) ( | C 1 | − r j + 0.5 ) ( n j − r j + 0.5 )

这个公式(6)也叫做Robertson-Sparck Jones等式。

3. 无类别估值的解决方案

Robertson-Sparck Jones等式的计算条件是知道 |C1| | C 1 | ,但是如果不知道呢?实际上,大多时候我们是不知道的。一种可行的方案是,初始时令 |C1|=0 | C 1 | = 0 ,则公式(6)化简为:

j=1nlogNnj+0.5nj+0.5(7) (7) ∑ j = 1 n log ⁡ N − n j + 0.5 n j + 0.5

可以看到,公式(7)里面有一个IDF的成分,但是既没有TF成分,也没有文档长度归一化的处理过程。这些问题导致上面所说的概率检索模型并不实用。后来的BM25模型解决了这些问题,成为了商业搜索系统中非常成功的案例。

4. BM25模型

我们知道,在向量空间模型的经典权重算法 TFIDF 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)计算生成:

Bi,j=(K1+1)fi,jK1[(1b)+blen(Di)avg_doclen]+fi,j(8) (8) B i , j = ( K 1 + 1 ) f i , j K 1 [ ( 1 − b ) + b l e n ( D i ) a v g _ d o c l e n ] + f i , j

其中, 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等式最终计算出文档关于查询的排序:

sim(Dj,q)=tjqBi,j×log(rj+0.5)(|C0|nj+rj+0.5)(|C1|rj+0.5)(njrj+0.5)(18) (18) s i m ( D j , q ) = ∑ t j ∈ q B i , j × log ⁡ ( r j + 0.5 ) ( | C 0 | − n j + r j + 0.5 ) ( | C 1 | − r j + 0.5 ) ( n j − r j + 0.5 )

如果不知道哪些文档是相关的,那么根据公式(7),还可以简化上式:

sim(Dj,q)=tiqBi,j×logNnj+0.5nj+0.5(9) (9) s i m ( D j , q ) = ∑ t i ∈ q B i , j × log ⁡ N − n j + 0.5 n j + 0.5

这个公式(9),就是BM25模型最为经典的计算公式。

你可能感兴趣的:(信息检索,信息检索学习笔记)