一种改进的中文ALICE智能问答方法及系统与流程

文档序号:19828862发布日期:2020-02-04 12:11阅读:454来源:国知局
一种改进的中文ALICE智能问答方法及系统与流程

本发明涉及中文限定域智能问答的处理方法技术领域,特别是涉及一种改进的中文alice智能问答方法及系统。



背景技术:

alice(artificiallinguisticinternetcomputerentity)是一个智能问答系统,它的知识库是由aiml(artificialintelligencemarkuplanguage)语言编写的文件组成,每个aiml文件可以代表一个领域的可能话题。alice的推理机制是将aiml知识库以树的结构形式加载到内存当中形成内存知识树。当用户输入要查询的句子时,alice系统在这棵内存知识树中检索与用户输入语句最匹配的模式,如果匹配到则对答复模板进行进一步处理后回复给用户。

然而,alice系统在编写知识库时不可能把所有的同义词枚举出来,这样会导致知识树中节点过多。因此如何根据用户输入的新句子检索aiml知识库中最相似的模式,是智能问答系统的一个关键。通常的做法是计算用户输入语句与模式的相似度。但是,未改进前的alice是以为字为单位构造知识树,这种构造方法需要将用户输入的每个字与模式中的字进行相似度计算,然而有些同义词词语拆分成单字后,其单字并不是同义词,因此采用单字相似度识别同义词识别结果不够理想,进一步导致匹配到的答复模板不理想。



技术实现要素:

本发明的目的是提供一种改进的中文alice智能问答方法及系统,以解决现有alice智能问答方法由于以为字为单位构造知识树,并根据单字相似度匹配答复模板,导致的匹配结果不理想的问题。

为实现上述目的,本发明提供了如下方案:

一种改进的中文alice智能问答方法,所述方法包括:

获取人工智能标记语言aiml文件中的模式内容;

将所述模式内容构建为以词为单位的知识树节点;

获取用户输入的待查询句子;

采用分词工具对所述待查询句子进行分词,生成所述待查询句子对应的词列表;所述词列表中包括一个或多个中文词;

生成所述词列表中所述中文词的同义词列表;

将所述同义词列表中的同义词与所述以词为单位的知识树节点进行匹配;

判断所述同义词是否匹配到对应的以词为单位的知识树节点,获得第一判断结果;

若所述第一判断结果为所述同义词匹配到了对应的以词为单位的知识树节点,则根据对应的以词为单位的知识树节点生成匹配结果回复给用户;

若所述第一判断结果为所述同义词未匹配到对应的以词为单位的知识树节点,则读取所述词列表中的下一个中文词,返回所述生成所述词列表中所述中文词的同义词列表的步骤。

可选的,所述将所述模式内容构建为以词为单位的知识树节点,具体包括:

采用python的split()函数,按以词为单位的空格对所述模式内容中的文字进行分隔,产生以词为单位的知识树节点。

可选的,所述采用分词工具对所述待查询句子进行分词,生成所述待查询句子对应的词列表,具体包括:

采用python的第三方中文分词库jieba库对所述待查询句子进行分词,生成所述待查询句子对应的词列表。

可选的,所述生成所述词列表中所述中文词的同义词列表,具体包括:

使用中文近义词工具包synonyms生成所述词列表中所述中文词的同义词列表。

可选的,在所述读取所述词列表中的下一个中文词的步骤之前,还包括:

判断所述中文词是否为所述词列表中的最后一个中文词,获得第二判断结果;

若所述第二判断结果为所述中文词不是所述词列表中的最后一个中文词,则读取所述词列表中的下一个中文词,返回所述生成所述词列表中所述中文词的同义词列表的步骤。

一种改进的中文alice智能问答系统,所述系统包括:

模式内容获取模块,用于获取aiml文件中的模式内容;

知识树节点构建模块,用于将所述模式内容构建为以词为单位的知识树节点;

待查询句子获取模块,用于获取用户输入的待查询句子;

