具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合说明书附图对本发明的具体实施方式做详细的说明,显然所描述的实施例是本发明的一部分实施例,而不是全部实施例。基于本发明中的实施例,本领域普通人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明的保护的范围。
在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是本发明还可以采用其他不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本发明内涵的情况下做类似推广,因此本发明不受下面公开的具体实施例的限制。
其次,此处所称的“一个实施例”或“实施例”是指可包含于本发明至少一个实现方式中的特定特征、结构或特性。在本说明书中不同地方出现的“在一个实施例中”并非均指同一个实施例,也不是单独的或选择性的与其他实施例互相排斥的实施例。
实施例1
参照图1~图2,为本发明的一个实施例,该实施例提供了一种面向智能对话系统的对话状态追踪方法,包括:
S1:获取智能对话系统中的对话语句以及对话状态,并对对话语句以及对话状态进行预处理;
应说明的是,本发明实施例中获取智能对话系统中的对话语句包括当前轮次的对话语句以及当前轮次的前L轮对话语句,对话状态包括当前轮次的前一轮对话状态;其中L的取值可根据具体模型训练进行获取且本发明实施例中最少应获取前1轮的对话语句。
更进一步的,对对话语句以及对话状态进行预处理包括:拼接处理与格式转换;
记每个对话轮次的语句拼接为;
其中,表示轮次,/>为第/>轮次的系统回复,/>为用户输入的语句,公式中符号“;”是系统回复和用户语句之间的分隔符,[SEP]是用于标记对话回合结束的特殊符号。
更进一步的,还包括:
记对话状态是固定大小的槽值对集合;
其中,是第/>个槽位的槽词,/>是其对应的值;
记每个轮次的对话状态表示为;
其中,为第/>个槽词及其对应的结果词;-是槽词和值之/>间的连接符;/>是一种特殊的标记,用于将第/>个槽的槽值对的信息汇聚为单个向量。
S2:根据预处理后的数据,结合BERT预训练模型(BERT,Bidirectional EncoderRepresentation from Transformers),获取词向量特征表示矩阵;
具体的,BERT预训练模型可以通过海量数据训练得来,更好地学到了数据中的普遍特征,比起在自己的数据集上从头开始训练参数,使用预训练模型参数通常会有更好的泛化效果。
更进一步的,根据预处理后的数据,结合BERT预训练模型,获取词向量特征表示矩阵包括:
预处理后的数据表示为:
;
其中,表示高效上下文,/>表示对话状态,/>至/>为第/>轮次的L轮对话语句;
将普通单词形式的数据转化为数据形式。
具体的,将普通单词形式的数据转化为机器能够理解的数据形式。
S3:对词向量特征表示矩阵中的特征向量进行第一领域分类,结合槽门机制,获得带有领域信息的槽位上下文向量;
在本发明实施例中,对词向量特征表示矩阵中的特征向量进行第一领域分类,结合槽门机制,获得带有领域信息的槽位上下文向量包括:
第一领域分类包括:
;
其中,为包含领域信息的向量,/>为前馈神经网络的参数,/>为其偏置,/>为第/>轮次的对话语句在各个领域上的概率分布,/>表示占位符“[CLS]”对应的特征向量。
更进一步的,槽门机制包括:抽取编码器输出中/>对应的特征向量表示为:
;
其中,,/>为第/>轮次中第/>个槽位的表征向量,Gather函数的作用是按照索引收集特征向量,/>表示/>所在的位置索引。
更进一步的,还包括:将领域信息向量和槽信息向量输入槽门机制中以获得上下文加权特征,表示为:
;
其中,和/>为可训练的参数,/>为槽位数量;
更进一步的,基于上下文加权特征获取带有领域信息的槽位上下文向量/>,表示为:
;
其中,为可以学习的参数,/>为第/>轮次中第/>个槽位的表征向量,为第/>轮次中第/>个槽位的隐藏向量。
S4:对带有领域信息的槽位上下文向量进行第二状态分类,根据分类后的操作状态的标识符确定槽位对应的新槽词,根据新槽词完成对智能对话系统的对话状态追踪。
在本发明实施例中,第二状态分类包括:
;
其中,为前馈神经网络参数,/>为其偏置,/>表示第个对话回合中第/>个槽的操作状态分布,|O|=4,表示操作状态的标识符种类,/>为第/>对话轮次中第/>个槽所对应的操作的索引值,/>为第/>轮次中第/>个槽位的隐藏向量。
更进一步的,根据分类后的操作状态确定槽位对应的新槽词,根据新槽词完成对智能对话系统的对话状态追踪包括,
当操作状态的标识符为第一标识时,新槽词对应的值结果不变,和上一轮次的结果保持一致;
当操作状态的标识符为第二标识时,将槽词对应的值置为第一槽值,此时新槽词对应的值为第一槽值;
当操作状态的标识符为第三标识时,将槽词对应的值置为第二槽值,此时新槽词对应的值为第二槽值;
当操作状态的标识符为第四标识时,槽位对应的新槽词使用循环神经网络作为解码器生成对应的值,并利用包含领域信息的向量和带有领域信息的槽位上下文向量初始化循环神经网络。
应说明的是,本发明实施例中第一标识为“CARRYVOER”表示槽值和上一轮次对话的结果保持一致,第二标识为“DELETE”表示删除槽值,第一槽值为“NULL”表示当操作状态的标识符为“DELETE”时,此次信息对话里不存在槽词,新槽词对应的值即为空值;第三标识为“DONTCARE”表示用户不关心槽值;第二槽值为“DONTCARE”表示当操作状态的标识符为“DONTCARE”时,此次信息对话里用户可忽略槽值结果,新槽词对应的值即为任意值;第四标识为“UPDATE”表示槽值需要生成。
具体的,当操作状态的标识符为“CARRYVOER”时,新槽词对应的值结果不变,和上一轮次的结果保持一致;
当操作状态的标识符为“DELETE”时,将槽词对应的值置为“NULL”,此时新槽词对应的值为“NULL”;
当操作状态的标识符为“DONTCARE”时,将槽词对应的值置为“DONTCARE”,此时新槽词对应的值为“DONTCARE”;
当操作状态的标识符为“UPDATE”时,通过神经网络生成新的值。
在本发明实施例中,通过神经网络生成新的值包括,使用循环神经网络解码器来生成值并且使用初始化/>,用/>来初始化/>,即令/>,。在每一步都使用上一时间步生成的隐藏向量/>和当前输入的词嵌入向量/>来生成新的隐藏向量,直至结束标记符[EOS]生成:
;
将每个时间步的隐藏向量转换为词表上的分布:
;
其中,为单词的嵌入矩阵,其与BERT编码层的嵌入一致。
使用软复制机制来获得基于候选词的最终的单词分布,表示为:
;
其中,是候选词上的单词分布,/>为最终的单词分布,/>是控制值生成器的数值,决定从词汇表中生成值还是从历史上下文中复单词。
在一个可选的实施例中,根据分类后的操作状态确定槽位对应的新槽词可表示为:
;
其中,是第/>轮次中第/>个槽位对应的值,/>是第t-1轮次中第/>个槽位对应的值,/>为/>第轮次中第/>个槽对应的操作状态,v为待生成的新的值。
实施例2
参照图2,为本发明的一个实施例,为了验证本发明的有益效果,通过具体实例进行科学论证。
如图2所示,本实施例以下面对话为例:
System: "welcome, can I help you? "
User: "please find a restaurant called nusha ."
System: "i do not seem to be finding anything called nusha . whattype of food does the restaurant serve ?"
User: "could you double check that you've spelled the name correctly? the closest i can find is nandos .”
System: "oh its okay . that is an entertainment type located in thesouth at unit g6 , cambridge leisure park , clifton road . do you need theirphone number ?"
User: "no , but please confirm their address again and their postcode."
System: "their address is unit g6 , cambridge leisure park , cliftonroad . the postcode is cb17dy . is their anything else i can do " ?"
User: "i want indian food in the center area ."
……
此时目标是对这组对话进行对话状态追踪,分析得出第四轮对话结束后的对话状态。
此时["their","address",……";"……,"center","area",".","[SEP]"]
上一轮次的对话状态为{"attraction-name":"nusha"}。
步骤如下:
S1:将每个对话轮次的语句拼接为。将每个轮次的对话状态表示为/>,
S2:将当前对话的前L轮对话轮次的对话语句进行拼接,形成高效上下文,按照BERT的输入习惯,在最前面添加特殊的[CLS]标记符,用于获取包含整条语句的特征。最后得到的高效上下文表示为:
[“[CLS]”,“welcome”,……,”their”,……,”[SLOT]”,”attraction”,”name”,”-”,”nusha”,……]
S3:使用BERT结构对高效上下文和对话状态进行编码,从而得到富含丰富信息的词向量特征表示矩阵为:
[[[-0.3045, 0.3733, -0.4296, ..., -0.9419, 0.7848, 0.3402],
[ 0.0069, 0.2648, 0.3984, ..., -0.5691, 0.7703, -0.3334],
[-0.0260, 0.8135, 0.2491, ..., -0.4297, 0.4152, 0.1569],
[ 0.0910, -0.0856, 0.4875, ..., -0.0786, 0.0827, -0.3627]],
[[-0.6867, 0.2182, -0.4707, ..., -0.8594, 0.4270, 0.4843],
[-0.2719, -0.0946, -0.0214, ..., 0.4164, 0.0084, -0.0580],
[-0.6545, -0.3216, 0.7921, ..., -0.1104, 0.1965, -0.3110],
[-0.0382, 0.0447, 0.4592, ..., -0.0030, 0.0241, -0.4892]]]
S4:将[CLS]对应的表征向量学习为当前轮次对话所属的领域的上下文向量,通过前馈神经网络和softmax进行分类,获得其在各个领域的概率分布/>,将编码器的输出/>中/>对应的特征向量抽取出来,得到/>:
[[[-0.2089, 0.2530, 0.7112, ..., -0.1031, 0.3069, -0.0039],
[-0.3772, 0.3662, 0.6901, ..., -0.5201, 0.2472, 0.0513],
[-0.6194, 0.1114, 1.0342, ..., 0.1301, 0.3578, 0.0674],
[-0.2261, -0.0372, 0.8240, ..., -0.5093, 0.4106, -0.7763]],
[[-0.2306, 0.6945, 0.5782, ..., 0.1405, 0.6111, 0.0092],
[-0.0293, -0.1715, 0.8088, ..., 0.0057, 0.4641, -0.5622],
[-0.7954, -0.4232, 0.6152, ..., 0.1506, 0.4282, -0.8156],
[-0.2563, -0.0673, 0.7723, ..., -0.1419, 0.5508, -0.7588]]]
最后通过本发明提出的槽门机制获得有带有领域信息的槽位上下文向量:
[[[-0.2089, 0.2530, 0.7112, ..., -0.1342, -0.3117, 0.3384],
[-0.3772, 0.3662, 0.6901, ..., -0.1342, -0.3117, 0.3384],
[-0.6194, 0.1114, 1.0342, ..., -0.1342, -0.3117, 0.3384],
[-0.2261, -0.0372, 0.8240, ..., -0.1342, -0.3117, 0.3384]],
[[-0.2306, 0.6945, 0.5782, ..., -0.0073, -0.1739, 0.4790],
[-0.0293, -0.1715, 0.8088, ..., -0.0073, -0.1739, 0.4790],
[-0.7954, -0.4232, 0.6152, ..., -0.0073, -0.1739, 0.4790],
[-0.2563, -0.0673, 0.7723, ..., -0.0073, -0.1739, 0.4790]]]
S5:槽位状态,针对每个槽位上下文向量使用前馈神经网络和softmax函数进行状态分类得到其概率分布,表示为:
[[[ 2.3372e-01, -1.2665e-02, 3.8068e-01, 1.6126e-02],
[-6.0666e-03, -1.9777e-01, 1.3868e-01, -1.9411e-01],
[-3.4462e-01, -4.5960e-02, 3.0783e-01, -1.9549e-01],
……
[ 9.2064e-02, -1.2710e-01, 3.8057e-02, -2.3526e-01],
[-2.6684e-01, 9.9543e-02, 2.1678e-01, 2.1085e-01],
[-4.9891e-01, 2.0059e-01, 1.9970e-01, -1.4336e-01]]]
通过argmax函数获得操作状态对应的索引值,表示为:
[2,2,2,……0,0,1]
S6:槽词对应的值的生成方式由操作状态决定。当操作状态为CARRYVOER时,槽词对应的值结果不变,和上一轮次的结果保持一致;当操作状态为DELETE时,将槽词对应的值置为NULL;当操作状态为DONTCARE时,将槽词对应的值置为DONTCARE;对操作状态分类结果为UPDATE的槽生成新的值,使用循环神经网络解码器来生成值并且使用初始化,用/>来初始化/>,即令/>,/>。在每一步都使用上一时间步生成的隐藏向量/>和当前输入的词嵌入向量/>来生成新的隐藏向量,直至结束标记符[EOS]生成。将每个时间步的隐藏向量转换为词表上的分布/>,再使用软复制机制来获得基于候选词的最终的单词分布/>,更新上一轮次的对话状态从而得到本轮次的对话状态为:
{("restaurant-food", "indian"),("restaurant-area", "centre"),("attraction-name", "nusha")}。
本发明方法使用高效上下文和上一轮次的对话状态作为输入,减少了数据量的同时也使用了历史对话信息的高度提炼保存了关键信息。通过Bert预训练模型进行编码,生成包含丰富信息的单词特征向量。进一步利用领域上下文向量对领域和槽的关系进行建模,以提高槽信息向量的表征能力。其中,领域分类对当前轮次对话所属的领域进行分类以获得正确的领域表征向量,槽门机制将领域表征作用于槽信息向量之上。
充分发挥语句所属领域对对话状态追踪模型的作用,使用槽门机制充分发挥领域对槽的指导性作用。通过对每个槽的操作状态进行分类,当操作状态为CARRYVOER时,槽词对应的值结果不变,和上一轮次的结果保持一致;当操作状态为DELETE时,将槽词对应的值置为NULL;当操作状态为DONTCARE时,将槽词对应的值置为DONTCARE;只有当操作状态为UPDATE时,使用值生成器为其生成新的值。通过本发明方法不必为每个槽位都生成新的值,大大提高了效率。本发明还充分提取了对话系统中用户前后输入的句子中的信息,可以在公开数据上都取得优异的效果,在对准确率要求较高的对话系统中具有良好的实用性。
应说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明技术方案的精神和范围,其均应涵盖在本发明的权利要求范围当中。