|
发表于 2019-12-6 16:55:10
|
|阅读模式
来自 中国–浙江–温州–平阳县
构建聊天机器人核心有几个重点:自然语言理解(针对用户输入)、知识库模型、推理引擎。其中推理引擎和知识库模型是紧密关联的。什么样的模型,就会有针对性的推理机制。知识库的类型又有结构化和非结构化之分,非结构化数据库的使用涉及复杂的数据分析、挖掘技术,在实现的效果和性能等方面都很难满足聊天机器人的要求,因此通常采用结构化的知识库。
聊天机器人常见的推理技术有基于语义分析、数据挖掘(学习)、文本匹配等。在实际应用中,往往是多种技术的综合应用,但各有偏重点。语义分析技术在实用化方面多年来好像未取得突破突破性发展,在实际应用中通常只作为辅助技术。基于数据挖掘(学习)、语义网等综合技术的一般也只有大型公司采用,比如IBM的WASTON,就是基于关键字匹配程度分析、时间、地理关系匹配程度、语义网、机器学习等技术综合利用的成果。作为普通开发人员,通常以文本匹配为主,其它技术为辅,是比较可行的方案。下面论述以文本匹配为基础的推理机制的可能方案及其优缺点:
1、正则表达式
作为在日常开发中最常用的文本匹配方式,正则表达式看起来是自然而然的选择。但且慢,我们先分析一下正则表达式的匹配机制和聊天机器人的匹配流程。
聊天机器人开发平台正则表达式通过回溯机制进行匹配。它能够对连续文本提供表面精确匹配,但没有歧义识别的能力。歧义识别也是中文分词系统要解决的难题之一。所以在聊天机器人系统里,通常采用分词系统预先对用户输入和知识库的“问题”进行分词。如果直接采用正则表达式进行匹配,就可能出现“准确率”不高的问题。而对于聊天机器人,要求能精确匹配问题,找出对应的答案。
最主要的问题,想想采用正则表达式后的匹配流程。用户输入“我想查询电费”,然后需要遍历知识库里所有的正则表达式条目,一条条进行匹配,其性能可想而知。因此直接采用正则表达式并不是可取的方案,最多只能作为辅助手段。
2、反向索引
又叫倒排索引,这种数据结构存储单词与单词自身在一个或多个文档中所在位置之间的映射,常见于全文检索引擎。全文检索在构建索引时,也可以利用分词技术来解决歧义问题,所采用的索引结构也可以保证快速检索到结果的需求。似乎也可以作为推理引擎的选择。但反向索引结果的设计目标是为了通过索引词快速找到对应的文档(或者“问题”),在多个索引词情况下,虽然可以通过组合调用,辅以pagerank算法提高匹配的“准确率”。但这种索引结构不易支持"*"等通配符的模糊匹配方式(好吧,其实lucene之类的全文检索引擎也是支持通配符和模糊匹配”)。另外全文检索引擎的索引结构除了反向索引外,还包括其它信息,比如关键字在文档里的位置,关键字在文档中出现的频率等,这些信息对于应答机器人来说没有必要,也显得过“重”。因此反向索引结构和匹配机制也不能直接拿来使用。
3、aiml回溯推理
通过前两个问题的分析,可以在1和2之间,一方缺少的东西正是另一方的优势。因此自然可以想到通过结合二者的优点来构建存储模型。AIML模型就是这样一个实现。在AIML中,通过对知识库的“问题”预分词,然后采用多级索引结构进行存储。比如“查询电费”和“查询历史电费”、“查询业扩流程”,可以采用3J索引结构。第一级存储”查询“,第二级存储”电费“、”历史“和”业扩“,第3J存储”电费“和流程”。上级索引拥有指向下级索引的指针。其本身构成一个树状的索引结构。采用这种模型,有以下优点:节省存储空间;多级索引可以保证检索的速度;上级索引拥有访问下级索引的能力,可以保证对整个句子匹配的连续性,容易实现回溯匹配的功能,提供”*"等通配符的模糊匹配能力。因此是一种比较理想的知识库存储模型。
AIML索引结构和全文检索索引还有另一个重要的区别。由于检索机制的不同,全文检索结构的结果数量是0,1,N(1+);对于AIML索引结构,其检索结果的数量是0或者1,即不存在1+的结果。对于应答业务场景来说,更需要的是确定性的唯一的结果,所以AIML的方式更适合应答业务场景。
|
|