短文本匹配算法综述
Abstract
短文本匹配是指使用 NLP 模型预测两个文本的语义相关性,很多领域内都有它的身影,比如:信息检索(information retrieval)、问答系统(question answering system)、对话系统(dialogue system)。本文将回顾近年来基于神经网络的表现较好的一些文本匹配算法。首先会介绍一下 DSSM 模型,它使用神经网络将文本表示为特征向量,然后使用两个特征向量之间的余弦相似度衡量文本之间的匹配度。然后介绍基于 word 交互的模型,比如:DRMM、MatchPyramid、Bert,它们从两个文本中的 “单词对” 的相似性中提取语义匹配特征,以捕获文本之间更详细的交互信息。同时,本文还基于模型的有效性和时间复杂度分析了每种算法的应用场景。
Introduction
短文本匹配是一种被广泛使用的 NLP 技术,它旨在对文本语义关系建模。信息检索(information retrieval)、问答系统(question answering system)、对话系统(dialogue system)等是它主要的应用领域。
在信息检索问题中,用户想找到和给定查询相关的文档。对于搜索引擎来说,如何对给定的查询匹配到合适的文档是至关重要的。文本匹配还能被用来在问答系统中为问题匹配到合适的答案,这对自动客服机器人非常有帮助,可以大大降低人工成本。
最近的研究表明基于神经网络的文本匹配算法要优于传统的文本匹配算法,例如:TFIDF、LSA、LDA 等等。使用神经网络表示文本、学习文本之间的交互模式将会使模型能够挖掘出文本之间复杂的语义关系。
近些年来出现了很多基于神经网络的文本匹配算法,但是本文只关注其中效果较好的算法,考虑到有效性和低时间复杂度,文本着重介绍 DSSM、DRMM、Match-Pyramid 以及 BERT。还有一些出名的方法,例如 ARC、DURT,但是由于它们在空间复杂度上的限制,本文将不会介绍它们。
DSSM (Deep Structured Semantic Models)
DSSM 是一个非常出名的短文本匹配算法,它首先被应用于 Web 搜索应用中匹配查询 (query) 和相关文档 (documents)。DSSM 使用神经网络将查询 (query) 和文档 (documents) 表示为向量,两向量之间的距离被视为它们的匹配得分。目前 DSSM 结构中的表示部分有三种不同的神经网络可以选择,接下来将会一一介绍。
Feed-Forward Network Based DSSM
image-20210115002221552基础版本的 DSSM 使用前向传播神经网络表示 query 和 document,如上图所示
输入的 query 和 documents 首先被表示为 bag of triple-gram letters。举个例子,“#good#” (加上 “#” 用来区分中间位置的字母和开始、结尾位置的字母),它的 letter trigram 为:“#go”、“goo”、“ood”、“od#”,最早提出 DSSM 的论文将这种方法称为 word hashing,为什么叫做 word hashing 呢?这里先解释一下这么做的好处,之后解释一下为什么叫做 word hashing。这么做的好处主要有两个:
-
由于使用 letter trigram,许多单词之间就会出现同样的 pattern,这样就可以显著降低 vocabulary size,也就大大降低了底层神经网络的计算量
-
使用 letter trigram 表示可以使得对于拼写错误的单词更加鲁棒,正确拼写的片段仍然可以被有效使用。
表示成 bag of triple-gram letters 之后,再使用 one-hot 表示,出现 letter trigram 的那个维度被设置为 1,未出现的为 0。通过神经网络之后被表示成更加稠密的低维特征向量。将 query 和其最相关的文档 (positive document) 之间的余弦相似度记为 ,和其第 个不相关的文档 (negative document) 之间的余弦相似度记为 ,假设共有 N 个不相关文档,训练 DSSM 的损失函数如下:
其中 是超参数,用于控制 softmax 函数的平滑度。最小化这个损失函数就能使得最相关的文档匹配得分越来越高,不相关的文档匹配得分越来越低。这个过程将会使得 DSSM 能够对给定的 query 从一堆文档中将最相关的文档辨别出来。
word hashing
word hashing 指的是将 word 通过某种方式转换成一种唯一的表达方式,在这里就是通过 letter-trigram 的方式,但是却很难做到唯一,这也是一般哈希过程会出现的问题——哈希冲突,理想状态下,我们希望每个词都能得到唯一的表达方式,但是当词特别长时,letter-trigram 的组合就会特别多,就有可能出现这个词的 letter-trigram 以某种顺序结合可以成为另一个合法的 word (没想到好的例子😂)。 DSSM 原文中有一个统计表:
image-20210116125425370这个表主要说明了当 letter n-gram 的 “n” 越小,vocabulary size 减小的幅度越大,对比 Letter-Bigram 和 Letter-Trigram 会发现 word size 不管是 40k 还是 500k,Letter-Bigram 的 token size 都更小,这非常正常,因为截取的 word 片段粒度越小,word 中特有的模式也就越容易被丢失,共同的片段就越多,所以 vocabulary size 就更小,但可以看到当失去特性时,也就越容易发生哈希冲突,表中的 collision 都是 Letter-Trigram 更小。综合来说 Letter-Trigram 对 vocabulary size 的减小和 collision 的控制做到了不错的平衡。
Convolutional DSSM (CDSSM)
不同于基础版本的 DSSM,CDSSM 使用了卷积的操作,使用一个固定大小的窗口在文本序列上滑动,期望获得局部上下文特征 (lcoal contextual feature),比如窗口大小为 3,那么一些长度为 3 的短语将会被捕捉到。同时,CDSSM 的表示更加精细,基础版 DSSM 直接将所有词的 letter-trigram 一视同仁,类似于词袋的做法,出现就是 1,那么一个 query 或者 document 将会一步到位被表示成一个长度为 trigram vocabulary size 的 one-hot 向量。而 CDSSM 将一个窗口内的词首先通过 letter-trigram one-hot 向量表示,最终将一个窗口内的所有词拼接,比如说窗口为 3,trigram vocabulary size 为 30k,那么一个窗口内的特征将被表示为一个长度 30*3=90 k 的向量。
接下来将会有一个特征转换矩阵 ,它将 90k 的向量转换成一个比如说 300 维的特征向量,同时经过 tanh 激活。这个过程也很符合直觉,90 k 维的稀疏向量计算量将会较大,所以首先要降维,将 local contextual feature 变成更加稠密的低维向量。然后对这个向量进行序列长度维度上的最大池化,得到一个不随长度变化的 sentence-level 的特征向量。经过这一步基本得到了 query 和 document 的向量表示
损失函数和基础版本一致。
image-20210115134312927LSTM-DSSM
简单来说,和 CDSSM 相比,就是使用 LSTM 代替卷积和池化操作得到最终的文本表示。原文中并没有描述 是一种什么样的表示,这里暂且认为和 CDSSN 采用了同样的做法,也就是letter-trigram 的 one-hot 表示,那么 就是一个 30k,同样 的作用可以认为和 CDSSM 中的 一样。然后就是输入到 LSTM 中,原文采用的 LSTM 并不是原始版本,是一种带 "peephole connections" 的变体,其实就是让 cell state 参与了三个门控值的决定 。最后,使用 LSTM 最后一个时间步的隐藏状态表示整个 query 或者 document,之后的步骤也就和前面一致了,计算余弦相似度,计算损失函数。
image-20210115134405762Deep Relevance Matching Model (DRMM)
DRMM 基于 word-level 对文本进行匹配,首先计算 word 交互矩阵 (word interaction matrix),然后其中抽取高层级特征。
对于每一个 query word ,计算一个 term gate,用于最后的得分加权:
是一个可学习参数,其实这个过程和 attention 有些类似,本质上都是希望给更重要的特征以更大的权重。
然后对 query 和 document 中的 word 两两计算余弦值:,其中, 分别代表 query 中的第 个 word、document 中第 个 word。
对于第 个 query word 的 到 进行直方图统计,将余弦值范围 [-1, 1] 分成几个区间,分别统计每个区间内的 word 数量,以此形成特征向量,反映第 个 query word 与 document 的匹配状态。将直方图特征向量输入到神经网络中得到第 个 query word 与 document 的匹配得分 ,最后利用前面得到的权重加权 query 中每一个 word 对 docuemnt 的匹配得分得到整个 query 与 document 的匹配得分:
损失函数与 DSSM 系列方法不太相同,DRMM 使用的是 pairwise ranking loss:
当模型刚开始训练时, 不一定靠近 1, 也不一定靠近 -1,此时,max 函数的第二项大概率是一个正值,当模型接近收敛时, 靠近 1, 靠近 -1,max 函数的第二项大概率是一个负值,也就是说经过 max 函数后损失为 0,所以这个损失函数的优化方向是符合我们要求的。
image-20210115172618069MatchPyramid
DRMM 在 matching matrix 的基础上需要人工指定直方图中 bins 的范围,而 MatchPyramid 则避免了这个问题,它使用 CNN 从 matching matrix 中学习特征表示,matching matrix 依然由 query 和 document 中两两 word 的余弦值组成,最终 matching matrix 类似于单通道图片的像素矩阵。
image-20210115180652653这种做法的动机是什么呢,为什么有效呢?原文中有这么个例子:
image-20210115191338433上图中存在三种 Matching 信号:
-
word level matching signals:指的是两文本中 words 之间的 matchings,不仅仅是只完全一样的 word 还包括语义相近的 word (famous-popular, chinese-china)
-
phrase level matching signals:指的是短语、词组之间的 matchings,包括 n-gram 和 n-term。n-gram 指的是 完全匹配的短语或词组,例如上图中的 “(down the ages)--(down the ages)”,而 n-term 指的是语序以及语义上的另一种表达方式,例如:“(noodles and dumplings)--(dumplings and noodles)”,“(were famous chinese food)--(were popular in china)”
-
sentence level matching signals:指的是句子之间的 matchings,其可以有由多个低层级的 matching signals 组成。
综上,文本之间的交互结构是由层次结构组成的,可以通过组合较低级别的信号获得较高级别的信号,这个过程和图像识别非常类似,所以使用 CNN 就是理所当然的了。
BERT for Short Text Matching
bert 的做法比较简单,将两文本作为 sentence pair 直接输入到 bert 中,最后使用 CLS 的特征向量回归得到 matching score,得益于 bert 强大的表示能力,此方法的表现超出其他方法特别多。
image-20210115180721055Model Selection in Real-World Applications
DSSM 使用两文本之间的余弦相似度衡量匹配度得分,而余弦相似度的计算是非常快的,并且由于在计算余弦相似度之前 query 和 document 之间并没有交互,所以可以预先计算好 document 的特征向量并进行存储,当出现新的 query 时,只需要对较短的 query 进行推理得到特征向量,然后和存储好的 document 特征向量计算余弦相似度,最后依据相似度得分对文档进行排序展示给用户。这使得 DSSM 非常适用于要求实时推断文本相似性的线上服务。
对于余弦相似度的计算还有一种近似算法,ANN (approximate nearest neighbor) 搜索,它使用某种索引结构 (index structure) 避免 query 和所有的 document 进行比较计算,具体的细节这里就不展开了。感兴趣的可以了解一下 HNSW 和 Faiss。
DSSM 没有直接使用 word level 的交互特征计算匹配得分,这限制了其在短文本匹配上的应用。而 DRMM、MatchPyramid 以及 BERT 充分利用了基于 word 交互特征的细粒度匹配信息,所以它们的表现普遍更好。然而,也正是由于 word level 的交互,导致无法使用像 DSSM 那样事先计算好 document 特征向量的方式进行加速。
如果线上效率非常重要,DRMM 是一个不错的选择。由于 DRMM 的主要结构是一个前向传播神经网络,它要比使用 CNN 的 MatchPyramid 以及 BERT 快很多。BERT 的表现通常比其他算法都要更好,但是由于它的结构过于复杂了,并且时间开销远大于其他算法,所以通常它适用于时间效率不是主要约束的更注重表现的场景。MatchPyramid 对时间复杂度和匹配表现两个要求做到了不错的平衡。
小结
本文所描述的四个模型可以细分为 “表示模型” 和 “交互模型”,DSSM 模型就是一个典型的表示模型,因为 DSSM 只是使用神经网络将 query 和 document 各自互相不影响地表示成特征向量,然后直接计算余弦相似度。而 DRMM、MatchPyramid 以及 BERT 都是在底层也就是非常靠近原始输入的阶段进行 query 和 document 的交互,比如 MatchPyramid,利用 CNN 对由 query word 和 document word 余弦相似度组成的 matching matrix 提取各层级的 matching signals。BERT 的交互来自于 query 和 docuemnt 的 attention,最终得到 query 和 document 更好的表示,个人认为 MatchPyramid 和 BERT 虽然都属于交互模型,但实际上交互的方式不同,MatchPyramid 更偏向于 Relevance Matching,BERT 更偏向于 Semantic Matching。MatchPyramid 在语义方面主要体现在 matching matrix 的计算上,这个阶段较早,后期更注重相关性的匹配;而 BERT 的整个前向过程似乎都是语义的深度交互,最后提一下实际上 BERT 也可以作为表示模型使用,如下图所示。
image-20210116144347980