李瀚立作者

云脑科技-实习僧文本匹配模型及基于百度PaddlePaddle的应用

作者简介:李瀚立,本科毕业于武汉大学数学与统计学院,普渡大学统计硕士,达特茅斯学院计算机硕士。曾就职于 Amazon AWS,IBM Cloud。现为云脑科技算法团队成员。

1. 上下文理解理论基础

语言模型中,当前句子段落里的语义,语法,在很大程度上决定了下一个词是什么,如何表达。对一个由 n 个词组成的语句 w_1,w_2,…,w_n,传统语言模型通过对条件概率 P(w_i |w_1,  w_2,…,w_i-1) 进行建模,来估计整个语句的概率分布

然而很多时候稀疏的数据,对上下文长度有限的覆盖,离散的概率分布空间局限了传统语言模型的效果。在深度学习中,基于词向量和循环神经网络 (RNN) 的语言模型很好的解决了这些问题。但普通的 RNN,受限于梯度消失和梯度饱和,在训练时更新信息可能传播不到序列所有的位置上。因此对于较长的语句,RNN 并不能很好的整合上文信息。GRU 和 LSTM 这两种特殊的 RNN,在每一个循环单元内引入了「门」的结构,如输入门,输出门,遗忘门,等等。这些特殊的结构避免了梯度在循环单元之间传播时,必须通过非线性激活函数的现象。从而能够保证信息在长距离上的更新,进而使得当前的词能很好的承接上文。普通 RNN 的语言模型在训练时速度较慢,GRU/LSTM 在普通 RNN 的基础上,由于其复杂的循环单元结构,更加降低了执行速度。在自然语言处理的很多问题,比如句法分析,命名实体识别中,需要考虑一个词在上下文中的含义和作用。因此,这些问题在隐藏层往往需要正向传播,反向传播的两条 GRU/LSTM 链。在工业级生产上,由于大数据集的普遍性,以及对速度的需求,局限了 GRU/LSTM 的实际应用。

卷积神经网络 (CNN) 一直以来的主要应用都是在基于图像的深度学习算法上。近些年 CNN 在自然语言处理上的应用证明,CNN 系列的算法可以高效的对语言进行建模,在更快的执行速度下,达到或超过 GRU/LSTM 的效果。以短文本分类为例,CNN 在这一问题上的应用如下图所示:

输入层语句可以看作是一个文本长度为 7,词向量维度为 5 的文本「矩阵」。对于 3 组长度分别为 {2, 3, 4} 的上下文,每组有 2 个卷积核。在图像的应用中,卷积核的长宽一般均小于图像矩阵,而在文本的应用中,卷积核长度虽然小于文本矩阵的长度,但其宽度一定等于文本矩阵宽度,即词向量的维度。于是卷积核只在长度的方向上做卷积。以上下文长度为 2 的一个卷积核 K 为例,在如上图所示的没有填充的文本矩阵下,K 分别作用于「I like」,「like this」,「this movie」,「movie very」,「very much」,「much !」,6 个子矩阵。K 将每个映射为一个实数后,得到一个 6 维向量 U,U 可以看作一个局部上下文特征向量。之后将最大池化层作用于 U 上,过滤掉该局部上下文里不重要的特征,只保留最重要的一个。对于上面 6 个卷积内核,都完成这样的操作后,构成可以代表整个文本的全局上下文特征向量 V。最后,对于文本分类问题,将 softmax 函数作用于 V 上,作为整个网络的输出层。

对于较长的文本,单个卷积-最大池化层也许不能够完全覆盖整个文本,因此对于全局上下文特征的提取,就需要多个卷积层的叠加。对于 RNN 来说,当前的循环单元在很大程度上决定于之前的循环单元。而 CNN 的卷积核独立作用于子文本窗,因此可以并行同步处理,进而大大地提高了算法的执行速度。

2. 文本匹配模型理论基础