分词模块,用于采用分词工具对所述待查询句子进行分词,生成所述待查询句子对应的词列表;所述词列表中包括一个或多个中文词;

同义词获取模块,用于生成所述词列表中所述中文词的同义词列表;

节点匹配模块,用于将所述同义词列表中的同义词与所述以词为单位的知识树节点进行匹配;

匹配结果判断模块,用于判断所述同义词是否匹配到对应的以词为单位的知识树节点,获得第一判断结果;

匹配结果输出模块,用于若所述第一判断结果为所述同义词匹配到了对应的以词为单位的知识树节点,则根据对应的以词为单位的知识树节点生成匹配结果回复给用户;

循环匹配模块,用于若所述第一判断结果为所述同义词未匹配到对应的以词为单位的知识树节点,则读取所述词列表中的下一个中文词,返回所述生成所述词列表中所述中文词的同义词列表的步骤。

可选的,所述知识树节点构建模块具体包括:

知识树节点构建单元,用于采用python的split()函数,按以词为单位的空格对所述模式内容中的文字进行分隔,产生以词为单位的知识树节点。

可选的,所述分词模块具体包括:

分词单元,用于采用python的第三方中文分词库jieba库对所述待查询句子进行分词,生成所述待查询句子对应的词列表。

可选的,所述同义词获取模块具体包括:

同义词获取单元,用于使用中文近义词工具包synonyms生成所述词列表中所述中文词的同义词列表。

可选的,所述系统还包括:

词列表判断模块,用于在所述读取所述词列表中的下一个中文词的步骤之前,判断所述中文词是否为所述词列表中的最后一个中文词,获得第二判断结果;

中文词读取模块,用于若所述第二判断结果为所述中文词不是所述词列表中的最后一个中文词,则读取所述词列表中的下一个中文词,返回所述生成所述词列表中所述中文词的同义词列表的步骤。

根据本发明提供的具体实施例,本发明公开了以下技术效果:

本发明提供一种改进的中文alice智能问答方法及系统,所述方法以词为单位构建知识树节点,并对用户输入的句子进行分词,得到词列表;将词列表中的每个中文词依次使用synonyms获得同义词列表;如果中文同义词列表中的词与知识树节点匹配则取出模板内容并进行后处理,然后将处理结果回复给用户;解决了现有alice智能问答方法由于以为字为单位构造知识树,并根据单字相似度匹配答复模板,导致的匹配结果不理想的问题;提高了alice问答的智能化程度和输出结果的准确性。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1为本发明提供的aiml文件的基本知识单元示意图;

图2为本发明提供的未改进前alice以字为单位构建的知识树的结构示意图;

图3为本发明提供的改进的中文alice智能问答方法的流程图;

图4为本发明提供的改进的中文alice智能问答方法的原理图;

图5为本发明提供的改进的alice以词为单位构建的知识树的结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明的目的是提供一种改进的中文alice智能问答方法及系统,以解决现有alice智能问答方法由于以为字为单位构造知识树,并根据单字相似度匹配答复模板,导致匹配结果不理想的问题。

为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。

alice(artificiallinguisticinternetcomputerentity)是一个智能问答系统,它的知识库是由aiml(artificialintelligencemarkuplanguage)语言编写的文件组成,每个aiml文件可以代表一个领域的可能话题。图1为本发明提供的aiml文件的基本知识单元示意图。如图1所示,每个aiml文件的基本知识单元是由分类<category>构成,而每一个分类<category>由模式<pattern>、答复模板<template>和可选上下文环境(optionalcontext)组成。

alice的推理机制是将aiml知识库以树的结构形式加载到内存当中形成内存知识树。图2为本发明提供的未改进前alice以字为单位构建的知识树的结构示意图,如图2所示,知识树由一系列知识树节点集组成,每一个节点集都有若干个从该节点出来的分支,这些分支可能是一个中文字(例如难、过),也可能是一个通配符(例如*)。然后alice系统在这棵内存知识树中检索与用户输入语句最匹配的模式,如果匹配到则对答复模板进行进一步处理后回复给用户。

