基于检索与深度神经网络的人机对话

关于NLP的交流分享,下面简单梳理下自己的所得

1.      一个10个词语的句子出现3个或以上的错别字那么这个句子基本没用

2.      规则模型与生成式模型

在做对话系统或者问答系统的过程中,他们采用的是混合模型,包括Deep Learning以及检索系统,首先要说一说各种模型的优缺点,见下表:

表1. 两种对话模型的比较表

基于检索与深度神经网络的人机对话_第1张图片

  • 规则模型,就是按照某种规则去做字符串匹配。基于检索的问答系统就是规则算法的一种,检索问答系统需要事先穷举可能出现的问答对,这样,一旦新出现相似的问题,根据模糊匹配算法去回答库中检索匹配回答语句。在智能电视的应用场景之中,对话基本上限定在一个特定领域,所以基于规则的对话模型无论是准确度还是效率都优于基于深度学习的模型。
  • 任何一个有效的对话系统都不仅仅某一个单独的系统组成,而是二者的混合模型。首先,对话会经过检索系统,经过模糊匹配得到一个答案,一旦这个答案的置信率过小,那么将该问题送到深度神经网络,生成其对话
  • 现实的处理情况,特定领域的对话,通过这样的混合模型,100句中仅3句是通过生成模型得到

3.      Knowledge Graph(知识图谱,简称KG)

基于分布式等因素的考虑,决定采用arangoDB。KG是一个实体-属性的图。基于KG能解决的问题类似于:A的B等于C,A对应实体,B对应其属性,C为该属性的值,凡是具备这种结构的数据,都可以作为一种图谱。下图是知识图谱简图:

基于检索与深度神经网络的人机对话_第2张图片

 

实体于实体之间存在相互关系,比如:姚明的女儿的母亲的身高是多少?姚明是一个 实体,女儿是姚明的属性,但该属性也是一个实体,通过姚明出发,找到该属性结点,  再通过姚沁蕾的母亲属性找到叶莉,最后得到叶莉的身高。

4.      具体的问答流程:

 

  • 句型判断 -- 判断该语句是闲聊还是问答,比如:姚明有多高;这是一个问句,而不是闲聊;闲聊语句,比如:白日依山尽
  • 句子实体提取  ---  姚明
  • 实体匹配  ---  查到可能不止一个姚明,百度百科中有四个叫“姚明”的人,可根据热度等算法得出具体指的谁
  • 相似度匹配  ---  “有多高”对应的是“身高”,三种方式,一种模糊匹配,一种词向量方式,或者二者混合
  • 查图谱    ---  得到姚明身高答案
  • 回答模板组织回答问题  ---  知识图谱中仅仅是一个数字,比如2.2米,这个答案但会给用户会显的冷冰冰,不友善,所以需要我们准备一种回答模板,这种模板可以用事先准备的人工模板,也可以使用生产式模型的模板,但生成式模板不可控,不建议。
  • 如果在知识图谱之中没有查到该实体,那么可以通过模糊匹配检索,检索语料中是否存在这样的问题,如果没有则,通过神经网络生成

 

5.      多轮对话

多轮对话,就是考虑上下文的对话,

比如:甲:你吃饭了么?

          乙:吃了,你呢?

在乙回答的语句之中,的“你呢?”,脱离上下文单独处理的话,不知道什么意思,而回看上文就知道该语句同样问的是“你吃饭了么?”,所以需要对原句进行改(rewrite),“吃了,你吃饭了么?”,这样在后续处理中,就能知道这句话的完整意思。因为,上下文对话,要改写当前语句,涉及到回溯几句的问题,回溯太多的话,计算量大,问题复杂,一般回溯3-6句。句子改写,依据是句子主、谓、宾,成分做改写。

 

总结

1.    虽然每一个步骤看似简单,但每一个步骤都是一个大的工程,简单举例:

  •  知识图谱的建立,单这一步,需要命名实体识别技术,举例:姚明在上海的房子的主卧门有多高;怎么让计算机知道“姚明”、“上海”是一个实体,目前这是一个挑战性的问题。
  • 中文自然语言处理都绕不开分词,分词的效果一定程度决定了系统性能的好坏。比如,你好烦,正确的分词结果为:“你”、“好”、“烦”,如果分成“你好”、“烦”’就严重影响性能。

2. 在工程处理过程中,设置一个cache,保存常用问句请求,这样能保证效率。

3. 在处理QPS的时候,系统设计一个master,单独一台做database,调度所有worker,这样,每一台worker之间是相互独立的,仅仅是master、database相同

你可能感兴趣的:(深度学习,Deep,Learning)