文本匹配顾名思义,就是对给定的文本,在文本库中找到与其最为相似的匹配文本。文本匹配较为广泛的一个应用实例是搜索引擎。很多搜索引擎对查询文本进行关键词抽取,通过关键词来找到文本库中最为相似的文本进行返回。然而很多时候,同一个意思在不同的环境下有很多不同的表达方式,所以这种基于词法的匹配在广义的文本匹配应用中也就很可能出现不准确的现象。从这个角度出发,便有了基于语义的模型,比如 Latent Semantic Analysis (LSA),Latent Dirichlet Allocation (LDA),Semantic Hashing,等等。然而这些语义模型有着非监督性学习的性质。比如 LSA 是对词条-文本共生矩阵做 SVD 降维,在低维空间中用聚类或余弦相似度寻找文本间的相似性,但并没有特别明确具体的目标函数以及匹配度评测标准;Semantic Hashing 是基于 Restricted Boltzman Machine,将文本转化为形同内存地址的 0-1 形式,它的参数估计过程不是以区分相关文本和不相关文本来进行最优化。

Deep Structured Semantic Model(DSSM) 是语义层面上的监督性学习文本匹配模型。DSSM 通过深度神经网络单元 (DNN Unit),将查询文本 Q 和匹配文本 D 映射为同一语义空间下的语义向量对 y_Q,y_D,并用 y_Q,y_D 的余弦相似度来表达 Q 与 D 的匹配度。因此对于给定的 Q,以及潜在匹配候选文本 D_1,D_2,…,可通过得到的余弦相似度来进行匹配度排序。DSSM 的结构如下图所示:

x 为输入向量,y 为语义向量,

为 DNN Unit 的 隐藏层,W_i,b_i 为对应隐藏层的权重参数与偏差参数。具体地,

其中,g 为激活函数。一对 Q,D 文本的相似度定义为:

训练数据集中,对于每一个 Q,都有对应的候选匹配文本集 D,以及在 D 中被实际选取的单个匹配文本 D^+。对于每一个 D_i∈D,有匹配条件概率

其中平滑因子γ是可调试的 hyper parameter. 在训练的时候,我们的目标函数为:

,即交叉熵损失函数,其中θ={W_i,b_i}. 之后便可用基于梯度下降的优化算法来得到参数的估计。

一些时候,在训练数据集中,对于每一个 Q,对应的候选匹配文本集 D 中的文本是根据匹配程度排好序的。这种情况下,对于任意两个候选文本 D_i,D_j∈D,有

如果真实的排序 D_i>D_j,那么真实概率 ,这个时候的损失函数为:

可以看出是上述全局单一匹配下的一种特殊情况。

虽然 DSSM 相比较于之前的匹配模型有着显著的效果提升,但是 DSSM 的输入是普通的词哈希向量,并且其 DNN Unit 是叠加的全连接层,并没有考虑文本的上下文联系。Convolutional DSSM(CDSSM) 在 DSSM 的词哈希向量的基础上,引入了卷积层和最大池化层,进行上下文显著特征提取,并将提取的特征通过非线性映射得到语义向量 (semantic feature),C-DSSM 的 DNN Unit 的结构如下图所示:

同第一部分所描述的 CNN 作用原理,卷积层会考虑每一个上下文窗口中的词哈希向量,再将此向量映射为较低维的局部上下文向量。对于一系列相关的局部上下文向量,最大池化层可以过滤掉不重要的文本特征,只保留最显著的,形成全局上下文向量。进而在 DSSM 的基础上,更进一步的考虑并联系了上下文的语义特征,达到更好的文本匹配效果。

3. 实习僧文本匹配模型以及在百度 PaddlePaddle 中的实现

云脑科技的 Gated Query Model(GQM),是基于 CNN,DSSM,C-DSSM,等算法的文本匹配模型。GQM 在上述模型构架的基础上,优化了对全局语义特征的提取,以及查询文本与候选匹配文本的语义特征交互,进而达到更快速、单文本上下文特征提取范围更广、文本对语义特征交互最大化、同时高准确匹配的效果。GQM 的实现是在百度的 PaddlePaddle 深度学习框架中进行的,现运用于合作伙伴实习僧的项目中。