然而在编写知识库时,不可能把所有的同义词枚举出来,这样会导致知识树中节点过多。因此如何根据用户输入的新句子检索aiml知识库中最相似的模式,是智能问答系统的一个关键。通常的做法是计算用户输入语句与模式的相似度。但是,未改进前的alice是以为字为单位构造知识树,这种构造方法是通过将用户输入的字与模式中的字进行相似度计算进行结果匹配,相似度的识别不够理想。因为,未改进前的alice构造的是以字为单位的知识树,比如图2模式是“*难过*”。假设用户输入句子是“我感到悲伤”,系统将句子中每个字与模式中的每个字或符号进行匹配,如“悲”与“难”进行匹配,“伤”与“过”进行匹配。我们知道中文“悲伤”与“难过”是同义词,但单字不是同义词,例如“悲”与“难”不是同义词,“伤”与“过”也不是同义词,所以“我感到悲伤”不能匹配到模式“*难过*”。因此必须针对汉语的特点进行进一步的研究,对现有的中文alice智能问答方法进行改进。

图3为本发明提供的改进的中文alice智能问答方法的流程图。图4为本发明提供的改进的中文alice智能问答方法的原理图。参见图1和图2,本发明提供的改进的中文alice智能问答方法具体包括:

步骤101:获取人工智能标记语言aiml文件中的模式内容。

alice(artificiallinguisticinternetcomputerentity)是一个智能问答系统,它的知识库是由aiml(artificialintelligencemarkuplanguage,人工智能标记语言)语言编写的文件组成,每个aiml文件可以代表一个领域的可能话题。

步骤102:将所述模式内容构建为以词为单位的知识树节点。

采用python的split()函数,按以词为单位的空格对所述模式内容中的文字进行分隔,产生以词为单位的知识树节点。其中python是一种面向对象的动态类型语言,split()函数是python语言中使用的一种函数名称,split()函数的作用是拆分字符串,通过指定分隔符(例如空格)对字符串进行切片,并返回分割后的字符串列表(list)。

未改进前的alice中“new_key=(”.join(key[0]),key[1],key[2])”这句代码的作用是将模式<pattern>中的每个字或符号后都强行加一个空格,再采用python的split()函数按空格进行分隔,结果产生以字为单位的知识树节点。而本发明在用户输入的模式<pattern>中以空格作为中文词的分隔符,如图5所示,模式“*难过*”中,“难过”这个词前后要加空格,然后读取模式内容,构建为以词为单位的知识树节点。具体实现方法是在python环境下将“new_key=(”.join(key[0]),key[1],key[2])”这句代码改为“new_key=key”;再采用“pattern.split()”代码对模式按空格分隔生成列表,这样就能获取模式中的一个词或符号构建知识树的一个知识树节点,如图5所示。

步骤103:获取用户输入的待查询句子。

步骤104:采用分词工具对所述待查询句子进行分词,生成所述待查询句子对应的词列表。

未改进前的alice在读句子时没有进行分词操作,只按字为单位读取。而本发明对用户输入的待查询句子通过python的第三方中文分词库jieba库等方法进行分词,得到对应的词列表。所述词列表中包括一个或多个中文词。

其中jieba库是一款优秀的python第三方中文分词库,jieba支持三种分词模式:精确模式、全模式和搜索引擎模式。

步骤105:生成所述词列表中所述中文词的同义词列表。

将所示词列表中的每个中文词,依次使用中文近义词工具包synonyms或其他方法获得其同义词列表。

其中synonyms可以用于自然语言理解的很多任务:文本对齐,推荐算法,相似度计算,语义偏移,关键字提取,概念提取,自动摘要,搜索引擎等。

步骤106:将所述同义词列表中的同义词与所述以词为单位的知识树节点进行匹配。

