发明内容
本发明要解决的技术问题和提出的技术任务是对现有技术方案进行完善与改进,提供一种基于语句改写的面向端到端对话的数据增强方法,以达到适用于对话文本的数据增强的目的。为此,本发明采取以下技术方案。
一种基于语句改写的面向端到端对话的数据增强方法,包括以下步骤:
1)模型训练
101)搜索原始对话文本并考察所有用户语句的对话功能,为每一个用户语句匹配一个参考改写语句;
102)将用户语句输入语句改写模型,并对其进行预处理,包括分词、正规化操作;
103)对输入的用户语句以及前一轮系统回复进行编码,得到语句的向量表示;
104)根据上一步编码结果解码前一轮系统对话动作;
105)根据步骤(3)编码结果和前一轮系统对话动作,解码改写后的用户语句;
106)检查改写后的用户语句,筛选出改动较大但含义不变的语句,用以替换原对话文本中的用户语句,生成新的对话文本,并将其并入原对话文本,得到扩充的训练数据,得到对话生成模型;
2)当用户提出请求时,将用户语句输入语句改写模型,并对其进行预处理;
3)对输入的用户语句以及前一轮系统回复进行编码,得到语句的向量表示;
4)根据上一步编码结果解码前一轮系统对话动作;
5)根据步骤3)编码结果和前一轮系统对话动作,解码改写后的用户语句;
6)将用户语句输入对话生成模型,并将其连同前一轮系统回复和前一轮对话状态重新进行编码,获得向量表示;
7)根据上一步编码结果和步骤5)语句改写的解码结果,进行对话状态解码,解码过程中依次输出识别到的对话领域、属性槽和属性值;
8)根据对话状态,在数据库中查询符合要求的实体;
9)判断模型类别;当模型为DAMD时,根据对话状态解码结果和数据库查询结果进行系统对话动作的解码,当模型为TSCP时,则直接跳至下一步;
10)根据之前所有的编解码和查询结果,生成系统的自然语言回复;
11)对生成的回复进行后处理,后处理包括单词合并、添加标点,得到呈现给用户的自然语言,并回复。
作为优选技术手段:在步骤1)中,联合训练一个语句改写模型和一个对话生成模型;两模型都采用基于序列到序列(seq2seq)的框架,由一个对话上下文编码器(encoder)和多个串联的解码器(decoder)组成;语句改写模型包含系统对话动作解码器和改写语句解码器;对话生成模型则有两种,TSCP模型包含对话状态解码器和自然语言回复解码器,DAMD模型则在TSCP模型的两解码器之间又加入了一个系统对话动作解码器。
作为优选技术手段:在步骤102)及步骤2)中,对输入的用户语句进行分词,再将其送入语句改写模型的上下文编码器。
作为优选技术手段:在步骤103)及步骤3)中,将前一轮系统回复和输入的用户语句串联为自然语言单词序列,并使用一个层数为1、隐层神经元数量为50或100的双向GRU模型作为编码器,将该单词序列编码为等长的向量序列,称为隐状态;编码过程实现了在隐状态空间融合并理解对话中包含的语义信息;该编码器的输出结果将依次送到语句改写模型的两个解码器,用于后续模型输出的解码。
作为优选技术手段:在步骤104)及步骤4)中,语句改写模型通过系统对话动作解码器(Action Decoder)进行前一轮系统对话动作At-1的解码;对话动作使用自然语言序列加以表示;且认为前一轮系统对话动作与前一轮系统回复Rt-1直接相关,并且用当前轮次用户语句Ut进行反向推演,基于此两者的编码结果解码出前一轮系统对话动作:
At-1=seq2seq(Rt-1,Ut)
作为优选技术手段:在步骤105)及步骤5)中,语句改写模型通过改写语句解码器(Paraphrase Decoder)进行改写语句
的解码,改写语句与原用户语句U
t含义相同,但表述方式有区别,改写语句与原用户语句U
t直接相关,并且受到前一轮系统回复R
t-1和系统对话行为A
t-1的影响,基于此三者解码出改写语句:
在语句改写模型的系统对话动作解码器和改写语句解码器之间加入注意(attention)机制,从而模型在解码改写语句时关注到前一轮系统的对话行为,以使得生成的改写语句与前一轮系统回复衔接得更加连贯,更加符合对话语境;
在语句改写模型中,通过应用seq2seq框架下编码器与解码器之间的拷贝(copy)机制,从前一轮系统回复中拷贝与系统对话行为直接相关的信息,或从用户语句中拷贝用于构建改写语句的属性值,以提高解码系统对话行为和改写语句的准确率。
作为优选技术手段:在步骤106)中,采用语句过滤器(Utterance Filter)检查改写后的用户语句的质量,并滤除质量较差的改写语句;具体过滤方法分为三步:首先,考察改写语句和原用户语句所包含的属性值,若两者包含的属性值不同,则说明改写语句错误地增添、修改或删除了一些原语句中的关键信息,应将其滤除;之后,考察改写语句和原用户语句之间的BLEU分数,若该分数低于0.2,我们则认为改写语句相比原语句的语义内容差别较大,不适合代替原语句,因此将其滤除;最后,考察改写语句和原用户语句之间的多样性分数,即diversity score,若该分数低于3.4,则认为改写语句和原语句在表达方式上过于相似,即改写语句没有在原语句上进行过多改变,因而代替原语句没有太大意义,应将其滤除;滤除了质量较低的改写语句之后,用剩下的改写语句替换原对话文本中的用户语句,以此构造出新的对话文本,从而扩充了对话生成模型的训练数据。
作为优选技术手段:在步骤6)中,将对话生成模型在前一轮解码出的系统回复和对话状态,连同当前输入的用户语句,重新串联为自然语言单词序列,并送入对话生成模型编码器进行重新编码;采用层数为1、隐层神经元数量为50或100的双向GRU模型作为编码器;该编码器的输出结果将依次送到对话生成模型的解码器,用于后续模型输出的解码;
作为优选技术手段:在步骤7)中,基于步骤6)的编码结果和步骤4)的解码输出,通过对话生成模型的第一个解码器——对话状态解码器(Belief Span Decoder)进行对话状态的解码;对话状态使用自然语言序列表示,其具体形式为:“[领域1]属性槽1槽值1;属性值2槽值2;[领域2]…”,每一轮的对话状态B
t由当前轮次的用户语句U
t、上一轮的系统回复R
t-1、上一轮的对话状态B
t-1和用户语句的改写
共同决定:
在语句改写模型的改写语句解码器和对话生成模型的对话状态解码器之间加入注意(attention)机制,从而对话生成模型在解码对话状态时能关注到原用户语句的改写;改写语句作为一种释义,辅助了对话生成模型理解输入的用户语句,从而可以提升解码对话状态的准确率;同时,由于语句改写模型和对话生成模型之间存在注意机制,对话生成模型的各种解码结果能监督语句改写模型的训练,这实现了端到端系统的搭建以及多模型的联合训练;
在步骤8)中,系统根据更新后的对话状态在数据库中进行查询,达到查询结果的one-hot编码向量DBt;
在步骤9)中,对于使用DAMD作为对话生成模型,数据库查询结果DBt、对话状态Bt和用户语句Ut将输入第二个解码器——系统对话动作解码器(Action Span Decoder),用于解码当前系统应采用的对话动作At:
At=seq2seq(Ut,Bt,DBt)
在步骤(S10)中,使用最后一个解码器——自然语言回复解码器(ResponseDecoder),基于之前的解码结果生成系统的自然语言回复Rt;
对于使用TSCP作为对话生成模型的系统,这一过程可表示为:
Rt=seq2seq(Ut,Bt,DBt)
对于使用DAMD作为对话生成模型的系统,这一过程可表示为:
Rt=seq2seq(At,Ut,Bt,DBt)
在seq2seq模型框架下,对话生成模型的编码器与解码器以及不同的解码器之间存在有拷贝(copy)机制,这使得该模型的各个解码器都可以从用户语句表达中拷贝其对属性槽取值的要求(例如从“我要找便宜的餐馆”中拷贝“价格=便宜”),以及其包含的属性槽名称和领域指示符等信息,从而以更高的准确率完成自然语言理解、对话状态跟踪、对话动作预测和系统回复生成。
作为优选技术手段:在进行模型训练时,所有的seq2seq结构都采用有监督训练的方式;步骤1)中匹配到的参考改写语句,以及数据集中提供的标准系统回复和对话状态、系统对话动作标签作为训练参考,并计算它们与解码器生成的概率分布之间的交叉熵,之后将各个交叉熵相加得到最终的损失函数,进行端到端的联合优化。
有益效果:
一、本技术方案解决对话生成模型训练数据稀缺问题中的有效性。适用范围广,可适用于TSCP和DAMD模型,包含对话状态跟踪模块的对话生成模型,并可以实现端到端系统的搭建。前一轮系统对话动作可以为用户语句的改写提供对话历史背景,使得生成的改写语句更加符合对话语境。通过对改写后的用户语句进行筛选并用之替代原语句,该方法可以构造出新的对话文本,从而扩充对话生成模型的训练数据。此外,该方法在语句改写模型和对话生成模型的解码器之间加入了注意机制,实现了端到端对话系统的搭建,并使得改写语句可以直接辅助对话生成,同时对话生成的结果也可以监督语句改写模型的训练。
二、解决对话系统构建中存在的以下困难:
(1)大部分现有的端到端对话系统在训练对话生成模型时,都需要有关特定领域内特定任务的大量的有标注的对话文本数据,但人工搜集并标注这样的文本数据实施困难且开销较大。
(2)现有的针对于文本的数据增强方法没有考虑文本中语句在一段对话中所处的语境,因而不适用于扩充对话文本数据。
(3)现有的基于语句改写的数据增强方法依赖于多个模型在多阶段下的单独训练,没有实现多模型联合训练和端到端系统的搭建,因而难以进行系统的整体优化。
具体实施方式
以下结合说明书附图对本发明的技术方案做进一步的详细说明。
本发明提出一种基于语句改写的面向端到端对话的数据增强方法,称为PARG,它通过构建并训练一个语句改写模型来扩充对话生成模型的训练数据。首先,该方法通过定义用户语句的对话功能来构造语句改写模型的训练参考。之后,该方法采用基于序列到序列(seq2seq)的框架,使用两个解码器依次解码前一轮系统对话动作和改写后的用户语句,其中,前一轮系统对话动作可以为用户语句的改写提供对话历史背景,使得生成的改写语句更加符合对话语境。通过对改写后的用户语句进行筛选并用之替代原语句,该方法可以构造出新的对话文本,从而扩充对话生成模型的训练数据。此外,该方法在语句改写模型和对话生成模型的解码器之间加入了注意机制,实现了端到端对话系统的搭建,并使得改写语句可以直接辅助对话生成,同时对话生成的结果也可以监督语句改写模型的训练。本发明通过以下步骤来实现上述应用对话数据增强的对话系统:
S1:搜索原始对话文本并考察所有用户语句的对话功能,为每一个用户语句匹配一个参考改写语句。(仅针对于模型训练阶段,应用阶段可跳过此步骤)
S2:将用户语句输入语句改写模型,并对其进行预处理,即分词、正规化等操作。
S3:对输入的用户语句以及前一轮系统回复进行编码,得到语句的向量表示。
S4:根据上一步编码结果解码前一轮系统对话动作。
S5:根据步骤S3编码结果和前一轮系统对话动作,解码改写后的用户语句。
S6:检查改写后的用户语句,筛选出改动较大但含义不变的语句,用以替换原对话文本中的用户语句,生成新的对话文本,并将其并入原对话文本,得到扩充的训练数据。(仅针对于模型训练阶段,应用阶段可跳过此步骤)
S7:将用户语句输入对话生成模型,并将其连同前一轮系统回复和前一轮对话状态重新进行编码,获得向量表示。
S8:根据上一步编码结果和步骤(5)语句改写的解码结果,进行对话状态解码,解码过程中依次输出识别到的对话领域、属性槽和属性值。
S9:根据对话状态,在数据库中查询符合要求的实体。
S10:根据对话状态解码结果和数据库查询结果进行系统对话动作的解码(仅针对于模型DAMD,模型TSCP可跳过此步骤)。
S11:根据之前所有的编解码和查询结果,生成系统的自然语言回复。
S12:对生成的回复进行后处理,即单词合并、添加标点等,得到呈现给用户的自然语言回复。
下面将对PARG的具体实现原理进行介绍。
在步骤S1中,我们通过定义用户语句的对话功能来构造用户语句改写的训练参考。一个用户语句的对话功能包含三个部分:前一轮系统对话动作(previous systemaction),表示系统在上一轮对话当中的历史行为,如“问候”、“询问-菜系”等;对话领域(domain),即对话所涉及到的主题,如“餐厅”、“旅馆”等;用户语句中提及到的属性槽(slots mentioned),即用户语句中的关键词类型,如“地点”、“食物”等。我们认为对话功能相同的用户语句,包含有相同的用户意图且处于相同的对话语境,因而在属性值(提及的关键词)相同的条件下,可以在一段对话中相互替换,并作为彼此的改写参考。因此,我们通过搜索原始对话文本,为每一个用户语句(原始语句)匹配到另一个对话功能相同的用户语句(参考语句),并将匹配到的参考语句中的属性值(关键词)修改为与原始语句中的相同,如将“昂贵”改为“便宜”,将“中国菜”改为“越南菜”等,以此构造出每个用户语句的改写参考。对话功能的示例见图1。
在应用对话数据增强方法PARG的对话系统中,我们联合训练了一个语句改写模型和一个对话生成模型。两模型都采用基于序列到序列(seq2seq)的框架,由一个对话上下文编码器(encoder)和多个串联的解码器(decoder)组成。具体而言:语句改写模型包含系统对话动作解码器和改写语句解码器;而对话生成模型则有两种,TSCP模型包含对话状态解码器和自然语言回复解码器,而DAMD模型则在TSCP模型的两解码器之间又加入了一个系统对话动作解码器。应用PARG的对话系统的结构见图2(图中的对话生成模型使用的是TSCP模型)。
在步骤S2中,我们首先对输入的用户语句进行分词(针对中文没有自然分隔符的特点),再将其送入语句改写模型的上下文编码器。
在步骤S3中,我们将前一轮系统回复和输入的用户语句串联为自然语言单词序列(系统回复和用户语句间会加入一个分隔符),并使用一个层数为1、隐层神经元数量为50(针对使用TSCP进行对话生成)或100(针对使用DAMD进行对话生成)的双向GRU模型作为编码器,将该单词序列编码为等长的向量序列,称为隐状态。编码过程实现了在隐状态空间融合并理解对话中包含的语义信息。该编码器的输出结果将依次送到语句改写模型的两个解码器,用于后续模型输出的解码。
在步骤S4中,语句改写模型通过系统对话动作解码器(Action Decoder)进行前一轮系统对话动作At-1的解码。这里的系统对话动作使用自然语言序列加以表示,如“餐厅-告知-价格;综合-是否继续”可以表示为“[餐厅]告知价格[综合]是否继续”。我们认为前一轮系统对话动作与前一轮系统回复Rt-1直接相关,并且可用当前轮次用户语句Ut进行反向推演,因而我们基于此两者的编码结果解码出前一轮系统对话动作:
At-1=seq2seq(Rt-1,Ut)
在步骤S5中,语句改写模型通过改写语句解码器(Paraphrase Decoder)进行改写语句
的解码,改写语句与原用户语句U
t含义相同,但表述方式有区别,如“我需要一家便宜的餐馆”和“请帮助我找到一个餐厅,并确保它是便宜的”。改写语句与原用户语句U
t直接相关,并且受到前一轮系统回复R
t-1和系统对话行为A
t-1的影响,因此我们基于此三者解码出改写语句:
注意到,我们在语句改写模型的系统对话动作解码器和改写语句解码器之间加入了注意(attention)机制,从而模型在解码改写语句时还可以关注到前一轮系统的对话行为,使得生成的改写语句与前一轮系统回复衔接得更加连贯,更加符合对话语境。
在语句改写模型中,通过应用seq2seq框架下编码器与解码器之间的拷贝(copy)机制,可以从前一轮系统回复中拷贝与系统对话行为直接相关的信息,如从“这家餐厅价格昂贵”中拷贝“餐厅”和“价格”,也可以从用户语句中拷贝用于构建改写语句的属性值(关键词),如从“我要寻找一家便宜的餐厅”中拷贝“便宜”。因此,这种框架可以提高解码系统对话行为和改写语句的准确率。
在步骤S6中,我们使用了一个语句过滤器(Utterance Filter)来检查改写后的用户语句的质量,并滤除质量较差的改写语句。具体过滤方法分为三步:首先,我们考察改写语句和原用户语句所包含的属性值(关键词),若两者包含的属性值不同,则说明改写语句错误地增添、修改或删除了一些原语句中的关键信息,应将其滤除;之后,我们考察改写语句和原用户语句之间的BLEU(Papineni et al.,2002)分数,若该分数低于0.2,我们则认为改写语句相比原语句的语义内容差别较大,不适合代替原语句,因此将其滤除;最后,我们考察改写语句和原用户语句之间的多样性分数,即diversity score(Hou et al.,2018),若该分数低于3.4,我们则认为改写语句和原语句在表达方式上过于相似,即改写语句没有在原语句上进行过多改变,因而代替原语句没有太大意义,应将其滤除。滤除了质量较低的改写语句之后,我们用剩下的改写语句替换原对话文本中的用户语句,以此构造出新的对话文本,从而扩充了对话生成模型的训练数据。
在步骤S7中,我们将对话生成模型在前一轮解码出的系统回复和对话状态,连同当前输入的用户语句,重新串联为自然语言单词序列,并送入对话生成模型编码器进行重新编码。我们仍使用层数为1、隐层神经元数量为50(针对使用TSCP进行对话生成)或100(针对使用DAMD进行对话生成)的双向GRU模型作为编码器。该编码器的输出结果将依次送到对话生成模型的解码器,用于后续模型输出的解码。
在步骤S8中,基于步骤S7的编码结果和步骤(S5)的解码输出,我们通过对话生成模型的第一个解码器——对话状态解码器(Belief Span Decoder)进行对话状态的解码。对话状态使用自然语言序列表示,其具体形式为:“[领域1]属性槽1槽值1;属性值2槽值2;[领域2]…”,例如“[restaurant]name Curry Garden;time 18:00[taxi]leave 20:00;destination Kings Street”即为MultiWOZ数据集(Budzianowski et al.,2018)中出现的一种对话状态,包含了用户对餐厅和出租车两个不同领域的需求信息。每一轮的对话状态B
t由当前轮次的用户语句U
t、上一轮的系统回复R
t-1、上一轮的对话状态B
t-1和用户语句的改写
共同决定:
注意到,我们在语句改写模型的改写语句解码器和对话生成模型的对话状态解码器之间也加入了注意(attention)机制,从而对话生成模型在解码对话状态时还可以关注到原用户语句的改写。改写语句作为一种释义(这也是paraphrase的本义),辅助了对话生成模型理解输入的用户语句,从而可以提升解码对话状态的准确率。同时,由于语句改写模型和对话生成模型之间存在注意机制,对话生成模型的各种解码结果还可以监督语句改写模型的训练,这实现了端到端系统的搭建以及多模型的联合训练。
在步骤S9中,系统根据更新后的对话状态在数据库中进行查询,达到查询结果的one-hot编码向量DBt。
在步骤S10中(仅针对使用DAMD作为对话生成模型),数据库查询结果DBt、对话状态Bt和用户语句Ut将输入第二个解码器——系统对话动作解码器(Action Span Decoder),用于解码当前系统应采用的对话动作At:
At=seq2seq(Ut,Bt,DBt)
在步骤S11中,我们使用最后一个解码器——自然语言回复解码器(ResponseDecoder),基于之前的解码结果生成系统的自然语言回复Rt。
对于使用TSCP作为对话生成模型的系统,这一过程可表示为:
Rt=seq2seq(Ut,Bt,DBt)
对于使用DAMD作为对话生成模型的系统,这一过程可表示为:
Rt=seq2seq(At,Ut,Bt,DBt)
在seq2seq模型框架下,对话生成模型的编码器与解码器以及不同的解码器之间存在有拷贝(copy)机制,这使得该模型的各个解码器都可以从用户语句表达中拷贝其对属性槽取值的要求(例如从“我要找便宜的餐馆”中拷贝“价格=便宜”),以及其包含的属性槽名称和领域指示符等信息,从而以更高的准确率完成自然语言理解、对话状态跟踪、对话动作预测和系统回复生成。
在步骤S12中,为了将系统生成的回复更好地呈现给用户,提升系统的用户体验,需要进行单词合并、添加标点等操作。
PARG在进行模型训练时,所有的seq2seq结构都采用有监督训练的方式。我们使用步骤(S1)中匹配到的参考改写语句,以及数据集中提供的标准系统回复和对话状态、系统对话动作标签作为训练参考,并计算它们与解码器生成的概率分布之间的交叉熵,之后将各个交叉熵相加得到最终的损失函数,进行端到端的联合优化。
本发明专利属于对话系统及数据科学领域,涉及一种基于语句改写的面向端到端对话的数据增强方法。
PARG在CamRest676(Wen et al.,2017)数据集和MultiWOZ(Budzianowski etal.,2018)数据集上的评测中,分别有效地提升了目前表现最好的TSCP模型和DAMD模型的性能。同时,它击败了一系列现有的可以应用于对话数据增强的方法,包括稀有词替换WordSub(Fadaee et al.,2017)、文本域替换TextSub(Yin et al.,2019)、参考语句替换UtterSub(直接用训练参考改写语句替换原用户语句)、噪声自动编码器改写NAEPara(Liet al.,2019a;Kurata et al.,2016)、SR-PB释义模型改写SRPara(Wang et al.,2019)。并且,在训练数据稀缺的条件下,PARG对于对话生成模型的性能提升效果尤为明显。
CamRest676数据集包含了“寻找餐厅”这一对话场景的676个对话样本,是评测单领域任务型对话系统的标准数据集之一。在该数据集上的评测结果见表1。可以看出,PARG在不损害语言流畅度(用BLEU得分表征)的条件下,有效地提升了TSCP模型对话状态分析的准确率和对话任务的完成率,且相比于其它的数据增强方法,PARG对于模型的性能提升效果最为明显。为了模拟训练数据稀缺的条件,我们还仅使用了50%的原有数据作为初始的训练样本,并重新进行评测。从评测结果可以看出,PARG对于TSCP模型的状态分析准确率和对话任务完成率的提升,分别由1.6%和0.7%上升到了5.5%和3.6%,并仍然优于其它数据增强方法。同时可以看出,应用PARG的TSCP模型仅需使用50%的原有数据作为训练样本,便可以达到与原TSCP模型相近的对话任务完成率,即约85.4%。
MultiWOZ数据集包含了七个对话场景的10438个对话样本,是评测多领域任务型对话系统的标准数据集之一。在该数据集上的评测结果见表2。同样可以看出,PARG在不损害语言流畅度的条件下,有效地提升了DAMD模型的查找准确率和对话完成率,并令其取得了最高的综合得分,击败了其它的数据增强方法。当我们仅使用50%的原有数据时,PARG对于DAMD模型的查找准确率和对话完成率的提升,分别由1.6%和3.1%上升到了4.8%和3.9%,且提升效果仍然优于其它数据增强方法。另外,应用PARG的DAMD模型可以仅使用50%的训练数据,就达到比原DAMD模型更好的对话完成率。
综合以上实验结果,我们验证了PARG在解决对话生成模型训练数据稀缺问题中的有效性。它适用于如TSCP和DAMD模型这样的,包含对话状态跟踪模块的对话生成模型,并可以实现端到端系统的搭建,是目前面向对话生成任务的最佳数据增强方法。
表1 PARG与现有数据增强方法在CamRest676数据集上的测试结果比较
表2 PARG与现有数据增强方法在MultiWOZ数据集上的测试结果比较
下面将结合本发明的具体内容,对本发明的一种实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例公开了一种基于语句改写的面向端到端对话的数据增强方法。假设在某一轮对话中,用户输入为“我想找一家便宜的餐厅吃饭”,相应的,前一轮的系统回复(在后处理之前)为“您好有什么可以为您服务的”,以此为例,本发明通过以下步骤来进行实施:
(S1)对输入的用户语句进行预处理,即分词、正规化等操作。处理后的结果为:“我想找一家便宜的餐厅吃饭”。
(S2)对输入的用户语句以及前一轮系统回复进行编码,得到语句的向量表示。
(S3)根据上一步编码结果解码前一轮系统对话动作,输出为“问候”。
(S4)根据步骤(2)编码结果和前一轮系统对话动作,解码改写后的用户语句,这里一个可行输出为“可以帮我寻找一家便宜的餐馆吗”。
(S5)将输入的用户语句,连同前一轮系统回复和前一轮对话状态(在本实施例中,由于用户语句是首轮输入,前一轮的对话状态为空)重新进行编码,获得向量表示。
(S6)根据上一步编码结果和步骤(4)语句改写的解码结果,进行对话状态解码,输出为“[餐厅]价格便宜”。
(S7)根据对话状态,在数据库中查询符合要求的实体。例如,数据库中查询到有15个餐厅满足“价格=便宜”的限制条件,则返回“15”对应的向量表示作为数据库的查询结果。
(S8)根据对话状态解码结果和数据库查询结果进行系统对话动作的解码。这里一个可行的系统动作为:“[餐厅][问询]菜系”。(仅针对于模型DAMD,模型TSCP可跳过此步骤)
(S9)根据之前所有的编解码和查询结果,生成系统的自然语言回复,例如“请问您希望吃哪种菜”。
(S10)对生成的回复进行后处理,即单词合并、添加标点等,得到呈现给用户的自然语言回复:“请问您希望吃哪种菜?”。
以下是对这十个步骤实现原理的解释说明。
我们通过定义用户语句的对话功能来构造用户语句改写的训练参考。一个用户语句的对话功能包含三个部分:前一轮系统对话动作(previous system action),表示系统在上一轮对话当中的历史行为,如“问候”、“询问-菜系”等;对话领域(domain),即对话所涉及到的主题,如“餐厅”、“旅馆”等;用户语句中提及到的属性槽(slots mentioned),即用户语句中的关键词类型,如“地点”、“食物”等。我们认为对话功能相同的用户语句,包含有相同的用户意图且处于相同的对话语境,因而在属性值(提及的关键词)相同的条件下,可以在一段对话中相互替换,并作为彼此的改写参考。因此,我们通过搜索原始对话文本,为每一个用户语句(原始语句)匹配到另一个对话功能相同的用户语句(参考语句),并将匹配到的参考语句中的属性值(关键词)修改为与原始语句中的相同,如将“昂贵”改为“便宜”,将“中国菜”改为“越南菜”等,以此构造出每个用户语句的改写参考。对话功能的示例见图1。
在应用对话数据增强方法PARG的对话系统中,我们联合训练了一个语句改写模型和一个对话生成模型。两模型都采用基于序列到序列(seq2seq)的框架,由一个对话上下文编码器(encoder)和多个串联的解码器(decoder)组成。具体而言:语句改写模型包含系统对话动作解码器和改写语句解码器;而对话生成模型则有两种,TSCP模型包含对话状态解码器和自然语言回复解码器,而DAMD模型则在TSCP模型的两解码器之间又加入了一个系统对话动作解码器。应用PARG的对话系统的结构见图2(图中的对话生成模型使用的是TSCP模型)。
在步骤(S1)中,我们首先对输入的用户语句进行分词(针对中文没有自然分隔符的特点),再将其送入语句改写模型的上下文编码器。
在步骤(S2)中,我们将前一轮系统回复和输入的用户语句串联为自然语言单词序列(系统回复和用户语句间会加入一个分隔符),并使用一个层数为1、隐层神经元数量为50(针对使用TSCP进行对话生成)或100(针对使用DAMD进行对话生成)的双向GRU模型作为编码器,将该单词序列编码为等长的向量序列,称为隐状态。编码过程实现了在隐状态空间融合并理解对话中包含的语义信息。该编码器的输出结果将依次送到语句改写模型的两个解码器,用于后续模型输出的解码。
在步骤(S3)中,语句改写模型通过系统对话动作解码器(Action Decoder)进行前一轮系统对话动作At-1的解码。这里的系统对话动作使用自然语言序列加以表示,如“餐厅-告知-价格;综合-是否继续”可以表示为“[餐厅]告知价格[综合]是否继续”。我们认为前一轮系统对话动作与前一轮系统回复Rt-1直接相关,并且可用当前轮次用户语句Ut进行反向推演,因而我们基于此两者的编码结果解码出前一轮系统对话动作:
At-1=seq2seq(Rt-1,Ut)
在步骤(S4)中,语句改写模型通过改写语句解码器(Paraphrase Decoder)进行改写语句
的解码,改写语句与原用户语句U
t含义相同,但表述方式有区别,如“我需要一家便宜的餐馆”和“请帮助我找到一个餐厅,并确保它是便宜的”。改写语句与原用户语句U
t直接相关,并且受到前一轮系统回复R
t-1和系统对话行为A
t-1的影响,因此我们基于此三者解码出改写语句:
注意到,我们在语句改写模型的系统对话动作解码器和改写语句解码器之间加入了注意(attention)机制,从而模型在解码改写语句时还可以关注到前一轮系统的对话行为,使得生成的改写语句与前一轮系统回复衔接得更加连贯,更加符合对话语境。
在语句改写模型中,通过应用seq2seq框架下编码器与解码器之间的拷贝(copy)机制,可以从前一轮系统回复中拷贝与系统对话行为直接相关的信息,如从“这家餐厅价格昂贵”中拷贝“餐厅”和“价格”,也可以从用户语句中拷贝用于构建改写语句的属性值(关键词),如从“我要寻找一家便宜的餐厅”中拷贝“便宜”。因此,这种框架可以提高解码系统对话行为和改写语句的准确率。
在步骤(S5)中,我们将对话生成模型在前一轮解码出的系统回复和对话状态,连同当前输入的用户语句,重新串联为自然语言单词序列,并送入对话生成模型编码器进行重新编码。我们仍使用层数为1、隐层神经元数量为50(针对使用TSCP进行对话生成)或100(针对使用DAMD进行对话生成)的双向GRU模型作为编码器。该编码器的输出结果将依次送到对话生成模型的解码器,用于后续模型输出的解码。
在步骤(S6)中,基于步骤(S5)的编码结果和步骤(S4)的解码输出,我们通过对话生成模型的第一个解码器——对话状态解码器(Belief Span Decoder)进行对话状态的解码。对话状态使用自然语言序列表示,其具体形式为:“[领域1]属性槽1槽值1;属性值2槽值2;[领域2]…”,例如“[restaurant]name Curry Garden;time 18:00[taxi]leave 20:00;destination Kings Street”即为MultiWOZ数据集(Budzianowski et al.,2018)中出现的一种对话状态,包含了用户对餐厅和出租车两个不同领域的需求信息。每一轮的对话状态B
t由当前轮次的用户语句U
t、上一轮的系统回复R
t-1、上一轮的对话状态B
t-1和用户语句的改写
共同决定:
注意到,我们在语句改写模型的改写语句解码器和对话生成模型的对话状态解码器之间也加入了注意(attention)机制,从而对话生成模型在解码对话状态时还可以关注到原用户语句的改写。改写语句作为一种释义(这也是paraphrase的本义),辅助了对话生成模型理解输入的用户语句,从而可以提升解码对话状态的准确率。同时,由于语句改写模型和对话生成模型之间存在注意机制,对话生成模型的各种解码结果还可以监督语句改写模型的训练,这实现了端到端系统的搭建以及多模型的联合训练。
在步骤(S7)中,系统根据更新后的对话状态在数据库中进行查询,达到查询结果的one-hot编码向量DBt。
在步骤(S8)中(仅针对使用DAMD作为对话生成模型),数据库查询结果DBt、对话状态Bt和用户语句Ut将输入第二个解码器——系统对话动作解码器(Action Span Decoder),用于解码当前系统应采用的对话动作At:
At=seq2seq(Ut,Bt,DBt)
在步骤(S9)中,我们使用最后一个解码器——自然语言回复解码器(ResponseDecoder),基于之前的解码结果生成系统的自然语言回复Rt。
对于使用TSCP作为对话生成模型的系统,这一过程可表示为:
Rt=seq2seq(Ut,Bt,DBt)
对于使用DAMD作为对话生成模型的系统,这一过程可表示为:
Rt=seq2seq(At,Ut,Bt,DBt)
在seq2seq模型框架下,对话生成模型的编码器与解码器以及不同的解码器之间存在有拷贝(copy)机制,这使得该模型的各个解码器都可以从用户语句表达中拷贝其对属性槽取值的要求(例如从“我要找便宜的餐馆”中拷贝“价格=便宜”),以及其包含的属性槽名称和领域指示符等信息,从而以更高的准确率完成自然语言理解、对话状态跟踪、对话动作预测和系统回复生成。
在步骤(S10)中,为了将系统生成的回复更好地呈现给用户,提升系统的用户体验,需要进行单词合并、添加标点等操作。
PARG在进行模型训练时,所有的seq2seq结构都采用有监督训练的方式。我们使用匹配到的参考改写语句,以及数据集中提供的标准系统回复和对话状态、系统对话动作标签作为训练参考,并计算它们与解码器生成的概率分布之间的交叉熵,之后将各个交叉熵相加得到最终的损失函数,进行端到端的联合优化。
以上所示的一种基于语句改写的面向端到端对话的数据增强方法是本发明的具体实施例,已经体现出本发明实质性特点和进步,可根据实际的使用需要,在本发明的启示下,对其进行形状、结构等方面的等同修改,均在本方案的保护范围之列。