文本匹配

借助相同的思路,我们可以很轻易的解决文本相似度计算问题,假设给定两个句子:

句子1:我不爱吃烤冷面,但是我爱吃冷面

句子2:我爱吃菠萝,但是不爱吃地瓜

同样使用LSTM网络,把每个句子抽象成一个向量表示,通过计算这两个向量之间的相似度,就可以快速完成文本相似度计算任务。在实际场景里,我们也通常使用LSTM网络的最后一步hidden结果,将一个句子抽象成一个向量,然后通过向量点积,或者cosine相似度的方式,去衡量两个句子的相似度。

文本匹配 - 图1

图9:文本相似度计算

一般情况下,在训练阶段有point-wise和pair-wise两个常见的训练模式(针对搜索引擎任务,还有一类list-wise的方法,这里不做探讨)。

  • point-wise训练模式: 在point-wise训练过程中,我们把不同的句子对儿分为两类(或者更多类别):相似、不相似。通过这种方式把句子相似度计算任务转化为了一个分类问题,通过常见的二分类函数(如sigmoid)即可完成分类任务。在最终预测阶段,使用sigmoid函数的输出,作为两个不同句子的相似度值。

  • pair-wise训练模式: pair-wise训练模式相对更复杂一些,假定给定3个句子,A,B和C。已知A和B相似,但是A和C不相似,那么原则上,A和B的相似度值应该高于A和C的相似度值。因此我们可以构造一个新的训练算法:对于一个相同的相似度计算模型m,假定m(A,B)是m输出的A和B的相似度值,m(A,C)是m输出的A和C的相似度值,那么hinge-loss:

文本匹配 - 图2 if 文本匹配 - 图3 else 文本匹配 - 图4

这个损失函数要求对于每个正样本m(A,B)的相似度值至少高于负样本m(A,C)一个阈值

文本匹配 - 图5

hinge-loss的好处是没有强迫进行单个样本的分类,而是通过考虑样本和样本直接的大小关系来学习相似和不相似关系。相比较而言,pair-wise训练比point-wise任务效果更加鲁棒一些,更适合如搜索,排序,推荐等场景的相似度计算任务。