郭 浩,许 伟,卢 凯,唐 球
(华北计算机系统工程研究所,北京 100083)
文本语义相似度在不同的自然语言处理任务中扮演着重要角色,例如在自动文本摘要[1]、信息检索、机器翻译、问答系统等领域中都有着非常广泛的应用。
深度神经网络近年来发展迅速,并且已经在文本语义相似度的任务中得到应用。其中卷积神经网络CNN[2]和循环神经网络RNN(Recurrent Neural Networks)是深度神经网络的两种结构。CNN是一种层次结构模型,RNN是一种序列式模型。CNN能有效地提取局部特征和组合数据的重要特征,然而在解决变长的序列问题上存在缺陷。RNN通过传递和记住序列的历史信息,能很好地处理时序问题。最近,结合CNN和RNN各自优势,构建混合网络结构的方法被普遍应用。
本文利用CNN和双向LSTM[3]来提取句子的特征,结合attention机制赋予单词不同大小的权重,得到句子的语义表示向量,根据此表示向量计算两个句子的相似度评分,判断其是否语义相同。实验结果表明本文的方法在对比CNN、LSTM和attention-LSTM时,在性能上都得到了提升。
本文主要工作如下:(1)提出了基于CNN和BiLSTM的短文本相似度计算混合模型;(2)利用注意力机制使更重要的单词得到更多的权重,同时减小无关单词的注意力;(3)在Quora数据集上对比了多个模型的结果。
文本语义相似度的研究任务为给定两个句子作为输入,判定两个文本的语义是否相同,即提出一个有效的方法和模型来学习和计算两个句子的相似性。先前的研究工作中通常利用句子的多种统计特征(例如单词重合度、同义词、句子长度等)来训练分类器(如SVM、树模型等)。传统的基于特征工程的方法只能提取文本的浅层语义,并且不能处理那些没有相同单词重叠却表达同样语义的句子,例如:“Obama speaks to the media in Illinois”和“The president greets the press in Chicago”两句话表达同样语义,利用传统的基于特征工程的方法则不合适。
相比于传统机器学习方法,深度学习模型是目前处理文本相似度效果更好的方法。Mikolov等人在2013年提出的word2vec方法提供了包含语义的预训练的词向量。可以利用词向量的加权平均来对句子进行语义表示,进而度量两个句子的相似度。但此方法和词袋模型一样没有考虑句子间的每个单词的相互关系,不能表达深层语义。基于神经网络的监督学习模型,如CNN、LSTM等主流的网络结构对文本提取语义特征,在文本语义相似度计算任务上相比传统方法表现更好。KIM Y[4]第一次将CNN用来进行文本特征提取以对文本分类。此后,卷积神经网络也应用在文本相似度计算任务上,文献[5]中利用CNN进行复述识别任务,在MSRP和SICK数据集上的准确率分别达到了78.9% 和86.2%。此外,LSTM模型由于其能处理序列数据,在自然语言处理任务上应用更加普遍。MULLER J[6]在2015年提出基于LSTM的Siamese(孪生)网络结构框架来学习文本相似度,利用LSTM对句子进行语义特征提取,得到句子语义表示向量,然后比较两个向量的Manhattan(曼哈顿)距离来判断其是否表达相同的语义,此模型在数据集SICK达到了0.882 2的皮尔逊相关系数。BAHDANAU D等[7]在2015年将attention机制应用到机器翻译任务中,在解码阶段利用attention来处理源语言句子。此后,attention机制在文本分类、自然语言生成等任务中都扮演着重要角色。JACOB D等[8]在2018年利用self-attention预训练语言模型,在此基础上进行微调(fine-tune),在数据集MRPC上达到了84.5%的准确率。
本文提出利用神经网络表示句子的CNN-BiLSTM模型,该模型采用对称的孪生网络结构,其输入是两个句子的word2vec[9]预训练词向量,采用CNN和LSTM共同学习句子语义的结构化表示,同时结合attention机制来捕获重要的特征,利用相似度函数输出句子的相似度。
本文提出的神经网络模型结构由两个相同的网络结构network1和network2组成,即network1和network2的权重相等(称之为孪生网络结构)。神经网络模型结构如图1所示,主要包括如下几个部分:
(1)输入层:两个句子;
(2)嵌入层:将句子的每一个单词映射为一个低维的稠密向量;
(3)CNN-LSTM层:结合CNN和LSTM分别提取句子的深层语义特征;
(4)Attention层:产生权重向量,将单词级别的特征拼接成句子级别的语义表示向量;
(5)匹配层:计算句子语义表示向量的相似度得到输出。
图1 神经网络结构架构图
在输入层对句子进行预处理后输入到模型。预处理的过程为:首先对文本进行正规化,即去除停用词,拼写校正,缩写的改写,去除特殊字符等。规定句子的最大长度为L,对于单词数大于L的句子进行截断,长度不足L的进行填补,即利用字符
在嵌入层,得到等长的句子序列s=(w1,w2,…,wL),每一个单词wi都需要被转换成一个词嵌入向量Ei作为后面神经网络结构的输入。此处,采用word2vec的预训练词向量,根据look-up矩阵M来映射每个单词的词嵌入向量。即:
Ei=viM
(1)
其中矩阵M是Google利用大规模语料预训练得到的具有语义信息的参数矩阵[9],M∈Rd×|V|,d为词向量嵌入的维度,|V|为词表的长度;vi为单词基于词表索引的独热编码向量,在索引处为1,其他位置为0。经过词嵌入后,句子被表示为E=(L×d)的矩阵,再输入到后面的神经网络层。
首先介绍CNN提取句子特征的过程[4]。CNN利用卷积核对句子矩阵E从上到下进行一维卷积,得到大小为L×f的特征映射,其中L为序列长度,f为卷积核的数量,卷积层后面接入一个最大池化层,提取出局部的重要特征,可以得到CNN提取的单词级别的特征。
LSTM是一个序列模型,其能解决RNN中的梯度消失和梯度爆炸问题,同时对长短时记忆有所控制。双向LSTM是从两个方向对句子进行编码,既能利用从前往后的历史信息,也能利用反方向的信息。本模型采取双向的LSTM对句子进行特征提取,并采用两层的堆叠结构,即将第一层的每一个时间步的输出作为下一层LSTM的输入,将第二层的输出作为LSTM层提取到的单词级别的特征。
在文本中,不同的单词对整个文本语义的贡献不同,例如当人读到一句话时,通常会将注意力放到几个重要的单词或短语上,所以利用attention机制将单词级别的特征组合成句子级别的特征,能更准确地表达句子的语义。
本文根据attention思想,将对句子语义有更重要贡献的单词赋予较大权重,贡献较少的单词则反之。
CNN网络结构的输出向量表示为[C1,C2,…,Cn],式(2)先对卷积得到的特征Ci利用tanh激活函数进行一次非线性变换得到vi,对输出特征加入非线性因素以提升模型的表达能力。式(3)利用softmax函数得到各个分量vi的attention权重Wcnn=(α1,α2,…,αn),权重大小则代表单词的重要程度大小。最后式(4)对CNN结构输出的向量[C1,C2,…,Cn]加权和,得到CNN提取的句子级别的语义向量表示Scnn。
vi=tanh(WcCi+bc)
(2)
αi=softmax(Wαvi)
(3)
(4)
同理,双向LSTM网络结构的输出向量表示为[h1,h2,…,hn],式(5)对LSTM编码得到的特征hi利用tanh激活函数进行一次非线性变换得到ui,式(6)利用softmax函数得到各个分量ui的attention权重Wlstm=(β1,β2,…,βn),最后式(7)对双向LSTM结构输出的向量[h1,h2,…,hn]加权和,得到LSTM提取的句子级别的语义向量表示Slstm。
ui=tanh (Whhi+bh)
(5)
βi=softmax(Wβui)
(6)
(7)
最后,将CNN和LSTM分别提取到的语义向量表示进行拼接,即[Scnn,Slstm],将其作为后面匹配层的输入,这样就结合了CNN和LSTM两个神经网络结构各自的优势,提取了更加丰富的特征。
这一阶段,得到两个句子的语义表示s1和s2后,在句子的语义空间中计算两个向量的相似度,从而判断两个文本是否语义相同。选取余弦相似度作为评价函数,如式(8)所示,输出相似度的值,其大小在[0,1]之间。
(8)
实验选取Quora Question Pairs[10]数据集进行验证与测试,数据来源于Quora网站,共包含404 000个问题组合对,图2为部分样例数据,具有相同语义的两个句子标签为1,反之则为0。利用spacy工具对文本进行分词,并对文本进行预处理,如去除停用词、去除特殊字符等。
图2 Quora Question Pairs样例数据
本实验选择了其他模型来进行对比实验,包括传统的机器学习模型Logistics Regression(LR)、深度学习模型CNN、双向LSTM、基于attention的LSTM共四个模型。
在词嵌入层采用Google的word2vec预训练词向量,通过在谷歌新闻数据集[9]上的训练,得到大约三百万个单词和短语的词向量,其向量的维度为300。如果出现嵌入层预加载词表以外的单词时,即出现未登录词时,将其初始化为一个300维的0向量。优化算法选取Adam[11](Adaptive Moment Estimation)优化器通过反向传播来更新参数,学习率设为0.01。为了防止过拟合,在每一层加入dropout[12],参数值设为0.2。LSTM的隐节点数量设置为128,CNN的卷积核大小为3,滤波器的数量设置为128。在整个训练过程中,不更新预训练词向量的权重,利用批处理的方法对其他参数进行更新。批处理的参数大小设置为1 024,训练轮数设置为20。
将数据集进行分割,80%的数据用来训练,20%用来验证。由于数据集正负样本比较均衡,选取准确率和F1值作为模型的评价指标。各个模型结果的比较如表1所示,可以看出深度学习的方法都优于传统的机器学习方法LR。BiLSTM在此自然语言处理任务上的效果稍强于CNN,而结合attention机制的LSTM模型(Att-LSTM)能提升LSTM的效果,且优于CNN和BiLSTM。
通过与其他模型对比,可以看出本文提出的方法效果最好。因为本文模型结合了CNN和BiLSTM的优势,提取了局部特征和总体特征,对句子的语义表达更加丰富。
表1 模型效果比较
本文介绍了一种用于判断两个句子的语义相似度的方法。首先,运用CNN和BiLSTM来提取句子的语义特征。然后探究了基于attention机制的神经网络在此任务上的应用。最后在Quora数据集上测试了本文提出的方法,取得了84.58%的准确率和85.02%的F1值,而且本文提出的模型在准确率和F1值上都优于其他四个经典模型。