[0093] 参照说明书附图和具体实施例对本发明的一种基于深度分层编码的智能语义匹配方法和装置作以下详细地说明。
[0094] 实施例1:
[0095] 如附图9所示,本发明的基于深度分层编码的智能语义匹配方法,该方法是通过构建并训练由嵌入层、深度分层编码表示层、分层特征交互匹配层和预测层组成的句子匹配模型实现对句子的深度分层编码表示,获取更多的语义上下文信息和句子间的交互信息,同时通过实现一种新的分层特征交互匹配机制,以达到对句子进行智能语义匹配的目标;具体如下:
[0096] (1)、嵌入层对输入的句子进行嵌入操作,并将结果传递给深度分层编码表示层;
[0097] (2)、深度分层编码表示层对由嵌入操作获取的结果进行编码操作,得到句子的中间编码表示特征与句子的最终编码表示特征两种不同的特征编码表示;
[0098] (3)、分层特征交互匹配层对句子的中间编码表示特征与句子的最终编码表示特征分别进行匹配处理,得到匹配表征向量;
[0099] (4)、在预测层使用一个全连接层对匹配表征向量进行一次映射,然后使用sigmoid层将得到的结果映射为指定区间中的一个值作为匹配度数值,根据匹配度数值与设定阀值的相对大小判定输入的句子对间的语义是否匹配。
[0100] 实施例2:
[0101] 如附图1所示,本发明的基于深度分层编码的智能语义匹配方法,具体步骤如下:
[0102] S1、构建句子匹配知识库,如附图2所示,具体步骤如下:
[0103] S101、使用爬虫获取原始数据:编写爬虫程序,在网上公共问答平台爬取问题集,得到原始相似句子知识库;或者使用网上公开的句子匹配数据集,作为原始相似句子知识库。
[0104] 互联网上的公共问答分享平台中有着大量的问答数据及相似问题的推荐,这些都是面向大众开放的。因此我们可以根据问答平台的特点,设计相应的爬虫程序,以此来获取语义相似的问题集合,从而构建原始相似句子知识库。
[0105] 举例:银行问答平台中的相似句子对示例,如下表:
[0106]句子1 还款期限可以延后一天吗?
句子2 是否可以申请延期一天还款?
[0107] 或者,使用网上公开的句子匹配数据集,作为原始知识库。比如BQ数据集【J.Chen,Q.Chen,X.Liu,H.Yang,D.Lu,B.Tang,The bq corpus:A large‑scale domain‑specific chinese corpus for sentence semantic equivalence identification,EMNLP2018.】,该数据集包含网上银行服务日志中的120000个问题对,是一种专门用于句子语义匹配任务的中文数据集。BQ数据集是目前银行领域最大的、经人工注释过的中文数据集,对中文问题语义匹配研究很有用,而且该数据集是公开可用的。
[0108] S102、预处理原始数据:预处理原始相似句子知识库中的相似句子对,对每个句子进行断字操作或分词操作,得到句子匹配知识库。
[0109] 对步骤S101中获得的相似句子对进行预处理,得到句子匹配知识库。以断字操作为例进行说明,即以中文里的每个字作为基本单位,对每条数据进行断字操作:每个汉字之间用空格进行切分,并且保留每条数据中包括数字、标点以及特殊字符在内的所有内容。在此步骤中,为了避免语义信息的丢失,保留了句子中的所有停用词。
[0110] 举例:以步骤S101中展示的句子1“还款期限可以延后一天吗?”为例,对其进行断字处理后得到“还款期限可以延后一天吗?”。
[0111] 若想以分词的方式对句子进行处理,可借助jieba分词工具来处理句子,分词时选择默认模式(精准模式)即可。
[0112] 举例:仍以步骤S101中展示的句子1“还款期限可以延后一天吗?”为例,使用jieba分词工具对其进行分词处理后得到:
[0113] “还款期限可以延后一天吗?”。
[0114] 由于经过断字处理和分词处理后得到的结果在后续各个步骤中的操作是完全一致的,故在后文中不再分别进行说明。
[0115] S2、构建句子匹配模型的训练数据集:对于每一个句子,在句子匹配知识库中都会有一个与之对应的标准句子,此句子可与其组合用来构建训练正例;其他不匹配的句子可自由组合用来构建训练负例;用户可根据句子匹配知识库大小来设定负例的数量,从而构建训练数据集;如附图3所示,具体步骤如下:
[0116] S201、构建训练正例:将句子与其所对应的标准句子进行组合,构建正例,可形式化为:(sentence1,sentence2,1);其中,sentence1表示句子1,sentence2表示句子2,1表示句子1和句子2的语义相匹配,是正例。
[0117] 举例:对步骤S101中展示的句子1和句子2,经过步骤S102断字处理后,构建的正例为:
[0118] (“还款期限可以延后一天吗?”,“是否可以申请延期一天还款?”,1)。
[0119] S202、构建训练负例:选中一个句子s1,再从句子匹配知识库中随机选择一个与句子s1不匹配的句子s2,将s1与s2进行组合,构建负例,形式化为:(sentence1,sentence2,0);其中,sentence1表示句子s1;sentence2表示句子s2;0表示句子s1和句子s2的语义不匹配,是负例;
[0120] 举例:根据步骤S201中的所展示的示例数据,仍然使用原问句作为s1,再从句子匹配知识库中随机选择一个与句子s1语义不匹配的句子s2,将s1与s2进行组合,构建的负例为:
[0121] (“还款期限可以延后一天吗?”,“为什么银行客户端登陆出现网络错误?”,0)。
[0122] S203、构建训练数据集:将经过步骤S201和步骤S202操作后所获得的全部的正例样本句子对和负例样本句子对进行组合,并打乱其顺序,以此构建最终的训练数据集。无论正例数据还是负例数据,它们都包含了三个维度,即sentence1、sentence2、0或1。
[0123] S3、构建句子匹配模型:主要操作为构建字符映射转换表、构建输入层、构建字向量映射层、构建句子的深度分层编码表示层、构建分层特征交互匹配机制、构建预测层。其中,构建字符映射转换表、构建输入层、构建字向量映射层的三个子步骤对应附图9中的嵌入层,构建句子的深度分层编码表示层的子步骤对应附图9中的深度分层编码表示层,构建分层特征交互匹配机制的子步骤对应附图9中的分层特征交互匹配层,构建预测层子步骤对应附图9中的预测层;如附图4所示,具体步骤如下:
[0124] S301、构建字符映射转换表:字符表是通过步骤S102处理后得到的句子匹配知识库来构建的。字符表构建完成后,表中每个字符均被映射为唯一的数字标识,其映射规则为:以数字1为起始,随后按照每个字符被录入字符表的顺序依次递增排序,从而形成所需要的字符映射转换表。
[0125] 举例:以步骤S102断字后的内容,“还款期限可以延后一天吗?”,构建字符表及字符映射转换表如下:
[0126]字符 还 款 期 限 可 以 延 后 一
映射 1 2 3 4 5 6 7 8 9
字符 天 吗 ?
映射 10 11 12
[0127] 其后,本发明再使用Word2Vec训练字向量模型,得到各字符的字向量矩阵embedding_matrix。
[0128] 举例说明:在Keras中,对于上面描述的代码实现如下所示:
[0129]
[0130] 其中,w2v_corpus为训练语料,即句子匹配知识库中的所有数据;embedding_dim为字向量维度,采用不同的embedding_dim所达到的效果是有一定差距的,如附图7所示,在其他参数固定时,分别采用不同的embedding_dim所带来的不同效果;当embedding_dim取400时,Recall、F1‑score、Accuracy均达到了相对最好的结果,而Precision在此时也保持在一个相对较高的水平,故本模型最终设置embedding_dim为400,word_set为词表。
[0131] S302、构建输入层:输入层中包括两个输入,对输入句子sentence1、sentence2,将其形式化为:(sentence1,sentence2)。
[0132] 对于输入句子中的每个字而言,都按照在步骤S301中构建完成的字符映射转换表将其转化为相应的数字标识。
[0133] 举例说明:使用步骤S201中展示的句子对作为样例,以此组成一条输入数据,其结果如下:
[0134] (“还款期限可以延后一天吗?”,“是否可以申请延期一天还款?”)
[0135] 根据词表中的映射将上述的输入数据转换为数值表示(假定出现在句子2中但没有出现在句子1中的字的映射分别为“是”:13,“否”:14,“申”:15,“请”:16,“延”:17),结果如下:
[0136] (“1,2,3,4,5,6,7,8,9,10,11,12”,“13,14,5,6,15,16,17,3,9,10,1,2”)。
[0137] S303、构建字向量映射层:通过加载步骤S301中训练所得的字向量矩阵权重来初始化当前层的权重参数;针对输入句子sentence1和sentence2,得到其相应句子向量sentence1_emd、sentence2_emd。句子匹配知识库中每一个句子都可以通过字向量映射的方式,将句子信息转化为向量形式。
[0138] 举例说明:在Keras中,对于上面描述的代码实现如下所示:
[0139] embedding_layer=Embedding(embedding_matrix.shape[0],emb_dim,weights=[embedding_matrix],input_length=input_dim,trainable=False)。
[0140] 其中,embedding_matrix是步骤S301中训练所得的字向量矩阵权重,embedding_matrix.shape[0]是字向量矩阵的词汇表(词典)的大小,embedding_dim是输出的字向量的维度,input_length是输入序列的长度。
[0141] 相应的句子sentence1和sentence2,经过Embedding层编码后得到相应的句子向量sentence1_emd、sentence2_emd。
[0142] 这一层网络是句子对语义匹配模型的通用网络层,它实现了知识库中每一个字符对应的向量表示。本层对于句子sentence1与sentence2的处理是完全一样的,所以不再分别展开说明。
[0143] S304、构建句子的深度分层编码表示层:提出了一种新的句子编码表示方法,主要体现在句子的深度分层编码表示层中;如附图8所示,该层对一个句子进行处理后,可得到两种不同的语义特征表示,即句子匹配模型中间层输出的中间编码表示特征与输出层输出的最终编码表示特征。相比于现有的一些只能获得最终输出层上特征的方法,此模型可以有效防止句子在经过编码表示层处理时丢失重要的信息,从而捕获更多的语义特征,最终提高句子语义匹配的准确率。该句子表示模型针对经过步骤S303处理后的句子进行编码和语义提取,从而获得句子的中间编码表示特征和最终编码表示特征。此外,根据实践经验,本层的编码维度设置为300时,可获得最优结果;具体步骤如下:
[0144] S30401、句子的中间编码表示特征:使用一个双向长短期记忆网络BiLSTM,对经过字向量映射层处理后的句子进行两次编码处理后,再对两次编码获得的语义特征进行联接操作而得到的,公式如下:
[0145]
[0146]
[0147]
[0148] 其中,i表示相应字向量在句子中的相对位置;pi为句子中每个字符的相应向量表示; 为经过BiLSTM第一次编码后的句子向量; 表示经过BiLSTM第二次编码后的句子向量; 为 向量联接的结果,即该句子的中间编码表示特征;
[0149] S30402、句子的最终编码表示特征:使用一个卷积神经网络CNN对于输出的中间编码表示特征继续进行编码处理,其输出则作为句子的最终编码表示特征,公式如下:
[0150]
[0151] 其中, 为经过CNN编码后的sentence1句子最终编码表示特征。
[0152] S305、构建分层特征交互匹配机制:经过步骤S304处理后分别得到sentence1、sentence2的中间编码表示特征的向量表示 和最终
编码表示特征的向量表示 根据得到的这两类向量
从不同的角度进行匹配,从而生成匹配表征向量;具体如下:
[0153] 计算 公式如下:
[0154]
[0155]
[0156]
[0157] 其中, 表示中间编码表示特征向量 逐元素之间求差取得的绝对值; 表示最终编码表示特征向量
逐元素之间求差取得的绝对值; 表示 与 逐元素求积取得
的值;
[0158] 为了能够捕获句子间的多角度交互信息,除了需要计算上述值,还需要使用另一方式进行同样的操作,计算 公式如下:
[0159]
[0160]
[0161]
[0162] 其中, 分别为对应句子向量的平均向量表示; 表示中间编码表示特征向量
分别与其平均值作差后再进行逐元素之间求差取得的绝对值; 表示最终编码表示特
征向量 分别与其平均值作差后再进行逐元素之间求
差取得的绝对值; 表示 与 逐元素求积取得的值;
[0163] 将计算得出的 和 两个结果进行连接,作为句子对匹配程度的全面表征,公式如下:
[0164]
[0165] 其中, 表示最终生成的匹配表征向量;本发明采用分层特征交互匹配机制能够全面捕获句子对之间的多角度交互匹配特征。
[0166] S306、构建预测层:步骤S305所得到的匹配表征向量 输入预测层,以判断句子对的语义是否匹配;在预测层中,匹配表征向量 经过全连接层处理,再由Sigmoid函数层进行处理;为了防止发生过拟合的情况,在全连接层设置dropout为0.5,sigmoid层对经过dropout处理后的全连接层的输出进行匹配度计算,得到处于[0,1]之间的匹配度表示ypred,最终通过与设立的阈值(0.5)进行比较来判别句子对的语义是否匹配,即ypred>0.5时,判定为语义匹配,ypred<0.5时,判定为语义不匹配。
[0167] S4、训练句子匹配模型:在步骤S2所得的训练数据集上对步骤S3构建的句子匹配模型进行训练,如附图5所示,具体如下:
[0168] S401、构建损失函数:由预测层构建过程可知,ypred是经过分层特征交互匹配机制处理后得到的匹配度计算结果,ytrue是两个句子语义是否匹配的真实标签,其取值仅限于0或1,本模型采用均方误差作为损失函数,公式如下:
[0169]
[0170] S402、优化训练模型:使用RMSprop作为优化算法,除了其学习率设置为0.001外,RMSprop的剩余超参数均选择Keras中的默认值设置;在训练数据集上,对句子匹配模型进行优化训练;
[0171] 举例说明:上面描述的优化函数及其设置在Keras中使用代码表示为:
[0172] optim=keras.optimizers.RMSprop(lr=0.001)。
[0173] 本发明在BQ数据集上取得了优于当前先进模型的结果,实验结果的对比具体见表1:
[0174]
[0175] 在步骤S102中提到本发明对句子的处理可以有两种方式,即断字操作或分词操作。故表中HEMchar模型对应的是对句子进行断字操作处理后得到的模型;HEMword模型对应的是对句子进行分词操作处理后得到的模型。
[0176] 本发明模型和现有模型进行了比较,实验结果显示本发明方法有了很大的提升。其中,前三行是现有技术的模型的实验结果【前三行数据来自:J.Chen,Q.Chen,X.Liu,
H.Yang,D.Lu,B.Tang,The bq corpus:A large‑scale domain‑specific chinese corpus for sentence semantic equivalence identification,EMNLP2018.】,最后两行是本发明的实验结果,由此可知本发明比现有模型有了较大提升。
[0177] 实施例3:
[0178] 如附图6所示,基于实施例2的基于深度分层编码的智能语义匹配装置,该装置包括,
[0179] 句子匹配知识库构建单元,用于使用爬虫程序,在网上公共问答平台爬取问题集,得到原始相似句子知识库,再对原始相似句子知识库进行断字或分词的预处理,从而构建用于模型训练的句子匹配知识库;句子匹配知识库构建单元包括,
[0180] 数据爬取子单元,用于在网上公共问答平台爬取问题集,构建原始相似句子知识库;
[0181] 爬取数据处理子单元,用于将原始相似句子知识库中的句子进行断字处理或分词处理,从而构建用于模型训练的句子匹配知识库;
[0182] 训练数据集生成单元,用于根据句子匹配知识库中的句子来构建训练正例数据和训练负例数据,并且基于正例数据与负例数据来构建最终的训练数据集;训练数据集生成单元包括,
[0183] 训练正例数据构建子单元,用于将句子匹配知识库中语义匹配的句子进行组合,并对其添加匹配标签1,构建为训练正例数据;
[0184] 训练负例数据构建子单元,用于从句子匹配知识库中选取一个句子s1,再从句子匹配知识库中随机选择一个与句子s1语义不匹配的句子s2,将s1与s2进行组合,并对其添加匹配标签0,构建为训练负例数据;
[0185] 训练数据集构建子单元,用于将所有的训练正例数据与训练负例数据组合在一起,并打乱其顺序,从而构建最终的训练数据集;
[0186] 句子匹配模型构建单元,用于通过嵌入层构建字符映射转换表、输入层、及字向量映射层、构建深度分层编码表示层、通过分层特征交互匹配层构建句子分层特征交互匹配机制和构建预测层;句子匹配模型构建单元包括,
[0187] 字符映射转换表构建子单元,用于对句子匹配知识库中的每个句子按字符进行切分,并将每个字符依次存入一个列表中,从而得到一个字符表,随后以数字1为起始,按照每个字符被录入字符表的顺序依次递增排序,从而形成所需要的字符映射转换表;其中,通过构建字符映射转换表,训练数据集中的每个字符均被映射为唯一的数字标识;其后,本发明再使用Word2Vec训练字向量模型,得到各字符的字向量矩阵embedding_matrix;
[0188] 输入层构建子单元,用于对输入句子sentence1与sentence2,将其形式化为:(sentence1、sentence2);
[0189] 字向量映射层构建子单元,用于加载字符映射转换表构建子单元训练所得的字向量矩阵权重来初始化当前层的权重参数;针对输入句子sentence1和sentence2,得到其相应句子向量sentence1_emd、sentence2_emd。句子匹配知识库中每一个句子都可以通过字向量映射的方式,将句子信息转化为向量形式;
[0190] 深度分层编码表示层子单元,用于对输入的数据进行编码和语义提取;其中双向长短期记忆网络对句子进行两次编码操作,再对两次编码获得的语义特征进行联接操作,从而得到句子的中间编码表示特征向量;卷积神经网络对于中间编码表示特征向量继续进行一次编码操作,其输出作为句子的最终编码表示特征向量;
[0191] 分层特征交互匹配机制构建子单元,用于将句子对中的每个句子在不同层上获得的编码表示特征分别进行交互匹配,生成最终的匹配表征向量;
[0192] 预测层子单元,用于对匹配表征向量进行处理,从而得出一个匹配度数值,将其与设立的阈值进行比较,以此判断句子对的语义是否匹配;
[0193] 句子匹配模型训练单元,用于构建模型训练过程中所需要的损失函数,并完成模型的优化训练;句子匹配模型训练单元包括,
[0194] 损失函数构建子单元,用于计算句子1和句子2间语义是否匹配的误差;
[0195] 优化训练模型子单元,用于训练并调整模型训练中的参数,从而减小句子匹配模型训练过程中预测的句子1与句子2间语义匹配程度与真实匹配标签之间的误差;
[0196] 实施例4:
[0197] 基于实施例2的存储介质,其中存储有多条指令,指令有处理器加载,执行实施例2的基于深度分层编码的智能语义匹配方法的步骤。
[0198] 实施例5:
[0199] 基于实施例4的电子设备,电子设备包括:实施例4的存储介质;以及
[0200] 处理器,用于执行实施例4的存储介质中的指令。
[0201] 最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。