前言
对于检索式对话系统最基本的步骤就是召回(retrieval)-匹配(matching)-排序(reranking)。匹配的得分直接决定最后你要输出的答案对应FAQ中的标准问题,所以这是很重要的一步。说是文本匹配,感觉更好的措辞应该是语义匹配。这里借鉴的都是文本匹配/文本蕴含/自然语言推理这个领域的文章。
更多的论文算法可以在Standford的SNLI评测官网看到:
经典方法
传统方案统计模型各种各样,很多都是基于字面匹配做的,无法考虑到语义上的相似度,这里暂且熟悉一下wmd、bm25两种比较常用的方法。
WMD词移距离
Word2Vec得到的词向量可以反映词与词之间的语义差别,那么如果我们希望有一个距离能够反映文档和文档之间的相似度,一个想法是将文档距离建模成两个文档中词的语义距离的一个组合,比如说对两个文档中的任意两个词所对应的词向量求欧氏距离然后再加权求和,大概是这样的形式: ∑ i , j = 1 n T i j c ( i , j ) \sum_{i,j=1}^n T_{ij}c(i,j) ∑i,j=1nTijc(i,j) ,其中 c ( i , j ) c(i,j) c(i,j) 为两个词所对应的词向量的欧氏距离。这个加权矩阵T有些类似于HMM中的状态转移矩阵,只不过其中的概率转换为权重了而已。
以上两个文本去除停用词后,每篇文档仅剩下4个词,我们就是要用这四个词来比较两个文档之间的相似度。在这里,我们假设’Obama’这个词在文档1中的的权重为0.5(可以简单地用词频或者TFIDF进行计算),那么由于’Obama’和’president’的相似度很高,那么我们可以给由’Obama’移动到’president’很高的权重,这里假设为0.4,文档2中其他的词由于和’Obama’的距离比较远,所以会分到更小的权重。这里的约束是,由文档1中的某个词移动到文档2中的各个词的权重之和应该与文档1中的这个词的权重相等,即’Obama’要把自己的权重(0.5)分给文档2中的各个词。同样,文档2中的某个词所接受到由文档1中的各个词所流入的权重之和应该等于词在文档2中的权重。
所以 ∑ i , j = 1 n T i j c ( i , j ) \sum_{i,j=1}^n T_{ij}c(i,j) ∑i,j=1nTijc(i,j) 代表的是文档1要转换为文档2所需要付出的总代价。将这种代价求得下界即最小化之后,即可求得所有文档a中单词转移到文档b中单词的最短总距离,代表两个文档之间的相似度。
BM25
bm25 是一种用来评价搜索词和文档之间相关性的算法,它是一种基于概率检索模型提出的算法,再用简单的话来描述下bm25算法:我们有一个query和一批文档D,现在要计算query和每篇文档D之间的相关性分数,我们的做法是,先对query进行切分,得到单词,然后单词的分数由3部分组成:
- 单词和D之间的相关性
- 单词和query之间的相关性
- 每个单词的权重
最后对于每个单词的分数我们做一个求和,就得到了query和文档之间的分数。
深度文本匹配
传统的文本匹配如 BoW、TFIDF、VSM等算法,主要解决词汇层面的匹配问题,而实际上基于词汇重合度的匹配算法存在着词义局限、结构局限和知识局限等问题。
- 词义局限:的士和出租车虽然字面上不相似,但实为同一种交通工具;而苹果在不同的语境下表示的东西不同,或为水果或为公司;
- 结构局限:机器学习和学习机器虽词汇完全重合,但表达的意思不同;
- 知识局限:秦始皇打 Dota,这句话虽从词法和句法上看均没问题,但结合知识看这句话是不对的。
传统的文本匹配模型需要基于大量的人工定义和抽取的特征,而这些特征总是根据特定的任务(信息检索或者自动问答)人工设计的,因此传统模型在一个任务上表现很好的特征很难用到其他文本匹配任务上。而深度学习方法可以自动从原始数据中抽取特征,省去了大量人工设计特征的开销。首先特征的抽取过程是模型的一部分,根据训练数据的不同,可以方便适配到各种文本匹配的任务当中;其次,深度文本匹配模型结合上词向量的技术,更好地解决了词义局限问题;最后得益于神经网络的层次化特性,深度文本匹配模型也能较好地建模短语匹配的结构性和文本匹配的层次性
一般来说,深度文本匹配模型分为两种类型,表示型(Representation Model)和交互型(Interaction Model)。表示型模型更侧重对表示层的构建,它会在表示层将文本转换成唯一的一个整体表示向量。典型的网络结构有 DSSM、CDSMM 和 ARC-I。这种模型的核心问题是得到的句子表示失去语义焦点,容易发生语义偏移,词的上下文重要性难以衡量。交互型模型摒弃后匹配的思路,假设全局的匹配度依赖于局部的匹配度,在输入层就进行词语间的先匹配,并将匹配的结果作为灰度图进行后续的建模。典型的网络结构有 ARC-II、DeepMatch 和 MatchPyramid。它的优势是可以很好的把握语义焦点,对上下文重要性合理建模。由于模型效果显著,业界都在逐渐尝试交互型的方法。
深度学习应用在文本匹配上可以总结为以下四个阶段:1、单语义模型,单语义模型只是简单的用全连接、CNN类或RNN类的神经网络编码两个句子然后计算句子之间的匹配度,没有考虑到句子中短语的局部结构。2、多语义模型,多语义模型从多颗粒的角度解读句子,考虑到和句子的局部结构。3、匹配矩阵模型,匹配矩阵模型更多的考虑待匹配的句子间不同单词的交互,计算两两之间的匹配度,再用深度网络提取特征,更精细的处理句子中的联系。4、深层次的句子间模型,这是近几年state of the art的模型,随着attention等交互机制论文的发表,最新的论文用更精细的结构去挖掘句子内和句子间不同单词之间的联系,得到更好的效果。
—— 以上来自深度文本匹配发展总结
DSSM
Learning Deep Structured Semantic Models for Web Search using Clickthrough Data
原理:先把 query 和 document 转换成 BOW 向量形式,然后通过 word hashing 变换做降维得到相对低维的向量(除了降维,word hashing 还可以很大程度上解决单词形态和 OOV 对匹配效果的影响),喂给 MLP 网络,输出层对应的低维向量就是 query 和 document 的语义向量(假定为 Q 和 D)。计算(D, Q)的 cosinesimilarity 后,用 softmax 做归一化得到的概率值是整个模型的最终输出,该值作为监督信号进行有监督训练。
这是模型的结构图,输入Q是一个查询,D是各个候选文档,可以看到用词袋模型维度是500k,用word hashing 的方法可以将维度压缩到30k,然后通过全连接的神经网络对向量进行降维到128,接着两两计算余弦相似度得到匹配结果。后续的CDSSM和DSSM-LSTM应该算是常见的改进方式, CNN和RNN可能对不同文本数据的适用情况不同。
它有两个创新点,一个是用一种3个字母word hashing代替词袋模型(所谓的3个字母的word hashing就是先在单词上加上#表示符标记开头和结尾,例如#good#,然后每3个符号进行拆分,即变成#goo, goo, ood, od#,然后用multi-hot的形式表示这个单词,数据集的英语词汇可能会有很多),降低了单词向量的维度(由于当时word2vec论文还未发表),第二个是用全连接的神经网络处理句子,揭开深度文本匹配的篇章。
这个模型的缺陷在于:
1、没有考虑到单词之间的时序联系
2、相似度匹配用的余弦相似度是一个无参的匹配公式。
MatchPyramid
原理:借鉴做图像的方法, 把文本匹配转化成Text Matrix, 搭建了CNN金字塔模型完成匹配预测。从3个角度构建匹配矩阵,更精细的考虑句子间单词的两两关系,构建出3个矩阵进行叠加&#x