深度语义匹配模型系列文章会向大家介绍几种经典的表示型和交互型模型原理及其优缺点,同时后续的实践篇将会介绍匹配模型在智能客服中的实践应用。
工业界的很多应用都有在语义上衡量本文相似度的需求,直接目标就是判断两句话是否表达了相同或相似意思,我们将这类需求统称为“语义匹配”,nlp中的许多任务都可以抽象为语义匹配任务。语义匹配的相关应用场景主要有搜索引擎、问答系统、推荐系统、文本去重等,主要是为了找到与目标文本最相关的文本,比如在问答系统中找到和问题最相关的答案,在搜索引擎中找到与搜索框中关键词最相关的网页等。
传统的文本匹配技术有BoW、TF-IDF、BM25、Jaccard、SimHash等算法,主要能够解决词汇层面的匹配问题,但基于词汇重合度的匹配算法有很大的局限性:
词义局限:例如“苹果”在不同的语境下表示不同的含义,既可以表示一种水果,也能表示苹果公司。
结构局限:“深度学习”和“学习深度”虽然词汇完全重合,但表达的意思不同。
随着深度学习在计算机视觉、语音识别等领域的成功运用,近年来有很多研究致力于将深度神经网络模型应用于自然语言匹配任务,以降低特征工程的成本。
从匹配模型的发展来看,可以将模型分为:
单语义模型:对两个句子编码后计算相似度,不考虑句子中短语的局部特征。
多语义模型:从多个粒度对待匹配的句子进行解读,考虑字、短语等局部特征。
匹配矩阵模型:考虑待匹配句子的两两交互,交互之后用深度网络提取特征,能获得更深层次的句子之间的联系。
而换个角度,从模型的本质来看可以分为两种类型:表示型和交互型。表示型的模型会在最后一层对待匹配的两个句子进行相似度计算,交互型模型会尽早的让两个句子交互,充分应用交互特征。本次为大家介绍几种表示型的匹配算法。
表示型的模型更侧重于对表示层的构建,其基本模型结构如下图所示:
表示型匹配模型的特点是:
采用Siamese结构,共享网络参数。
对表示层进行编码,使用CNN, RNN, Self-attention均可。
匹配层进行交互计算,采用点积、余弦相似度、高斯距离、相似度矩阵均可。
表示型匹配模型的代表算法有: DSSM、CDSSM, MV-LSTM, ARC-I, CNTN, CA-RNN, MultiGranCNN等。
DSSM的全称是Deep Structured Semantic Models,是匹配模型的鼻祖。原文传送门:https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/cikm2013_DSSM_fullversion.pdf
,这篇paper2013年由微软Redmond研究院发表,短小但是精炼。下图为DSSM的整体网络结构
输入层做的事情是把句子映射到一个向量空间里并输入到深度神经网络(Deep Neural Networks,DNN)中,这里英文和中文的处理方式有很大的不同。
(1)英文
英文的输入方式采用了word-hashing,其主要目的是减少维度,压缩空间,采用letter-ngrams对英文单词进行切分,并以“#”作为单词的开头和结尾。本文用的是letter-trigram,50w个词的one-hot 向量空间可以通过 letter-trigram压缩为一个 3 万维的向量空间,例如单词“good”会被切分成(#go,goo,ood,od#)。
(2)中文
在单纯的DSSM模型中,中文是按照“字袋模型”来处理的,因为汉字部首偏旁特征的研究目前还不很成功。因为中文字个数是有限的,常用的字大概有15K左右,而常用的双字大约到百万级别,这里采用字向量(one-hot)作为输入,因此这种做法不会有维度过大的问题。
DSSM的特征抽取层,其实就是3个全连接层串行的连接起来,在DSSM中采用tanh作为激活函数。
通过表示层得到了一些128维的特征向量,在匹配层采用cosine 距离(即余弦相似度) 来表示:
通过 softmax 函数可以把 Query 与正样本 Doc 的语义相似性转化为一个后验概率:
在训练阶段,通过极大似然估计,最小化损失函数为:
DSSM的优点在于能够快速的计算多个query和Doc对之间的语义相似度;相对于词向量的方式,它采用有监督的方法,准确度要高很多,同时单个词或单个字处理不依赖切词的正确与否。缺点是在词向量表示时采用词袋模型,不考虑词语的位置信息,这对语义理解是一个大的损失。此外,DSSM 是弱监督模型,因为引擎的点击曝光日志里 Query 和 Title 的语义信息比较弱,从这种非常弱的信号里提取出语义的相似性或者差别,那就需要有海量的训练样本,因此训练成本会比较高。
针对 DSSM 词袋模型丢失上下文信息的缺点,CDSSM(convolutional latent semantic model)2014年由微软提出,又叫 CLSM。CNN-DSSM 与 DSSM 的区别主要在于输入层和表示层, 与DSSM相比,该算法相比原始DSSM将近会有10%的效果提升。原文传送门https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/cikm2014_cdssm_final.pdf
(1)英文: 除了DSSM用到的letter-trigram,CDSSM也用了滑动窗口策略。word-trigram其实就是一个包含了上下文信息的滑动窗口,对窗口里的每个词进行letter-trigram,将三个向量concat起来,最终映射到一个 9 万维的向量空间里。
(2)中文: 采用one-hot编码时,依然是使用字向量维度更可控,此处与DSSM的中文处理方法一致。
CDSSM 的表示层是将全连接层替换为一个卷积神经网络。
(1)卷积层: 每个英文单词经过 word hash 之后由一个30K大小的向量表示,窗口大小为3,即将待卷积部分三个单词拼接成一个90K的向量,而卷积核为一个 90K * 300 的矩阵,每次卷积输出一个 1*300 的向量。
(2)池化层: 池化层也是经常和卷积一起配合使用的操作了,它的作用是为句子找到全局的上下文特征,这里之所以选择max-pooling是因为,语义匹配的目的是为了找到query和doc之间的相似度,那么就需要去找到两者相似的点,max-pooling则可以找到整个Feature map中最重要的点。最终池化层的输出为各个Feature Map 的最大值,即一个 300*1 的向量。
(3)全连接层: 最后通过全连接层把一个 300 维的向量转化为一个 128 维的低维语义向量。全连接层采用 tanh 函数。
CDSSM的最后的损失函数,相似度度量等和DSSM一致,这里省略。
CDSSM 通过输入层提取了滑动窗口下的上下文信息,又通过卷积层和池化层提取了全局的上下文信息,上下文信息得到较为有效的保留。但因为滑动窗口大小的限制,仍无法获得较长距离的上下文依赖关系。
针对 CDSSM 无法捕获较远距离上下文特征的缺点,有人提出了用LSTM-DSSM(Long-Short-Term Memory)来解决该问题。原文传送门 https://arxiv.org/pdf/1412.6629.pdf
。这篇文章是对DSSM模型的修改,相比于CDSSM更简单,毕竟全连接网络是最简单的神经网络,替换一下模型就能提升效果。
该模型与DSSM的本质区别其实就是把DSSM里的全连接改成LSTM。这里的输入层个人感觉也不需要做word hashing,直接把每个单词映射到一个word representation,就是embedding,然后把整个句子送入LSTM并训练,拿出最后输出的状态作为隐语义向量,有了这个最后的语义向量后就和DSSM模型一样,进行相似度度量,softmax计算概率等等。
MV为Multi-View,一般可以理解为多视角的DSSM,原文传送门https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/frp1159-songA.pdf
,该文章2016年由微软发表,并将其用于用户推荐。这个工作同样是对DSSM的改进,与CDSSM和LSTM-DSSM不同的是,它没有改变网络结构,而是从信息源入手解决这个问题。
放在我们的场景可以这样理解multi-view: 比如我们的经纪人,可能在app上产生了带看信息,也可能在link上问了房源修改的问题。不同的信息源都对同一个经纪人进行了一些刻画,所以综合各种信息源可以描述出经纪人画像,然后进行推荐。MV-LSTM的核心思想是把经纪人的特征与不同的信息源统一到一个相同的语义空间,通过Cosine距离表征相关性。这里的每一个信息源与经纪人的匹配都是一个独立的DSSM模型,但是共享一个user模型。
DSSM系列的模型看起来在真实文本场景下可行性很高,但不一定适合所有的业务。
DSSM是端到端的模型,对于一些要保证较高准确率的场景,最好先用人工标注的有监督的数据,再结合无监督的w2v等方法进行语义特征的向量化,效果会更加可控。
DSSM是弱监督模型。dssm的训练样本都是点击曝光日志里的Query与Tiltle,但点击的title不一定与query是语义匹配的,因此想要从这种非常弱的信号里提取出语义相似性就需要有海量的训练样本。
DSSM均使用cosine相似度作为匹配的结果,而余弦相似度是无参匹配公式,个人感觉加一层MLP会更好一点。
接下来介绍两个DSSM系列之外的匹配模型。
ARC-I, ARC-II模型是2014年华为诺亚方舟实验室提出,前者是表示型匹配,后者是交互型匹配(将在下期讲到),原文传送门: https://papers.nips.cc/paper/5550-convolutional-neural-network-architectures-for-matching-natural-language-sentences.pdf
.该模型相比于DSSM,最大特点是通过逐层构图和合并充分表达句子的词序信息,并且匹配计算公式采用了带参数的计算公式。
本文基于CNN为句子建模,对于长度较短的句子作补0处理,卷积的计算和传统的CNN卷积计算无异,可参考上文的CDSSM。卷积的作用是从句子中提取出局部的语义组合信息,pooling的作用是对多种语义组合进行选择,找出置信度高的特征组合。
从图中可以看出,两个句子分别进行特征提取,得到两个相同且固定长度的向量,向量为句子经过建模后抽象得来的特征信息,然后将这两个向量作为一个多层感知机(MLP)的输入,最后计算匹配的分数。
这个模型比较简单,但最大的缺点是两个句子在建模过程中完全独立,没有任何交互行为,最后抽象为特征信息后再进行匹配计算,因此过早失去了句子间语义交互的机会。
该模型是2015年中国科学院提出,原文传送门: https://arxiv.org/abs/1511.08277
。这篇论文采用双向LSTM处理两个句子,然后对LSTM的输出进行匹配度计算,作者认为这是一个multi-view的过程。
LSTM 能够获取长距离上的特征,但是单向的LSTM会使输出受到句尾的影响较大,而双向的LSTM能够获得更全面的句子信息。用Bi-LSTM同时处理两个待匹配的句子,得到每个时刻的向量表达。
将两个句子各个时刻的向量进行交互,利用张量函数生成交互张量,张量函数的公式如下:
其中,u,v分别代表两个向量,Mi,i∈[1,…,c]是张量的一个切片。Wuv和b是线性变换的参数。f是非线性函数。经过张量函数变换后的结果是一个向量。然后对匹配矩阵进行K-Max的动态池化操作,也就是挑选K个最大的特征,最后采用全连接层进行维度压缩和分类。
该模型的亮点在于提出了一种新的带参数的相似度计算方法,因为语言的表示有多样性,带参数的公式比不带参数的公式更加合理。
本文介绍了六种表示型的深度语义匹配模型,包括四种DSSM及其变种和两种改善相似度计算方式的模型。表示型匹配模型的共同特点是:对将要匹配的两个句子分别进行编码与特征提取,最后进行相似度交互计算。其优点是:
将文本映射为一个简洁的表达,便于储存。
匹配的计算速度快。
模型在表示层可以用大量无监督的数据进行预训练。因此非常适合于信息检索这种对存储和速度要求都比较高的任务。
但缺点是匹配不仅仅是一元的一一对应,而且是有层次、 有结构的,分别从两个对象单独提取特征,很难捕获匹配中的结构信息。如何让两个句子在模型中更早的交互产生交互特征,下期精彩: 【深度语义匹配模型 】原理篇二:交互型。
https://blog.csdn.net/ling620/article/details/95468908
https://zhuanlan.zhihu.com/p/39920446
https://www.cnblogs.com/guoyaohua/p/9229190.html
https://cloud.tencent.com/developer/article/1562482
http://www.wangqingbaidu.cn/article/dlp1516351259.html
https://www.jianshu.com/p/c578a77e7111
卢新洁,2018年毕业于澳大利亚新南威尔士大学,毕业后加入贝壳找房语言智能与搜索部,主要从事NLP及智能客服相关工作。
投稿或交流学习,备注:昵称-学校(公司)-方向,进入DL&NLP交流群。
方向有很多:机器学习、深度学习,python,情感分析、意见挖掘、句法分析、机器翻译、人机对话、知识图谱、语音识别等。
记得备注呦