引言
??在前面几部分我们学习了检索式对话系统的召回(recall),召回可以从海量数据中快速找到相似的Top K文本?一种是基于字符串的召回,比如:BM25+倒排索引;另一种是基于向量的召回,比如:HNSW、Annoy、SIF。对召回结果进行重新排序叫做Ranking。
一、rank 评估指标—MAP、NDCG
1.MAP
??MAP(Mean Average Precision):平均准确率是相关文档检索出后的准确率的平均值。 反映系统在全部相关文档的性能单值指标,检索出来的相关文档越靠前(rank 越高),MAP就可能越高。MAP:分子是第几个文档,分母是rank数,多个相加然后求平均 例如:假设有两个主题: 主题1有4个相关网页, 主题2有5个相关网页。 某系统对于主题1检索出4个相关网页,其rank分别为1, 2, 4, 7;对于主题2检索出3个相关网页,其rank分别为1,3,5。
M
A
P
=
(
1
1
+
2
2
+
3
4
+
4
7
)
/
4
M
A
P
=
(
1
1
+
2
3
+
3
5
+
4
∞
+
5
∞
)
/
5
MAP=(\frac{1}{1}+\frac{2}{2}+\frac{3}{4}+\frac{4}{7})/4\\MAP=(\frac{1}{1}+\frac{2}{3}+\frac{3}{5}+\frac{4}{∞}+\frac{5}{∞})/5
MAP=(11?+22?+43?+74?)/4MAP=(11?+32?+53?+∞4?+∞5?)/5
2. NDCG
??NDCG(Normalized Discounted Cumulative Gain),NDCG有如下优势:
- 高关联度的结果比一般关联度的结果更影响最终的指标得分;
- 有高关联度的结果出现在更靠前的位置的时候,指标会越高
N
D
C
G
=
D
C
G
I
D
C
G
NDCG=\frac{DCG}{IDCG}
NDCG=IDCGDCG? 举个例子: 假设搜索回来的6个结果,其相关性分数分别是 3、2、3、0、1、2 那么:
C
G
=
3
+
2
+
3
+
0
+
1
+
2
CG = 3+2+3+0+1+2
CG=3+2+3+0+1+2 DCG: 那么在理想情况下的相关性分数排序应该是:3、3、3、2、2、1、0、0,理想情况下的IDCG: 此时,
N
D
C
G
=
D
C
G
I
D
C
G
=
6.86
8.37
NDCG=\frac{DCG}{IDCG}=\frac{6.86}{8.37}
NDCG=IDCGDCG?=8.376.86?
3.两者比较
??Information Retrieval的评价指标包括MAP、NDCG。NDCG对doc的相关性划分多个(>2)等级,而MAP只会对doc的相关性划分2个等级(相关和不相关)。并且,这些指标都包含了doc位置信息(给予靠前位置的doc以较高的权重),这很适合于web search。然而,这些指标的缺点是不平滑、不连续,无法求梯度,如果将这些指标直接作为模型评分的函数的话,是无法直接用梯度下降法进行求解的。
二、Point-wise/Pair-wise/List-wise
??Point-wise(单文档方法) Pointwise常用方法有McRank等 优点: 速度快,标注简单,复杂度低 缺点:
- ranking 追求的是排序结果,并不要求精确打分,只要有相对打分即可。
- pointwise 类方法并没有考虑同一个query 对应的 docs 间的内部依赖性(docs之间的排序)。
- 损失函数也没有model 到预测排序中的位置信息。因此,损失函数可能无意的过多强调那些不重要的docs,即那些排序在后面对用户体验影响小的doc。
- query间doc的不平衡,如query1对应500个文档,query2对应10个文档
??Pair-wise(文档对方法)
L
=
m
a
x
{
0
,
m
?
(
h
θ
(
q
i
,
c
i
+
)
?
h
θ
(
q
i
,
c
i
?
)
)
}
L=max\{0,m-(h_\theta(q_i,c_i^+)-h_\theta(q_i,c_i^-))\}
L=max{0,m?(hθ?(qi?,ci+?)?hθ?(qi?,ci??))} Pairwise有很多的实现,比如Ranking SVM,RankNet,Frank,RankBoost等。 Pair-wise的缺点:
- doc pair 的数量将是 doc 数量的二次,从而 pointwise 方法存在的 query 间 doc 数量的不平衡性将在pairwise 类方法中进一步放大。
- pairwise 方法相对 pointwise 方法对噪声标注更敏感,即一个错误标注会引起多个 doc pair 标注错误。
- pairwise 方法仅考虑了 doc pair 的相对位置,损失函数还是没有 model 到预测排序中的位置信息
??List-wise(文档列表方法) 它是将每个查询对应的所有搜索结果列表作为一个训练样例。Listwise根据训练样例训练得到最优评分函数S,对应新的查询,评分S对每个文档打分,然后根据得分由高到低排序,即为最终的排序结果。
S
S
S是所有候选回答句子的排序,标签
Y
Y
Y是原有的排序,可以利用rank指标—MAP、NDCG来衡量。 Listwise常用方法有AdaRank,SoftRank,LambdaMART等。
三、RankNet
?? 原本Ranking常见的评价指标都无法求梯度,因此没法直接对评价指标做梯度下降,而它们不适宜用梯度下降求解的Ranking 问题,转化为对偏序概率的交叉熵损失函数的优化问题,从而适用梯度下降法。 ?? RankNet方法就是使用交叉熵作为损失函数,学习出一些模型(例如神经网络、决策树等)来计算每个pair的排序得分,学习模型的过程可以使用梯度下降法。
-
输入:query的许多个文档结果,每个文档需要人为标注得分,等分越高的说明排名越靠前; -
输出:打分模型
f
(
d
,
w
)
f(d, w)
f(d,w)。
d
d
d为文档特征,
w
w
w为模型参数 -
Step 1:把query的结果分成pair,计算pair中排名的概率。在pair中,如果
U
i
U_i
Ui?排在
U
j
U_j
Uj?的前面,概率为:
s
i
=
f
(
x
i
,
w
)
s
j
=
f
(
x
j
,
w
)
)
s_i=f(x_i,w)\\s_j=f(x_j,w))
si?=f(xi?,w)sj?=f(xj?,w)) 而
U
i
U_i
Ui?排在
U
j
U_j
Uj?的前面的真实概率计算为: 其中
S
i
j
=
1
S_{ij}=1
Sij?=1表明
U
i
U_i
Ui?真实情况就是排在
U
j
U_j
Uj?的前面;否则,就是
U
i
U_i
Ui?排在
U
j
U_j
Uj?的后面。 -
Step 2:交叉熵作为损失函数 这个损失函数是用来衡量
P
i
j
P_{ij}
Pij?和
P
i
j
 ̄