PaddlePaddle 于 2016 年开源,对自己的定义是「easy-to-use, efficient, flexible, scalable」. PaddlePaddle 封装了许多经典的神经网络算法,因此,用 PaddlePaddle 实现一些基于经典结构,较为复杂但效果很好的神经网络时,就十分方便。比如在机器翻译中,一个比较流行的模型是带有注意力机制的编码-解码器。在编码器中,输入为词向量或独热向量,隐藏层为正向传播的循环神经网络 (F-RNN),以及反向传播的 B-RNN,循环单元可以是 GRU 或者 LSTM。对每一个输入词向量,对应位置上正向反向两个循环单元的输出结合起来,得到对应词向量的隐含状态 h_i. 在解码器中,隐藏层由一个正向传播的 F-RNN 构成,其每一个循环单元 z_j 的输入取决于 z_(j-1) 的输出,以及 z_j 所对应的位于编码器中的上下文 c_j. 而 c_j, 即注意力机制是通过对编码器中各时刻的隐含状态 h_i 进行加权平均实现的。

在注意力模型的思想中,任意两个目标语言和源语言词间均存在一定的关联,且这个关联强度是由模型计算得到的实数。在 PaddlePaddle 里,对这些重要的组成部分,都有对应的 Python API 可以调用。比如「paddle.layer」的「paddle.layer.data」,「paddle.layer.embedding」,「paddle.layer.fc」;「paddle.networks」下的「paddle.networks.gru_unit」,「paddle.networks.simple_attention」,等等。通过这些组成部分来实现上面所描述的机器翻译模型只需要简单的 100 行 python 代码。在模型训练的过程中,PaddlePaddle 同样封装了丰富的 API 比如各种 optimizer,以及实现 callback,early stopping 机制的方法,等等。

虽然 PaddlePaddle 的 Python API 覆盖了大部分的主流神经网络结构,但在模型开发中,对应于实际的问题,仍然需要自己实现神经网络组成部分。在 TensorFlow 中,这些新的构架可以直接在 Python 里通过 TensorFlow 的基础单元进行实现。在 PaddlePaddle 里,新的 layer,operator,必须通过较为底层的 C++来实现,而这些单元中对于梯度计算的 forward/backward 结构设计和 Caffe 又比较类似。新的单元实现之后,需要封装相应的 Python 接口,通过 make,编译,组件测试,才能在自己的网络结构中使用这个新的 layer/operator. 这样的好处是更快的执行速度。

在数据读取方面,PaddlePaddle 需要开发者实现 dataprovider,并在 config 文件中调用这个 dataprovider。在 TensorFlow 里,并没有这样比较直接的读取机制。TensorFlow 中普遍使用的 feed_dict/placeholder 是单线程运行,读取速度较慢。如果要实现多线程快速的数据输入,数据的批量读取,数据读取顺序重洗等功能,开发者必须预先将原始数据序列化成 tfrecords 格式,再从序列化的数据读取到定义的 TensorFlow 模型图中。而在 PaddlePaddle 中,实现如同 tfrecords 的读取功能并不需要预先的序列化,只用在 dataprovider 里实现 reader 和相应的 reader decorator 即可。

总体上而言,PaddlePaddle 可以很好的适用于实际生产线而不单单是研发模型原型。PaddlePaddle 支持模型并行,数据并行,多机多卡,多种集群方式,即使在缺少 GPU 的情况下也可以在较大的数据集上进行深度模型训练。在云脑科技与合作伙伴的众多项目中,既有来自于传统行业的大数据集,也有对实时行为的预测,智能推荐,等多种需求。PaddlePaddle 帮助云脑科技的工程师有效的利用计算资源,实现模型研发,迭代以及实际应用。 

参考文献:

