一种基于意图理解的服务调用方法和系统与流程

文档序号:16068446发布日期:2018-11-24 12:54阅读:248来源:国知局
本发明涉及任务型对话系统
技术领域
,特别涉及一种基于意图理解的服务调用方法和系统。
背景技术
任务型对话系统可以根据用户提出的请求,完成相应的任务,如买票、订餐、购物、天气查询等,广泛应用在苹果siri、微软cortana、百度度秘等语音助手中。其处理流程主要包括四部分:语音识别、意图理解、对话管理、自然语言生成;其中,意图理解将用户输入的非结构化请求文本转换为结构化的语义表示,对话管理根据意图理解的结果和上下文语境等因素调用服务;由此可知,基于意图理解的服务调用是任务型对话系统的核心。意图理解输出的结构化语义表示包括三部分:域、意图、槽;其中,域(domain)是用户请求的范围,意图(intent)是用户请求的类型,槽(slot)是刻画用户请求的实体。例如,在请求“订一张上海飞北京的头等舱,下午五点出发”中,域是“订票”、意图是“飞机”、槽是“出发地=上海、目的地=北京、时间=下午五点”。域、意图和槽构成结构化语义的层次结构。其中,每种意图都有对应的服务程序,将“槽”中的实体转换为参数,调用服务程序即可处理用户请求。除了切换系统外,“域”在同一个系统中通常不发生变化,所以意图理解的主要工作是意图分类和实体识别。常用方法包括下述3种:(1)基于规则的方法使用关键词/正则表达式匹配来判定意图类型,同时抽取实体。这种方法灵活、简单,不需要训练数据;但需要大量的规则,随着规则的增加,维度难度也随之上升。(2)基于传统机器学习的方法首先,在语料中标注出实体和意图类型;然后,根据实体标注结果,通过hmm、crf等方法训练出实体识别器;随后,根据语料特征和意图类型,通过svm、lr等传统机器学习方法生成意图分类器。该方法源于数据驱动,具有一定的泛化能力。但是该方法需要大量精确标注的语料,对于给定类型的意图而言,用户提问的方式有限,语料数量很少;任务型对话系统中的语料都是短文本,可供训练的特征不多;上述两方面影响了该方法的准确性。此外,传统机器学习程序具有“黑箱”特性,内部运行机理复杂、参数不易调整、结果可解释性较差。(3)基于深度学习的方法需要综合cnn、lstm、crf等多种方法,主要包括两部分内容,如下:a、构建意图分类器:首先,通过词汇向量化,将语料转换为向量;然后,将意图分类视为短文本分类,使用cnn训练向量化后的语料,生成意图分类模型。b、构建命名实体识别器:首先,通过数据预处理(分句、分词)工具处理输入语句,得到词汇特征向量;然后,使用cnn处理每个单词的字符,得到对应的字符特征向量;随后,组合词汇特征向量和字符特征向量,传入双向lstm网络进行训练,得到输入语句的信息特征;最后,将双向lstm输出的语句信息特征作为crf层的输入,使用crf模型进行训练,得到命名实体识别模型。该方法通过两级(词汇+字符)向量化+双向lstm的方式,获得了输入数据的信息特征,包括不同标签的概率转移矩阵,以及输入字符被标记为不同标签的概率,已经包含命名实体的标注信息,再通过最后的crf处理,可以准确抽取出命名实体。但是,这种方法用到cnn、lstm等神经网络模型,涉及相当复杂的数学知识,不易被普通使用者掌握;深度学习网络包含的层数和节点数极其庞大,运行速度很慢;本方法自身的“黑箱”特性导致其参数不易调整、可解释性较差。此外,任务型对话系统的语料较少,会影响深度学习的准确性。综上所述,在任务型对话系统的意图理解中,常用方法存在步骤复杂、不易调整、解释性差等问题;此外,语料数量少也会影响这些方法的准确性。基于上述情况,本发明设计了一种基于意图理解的服务调用方法和系统。技术实现要素:本发明为了弥补现有技术的缺陷,提供了一种简单高效的基于意图理解的服务调用方法和系统。本发明是通过如下技术方案实现的:一种基于意图理解的服务调用方法,其特征在于,包括以下步骤:s1:构建基础数据模型和处理工具,包括将实体名称转换为类型名称的基于字符索引的“实体->类型”映射表,获取常见类型实体名称的常用实体解析器和基于crf(conditionalrandomfield,条件随机场)模型的中文分词和词性标注器;s2:构建意图理解模型,包括基于crf模型的少量语料环境下命名实体识别器和基于命名实体类型标识符的意图分类模式;s3:使用意图理解模型处理用户请求,首先综合多种策略识别出实体,然后根据实体类型确定意图类型,最后执行服务调用。所述步骤s1中,构建基于字符索引的“实体->类型”映射表,具体包括以下步骤:s111:制作领域实体表,即同一类型下的实体名称列表,每种类型分别对应一张实体表;s112:制作同义词实体网,所述同义词实体网为图形结构,图中每个结点对应一个实体,结点名称就是实体名称,不同结点的名称不同,如果两个结点表示同一个实体,则二者互为同义词,用一条边连接二者;如果所有结点互为同义词,则它们构成全连通图;s113:构建“实体->类型”映射表,所述“实体->类型”映射表要体现1对多的关系,当同一个实体名称属于不同的类型时,采用符号“/”将对应的类型连接起来,具体构建步骤如下:s1131:新建“实体->类型”映射表;s1132:读取第1个同义词实体网的信息;s1133:获取实体的类型;s1134:访问该同义词实体网的每个结点,根据每个结点的名称构建由实体名称和实体类型构成的二元组,插入到“实体->类型”映射表;s1135:判断同义词实体网是否读取完毕,如果没有,转步骤s1136,否则转步骤s1137;s1136:读取下1个同义词实体网的信息,转步骤s1133;s1137:保存“实体->类型”映射表;s114:建立“实体->类型”映射表的字符索引;所述基于字符索引的“实体->类型”映射表,具有下述特征:s1141:若干名称中包含相同首字符的实体构成一棵树,表示对应实体到类型的映射关系;s1142:所有的树构成森林,实现基于字符索引的“实体->类型”映射功能;s1143:在每棵树中,非叶结点由单个汉字构成,从根结点到叶结点前驱的路径表示实体,路径结点的名称序列是实体的名称,叶结点表示对应实体的类型,其名称是实体的类型名称;s1144:森林和树都有方向,对任意一个非叶结点的前驱结点而言,它所有的子结点,都按照字典序在下面一层自左向右排列;s1145:由于同一实体可能会对应多种类型,所以允许非叶结点的前驱结点有多个子节点。所述步骤s1中,构建常用实体解析器用于识别命名实体识别器不易抽取的特殊类型实体,正则表达式如下:中文姓名:/^([a-za-z0-9\u4e00-\u9fa5\·]{1,10})$/时间:/^(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d$/电话:/^(0\d{2,3}[-|]?)?(\d{7,8})([-|]?\d{3,5})?$/。所述步骤s1中,采用《现代汉语语料库加工规范—词语切分与词性标注》规范中文分词和词性标注,同时采用crf++训练nlp(naturallanguageprocessing,自然语言处理)领域中的数据标注模型,构建基于crf模型的中文分词和词性标注器;在中文分词中,使用bems方式标记每个汉字字符:b表示分词开始,e表示分词结束,m表示分词中间,s表示单个分词;在中文词性标注中,采用《现代汉语语料库加工规范—词语切分与词性标注》规定的40种词性标记,同时在词性标记前面添加分词位置标记b、e、m或s;crf++在训练数据标注模模型的过程中,为了得到质量较好的中文分词和词性标注模型,需要设置不同的参数进行训练,得到若干模型,选择预测性能最好的,影响模型准确性的参数包括以下两个:a、-c:浮点型参数,默认是1,用于调节训练结果的拟合程度,数值过大会产生过拟合(在训练集上效果很好,测试集上效果很差,即泛化性很差)现象;b、-f:整数型参数,设置参与训练特征出现的最小次数,默认是1,当数据量很大时,仅出现1次的特征数量多达百万,全部参与运算的话,会带来严重的计算成本,此时需要增大该参数;同时,为了减少数据过拟合以及从有限数据中获取尽可能多的有效信息,对于每组f和c生成的模型,使用k折交叉验证评估其效果。所述步骤s2中,构建基于crf模型的少量语料环境下命名实体识别器,具体包括以下步骤:s211:对用户请求文本进行中文分词和词性标注,生成二元组列表语料;所述二元组列表语料,具有下述特征:s2111:每条用户请求文本对应一个二元组序列;s2112:序列元素由分词词汇和词性组成的二元组构成;s2113:按照用户请求文本的分词顺序排列序列元素;s212、在二元组列表语料中标注出实体及其类型,以及对应的意图类型,生成三元组列表语料;所述三元组列表语料,具有下述特征:s2121:每条用户请求文本对应一个三元组序列和一种意图类型;s2122:序列元素由分词、词性和实体类型构成的三元组序列构成;s2123:按照用户请求文本的分词顺序排列序列元素;s2124:在处理过程中,如果用户的某个标注结果,分词后成为多个词汇,则每个词汇都需要标注该命名实体对应的类型;s213:使用crf++训练三元组列表语料,生成命名实体识别器;在训练过程中,不断调整参数-c和-f,得到若干命名实体识别模型,使用k折交叉验证评估模型性能,最后选择识别效果最好的。所述步骤s2中,构建基于命名实体类型标识符的意图分类模式,所述意图分类模式是由若干[$命名实体类型名称]构成的字符串;具体包括以下步骤:s221:新建意图分类模式列表;s222:读取第1个三元组列表语料的信息;s223:获取实体类型序列r1;s224:将r1转换为字符串形式,相邻项之间用空格隔开,得到序列r2;s225:将序列r2中标注不是“o”的项前面加上“$”,然后在首尾加上中括号,得到序列r3;s226:剔除序列r3中标注为“o”的项,得到序列r4;s227:判断序列r4中是否存在多个相同的相邻项,如果存在,转步骤s228,否则转步骤s229;s228:保留序列r4中多个相同相邻项中的一项,其余相同项均删除,得到序列r5,转步骤s22a;s229:将序列r4直接赋值给序列r5;s22a:删除序列r5中相邻项之间的空格,得到序列r6;s22b:检索序列r6是否已经存在于意图分类模式列表中,如果不存在,转步骤s22c,否则转步骤s22d;s22c:将序列r6添加到意图分类模式列表中;s22d:判断三元组列表语料是否读取完毕,如果没有,转步骤s22e,否则转步骤s22f;s22e:读取下1个三元组列表语料的信息,转步骤s223;s22f:保存意图分类模式列表。所述步骤s3中,基于混合策略的实体识别,具体包括以下步骤:s311:使用基于crf模型的中文分词和词性标注器处理用户请求文本,得到二元组列表语料l1;s312:使用命名实体识别器从二元组列表语料l1中抽取出实体列表e1;s313:从二元组列表语料l1中删除和实体列表e1中实体对应的项,得到二元组列表语料l2;s314:判断实体列表e1是否存在多个类型相同且彼此相邻的实体,如果不存在,则转步骤s315,否则转步骤s316;s315:将实体列表e1直接赋值给实体列表e2,二元组列表语料l2直接赋值给二元组列表语料l3,转s31a;s316:将实体列表e1中多个类型相同且彼此相邻的实体按照顺序连接为1个实体,得到实体列表e2;s317:判断实体列表e1相邻同类型实体在二元组列表语料l1对应项之间的分词词汇是否包含虚词,如果不包含,转s318,否则转s319;s318:将二元组列表语料l2直接赋值给二元组列表语料l3,转s31a;s319:将二元组列表语料l2中对应的虚词项删除,得到二元组语料列表l3;s31a:从二元组列表语料l3中获取分词词汇序列,并转换为字符串形式,得到文本d1;s31b:使用“常用实体解析器”处理文本d1,得到实体列表e3;s31c:从文本d1中删除实体列表e3中的实体,得到文本d2;s31d:使用“基于字符索引的‘实体-类型’映射表”逐字符匹配文本d2,从中抽取出实体列表e4;s31e:计算实体列表e2、e3、e4的并集,并按照实体在二元组列表语料l1中的顺序进行排列,得到实体列表unione=e2∪e3∪e4;s31f:判断实体列表unione是否存在多个类型相同且彼此相邻的实体,如果不存在,转s31g,否则转s31h;s31g:将unione直接赋值给实体列表e,转s31i;s31h:将unione中多个类型相同且彼此相邻的实体按照顺序连接为1个实体,得到实体列表nonrepe;s31i:结束并返回实体列表nonrepe。所述步骤s3中,基于实体类型匹配的意图分类,具体包括以下步骤:s321:将用户请求文本中对应的实体名称替换为形如“$命名实体类型名称”的标识符;s322:判断用户请求文本是否存在对应多个类型的实体,如果不存在,转步骤s323,否则转步骤s324;s323:将替换后的结果直接赋值给文本t1,转步骤s325;s324:采用符号“/”将实体的多个类型名称连接起来,得到文本t1;s325:删除文本t1中非实体名称对应的文本,得到文本t2;s326:判断文本t2的类型标识符中是否存在符号“/”,如果不存在,转步骤s327,否则转步骤s328;s327:将t2直接赋值给序列文本nt1,转步骤s329;s328:对于文本t2中包含符号“/”的每个类型标识符,按照符号“/”将其分割为多个新的类型标识符,分别替换原先的类型标识符,从而得到序列文本nt1~ntp;s329:在意图分类模式列表中逐个搜索文本nti,i=1…p;s32a:如果p个文本的搜索结果均为空,转步骤s32e,否则转步骤s32b;s32b:判断返回的意图类型个数q是否等于1,不等于则转步骤s32c,否则转步骤s32d;s32c:将q个意图类型输出给用户,通过交互询问的方式确定用户的真实意图类型;s32d:结束并返回用户的意图类型;s32e:结束并提示意图分类失败。所述步骤s3中,执行服务调用,具体包括以下步骤:s331:根据意图分类结果,确定用户请求对应的服务处理程序g;s332:根据服务处理程序g中的参数类型和顺序,从实体列表nonrepe中抽取对应实体构成列表transe;s333:将列表transe作为参数传递给服务处理程序g;s334:执行服务处理程序g,响应用户的请求。一种基于意图理解的服务调用系统,其特征在于:包括基础数据模型和处理工具构建模块u1,意图理解模型构建模块u2和基于意图理解的用户请求处理模块u3;所述基础数据模型和处理工具构建模块u1用于生成基础数据模型和处理工具;所述意图理解模型构建模块u2用于生成意图理解模型;所述基于意图理解的用户请求处理模块u3用于分析用户请求并调用对应的服务程序;所述基础数据模型和处理工具构建模块u1,包括基于字符索引的“实体->类型”映射表构建部件u11,常用实体解析器构建部件u12和基于crf模型的中文分词和词性标注器构建部件u13;所述基于字符索引的“实体->类型”映射表构建部件u11用于生成基于字符索引的“实体->类型”映射表;所述基于字符索引的“实体->类型”映射表构建部件u11,包括领域实体表制作部件u111,同义词实体网制作部件u112,“实体->类型”映射表构建部件u113和字符->类型”映射表字符索引构建部件u114;所述领域实体表制作部件u111用于生成领域实体表;所述同义词实体网制作部件u112用于生成同义词实体网;所述“实体->类型”映射表构建部件u113用于生成“实体->类型”映射表;所述“字符->类型”映射表字符索引构建部件u114用于生成带有字符索引结构的“实体->类型”映射表。所述常用实体解析器构建部件u12用于生成常用实体解析器;所述基于crf模型的中文分词和词性标注器构建部件u13用于生成基于crf模型的中文分词和词性标注器;所述意图理解模型构建模块u2,包括基于crf模型的少量语料环境下命名实体识别器构建部件u21和基于命名实体识别类型标识符的意图分类模式构建部件u22;所述基于crf模型的少量语料环境下命名实体识别器构建部件u21用于生成基于crf模型的少量语料环境下命名实体识别器;所述基于crf模型的少量语料环境下命名实体识别器构建部件u21,包括:二元组列表语料制作部件u211,三元组列表语料制作部件u212和命名实体识别器构建部件u213;所述二元组列表语料制作部件u211用于生成二元组列表语料;所述三元组列表语料制作部件u212用于生成三元组列表语料;所述命名实体识别器构建部件u213用于生成命名实体识别器。基于命名实体识别类型标识符的意图分类模式构建部件u22用于生成基于命名实体识别类型标识符的意图分类模式;所述基于意图理解的用户请求处理模块u3,包括:基于混合策略的实体识别部件u31,基于实体类型匹配的意图分类部件u32和服务调用执行部件u33;所述基于混合策略的实体识别部件u31用于从用户请求文本中得到命名实体;所述基于混合策略的实体识别部件u31,包括基于crf模型的命名实体识别部件u311,基于常用实体解析器的命名实体识别部件u312和基于字符索引的“实体->类型”映射表的命名实体识别部件u313;所述基于crf模型的命名实体识别部件u311用于使用crf模型识别用户请求文本中的命名实体;所述基于常用实体解析器的命名实体识别部件u312用于使用常用实体解析器识别用户请求文本中的命名实体;所述基于字符索引的“实体->类型”映射表的命名实体识别部件u313用于使用基于字符索引的“实体->类型”映射表识别用户请求文本中的命名实体;所述基于实体类型匹配的意图分类部件u32用于确定用户的意图类型;所述基于实体类型匹配的意图分类部件u32,包括命名实体名称替换部件u321,意图分类模式匹配部件u322和真实意图类型交互询问部件u323;所述命名实体名称替换部件u321用户将用户请求文本转换为由若干[$命名实体类型名称]构成的字符串;所述意图分类模式匹配部件u322用于匹配已有的意图分类模式;所述真实意图类型交互询问部件u323用于从多种意图类型中选择出用户的真实意图类型。所述服务调用执行部件u33用于调用服务程序处理用户请求。本发明的有益效果是:该基于意图理解的服务调用方法和系统,通过匹配用户请求文本中的实体类型序列来判定意图类型,简单、可控、自然,易于工程化实现;在该过程中获取的实体可以供后面的服务调用使用,符合大规模应用中的流式处理需要;通过标注由分词词汇、词性和实体类型构成的三元组的方式生成高质量语料,提高了命名实体识别的准确率;对于命名实体识别器无法抽取的实体,通过“常用实体解析器”和“基于字符索引的‘实体-类型’映射表”进行获取,提高了用户请求文本中命名实体识别的召回率。附图说明附图1为本发明构建“实体->类型”映射表流程示意图。附图2为本发明基于字符索引的“实体->类型”映射表局部示意图。附图3为本发明构建基于命名实体类型标识符的意图分类模式流程示意图。附图4为本发明基于混合策略的实体识别流程示意图。附图5为本发明基于实体类型匹配的意图分类流程示意图。附图6为本发明基于意图理解的服务调用系统功能模块示意图。具体实施方式为了使本发明所要解决的技术问题、技术方案及有益效果更加清楚明白,以下结合实施例,对本发明进行详细的说明。应当说明的是,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。该基于意图理解的服务调用方法,包括以下步骤:s1:构建基础数据模型和处理工具;进一步,所述步骤s1中具体包括:s11:构建基于字符索引的“实体-类型”映射表;进一步,所述步骤s11中具体包括:s111:制作领域实体表;该表是同一类型下的实体名称列表。例如:“水果”实体表元素包括:苹果、香蕉、桃子、桔子、西瓜、……。除了“水果”外,还有很多实体类型,如:职业、疾病、香烟、城市、药材……,每种类型都对应一张实体表。s112:制作同义词实体网;该网是图形结构,图中每个结点对应一个实体,结点名称就是实体名称,不同结点的名称不同,如果两个结点表示同一个实体,则二者互为同义词,用一条边连接二者。如果所有结点互为同义词,则它们构成全连通图。例如:“香蕉”的同义词包括:金蕉、甘蕉、芎蕉、香牙蕉、蕉子、蕉果,则它们构成由7个结点组成的全连通图。在水果、药材、地点等类型的实体中,由于地域、历史等原因,广泛存在同义词现象。s113:构建“实体->类型”映射表;进一步,所述步骤s113中具体包括:s1131:新建“实体->类型”映射表;s1132:读取第1个同义词实体网的信息;s1133:获取实体的类型;s1134:访问该同义词实体网的每个结点,根据每个结点的名称构建二元组(实体名称,实体类型),插入到“实体->类型”映射表;s1135:判断同义词实体网是否读取完毕,如果没有,转s1136,否则转s1137;s1136:读取下1个同义词实体网的信息,转s1133;s1137:保存“实体->类型”映射表。同一个实体名称,可能会属于不同的类型,例如:“黄鹤楼”既可以是景点,也可以是香烟的名称,所以该映射表要体现“1对多”的关系。典型“实体->类型”映射表如表1所示:表1“实体->类型”映射表示例实体类型苹果水果济南城市丹参药材黄鹤楼景点/香烟……在表1中,实体“黄鹤楼”对应多种类型,采用符号“/”将这些类型连接起来。s114:建立“实体->类型”映射表的字符索引。构建“实体->类型”映射表的作用是将用户请求文本中的实体转换为类型,但不同的实体可能会具有相同的前缀,例如:黄山、黄石、黄芪、黄鹤楼、黄飞鸿、黄飞虎,采用如表1所示的二元组序列方式存放,一方面会由于相同前缀重复存储而浪费空间,另一方面会由于相同前缀重复匹配而耗费时间,所以采用如附图2所示的字符索引映射表进行存储。附图2所示的映射表有如下特征:a.若干名称中包含相同首字符的实体构成一棵树,表示对应实体到类型的映射关系;b.所有的树构成森林,实现基于字符索引的“实体->类型”映射功能;c.在每棵树中,非叶结点由单个汉字构成,从根结点到叶结点前驱的路径表示实体,路径结点的名称序列是实体的名称,叶结点表示对应实体的类型,其名称是实体的类型名称;d.森林和树都有方向,对任意一个非叶结点的前驱结点而言,它所有的孩子结点,都按照字典序在下面一层自左向右排列;e.由于同一实体可能会对应多种类型,所以允许非叶结点的前驱结点有多个孩子。s12:构建常用实体解析器;用于识别命名实体识别器不易抽取的某些特殊类型实体,如:时间、电话、人名、邮箱等。常用的形式是正则表达式,如下:中文姓名:/^([a-za-z0-9\u4e00-\u9fa5\·]{1,10})$/时间:/^(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d$/电话:/^(0\d{2,3}[-|]?)?(\d{7,8})([-|]?\d{3,5})?$/s13:构建基于crf模型的中文分词和词性标注器。条件随机场(conditionalrandomfield,crf)由johnlafferty等人在2001年提出,它是一种序列标注模型,能够对输入的序列进行标注,主要用于nlp(naturallanguageprocessing,自然语言处理)领域的分词、词性标注、命名实体识别等场景。crf++是takukudo于2005年用c++实现的条件随机场开源工具,综合性能最佳;因此,本发明采用crf++训练nlp领域中的数据标注模型。根据权威机构(如:微软亚洲研究院、北京大学、搜狗等)公开的大量中文分词和词性标注语料,使用crf++软件包进行训练,可以得到基于crf模型的中文分词和词性标注器。采用北京大学计算语言所1999年制定的《现代汉语语料库加工规范—词语切分与词性标注》规范中文分词和词性标注。在中文分词中,使用bems方式标记每个汉字字符,标识符包括4种:b表示分词开始,e表示分词结束、m表示分词中间、s表示单个分词。标记示例如下:引b进e外b来e物b种e破b坏e本b地e的s食b物m链e和s全b球e气b候e变s暖s。s在中文词性标注中,采用《现代汉语语料库加工规范—词语切分与词性标注》规定的40种词性标记,同时在词性标记前面添加分词位置标记(b\e\m\s)。以ns(地名)为例,bns、ens、mns分别标记地名词汇的开始字符、结束字符、中间字符,sns表示单个字符构成的地名。标记示例如下:伊bns拉mns克ens媒bn体en报bv道ev美sj英sj军bn舰en阻bv挠ev赴sv伊sj商bn船en。scrf++在训练模型过程中,需要调节相关参数,影响模型准确性的参数主要有下述两个:a、-c:浮点型参数,默认是1,用于调节训练结果的拟合程度,数值过大会产生过拟合(在训练集上效果很好,测试集上效果很差,即泛化性很差)现象。b、-f:整数型参数,设置参与训练特征出现的最小次数,默认是1,当数据量很大时,仅出现1次的特征数量多达百万,全部参与运算的话,会带来严重的计算成本,此时需要增大该参数。为了得到质量较好的中文分词和词性标注模型,需要设置不同的f和c进行训练,得到若干模型,选择预测性能最好的。为了减少数据过拟合,以及从有限数据中获取尽可能多的有效信息,对于每组f和c生成的模型,使用k折交叉验证评估其效果。s2:构建意图理解模型;进一步,所述步骤s2中具体包括:s21:构建基于crf模型的少量语料环境下命名实体识别器;crf模型属于序列标注模型,不同的标注方式下训练得到的模型,准确性存在差异。在任务型对话系统意图理解中,语料数量很少。通过模拟少量对话语料进行训练,通过比较5种标注方式(包括:三元组(词汇、词性、实体类型)、三元组(汉字字符、带有分词标记的词性、带有分词标记的实体类型)、三元组(汉字字符、分词标记、带有分词标记的实体类型)、二元组(汉字字符、带有分词标记的实体类型)、二元组(词汇、实体类型))的效果,发现三元组(词汇、词性、实体类型)标注的准确性最好;采用这种方式标注用户请求文本,并使用crf++生成的命名实体识别器,可以根据词汇和其词性,推测该词汇对应的实体类型。进一步,所述步骤s21中具体包括:s211:对用户请求文本进行中文分词和词性标注,生成二元组列表语料;二元组列表语料是由分词和词性构成的二元组序列。以“我想查询苹果在山东省去年下半年的销售情况?”为例,对应结果如表2所示:表2二元组列表语料示例分词词性我r想vd查询v苹果n在p山东省ns去年t下半年t的u销售a情况n?ws212:在二元组列表语料中标注出实体及其类型,以及对应的意图类型,生成三元组列表语料;命名实体的类型一般划分为7类:人名、地名、机构名、时间、日期、货币和百分比,其标记分别为:person、location、organization、time、date、money和percent。在实际应用中,这种通用分类方式不易描述特定领域中的特定类别。在基于意图理解的服务调用中,所涉及任务的领域细分性很强,如票务、餐饮、食品、天气、药材等,因此本发明对这些细分类型单独定义,如:水果、景点、香烟等。此外,由于所处理文本基本是中文,为了便于实体管理,其类型名称标注为中文。在本发明中,由分词、词性和实体类型构成的三元组序列,称为三元组列表语料;每条语料对应一种意图类型。例如:在“水果查询”域中,定义三种意图类型:水果价格、水果销量、其它,语料标注示例如下:语料1:我想查询苹果在山东省去年下半年的销售情况?意图类型是:水果销量,对应三元组列表语料如表3所示:表3三元组列表语料示例1分词词性实体我ro想vdo查询vo苹果n水果在po山东省ns地点去年t时间下半年t时间的uo销售a销量情况n销量?wo语料2:请帮我查一下香蕉今年上半年在湖北省的售价?意图类型是:水果价格,对应三元组列表语料如表4所示:表4三元组列表语料示例2分词词性标注请vdo帮vo我ro查vo一下do香蕉n水果今年t时间上半年t时间在po湖北省ns地点的uo售价n价格?wo语料3:请查询38760987号快递的当前状态??意图类型是:其它,没有对应的服务程序,不会进行服务调用,不需要标注。在处理过程中,如果用户的某个标注结果,分词后成为多个词汇,则每个词汇都需要标注,如表3中的“去年、下半年”和“销售、情况”。s213:使用crf++训练三元组列表语料,生成命名实体识别器。和s13相似,在训练过程中,不断调整参数-c和-f,得到若干命名实体识别模型,使用k折交叉验证评估模型性能,最后选择识别效果最好的。s22:构建基于命名实体类型标识符的意图分类模式。本步骤生成全部由命名实体类型标识符构成的意图分类模式,如:[$水果][$地点][$时间][$销量]。进一步,所述步骤s22中具体包括:s221:新建意图分类模式列表;s222:读取第1个三元组列表语料的信息;s223:获取实体类型序列r1;s224:将r1转换为字符串形式,相邻项之间用空格隔开,得到序列r2;s225:将r2中标注不是“o”的项前面加上“$”,然后在首尾加上中括号,得到序列r3;s226:剔除r3中标注为“o”的项,得到序列r4;s227:判断r4中是否存在多个相同的相邻项,如果存在,转s228,否则转s229;s228:保留r4中多个相同相邻项中的一项,其余相同项均删除,得到序列r5,转s22a;s229:将r4直接赋值给r5;s22a:删除r5中相邻项之间的空格,得到序列r6;s22b:检索r6是否已经存在于意图分类模式列表中,如果不存在,转s22c,否则转s22d;s22c:将r6添加到意图分类模式列表中;s22d:判断三元组列表语料是否读取完毕,如果没有,转s22e,否则转s22f;s22e:读取下1个三元组列表语料的信息,转s223;s22f:保存意图分类模式列表。以步骤s212中的语料1“我想查询苹果在山东省去年下半年的销售情况?”为例,上述流程中产生的数据如下:r2是“ooo水果o地点时间时间o销量销量o”;r3是“ooo[$水果]o[$地点][$时间][$时间]o[$销量][$销量]o”;r4是“[$水果][$地点][$时间][$时间][$销量][$销量]”;r5是“[$水果][$地点][$时间][$销量]”r6是“[$水果][$地点][$时间][$销量]”,它是意图“水果销量”的一个分类模式。s3:使用意图理解模型处理用户请求。进一步,所述步骤s3中具体包括:s31:基于混合策略的实体识别;本步骤综合使用基于crf模型的中文分词和词性标注器、基于crf模型的少量语料环境下命名实体识别器、常用实体解析器、基于字符索引的“实体-类型”映射表,从用户请求文本中得到命名实体。进一步,所述步骤s31中具体包括:s311:使用基于crf模型的中文分词和词性标注器处理用户请求文本,得到二元组列表语料l1;s312:使用crf命名实体识别器从二元组列表语料l1中抽取出实体列表e1;s313:从l1中删除和e1中实体对应的项,得到二元组列表语料l2;s314:判断实体列表e1是否存在多个类型相同且彼此相邻的实体,如果不存在,转s315,否则转s316;s315:将e1直接赋值给e2,l2直接赋值给l3,转s31a;s316:将e1中多个类型相同且彼此相邻的实体按照顺序连接为1个实体,得到实体列表e2;s317:判断e1相邻同类型实体在l1对应项之间的分词词汇是否包含虚词,如果不包含,转s318,否则转s319;s318:将l2直接赋值给l3,转s31a;s319:将l2中对应的虚词项删除,得到二元组语料列表l3;s31a:从l3中获取分词词汇序列,并转换为字符串形式,得到文本d1;s31b:使用“常用实体解析器”处理文本d1,得到实体列表e3;s31c:从d1中删除e3中的实体,得到文本d2;s31d:使用“基于字符索引的‘实体-类型’映射表”逐字符匹配文本d2,从中抽取出实体列表e4;s31e:计算实体列表e2、e3、e4的并集,并按照实体在l1中的顺序进行排列,得到实体列表unione=e2∪e3∪e4;s31f:判断实体列表unione是否存在多个类型相同且彼此相邻的实体,如果不存在,转s31g,否则转s31h;s31g:将unione直接赋值给e,转s31i;s31h:将unione中多个类型相同且彼此相邻的实体按照顺序连接为1个实体,得到实体列表nonrepe;s31i:结束并返回实体列表nonrepe。以用户请求文本“请告诉我去年下半年香蕉在河南省销售的情况?”为例,上述流程的执行情况如下:执行s311:生成的l1如下表所示:分词词性请vd告诉v我r去年t下半年t香蕉n在p河南省ns销售a的u情况n?w执行s312:e1=“香蕉、销售、情况”;执行s313:从l1中删除和“香蕉”、“销售”、“情况”对应的项,生成的l2如下表所示:执行s314:由于e1中的相邻实体“销售”和“情况”类型相同,所以转s316;执行s316:将e1中的相邻实体“销售”和“情况”合并为1个实体“销售情况”,生成e2=“香蕉、销售情况”;执行s317:由于l1中对应实体“销售”和“情况”间存在非实词“的”,所以转s319;执行s319:将l2对应和“的”对应的项删除,生成l3如下表所示:分词词性请vd告诉v我r去年t下半年t在p河南省ns?w执行s31a:处理l3,生成文本d1=“请告诉我去年下半年在河南省?”;执行s31b:使用“常用实体解析器”处理文本d1,生成e3=“下半年”;执行s31c:从d1中删除实体“下半年”,生成d2=“请告诉我去年在河南省?”;执行s31d:使用“基于字符索引的‘实体-类型’映射表”逐字符匹配文本d2,抽取出实体列表e4=“去年、河南省”;执行s31e:按照实体在l1中的排列顺序,生成e2、e3、e4的并集unione=“去年、下半年、香蕉、河南省、销售情况”;执行s31f:由于unione中的相邻实体“去年”和“下半年”类型相同,所以转s31h;执行s31h:将unione中的相邻实体“去年”和“下半年”合并为1个实体“去年下半年”,生成nonrepe=“去年下半年、香蕉、河南省、销售情况”。s32:基于实体类型匹配的意图分类;本步骤根据用户请求文本、已识别的命名实体和意图分类模式列表,确定用户的意图类型。进一步,所述步骤s32中具体包括:s321:将用户请求文本中对应的实体名称替换为形如[$命名实体类型名称]的标识符;s322:判断用户请求文本是否存在对应多个类型的实体,如果不存在,转s323,否则转s324;s323:将替换后的结果直接赋值给t1,转s325;s324:采用符号“/”将实体的多个类型名称连接起来,得到文本t1;s325:删除文本t1中非实体名称对应的文本,得到文本t2;s326:判断文本t2的类型标识符中是否存在符号“/”,如果不存在,转s327,否则转s328;s327:将t2直接赋值给nt1,转s329;s328:对于文本t2中包含符号“/”的每个类型标识符,按照符号“/”将其分割为多个新的类型标识符,分别替换原先的类型标识符,从而得到序列文本nt1~ntp;s329:在意图分类模式列表中逐个搜索文本nti,i=1…p;s32a:如果p个文本的搜索结果均为空,转s32e,否则转s32b;s32b:判断返回的意图类型个数q是否等于1,不等于则转s32c,否则转s32d;s32c:将q个意图类型输出给用户,通过交互询问的方式确定用户的真实意图类型;s32d:结束并返回用户的意图类型;s32e:结束并提示意图分类失败。以用户请求文本“我想知道黄鹤楼去年10月份在武汉市的价格?”为例,上述流程的执行情况如下:执行s321:替换实体“黄鹤楼”、“去年10月份”、“武汉市”、“价格”为对应的类型;执行s322:由于实体“黄鹤楼”对应两种类型:景点、香烟,所以转s324;执行s324:采用“/”连接实体“黄鹤楼”对应的两种类型,生成t1=“我想知道[$景点/香烟][$时间]在[$地点]的[$价格]?”;执行s325:t2=“[$景点/香烟][$时间][$地点][$价格]”;执行s326:由于t2的“景点/香烟”中包含“/”,所以转s328;执行s328:通过替换操作,生成nt1=“[$景点][$时间][$地点][$价格]”、nt2=“[$香烟][$时间][$地点][$价格]”;执行s329:在意图分类模式列表中逐个搜索nt1和nt2,得到对应的意图类型:景点价格、香烟价格;执行s32a:由于搜索结果非空,所以转s32b;执行s32b:由于意图类型个数q=2大于1,所以转s32c;执行s32c:通过和用户交互询问,确定真实意图类型:香烟价格;执行s32d:结束并返回用户的意图类型。s33:执行服务调用。本步骤根据已识别的命名实体和意图类型,调用服务程序处理用户请求。进一步,所述步骤s33中具体包括:s331:根据意图分类结果,确定用户请求对应的服务处理程序g;s332:根据g中的参数类型和顺序,从nonrepe中抽取对应实体构成列表transe;s333:将transe作为参数传递给服务处理程序g;s334:执行服务处理程序g,响应用户的请求。以用户请求文本“我想知道黄鹤楼去年10月份在武汉市的价格?”为例,上述流程的执行情况如下:执行s331:根据意图类型(香烟价格),确定对应的服务处理程序cigaretteprice,该函数原型声明如下:floatcigaretteprice(stringbrand,stringlocation,stringdate)其中,参数brand、location、date分别是香烟品牌、销售地点和销售时间;执行s332:transe=“品牌=黄鹤楼,地点=武汉市,时间=去年10月份”;执行s333:确定cigaretteprice的参数列表(黄鹤楼,武汉市,去年10月份);执行s334:执行cigaretteprice(黄鹤楼,武汉市,去年10月份)。本发明还提供了一种基于意图理解的服务调用系统,包括:基础数据模型和处理工具构建模块u1,用于生成基础数据模型和处理工具,所述基础数据模型和处理工具构建模块u1包括:基于字符索引的“实体->类型”映射表构建部件u11,用于生成基于字符索引的“实体->类型”映射表,所述基于字符索引的“实体->类型”映射表构建部件u11包括:领域实体表制作部件u111,用于生成领域实体表;同义词实体网制作部件u112,用于生成同义词实体网;“实体->类型”映射表构建部件u113,用于生成“实体->类型”映射表;“字符->类型”映射表字符索引构建部件u114,用于生成带有字符索引结构的“实体->类型”映射表。常用实体解析器构建部件u12,用于生成常用实体解析器;基于crf模型的中文分词和词性标注器构建部件u13,用于生成基于crf模型的中文分词和词性标注器。意图理解模型构建模块u2,用于生成意图理解模型,所述意图理解模型构建模块u2包括:基于crf模型的少量语料环境下命名实体识别器构建部件u21,用于生成基于crf模型的少量语料环境下命名实体识别器,所述基于crf模型的少量语料环境下命名实体识别器构建部件u21包括:二元组列表语料制作部件u211,用于生成二元组列表语料;三元组列表语料制作部件u212,用于生成三元组列表语料;命名实体识别器构建部件u213,用于生成命名实体识别器。基于命名实体识别类型标识符的意图分类模式构建部件u22,用于生成基于命名实体识别类型标识符的意图分类模式。基于意图理解的用户请求处理模块u3,用于分析用户请求并调用对应的服务程序,所述基于意图理解的用户请求处理模块u3包括:基于混合策略的实体识别部件u31,用于从用户请求文本中得到命名实体,所述基于混合策略的实体识别部件u31包括:基于crf模型的命名实体识别部件u311,用于使用crf模型识别用户请求文本中的命名实体;基于常用实体解析器的命名实体识别部件u312,用于使用常用实体解析器识别用户请求文本中的命名实体;基于字符索引的“实体->类型”映射表的命名实体识别部件u313,用于使用基于字符索引的“实体->类型”映射表识别用户请求文本中的命名实体。基于实体类型匹配的意图分类部件u32,用户确定用户的意图类型,所述基于实体类型匹配的意图分类部件u32包括:命名实体名称替换部件u321,用户将用户请求文本转换为由若干[$命名实体类型名称]构成的字符串;意图分类模式匹配部件u322,用于匹配已有的意图分类模式;真实意图类型交互询问部件u323,用于从多种意图类型中选择出用户的真实意图类型。服务调用执行部件u33,用于调用服务程序处理用户请求。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1