随着信息技术的迅猛发展,文本数据的数量正在以指数级的速度增长,如何从海量的文本信息中捕获到有意义、相关性强、具有针对性的信息,进而对这些文本信息进行合理的应用与管理是当前需要解决的问题。文本挖掘技术在此阶段迅速发展,而作为文本挖掘的关键技术,文本相似度反映了两个文本或多个文本之间匹配程度,其取值大小反映了文本相似程度的高低。对于文本相似度的研究,文献[1]分析了基于向量空间模型的文本相似度计算算法存在的不足,提出了一种考虑文本长度参数、空间参数、特征词互信息等特征的改进算法,提高了文本相似度计算的准确性。文献[2]在词向量空间中计算出将文档中所有的词移动到另一文档对应的词需要移动的最小距离,进而分析两个文本的相似度,取得了较好的效果。文献[3]基于Siamese结构的神经网络构建文本表达模型,引入了词汇语义特征、阶跃卷积、k-max均值采样三种优化策略,分别在词汇粒度、短语粒度、句子粒度上抽取丰富的语义特征,并在计算文本相似度问题上取得了较好的效果。文献[4]提出了基于深层稀疏自动编码器的句子语义特征提取及相似度计算方法,提高了相似度计算的准确率,降低了计算的时间复杂度,但是算法在文本分类的任务中表现不佳。文献[5]提出了一种基于池化计算和层次递归自动编码器的短文本表示方法,进行文本相似度计算,并将此算法应用在生物医学信息检索系统中,取得了较好的效果。文献[6]提出了一种名为KATE的竞争自动编码器,利用隐藏层中的神经元之间的竞争,专门识别特定数据模式,并且能够学习文本数据有意义的表示。此模型能够学习到更好的文本特征并表示出来,在多个文本分析任务中的效果优于其他模型。文献[7]将传统的向量空间模型转化为双向量空间模型,此模型有效提高了计算精度。文献[8]提出了一种类似词袋模型的空间高效表征方式用于处理输入数据,并加入了无监督的“区域嵌入”,用卷积神经网络预测上下文。该模型在情感分类和主题分类任务上取得了比以往方法更好的效果。文献[9]用字符级卷积神经网络的输出当作长短期记忆网络(long short-term memory, LSTM)每个时间步的输入,该模型能够从字符级的输入中得到语义信息。文献[10]通过迭代调用“基于类标信息的聚类算法”获得了更强的文本分类能力。
为了进一步挖掘中文文本中字、词、句及上下文蕴含的深层次信息,本文在上述研究的基础上提出了一种新的文本相似度计算方法。利用深度学习的思想,将句子输入到改进的堆叠降噪自动编码器中学习字、词、句的语义信息,并将其表示成低维度的向量。设计两种不同结构的卷积神经网络,选用不同尺寸的卷积核,分别学习文本语义、上下文结构和句间关系的特征。最后应用特征融合技术,将不同方法得到的特征融合后用全连接的多层感知机计算出文本相似度,提出基于改进的自动编码器(auto encoder, AE)与卷积神经网络(convolutional neural networks, CNN)结合的AE+CNN算法。实验表明,本文提出的模型能够较好地学习字、词、句及上下文结构特征信息,有效提高了文本相似度计算的准确率。
1 基于深度学习的文本相似度计算方法 1.1 基本思路用one-hot[11]方法表示句子向量需要的训练数据量较少,效率较高。但是由于句子具有不完整、高度稀疏和碎片化的特性,若仅采用此方法表示,文本会丢失语义信息,特征维度会变得更加稀疏,带来“维数灾难”。为解决此问题,本文在one-hot表示的基础上,引入了改进的堆叠降噪自动编码器,学习句子本质特征的表达。利用改进的降噪堆叠自动编码器提取句子向量,将文本中的句子替换并拼接成文本矩阵,每一行为一个句子向量。然后把若干个文本矩阵两两组合,对于每个组合的矩阵,分别计算句子向量的余弦相似度,得到两个文本的相似度矩阵。接着为相似度矩阵和文本特征矩阵设计不同的深度卷积网络,利用深度卷积神经网络[12]中的卷积和池化技术提取出特征,将特征展平融合后传入全连接的多层感知机,最后输出为相似度。
1.2 基本自动编码器自动编码器属于多层前传神经网络,是深度学习中常用的模型之一,其主要依据是人工神经网络具有网络层次结构的特点,通过最小化重建输入数据的误差对数据进行特征提取。基本的自动编码器由编码器、解码器以及隐含层3个部分组成。输入端输入一个向量x后,首先用编码器将其映射到隐含层得到特征y,然后用解码器将特征y映射到输出层z,并选用leaky-relu(rectified linear unit)函数作为激活函数。计算公式为
$ y = leaky - relu\left( {{\mathit{\boldsymbol{W}}_\mathit{\boldsymbol{x}}}\mathit{\boldsymbol{x}} + {\mathit{\boldsymbol{b}}_\mathit{\boldsymbol{x}}}} \right), $ | (1) |
$ z = leaky - relu\left( {{\mathit{\boldsymbol{W}}_\mathit{\boldsymbol{y}}}y + {\mathit{\boldsymbol{b}}_\mathit{\boldsymbol{y}}}} \right), $ | (2) |
式中:Wx、Wy为权重矩阵; bx、by为偏移向量; leaky-relu激活函数表达式为
$ \mathit{\boldsymbol{f}}\left( \mathit{\boldsymbol{x}} \right) = \left\{ {\begin{array}{*{20}{l}} {0.01\mathit{\boldsymbol{x}}}&{\mathit{\boldsymbol{x}} < 0}\\ \mathit{\boldsymbol{x}}&{\mathit{\boldsymbol{x}} \ge 0} \end{array}} \right., $ | (3) |
leaky-relu激活函数能够保留反向传递的梯度,运算量小,减少参数间相互依存关系,缓解过拟合问题的发生。
1.3 改进的自动编码器由于文本具有维度高和稀疏性等特点,基本的自动编码器在文本分析领域的应用效果并不理想,存在模型的鲁棒性较差、在训练过程中比较容易出现过拟合等问题。为了能够实现端到端的从数据中提取有用的特征,同时提高模型的鲁棒性并缓解过拟合现象,本文在基本自动编码器的输入端加入随机噪声,由此构成降噪自动编码器。
一个能够从提取的特征中准确恢复出原始信号的模型未必是最好的,能够对“被污染/破坏”的原始数据编码、解码,然后还能准确恢复原始数据,这样的模型才是好的[13]。假设原始数据x被我们随机破坏,然后再对被破坏的数据进行编码和解码,得到恢复信号,该恢复信号尽可能逼近未被污染的数据。此时,监督训练的误差从L(x, g(f(x)))变成了
$ y = leaky - relu\left( {{\mathit{\boldsymbol{W}}_\mathit{\boldsymbol{x}}}\mathit{\boldsymbol{\hat x}} + {\mathit{\boldsymbol{b}}_\mathit{\boldsymbol{x}}}} \right), $ | (4) |
目标函数为
$ {\theta ^ * }, {{\theta '}^ * } = \arg \min \frac{1}{n}\sum\limits_{i = 1}^n L \left( {{\mathit{\boldsymbol{x}}_i}, {z_i}} \right) = \arg \min \frac{1}{n}\sum\limits_{i = 1}^n L \left( {{\mathit{\boldsymbol{x}}_i}, {\mathit{\boldsymbol{g}}_\theta }\left[ {{\mathit{\boldsymbol{f}}_\theta }\left( {{{\mathit{\boldsymbol{\hat x}}}_i}} \right)} \right]} \right), $ | (5) |
式中:Wx是权重矩阵;bx为偏移向量;θ*、θ′*为最优参数;xi为输入数据;
浅层的自动编码器的学习能力较差,难以提取出层次化的深层特征。为了从高维度数据中提取出更深层次的特征,本文在单层降噪自动编码器的基础上,将多个降噪自动编码器堆叠在一起,构造出深度网络用来提取数据的特征,提出了堆叠降噪自动编码器。通过上一层自动编码器提取出的特征作为下一层自动编码器数据输入的方式逐层训练多个降噪自动编码器。再将逐层训练的自动编码器的隐藏层叠加起来,构造出具有多个隐层的堆叠降噪自动编码器。堆叠降噪自动编码器学到的特征具有尽可能多的鲁棒性,能够在一定程度上对抗原始数据的污染、缺失,这一切都是端到端的自动学习。
经过上述堆叠降噪自动编码器处理的句子向量,组成文本特征矩阵,再经处理后传入卷积神经网络进行文本的相似度计算。
1.4 文本预处理针对中文文本向量表示维度过高的问题,本文选取了中文文本中3 500个常用字构造向量空间。而选用3 500个字的原因是:汉字数量很大,但实际上我们经常使用的汉字非常有限,3 500个常用字就覆盖了现代出版物用字的99.48%。先根据停用词表将停用词去除后,从常用词表中选取最常用的3 490个字,对于文本中出现的数字,用第3 490到3 499来表示。将特殊字符和未出现的字符直接删除。最后用标点符号进行句子分割,文本中的每个句子都能表示为空间中的一个向量x,表示方式为
$ \mathit{\boldsymbol{x}} = \left( {{t_1}, {t_2}, \cdots , {t_i}, \cdots , {t_m}} \right), $ | (6) |
式中:m表示字库中的总数;ti表示该句是否包含第i个字,如果包含该字,则ti=1,否则,ti=0。由此,每个文本组成一个行数为句子数、列数为3 500的文本矩阵。将此矩阵作为自动编码器的输入。
1.5 基于卷积神经网络的文本特征提取与相似度计算基于卷积神经网络的文本相似度计算方法有两类,一类是基于Siamese结构的神经网络模型,先分别学习输入的文本对的句子向量表达,再基于句子向量计算相似度。另一类是直接以词语粒度的相似度矩阵作为输入,学习特征并计算文本相似度。本文已经构建了基于语义的句子特征向量,为保证模型能够利用更多更有效的特征,将两种计算方法融合进行相似度计算。基本模型的卷积、池化和全连接层如图 1所示。
![]() |
图 1 卷积神经网络模型 Fig. 1 Convolutional neural network model |
通过堆叠降噪自动编码器学习对句子的语义向量特征表示,组成文本相似度矩阵,进一步应用于文本相似度计算的任务中。相似度矩阵的构建方法为:首先将所有文本表示成文本矩阵,矩阵的每一行为一个句子,用改进的自动编码器计算得到的句子特征向量替换每一个句子,得到特征矩阵。接着将文本矩阵两两组合,分别计算矩阵中句子向量的余弦相似度,并组合成两个文本的相似度矩阵。
找到已有所有的相似度矩阵的行数和列数的最大值,平铺成形如式(7)的相似度矩阵。使其具有相同的列数,即为同一维度的相似度矩阵。
$ {\mathit{\boldsymbol{S}}_{ij}} = \left[ {\begin{array}{*{20}{c}} {sim\left( {{a_1}{b_1}} \right)}&{sim\left( {{a_1}{b_2}} \right)}& \cdots &{sim\left( {{a_1}{b_n}} \right)}\\ \vdots & \vdots &{}& \vdots \\ {sim\left( {{a_m}{b_1}} \right)}&{sim\left( {{a_m}{b_2}} \right)}& \cdots &{sim\left( {{a_m}{b_n}} \right)} \end{array}} \right]. $ | (7) |
本文构造的卷积神经网络的卷积层由不同的滤波器f1, f2,…, fn构成,将其排列成F,F∈Rn×h×w,并增加了一个偏差向量b。其中,n、w和h分别表示滤波器的数量、宽度和高度。选定滑动窗口尺寸和滤波器尺寸相同,将窗口里的数据x1, x2,…, xn拼接为X,X∈Rxh×xw,滤波器组F的卷积输出计算为
$ \mathit{\boldsymbol{Y}} = \mathit{tanh}\left( {\mathit{\boldsymbol{F}} * \mathit{\boldsymbol{X}} + \mathit{\boldsymbol{b}}} \right) = \mathit{tanh}\left( {\left[ {\mathit{\boldsymbol{f}}_i^{\rm{T}}{\mathit{\boldsymbol{x}}_{\left( {j - h + 1:j} \right) \cdot \left( {k - w + 1:k} \right)}} + {\mathit{\boldsymbol{b}}_i}} \right]} \right), $ | (8) |
式中:*为卷积运算;i为索引滤波器的数量;j和k为沿着宽度和高度轴生成的滑动操作范围,步长为1;tanh为激活函数。
卷积的方式有两种:宽卷积和窄卷积。宽卷积的方式能够获得更好的效果,故本次模型使用宽卷积,并使用补零的方式处理矩阵边缘数据。最后,得到的输出为Y∈Rn×(xh-h+1)×(xw-w+1)。
然后,将来自卷积层的输出传入池化层,其目标是聚合信息并减少表示。目前最常用的池化方式有4种,即平均值池化、最大值池化、动态池化和k-max池化[14]。k-max池化可以对分散在不同位置的k个最活跃的特征进行池化。k-max池化能够保留特征间的顺序关系,但是对于特征的具体位置不敏感,而且还能很好地识别出特征被显著激活的次数。故本文采用k-max池化的方案。
将上文中改进的自动编码器与卷积神经网络相结合,提出AE+CNN算法。即用自动编码器提取的向量计算出相似度矩阵和对应的文本矩阵,分别通过不同参数的深度卷积神经网络的训练,再经过特征融合和全连接的多层感知机计算相似度。
2 实验结果及分析 2.1 实验条件本文使用的实验设备是一台CPU为i5 7400、GPU为GTX 1050 Ti、内存为32 G的PC,操作系统为Ubuntu 16.0.4,深度学习框架为Keras 2.2.4。
2.2 数据集及评价指标为了对比算法的有效性,本文使用数据集Ⅰ和数据集Ⅱ。数据集Ⅰ为中科院自动化所信息语料库,包含凤凰、新浪、网易、腾讯等网站的新闻数据。因为不同网站会报告相同的新闻事件,且内容语义相似,故可根据其标题是否相似作为文本是否相似的标签,选取相似度最高的3 000对文本作为正类,选取相似度最低的3 000对文本作为负类,进行训练和测评。
数据集Ⅱ为随机从中科院自动化所新闻语料库中选取标题相似度极低的3 000篇新闻数据,然后用不同的翻译工具,通过API接口,多次翻译,生成3 000对相似的文本对,作为正类,再相互随机组合3 000组不相似文本对作为负类。在训练堆叠自动编码器时,用中科院自动化所信息语料库中的所有数据。训练卷积神经网络时,随机选取每个数据集的75%作为训练集,剩余的25%作为测试集。
在实验结果的评测方面,实验采用常用的精度(precison)、召回率(recall)以及F1得分3个指标作为评价指标,
$ precision = \frac{{TP}}{{TP + FP}}, $ | (9) |
$ recall = \frac{{TP}}{{TP + FN}}, $ | (10) |
$ F1 = \frac{{2 \cdot precision \cdot recall}}{{precision + recall}}, $ | (11) |
式中:TP表示真正例数量;FP表示假正例数量;TN表示真反例数量;FN表示假反例数量。
2.3 实验步骤Step1 通过one-hot字库表示文本的句子向量。
Step2 将句子向量组成文本矩阵并利用改进的降噪堆叠自动编码器提取低维度句子向量。
Step3 将文本的句子向量组成文本矩阵,并计算两文本各句子的相似度,拼成相似度矩阵。
Step4 用不同参数的深度卷积神经网络提取出相似度矩阵和文本矩阵的特征,通过特征融合成一维的特征。
Step5 将Step4得到的一维特征经过一个全连接的多层感知机进行有监督的模型训练。
Step6 对模型的文本相似度计算结果进行评估。
2.4 模型训练在模型训练阶段,使用随机梯度下降法来优化网络,使用AdaDelta算法自动调整学习率。为了获得更高的性能,在开发集上进行超参数选择,并且在每个卷积层之后添加批量标准化层以加速网络优化。此外,在隐藏层应用了Dropout技术防止过拟合。最终,堆叠降噪编码器选择三层叠加的方式,每次降低1 000维,最后生成句子特征向量为500维,降噪编码器的破坏率选为0.1。
在参数选择的问题上,每个文本选取64个句子进行计算,此时文本相似度矩阵的维度为64×64,卷积核大小为3×3、5×5和7×7,每个卷积核由高斯函数随机生成。池化层为2×2大小的max pooling方式。后一层的每一个卷积核对前一层的池化层做卷积,然后加权求和得到和卷积核数目相同的卷积矩阵,经过深度为3的卷积网络,最终展开为长度256的特征向量。文本特征矩阵的维度为64×500,卷积核大小为3×500、4×500、5×500、6×500。卷积计算后再经过2-max pooling层,最终组合为长度64的特征向量。将两特征向量连接后输入到多层感知机里进行有监督的训练。
2.5 对比实验作为对比方案,本文还实现了用word2vec+TF-IDF计算文本相似度的算法。其中,word2vec是一种由词到向量的方法。TF-IDF (term frequency-inverse document frequency)是词频-逆文本频率,用以估计一个词对于语料库中一个文本的重要程度。具体步骤如下。
Step1 将中科院自动化所信息语料库的文本数据进行分词和去停用词、低频词。
Step2 用Step1的语料库训练word2vec模型并计算出每个词的向量表示。
Step3 用TF-IDF算法分别计算出数据集Ⅰ和数据集Ⅱ中的每个文本对应的5个关键词,
$ TF - IDF = T{F_{ti}} \cdot ID{F_t} = \frac{{{n_{ti}}}}{N} \cdot \log \frac{{\left| D \right|}}{{{n_t}}}, $ | (12) |
式中:|D|为文本总数;nt为包含词语t的文本数;N为一个文章中出现最多的词的次数。
Step4 将提取出的每个文本的5个关键词求平均值得到每个文本的向量表示。
Step5 计算每两个文本间向量夹角的余弦值作为文本的相似度。
Step6 设定相似度阈值,得出文本是否相似。
2.6 结果分析表 1为使用AE+CNN(自动编码器+卷积神经网络)、word2vec+TF-IDF和word2vec+CNN三种算法在数据集Ⅰ和数据集Ⅱ上的测评结果。
![]() |
表 1 数据集Ⅰ和Ⅱ的测评结果 Tab. 1 Evaluation result for datasets Ⅰ and Ⅱ |
在数据集Ⅰ上的实验结果表明,本文提出的AE+CNN算法能够有效计算出文本相似度,找出相似的文本,在准确度、召回率和F1值上都取得了较好的结果。数据集Ⅱ的各项评测指标都高于数据集Ⅰ,这是因为数据集Ⅱ的正类是由翻译工具多次翻译得来的,使得共现词、关键词、语义、上下文语境等都具有很大相似度,而负类是完全不相关的文本。
word2vec+TF-IDF算法评测结果较AE+CNN算法评测结果差的原因是此方法虽然能找出相似的文本,但忽略了文本的语义和上下文的结构特征,将具有类似关键词的文本但实际内容不相关的文本对都给出了较高的相似度分数。
word2vec+CNN算法从每个文本中选出50个词组成文本矩阵,并相互组成相似度矩阵,训练时选择与AE+CNN同样的模型。但最终结果较差,原因是word2vec算法仅仅学习了词语的语义特征,忽略了文本的句子语义和上下文结构的特征。因此,word2vec+CNN的组合虽然在计算句子的相似度上能够取得较好的效果,但在文本相似度计算的任务上表现不佳。
从以上对比实验结果可以得出,本文提出的算法能够很好地计算文本间相似度,AE模块学习到了语句的语义特征,两个CNN模块通过特征融合,提取出了文本的结构特征和两文本间的相互关系。
3 结语本文提出的基于堆叠降噪自动编码器和卷积神经网络的文本相似度算法,在计算文本间相似度的应用中取得了较好的效果。但是算法的准确度很大程度上受改进的自动编码器准确度的影响,因此进一步改进堆叠降噪自动编码器的模型,将会提高文本相似度计算的整体准确度。本文提出的算法可应用于推荐系统中,也可以应用于检索系统中,即将检索关键词通过维基百科的文本拓展,再根据文本相似度计算出文本相似度,提取出最高的几个文本作为检索结果。我们下一步的工作将集中在算法准确度的提高和具体工程应用方面。
[1] |
王嘉旸, 杨丽萍, 闫天伟. 基于向量空间模型的文本相似度计算方法[J]. 科技广场, 2017(2): 9-13. WANG J Y, YANG L P, YAN T W. Text similarity computing method based on vector space mode[J]. Scicen mosaic, 2017(2): 9-13. ( ![]() |
[2] |
KUSNER M J, SUN Y S, KOLKIN N I, et al. From word embeddings to document distances[C]//Proceedings of the 32nd International Conference on Machine Learning. Lille, 2015: 957-966. http://dl.acm.org/citation.cfm?id=3045118.3045221
( ![]() |
[3] |
GUO J H, BIN Y, XU G D, et al. An enhanced convolutional neural network model for answer selection[C]//Proceedings of the 26th International Conference on World Wide Web Companion. Perth, 2017: 789-790. https://dl.acm.org/doi/10.1145/3041021.3054216
( ![]() |
[4] |
马建红, 杨浩, 姚爽. 基于自动编码器的句子语义特征提取及相似度计算[J]. 郑州大学学报(理学版), 2018, 50(2): 86-91. MA J H, YANG H, YAO S. Semantic feature extraction and similarity computation of sentences based on auto-encoder[J]. Journal of Zhengzhou university (natural science edition), 2018, 50(2): 86-91. ( ![]() |
[5] |
李岩.基于深度学习的短文本分析与计算方法研究[D].北京: 北京科技大学, 2016. LI Y. Research on analysis and computation method for short text with deep learning[D]. Beijing: Univerisyt of Science and Technology Beijing, 2016. http://cdmd.cnki.com.cn/Article/CDMD-10008-1016100050.htm ( ![]() |
[6] |
CHEN Y, ZAKI M J. Kate: K-competitive autoencoder for text[C]//Proceedings of the 23rd ACM SIGKDD International Conference on Knowledge Discovery and Data Mining. Halifax, 2017: 85-94. https://arxiv.org/abs/1705.02033
( ![]() |
[7] |
LIU Y, LI D M. Short text similarity measure based on double vector space model[J]. International journal of database theory and application, 2016, 9(10): 33-46. DOI:10.14257/ijdta.2016.9.10.04 ( ![]() |
[8] |
JOHNSON R, ZHANG T. Semi-supervised convolutional neural networks for text categorization via region embedding[C]//Proceedings of the 28th International Conference on Neural Information Processing Systems. Montreal, 2015: 919-927. https://www.ncbi.nlm.nih.gov/pubmed/27087766
( ![]() |
[9] |
KIM Y, JERNITE Y, SONTAG D, et al. Character-aware neural language models[C]//The Thirtieth AAAI Conference on Artificial Intelligence. Phoenix, 2016: 2741-2749. https://arxiv.org/abs/1508.06615
( ![]() |
[10] |
郭颂, 姚建峰, 周鹏. 基于聚类树的多类标文本分类算法研究[J]. 信阳师范学院学报(自然科学版), 2017, 30(1): 140-145. GUO S, YAO J F, ZHOU P. Research on muti-label text classification algorithm based on cluster tree[J]. Journal of Xinyang Normal University, 2017, 30(1): 140-145. DOI:10.3969/j.issn.1003-0972.2017.01.031 ( ![]() |
[11] |
TURIAN J, RATINOV L, BENGIO Y. Word representations: a simple and general method for semi-supervised learning[C]//Proceedings of the 48th Annual Meeting of the Association for Computational Linguistics. Uppsala, 2010: 384-394. https://dl.acm.org/doi/10.5555/1858681.1858721
( ![]() |
[12] |
GLDBERG Y. Neural network methods for natural language processing[M]. San Rafael: Morgan & Claypool Publishers, 2018.
( ![]() |
[13] |
VINCENT P, LAROCHELLE H, LAJOIE I, et al. Stacked denoising autoencoders: learning useful representations in a deep network with a local denoising criterion[J]. Journal of machine learning research, 2010, 11(12): 3371-3408. ( ![]() |
[14] |
ZHANG X, ZHAO J B, YANN L C. Character-level convolutional networks for text classification[C]//The 29th Annual Conference on Neural Information Processing Systems.Montreal, 2015: 649-657.
( ![]() |