智能问答与对话系统
本文参考自《大数据智能》,仅作科普
问答到对话
-
人机交互的趋势
\(\mathrm{CLI} \to \mathrm{GUI} \to \mathrm{CUI}\)
命令行到图形到对话
-
日常聊天侧重于交流和应答,不一定是问题。
可利用检索模型、机器翻译模型、深度学习模型及情感模型。
对话系统的基本过程
- 语音识别(Automated Speech Recognition)
- 语音合成(Speech Synthesis) = 文本-语音转换(Text-To-Speech, TTS)
- 语音信号中还可以提取语气、语速、情绪等信息
复杂场景还可以结合其他的输入(如动作)
文本对话系统的常见场景
-
首先说话有”情商“高低,现有技术主要解决”智商“部分,机器想学好如何”说话“任重而道远。
-
应用场景:
- 寻求确切的答案和知识:例如搜索相关信息“附近有什么餐馆”
- 为达成一个目标而指示机器完成一项功能:对Siri说“提醒我明早9点开会”
- 无特定目的的聊天、寒暄等:“微软小冰”调侃打趣之类的
可能上述几种互相穿插
问答系统的主要组成
- 问题理解:理解问题是什么(例如区分“北京温度是多少”和“太阳天气是多少”)
- 知识检索:将问题组织成一个计算机可理解的检索式,其格式由知识库的结构决定(“北京面积有多大”,如果用百科全书搜索就是在“北京市”这个词条内检索“面积”这一属性信息)
- 答案生成:用搜索引擎获得的若干相关文档,然后从这些文档的大量内容中提取到核心的段落、句子或者词语
文本问答系统
知识组织形式不同,问答系统有很多种,文本问答系统是最基本的一类,也是各类问答的基础
问题理解
问题理解的内容
可以把问答系统的目标定义为解答这样一个问题:
谁(Who)对谁(Whom)在何时(When)何地(Where)做了什么(What)是怎么做的(How),为什么这样做(Why)?
中英文基本要素的提问形式是相近的。研究人员整理出若干种分类体系(taxonomy),既有平面分类(flat),又有层次分类(hierarchical),便于对答案进行筛选。
- UIUC分类体系:双层的层次结构体系,主要针对事实类问题,设计了6个大类和50个小类。大类包括缩写、实体(某种事物)、描述(询问定义、原因等)、人物、地点和数值
- Moldovan等人的分类体系:也是双层的层次结构体系,第一层主要针对问句的形式(疑问词),第二层针对答案的类别。
- Radev等人的单层平面分类设计了17个类别,包括人物、数字、描述、原因、地点、定义、缩写、长度、日期等
- 可以根据问题所属的垂直领域(主题)进行分类,如天气类、导航类、参观类等,然后交给特定的端口处理。
问题理解的方法
问题中提取关键成分过程主要涉及NLP中的语义分析技术。
-
直观的做法:字符串模板匹配。
例如查询关键词“XXX是什么”,那么“XXX”就是关键词。
优势在于清晰直观,易于理解和编写;缺点在于无法适应千变万化的语言表达形式。
-
灵活的技术:从词法、句法入手。将问句进行词性标注,做句法分析。
例如可以用一个 \(\lambda - \mathrm{DCS}\) 表达式,便于知识库进行运算:
其构建过程由如下几种操作完成:
- 一元实体(Unary):实体词,例如“西雅图”
- 二元卷席(Binary):属性词,例如“出生地点”
完整知识可以以三元组给出,例如(比尔·盖茨,出生地点,西雅图)。
- 连接(Join):将一元实体与二元关系连接,得到关系另一侧所有可能的实体,用点(“.”)表示(例子可以见图)
- 交集(Intersection):两个一元实体集合的相交部分,用 \(\prod\) 表示。例如“职业.科学家 \(\prod\) 出生地点.西雅图”代表所有出生在西雅图的科学家
- 计数(Aggregate):一元实体集合的元素数量,记作 \(\mathrm{count(\cdot)}\)
如问:汤姆·克鲁斯出演过多少部电视剧?其 \(\lambda - \mathrm{DCS}\) 表达式为 \(\mathrm{count(类型.电视剧\prod 演员.汤姆·克鲁斯)}\)
虽然其更加灵活,但是计数储备较多、门槛高,未必适合于小规模系统的快速开发和部署。
问题扩展
- 同义词词语的多样性:“贝克汉姆”和“小贝”。可能可以借助《同义词词林》。
- 大数据中的知识也需要进行句法分析,答案可以作为标注用于指导有监督的学习过程
知识检索
大数据时代,结构化数据少而精,非结构化数据多而全。可以利用这两方面优势,来满足用户需要。
非结构化信息检索
- 直观的理解:搜索引擎,从问题中提取关键词,便可以查询索引,得到与这些关键词最相关的文档。再通过后续的筛选和提取步骤,生成最终答案。
- 主要障碍:商业授权许可和网络延迟。我们可以自建索引,搭建自己的搜索引擎。如Lucene等开源搜索引擎框架给开发者提供极大便利。
传统信息检索任务的相关性计算方法不一定适用于问答任务,问答任务的检索式已经经过筛选了。检索出的文档应当尽量满足所有查询词的查询条件,要尽量全。
-
常用的策略:以段落为单位,计算连续少量段落是否出现了所有关键词,可以去除一些相关性不高的文档。取一个尽量短的窗口,包含尽量多的问题关键词。
经典做法:标准基数排序(Standard Radix Sort) 以如下三个因素排序:
- 相同顺序的关键词数目
- 最远关键词间距
- 未命中关键词数
结构化知识检索
-
百科类知识:识别主条目的时候易于定位答案。
-
关系类知识:两个事物 \(E_1, E_2\) 和他们的关系 \(R\) 表示成一个三元组 \((E_1, R, E_2)\) 例如 \((北京,面积,16801平方公里)\) 。DBpedia和YAGO是从维基百科中取出组织关系结构的数据库。
可以从百科类知识和非结构化知识中抽取构建出关系类知识,并且可以根据需求针对特定垂直领域手机数据,自行组织成结构化知识。(例如“某某相机多少钱?”)
本体与推理
蜜蜂有几条腿?\(\to\) 蜜蜂是一种昆虫 \(\to\) 昆虫有六条腿 \(\to\) 蜜蜂有六条腿
人工智能的一大重要分支——专家系统,依赖于精确组织的知识结构。整理好知识领域,可以搭建这样的技术框架。
人工整理知识库(基于专家系统方式)的问答技术已经逐渐退出了历史舞台。现在利用互联网语料自动挖掘实体关系、知识图谱的思路为其注入了新鲜血液。
基于深度神经网络模型,让机器自动学习知识并完成推理,也是有前景的研究方向。FaceBook有个数据集bAbI可用于文本理解和推理。 端到端的神经网络模型,可以充分发挥其“记忆”功能,将事实隐式地存储在向量、权重中,从而完成推理。
答案生成
问题的关键词和答案的词语之间存在某种联系,因此可以考察问题和候选答案的相似度,此外也可能存在句式之间的关联。
如“北京的面积是多少?”可以把“多少”替换成答案。
端到端的阅读理解问答技术
- 端到端:在原始输入到最终输出间减少人的干预,只考模型自己学习。
避免了传统机器学习方法设计特征的环节,而让模型隐式地学习特征,通常比专家设计的还要好。
模型的一些“记忆”机制可以记住长距离的上下文信息,自动将多句话的重要知识存储在数字模型中,不需要人工设计知识结构和记忆逻辑,只需要足够的训练数据。
什么是阅读理解任务
即阅读一段文章,回答有关文章的若干问题,以理解文中事实为主。
有一个基于维基百科的阅读理解任务数据集SQuAD,有多个团队的数学模型超过了人类的平均得分(如BERT,CMU的QANet,百度,猿辅导等)。
在这些任务中,知识库以非结构化的篇章形式出现,阅读理解时需要包含一些简单的推理过程。
阅读理解任务的模型
前面提及的参赛队伍的模型有一些共性:
-
输入和编码:先做词(字符)嵌入/人工提取一些特征(如词性、命名实体),作为向量。然后把问题和段落各两三个向量拼接在一起,输入到BiRNN、BiLSTM或其他序列模型进行处理,从而分别形成问题和段落的编码表示。
-
问题-段落的融合:最简单的办法是把问题向量和段落向量相乘,矩阵元素表示相关程度;也可以采用attention机制,那么此时可以得到二者的关联。
还有一些加强的方式,例如反复自乘、重复几遍上述运算,重复计算段落与段落之间的关联。
-
确定答案:要求找到答案的具体位置,通常使用指针网络(Pointer Network),把问题与前面注意力层的段落表示相结合,即可计算出答案在段落内的概率分布,最大值就是起始位置。然后问题与起始位置相作用,即可得到答案的结束位置。(或者利用语言学特征进行重排,找到最佳答案)
阅读理解任务的其余工程技巧
- 集成学习:前几名的队伍都是用集成学习,多个弱分类器的集成效果反而可能强过一个强分类器,单一模型得到的训练结果并非每次相同;集成模型可以达到好的综合效果。
- 瓶颈及其突破:深度神经网络的一大瓶颈是训练数据的数量,比赛提供的数据量有限。谷歌大脑团队的模型是较快的CNN,因此设计了方法增加训练数据量。例如将英文翻译成法文得到 \(k\) 种版本(有一定的语言上的差异),然后将法文翻译回英文( \(k\) 种),那么累计有 \(k^2\) 种,极大增加了训练语料数量。
前景与挑战
问答系统在大数据的支撑下有了相当大的进展,大数据更多的知识,使得有问必答;另一方面,深度学习模型提高了问答系统的准确性。
可预见的未来,问答系统的基本技术将广泛应用于各个领域,使机器逐渐从“用知识”变为“学知识”。
中文领域的问答技术发展迅速,例如《一站到底》的汪仔,将语音识别、图像处理、语义理解多种技术融合。
问答系统设计的技术较多,既包括语义分析、信息检索,又涉及知识的挖掘与管理。需要我们对我们每个环节一丝不苟,在方方面面下功夫。