深度学习解决NLP问题:语义相似度计算

更新时间:2023-06-15 02:32:54 阅读: 评论:0

深度学习解决NLP问题:语义相似度计算
在NLP领域,语义相似度的计算⼀直是个难题:搜索场景下query和Doc的语义相似度、feeds场景下Doc和Doc的语义相似度、机器翻译场景下A句⼦和B句⼦的语义相似度等等。本⽂通过介绍DSSM、CNN-DSSM、LSTM-DSSM等深度学习模型在计算语义相似度上的应⽤,希望给读者带来帮助。
1. 背景
以搜索引擎和搜索⼴告为例,最重要的也最难解决的问题是语义相似度,这⾥主要体现在两个⽅⾯:召回和排序。
在召回时,传统的⽂本相似性如 BM25,⽆法有效发现语义类 query-Doc 结果对,如"从北京到上海的机票"与"携程⽹"的相似性、"快递软件"与"菜鸟裹裹"的相似性。
在排序时,⼀些细微的语⾔变化往往带来巨⼤的语义变化,如"⼩宝宝⽣病怎么办"和"狗宝宝⽣病怎么办"、"深度学习"和"学习深度"。DSSM(Deep Structured Semantic Models)为计算语义相似度提供了⼀种思路。
本⽂的最后,笔者结合⾃⾝业务,对 DSSM 的使⽤场景做了⼀些总结,不是所有的业务都适合⽤ DSSM。
2. DSSM
DSSM [1](Deep Structured Semantic Models)的原理很简单,通过搜索引擎⾥ Query 和 Title 的海量的点击曝光⽇志,⽤ DNN 把Query 和 Title 表达为低纬语义向量,并通过 cosine 距离来计算两个语义向量的距离,最终训练出语义相似度模型。该模型既可以⽤来预测两个句⼦的语义相似度,⼜可以获得某句⼦的低纬语义向量表达。
DSSM 从下往上可以分为三层结构:输⼊层、表⽰层、匹配层
2.1 输⼊层
输⼊层做的事情是把句⼦映射到⼀个向量空间⾥并输⼊到 DNN 中,这⾥英⽂和中⽂的处理⽅式有很⼤的不同。
(1)英⽂
英⽂的输⼊层处理⽅式是通过word hashing。举个例⼦,假设⽤ letter-trigams 来切分单词(3 个字母为⼀组,#表⽰开始和结束
符),boy 这个单词会被切为 #-b-o, b-o-y, o-y-#
伍佰经典歌曲
这样做的好处有两个:⾸先是压缩空间,50 万个词的 one-hot 向量空间可以通过 letter-trigram 压缩为⼀个 3 万维的向量空间。其次是增强范化能⼒,三个字母的表达往往能代表英⽂中的前缀和后缀,⽽前缀后缀往往具有通⽤的语义。
这⾥之所以⽤ 3 个字母的切分粒度,是综合考虑了向量空间和单词冲突:
以 50 万个单词的词库为例,2 个字母的切分粒度的单词冲突为 1192(冲突的定义:⾄少有两个单词的 letter-bigram 向量完全相同),⽽ 3 个字母的单词冲突降为 22 效果很好,且转化后的向量空间 3 万维不是很⼤,综合考虑选择 3 个字母的切分粒度。四级考试流程
(2)中⽂
中⽂的输⼊层处理⽅式与英⽂有很⼤不同,⾸先中⽂分词是个让所有 NLP 从业者头疼的事情,即便业界号称能做到 95%左右的分词准确性,但分词结果极为不可控,往往会在分词阶段引⼊误差。所以这⾥我们不分词,⽽是仿照英⽂的处理⽅式,对应到中⽂的最⼩粒度就是单字了。(曾经有⼈⽤偏旁部⾸切的,感兴趣的朋友可以试试)
头像搞笑由于常⽤的单字为 1.5 万左右,⽽常⽤的双字⼤约到百万级别了,所以这⾥出于向量空间的考虑,采⽤字向量(one-hot)作为输⼊,向量空间约为 1.5 万维。
邓石如篆书
2.2 表⽰层
DSSM 的表⽰层采⽤ BOW(Bag of words)的⽅式,相当于把字向量的位置信息抛弃了,整个句⼦⾥的词都放在⼀个袋⼦⾥了,不分先后顺序。当然这样做会有问题,我们先为 CNN-DSSM 和 LSTM-DSSM 埋下⼀个伏笔。
紧接着是⼀个含有多个隐层的 DNN,如下图所⽰:
⽤ W i 表⽰第 i 层的权值矩阵,b i 表⽰第 i 层的 bias 项。则第⼀隐层向量 l1(300 维),第 i 个隐层向量 l i(300 维),输出向量
y(128 维)可以分别表⽰为:
⽤ tanh 作为隐层和输出层的激活函数:
最终输出⼀个 128 维的低纬语义向量。
2.3 匹配层
Query 和 Doc 的语义相似性可以⽤这两个语义向量(128 维) 的 cosine 距离来表⽰:
通过softmax 函数可以把Query 与正样本 Doc 的语义相似性转化为⼀个后验概率:
其中 r 为 softmax 的平滑因⼦,D 为 Query 下的正样本,D-为 Query 下的负样本(采取随机负采样),D 为 Query 下的整个样本空间。
蛇战在训练阶段,通过极⼤似然估计,我们最⼩化损失函数:
残差会在表⽰层的 DNN 中反向传播,最终通过随机梯度下降(SGD)使模型收敛,得到各⽹络层的参数{W i,b i}。
2.4 优缺点
望天洞优点:DSSM ⽤字向量作为输⼊既可以减少切词的依赖,⼜可以提⾼模型的范化能⼒,因为每个汉字所能表达的语义是可以复⽤的。另⼀⽅⾯,传统的输⼊层是⽤ Embedding 的⽅式(如 Word2Vec 的词向量)或者主题模型的⽅式(如 LDA 的主题向量)来直接做词的映射,再把各个词的向量累加或者拼接起来,由于 Word2Vec 和 LDA 都是⽆监督的训练,这样会给整个模型引⼊误差,DSSM 采⽤统⼀的有监督训练,不需要在中间过程做⽆监督模型的映射,因此精准度会⽐较⾼。
缺点:上⽂提到 DSSM 采⽤词袋模型(BOW),因此丧失了语序信息和上下⽂信息。另⼀⽅⾯,DSSM 采⽤弱监督、端到端的模型,预测结果不可控。
3. CNN-DSSM
针对 DSSM 词袋模型丢失上下⽂信息的缺点,CLSM[2](convolutional latent mantic model)应运⽽⽣,⼜叫 CNN-DSSM。CNN-DSSM 与 DSSM 的区别主要在于输⼊层和表⽰层。
3.1 输⼊层
(1)英⽂
英⽂的处理⽅式,除了上⽂提到的 letter-trigram,CNN-DSSM 还在输⼊层增加了word-trigram
如上图所⽰,word-trigram其实就是⼀个包含了上下⽂信息的滑动窗⼝。举个例⼦:把<s> online auto body ... <s>这句话提取出前三个词<s> online auto,之后再分别对这三个词进⾏letter-trigram映射到⼀个 3 万维的向量空间⾥,然后把三个向量 concat 起来,最终映射到⼀个 9 万维的向量空间⾥。
(2)中⽂
英⽂的处理⽅式(word-trigram letter-trigram)在中⽂中并不可取,因为英⽂中虽然⽤了 word-ngram 把样本空间拉成了百万级,但是经过 letter-trigram ⼜把向量空间降到可控级别,只有 3*30K(9 万)。⽽中⽂如果⽤ word-trigram,那向量空间就是百万级的了,显然还是字向量(1.5 万维)⽐较可控。
3.2 表⽰层
CNN-DSSM 的表⽰层由⼀个卷积神经⽹络组成,如下图所⽰:
(1)卷积层——Convolutional layer
卷积层的作⽤是提取滑动窗⼝下的上下⽂特征。以下图为例,假设输⼊层是⼀个 302*90000(302 ⾏,9 万列)的矩阵,代表 302 个字向量(query 的和 Doc 的长度⼀般⼩于 300,这⾥少了就补全,多了就截断),每个字向量有 9 万维。⽽卷积核是⼀个 3*90000 的权值矩阵,卷积核以步长为 1 向下移动,得到的 feature map 是⼀个 300*1 的矩阵,feature map 的计算公式是(输⼊层维数 302-卷积核⼤⼩ 3 步长 1)/步长 1=300。⽽这样的卷积核有 300 个,所以形成了 300 个 300*1 的 feature map 矩阵。
(2)池化层——Max pooling layer
池化层的作⽤是为句⼦找到全局的上下⽂特征。池化层以 Max-over-time pooling 的⽅式,每个 feature map 都取最⼤值,得到⼀个300 维的向量。Max-over-pooling 可以解决可变长度的句⼦输⼊问题(因为不管 Feature Map 中有多少个值,只需要提取其中的最⼤值)。不过我们在上⼀步已经做了句⼦的定长处理(固定句⼦长度为 302),所以就没有可变长度句⼦的问题。最终池化层的输出为各个Feature Map 的最⼤值,即⼀个 300*1 的向量。这⾥多提⼀句,之所以 Max pooling 层要保持固定的输出维度,是因为下⼀层全链接层要求有固定的输⼊层数,才能进⾏训练。
秋天田野里有什么(3)全连接层——Semantic layer
最后通过全连接层把⼀个 300 维的向量转化为⼀个 128 维的低维语义向量。全连接层采⽤ tanh 函数:
3.3 匹配层梦见坐公交车
CNN-DSSM 的匹配层和 DSSM 的⼀样,这⾥省略。
3.4 优缺点
优点:CNN-DSSM 通过卷积层提取了滑动窗⼝下的上下⽂信息,⼜通过池化层提取了全局的上下⽂信息,上下⽂信息得到较为有效的保留。
缺点:对于间隔较远的上下⽂信息,难以有效保留。举个例⼦,I grew up I speak fluent French,显然 France 和 French 是具有上下⽂依赖关系的,但是由于 CNN-DSSM 滑动窗⼝(卷积核)⼤⼩的限制,导致⽆法捕获该上下⽂信息。
4. LSTM-DSSM
针对 CNN-DSSM ⽆法捕获较远距离上下⽂特征的缺点,有⼈提出了⽤LSTM-DSSM[3](Long-Short-Term Memory)来解决该问题。不过说 LSTM 之前,要先介绍它的"爸爸""RNN。
4.1 RNN
RNN(Recurrent Neural Networks)可以被看做是同⼀神经⽹络的多次复制,每个神经⽹络模块会把消息传递给下⼀个。如果我们将这个循环展开:

本文发布于:2023-06-15 02:32:54,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1038961.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:向量   语义   信息   模型
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图