句子相似度计算是自然语言处理中一项基础而核心的研究课题,应用在自然语言处理的众多领域.在问答系统中[1-2],通过计算用户所提问题和系统知识库中问题的相似度,从而找到用户问题的最佳匹配并返回最佳答案.文献[3]在自动文摘系统中用句子相似度去除冗余信息.文献[4]在信息检索系统中通过相似度计算匹配用户所查找的内容.文献[5-6]基于HowNet和同义词词林提出了语句相似度的计算模型,该方法考虑到了词的语义特征,能够发现词表面信息不同但语义相近,但是该方法依赖语义词典的完整性,当一些词不存在于词典中时,对句子相似度计算的准确性影响比较大.文献[7]提出了一种改进的基于多重信息的方法, 即结合关键词信息、句子结构信息和语义信息的句子相似度计算方法,该方法限定在问答系统中的句子相似度计算,且提取的句子语义依然是浅层语义.
文献[8]提出了一种基于框架语义依存图的句子相似度计算模型,该方法通过计算句子核心框架间的各种参与者及外围语义成分来得到句子整体的相似度,然而仅考虑核心框架,外围语义成分以词集合的形式进行处理,使得包含多框架的句子语义缺失,影响相似度的准确性.文献[9]提出的基于框架语义分析的汉语相似度计算,文中进行了框架重要度选择,也因此未能考虑所有的框架,且该方法依赖于资源库中已有的框架的句子,并且目前汉语句子的框架语义自动分析性能较低,目标词、框架选择及框架元素标注工作均要通过人工参与进行标注及矫正,因此该方法也有一定的局限性.文献[10]提出了基于语义依存的汉语句子相似度计算方法,该方法基于《知网》的知识资源,首先采用哈尔滨工业大学计算机科学与技术学院信息检索研究室所做的依存句法分析器建立句子依存树,之后利用依存结构来计算有效搭配对之间的相似程度,这种方法测试结果的准确率严重依赖于所生成的句法依存树,在分析长句子和动词较多的文章时,正确率就会比较低.文献[11]对基于相同词的句子相似度模型作了改进.文献[12]通过回归方法将几种相似度结果综合起来,提出一种新的句子相似度度量方法,并研究了其在文本自动摘要中的应用.文献[13]提出了一种同时考虑语义和词序的句子相似度计算方法,并将其用在了问答系统中,该方法计算两个句子的语义相似度和词序相似度,然后进行加权得到两个句子的相似度.文献[14]提出了基于关系向量模型的句子相似度计算,既考虑了句子的表层信息,同时融入了语义分析,取得了较好的效果.本文利用深层自动编码器处理技术,通过深层神经网络学习字、词、句子之间的关系,避免建立停用词表、句子分词、词性分析等工作,是一种更纯粹的端到端的学习方法,同时在深层神经网络模型中采用迁移学习思想,将特征迁移以提高模型的泛化能力,并通过添加L2范式进一步避免算法的过拟合,由此训练得到的深层神经网络模型来提取句子的低维特征并,作为句子的语义特征向量,用此特征向量计算句子的语义相似度.实验表明,本文提出的算法在句子语义理解和相似度计算的准确率方面都有较大的提高,时间计算复杂度仅为O(n).
1 自动编码器提取句子特征进行相似度计算方法 1.1 基本思路自动编码器广泛应用于无监督特征学习,在自然语言特征提取中也得到了应用.文献[15]中采用自动编码器将词汇的高维分布信息转化为低维特征表示.文献[16]提出基于自动编码器的短文本特征提取及聚类研究,将每条短文本转化成空间的一个向量,并用自动编码器提取到低维特征.
本文利用自动编码器(auto-encoder, AE)计算句子相似度算法的基本思想为:人类通常先学习汉字,然后由学到的汉字去理解词,之后学习短语、句子.受到这样认知过程的启发,本文考虑到日常文章句子中的字大都能够在2 500个常用字和1 000个次常用汉字内找到,故将2 500个常用字和1 000个次常用字组成3 500维度的向量,每个字对应于一个确定的位置,每个句子对应一个3 500维的向量.句子用3 500维向量表示的方法是:将句子中的每个字在3 500维向量中相同字所在位置的数值置为1,其余位置上数值为0,由此得到一个3 500维的向量表示的一个句子.每一个向量代表一个句子,将足够多的句子向量组成一个比较大的矩阵.自动编码器具有强大的无监督学习非线性特征的能力,能提取到文本中的隐含特征.
采用自动编码器算法,对由大规模的语句向量组成的矩阵进行深层的学习,使用神经网络学习字与字之间的关系,比如哪两个字是一个词,如“数”和“学”,它们在本实验中由常用字和次常用字组成3 500维向量中位置是5和300,学习到这两个字之间是一种强关系,也就是说是一个词,完成字与字之间的特征学习,进一步特征抽取,去理解两个词之间是否是同义词,比如“较小”和“不大”,最终理解短语和句子.经过训练之后,当重新输入一个新的句子向量的时候能够自动提取句子的深度语义特征,并用本文定义的相似度进行两个句子的相似度计算.
自动编码器将句子的高维稀疏向量转化为低维向量,并且学习到的低维向量包含句子信息的本质特征,去除高维中不必要的干扰部分,由此得到的特征向量用于句子的相似度计算.算法流程分3个步骤:首先,对文本进行预处理,构建句子的向量空间模型,每个句子都会转化成空间中的一个向量.然后将这些高维稀疏向量组成的矩阵输入到构造好的深层自动编码器中学习,经过逐层抽象,提取得到不同抽象程度的低维特征向量,这一部分还包括L2正则化过程.最后利用本文定义的相似度计算方法对抽取到的句子特征向量进行计算,得出句子间的相似度.
1.2 文本预处理目前,尽管原始的文本包含最完备的文本信息, 然而传统的自然语言处理方式无法完全处理这些文本信息,因而在对文本建立词项的词频向量之前,要对文本进行预处理.传统的文本的预处理主要是删除文本中对应于停用词列表中的特定词项,如中文的“的”、“地”,英文的"a"、"an"等,对文本中的人名、地名等特殊词项识别出来以后统一替换为特定的字符串,亦或对文本中的词项进行词性分析,给出词项的语义属性,即该词项是动词、形容词等.本文提出的方法需要对文本的预处理与传统方法对文本预处理的要求不同,本文的预处理更加简单.
本文提出的方法需要的文本预处理如下:由于语料中的文本是文章,人工对文章以句子为单位进行构造,例如:“现在,这家奥地利的铝合金压铸生产厂每天向德国的戴姆勒-克莱斯勒汽车生产厂提供1 500件整体压铸的铝合金构件”,这句话中“现在”与“这家奥地利的铝合金压铸生产厂每天向德国的戴姆勒-克莱斯勒汽车生产厂提供1 500件整体压铸的铝合金构件”作为一个整句不拆开.“整个顶窗由三大部分构成:前,后两部分是固定的”.这句话中“整个顶窗由三大部分构成”与“前,后两部分是固定的”虽然在文章中是一句话,但在本文实验中将这句话作为两个句子来处理.“这个计划能否顺利实施,将取决于国家政策的支持力度”,这句话中“这个计划能否顺利实施”与“将取决于国家政策的支持力度”作为两句话处理.
总之,是不是作为一句话的标准是这句话能否可以作为一个日常用语表达出来,日常用语可以是短句或者长句.
1.3 自动编码器自动编码器是一种多层前传神经网络,可以用来对高维数据降维,得到低维的特征向量,其在深度学习中被广泛运用.在将自动编码器用于无监督特征学习时,通常使用由1个输入层、1个隐层以及1个输出层组成的3层神经网络.设输入样本的向量表示为x, 得到隐层和输出层的激活情况公式为
$ \mathit{\boldsymbol{y}} = S\left( {\mathit{\boldsymbol{Wx}} + b} \right), \mathit{\boldsymbol{z}} = S({\mathit{\boldsymbol{W}}^{\rm{T}}}\mathit{\boldsymbol{y}} + b' ), $ |
其中:S(x)=1/(1-e-x)为Sigmoid函数.并注意与一般的多层前传神经网络不同的是,前后两个公式使用的权重矩阵为W, WT为转置.
与有监督学习不同,自动编码器的学习目标是使输出层尽量还原输入层的状态,即使得z尽量与x相同,本文使用损失函数
隐层y的维度相比x的维度小得多, 所以隐层y可以学习到输入样本的低维表示,并且通过解码能够包含与高维表示相同的信息.使用没有标注的数据集X,进行自动编码器的无监督学习,最后对于任何输入向量x,通过训练好的模型进行计算,得到隐层向量y,即输入向量的一个低维编码.
自动编码器权重的训练采用随机梯度下降算法,使用公式
本文采用曼哈顿距离[19]对深层自动编码器提取到的句子特征向量进行计算,得到句子间的距离为d,并根据距离计算得到句子间相似度.所用公式为
$ d({\mathit{\boldsymbol{T}}_i}, {\mathit{\boldsymbol{F}}_i}) = \sum\limits_{i = 1}^n {\left| {{x_i}-{y_i}} \right|} . $ | (1) |
随着神经网络模型层数的增加,可以提取到更低维的特征,无论句子语义是否相同,此时距离值都很小,因而需要将距离值进行放大.本文在式(1)基础上取合适值e,将它们的距离放大到1,同时计算两个语义完全不同的句子,取一个合适值e,将其距离放大到0,进行多次实验,固定经验值e,本文中e为8×103.当句子语义相同时,计算的结果接近于0,语义差别越大则计算结果越接近于1,相似度计算方法为
$ similar({\mathit{\boldsymbol{T}}_i}, {\mathit{\boldsymbol{F}}_i}) = 1-\sum\limits_{i = 1}^n {\left| {{x_i}-{y_i}} \right|\cdot e}, $ |
其中:Ti, Fi代表两个句子的特征向量;xi为Ti中第i项的特征值;yi为Fi中第i项的特征值;n为特征向量的长度;时间复杂度为O(n).
1.5 基于关系向量模型的句子相似度计算方法定义1 给定一个句子Ti,经过汉语分词系统分词后,得到的关键词mi构成的向量称为句子Ti的关键词向量,表示为Ti={m1, m2,…,mn}.
定义2 Ti向量中,mi前一个关键词称为前关键词,mi后一个关键词称为后关键词.
定义3 Ti向量的每一个关键词mi赋一个初始权重, 所有关键词的权重值构成一个向量称为Ti的初始权重值向量.
定义4 给定两个句子Ti、Tj的关键词向量表示,对Ti中任一关键词mi,如果也在Tj中出现,则称mi在Tj中存在,Ti中所有在Tj中存在的关键词构成的向量称为Ti基于Tj的存在向量,表示为Eij={e1,…,en}.存在向量中相应的关键词的权重值构成的向量称为Ti基于Tj的存在值向量,表示为TEij={v1,…,vn}.
定义5 给定一个句子的Ti表示,Ti中词的个数称为Ti的向量长度,表示为Len(Ti).
定义6 计算Ti和Tj的相似度时,在考虑关键词词序和语义的基础上,考虑关键词的前关键词和后关键词与该关键词的局部结构关系的计算模型,称为关系向量模型.
首先利用中科院开源的SharpICTCLAS分词系统,分别对Ti和Tj进行分词,从分词结果中提取Ti和Tj相应的关键词构成的关键词向量,然后考虑长度更短的关键词向量,这里假设Len(Ti)≤Len(Tj),计算Ti的初始权重值向量TBi={b1, b2, …,bn},其中TBi表示Ti的权重向量.对于Ti中的每一个关键词mi,依次做如下处理:如果mi在Tj中存在,考虑mi在Ti和Tj中的前关键词,如果这两个前关键词为相同的词或者同义词,其中同义词判断时使用了《知网》的知识资源.则将TBi中mi相应的权重增大α倍,对于mi后关键词做相同的处理.如果mi在Tj中不存在,则TBi中mi的相应权重不变.然后计算Ti基于Tj的存在向量Eij,对于Eij中的每个关键词,从TBi中取出相应关键词的权重值构成存在值向量TEij={v1,…,vn}.最后计算两个句子的相似度.所用公式为
$ Sim({\mathit{\boldsymbol{T}}_i}, {\mathit{\boldsymbol{T}}_j}) = \frac{{\sum\limits_{i = 1}^p {{v_i}} }}{{\sum\limits_{i = 1}^n {{b_i}} }} \times \frac{{Len({\mathit{\boldsymbol{T}}_i})}}{{Len({\mathit{\boldsymbol{T}}_j})}}, $ |
其中:p为存在值向量TEij的长度;n为向量Tj的长度.
2 实验及结果分析 2.1 实验数据本文实验将小学一年级到六年级12本语文课本中的文章作为语料,采用本文中的预处理方法进行了处理,得到了21 792个句子组成的21 792×3 500的矩阵,利用自动编码器对此矩阵逐层训练神经网络模型.当新的句子向量输入到训练好的深层神经网络模型中能够学习到的句子的低维特征向量来进行相似度的计算,最后与基于关系向量模型的句子相似度计算方法计算的句子间相似度结果进行比较,从而验证该算法的有效性.
2.2 实验过程对12本语文课本中的文章进行处理,把每一篇文章中的句子放到txt文本中,通过编写好的程序读取txt文本,将txt文本中的每个句子转换为一个3 500维的向量,最终有了21 792×3 500的矩阵.对于本文提出的基于自动编码器提取句子特征的方法,采用的是Matlab中的Deep Networks库来实现.由于输入矩阵规模比较大,训练所花费的时间会比较长,并且模型易达到局部最优点,使训练的模型泛化能力并不高.为了使样本具有更好的泛化能力,实验中模型的训练借鉴了迁移学习的思想.迁移学习放宽了传统机器学习中的2个基本假设:用于学习的训练样本与新的测试样本满足独立同分布的条件;必须有足够多的训练样本才能通过学习得到一个好的模型.
实验中模型训练方案如下:将21 792×3 500矩阵分为两个矩阵,分别为10 000×3 500和11 792×3 500的矩阵;通过自动编码分别提取10 000×3 500和11 792×3 500矩阵的低维特征,10 000×3 500和11 792×3 500矩阵变为10 000×3 000和11 792×3 000的矩阵,维数下降500维;然后将这两个矩阵合并为21 792×3 000的矩阵,此处采用的迁移学习的思想即特征迁移;之后通过自动编码器对21 792×3 000矩阵每次降维500,共3次;由此得到共4层的深层神经网络模型.实验中L2范式正则化的惩罚项系数为0.025.
当前人工判断句子相似度因人而异,在小学的知识水平上,每个人提出6组相似句,每个人提出的相似句由其他人打分,分值范围为0~10分,分数越高表明对此相似句的认可程度越高,反之认可程度低.共5个人提出了30组语义相似的句子,在30组相似句中按照分数由高到低挑选了20组语义相同的句子.本文对句子相似度量化标准如下,句子语义相似度范围为0~1,计算得到的值越小则句子相似度越高,0~0.1表示句子语义相同,0.1~0.2表示句子语义比较相似,0.3~1表示句子相似度程度递减.
首先通过训练的深层神经网络模型计算300组相似句子的相似度,其中语义相同的有20组,语义比较相似的有200组,语义相似度在0.2~0.4的有80组.然后在600个句子中随机挑选700组句子计算它们的相似度,之后采用基于关系向量模型的句子相似度计算方法,计算300组相似句子和700组随机挑选的语义不同的句子.本文提出的方法实验示例,如“公共汽车上给老奶奶让座”和“公交车上把座位给老人坐”,用实验中训练得到的深层神经网络模型提取到的1 500维特征用式(1)计算,得到2个句子相似度为0.89.人工对这100组句子的相似度进行了相似程度划分,实验表明,与基于关系向量模型的句子相似度计算方法相比,本文提出的方法能更准确地计算句子的相似度.
正确率P的计算公式为
$ P = \frac{{\sum 测试结果正确的句子总数 }}{{\sum 测试句子总数 }} \times 100\% . $ |
实验中测试的句子组数为1 000组,基于关系向量模型的相似度计算得到的句子相似度正确数为740,正确率为74%.本文方法进行相似度计算得到的句子相似度正确数为820,正确率为82%.本文提出的算法所得的正确率高于基于关系向量模型的句子相似度计算.对于基于关系向量模型的句子相似度计算方法中的缺陷,如处理2个长度相差较大的句子时,由于长句几乎包含了短句关键词向量,计算得到的相似度较大,而事实上这2个句子并不是相似的问题,本文提出的算法在处理倒装句时比后者表现更加优秀.
通过分析实验中发生错误的语句特征,发现本文算法对数据量要求比较高,如果没有充足的数据,不能够充分学习到字、词、句子之间的关系,将导致深层神经网络模型不能提取到合适的特征进行句子间的相似度计算,导致并不相似的2个句子得到相似度值很高,如“无土栽培种植植物可行”和“不用泥土植物也可以生存”,通过本文中模型计算得到的相似度为0.022 2,而“无土栽培种植植物可行”和“透过那些化石可以观察到几亿年前的古生物”相似度为0.025 1,高于相似句子的相似度.实验还发现当采用第1层特征计算相似度的时候错误率很高,随着层数的增加提取到的更低维的特征来计算相似度,能够纠正之前句子相似度计算的部分错误.语料的不足,使得模型不能充分学习字、词之间的关系,导致2个并不相同的句子相似度很高,因而训练层数的选择和数据的充足与否是建立模型过程中重要的问题.
3 结语本文提出的基于自动编码器提取句子的语义特征计算句子相似度的算法,在计算句子间语义相似度中取得了比较好的效果.但由于训练数据还并不充分,使得字、词、句子没有得到充足的学习,因此在句子语义相似度计算中,用训练得到的模型提取句子特征,就使得语义并不相同的2个句子的相似度很高,甚至超过原有的相似句子的相似度,因而目前在文本分类中表现不佳.本文提出的算法可以应用到检索中,通过以语义相似度检索句子,也可以应用到论文查重中.接下来的实验应该通过加大语料的规模的方法提高模型的稳定性,并尝试探究此方法用于文本分类及对短文、微博、专利等长文本的特征提取等工作.
[1] |
卜伟琼, 方逵, 陈益能. 农业知识问题系统句子相似度算法研究[J]. 农业网络信息, 2012, 27(10): 17-20. DOI:10.3969/j.issn.1672-6251.2012.10.005 ( ![]() |
[2] |
邰杨芳, 贾君枝. 基于汉语框架网络本体的问答系统中语句相似度计算[J]. 图书情报工作网刊, 2012, 3(9): 10-16. ( ![]() |
[3] |
蒋勇铭, 陈微熙, 张仲贵. 基于句子相似度的自动文摘评价方法[J]. 中国西部科技, 2011, 10(29): 22-23. DOI:10.3969/j.issn.1671-6396.2011.29.012 ( ![]() |
[4] |
王品, 黄广君. 信息检索中的句子相似度计算[J]. 计算机工程, 2011, 37(12): 38-40. ( ![]() |
[5] |
李素建. 基于语义计算得语句相关度研究[J]. 计算机工程与应用, 2002, 38(7): 75-76. ( ![]() |
[6] |
刘群, 李素建. 基于《知网》的词汇语义相似度计算[J]. 中文计算语言学, 2002, 7(2): 59-76. ( ![]() |
[7] |
张琳, 胡杰. FAQ问答系统句子相似度计算[J]. 郑州大学学报(理学版), 2010, 42(1): 57-61. ( ![]() |
[8] |
LI R, LI S H, ZHANG Z Z. The semantic computing model of sentence similarity based on Chinese FrameNet[C]//IEEE/WIC/ACM International Joint Conferences on Web Intelligence and Intelligent Agent Technologies. Singapore, 2009: 255-258.
( ![]() |
[9] |
李茹, 王志强, 李双红, 等. 基于框架语义分析得汉语句子相似度计算[J]. 计算机研究与发展, 2013, 50(8): 1728-1736. DOI:10.7544/issn1000-1239.2013.20111675 ( ![]() |
[10] |
李彬, 刘挺, 秦兵, 等. 基于语义依存的汉语句子相似度计算[J]. 计算机应用研究, 2003, 20(12): 15-17. DOI:10.3969/j.issn.1001-3695.2003.12.005 ( ![]() |
[11] |
杨思春. 一种改进的句子相似度计算模型[J]. 电子科技大学学报, 2006, 35(6): 956-959. ( ![]() |
[12] |
张奇, 黄萱菁, 吴立德. 一种新的句子相似度度量及其在文本自动摘要中的应用[J]. 中文信息学报, 2004, 19(2): 93-99. ( ![]() |
[13] |
LI Y, DAVID M, ZUHAIR A B, et al. Sentence similarity based on semantic nets and corpus statistics[J]. IEEE transactions on knowledge and data engineering, 2006, 18(8): 1138-1150. DOI:10.1109/TKDE.2006.130 ( ![]() |
[14] |
殷耀明, 张东站. 基于关系向量模型的句子相似度计算[J]. 计算机工程与应用, 2014, 50(2): 198-203. ( ![]() |
[15] |
张开旭, 周昌乐. 基于自动编码器的中文词汇特征无监督学习[J]. 中文信息学报, 2013, 27(5): 1-8. ( ![]() |
[16] |
刘勘, 袁蕴英. 基于自动编码器的短文本特征提取及聚类研究[J]. 北京大学学报(自然科学版), 2015, 51(2): 282-288. ( ![]() |
[17] |
刘建伟, 付捷, 罗雄麟. L1+L2正则化逻辑斯蒂模型分类算法[J]. 计算机工程, 2012, 38(13): 148-151. ( ![]() |
[18] |
李婵, 杨文元, 赵红. 基于最小二乘法的标记分布学习[J]. 郑州大学(理学版), 2017, 49(4): 22-27. ( ![]() |
[19] |
陈建阁. 基于曼哈顿距离法的颗粒流速检测技术[J]. 工矿自动化, 2015, 40(11): 52-55. ( ![]() |