学习用于排序的密集表示
1. 问题提出与概念统一
在文本排序中,查询和语料库文本存在长度、语言规范性等明显差异,是否应该为查询和文本分别使用不同的编码器($\phi_q(\cdot)$ 和 $\phi_d(\cdot)$ )是一个值得探讨的问题。不同模型在这方面有不同选择。
同时,将语义等价、释义、蕴含等句子相似度任务概念化为排序问题是有意义的。例如在社区问答应用中,需要计算问题与用户查询的“释义接近度”排名。虽然有些应用(如判断两个句子是否为释义关系)看似不适合排序表述,但操作上,排序和这些任务都是估计概率(如 $P(Paraphrase = 1|s_1, s_2) \approx \phi(\phi(s_1), \phi(s_2))$ ),区别仅在于估计的对数不同。在问题表述中,排序就是对一组候选对象进行概率估计,然后按估计概率排序。
2. 最近邻搜索
使用密集表示进行排序时,解决最近邻搜索问题是重要的实现细节。在密集检索问题中,假设存在语料库 $C = {d_i}$ ,可以提前为所有 $d_i$ 预计算 $\phi_d(\cdot)$ 的输出(记为 $\phi_i$ ),虽然计算量可能较大,但可并行处理。而 $\phi_q(q)$ (记为 $\phi_q$ )需在查询时计算。
排序问题就是找到与 $\phi_q$ 最相似的前 $k$ 个 $\phi_i$ 向量。当 $\phi$ 用内积或其他简单度量定义时,这就是最近邻搜索问题。
- 简单解决方案 :扫描所有 $\phi_i$ 向量,暴力计算 $\phi(\phi_q, \phi_i)$ ,将前 $k$ 个 $\phi_i$ 存储在堆
超级会员免费看
订阅专栏 解锁全文
3385

被折叠的 条评论
为什么被折叠?