P. Huang, X. He., J. Gao, L. Deng, A. Acero, L. Heck. Learning Deep Structured Semantic Models for web search using clickthrough data. In CIKM, 2013

Y. Shen, X. He, J. Gao, L. Deng, G. Mesnil. Learning semantic representations using convolutional neural networks for web search. Models for web search using clickthrough data. In Proceedings of the 23rd International Conference on World Wide Web, 2014

Y. Zhang, B.C. Wallace. A sensitivity analysis of (and practitioners' guide to) convolutional neural networks for sentence classification. arXiv:1510.03820, 2016

工程PaddlePaddle百度自然语言处理创业公司
相关数据
云脑科技机构

云脑科技成立于2015年5月,是一家跨越中美两地的人工智能行业平台公司,在深度学习(RNN/CNN)、增强学习、NLP、知识图谱领域均拥有大规模项目成功实践经验。

深度学习技术

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

池化技术

池化(Pooling)是卷积神经网络中的一个重要的概念,它实际上是一种形式的降采样。有多种不同形式的非线性池化函数,而其中“最大池化(Max pooling)”是最为常见的。它是将输入的图像划分为若干个矩形区域,对每个子区域输出最大值。直觉上,这种机制能够有效的原因在于,在发现一个特征之后,它的精确位置远不及它和其他特征的相对位置的关系重要。池化层会不断地减小数据的空间大小,因此参数的数量和计算量也会下降,这在一定程度上也控制了过拟合。通常来说,CNN的卷积层之间都会周期性地插入池化层。

激活函数技术

在 计算网络中, 一个节点的激活函数定义了该节点在给定的输入或输入的集合下的输出。标准的计算机芯片电路可以看作是根据输入得到"开"(1)或"关"(0)输出的数字网络激活函数。这与神经网络中的线性感知机的行为类似。 一种函数(例如 ReLU 或 S 型函数),用于对上一层的所有输入求加权和,然后生成一个输出值(通常为非线性值),并将其传递给下一层。

权重技术

线性模型中特征的系数,或深度网络中的边。训练线性模型的目标是确定每个特征的理想权重。如果权重为 0,则相应的特征对模型来说没有任何贡献。

交叉熵技术

交叉熵(Cross Entropy)是Loss函数的一种(也称为损失函数或代价函数),用于描述模型预测值与真实值的差距大小

参数技术

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

概率分布技术

概率分布(probability distribution)或简称分布,是概率论的一个概念。广义地,它指称随机变量的概率性质--当我们说概率空间中的两个随机变量具有同样的分布(或同分布)时,我们是无法用概率来区别它们的。

文本分类技术

该技术可被用于理解、组织和分类结构化或非结构化文本文档。文本挖掘所使用的模型有词袋(BOW)模型、语言模型(ngram)和主题模型。隐马尔可夫模型通常用于词性标注(POS)。其涵盖的主要任务有句法分析、情绪分析和垃圾信息检测。

卷积技术

损失函数技术

在数学优化,统计学,计量经济学,决策理论,机器学习和计算神经科学等领域,损失函数或成本函数是将一或多个变量的一个事件或值映射为可以直观地表示某种与之相关“成本”的实数的函数。

TensorFlow技术

TensorFlow是一个开源软件库,用于各种感知和语言理解任务的机器学习。目前被50个团队用于研究和生产许多Google商业产品,如语音识别、Gmail、Google 相册和搜索,其中许多产品曾使用过其前任软件DistBelief。

注意力机制技术

我们可以粗略地把神经注意机制类比成一个可以专注于输入内容的某一子集(或特征)的神经网络. 注意力机制最早是由 DeepMind 为图像分类提出的,这让「神经网络在执行预测任务时可以更多关注输入中的相关部分,更少关注不相关的部分」。当解码器生成一个用于构成目标句子的词时,源句子中仅有少部分是相关的;因此,可以应用一个基于内容的注意力机制来根据源句子动态地生成一个(加权的)语境向量(context vector), 然后网络会根据这个语境向量而不是某个固定长度的向量来预测词。

张量技术

张量是一个可用来表示在一些矢量、标量和其他张量之间的线性关系的多线性函数,这些线性关系的基本例子有内积、外积、线性映射以及笛卡儿积。其坐标在 维空间内,有 个分量的一种量,其中每个分量都是坐标的函数,而在坐标变换时,这些分量也依照某些规则作线性变换。称为该张量的秩或阶(与矩阵的秩和阶均无关系)。 在数学里,张量是一种几何实体,或者说广义上的“数量”。张量概念包括标量、矢量和线性算子。张量可以用坐标系统来表达,记作标量的数组,但它是定义为“不依赖于参照系的选择的”。张量在物理和工程学中很重要。例如在扩散张量成像中,表达器官对于水的在各个方向的微分透性的张量可以用来产生大脑的扫描图。工程上最重要的例子可能就是应力张量和应变张量了,它们都是二阶张量,对于一般线性材料他们之间的关系由一个四阶弹性张量来决定。

机器翻译技术

机器翻译(MT)是利用机器的力量「自动将一种自然语言(源语言)的文本翻译成另一种语言(目标语言)」。机器翻译方法通常可分成三大类:基于规则的机器翻译(RBMT)、统计机器翻译(SMT)和神经机器翻译(NMT)。

神经网络技术

(人工)神经网络是一种起源于 20 世纪 50 年代的监督式机器学习模型,那时候研究者构想了「感知器(perceptron)」的想法。这一领域的研究者通常被称为「联结主义者(Connectionist)」,因为这种模型模拟了人脑的功能。神经网络模型通常是通过反向传播算法应用梯度下降训练的。目前神经网络有两大主要类型,它们都是前馈神经网络:卷积神经网络(CNN)和循环神经网络(RNN),其中 RNN 又包含长短期记忆(LSTM)、门控循环单元(GRU)等等。深度学习是一种主要应用于神经网络帮助其取得更好结果的技术。尽管神经网络主要用于监督学习,但也有一些为无监督学习设计的变体,比如自动编码器和生成对抗网络(GAN)。

梯度下降技术

梯度下降是用于查找函数最小值的一阶迭代优化算法。 要使用梯度下降找到函数的局部最小值,可以采用与当前点的函数梯度(或近似梯度)的负值成比例的步骤。 如果采取的步骤与梯度的正值成比例,则接近该函数的局部最大值,被称为梯度上升。

卷积神经网络技术

卷积神经网路(Convolutional Neural Network, CNN)是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现。卷积神经网路由一个或多个卷积层和顶端的全连通层(对应经典的神经网路)组成,同时也包括关联权重和池化层(pooling layer)。这一结构使得卷积神经网路能够利用输入数据的二维结构。与其他深度学习结构相比,卷积神经网路在图像和语音识别方面能够给出更好的结果。这一模型也可以使用反向传播算法进行训练。相比较其他深度、前馈神经网路,卷积神经网路需要考量的参数更少,使之成为一种颇具吸引力的深度学习结构。 卷积网络是一种专门用于处理具有已知的、网格状拓扑的数据的神经网络。例如时间序列数据,它可以被认为是以一定时间间隔采样的一维网格,又如图像数据,其可以被认为是二维像素网格。

映射技术

映射指的是具有某种特殊结构的函数,或泛指类函数思想的范畴论中的态射。 逻辑和图论中也有一些不太常规的用法。其数学定义为:两个非空集合A与B间存在着对应关系f,而且对于A中的每一个元素x,B中总有有唯一的一个元素y与它对应,就这种对应为从A到B的映射,记作f:A→B。其中,y称为元素x在映射f下的象,记作:y=f(x)。x称为y关于映射f的原象*。*集合A中所有元素的象的集合称为映射f的值域,记作f(A)。同样的,在机器学习中,映射就是输入与输出之间的对应关系。

命名实体识别技术

命名实体识别(NER)是信息提取(Information Extraction)的一个子任务,主要涉及如何从文本中提取命名实体并将其分类至事先划定好的类别,如在招聘信息中提取具体招聘公司、岗位和工作地点的信息,并将其分别归纳至公司、岗位和地点的类别下。命名实体识别往往先将整句拆解为词语并对每个词语进行此行标注,根据习得的规则对词语进行判别。这项任务的关键在于对未知实体的识别。基于此,命名实体识别的主要思想在于根据现有实例的特征总结识别和分类规则。这些方法可以被分为有监督(supervised)、半监督(semi-supervised)和无监督(unsupervised)三类。有监督学习包括隐形马科夫模型(HMM)、决策树、最大熵模型(ME)、支持向量机(SVM)和条件随机场(CRF)。这些方法主要是读取注释语料库,记忆实例并进行学习,根据这些例子的特征生成针对某一种实例的识别规则。

大数据技术技术

大数据,又称为巨量资料,指的是传统数据处理应用软件不足以处理它们的大或复杂的数据集的术语。

目标函数技术

目标函数f(x)就是用设计变量来表示的所追求的目标形式,所以目标函数就是设计变量的函数,是一个标量。从工程意义讲,目标函数是系统的性能标准,比如,一个结构的最轻重量、最低造价、最合理形式;一件产品的最短生产时间、最小能量消耗;一个实验的最佳配方等等,建立目标函数的过程就是寻找设计变量与目标的关系的过程,目标函数和设计变量的关系可用曲线、曲面或超曲面表示。

敏感性分析技术

敏感性分析是研究数学模型或系统的输出的不确定性(数值或其他)如何能够分配到输入中不同的不确定性来源

降维技术

降维算法是将 p+1 个系数的问题简化为 M+1 个系数的问题,其中 M<p。算法执行包括计算变量的 M 个不同线性组合或投射(projection)。然后这 M 个投射作为预测器通过最小二乘法拟合一个线性回归模型。两个主要的方法是主成分回归(principal component regression)和偏最小二乘法(partial least squares)。

查询技术

一般来说,查询是询问的一种形式。它在不同的学科里涵义有所不同。在信息检索领域,查询指的是数据库和信息系统对信息检索的精确要求

自然语言处理技术

自然语言处理(英语:natural language processing,缩写作 NLP)是人工智能和语言学领域的分支学科。此领域探讨如何处理及运用自然语言;自然语言认知则是指让电脑“懂”人类的语言。自然语言生成系统把计算机数据转化为自然语言。自然语言理解系统把自然语言转化为计算机程序更易于处理的形式。

隐含狄利克雷分布技术

隐含狄利克雷分布简称LDA(Latent Dirichlet allocation),是一种主题模型,它可以将文档集中每篇文档的主题按照概率分布的形式给出。同时它是一种无监督学习算法,在训练时不需要手工标注的训练集,需要的仅仅是文档集以及指定主题的数量k即可。此外LDA的另一个优点则是,对于每一个主题均可找出一些词语来描述它。LDA首先由Blei, David M.、吴恩达和Jordan, Michael I于2003年提出,目前在文本挖掘领域包括文本主题识别、文本分类以及文本相似度计算方面都有应用。

遗忘门技术

LSTM或GRU中特有的机制

深度神经网络技术

深度神经网络(DNN)是深度学习的一种框架,它是一种具备至少一个隐层的神经网络。与浅层神经网络类似,深度神经网络也能够为复杂非线性系统提供建模,但多出的层次为模型提供了更高的抽象层次,因而提高了模型的能力。

语言模型技术

语言模型经常使用在许多自然语言处理方面的应用,如语音识别,机器翻译,词性标注,句法分析和资讯检索。由于字词与句子都是任意组合的长度,因此在训练过的语言模型中会出现未曾出现的字串(资料稀疏的问题),也使得在语料库中估算字串的机率变得很困难,这也是要使用近似的平滑n元语法(N-gram)模型之原因。

推荐文章
暂无评论
暂无评论~