发明内容
本发明的技术任务是提供面向智能交互的句子对语义匹配方法和装置,捕获更多的语义特征和句子交互信息,以实现人机交互句子对的智能语义匹配的目的。
本发明的技术任务是按以下方式实现的,面向智能交互的句子对语义匹配方法,该方法是通过构建并训练由多粒度嵌入模块、多级对齐匹配网络模块、特征增强模块和标签预测模块组成的句子对语义匹配模型,实现对句子信息的多级对齐匹配表示,通过一维最大池化和交互生成句子对的匹配张量并判定句子对的匹配度,以达到对句子对进行智能语义匹配的目标;具体如下:
多粒度嵌入模块对输入的句子以字粒度和词粒度分别进行嵌入操作,得到句子的多粒度嵌入表示;
多级对齐匹配网络模块对句子的多粒度嵌入表示进行编码操作,得到句子的多级对齐匹配网络表示;
特征增强模块对句子对的多级对齐匹配网络表示进行进一步地一维最大池化和特征交互操作,得到句子对的匹配向量;
标签预测模块将句子对的匹配张量映射为指定区间上的一个浮点型数值,将其作为匹配度与预设的阈值进行比较,根据比较结果,判定句子对的语义是否匹配。
作为优选,所述多粒度嵌入模块用于构建字词映射转换表、构建输入模块、构建字词向量映射层;
其中,构建字词映射转换表:映射规则为以数字1为起始,随后按照每个字或词被录入字词表的顺序依次递增排序,从而形成本发明所需的字词映射转换表;其中,字词表根据句子对语义匹配断字处理知识库和分词处理知识库来构建,该知识库通过对句子对语义匹配知识库的原始数据文本进行断字预处理和分词预处理操作而得;其后,再使用Word2Vec训练字词向量模型,得到各字词的字词向量矩阵;
构建输入模块:输入层包括四个输入,对于训练数据集中的每一个句子对或待预测的句子对,对其进行断字和分词预处理,分别获取sentence1_char、sentence2_char、sentence1_word和sentence2_word,其中后缀char、word分别表示对相应句子进行断字或分词处理而得,将其形式化为:(sentence1_char,sentence2_char,sentence1_word,sentence2_word);对于输入句子中的每个字和词都按照字词映射转换表转化为相应的数字标识;
构建字词向量映射层:加载构建字词映射转换表步骤中训练所得的字词向量矩阵来初始化当前层的权重参数;针对输入句子sentence1_char、sentence2_char、sentence1_word和sentence2_word得到其相应句子向量sentence1_char_embed、sentence2_char_embed、sentence1_word_embed和sentence2_word_embed;句子对语义匹配知识库中每一个句子都可以通过字词向量映射的方式,将句子信息转化为向量形式。
更优地,所述多级对齐匹配网络模块的构建过程具体如下:
首先构建基本模块,而后构建由基本模块组成的多级对齐匹配网络模块;
构建基本模块:该模块的核心功能是实现基本的对齐匹配操作,是多级对齐匹配网络的基础组件;基本模块先将输入的两个张量进行点积运算得到非规格化的注意力权重矩阵e,公式如下:
eij=ai Tbj,i∈(1,...,la),j∈(1,...,lb) (1)
其中,e表示注意力权利矩阵,eij表示张量1的第i个位置对张量2的第j个位置的注意力权重,a表示张量1,ai表示张量1在第i个位置处的嵌入表示,la表示张量1的长度;b表示张量2,bj表示张量2在第j个位置处的嵌入表示,lb表示张量2的长度;
基本模块对注意力权重矩阵e进行规格化处理并进行对齐操作得到对齐结果,公式如下:
其中,e
ij是张量1的第i个位置对张量2的第j个位置的注意力权重;
是
对a
i的对齐结果,对应对齐结果1;同理,
是
对b
j的对齐结果,对应对齐结果2;a
i,b
j,l
a,l
b与公式(1)中的含义相同,此处不再赘述;
由于对齐结果2由输入的张量1计算所得,所以加强版对齐结果1为输入的张量1与对齐结果2的和,同理,由于对齐结果1由输入的张量2计算所得,所以加强版对齐结果2为输入的张量2与对齐结果1的和,公式如下:
其中,a、b分别表示输入的张量1、张量2所有分量的集合,即公式(1)中的张量1和张量2;
分别表示公式(2)、(3)的对齐结果1、对齐结果2所有分量的集合;
分别表示加强版对齐结果1、加强版对齐结果2所有分量的集合;
由基本模块构建多级对齐匹配网络模块:
多级对齐匹配网络模块的第一层编码结构双向长短期记忆网络BiLSTM1对多粒度嵌入模块输出的字嵌入表示和词嵌入表示分别进行编码操作以得到初步的第一层字编码结果和第一层词编码结果;具体来说,句子1的第一层字编码结果和第一层词编码结果的公式如下:
其中,
和
分别表示句子1在第i个位置处的字嵌入表示和在第j个位置处的词嵌入表示;
和
分别表示句子1在第i个位置处的第一层字编码结果和在第j个位置处的第一层词编码结果;l
a表示在字粒度下句子1的长度,l
b表示在词粒度下句子1的长度;
进一步地,将句子1的第一层字编码结果和第一层词编码结果
和
送入一号基本模块进行第一次对齐匹配操作之句子1的字粒度和词粒度对齐匹配,得到加强版对齐结果集合
和
公式如下:
其中,e
ij表示句子1的字粒度与词粒度的注意力权重,
和
分别表示在字粒度下句子1的第i个位置处的对齐结果和在词粒度下句子1的第j个位置处的对齐结果;进行加强版对齐操作的公式如下:
其中,q1
c表示句子1的第一层字编码结果的集合,由公式(6)中的
组成;q1
w表示句子1的第一层词编码结果的集合,由公式(7)中的
组成;
表示句子1字粒度对齐结果的集合,由公式(9)中的
组成;
表示句子1词粒度对齐结果的集合,由公式(10)中的
组成;
和
分别表示句子1字粒度加强版对齐结果的集合与词粒度加强版对齐结果的集合;
相应地,句子2的第一层字编码结果和第一层词编码结果分别记为
和
将
和
送入二号基本模块进行第一次对齐匹配操作之句子2的字粒度和词粒度对齐匹配得到加强版对齐结果集合
和
与句子1的操作类似,只是更改为与句子2相关的操作,故在此不再赘述;
进一步地,将句子1的字粒度和词粒度加强版对齐结果集合进行concatenate连接操作得到q1concat,将句子2进行类似操作可得q2concat,公式如下:
其中,q1
concat表示将句子1字粒度与词粒度加强版对齐结果连接后的集合,q2
concat表示将句子2字粒度与词粒度加强版对齐结果连接后的集合;
表示公式(11)中的句子1字粒度加强版对齐结果的集合,
表示公式(12)中的句子1词粒度加强版对齐结果的集合;
的含义与
类似,只是更改为与句子2相关的操作,在此不再赘述;
进一步地,将q1concat和q2concat送入三号基本模块进行第二次对齐匹配操作,即进行句子1和句子2的对齐,得到加强版对齐结果集合q1'align2和q2'align2;
进一步地,第二层编码结构BiLSTM2使用双向长短期记忆网络对句子1和句子2第二次对齐操作输出的加强版对齐结果集合q1'align2和q2'align2分别进行编码操作以得到第二层编码结果集合q1bilstm2和q2bilstm2,公式如下:
q1bilstm2=BiLSTM2(q1'align2) (15)
q2bilstm2=BiLSTM2(q2'align2) (16)
进一步地,将上述经过BiLSTM2后的编码结果集合q1bilstm2和q2bilstm2送入四号基本模块进行第三次对齐匹配操作,得到最终的加强版对齐结果集合q1'align3和q2’align3。
更优地,所述特征增强模块的构建过程具体如下:
特征增强模块进一步处理多级对齐匹配网络模块输出的加强版对齐结果q1'align3和q2'align3,对其进行一维最大池化以得到更为显著的特征,记为q1maxpooling和q2maxpooling;将池化结果进行交互,公式如下:
ab=|q1maxpooling-q2maxpooling| (17)
ad=q1maxpooling+q2maxpooling (18)
su=q1maxpooling-q2maxpooling (19)
mu=q1maxpooling·q2maxpooling (20)
其中,ab为绝对值运算的结果;ad为加法运算的结果;su为减法运算的结果;mu为乘法运算的结果;随后,将两个句子的池化结果和交互结果进行concatenate连接得到qconcat,公式如下:
qconcat=concatenate([ab,ad,q1maxpooling,q2maxpooling,su,mu]) (21)
其中,qconcat是句子对语义匹配张量。
更优地,所述标签预测模块构建过程如下:
将句子对语义匹配张量作为输入,标签预测模块包含三层全连接网络;前两层是维度为600、激活函数为relu函数的全连接网络,最后一层是维度为1、激活函数为sigmoid函数的全连接网络;得到一个处于[0,1]之间的匹配度数值,记为ypred,最终通过与设立的阈值0.5进行比较,从而判断句子对间的语义是否匹配;即ypred≥0.5时,预测该句子对的语义是匹配的,否则,不匹配;当句子对语义匹配模型尚未充分训练时,需要在根据语义匹配知识库而构建的训练数据集上进行训练,以优化模型参数;当模型训练完毕时,标签预测模块可预测目标句子对的语义是否匹配。
更优地,所述句子对语义匹配知识库构建具体如下:
下载网络上的数据集获取原始数据:下载网络上已经公开的句子对语义匹配数据集或人工构建数据集,将其作为构建句子对语义匹配知识库的原始数据;
预处理原始数据:预处理用于构建句子对语义匹配知识库的原始数据,对其中的每个句子均进行断字操作、分词操作,得到句子对语义匹配断字处理知识库、分词处理知识库;
汇总子知识库:汇总句子对语义匹配断字处理知识库和句子对语义匹配分词处理知识库,构建句子对语义匹配知识库;
所述句子对语义匹配模型通过使用训练数据集进行训练而得到,训练数据集的构建过程如下:
构建训练正例:将句子对语义匹配知识库中将两个句子语义一致的句子对构建为正例,形式化为:(sentence1_char,sentence2_char,sentence1_word,sentence2_word,1);其中,sentence1_char、sentence2_char分别指代句子对语义匹配断字处理知识库中的句子1、句子2,sentence1_word、sentence2_word分别指代句子对语义匹配分词处理知识库中的句子1、句子2,1表示这两个句子的语义相匹配,是正例;
构建训练负例:选中一个句子s1,再从句子对语义匹配知识库中随机选择一个与句子s1不匹配的句子s2,将s1与s2进行组合,构建负例,形式化为:(sentence1_char,sentence2_char,sentence1_word,sentence2_word,0);其中,sentence1_char、sentence1_word分别指代句子对语义匹配断字处理知识库和句子对语义匹配分词处理知识库中的句子1;sentence2_char、sentence2_word分别指代句子对语义匹配断字处理知识库和句子对语义匹配分词处理知识库中的句子2;0表示句子s1和句子s2的语义不匹配,是负例;
构建训练数据集:将经过构建训练正例和构建训练负例操作后所获得的全部的正例样本句子对和负例样本句子对进行组合,并打乱其顺序,构建最终的训练数据集;无论正例数据还是负例数据均包含了五个维度,即sentence1_char,sentence2_char,sentence1_word,sentence2_word,0或1;
所述句子对语义匹配模型构建完成后通过训练数据集进行句子对语义匹配模型的训练与优化,具体如下:
构建损失函数:由标签预测模块构建过程可知,ypred是经过句子对语义匹配模型处理后得到的匹配度计算数值,ytrue是两个句子语义是否匹配的真实标签,其取值仅限于0或1,采用交叉熵作为损失函数,公式如下:
优化训练模型:使用Adam优化函数;在训练数据集上,对句子对语义匹配模型进行优化训练。
一种面向智能交互的句子对语义匹配装置,该装置包括,
句子对语义匹配知识库构建单元,用于获取大量的句子对数据,随后对其预处理操作,从而得到符合训练要求的句子对语义匹配知识库;
训练数据集生成单元,用于根据句子对语义匹配知识库中的句子来构建用于训练的正例数据和负例数据,并且将正例数据与负例数据打乱混合来构建最终的训练数据集;
句子对语义匹配模型构建单元,用于构建字词映射转换表、输入模块、字词向量映射层、多级对齐匹配网络模块、特征增强模块和标签预测模块;句子对语义匹配模型构建单元包括,
字词映射转换表构建单元,负责对句子对语义匹配知识库中的每个句子按字/词粒度进行切分,并将每个字和词依次存入一个列表中,从而得到一个字词表,随后以数字1为起始,按照每个字和词被录入字词表的顺序依次递增排序,从而获得本发明所需的字词映射转换表;字词映射转换表构建完成后,表中每个字/词均被映射为唯一的数字标识;其后,本发明使用Word2Vec训练字词向量模型,得到各字词的字词向量矩阵;
输入模块构建单元,负责加载字词映射转换表构建单元中的字词映射转换表,把句子对转换成数字标识;
字词向量映射层构建单元,负责加载字词映射转换表构建单元中的字词向量矩阵,把句子对转换成向量形式,即字/词嵌入表示;
多级对齐匹配网络模块构建单元,负责对同一句子的不同粒度进行对齐和两个句子的对齐,具体操作为通过第一层编码结构长短期记忆网络BiLSTM1对句子的字嵌入表示形式和词嵌入表示形式进行处理,将当前层编码结构输出的字编码结果和词编码结果经第一次对齐匹配操作后所得结果以句子为单位进行连接,随后将两句子连接结果进行第二次对齐匹配操作,将此结果送入第二层编码结构长短期记忆网络BiLSTM2,并将编码结果进行第三次对齐匹配操作,得到两句子最终的加强版对齐匹配表示;
特征增强模块构建单元,负责进一步处理相应句子的语义特征,对其进行句子交互等操作以增强语义特征,从而生成最终的句子对语义匹配张量;
标签预测模块单元,负责对句子对语义匹配张量进行处理,从而得出一个匹配度数值,将其与设立的阈值进行比较,以此判断句子对的语义是否匹配;
句子对语义匹配模型训练单元,用于构建模型训练过程中所需要的损失函数与优化函数,并完成模型的优化训练。
作为优选,所述句子对语义匹配知识库构建单元包括,
句子对数据获取单元,负责下载网络上已经公开的句子对语义匹配数据集或人工构建数据集,将其作为构建句子对语义匹配知识库的原始数据;
原始数据断字/分词预处理单元,负责预处理用于构建句子对语义匹配知识库的原始数据,对其中的每个句子均进行断字和分词操作,从而构建句子对语义匹配断字处理知识库和分词处理知识库;
子知识库汇总单元,负责汇总句子对语义匹配断字处理知识库和句子对语义匹配分词处理知识库,从而构建句子对语义匹配知识库;
所述训练数据集生成单元包括,
训练正例数据构建单元,负责将句子对语义匹配知识库中两个语义一致的句子与其匹配标签1构建为训练正例数据;
训练负例数据构建单元,负责选中一个句子,随后随机选择与其语义不匹配的某个句子进行组合,与其匹配标签0一起构建为负例数据;
训练数据集构建单元,负责将所有的训练正例数据与训练负例数据组合在一起,并打乱顺序,从而构建最终的训练数据集;
所述句子对语义匹配模型训练单元包括,
损失函数构建单元,负责计算预测的匹配值与真实匹配值之间的误差;
模型优化单元,负责训练并调整模型训练中的参数,减小预测误差。
一种存储介质,其中存储有多条指令,所述指令有处理器加载,执行上述的面向智能交互的句子对语义匹配方法的步骤。
一种电子设备,所述电子设备包括:
上述的存储介质;以及
处理器,用于执行所述存储介质中的指令。
本发明的面向智能交互的句子对语义匹配方法和装置具有以下优点:
(一)本发明多粒度嵌入处理,可以捕捉和利用句子中不同粒度内容所蕴含的语义信息,使得捕获的语义特征更加丰富、准确;
(二)本发明通过多级对齐匹配网络结构,对同一句子的字粒度和词粒度进行对齐和两个句子之间的对齐,可以得到更准确的相似匹配度;
(三)本发明通过多级对齐匹配网络结构,两个句子之间的交互依赖关系可以被充分捕获,从而可以取得更深层次的语义特征,符合人类进行语义匹配的方式;
(四)本发明通过特征增强模块,可以有效过滤匹配张量中的无效信息、强化有效信息,使得匹配表示张量更加准确,从而提高句子对语义匹配的准确度。
具体实施方式
参照说明书附图和具体实施例对本发明的面向智能交互的句子对语义匹配方法和装置作以下详细地说明。
实施例1:
如附图9所示,本发明的主要框架结构包含多粒度嵌入模块、多级对齐匹配网络模块、特征增强模块和标签预测模块。其中,多粒度嵌入模块对输入的句子分别以字粒度和词粒度进行嵌入操作,并将结果传递给模型的多级对齐匹配网络模块。多级对齐匹配网络模块如图8所示,包含四个结构统一的对齐匹配模块,即基本模块。基本模块的结构如图7所示,基本模块将张量1和张量2作为输入并计算两个张量的注意力得分,然后将输入的张量1与注意力得分相乘进行对齐操作以得到对齐结果2,随后将对齐结果2与输入的张量1相加得到加强版对齐结果1;以此类推张量2的操作可得到加强版对齐结果2。多级对齐匹配网络的结构如图8所示,其核心思想是使用第一层编码结构双向长短期记忆网络BiLSTM1对句子1、句子2的字词嵌入表示分别进行编码,以得到句子1的第一层字词编码结果与句子2的第一层字词编码结果,并将句子1的第一层字词编码结果送入一号基本模块进行第一次对齐匹配操作之句子1的字粒度和词粒度对齐匹配,以得到句子1字粒度与词粒度加强版对齐结果,将该结果进行连接后送入三号基本模块进行第二次对齐匹配操作。相应地,将句子2的第一层字词编码结果送入二号基本模块进行第一次对齐匹配操作之句子2的字粒度和词粒度对齐匹配,以得到句子2字粒度与词粒度加强版对齐结果,将该结果进行连接后送入三号基本模块进行第二次对齐匹配操作。经过三号基本模块的处理可得到句子1的加强版对齐结果和句子2的加强版对齐结果。将句子1的加强版对齐结果、句子2的加强版对齐结果送入第二层编码结构双向长短期记忆网络BiLSTM2进行编码,得到句子1、句子2的第二层编码结果。把句子1的第二层编码结果和句子2的第二层编码结果送入四号基本模块进行第三次对齐匹配操作,得到句子1最终的加强版对齐结果和句子2最终的加强版对齐结果。随着对齐次数的增加,该结构可相应地捕获更深层次的语义特征,句子1、句子2最终的加强版对齐结果将被传递给模型的特征增强模块。如图9所示,特征增强模块对两个句子最终的加强版对齐结果进行一维最大池化和特征交互操作,以充分挖掘句子间的语义信息。其中,特征交互操作是通过两个句子间的相关运算来完成的,随后将池化结果和交互结果进行连接,最终得到句子对的匹配张量,将其传递给模型的标签预测模块。标签预测模块将句子对的匹配张量映射为指定区间上的一个浮点型数值,将其作为匹配度与预设的阈值进行比较,根据比较结果,判定句子对的语义是否匹配。具体如下:
(1)多粒度嵌入模块对输入的句子以字粒度和词粒度分别进行嵌入操作,得到句子的多粒度嵌入表示;
(2)多级对齐匹配网络模块对句子的多粒度嵌入表示进行编码操作,得到句子的多级对齐匹配网络表示;
(3)特征增强模块对句子对的多级对齐匹配网络表示进行进一步地一维最大池化和特征交互操作,得到句子对的匹配向量;
(4)标签预测模块将句子对的匹配张量映射为指定区间上的一个浮点型数值,将其作为匹配度与预设的阈值进行比较,根据比较结果,判定句子对的语义是否匹配。
实施例2:
如附图1所示,本发明的面向智能交互的句子对语义匹配方法,具体步骤如下:
S1、构建句子对语义匹配知识库,如附图2所示,具体步骤如下:
S101、下载网络上的数据集获取原始数据:下载网络上已经公开的句子对语义匹配数据集或人工构建数据集,将其作为构建句子对语义匹配知识库的原始数据。
举例:网络上有许多已公开的句子对语义匹配数据集。本发明收集这些数据,将其下载下来,从而获得用于构建句子对语义匹配知识库的原始数据。比如,LCQMC数据集中的一个示例如下:
句子1 |
一般大家去哪个网站买书。 |
句子2 |
大家买书一般上哪个网站买? |
S102、预处理原始数据:预处理用于构建句子对语义匹配知识库的原始数据,对其中的每个句子均进行断字和分词操作,得到句子对语义匹配断字处理知识库、分词处理知识库。
以S101中展示的句子1为例,对其进行断字处理操作后得到“一般大家去哪个网站买书。”;使用Jieba分词工具对其进行分词操作处理后得到“一般大家去哪个网站买书。”。
S103、汇总子知识库:汇总句子对语义匹配断字处理知识库和句子对语义匹配分词处理知识库,构建句子对语义匹配知识库。
将S102中获得的句子对语义匹配断字处理知识库和句子对语义匹配分词处理知识库整合到同一文件夹下,从而得到句子对语义匹配知识库。其流程如图2所示。
S2、构建句子对语义匹配模型的训练数据集:对于句子对语义匹配知识库中的每一个句子对,若其语义一致,则该句子对可以用于构建训练正例;否则,则该句子对可以用于构建训练负例;将一定数量的正例数据与负例数据进行混合,从而构建训练数据集;如附图3所示,具体步骤如下:
S201、构建训练正例:将句子对语义匹配知识库中将两个句子语义一致的句子对构建为正例,形式化为:(sentence1_char,sentence2_char,sentence1_word,sentence2_word,1);
举例:对步骤S101中展示的句子1和句子2,经过步骤S102断字操作处理和步骤S103分词操作处理后,构建的正例数据形式为:
(“一般大家去哪个网站买书。”,“大家买书一般上哪个网站买?”,“一般大家去哪个网站买书。”,“大家买书一般上哪个网站买?”,1)。
S202、构建训练负例:对于步骤S201所获得的每个正例句子对,选中其包含的某一个句子,随机选择与其不匹配的某个句子进行组合,将这两个语义不一致的句子作为句子对,构建为负例数据,形式化为:(sentence1_char,sentence2_char,sentence1_word,sentence2_word,0);
举例:示例与构建训练正例,非常类似,在此不再赘述。
S203、构建训练数据集:将经过步骤S201和步骤S202操作后所获得的全部的正例句子对数据和负例句子对数据合并在一起,并将顺序打乱,构建最终的训练数据集。无论正例数据还是负例数据,它们都包含了五个维度,即sentence1_char,sentence2_char,sentence1_word,sentence2_word,0或1。
S3、构建句子对语义匹配模型:主要操作为构建字词映射转换表、构建输入模块、构建字词向量映射层、构建多级对齐匹配网络模块、构建特征增强模块、构建标签预测模块。其中,构建字词映射转换表、构建输入模块、构建字词向量映射层对应图9中的多粒度嵌入模块,其余部分均与图9中的各个模块一一对应。具体步骤如下:
S301、构建字词映射转换表:字词表是通过步骤S102处理后得到的句子对语义匹配断字处理知识库和分词处理知识库来构建的。字词表构建完成后,表中每个字或词均被映射为唯一的数字标识,其映射规则为:以数字1为起始,随后按照每个字或词被录入字词表的顺序依次递增排序,从而形成本发明所需的字词映射转换表。
举例:以步骤S102处理后的内容,“一般大家去哪个网站买书。”,“一般大家去哪个网站买书。”构建字词表及字词映射转换表如下:
字词 |
一 |
般 |
大 |
家 |
去 |
哪 |
个 |
网 |
站 |
买 |
书 |
映射 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
字词 |
。 |
一般 |
大家 |
哪个 |
网站 |
|
|
|
|
|
|
映射 |
12 |
13 |
14 |
15 |
16 |
|
|
|
|
|
|
其后,本发明使用Word2Vec训练字向量模型,得到各字的字向量矩阵char_embedding_matrix。
举例说明:在Keras中,对于上面描述的代码实现如下所示:
其中,w2v_corpus为句子对语义匹配知识库中的所有数据;EMB_DIM为向量维度,本模型设置EMB_DIM为300,word_set为字词表。
S302、构建输入层:输入层包括四个输入,从输入层的训练数据集样例中分别获取sentence1_char、sentence2_char、sentence1_word和sentence2_word,将其形式化为:(sentence1_char,sentence2_char,sentence1_word,sentence2_word);
对于输入句子中的每个字和词,本发明都按照在步骤S301中构建完成的字词映射转换表将其转化为相应的数字标识。
举例说明:使用步骤S201中展示的句子对作为样例,以此组成一条输入数据。其结果如下所示:
(“一般大家去哪个网站买书。”,“大家买书一般上哪个网站买?”,“一般大家去哪个网站买书。”,“大家买书一般上哪个网站买?”)
每条输入数据包含4个子句。根据步骤S301中的字词映射转换表,将其转换为数值表示。(假定出现在句子2中但没有出现在句子1中的“上”及“?”分别被映射为17,18)。输入数据的4个子句,合并表示结果如下:
(“1,2,3,4,5,6,7,8,9,10,11,12,13”,“1,2,3,4,5,6,7,10,11,12,8,13”,“1,2,3,4,5,6,7,8,9”,“1,2,3,4,5,7,8,10,9”)。
S303、构建字词向量映射层:通过加载构建步骤S301中训练所得的字词向量矩阵来初始化当前层的权重参数;针对输入句子sentence1_char、sentence2_char、sentence1_word、sentence2_word得到其相应句子向量sentence1_char_embed、sentence2_char_embed、sentence1_word_embed、sentence2_word_embed。句子对语义匹配知识库中每一个句子都可以通过字词向量映射的方式,将句子信息转化为向量形式。
举例说明:在Keras中,对于上面描述的代码实现如下所示:
embedding_layer=Embedding(embedding_matrix.shape[0],emb_dim,weights=[embedding_matrix],input_length=input_dim,trainable=False)
其中,embedding_matrix是步骤3.1中训练所得的字词向量矩阵,embedding_matrix.shape[0]是字词向量矩阵的字词表的大小,emb_dim是输出的字词向量维度,input_length是输入序列的长度。
相应的句子sentence1_char、sentence2_char、sentence1_word、sentence2_word,经过Keras的Embedding层处理后得到相应的句子向量sentence1_char_embed、sentence2_char_embed、sentence1_word_embed、sentence2_word_embed。
S304、构建基本模块:该结构如图7所示,具体步骤如下:
如图7所示,基本模块先将输入的两个张量进行点积运算得到非规格化的注意力权重矩阵e,具体实施见公式(1)。
eij=ai Tbj,i∈(1,...,la),j∈(1,...,lb) (1)
其中,e表示注意力权利矩阵,eij表示张量1的第i个位置对张量2的第j个位置的注意力权重,a表示张量1,ai表示张量1在第i个位置处的嵌入表示,la表示张量1的长度;b表示张量2,bj表示张量2在第j个位置处的嵌入表示,lb表示张量2的长度。点积运算涉及到两个向量夹角的余弦值,由三角函数的基础知识可知:自变量在0~π之间取值时,两向量之间的夹角越小,其对应的余弦值越大,即相应的相似度(匹配度)越高。然后,基本模块对注意力权重矩阵e进行规格化处理并进行对齐操作得到对齐结果,见公式(2)-(3)。
其中,e
ij是张量1的第i个位置对张量2的第j个位置的注意力权重,
是
对a
i的对齐结果,对应图7中的对齐结果1;同理,
是
对b
j的对齐结果,对应图7中的对齐结果2;a
i,b
j,l
a,l
b与公式(1)中的含义相同,此处不再赘述;
由于对齐结果2由输入的张量1计算所得,所以加强版对齐结果1为输入的张量1与对齐结果2的和,具体实施见公式(4);同理,由于对齐结果1由输入的张量2计算所得,所以加强版对齐结果2为输入的张量2与对齐结果1的和,具体实施见公式(5)。
其中,a、b分别表示输入的张量1、张量2所有分量的集合,即公式(1)中的张量1和张量2;
分别表示公式(2)、(3)的对齐结果1、对齐结果2所有分量的集合;
分别表示加强版对齐结果1、加强版对齐结果2所有分量的集合。
以上为基本模块的处理流程介绍,其核心功能是实现基本的对齐匹配操作,是多级对齐匹配网络的基础组件。
举例说明:在Keras中,对于上面描述的代码实现如下所示:
其中,input_1和input_2分别表示输入的张量1和张量2,最后返回的in1_aligned和in2_aligned分别表示加强版对齐结果1和加强版对齐结果2。
S305、由基本模块构建多级对齐匹配网络模块:该结构如图8所示,具体步骤如下:
多级对齐匹配网络模块的第一层编码结构双向长短期记忆网络BiLSTM1对多粒度嵌入模块输出的字嵌入表示和词嵌入表示分别进行编码操作以得到初步的第一层字编码结果和第一层词编码结果。具体来说,句子1的第一层字编码结果和第一层词编码结果见公式(6)-(7)。
其中,
和
分别表示句子1在第i个位置处的字嵌入表示和在第j个位置处的词嵌入表示。
和
分别表示句子1在第i个位置处的第一层字编码结果和在第j个位置处的第一层词编码结果;l
a表示在字粒度下句子1的长度,l
b表示在词粒度下句子1的长度。
将句子1的第一层字编码结果和第一层词编码结果
和
送入一号基本模块进行第一次对齐匹配操作之句子1的字粒度和词粒度对齐匹配,得到加强版对齐结果集合
和
具体实施见下述公式(8)-(12)。
其中,e
ij表示句子1的字粒度与词粒度的注意力权重,
和
分别表示在字粒度下句子1的第i个位置处的对齐结果和在词粒度下句子1的第j个位置处的对齐结果。进一步地,
其中,q1
c表示句子1的第一层字编码结果的集合,由公式(6)中的
组成;q1
w表示句子1的第一层词编码结果的集合,由公式(7)中的
组成;
表示句子1字粒度对齐结果的集合,由公式(9)中的
组成;
表示句子1词粒度对齐结果的集合,由公式(10)中的
组成;
和
分别表示句子1字粒度加强版对齐结果的集合与词粒度加强版对齐结果的集合。
相应地,句子2的第一层字编码结果和第一层词编码结果分别记为
和
将
和
送入二号基本模块进行第一次对齐匹配操作之句子2的字粒度和词粒度对齐匹配得到加强版对齐结果集合
和
与句子1的操作类似,只是更改为与句子2相关的操作,故在此不再赘述。
将句子1的字粒度和词粒度加强版对齐结果集合进行concatenate连接操作得到q1concat,将句子2进行类似操作可得q2concat,具体实施见公式(13)-(14)。
其中,q1
concat表示将句子1字粒度与词粒度加强版对齐结果连接后的集合,q2
concat表示将句子2字粒度与词粒度加强版对齐结果连接后的集合;
表示公式(11)中的句子1字粒度加强版对齐结果的集合,
表示公式(12)中的句子1词粒度加强版对齐结果的集合;
的含义与
类似,只是更改为与句子2相关的操作,在此不再赘述。
将q1concat和q2concat送入三号基本模块进行第二次对齐匹配操作,即进行句子1和句子2的对齐,得到加强版对齐结果集合q1'align2和q2'align2。
举例说明:在Keras中,对于上面描述的代码实现如下所示:
其中,q1_c,q1_w分别表示句子1的字词嵌入表示,q2_c,q2_w分别表示句子2的字词嵌入表示;返回的d1_aligned,d2_aligned分别表示句子1和句子2的加强版对齐结果。
第二层编码结构BiLSTM2使用双向长短期记忆网络对句子1和句子2第二次对齐操作输出的加强版对齐结果集合q1'align2和q2'align2分别进行编码操作以得到第二层编码结果集合q1bilstm2和q2bilstm2。具体实施见公式(15)-(16)。
q1bilstm2=BiLSTM2(q1'align2) (15)
q2bilstm2=BiLSTM2(q2'align2) (16)
将上述经过BiLSTM2后的编码结果集合q1bilstm2和q2bilstm2送入四号基本模块进行第三次对齐匹配操作,得到最终的加强版对齐结果集合q1'align3和q2'align3。
举例说明:在Keras中,对于上面描述的代码实现如下所示:
其中,d1_aligned,d2_aligned分别表示句子1和句子2的加强版对齐结果,返回的f1,f2分别表示句子1和句子2最终的加强版对齐结果。
S306、构建特征增强模块:经过步骤S305处理后分别得到句子1的加强版对齐结果q1'align3,句子2的加强版对齐结果q2'align3,对其进行一维最大池化以得到更为显著的特征,记为q1maxpooling和q2maxpooling。将池化结果进行交互,相应公式见(17)-(20)。
ab=|q1maxpooling-q2maxpooling| (17)
ad=q1maxpooling+q2maxpooling (18)
su=q1maxpooling-q2maxpooling (19)
mu=q1maxpooling·q2maxpooling (20)
其中,ab为绝对值运算的结果;ad为加法运算的结果;su为减法运算的结果;mu为乘法运算的结果。随后,将两个句子的池化结果和交互结果进行concatenate连接得到qconcat,公式见(21)。
qconcat=concatenate([ab,ad,q1maxpooling,q2maxpooling,su,mu]) (21)
举例说明:在Keras中,对于上面描述的代码实现如下所示:
f1=GlobalMaxPooling1D()(f1)
f2=GlobalMaxPooling1D()(f2)
ab=Lambda(lambda x:K.abs(x[0]–x[1]))([f1,f2])
ad=Lambda(lambda x:(x[0]+x[1]))([f1,f2])
su=Lambda(lambda x:(x[0]–x[1]))(f1,f2)
mu=Lambda(lambda x:(x[0]*x[1]))(f1,f2)
ff=concatenate([ab,mu,f1,f2,ad,su])
其中,f1和f2代表对步骤S305中第三次加强版对齐结果进行一维最大池化后的结果,ff表示池化结果与交互结果的连接结果,即句子对语义匹配张量。
S307、构建标签预测模块:将步骤S306得到的句子对语义匹配张量作为输入,以此判断句子对的语义是否匹配。标签预测模块是一个多层感知机,句子对语义匹配张量依次经过三层全连接网络。其中,前两层是维度为600、激活函数为relu函数的全连接网络,最后一层是维度为1、激活函数为sigmoid函数的全连接网络;得到一个处于[0,1]之间的匹配度数值,记为ypred,最终通过与设立的阈值0.5进行比较,从而判断句子对的语义是否匹配;即ypred≥0.5时,预测该句子对的语义是匹配的,否则,不匹配。
举例说明:在Keras中,对于上面描述的代码实现如下所示:
similarity=Dropout(0.5)(ff)
similarity=Dense(600,activation=’relu’)(similarity)
similarity=Dropout(0.5)(similarity)
similarity=Dense(600,activation=’relu’)(similarity)
similarity=Dropout(0.5)(similarity)
pred=Dense(1,activation=’sigmoid’)(similarity)
其中,ff为步骤S306中所得的最终的句子对语义匹配张量。
当本发明所提出的基于多级对齐匹配网络的句子对语义匹配模型尚未进行训练时,需要进一步执行步骤S4进行训练,以优化模型参数;当该模型训练完毕时,由步骤S307可预测目标句子对的语义是否匹配。
S4、训练句子对语义匹配模型:在步骤S2所得的训练数据集上对步骤S3构建的句子对语义匹配模型进行训练,如附图5所示,具体如下:
S401、构建损失函数:由步骤S307可知ypred为经过句子对语义匹配模型处理后得到的匹配度数值;而ytrue是两个句子语义是否匹配的真实标签,其取值仅限于0或1,采用交叉熵作为损失函数,公式如下:
S402、优化训练模型:使用Adam优化函数作为本模型的优化函数,在训练数据集上,对句子对语义匹配模型进行优化训练;
本发明所提出的模型在LCQMC数据集上取得了优于当前先进模型的结果,实验结果的对比具体见下表。
本发明模型和现有模型进行了比较,实验结果显示本发明方法有了很大的提升。其中,前三行是现有技术的模型的实验结果【Xin Liu,Qingcai Chen,Chong Deng,HuajunZeng,Jing Chen,Dongfang Li,and Buzhou Tang.LCQMC:A large-scale chinesequestion matching corpus,COLING2018】,最后一行是本发明模型的实验结果,由此可知本发明比现有模型有了较大提升。
实施例3:
如附图6所示,基于实施例2的面向智能交互的句子对语义匹配装置,该装置包括,
句子对语义匹配知识库构建单元,用于获取大量的句子对数据,随后对其预处理操作,从而得到符合训练要求的句子对语义匹配知识库;句子对语义匹配知识库构建单元包括,
句子对数据获取单元,负责下载网络上已经公开的句子对语义匹配数据集或人工构建数据集,将其作为构建句子对语义匹配知识库的原始数据;
原始数据断字/分词预处理单元,负责预处理用于构建句子对语义匹配知识库的原始数据,对其中的每个句子均进行断字和分词操作,从而构建句子对语义匹配断字处理知识库和分词处理知识库;
子知识库汇总单元,负责汇总句子对语义匹配断字处理知识库和句子对语义匹配分词处理知识库,从而构建句子对语义匹配知识库;
训练数据集生成单元,用于根据句子对语义匹配知识库中的句子来构建用于训练的正例数据和负例数据,并且将正例数据与负例数据打乱混合来构建最终的训练数据集;训练数据集生成单元包括,
训练正例数据构建单元,负责将句子对语义匹配知识库中两个语义一致的句子与其匹配标签1构建为训练正例数据;
训练负例数据构建单元,负责选中一个句子,随后随机选择与其语义不匹配的某个句子进行组合,与其匹配标签0一起构建为负例数据;
训练数据集构建单元,负责将所有的训练正例数据与训练负例数据组合在一起,并打乱顺序,从而构建最终的训练数据集;
句子对语义匹配模型构建单元,用于构建字词映射转换表、输入模块、字词向量映射层、多级对齐匹配网络模块、特征增强模块和标签预测模块;句子对语义匹配模型构建单元包括,
字词映射转换表构建单元,负责对句子对语义匹配知识库中的每个句子按字/词粒度进行切分,并将每个字和词依次存入一个列表中,从而得到一个字词表,随后以数字1为起始,按照每个字和词被录入字词表的顺序依次递增排序,从而获得本发明所需的字词映射转换表;字词映射转换表构建完成后,表中每个字/词均被映射为唯一的数字标识;其后,本发明使用Word2Vec训练字词向量模型,得到各字词的字词向量矩阵;
输入模块构建单元,负责加载字词映射转换表构建单元中的字词映射转换表,把句子对转换成数字标识;
字词向量映射层构建单元,负责加载字词映射转换表构建单元中的字词向量矩阵,把句子对转换成向量形式,即字/词嵌入表示;
多级对齐匹配网络模块构建单元,负责对同一句子的不同粒度进行对齐和两个句子的对齐,具体操作为通过第一层编码结构长短期记忆网络BiLSTM1对句子的字嵌入表示形式和词嵌入表示形式进行处理,将当前层编码结构输出的字编码结果和词编码结果经第一次对齐匹配操作后所得结果以句子为单位进行连接,随后将两句子连接结果进行第二次对齐匹配操作,将此结果送入第二层编码结构长短期记忆网络BiLSTM2,并将编码结果进行第三次对齐匹配操作,得到两句子最终的加强版对齐匹配表示;
特征增强模块构建单元,负责进一步处理相应句子的语义特征,对其进行句子交互等操作以增强语义特征,从而生成最终的句子对语义匹配张量;
标签预测模块单元,负责对句子对语义匹配张量进行处理,从而得出一个匹配度数值,将其与设立的阈值进行比较,以此判断句子对的语义是否匹配;
句子对语义匹配模型训练单元,用于构建模型训练过程中所需要的损失函数与优化函数,并完成模型的优化训练;句子对语义匹配模型训练单元包括,
损失函数构建单元,负责计算预测的匹配值与真实匹配值之间的误差;
模型优化单元,负责训练并调整模型训练中的参数,减小预测误差。
实施例4:
基于实施例2的存储介质,其中存储有多条指令,指令有处理器加载,执行实施例2的面向智能交互的句子对语义匹配方法的步骤。
实施例5:
基于实施例4的电子设备,电子设备包括:实施例4的存储介质;以及
处理器,用于执行实施例4的存储介质中的指令。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。