未改进前的alice系统是将用户输入的每一个字与知识树节点的一个字进行匹配。而本发明是将用户输入的每个词或符号与重新构建的以词为单位的知识树节点进行匹配,如果该词是中文则将该词的同义词列表中的每个词与知识树节点进行匹配。

步骤107:判断所述同义词是否匹配到对应的以词为单位的知识树节点,获得第一判断结果。

步骤108:若所述第一判断结果为所述同义词匹配到了对应的以词为单位的知识树节点,则根据对应的以词为单位的知识树节点生成匹配结果回复给用户。

如果所述同义词匹配到了对应的以词为单位的知识树节点,则取出该知识树节点的答复模板内容并进行后处理,如读出机器人名字标记所代表的实际名称、还原星号(*)部分所代表的内容;如果包含跳转标记,还需要在内存知识树中以跳转部分的内容做进一步的推理,生成待查询句子的匹配结果,并将匹配结果回复给用户。

步骤109:若所述第一判断结果为所述同义词未匹配到对应的以词为单位的知识树节点,则读取所述词列表中的下一个中文词,返回所述生成所述词列表中所述中文词的同义词列表的步骤。

在所述读取所述词列表中的下一个中文词的步骤之前,还包括:

判断所述中文词是否为所述词列表中的最后一个中文词,获得第二判断结果;

若所述第二判断结果为所述中文词不是所述词列表中的最后一个中文词,则读取所述词列表中的下一个中文词,返回所述生成所述词列表中所述中文词的同义词列表的步骤,将所述词列表中下一个中文词的同义词列表与知识树节点进行匹配;

若所述第二判断结果为所述中文词是所述词列表中的最后一个中文词,则向用户回复“未查询到对应的匹配结果”。

基于本发明提供的改进的中文alice智能问答方法,本发明还提供一种改进的中文alice智能问答系统,所述系统包括:

模式内容获取模块,用于获取aiml文件中的模式内容;

知识树节点构建模块,用于将所述模式内容构建为以词为单位的知识树节点;

待查询句子获取模块,用于获取用户输入的待查询句子;

分词模块,用于采用分词工具对所述待查询句子进行分词,生成所述待查询句子对应的词列表;所述词列表中包括一个或多个中文词;

同义词获取模块,用于生成所述词列表中所述中文词的同义词列表;

节点匹配模块,用于将所述同义词列表中的同义词与所述以词为单位的知识树节点进行匹配;

匹配结果判断模块,用于判断所述同义词是否匹配到对应的以词为单位的知识树节点,获得第一判断结果;

匹配结果输出模块,用于若所述第一判断结果为所述同义词匹配到了对应的以词为单位的知识树节点,则根据对应的以词为单位的知识树节点生成匹配结果回复给用户;

循环匹配模块,用于若所述第一判断结果为所述同义词未匹配到对应的以词为单位的知识树节点,则读取所述词列表中的下一个中文词,返回所述生成所述词列表中所述中文词的同义词列表的步骤。

其中,所述知识树节点构建模块具体包括:

知识树节点构建单元,用于采用python的split()函数,按以词为单位的空格对所述模式内容中的文字进行分隔,产生以词为单位的知识树节点。

所述分词模块具体包括:

分词单元,用于采用python的第三方中文分词库jieba库对所述待查询句子进行分词,生成所述待查询句子对应的词列表。

所述同义词获取模块具体包括:

同义词获取单元,用于使用中文近义词工具包synonyms生成所述词列表中所述中文词的同义词列表。

所述系统还包括:

词列表判断模块,用于在所述读取所述词列表中的下一个中文词的步骤之前,判断所述中文词是否为所述词列表中的最后一个中文词,获得第二判断结果;

中文词读取模块,用于若所述第二判断结果为所述中文词不是所述词列表中的最后一个中文词,则读取所述词列表中的下一个中文词,返回所述生成所述词列表中所述中文词的同义词列表的步骤。

本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的系统而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处。综上所述,本说明书内容不应理解为对本发明的限制。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1