发明内容
本发明的目的是提供一种机器语言生成方法及装置,以避免现有技术在输出的生成上不可控、模板痕迹明显、用户体验差等现象,使得生成的机器语言的句子灵活多变,没有模板痕迹,符合预定的框架。
为了实现上述目的,本发明技术方案如下:
一种机器语言生成方法,所述机器语言生成方法包括:
接收输入语句,根据预设的框架模型得到输入语句对应的框架列表;
将输入语句输入到预设的语言生成模型,生成符合框架列表中任一框架的回复语句输出。
本发明的一种实现方式,所述将输入语句输入到预设的语言生成模型,生成符合框架列表中任一框架的回复语句输出,包括:
将输入语句输入到预设的语言生成模型,开始逐步生成回复语句,每一步骤根据上文生成下文,所有生成的下文组成回复语句,记录每一步骤中所有候选下文对应的概率;
判断生成的回复语句是否符合输入语句对应的框架列表中的任一框架,如果符合则输出该回复语句作为输入语句对应的回复,否则进入下一步;
从所有步骤对应的未选择过的候选下文中选择概率最高的候选下文,作为其对应的步骤所选择的下文,继续逐步生成回复语句,返回到上一步骤继续进行判断。
本发明的另一种实现方式,所述将输入语句输入到预设的语言生成模型,生成符合框架列表中任一框架的回复语句输出,包括:
将输入语句输入到预设的语言生成模型,开始逐步生成回复语句,每一步骤根据上文生成下文,所有生成的下文组成回复语句,记录每一步骤中所有候选下文对应的概率;
判断生成的回复语句是否符合输入语句对应的框架列表中的任一框架,如果符合则输出该回复语句作为输入语句对应的回复,否则进入下一步;
查询所有步骤对应的未选择过的候选下文中是否包含框架中的核心词,如果有,则选择该核心词作为选择的下文,继续逐步生成回复语句,返回到上一步骤继续进行判断,否则选择概率最高的候选下文,作为其对应的步骤所选择的下文,继续逐步生成回复语句,返回到上一步骤继续进行判断。
进一步地,所述候选下文对应的概率由语言生成模型计算得到,表示在上文情况下生成本候选下文的概率。
进一步地,所述预设的框架模型和语言生成模型,是预先通过对问答对语料进行学习后得到。
进一步地,所述对问答对语料进行学习,采用的语言模型包括基于统计的ngram语言模型、或基于深度学习的神经网络语言模型、或基于encoder-decoder的神经网络模型。
本发明还提出了一种机器语言生成装置,所述机器语言生成装置包括:
框架生成模块,用于接收输入语句,根据预设的框架模型得到输入语句对应的框架列表;
语句生成模块,将输入语句输入到预设的语言生成模型,生成符合框架列表中任一框架的回复语句输出。
进一步地,所述语句生成模块在将输入语句输入到预设的语言生成模型,生成符合框架列表中任一框架的回复语句输出时,执行如下操作:
将输入语句输入到预设的语言生成模型,开始逐步生成回复语句,每一步骤根据上文生成下文,所有生成的下文组成回复语句,记录每一步骤中所有候选下文对应的概率;
判断生成的回复语句是否符合输入语句对应的框架列表中的任一框架,如果符合则输出该回复语句作为输入语句对应的回复,否则进入下一步;
从所有步骤对应的未选择过的候选下文中选择概率最高的候选下文,作为其对应的步骤所选择的下文,继续逐步生成回复语句,返回到上一步骤继续进行判断。
或,所述语句生成模块在将输入语句输入到预设的语言生成模型,生成符合框架列表中任一框架的回复语句输出时,执行如下操作:
将输入语句输入到预设的语言生成模型,开始逐步生成回复语句,每一步骤根据上文生成下文,所有生成的下文组成回复语句,记录每一步骤中所有候选下文对应的概率;
判断生成的回复语句是否符合输入语句对应的框架列表中的任一框架,如果符合则输出该回复语句作为输入语句对应的回复,否则进入下一步;
查询所有步骤对应的未选择过的候选下文中是否包含框架中的核心词,如果有,则选择该核心词作为选择的下文,继续逐步生成回复语句,返回到上一步骤继续进行判断,否则选择概率最高的候选下文,作为其对应的步骤所选择的下文,继续逐步生成回复语句,返回到上一步骤继续进行判断。
本发明提出了一种机器语言生成方法及装置,通过学习得到语言生成模型和框架模型,然后结合学习到的语言生成模型对输入的上文进行解码,生成符合框架模型的下文输出。本发明的回复语句中,核心词或者框架为固定部分,其余词汇为可变部分。与传统人工构造模板不同,传统人工构造模板的方式是构造的模板的描述部分固定,核心词为可变部分,在生成回复语句时,通过填入不同的核心词来进行回答,生成的句子模板痕迹严重。
本发明无需人工构造模板,节省人力物力。生成的句子灵活多变,没有模板痕迹,句子符合预定的框架或者句子中会出现指定的核心词,给用户良好的使用体验。
具体实施方式
下面结合附图和实施例对本发明技术方案做进一步详细说明,以下实施例不构成对本发明的限定。
如图1所示,本实施例机器语言生成方法,包括:
步骤S1、接收输入语句,根据预设的框架模型得到输入语句对应的框架列表。
本实施例的方法预设有框架模型和语言生成模型。
其中框架模型、语言生成模型包括但不限于基于统计的ngram语言模型、基于深度学习的神经网络语言模型,或基于encoder-decoder的神经网络模型等,通过大量训练样本,例如大量的问答对语料,或其他用来训练的语料,来学习得到所需要的框架模型和语言生成模型。
其中语言生成模型的学习过程就是统计或者计算,在当前已知的上文(可能是短距离的字词,也可能是长距离的段落)的情况下,哪些下文(词或者字)的概率最大。
问答对语料是用来进行语言生成模型学习的训练样本,例如如下问答对:
例句1、Question:今天是几号?Answer:15号。
例句2、Question:今天是几号?Answer:今天是15号。
通过学习得到的语言生成模型,能根据输入的上文,输出相应的下文,具体生成的方法后面再详细描述。
类似地,框架模型的学习过程通过同样的学习方法对大量问答对语料的学习,得到框架模型。通过学习得到的框架模型,能根据输入语句,得出相应的回复语句对应的框架。
例如,输入语句Q为:今天是几号?
其回复语句对应的框架可能是:
F1:<TODAY>是<DATE>哦。(其中<TODAY>……<DATE>是框架)
F2:我想想哈,<DATE>好像是…。(其中<DATE>是框架)
本实施例将所有可能的框架F1和F2统称为输入语句对应的框架列表F,F包括F1和F2。回复语句对应的框架是指回复语句应该包括的核心词及核心词的前后关系结构。例如框架F1:<TODAY>……<DATE>中,<TODAY>和<DATE>为核心词;框架F2:<DATE>中,<DATE>就是核心词。
步骤S2、将输入语句输入到预设的语言生成模型,生成符合框架列表中任一框架的回复语句输出。
为使得生成的回复语句句子通顺,又能够将框架放入句子中,即在包含框架的前提下最通顺。语言生成模型在生成回复语句时,逐步根据上文来产生下文,由产生的下文来组成回复语句。根据上文生成一个下文称为一步,在每一步中,根据上文产生多个候选下文及其对应的概率,选择概率最大的候选下文作为获选下文,将其编入到回复语句中。
下面通过实施例来详细描述生成回复语句的过程,包括:
1)、将输入语句输入到预设的语言生成模型,开始逐步生成回复语句,每一步骤根据上文生成下文,所有生成的下文组成回复语句,记录每一步骤中所有候选下文对应的概率。
将输入语句输入到预设的语言生成模型,本实施例定义Q为输入语句,Q为“今天是几号?”,<s>为回复语句的开始符号,也就是生成的起点,</s>为回复语句的结束,是生成的终点。详细生成过程如下:
从<s>开始生成
步骤a:
上文:Q<s>;
候选下文:我(0.5),<TODAY>(0.3),你(0.2);
得到回复语句:<s>我。
其中,候选下文后面的括号内的数字为在上文情况下生成本候选下文的概率,即在该上文情况下,生成下一个词(下文)的概率,表示为P(next|context),概率P(next|context)由语言生成模型计算得到。
在该步骤中,输入的上文为“今天是几号?”,假设语言生成模型产生的候选下文为“我(0.5),<TODAY>(0.3),你(0.2)”,候选下文后面的括号内的数字为在上文情况下生成本候选下文的概率,其中根据上文“今天是几号?”生成下文“我”的概率是0.5,生成<TODAY>的概率是0.3,生成“你”的概率是0.2。关于语言生成模型根据上文生成候选下文,后面不再赘述。
可见候选下文中“我”的概率最高,因此语言生成模型选择“我”作为下文,进入下一步继续生成后一个词。
步骤b:
上文:Q<s>我;
候选下文:</s>(0.4),是(0.2),你(0.1)…;
得到回复语句:<s>我</s>。
上一步生成了回复语句的第一个词,语言生成模型根据上文:“今天是几号?”、“我”继续生成下文,假设语言生成模型产生的候选下文为:</s>(0.4),是(0.2),你(0.1),选择其中概率最高的为下文,所选择的下文为:</s>。
至此,已经到了句子结尾</s>,产生了回复语句:<s>我</s>,开始进入下一步判断是否符合框架列表F里面的任意框架。
2)、判断生成的回复语句是否符合输入语句对应的框架列表中的任一框架,如果符合则输出该回复语句作为输入语句对应的回复,否则进入下一步。
具体地,得到的回复语句:<s>我</s>,与框架列表F中任一框架都不符合,因此判断为结果不符合,需要进入下一步。而如果符合,则直接输出该回复语句作为输入语句对应的回复。
3)、从所有步骤对应的未选择过的候选下文中选择概率最高的候选下文,作为其对应的步骤所选择的下文,继续逐步生成回复语句,返回到步骤2)。
由于第一次生成的回复语句与框架列表中的任一框架都不符合,需要重新生成回复语句。从所有步骤对应的未选择过的候选下文中选择概率最高的候选下文,作为其对应的步骤所选择的下文。
第一次生成回复语句时,包括两个步骤,步骤a中未选择过的候选下文为:<TODAY>(0.3),你(0.2);步骤b中的未选择过的候选下文为:是(0.2),你(0.1)。其中<TODAY>(0.3)对应的概率最高,因此选择<TODAY>(0.3)作为步骤a所选择的下文,继续逐步生成回复语句,步骤如下:
步骤a:
上文:Q<s>;
候选下文:我(0.5),<TODAY>(0.3),你(0.2);
得到回复语句:<s><TODAY>;
步骤b:
上文:Q<s><TODAY>;
候选下文:是(0.6),有(0.2);
得到回复语句:<s><TODAY>是;
步骤c:
上文:Q<s><TODAY>是;
候选下文:<DATE>(0.3),春天(0.1);
得到回复语句:<s><TODAY>是<DATE>;
步骤d:
上文:Q<s><TODAY>是<DATE>;
候选下文:</s>(0.7),天气(0.1);
得到回复语句:<s><TODAY>是<DATE></s>。
至此,发现</s>,已经到了句子结尾,生成回复语句为:<s><TODAY>是<DATE></s>。
返回到步骤2)进行判断,发现该回复语句符合框架列表中的框架F1,因此输出“<TODAY>是<DATE>”作为输入语句“今天是几号?”的答复,结束流程。
需要说明的是,如果第二次生成回复语句还没有成功匹配到框架,则需要继续从所有步骤对应的未选择过的候选下文中选择概率最高的候选下文,作为其对应的步骤所选择的下文,继续逐步生成回复语句,直至成功。
容易理解的是,上述方法一般来说能够产生符合框架列表的回复语句,但并非唯一的方法,为了快速的获得回复语句,在根据上文生成候选下文后,如果候选下文中包括框架中的核心词,则直接选择该核心词作为下文来生成回复语句。
例如:
步骤a:
上文:Q<s>;
候选下文:我(0.5),<TODAY>(0.3),你(0.2);
得到回复语句:<s><TODAY>。
即在步骤a中,由于候选下文包含框架中的核心词<TODAY>,因此直接选择该核心词来作为下文,而不是选择“我(0.5)”。
如果候选下文中不包括框架中的核心词,则从所有步骤对应的未选择过的候选下文中选择概率最高的候选下文,作为其对应的步骤所选择的下文,继续逐步生成回复语句,返回到步骤2),这里不再赘述。
本实施例语言生成模型在生成回复语句时,逐步根据上文生成多个候选下文,选择概率最大的候选下文作为获选下文,从而保证了生成的回复语句的通顺。同时,与框架模型产生的框架相结合,保证了回复语句包含了一定的固定结构(框架)。即使得回复语句在包含框架的前提下又非常通顺,从而采用本方法的人工语音助手的回复更加符合语意和人类的自然语言,给人更好的体验。
如图2所示,本实施例一种机器语言生成装置,该机器语言生成装置包括:
框架生成模块,用于接收输入语句,根据预设的框架模型得到输入语句对应的框架列表;
语句生成模块,将输入语句输入到预设的语言生成模型,生成符合框架列表中任一框架的回复语句输出。
一种实施例,语句生成模块在将输入语句输入到预设的语言生成模型,生成符合框架列表中任一框架的回复语句输出时,执行如下操作:
将输入语句输入到预设的语言生成模型,开始逐步生成回复语句,每一步骤根据上文生成下文,所有生成的下文组成回复语句,记录每一步骤中所有候选下文对应的概率;
判断生成的回复语句是否符合输入语句对应的框架列表中的任一框架,如果符合则输出该回复语句作为输入语句对应的回复,否则进入下一步;
从所有步骤对应的未选择过的候选下文中选择概率最高的候选下文,作为其对应的步骤所选择的下文,继续逐步生成回复语句,返回到上一步骤继续进行判断。
另一种实施例,语句生成模块在将输入语句输入到预设的语言生成模型,生成符合框架列表中任一框架的回复语句输出时,执行如下操作:
将输入语句输入到预设的语言生成模型,开始逐步生成回复语句,每一步骤根据上文生成下文,所有生成的下文组成回复语句,记录每一步骤中所有候选下文对应的概率;
判断生成的回复语句是否符合输入语句对应的框架列表中的任一框架,如果符合则输出该回复语句作为输入语句对应的回复,否则进入下一步;
查询所有步骤对应的未选择过的候选下文中是否包含框架中的核心词,如果有,则选择该核心词作为选择的下文,继续逐步生成回复语句,返回到上一步骤继续进行判断,否则选择概率最高的候选下文,作为其对应的步骤所选择的下文,继续逐步生成回复语句,返回到上一步骤继续进行判断。
以上实施例仅用以说明本发明的技术方案而非对其进行限制,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。