一、相关反馈的简介
相关反馈(Relevance Feedback)是某些信息检索系统的一个特征,用于评价被回溯(或者说检索)到的文章是否与需要的信息相关。有时用户只使用了一两个关键词用于检索,但我们很难弄清回溯结果是否符合用户需求。
二、反馈种类
- 显式反馈 Explicit Feedback来自用户对回溯文档是否相关的直接反馈,反馈通常为评分或者二进制的Good/Bad。但是用户一般不会愿意花费精力去提供反馈。
- 隐式反馈 Implicit Feedback通过用户的行为来判断用户的喜好,如用户的点击、浏览时间、文档注释等。通常搜索引擎还会列出相关搜索词,譬如我们耳熟能详的:“你要找的是不是xxx”来作为反馈信息。
- 盲反馈Blind Feedback也称伪反馈,是由计算机自动处理检索结果,不需要用户的参与也可以得到比较满意的检索效果。这种方法假定用户初始检索结果的前k篇文档是相关的,再由系统抽选出这k篇文档的特征词,然后把这些特征词和初始查询词再放入搜索框中进行二次检索,这种行为我们称之为查询扩展Query Expansion。通过扩展查询词可以提高检索系统的性能,
三、查询优化
3.1 优化流程
在盲反馈中我们提到了查询扩展Query Expansion,指的是在原始查询中加入新的关键词而不去掉原有查询关键词。一个相似的概念是查询优化Query Reformulation\Modification,目标是让查询结果相关度从低变高,这个概念经常跟Query Expansion混用,但是实际上我们不关心这两个概念的异同,因为最终的目标是尽可能获得好的查询结果。
查询优化的流程可以用下图表示:
- 原始查询Q回溯文档集F
- 用相关分析函数判断文档集的相关程度
- 根据相关程度分析结果对查询进行优化,
- 将优化后的查询作为新一轮回溯的输入
- 反复上述4步直到结果收敛。优化查询后的回溯文档集应该比原始文档集包含更多相关文档,如下图所示
3.2 具体方法
老子有曰:“天之道,损有余而补不足;人之道,损不足而益有余”。我们优化查询的目的有二,一是损不足:弱化导致回溯不相关结果的关键词,譬如,如果我们想查的是苹果电脑,那戴尔、惠普的电脑应该被屏蔽,我们需要把戴尔和电脑两个关键词的权重减轻;二是益有余:加强导致回溯相关结果的关键词,譬如原始查询为apple,如果用户认为apple 和iPod是相关结果的,那么我们就应当加强apple和iPod这两个关键词的权重。下面我们将讨论如何得到最优的查询。
已知相关文档集情况
假设相关文档集是 D R D_R DR,不相关文档集是 D N D_N DN, t i , j t_{i,j} ti,j表示关键词 i i i在文档 j j j的权重,我们通过求加权的关键词得到文档集中心, D R D_R DR的中心 D R ′ = ∑ j ∈ D R t i , j ∣ D R ∣ D'_R=\dfrac{\sum_{j\in D_R}t_{i,j}}{|D_R|} DR′=∣DR∣∑j∈DRti,j, D N D_N DN的中心点是 D N ′ = ∑ j ∈ D N t i , j ∣ D N ∣ D'_N=\dfrac{\sum_{j\in D_N}t_{i,j}}{|D_N|} DN′=∣DN∣∑j∈DNti,j。假设 C C C是一个经验加权常数矩阵,我们可以把最优查询 Q o p t Q_{opt} Qopt表示为 Q o p t = C ( D R ′ − D N ′ ) Q_{opt}=C(D'_R-D'_N) Qopt=C(DR′−DN′)
未知相关文档集情况
一般情况下,推荐系统很难完全掌握所有的相关文档,我们通常是渐进地修改查询结果。假设
D
R
′
D_{R'}
DR′和
D
N
′
D_{N'}
DN′是用户判断的相关文档集和不相关文档集,
Q
Q
Q是输入的查询,
Q
′
Q'
Q′是优化的查询,
α
\alpha
α、
β
\beta
β、
γ
\gamma
γ是常数,我们可以把优化过程表示为以下方程
Q
′
=
α
Q
+
β
(
∑
i
∈
D
R
′
D
i
∣
D
R
′
∣
)
+
γ
(
∑
i
∈
D
N
′
D
i
∣
D
N
′
∣
)
Q'=\alpha Q+\beta(\dfrac{\sum_{i\in D_{R'}}D_i}{|D_{R'}|})+\gamma(\dfrac{\sum_{i\in D_{N'}}D_i}{|D_{N'}|})
Q′=αQ+β(∣DR′∣∑i∈DR′Di)+γ(∣DN′∣∑i∈DN′Di)
3.3 相关分析/兴趣分析
这里顺带介绍下我们教授Dik Lun Lee的工作 👇
Mining User preference using Spy voting for search engine personalization
上文提到,我们的搜索引擎一般是通过用户的隐式反馈判断文档相关性的,其中最常见的指标就是点击,You are what you clicked!搜索引擎通常会将用户点击行为存进Logging database,然后构建用户模型,推断用户对文章的喜好。
一般来说,用户会倾向于看搜索引擎召回结果中排在前面的网页,我们假设用户从头到尾浏览所有的召回结果,通过挖掘用户点击的网页和跳过的网页,我们能推断出用户的喜好,从而推测文档的相关性。这里用一个例子来介绍几个不同的挖掘策略,C为点击的数据:
Result | l 1 l_1 l1 | l 2 l_2 l2 | l 3 l_3 l3 | l 4 l_4 l4 | l 5 l_5 l5 | l 6 l_6 l6 | l 7 l_7 l7 |
---|---|---|---|---|---|---|---|
C | √ | √ | √ |
- Click > Skip Above : 被点击的文档相关性比没有被点击的文档高,但被点击的文档之间相关性没有高低之分,没有被点击的文档之间也没有高低之分。对所有的 ( i , j ) (i,j) (i,j)对,如果 i > j ≥ 1 i\gt j \ge 1 i>j≥1, i ∈ C i\in C i∈C, j ∉ C j\not \in C j∈C, r e l ( l i ) > r e l ( l j ) rel(l_i)\gt rel(l_j) rel(li)>rel(lj)。 在上述例子中, l 3 > l 2 , l 5 > l 2 , l 5 > l 4 l_3\gt l_2, l_5 \gt l_2, l_5\gt l_4 l3>l2,l5>l2,l5>l4
- Last Click > Skip Above : 最新点击的文档比没有被点击的文档相关性高对所有的 ( i , j ) (i,j) (i,j)对,如果 i > j ≥ 1 i\gt j \ge 1 i>j≥1, i = m a x ( C ) i = max(C) i=max(C), j ∉ C j\not \in C j∈C, r e l ( l i ) > r e l ( l j ) rel(l_i)\gt rel(l_j) rel(li)>rel(lj)。 在上述例子中,有 l 5 > l 2 , l 5 > l 4 l_5\gt l_2, l_5 \gt l_4 l5>l2,l5>l4。
- Click > Earlier Click : 最新点击的文档比早前点击的文档相关性高对所有的 ( i , j ) (i,j) (i,j)对,如果 i > j ≥ 1 i\gt j \ge 1 i>j≥1, i ∈ C i \in C i∈C, j ∈ C j \in C j∈C, r e l ( l i ) > r e l ( l j ) rel(l_i)\gt rel(l_j) rel(li)>rel(lj)。 在上述例子中,假设点击顺序是[3,1,5],有 l 1 > l 3 , l 5 > l 3 , l 5 > l 1 l_1\gt l_3, l_5 \gt l_3, l_5 \gt l_1 l1>l3,l5>l3,l5>l1。
- Click > Skip Previous : 用户点击链接时,他点击链接的上一条如果被忽略,那这条链接相关性比前一条链接高 对所有的 i i i,如果 i ∈ C i \in C i∈C, i − 1 ∉ C i-1 \not \in C i−1∈C, r e l ( l i ) > r e l ( l i − 1 ) rel(l_i)\gt rel(l_{i-1}) rel(li)>rel(li−1)。 在上述例子中,有 l 3 > l 2 , l 5 > l 4 l_3\gt l_2, l_5 \gt l_4 l3>l2,l5>l4。
- Click > No-Click Next : 用户点击链接时,如果他没有点开下面的链接,那下面的链接是无关的。对所有的 i i i,如果 i ∈ C i \in C i∈C, i + 1 ∉ C i+1 \not \in C i+1∈C, r e l ( l i ) > r e l ( l i + 1 ) rel(l_i)\gt rel(l_{i+1}) rel(li)>rel(li+1)。 在上述例子中,有 l 1 > l 2 , l 3 > l 4 , l 5 > l 6 l_1\gt l_2, l_3 \gt l_4, l_5\gt l_6 l1>l2,l3>l4,l5>l6。
表现最好的挖掘策略是1,2,4,correlation大约在80-90%,其次是3,5,corelation在65%-75%。
四、文档权重优化
4.1 机制
在信息回溯相关度优化中,除了优化查询,还有一种思路是控制文档的权重,令相关的文档向量尽量“靠近”查询,令不相关的文档向量尽量“远离”查询。
假设一篇文档被判断为跟查询相关:
- 查询Q的关键词T在文档D中未出现,T会被加入文档,它的权重为 α \alpha α
- 查询Q的关键词T在文档D中出现,T在D的权重会被加上 β \beta β
- 文档D出现的关键词 T ( D ) T(D) T(D)中,没有在查询Q中出现的词,在D的权重会被减去 γ \gamma γ
假设一篇文章被判断为跟查询不相关:
- 查询Q的关键词T在文档D中出现,T在D的权重会被减去 δ \delta δ
- 文档D出现的关键词 T ( D ) T(D) T(D)中,没有在查询Q中出现的词,在D的权重会被加上 ε \varepsilon ε
在相关文档靠近查询的过程中,文档和文档之间也会变得更近似。
4.2 实际问题
尽管听上去有一定可行性,修改文档权重是一件相当有挑战的事,需要谨慎周密的设计,原因如下:
- 在搜索引擎中的文档,具有诸多属性,如关键词、标签、点击率等,更加复杂的还有PageRank连接矩阵,关键词在不同的地方具有的意义是不同的。
- query对文档权重的修改是永久性的,这是一件很危险的事情,如果有黑客发起攻击,对特定文档进行大量查询,很可能会导致特定文档的权重被大大提升或减少。需要保证单次查询对整体文档权值的影响足够小。
- 重复查询结果可能不一样,因为文档单词权重会被不断地修改。
这里也提一下查询优化和文档权重优化方法都会面临的问题:
- 相关文档可能来自不同的cluster,查询很难获得满意的结果,比如apple,可能苹果公司的产品和水果苹果都是相关的信息,此时需要把查询变化为多个不同的查询才能得到结果。
- 查询的分割和文档空间的改变基本不会在实际的文档回溯系统中使用,因为这部分的实验需要大量的显式反馈数据,同时修改文档空间的开销很大,最重要的是修改文档空间的正确方法需要被进一步验证和研究。
- 很难定量分析修改行为带来的增益。