模型结构
E
P
(
⋅
)
E_P(·)
EP(⋅)将文本映射为
d
d
d维向量,并用它为文档集构建索引。
E
Q
(
⋅
)
E_Q(·)
EQ(⋅)将问题映射为
d
d
d维向量,并用它检索
k
k
k个对应的文章。
定义相似性
s
i
m
(
q
,
p
)
=
E
Q
(
q
)
T
E
P
(
p
)
sim(q,p)=E_Q(q)^TE_P(p)
sim(q,p)=EQ(q)TEP(p)
如何选择相似性?
实际上有很多种相似度量函数,但我们为了能够预先计算文档的表示,相似函数必须是可分解的。(可分解函数 f ( x , y ) f(x,y) f(x,y)可以表示为一些列函数的和: f ( x , y ) = ∑ i I u i ( x ) ∗ v i ( y ) f(x,y)=\sum^I_i{u_i(x)*v_i(y)} f(x,y)=∑iIui(x)∗vi(y))。
内积现在有很好的工具支持(FAISS)。
再经过实验搜索,发现内积几乎是最优解。因此确定了内积函数。
编码器
\quad
使用后两个独立的BERT模型分别表示问题编码器和文档编码器。
推理
\quad
在推理阶段用
E
P
E_P
EP将文章编码并用FAISS建立索引。
3.2 训练
将编码器训练为一个度量函数是度量学习的范畴(参考Metric learning: A survey.),它让相关的问题-文档对具有相近的表示。记文档为,其中q为问题,p为段落;带+表示正例,-表示负例。损失函数为
。
正负例
\quad
通常正例很容易选取,负例的选取是容易被人忽视的。好的负例对训练索引器至关重要。论文采用以下方法选择负例。
- 随机
- BM25
由BM25计算而来,不包含答案但能很好匹配问题的文章。 - Gold
训练集中其他问题对应的文章。
实验给出的最优结果是使用batch内的gold负例和一个BM25负例。
batch内负例的计算 \quad 让 Q Q Q和 P P P表示一个batch中的问题嵌入和文章嵌入。 S = Q P T S=QP^T S=QPT表示相似矩阵,每一行都是一个问题与文章集的相似性向量。这样,在矩阵元素 S ( i , j ) S_{(i,j)} S(i,j)中,当 i = j i=j i=j时为正例,否则为负例。这样可以方便处理。
实验参数
大数据上40轮,小数据集上100轮。 1 0 − 5 10^{-5} 10−5的学习率,Adam,预热线性调度,与0.1的dropout率。
transformers
- DPRContextEncoder
文档编码器。 - DRPQuestionEncoder
问题编码器。 - DPRReader
在DPR的基础上推出了一个端到端的检索、问答模型。输入问题、标题、文档,输出答案的首尾指针。