文本匹配是一个宽泛的任务,只要是研究两端样本之间的关系,都可以将这个问题看成文本匹配的问题。常见的任务场景有:

  • 相似度计算,复述识别
  • 问答系统
  • 对话系统
  • 自然语言推理、文本蕴含识别
  • 信息检索中的匹配
  • 机器阅读理解

通用baseline

对于这种匹配问题,直接上一个SiameseCNN模型,即孪生模型将textA,textB输入两个模型中,如果是计算两个文本的相似性,可以直接采用cosine,L1距离,欧式距离等得到两个文本之间的相似性。

匹配问题可能还会涉及到问答关系,文本蕴含关系等等,因此我们可以通过两个子模型生成了textA,textB的向量来构造出更加适合的feature,如A-B,A*B等等。然后用额外的模型(如MLP)来学习文本之间的映射关系。

孪生模型

孪生模型的含义指的是神经网络连体,通过权值共享的方式,组成一个完整的网络:

Network1与Network2有着相同的网络和相同的权重。他的作用是衡量两个输入的相似性。具体的应用有QA问答系统,手写体识别等等。

应用场景

  • 相似度计算
    • 判断两个文本是否表达相同的含义,构成复述关系
    • 有些数据集给出相似度等级,有些数据集则给出0/1标签
  • 问答匹配
    • 问答问题可以视为是一个分类问题,但是通常情况下,但是实际场景是从若干候选中找出正确的答案,相关数据集是通过一个匹配正例和若干负例组成的,往往建模成rank问题
    • 学习方法上,不仅可以使用分类方法来做(pointwise-learning),还可以使用pairwise-learning(同问题的一对正负样本作为一对正负样本),listwise-learning(同问题的全部样本序列作为一个样本)。
  • 对话匹配
    • 对话系统是问答系统的升级,主要的不同有:对话匹配引入了历史轮,因此回答需要参考历史
    • 对话匹配的回复空间比问答系统要大很多,甚至存在一些万能回复。
  • 自然语言推理、文本蕴含识别
    • 如果一直句子A,能够推导出句子B为正,则A蕴含B,若推导出B为假,则说明,A与B相互矛盾,如无法推导出B为真为假那么A与B独立。
    • 可以将这个问题看成是一个3-way classification的问题
  • 信息检索匹配
    • query-title匹配、query-document匹配等信息检索场景下的文本匹配问题。不过,信息检索场景下,一般先通过检索方法召回相关项,再对相关项进行rerank。对这类问题来说,更重要的是ranking,而不是非黑即白或单纯的selection
  • 机器阅读理解
    • 在文本中找到答案片段

学习方法

基于表示的文本匹配方法(simaese结构)与基于交互的匹配方法(花式attention交互)纷争数年,最终文本匹配问题还是被BERT方法给终结了。

基于表示的孪生结构

这种结构有两个改进方向,一种是使用更加强大的encoder,第二种为使用更加花哨的相似度计算函数。基于这两个方向的工作也很多

基于交互attention结构

首先通过attention为代表的结构来对两段文本进行不同粒度(词,短语级别)的交互,然后将各个粒度的匹配结果通过一种结构聚合起来,作为一个超级特征向量得到最终的匹配关系。

然后这种结构往往在某个场景中有很好的性能,换一个场景性能可能就会变差(因为设计出来的结构迎合了某个特定数据集的数据分布)。

attention机制

attention是一个用于提升RNN在encoder-decoder中性能的机制,在机器翻译,语音识别,图像标注中得到广泛的应用。attention为句子中的每个词赋予了不同权重,使得神经网络学习变得更加的灵活(soft),同时可以反应在翻译,识别过程中的一种对齐关系。

attention帮助模型对输入的x的每个部分赋予不同的权重,抽取出更加关键的信息,使得模型做出更加准确的判断,同时不会产生过大的计算和存储的开销。

attention模型以经典的Bahdanau attention 为例:

经典的attention结构主要由三个部分:

  • source function:度量环境向量与当前输入向量的相似性,找到当前环境下应该focus那些信息

$$
\begin{equation}
e_{i j}=a\left(c, y_{i}\right)=v_{a}^{T} \tanh \left(W_{a} c+U_{a} y_{i}\right)
\end{equation}
$$

  • alignment function:计算attention weight,通常使用softmax进行归一化

$$
\begin{equation}
\alpha_{i j}=\frac{\exp \left(e_{i j}\right)}{\sum_{k=1}^{T_{x}} \exp \left(e_{i k}\right)}
\end{equation}
$$

  • generate context vector function: 利用attention weight对输出赋予新的权重。

$$
\begin{equation}
z_{i}=\sum_{i} \alpha_{i j} * y_{i}
\end{equation}
$$

attention机制通常和seq2seq一起介绍:

脱离seq2seq结构,使用下面的方式计算attention:

首先计算key和query的相似性,得出权重。然后通过sotfmax进行归一化得到结构之后与value相乘,得到最后的attention value。

实现

数据集:https://nlp.stanford.edu/projets/snli/

SNLI1.0包含570,000的人工手写英文句子对。
针对 推理前提(premise)与推理假设(hypothesis)之间是否存在逻辑关系,人工标注了以下三种标签:

明天要做的事:

  1. 把数据集的文件整理好
  2. 然后把网络结构搭建起来
  3. 整理一下思路
  4. 跑代码,完成蕴含关系的实验
  5. 把照片找出来

inference

https://www.jiqizhixin.com/articles/2019-10-18-14