\overline{P_{ij}}
Pij??的拟合程度的,当两个文档的不相关时,给与了一定的惩罚,让它们分开。RankNet算法没有使用学习排序中的一些衡量指标直接作为损失函数的原因在于,它们的函数形式都不是很连续,不太好求导,也就不太好用梯度下降法。而交叉熵的函数形式比较适合梯度下降法。 -
Step 3:梯度下降法更新迭代求最优的模型参数w。显然,我们需要设置一定的学习步长,不断的更新学习新的w,具体公式如下: 后面就是求损失函数C关于w的偏导计算公式如下: 其中, 上式中,得分s关于w的偏导和具体的学习模型有关,原始的RankNet方法使用的是神经网络模型。这个需要具体模型,具体分析。这样我们便知道了如何通过梯度下降法来求RankNet中的打分模型了。
上面的是对于每一对pair都会进行一次权重的更新,其实是可以对同一个query下的所有文档pair全部带入神经网络进行前向预测,然后计算总误差并进行误差后向反馈,这样将大大减少误差反向传播的次数。假设有三个doc,其损失函数C关于
w
w
w的偏导计算为: 从原先对每一个pair对都会进行一次权重的更新,到对同一个query下的所有doc进行一次权重的更新。 其中,
四、LambdaRank
??以错误pair最少为优化目标的RankNet算法,然而许多时候仅以错误pair数来评价排序的好坏是不够的,像NDCG等评价指标就只关注top k个结果的排序,当我们采用RankNet算法时,往往无法以这些指标为优化目标进行迭代,所以RankNet的优化目标和IR评价指标之间还是存在gap的。 以下图为例:
如上图所示,每个线条表示文档,蓝色表示相关文档,灰色表示不相关文档,RankNet以pairwise error的方式计算cost,左图的cost为13,右图通过把第一个相关文档下调3个位置,第二个文档上条5个位置,将cost降为11,但是像NDCG等评价指标只关注top k个结果的排序,在优化过程中下调前面相关文档的位置不是我们想要得到的结果。图 1右图左边黑色的箭头表示RankNet下一轮的调序方向和强度,但我们真正需要的是右边红色箭头代表的方向和强度,即更关注靠前位置的相关文档的排序位置的提升。LambdaRank正是基于这个思想演化而来,其中Lambda指的就是红色箭头,代表下一次迭代优化的方向和强度,也就是梯度。 ??LambdaRank是一个经验算法,它不是通过显示定义损失函数再求梯度的方式对排序问题进行求解,而是分析排序问题需要的梯度的物理意义,直接定义梯度,即Lambda梯度。 ??LambdaRank在RankNet的加速算法形式 的基础上引入评价指标NDCG,把交换两个文档的位置引起的评价指标的变化作为其中一个因子,实验表明对模型效果有显著的提升: 损失函数的梯度代表了文档下一次迭代优化的方向和强度,由于引入了IR评价指标,Lambda梯度更关注位置靠前的优质文档的排序位置的提升。有效的避免了下调位置靠前优质文档的位置这种情况的发生。LambdaRank相比RankNet的优势在于分解因式后训练速度变快,同时考虑了评价指标,直接对问题求解,效果更明显。
五、LambdaMART
??Mart(GBDT)定义了一个框架,缺少一个梯度。LambdaRank重新定义了梯度,赋予了梯度新的物理意义。因此,所有可以使用梯度下降法求解的模型都可以使用这个梯度,MART就是其中一种,将梯度Lambda和MART结合就是大名鼎鼎的LambdaMART。 ?? MART的原理是直接在函数空间对函数进行求解,模型结果由许多棵树组成,每棵树的拟合目标是损失函数的梯度,在LambdaMART中就是Lambda。LambdaMART的具体算法过程如下: 可以看出LambdaMART的框架其实就是MART,主要的创新在于中间计算的梯度使用的是Lambda,是pairwise的。MART需要设置的参数包括:树的数量M、叶子节点数L和学习率v,这3个参数可以通过验证集调节获取最优参数。
五、Context free Grammar(CFG)
??Context free Grammar指的是从语言规则进行分析,是理解语义的重要部分。 不同的分解情况会造成语义有巨大的差别。语法结构会一定程度上影响语义。我们会通过一个概率模型来进行判断。
六、CKY算法
??CYK处理的CFG必须是CNF形式的。所以算法首先要把非CNF形式的CFG转化到CNF形式。 接下来就是要填写一个 parse table,如果我们要处理的句子中有n个词,那么这个parse table就是一个
(
n
+
1
)
×
(
n
+
1
)
(n+1)×(n+1)
(n+1)×(n+1)的矩阵的上三角部分。 产生式:A → B C 对于节点A[ i, j ],产生BC两 个节点 B 必须在节点 [ i, k ] C 必须在节点 [ k, j ] i < k < j j > i + 1 CKY算法帮助我们从terminal反推回Context free Grammar。
七、工业界常用手段
- 最长公共子串/最长公共子序列
利用动态规划思想求解文本相似度。有很多场景会用到 - entity linking(消除候选实体的歧义)
如果对您有帮助,麻烦点赞关注,这真的对我很重要!!!如果需要互关,请评论或者私信!
|