小学生做创客大赛网站的题,怎么找到网站站长,百度网站收录提交入口全攻略,seo推广排名公司一只小狐狸带你解锁NLP/ML/DL秘籍正文作者#xff1a;郭耀华正文来源#xff1a;https://www.cnblogs.com/guoyaohua/p/9229190.html前言在NLP领域#xff0c;语义相似度的计算一直是个难题#xff1a;搜索场景下Query和Doc的语义相似度、feeds场景下Doc和Doc的语义相似度、… 一只小狐狸带你解锁NLP/ML/DL秘籍正文作者郭耀华正文来源https://www.cnblogs.com/guoyaohua/p/9229190.html前言在NLP领域语义相似度的计算一直是个难题搜索场景下Query和Doc的语义相似度、feeds场景下Doc和Doc的语义相似度、机器翻译场景下A句子和B句子的语义相似度等等。本文通过介绍DSSM、CNN-DSSM、LSTM-DSSM等深度学习模型在计算语义相似度上的应用希望给读者带来帮助。1. 背景以搜索引擎和搜索广告为例最重要的也最难解决的问题是语义相似度这里主要体现在两个方面召回和排序。在召回时传统的文本相似性如 BM25无法有效发现语义类 Query-Doc 结果对如从北京到上海的机票与携程网的相似性、快递软件与菜鸟裹裹的相似性。在排序时一些细微的语言变化往往带来巨大的语义变化如小宝宝生病怎么办和狗宝宝生病怎么办、深度学习和学习深度。DSSMDeep 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如下图所示用 Wi 表示第 i 层的权值矩阵bi 表示第 i 层的 bias 项。则第一隐层向量 l1300 维第 i 个隐层向量 li300 维输出向量 y128 维可以分别表示为用 tanh 作为隐层和输出层的激活函数最终输出一个 128 维的低纬语义向量。2.3 匹配层Query 和 Doc 的语义相似性可以用这两个语义向量(128 维) 的 cosine 距离(即余弦相似度) 来表示通过 softmax 函数可以把 Query 与正样本 Doc 的语义相似性转化为一个后验概率其中 r 为 softmax 的平滑因子D 为 Query 下的正样本D-为 Query 下的负样本采取随机负采样D 为 Query 下的整个样本空间。在训练阶段通过极大似然估计我们最小化损失函数残差会在表示层的 DNN 中反向传播最终通过随机梯度下降SGD使模型收敛得到各网络层的参数{Wi,bi}。2.4 优缺点优点DSSM 用字向量作为输入既可以减少切词的依赖又可以提高模型的范化能力因为每个汉字所能表达的语义是可以复用的。另一方面传统的输入层是用 Embedding 的方式如 Word2Vec 的词向量或者主题模型的方式如 LDA 的主题向量来直接做词的映射再把各个词的向量累加或者拼接起来由于 Word2Vec 和 LDA 都是无监督的训练这样会给整个模型引入误差DSSM 采用统一的有监督训练不需要在中间过程做无监督模型的映射因此精准度会比较高。。缺点上文提到 DSSM 采用词袋模型BOW因此丧失了语序信息和上下文信息。另一方面DSSM 采用弱监督、端到端的模型预测结果不可控。 3. CNN-DSSM 针对 DSSM 词袋模型丢失上下文信息的缺点CLSM[2]convolutional latent semantic model应运而生又叫 CNN-DSSM。CNN-DSSM 与 DSSM 的区别主要在于输入层和表示层。3.1 输入层1英文英文的处理方式除了上文提到的 letter-trigramCNN-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*30K9 万。而中文如果用 word-trigram那向量空间就是百万级的了显然还是字向量1.5 万维比较可控。3.2 表示层CNN-DSSM 的表示层由一个卷积神经网络组成如下图所示1卷积层——Convolutional layer卷积层的作用是提取滑动窗口下的上下文特征。 以下图为例假设输入层是一个 302*90000302 行9 万列的矩阵代表 302 个字向量Query 的和 Doc 的长度一般小于 300这里少了就补全多了就截断每个字向量有 9 万维。而卷积核是一个 3*90000 的权值矩阵卷积核以步长为 1 向下移动得到的 feature map 是一个 300*1 的矩阵feature map 的计算公式是(输入层维数 302-卷积核大小 3 步长 1)/步长 1300。而这样的卷积核有 300 个所以形成了 300 个 300*1 的 feature map 矩阵。根据论文原文也可以这样理解每个英文单词经过 word hash 之后都可以由一个30K大小的向量表示我们的卷积可以理解为一维卷积窗口大小为3即将待卷积部分三个单词拼接成一个90K的向量而卷积核为一个 90K*300 的矩阵每次卷积输出一个 1*300 的向量。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 in France... I speak fluent French显然 France 和 French 是具有上下文依赖关系的但是由于 CNN-DSSM 滑动窗口卷积核大小的限制导致无法捕获该上下文信息。 4. LSTM-DSSM 针对 CNN-DSSM 无法捕获较远距离上下文特征的缺点有人提出了用LSTM-DSSM[3]Long-Short-Term Memory来解决该问题。不过说 LSTM 之前要先介绍它的爸爸RNN。4.1 RNNRNNRecurrent Neural Networks可以被看做是同一神经网络的多次复制每个神经网络模块会把消息传递给下一个。如果我们将这个循环展开假设输入 xi 为一个 Query 中几个连续的词hi 为输出。那么上一个神经元的输出 h(t-1) 与当前细胞的输入 Xt 拼接后经过 tanh 函数会输出 ht同时把 ht 传递给下一个细胞。不幸的是在这个间隔不断增大时RNN 会逐渐丧失学习到远距离信息的能力。因为 RNN 随着距离的加长会导致梯度消失。简单来说由于求导的链式法则直接导致梯度被表示为连乘的形式以至梯度消失几个小于 1 的数相乘会逐渐趋向于 0。4.2 LSTMLSTM[4](Long-Short-Term Memory是一种 RNN 特殊的类型可以学习长期依赖信息。我们分别来介绍它最重要的几个模块0细胞状态细胞状态这条线可以理解成是一条信息的传送带只有一些少量的线性交互。在上面流动可以保持信息的不变性。1遗忘门遗忘门[5]由 Gers 提出它用来控制细胞状态 cell 有哪些信息可以通过继续往下传递。如下图所示上一层的输出 h(t-1) concat 上本层的输入 xt经过一个 sigmoid 网络遗忘门产生一个从 0 到 1 的数值 ft然后与细胞状态 C(t-1) 相乘最终决定有多少细胞状态可以继续往后传递。2输入门输入门决定要新增什么信息到细胞状态这里包含两部分一个 sigmoid 输入门和一个 tanh 函数。sigmoid 决定输入的信号控制tanh 决定输入什么内容。如下图所示上一层的输出 h(t-1) concat 上本层的输入 xt经过一个 sigmoid 网络输入门产生一个从 0 到 1 的数值 it同样的信息经过 tanh 网络做非线性变换得到结果 Ctsigmoid 的结果和 tanh 的结果相乘最终决定有哪些信息可以输入到细胞状态里。3输出门输出门决定从细胞状态要输出什么信息这里也包含两部分一个 sigmoid 输出门和一个 tanh 函数。sigmoid 决定输出的信号控制tanh 决定输出什么内容。如下图所示上一层的输出 h(t-1) concat 上本层的输入 xt经过一个 sigmoid 网络输出门产生一个从 0 到 1 的数值 Ot细胞状态 Ct 经过 tanh 网络做非线性变换得到结果再与 sigmoid 的结果 Ot 相乘最终决定有哪些信息可以输出输出的结果 ht 会作为这个细胞的输出也会作为传递个下一个细胞。4.3 LSTM-DSSM详解LSTM-DSSM 其实用的是 LSTM 的一个变种——加入了peep hole[6]的 LSTM。如下图所示看起来有点复杂我们换一个图读者可以看的更清晰这里三条黑线就是所谓的 peephole传统的 LSTM 中遗忘门、输入门和输出门只用了 h(t-1) 和 xt 来控制门缝的大小peephole 的意思是说不但要考虑 h(t-1) 和 xt也要考虑 Ct-1 和 Ct其中遗忘门和输入门考虑了 Ct-1而输出门考虑了 Ct。 总体来说需要考虑的信息更丰富了。好了来看一个 LSTM-DSSM 整体的网络结构红色的部分可以清晰的看到残差传递的方向。 5. 后记介绍完了 DSSM 及其几个变种还要给读者泼点冷水DSSM 就一定适合所有的业务吗这里列出 DSSM 的 2 个缺点以供参考DSSM 是端到端的模型 虽然省去了人工特征转化、特征工程和特征组合但端到端的模型有个问题就是效果不可控。对于一些要保证较高的准确率的场景用有监督人工标注的 Query 分类作为打底再结合无监督的 Word2Vec、LDA 等进行语义特征的向量化显然比较可控至少 Query 分类的准确率可以达到 95% 以上。DSSM 是弱监督模型因为引擎的点击曝光日志里 Query 和 Title 的语义信息比较弱。举个例子搜索引擎第一页的信息往往都是 Query 的包含匹配笔者统计过完全的语义匹配只有不到 2%。这就意味着几乎所有的标题里都包含用户 Query 里的关键词而仅用点击和曝光就能作为正负样例的判断显然不太靠谱因为大部分的用户进行点击时越靠前的点击的概率越大而引擎的排序又是由 pCTR、CVR、CPC 等多种因素决定的。从这种非常弱的信号里提取出语义的相似性或者差别那就需要有海量的训练样本。DSSM 论文中提到实验的训练样本超过 1 亿。笔者和同事也亲测过用传统 CTR 预估模型千万级的样本量来训练模型无法收敛。可是这样海量的训练样本恐怕只有搜索引擎才有吧普通的搜索业务 Query 有上千万可资源顶多只有几百万像论文中说需要挑出点击和曝光置信度比较高且资源热度也比较高的作为训练样本这样就过滤了 80% 的长尾 Query 和 Title 结果对所以也只有搜索引擎才有这样的训练语料了吧。另一方面超过 1 亿的训练样本作为输入用深度学习模型做训练需要大型的 GPU 集群这个对于很多业务来说也是不具备的条件。可能喜欢跨平台NLP/ML文章索引篇章标签生成倒排索引编程语言的选择全体学生考上目标学校的故事 求关注 求投喂 拉你进高端群哦~参考文献[1]. Huang P S, He X, Gao J, et al. Learning deep structured semantic models for web search using clickthrough data[C]// ACM International Conference on Conference on Information Knowledge Management. ACM, 2013:2333-2338.[2]. Shen, Yelong, et al. A latent semantic model with convolutional-pooling structure for information retrieval. Proceedings of the 23rd ACM International Conference on Conference on Information and Knowledge Management. ACM, 2014.[3]. Palangi, Hamid, et al. Semantic modelling with long-short-term memory for information retrieval. arXiv preprint arXiv:1412.6629 2014.[4]. Hochreiter, Sepp and Schmidhuber, J¨urgen. Long short-term memory. Neural Comput., 9(8):1735–1780, November 1997.[5]. Gers, Felix A., Schmidhuber, Jrgen, and Cummins, Fred. Learning to forget: Continual prediction with lstm. Neural Computation, 12:2451–2471, 1999.[6]. Gers, Felix A., Schraudolph, Nicol N., and Schmidhuber, J¨urgen. Learning precise timing with lstm recurrent networks. J. Mach. Learn. Res., 3:115–143, March 2003.