发明内容
本申请的目的是提供一种融合双重分词和迭代反馈的自动应答方法,对输出语句中含有UNK字符进行处理,提高应答系统的输出效果。
为了实现上述目的,本申请技术方案如下:
一种融合双重分词和迭代反馈的自动应答方法,包括:
获取提问语句及其对应的应答语句作为语料库S,对每组提问语句及其对应的应答语句进行中文分词得到分词后的语料库,将分词结果分别存入提问语句词典和应答语句词典并训练得到所有词的词向量,利用提问语句词典和应答语句词典对分词后的语料库进行序列化操作得到序列化后的语料库,将序列化后的语料库划分为第一训练集和第二训练集;
采用第一训练集对构建的应答模型进行训练,训练得到应答模型;
将第二训练集中的提问语句逐条输入到已经训练好的应答模型中,并且当应答模型的输出中包含未知符号时,对于每一个未知符号,进行如下处理:
确定与未知符号对应的提问语句集合中的词语t,将所确定的词语t和应答语句词典中所有词语的词向量进行聚类,将与词语t同簇的全部词语存入到第一候选集;
当第一候选集中词语数量少于候选阈值时,对词语t进行断字操作,同时对语料库S也进行断字操作,构建出提问语句字典和应答语句字典,将词语t断字后的所有字在提问语句字典中的序号输入到训练好的应答模型中,预测出词语t中每个字对应的字符输出,从每个字对应的字符输出中选择一个字符进行排列组合连接成词语,选取其中预设数值的词语组成第二候选集;
合并第一候选集和第二候选集,组成第三候选集,对第三候选集中的所有词语根据其与词语t的语义关联度进行打分,将分值大于支持度阈值的词语放入第四候选集。
将第四候选集中的词语放入应答语句词典中,将添加第四候选集后的应答语句词典作为下一个未知符号处理时的应答语句词典,遍历第二训练集,完成对应答模型的更新;
采用更新后应答模型,对输入的提问语句进行自动应答。
进一步的,所述将与词语t同簇的全部词语存入到第一候选集,还包括:
当词语t同簇的词语少于设定的同簇数量阈值时,计算每一个词语t的簇外词语与词语t的欧式距离,将距离小于距离阈值的词语加入到词语t所在的簇内。
进一步的,所述预测出词语t中每个字对应的字符输出,包括:
取预测概率由大到小前预设数量的字符作为字符输出。
进一步的,所述应答模型包括编码器和解码器,所述采用第一训练集对构建的应答模型进行训练,训练得到应答模型,包括:
将序列化后的第一训练提问语句集合中的每一条提问语句对应的词向量输入到编码器中,分别得到每一条提问语句对应的全部隐藏状态的一个有序集合,然后进入到解码器循环阶段;
在解码器的每一次循环中,都为所述有序集合中的所有隐藏状态重新分配权重,然后对全部隐藏状态加权求和得到对应的上下文向量,将上下文向量和上一次解码器的输出向量再次输入到解码器中进行循环;
在循环达到终止条件后,提取解码器输出的全部输出向量,将其和语料库中真实的应答语句利用交叉熵损失函数进行计算;
采用梯度下降法来确定应答模型中全部的隐藏状态和上下文向量的权重,实现对应答模型的参数优化,完成应答模型训练。
进一步的,所述终止条件为每一个隐藏状态的权重都曾获得过一个大于或等于权重阈值的取值。
进一步的,所述融合双重分词和迭代反馈的自动应答方法,还包括:
将同一个词语t对应的所有第四候选集构建成第五候选集,对于第二训练集中生成所有未知符号的词语,将生成的所有第五候选集进行合并生成候选共现集,并在候选共现集的基础上进行扩充得到扩充集合,所述扩充集合中每个元素包括词语t及其对应的第五候选集。
进一步的,所述采用更新后应答模型,对输入的提问语句进行自动应答,包括:
将提问语句输入到更新后的应答模型,若输出结果仍然包含未知符号,则先确定其对应的提问语句中生成该未知符号的词语q;
在扩充集合中查找与词语q相关的第五候选集,如果存在相关的第五候选集,则执行如下步骤:
构建词语q对应的待检索集合,其中,当词语q与扩充集合中的词语t相同时,将词语t对应的第五候选集加入到待检索集合中;当词语q与词语t不相同,但词语q存在于词语t的第五候选集中,则将词语t放入待检索集合中;
计算待检索集合中每个词语与词语q的关联度,选择关联度最大的词语作为词语q对应的字符输出;
在扩充集合中查找与词语q相关的第五候选集,如果不存在相关的第五候选集,则执行如下步骤:
将词语q拆分成一个一个的字,然后将这些字都输入到更新后的应答模型中,在解码器的每一次循环中,输出应答语句字典中概率值最大的字作为该次循环的输出,并将其输入到下一次循环中,当解码器的循环次数与输入词语q的字数相同时,循环终止;
将历次循环的输出的字依次进行拼接,得到词语q对应的字符输出。
本申请还提出了一种融合双重分词和迭代反馈的自动应答装置,包括处理器以及存储有若干计算机指令的存储器,其特征在于,所述计算机指令被处理器执行时实现融合双重分词和迭代反馈的自动应答方法的步骤。
本申请提出的一种融合双重分词和迭代反馈的自动应答方法,除了使用第一重传统的中文分词保留词语之间的对应关系,还使用了第二重断字分词从字与字之间的对应角度预测出目标词语的非UNK字符输出。使用聚类算法从词向量角度找到与目标词语语义最接近的词语作为非UNK字符输出。将两种方法得到的全部非UNK字符输出共同组合成一个候选词集,通过对候选词集中词语进行投票从而找到最适合目标词语的非UNK字符输出。本申请技术方案提高了应答系统的输出效果。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅用以解释本申请,并不用于限定本申请。
本申请以中文自动应答方法作为研究对象,因此本申请后续仅讨论将文字序列切分成一个一个单独字的情况,而不再讨论将序列切分成一个一个单独字母的情况。
在一个实施例中,如图1所示,提供了一种融合双重分词和迭代反馈的自动应答方法,包括:
步骤S110、获取提问语句及其对应的应答语句作为语料库,进行预处理得到第一训练集和第二训练集。
具体的,获取提问语句及其对应的应答语句作为语料库S,对每组提问语句及其对应的应答语句进行中文分词得到分词后的语料库S′,将分词结果分别存入提问语句词典W
1和应答语句词典W
2并训练得到所有词的词向量,利用提问语句词典W
1和应答语句词典W
2对分词后的语料库S′进行序列化操作得到序列化后的语料库S
d,将序列化后的语料库S
d划分为训练集D和测试集T,再将训练集D细分为第一训练集D
1和第二训练集D
2。无论是训练集D还是测试集T,其中每一条样本都包括提问语句和应答语句,两者一一对应。其中序列化后的提问语句集合包括第一训练提问语句集合
第二训练提问语句集合
和测试提问语句集合
序列化后的应答语句集合包括第一训练应答语句集合
第二训练应答语句集合
和测试应答语句集合
本实施例以中国传统文化的对联为例进行说明,选择自动生成下联作为本申请应答模型的实施例。本实施例获取对联上句及其对应的对联下句作为语料库S,将对联上句作为提问语句,将对联下句作为应答语句。语料库S中共包括10万副对联,其内容来自百度、对联大全等网站,包括经典对联、新年对联、搞笑对联、名胜古迹对联等多种类型。
然后对语料库S进行预处理,去除其中的停用词、标点符号及乱码、对联上下句的拆分、横批的剔除。
利用jieba分词对语料库S中的每组上联语句和下联语句进行中文分词(分词后的语料库为S′)。本申请中共包含两重分词,本步骤进行的是第一重分词,即传统的中文分词。
分词后的语料库S′如下表所示:
表1
其中,分词后的上联语料库为S′upper,分词后的下联语料库为S′lower。
接下来,统计S′upper和S′lower中分词结果的词频,本申请设定词频的阈值mw为3。将S′upper中词频大于或等于mw的词语存入到上联词典W1,将S′lower中词频大于或等于mw的词语存入到下联词典W2,如下表所示:
表2
词典W1和W2的前2个元素的含义分别为:
表3
接下来,根据词语在上联词典W1和下联词典W2中的序号,对语料库S′进行序列化操作(序列化后的语料库为Sd)。结果如下表所示:
表4
将Sd划分为训练集D和测试集T,再将训练集D细分为第一训练集D1和第二训练集D2。本实施例D1、D2、T三者所包含语句数量的比例为7:2:1。
特别地,集合D
1、D
2、T都由两部分组成:序列化后的上联语句集合(分别为:
)和下联语句集合(分别为:
)。上联语句集合和下联语句集合都是有序的,
和
和
和
中的上下联语句都是一一对应的,下面以
和
为例进行说明:
表5
最后,利用word2vec训练得到W
1和W
2中所有词的词向量,分别存入词向量矩阵
和
步骤S120、采用第一训练集对构建的应答模型进行训练,训练得到应答模型。
具体的,所述应答模型包括编码器和解码器,采用第一训练集对构建的应答模型进行训练,训练得到应答模型,包括:
将序列化后的第一训练提问语句集合中的每一条提问语句对应的词向量输入到编码器中,分别得到每一条提问语句对应的全部隐藏状态的一个有序集合,然后进入到解码器循环阶段;
在解码器的每一次循环中,都为所述有序集合中的所有隐藏状态重新分配权重,然后对全部隐藏状态加权求和得到对应的上下文向量,将上下文向量和上一次解码器的输出向量再次输入到解码器中进行循环;
在循环达到终止条件后,提取解码器输出的全部输出向量,将其和语料库中真实的应答语句利用交叉熵损失函数进行计算;
采用梯度下降法来确定应答模型中全部的隐藏状态和上下文向量的权重,实现对应答模型的参数优化,完成应答模型训练。
本实施例采用第一训练集D1对构建的应答模型进行训练,所述应答模型包括编码器和解码器,所述编码器包括g个GRU单元,所述解码器包括1个GRU单元。
将序列化后的第一训练提问语句集合
中的每一条提问语句a
i对应的词向量输入到编码器的g个GRU单元中,分别得到其所对应的全部隐藏状态的一个有序集合H
i,然后进入到解码器的GRU单元循环阶段,有序集合H
i的最后一个向量输入到解码器中,在每一次循环中都为有序集合H
i中的所有隐藏状态重新分配权重,然后对全部隐藏状态加权求和得到第一训练提问语句集合
中第i条提问语句所对应于第j+1次循环的上下文向量
将上下文向量
和上一次循环解码器的输出
输入到解码器GRU单元中,得到一个新的预测值
在循环达到终止条件后,提取得到的全部输出向量
将其和语料库中真实的下联语句利用交叉熵损失函数进行计算,通过对
中的每一条上联语句a
i进行多次损失函数的计算,并采用梯度下降法来确定应答模型中全部的隐藏状态和上下文向量的权重,从而实现了对应答模型的参数优化,完成应答模型训练。
本实施例应答模型(GAbS模型,GRU+Attention based Seq2seq model)包括编码器和解码器,其中编码器由g个GRU单元连接而成,g的数值为语料库S中最长语句中分词的个数。解码器由1个GRU单元构成。编码器中GRU单元的数量可以根据网络的复杂度进行设定,本申请不限于具体的GRU单元的数量。
进入编码器之前,需要对待输入上联语句中分词的个数进行调整:当上联语句中分词的个数大于g时,删除从g+1个分词到语句末尾的所有词语;当上联语句中分词的个数小于g时,用填充符(pad符号)从上联语句的末尾进行填充直到填满为止。
长度调整完毕后,将序列化后的上联语句集合
中的每一条语句a
i(
为序列化后的上联语句集合
中的语句总数)对应的词向量输入到编码器的g个GRU单元中,分别得到其所对应的全部隐藏状态的一个有序集合
解码器由1个GRU单元构成,其功能通过这个唯一的GRU单元v次循环来实现。每次循环包括以下两个步骤:
1)、本实施例利用Minh-Thang Luong等人提出的LuongAttention方法,在每一次循环中都为
中的所有隐藏状态重新分配权重
(0≤j≤v-1),然后对全部隐藏状态加权求和得到
中第i条上联语句所对应于第j+1次循环的上下文向量
(
0≤j≤v-1,v为GRU单元循环的总次数,
为对应于第1次循环的上下文向量)。
以上联语句“万/户/春风/陶/礼/乐”为例(其对应的下联语句为“百年/事业/绍/箕/裘”),解码器GRU单元的第1次循环计算得到的Hi中各隐藏状态的权重如下表所示:
表6
隐藏状态
和
的权重约为0.5,其他隐藏状态的权重近似为0,第1次循环得到的上下文向量
重复上述过程,可以得到后面几次循环中所对应的上下文向量
2)、接下来,将上下文向量
和上一次循环的输出
输入到解码器GRU单元中,利用softmax函数计算得到概率最大的一个新的预测值
其中
0≤j≤v-1,由于在第1次循环中不存在前一次循环的输出,因此本方法利用一个初始化的零向量作为
需要说明的是,应答模型的输入分为两种情况:(1)仅仅输入一个词语或字,则解码器的GRU单元只执行一次,输出为应答词典中概率最大的那个词语或字。(2)输入为一条提问语句,根据中文分词的结果,解码器中的GRU单元需要循环多次,每一次都输出应答词典中概率最大的那个词语或字,最终多次循环输出的结果连接起来作为整个应答模型的输出。
重复步骤1)和2),直到满足循环的终止条件。本实施例设定的GRU单元v次循环的终止条件为:
中的每一个隐藏状态的权重
(
1≤l≤g,0≤j≤v-1)都曾获得过一个大于或等于0.2的取值。
在v次循环结束后,提取得到的全部输出向量
将其和语料库中真实的下联语句利用交叉熵损失函数进行计算,即:
其中,为
为下联词典W2中全部词语的总数量,p
ic为表示softmax函数计算得到的
个类别中各类别发生的概率。通过对
中的每一条上联语句a
i进行多次损失函数的计算,并采用梯度下降法来确定应答模型中全部的隐藏状态和上下文向量的权重,从而实现了对应答模型的参数优化。
本申请利用softmax函数计算得到概率最大的一个新的预测值、利用交叉熵损失函数、采用梯度下降法来确定应答模型中全部的隐藏状态和上下文向量的权重,从而实现了对应答模型的参数优化,都是机器学习模型训练中比较成熟的技术,这里不再赘述。
步骤S130、将第二训练集中的提问语句逐条输入到已经训练好的应答模型中,当应答模型的输出中包含未知符号时,对未知符号进行处理确定出对应的候选词集,将候选词集并入应答语句词典,遍历第二训练集更新应答模型。
本实施例将第二训练集中的提问语句逐条输入到已经训练好的应答模型中,并且当应答模型的输出中包含未知符号时,对于每一个未知符号,进行如下处理:
确定与未知符号对应的提问语句集合中的词语t,将所确定的词语t和应答语句词典中所有词语的词向量进行聚类,将与词语t同簇的全部词语存入到第一候选集;
当第一候选集中词语数量少于候选阈值时,对词语t进行断字操作,同时对语料库S也进行断字操作,构建出提问语句字典B1和应答语句字典B2,将词语t断字后的所有字在提问语句字典B1中的序号输入到训练好的应答模型中,预测出词语t中每个字对应的字符输出,从每个字对应的字符输出中选择一个字符进行排列组合连接成词语,选取其中预设数值的词语组成第二候选集;
合并第一候选集和第二候选集,组成第三候选集,对第三候选集中的所有词语根据其与词语t的语义关联度进行打分,将分值大于支持度阈值的词语放入第四候选集。
将第四候选集中的词语放入应答语句词典W2中,将添加第四候选集后的应答语句词典W2作为下一个未知符号处理时的应答语句词典W2,遍历第二训练集D2,完成对应答模型的更新。
如图2所示,本实施例将序列化后的
中的上联语句逐条输入到已经训练好的应答模型中,应答模型的输出包括两种情况:(1)若输出的下联语句中不包含UNK字符,则直接作为有效结果输出;(2)若输出的下联语句包含UNK字符,则进行如下处理:
对于每一个生成的UNK字符uj(1≤j≤N,N为训练集D2中产生的UNK字符的总数量),确定其对应的上联语句中生成uj的词语ti(1≤i≤M≤N,M为训练集D2中全部上联语句所生成的UNK字符的总数量)。
在本实施例中,对于生成的第一个UNK字符u
1,确定其对应的上联语句中生成u
1的词语为第一个t
i—“金樽”,即t
1=“金樽”。从词向量矩阵
和
中读取出“金樽”和下联语句词典W
2中全部词语的词向量,具体如下表所示:
表7
然后,对表7中的所有的词向量进行k-means聚类,结果如下所示:
表8
当ti所在簇的簇内词语总数少于10个时(10为预设的同簇数量阈值,该阈值大小可以根据实际应用进行设置),计算每一个ti的簇外词语和ti的欧式距离,将距离小于距离阈值md的词语加入到ti所在的簇内;当ti所在簇的簇内词语总数多于或等于10个时,则跳过欧式距离的计算步骤。本实施例中,阈值md的值设定为0.1。
在本实施例中,“金樽”所在簇的簇内词语总数少于10个(仅包含“金樽”、“玉盘”、“月斟”3个词语),因此,利用如下公式计算“金樽”的簇外词语(长笛、高歌、对酒、玉漏、落木、高唱、酒肠、清宴...)与“金樽”的欧式距离:
计算结果如下表所示:
簇外词 |
长笛 |
对酒 |
高歌 |
玉漏 |
落木 |
高唱 |
酒肠 |
清宴 |
.. |
距离值 |
0.053 |
0.078 |
0.093 |
0.136 |
0.156 |
0.158 |
0.183 |
0.207 |
.. |
表8
距离小于阈值m
d=0.1的词语有:长笛、对酒、高歌,把这三个词语加入到“金樽”所在的簇,最后,将与“金樽”同簇的全部词语(包括:玉盘、月斟、长笛、对酒、高歌)存入到聚类候选集
(第一候选集),即:
将与词语t
i同簇的全部词语存入到聚类候选集
当
中的词语数量多于10个(候选阈值,该阈值大小可以根据实际应用进行设置)时,则直接将第一候选集作为第三候选集。否则当聚类候选集
中的词语数量少于10个时,则对t
i进行断字操作,即将词语t
i拆分成一个一个单独的字x
ik(1≤k≤E,E为t
i中字的个数),t
i就可以表示成如下一个集合:X
i={x
i1,x
i2...x
iE}。从而实现了双重分词方法中的第二重分词。
为了输入到应答模型中进行训练,对语料库S也需要进行断字操作(断字后的语料库为S″)。过滤掉所有频率小于阈值mc的字,构建出提问语句字典B1和应答语句字典B2,本实施例设定词频的阈值mc为5。
完成上述步骤后,就可以将ti断字后生成的所有xik在上联语句字典B1中的序号输入到训练好的应答模型中,从而预测出ti对应的非UNK字符输出。
针对每一个x
ik,利用softmax函数计算应答语句字典B
2中所有字的概率值,得到概率值最大的十个字
(1≤q≤10)(10为预设的阈值,该阈值大小可以根据实际应用进行设置),每个
对应的概率为
(1≤k≤E,1≤q≤10)。针对生成UNK字符u
j的词语t
i,经过本步骤共输出E×10个字。对于集合X
i={x
i1,x
i2...x
iE}中的每一个字x
ik,通过应答模型都会生成一个集合包含概率最大的十个字
对于每一个t
i,共生成E个
从每一个
中分别选取一个
的概率值
进行排列组合,共得到
种不同的组合结果,将每种组合中的
所对应的概率值
相乘,将结果最大的前10组(预设数值,可以根据实际应用进行设置)组合所对应的字在各自组合内连接成词语,然后将上述词语存入到断字候选集
(第二候选集)。
由于聚类候选集
中的词语数量少于10个,因此需要寻找第二候选集。进行第二重分词—断字操作,即将词语“金樽”拆分成2个单独的字x
1k(1≤k≤2),“金樽”就可以表示成如下一个集合:X
1={“金”,“樽”}。从而实现了双重分词方法中的第二重分词。
为了输入到应答模型中进行训练,对语料库S也需要进行断字操作(断字后的语料库为S″)。断字后的上联语料库为S〞upper,断字后的下联语料库为S〞lower。然后统计S〞upper和S″lower中所有字的字频,将S″upper中字频大于或等于mc的字存入到上联语句字典B1,将S″lower中字频大于或等于mc的字存入到下联语句字典B2。本发明设定字频的阈值mc为5。上联字典B1和下联字典B2如下表所示:
表9
完成上述步骤后,就可以将“金樽”断字后生成的所有x1k在上联语句字典B1中的序号输入到训练好的应答模型中,如下所示:
表10
输入到应答模型后,针对集合X
1={“金”、”樽”}中的每一个字x
1k,利用softmax函数计算下联语句字典B
2中所有字的概率值,得到概率值最大的十个字
(1≤q≤10),并构建出每一个x
1k所对应的集合,即:
经过上述步骤共输出2×10个字,每一个字对应的概率为
(1≤k≤2,1≤q≤10)。每次从
和
中各自选取一个
将它们对应的概率值
进行排列组合,共得到
种不同的组合结果,将每种组合中的
所对应的概率值
相乘,将结果最大的前10组组合所对应的字在各自组合内连接成词语,具体结果如下表所示:
本实施例将集合
和
合并为集合
(
是同一个t
i生成UNK字符的数量)(第三候选集)。选取若干个投票人,针对
中的每个词语p
w(
为U
j中的词语总数),根据和目标词语t
i的语义关联度,每位投票人对全部的p
w进行投票,语义相关则投1;语义不相关则投0,每位投票人都至少投出一个1。
然后,利用上述投票结果,计算各个p
w的支持度,将支持度大于阈值(支持度阈值)m
s的词语存入到候选词集
(第四候选集),如果
中所有词语的支持度都小于m
s,则将投票结果中票数最多的词语加入到候选词集
(如果票数最多的词语多于1个,则将这些词语都加入到
中)。本实施例中,阈值m
s的值设定为0.3。
接下来,利用
扩展应答模型的应答语句词典W
2,将W
2词典中不存在的但却出现在
中的词语添加到词典W
2中,从而实现了对GAbS模型的更新。
在本实施例中,将集合
和
合并为集合U
“金樽”1,即:
U“金樽”1={玉盘、月斟、长笛、对酒、高歌、玉弦、玉简、玉勒、月落、明月、铁盘、竹杖、李趣、王谢、蒋径}
选取8个投票人,针对U“金樽”1中的每个词语pw(1≤w≤15),根据和目标词语“金樽”的词语意境关联度,每位投票人对全部的pw进行投票,意境相关则投1;意境不相关则投0,每位投票人都至少投出一个1。
本实施例的投票结果如下所示(标记下划线的词语来源于
集合,其余的词语来源于
集合):
投票人序号 |
<u>玉盘</u> |
<u>月斟</u> |
<u>长笛</u> |
<u>对酒</u> |
<u>高歌</u> |
蒋径 |
王谢 |
李趣 |
月落 |
玉简 |
铁盘 |
玉弦 |
明月 |
玉勒 |
竹杖 |
1 |
1 |
|
|
1 |
1 |
|
|
|
|
|
|
1 |
|
1 |
|
2 |
|
|
1 |
1 |
1 |
|
|
|
1 |
1 |
|
|
|
|
|
3 |
1 |
|
|
1 |
|
|
|
|
|
1 |
|
1 |
|
|
1 |
4 |
|
1 |
|
|
|
|
|
|
1 |
|
|
|
|
|
|
5 |
1 |
|
1 |
|
|
|
|
|
|
|
1 |
|
|
|
1 |
6 |
|
|
|
1 |
1 |
|
|
|
|
|
|
|
|
1 |
|
7 |
1 |
|
|
1 |
|
|
|
|
1 |
1 |
|
|
1 |
|
|
8 |
1 |
|
1 |
|
|
|
|
|
1 |
|
|
1 |
|
|
|
表12
然后,利用上述投票结果,计算U“金樽”1中各个pw的支持度,结果如下所示:
表13
将支持度大于阈值ms=0.3的词语存入到候选词集U'“金樽”1,即表13中标记加粗的词语:
U'“金樽”1={玉盘,对酒,高歌,月落,玉简,玉弦}
接下来,利用U'“金樽”1扩展应答模型的下联语句词典W2。在本实施例中,词语“月落”、“玉简”和“玉弦”出现在U'“金樽”1中,却未出现在W2词典中,故将这3个词语添加到词典W2中,从而实现了对应答模型的更新。更新后的词典效果如下(标记加粗的是新加入W2词典的词语):
表14
需要注意的是,训练集D
2中的每一个t
i都会执行上述步骤来解决UNK字符问题,然后生成一个与之对应的候选词集
并将其添加到词典W
2中,将添加更新后的词典W
2作为下一次解决UNK字符问题的初始词典。通常情况下,在每一次t
i执行上述步骤的过程中,词典W
2中的词语数量会不断增加,词向量也会进行更新,最终在实际的应用时,这些新添加到词典W
2中的词语也能作为预测应答语句中的词语进行输出,本申请将上述称之为迭代反馈过程。
步骤S140、采用更新后应答模型,对输入的提问语句进行自动应答。
在应答模型通过第一训练集D1和第二训练集D2训练好后,则可以应用于具体的场景中,进行自动应答。
在一个示例中,本申请一种融合双重分词和迭代反馈的自动应答方法,还包括:
将同一个词语t对应的所有第四候选集构建成第五候选集,对于第二训练集中生成所有未知符号的词语,将生成的所有第五候选集进行合并生成候选共现集,并在候选共现集的基础上进行扩充得到扩充集合,所述扩充集合中每个元素包括词语t及其对应的第五候选集。
具体的,在D
2的训练过程中,同一个t
i会生成
个不同的UNK字符,经过上述步骤S130会得到
个候选词集
针对每一个t
i,将生成的全部候选词集构建成一个新的集合—t
i候选总集:
(第五候选集)。对于训练集D
2中生成所有UNK字符的t
i,将生成的全部
构建成一个候选共现集
(M为训练集D
2中全部提问语句所生成的UNK字符的总数量)。在此基础上构建扩充集合U°,从而可以利用U°中词语之间的共现关系来解决输出UNK字符的问题:
在D2中的全部语料都训练完毕后,“金樽”在整个训练过程中共生成5个不同的UNK字符,会得到5个候选词集U'“金樽”e(1≤e≤5),其中U'“金樽”1={玉盘,对酒,高歌,月落,玉简,玉弦}。
针对每一个ti,将生成的全部候选词集构建成一个新的集合—ti候选总集:在本实施例中,“金樽”的候选总集U'“金樽”={U'“金樽”1,U'“金樽”2,U'“金樽”3,U'“金樽”4,U'“金樽”5}。
表15
对于训练集D
2中生成所有UNK字符的t
i,将生成的全部
构建成一个集合
(M为训练集D
2中全部上联语句所生成的UNK字符的词语的总数量)。在本实施例中,第一个t
i(1≤i≤M)是“金樽”,即t
1=“金樽”,故
在此基础上构建扩充集合U°:
在接下来的测试阶段或实际应用中,通过在U°中找词语与词语之间的共现关系来解决输出UNK字符的问题。
在接下来的一个示例中,如图3所示,所述采用更新后应答模型,对输入的提问语句进行自动应答,包括:
将提问语句输入到更新后的应答模型,若输出结果仍然包含未知符号,则先确定其对应的提问语句中生成该未知符号的词语q;
在扩充集合中查找与词语q相关的第五候选集,如果存在相关的第五候选集,则执行如下步骤:
构建词语q对应的待检索集合,其中,当词语q与扩充集合中的词语t相同时,将词语t对应的第五候选集加入到待检索集合中;当词语q与词语t不相同,但词语q存在于词语t的第五候选集中,则将词语t放入待检索集合中;
计算待检索集合中每个词语与词语q的关联度,选择关联度最大的词语作为词语q对应的字符输出。
在扩充集合中查找与词语q相关的第五候选集,如果不存在相关的第五候选集,则执行如下操作:
将词语q拆分成一个一个的字,然后将这些字都输入到更新后的应答模型中,在解码器的每一次循环中,输出应答语句字典B2中概率值最大的字作为该次循环的输出,并将其输入到下一次循环中,当解码器的循环次数与输入词语q的字数相同时,循环终止;
将历次循环的输出的字依次进行拼接,得到词语q对应的字符输出。
本实施例由于断字方法训练的模型参数保证了输入与输出之间的字数相同,故取每次循环中概率最大的字进行拼接,并将拼接后的词语作为词语q的非UNK字符的输出。
具体的,可以提取测试集T中的2条上联语句“绿意正浓惬意金樽欣美满”和“梧桐枝上栖双凤”为例,来描述实际的应用中,如何得到应答语句。首先对这2条上联语句进行序列化操作,再输入到更新后的应答模型中进行测试。如果输出的应答语句中不包括UNK字符,则直接以输出的语句进行应答,否则对UNK字符进行处理。
若输出结果仍然包含UNK字符,则先确定其对应的提问语句中生成该UNK字符的目标词语qt(1≤t≤MT,MT为训练集T中生成UNK字符所对应的提问语句中全部词语的总数量)。
首先提取构建好的候选共现集U
*和扩充集合U°:U
*由训练集D
2中全部t
i对应的候选总集
构成,
由同一个t
i生成的多个候选词集
构成;t
i和
共同组合构成
t
i是
中的第一个元素,
是中
的第二个元素。然后,全部的
又构成了扩充集合U°。如果U°中找到与q
t相关的
即U°中有与目标词语q
t共现的词语,执行如下步骤:
构建词语q
t的待检索集合
该集合由以下两个部分组成:1、当扩充集合U°中的
的第一个元素t
i=q
t时,将
的第二个元素
中的每一个元素
(
是同一个t
i生成UNK字符的数量)中的全部词语加入到集合
中。2、当
的第二个元素
中的
中存在词语q
t,且扩充集合U°中的
的第一个元素t
i≠q
t时,则将所有
对应的词语t
i添加到
中。
定义一个参数NCW-CTF(Number of Co-occurrence Word sets—Co-occurrenceTotal sets Frequency)用来衡量待检索集合
中每个词语v
r(1≤r≤l
V,l
V表示
中词语的个数)的关联程度,NCW-CTF
rt的值越大表明v
r与目标词语q
t的关联性越强,具体计算公式如下:
NCWrt=满足vr和qt共现条件的候选词集的数量
其中,共现是指对于同一个
而言,当t
i=v
r时,如果
则q
t和v
r是共现的;当t
i≠v
r且t
i=q
t时,如果
则v
r和q
t是共现的。
其中,
为包含q
t的候选总集的数量,
为包含v
r的候选总集的数量。
NCW-CTFrt=NCWrt×CTFrt
为了计算出NCW-CTF
rt的值,首先介绍NCW
rt、
和
三个参数的计算方法:
的值通过以下方法计算得到:对于一个确定的q
t,遍历U°中的M个
当q
t=t
i或当
时,
的数值加1。遍历结束后输出
的值。
的值通过以下方法计算得到:对于一个确定的v
r,遍历U°中的M个
当t
i≠q
t且t
i=v
r或当
时,则
的数值加1。遍历结束后输出
的值。
利用前两步中构建的待检索集合和定义的NCW-CTF公式,计算
中所有词语的NCW-CTF的值,并将其中NCW-CTF值最大的词语作为q
t的非UNK字符的输出。
如果U°中没有找到与q
t相关的
即U°中没有与目标词语q
t共现的词语,也就是说找不到替换UNK字符的词语,则执行如下步骤:
将词语qt拆分成一个一个的字,然后将这些字都输入到参数更新后的应答模型中,在解码器的每一次循环中,利用softmax函数计算应答语句字典B2中概率值最大的字作为该次循环的输出,并将其输入到下一次循环中,当解码器的循环次数与输入词语qt的字数相同时,循环终止。将历次循环的输出的字依次进行拼接,得到qt的非UNK字符的输出。
由于断字方法训练的模型参数保证了输入与输出之间的字数相同,故取每次循环中概率最大的字进行拼接,并将拼接后的词语作为qt的非UNK字符的输出。
以测试集T中的2条上联语句“绿意正浓惬意金樽欣美满”和“梧桐枝上栖双凤”为例,应答模型的输出结果分别为“秋风更深柔情UNK庆团圆”和“菡萏花间立UNK”。由于输出的2句下联结果中都包含UNK字符,故需要对他们分别进行进一步的处理。
针对输出的第一条下联结果“秋风更深柔情UNK庆团圆”,确定其所对应的上联语句中生成UNK字符的目标词语,即:q1=“金樽”。执行以下两大步骤:
(一)具体步骤如下:
1、首先提取步骤S6中构建好的候选共现集U*和扩充集合U°。
在本实施例中,t1=“金樽”,故U°如下所示:
表16
在运行过程中,本实施例仅找到了4个与词语q
1“金樽”相关的
其中,1≤a,b,c≤M,
和
是扩充集合U°中的3个元素,由于其下标的具体数值在程序的运行中不重要,因此本实施例中用a、b和c进行替代。
构建目标词语q
t=“金樽”的待检索集合
集合
由以下两个部分组成:
i.当扩充集合U°中的
的第一个元素t
i=q
t时,将
的第二个元素
中的每一个元素
(
是同一个t
i生成UNK字符的数量)中的全部词语加入到集合
中。
对于目标词语q
1=“金樽”,根据表7.1,U°中的
的第一个元素:t
1=“金樽”,满足条件t
1=q
1。故将
的第二个元素U'
“金樽”中的每一个元素U'
“金樽”e(1≤e≤5)中的全部词语加入到集合V
“金樽”中,即:
V“金樽”={玉盘、对酒、高歌、月落、玉简、玉弦、金酒、春酒、银烛、玉柱}
ii.当
的第二个元素
中的
中存在词语q
t,且扩充集合U°中的
的第一个元素t
i≠q
t时,则将所有
对应的词语t
i添加到
中。
对于目标词语q
1=“金樽”,U°中包含
和
这3个
它们的第二个元素
和
中的
和
中存在词语“金樽”,且这3个
中的第一个元素t
a、t
b和t
c都不等于q
1。故将
和
对应的词语月愁、玉腕、珠箔添加到V
“金樽”中,得到:
V“金樽”={玉盘、对酒、高歌、月落、玉简、玉弦、春酒、银烛、金酒、玉柱、月愁、玉腕、珠箔}
计算待检索集合V“金樽”中每个词语vr(1≤r≤13)的NCW-CTF值,包括:
计算参数NCWrt的值:
NCWrt的计算过程由vr是否等于ti来决定,故本实施例选取了词语“玉盘”和“月愁”分别代表上述两种不同的情况来展示NCWrt的计算,其中,v1=“玉盘”,v2=“月愁”。
对于v
1=“玉盘”且q
1=“金樽”,t
1=“金樽”,满足条件t
1≠v
1且t
1=q
1。从表7.1中可以得出,在“金樽”所对应的U'
“金樽”中,存在4个U'
“金樽”1、U'
“金樽”2、U'
“金樽”3、U'
“金樽”4,满足v
1=“玉盘”∈U'
“金樽”e,故
对于v
2=“月愁”和q
1=“金樽”,t
a=“月愁”,满足条件t
a=v
2。从表7.1中可以得出,在“月愁”所对应的U'
“月愁”中,存在U'
“月愁”2,满足q
1=“金樽”∈U'
“月愁”e,故
对于q
1=“金樽”,
中的t
1=“金樽”,满足条件q
1=t
1,故
的数值加1;
中的
中的
和
中的
都包含词语“金樽”,满足条件
故
的数值加3。遍历结束后,
的数值为4。
对于v
1=“玉盘”,
中的U'
“金樽”1、U'
“金樽”2、U'
“金樽”3和U'
“金樽”4中包含词语“玉盘”,满足条件v
1∈U'
“金樽”e,
的数值加1。遍历结束后,
的数值为1。
对于v
2=“月愁”,
中的U'
“月愁”1中包含词语“月愁”,满足条件v
2∈U'
“月愁”1,
的数值加1;
中的t
a=“月愁”,满足条件t
a≠q
1且t
a=v
2,
的数值加1。遍历结束后,
的数值为2。
最后,对于v
1=“玉盘”和v
2=“月愁”,将求得的参数NCW
rt、
和
的值带入公式得到最终的NCW-CTF值:
表17计算待检索集合V“金樽”中全部词语的NCW-CTF值,结果如下:
表18
在本实施例中,NCW-CTF值最大的词语是“玉盘”,故将“玉盘”替换下联输出结果“秋风更深柔情UNK庆团圆”中的UNK字符。即输入到GAbS模型中的上联语句为:“绿意正浓惬意金樽欣美满”,经过UNK字符处理后的下联输出结果为:“秋风更深柔情玉盘庆团圆”。
将上联语句“梧桐枝上栖双凤”输入到应答模型中,得到的下联结果为:“菡萏花间立UNK”,确定上联语句中生成UNK字符的目标词语为:q2=“双凤”。为了解决输出下联语句中包含UNK字符的问题,首先提取构建好的候选共现集U*和扩充集合U°。
对于词语q
2=“双凤”,在U°中没有找到与之相关的
也就是说找不到替换UNK字符的词语,故将词语“双凤”拆分成2个字:“双”和“凤”。然后将这2个字都输入到参数更新后的应答模型中,在解码器的每一次循环中,利用softmax函数计算下联语句字典B
2中概率值最大的字作为该次循环的输出,并将其输入到下一次循环中。
在本实施例中,由于词语“双凤”仅包含2个字,因此解码器循环2次后终止。将2次循环输出的字依次进行拼接,结果如下:
表19
在本实施例中,将输出概率最大的字“对”“鸳”进行拼接后组合成词语“对鸳”,故将“对鸳”替换下联输出结果“菡萏花间立UNK”中的UNK字符。最终得到以下的一副对联,上联语句为:“梧桐枝上栖双凤”,下联输出结果为:“菡萏花间立对鸳”。
在另一个实施例中,本申请还提供了一种融合双重分词和迭代反馈的自动应答装置,包括处理器以及存储有若干计算机指令的存储器,所述计算机指令被处理器执行时实现所述融合双重分词和迭代反馈的自动应答方法的步骤。
关于融合双重分词和迭代反馈的自动应答装置的具体限定可以参见上文中对于融合双重分词和迭代反馈的自动应答方法的限定,在此不再赘述。
存储器和处理器之间直接或间接地电性连接,以实现数据的传输或交互。例如,这些元件互相之间可以通过一条或多条通讯总线或信号线实现电性连接。存储器中存储有可在处理器上运行的计算机程序,所述处理器通过运行存储在存储器内的计算机程序,从而实现本发明实施例中的网络拓扑布局方法。
其中,所述存储器可以是,但不限于,随机存取存储器(Random Access Memory,RAM),只读存储器(Read Only Memory,ROM),可编程只读存储器(Programmable Read-OnlyMemory,PROM),可擦除只读存储器(Erasable Programmable Read-Only Memory,EPROM),电可擦除只读存储器(Electric Erasable Programmable Read-Only Memory,EEPROM)等。其中,存储器用于存储程序,所述处理器在接收到执行指令后,执行所述程序。
所述处理器可能是一种集成电路芯片,具有数据的处理能力。上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(NetworkProcessor,NP)等。可以实现或者执行本发明实施例中公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。