2022年6月

1.
关于安装Rasa所需的MITIE组件

其实很简单,一共没几步
conda activate激活你的python环境(或者venv激活)
pip或者conda install cmake以及boost
终端或者cmd进入你的工作目录或者随便哪里,git clone https://github.com/mit-nlp/MITIE.git
cd进MITIE的文件夹,python setup.py build
最后 python setup.py install
最后欢迎关注我的Rasa项目Doctor-Friende,一个用Rasa实现的中文的医疗问答机器人

多轮对话管理系统大致上可以分成3类

一、任务式多轮对话

架构:
v2-763da7952c607ed3065af3cacdd9c7d8_1440w.jpeg

2505076431.jpeg

对话管理-核心

人能够进行多轮对话,很大程度和我们能记住并且使用沟通过程产生的信息和共识,这里值得注意的是,有两个关键的能力,一个是记住,另一个是使用。而现有的大量技术也都是围绕着这两点来搭建的,甚至,比较统一的形成了一个“对话管理模块”,即Dialog Management,DM。

对话管理承担了多轮对话中信息的记录和使用,所谓的记录,就是对话过程的跟踪,一般被称为"Dialog State Tracking","DST"对话状态跟踪,而所谓的使用,有一个跟有意思的说法,叫做对话策略,"Dialog Policy",DP。这点和我们日常的聊天很像,我们在对话过程中,一方面是能接收双方交换的信息,另一方面也会根据自己的目标或者想法制定不同的对话策略,从而达到自己的目标。

当然了,这里的拆解的部分,在现实应用中并不一定是独立拆分开的,可能是组合而成的端到端形式,也可能是拆解分开的形式,这个是根据现实情况来进行选择的。

端到端,从经验上,往往具有很强的泛化能力,在DSTC之类的比赛中,AB榜上端到端的情况似乎会更加稳定,但是缺点是模型内可控性比较差,而且对数据质量和数量的依赖性会比较高。

拆分式在设计上会更简单,而且具有较强的可拓展性,拼装起来可控性也比较高,但是泛化能力会比较差。

对话管理-拆分式的

因为把整个对话管理模块进行了拆解,因此整个对话从信息的梳理存储到对话策略的制定都会很明确,大家看起来也会非常好理解,这里先讲这个。

先用最常见的就是任务型对话作为例子,这个例子前面是提到过的:

Q:我要订机票。
A:要订从哪里出发的机票呢?
Q:从深圳,到北京的。
A:好的。希望什么时候出发?
Q:明天上午10点左右吧。
A:好的,系统给你找到XXX航班,明天10点05分起飞,预计13点到达,请问是否合适?
Q:可以的。
A:已经为您预定XXX航班,请点击付款完成最终操作。记得提前办理值机手续哟。

这是一段订机票的任务型对话,这段任务型对话其实并不复杂,目标很明确,就是要引导用户把所有信息都填充清楚后,进行订机票的操作,列举下来就这几件事:

开头的意图识别,识别为订机票的意图,进入多轮。

拉出需要填写的信息列表,并且引导用户填写这些信息:

Query理解持续提取用户回复的信息。

对话状态记录用户的填表信息。

对话策略确认仍然缺少的信息,选择追问策略和完成策略,当然还包括一些打断后的策略。

显然,这种方式是非常规则化简单化的,而随着逐渐复杂,对话策略也就会逐步复杂,逐步迭代为一些类似类似用树或者用有限状态自动机来对这些规则进行合理化管理。

既然是拆解,那我们就拆解来看这些任务怎么做。

对话流程中的DST
DST主要用于对对话过程中的内容就进行管理维护,这是为了下一步对话策略进行分析做基础的,最简单的方式其实就是直接用缓存把对话内容记下来,形成可解释的部分,如下面一个格式,只列举部分字段:

{
"destination": "北京",
"originator": "深圳",
"takeoff_time_date": ""
}
而后对话策略根据缺失的信息进行追问即可。

而后,随着内容逐渐丰富,场景逐渐复杂,甚至因为轮数增加部分信息也有了更新和变化,这种固定格式的并不一定能够满足我们的需求,于是有了更多的改进措施,也逐步向模型、泛化的方式进行。

首先是对话状态的表示,不难看出对话状态数跟意图和槽值对的数成指数关系,因此需要考虑构造合理的模式来实现,例如隐含信息状态、贝叶斯更新等。然后是状态的更新和转移,这种随着任务逐步复杂,是最快进行模型化的,从CRF到RNN,甚至用到迁移学习等,也从单一任务或者槽位的跟踪逐步升级为多任务多目标的跟踪,在DSTC大型赛事中被验证具有很好的效果。此处已经是一个非常完整的体系了,我也并不专业,这里不展开,大家可以看看其他大佬的博客,我这里列举一些好文章吧:

任务型对话系统中状态追踪(DST):https://zhuanlan.zhihu.com/p/51476362

一起来看看最新的对话状态追踪(DST)模型:https://zhuanlan.zhihu.com/p/115019681

多轮对话状态追踪(DST)--模型介绍篇:https://zhuanlan.zhihu.com/p/40988001

对话流程中的DP
DP就是对话策略,对话策略是根据现有的query理解和DST,制定对话返回策略的部分,这部分一旦敲定,其实最终的回复也就差不多了,所以重要性也可想而知。

常见的对话策略都还比较简单,例如上面的任务型,其实就是比较简单的用一些规则,根据缺失的信息制定回复策略进行追问即可,这里甚至不需要很多复杂的操作,规则即可,但这也就仅限在一些比较简单任务了,对于复杂的任务,进行复杂的策略分析和预测就显得非常必要,DPL(对话策略学习)应运而生。

考虑到很多对话策略的文章直接就本着强化学习去聊了,但是我个人其实并不太想直奔那块,而是想把对话策略先当成分类来去聊(虽然我也知道,强化学习某种意义上其实和分类问题很像),即在现有信息下,我们把策略的选择当成是一个分类问题来去看,有了消息,我们该采取哪种策略,这点来看他实打实就是一个分类问题,主要原因是,它涉及的信息很多,最重要把他们综合起来,在各种策略中找到一个比较好的,这无疑就是一个分类问题,再升级一下,可能就是一个召回+TOP1排序的问题:

选择的依据很多,DST信息,现有Query的信息,用户画像,甚至机器人的画像(人设信息),还有一些策略规则等。

策略上,先默认现在的机器人没有自己生成新的回复风格的能力,那如无人工添加,就是从现有策略进行选择了。

可用的策略并不唯一,例如用户说了个模糊的结果,可以是追问(特殊疑问句,如你说的是啥)、可以是疑似问(猜测你要问啥)、甚至是调侃(没想到你说的我居然没听懂,是不是我没学好)、转移话题(啊,你说的我不懂,要不我们聊聊XX吧)等等,哪个比较好,是需要通过排序之类的思路来进一步筛选出来的。

毫无疑问,想到这里,分类问题很合适,甚至适合在这里构造一个完整的分类系统,从模型分类到召回-排序的模式来做,都没有问题。

而后,由于本身DP就是一个决策问题,甚至是一个多次决策的问题,因此把问题交给强化学习可能更好,于是强化学习就开始成为DP的重要手段了。说到强化学习,必须提到的就是强化学习本身需要的元素,即状态、动作、奖励,在多轮对话里,状态就可以理解为DST中的信息,动作就是采取的对话策略,奖励就是采取行动会得到的奖励,我们所希望的就是全局,也就是整次对话下来,奖励最高,多轮对话无疑是符合这个模式的。

二、检索式多轮对话

没错,检索式其实也有多轮,也能做多轮,而且其实研究还不少,其本质就是把历史的对话信息和当前的回复都放到模型的输入中,形成端到端的模式,不过从社区目前的关注度来看,关注度其实并不太高
WX20220612-203532@2x.png

三、生成式多轮对话

与检索式对应的生成式多轮,生成式的灵活性可想而知。简单的方案其实很早就有了,seq2seq就是最经典的操作,直接将这些对话信息放入模型,这种操作方式和编码器类似,能直接生成一些基本的多轮回复,这种方式虽然简单,但终究算是一个可行的方法。

而后,考虑到对话信息的存储和处理,以及对知识的录入,其实慢慢的开始有用大模型、知识图谱的趋势,开始构造出更加顺滑,具有一定知识性的回复结果,GPT、BERT的始祖Transformer做的是机器翻译,而这本质其实还是文本生成,结合对抗生成模型的介入,这种模式为生成式多轮带来了新的发展。

参考文献:

1.https://weibo.com/ttarticle/p/show?id=2309404726578134254209&sudaref=www.baidu.com

一、rasa

1.官网
https://rasa.com/
https://rasachatbot.com
https://www.mg21.com/rasa.html

二、开源闲聊对话系统

百度 unit: https://ai.baidu.com/unit/home#/home
2.产品
https://www.yesdotnet.com/archive/post/1633011046.html

https://github.com/PaddlePaddle/Knover
1.百度:plato-mimi
https://www.paddlepaddle.org.cn/hubdetail?name=plato-mini&en_category=TextGeneration
2.百度:plato
https://github.com/sserdoubleh/Research/tree/master/NLP/Dialogue-PLATO
3.百度:plao-2
https://github.com/PaddlePaddle/Knover/blob/develop/projects/PLATO-2/README.md
4.百度:ernie-gen
https://github.com/PaddlePaddle/ERNIE/blob/repro/ernie-gen/README.zh.md

一、背景

对话系统一般包括领域内(任务型)对话比如订票,订餐等等和开放领域对话。前者主要是靠识别特定的意图+反复确认来实现,整体来说难度不高,而后者实现起来相对来说较为困难,目前也较为不成熟。
之前一些开发领域对话的解决方案如微软的小冰都是一套很复杂的架构,但是随着最近几年预训练模型取得的成功,对话系统领域也开始探索端到端的实现方式,尤其在2019,2020,2021这三年涌现出了很多相关研究。比如2020年1月份google发表的Meena、4月份Facebook的Blender以及百度PLATO系列包括PLATO、PLATO-2、PLATO-XL等等,前两篇分别发表在ACL2020和ACL-IJCNLP2021,PLATO-XL则是今年9月在arxiv上预印,目前效果比较好的就是百度的PLATO-XL系列。
这里做一个简单的总结
640.png

二、分类

1.从场景上分

对话系统可以根据应用场景的不同分为开放域(open-domain)问题和封闭域(closed-domain)问题

(1).开放域对话系统

开放域对话系统没有任何限定的主题或明确的目标,用户和系统之间可以进行任何话题的自由对话,这要求系统具备丰富的知识,能完成多项任务,同时具有社会性(友好度、自觉性、幽默感等),这在技术上短期内难以实现.已经实现的这类对话系统更多地应用在聊天机器人、虚拟形象等泛娱乐领域,用户基数大且容易传播,但由于对话质量不高或内容深度不够等问题,使得用户黏性并不高,应用前景也比较模糊.
特点:不限定领域和话题
应用实例:聊天机器人等

(2).封闭域的对话系统

封闭域的对话系统是面向具体任务(task-oriented)的,具有明确的目标和限定的知识范围,只需专注完成一项工作,输入和输出有限,实现起来相对简单,在垂直使用场景中更有助于节省人力成本或提升人工效率,但是在具体任务中对话内容的容错率更低,且对话数据规模很小,难以通过数据驱动(data-driven)的方式训练模型,需要人为整理知识库或对话模板,耗费大量人力的同时又难以向平行任务领域迁移;所以,建立这样的对话系统需要从商业、产品、运营、数据知识积累和模型调优等各方面综合考量.
封闭型对话又分两种:

  • a)任务型对话系统:

特点:有明确任务目标,能够精确地定义用户的意图和动作
应用实例:智能助手(订票,导航等)

  • b)问答型对话系统:

特点:需要准确地回答用户的问题,满足用户需求
应用实例:银行、电信运营商、电商店铺的语音客服系统等

对话系统一般包括领域内(任务型)对话比如订票,订餐等等和开放领域对话。前者主要是靠识别特定的意图+反复确认来实现,整体来说难度不高

2.从技术上分
(1)检索型
(2)生成型
(1)检索型+生成型

三、任务型对话

任务型系统模块框架
对话系统是一个综合性问题,主要涉及自动语音识别(automatic speech recognition,ASR)、自然语言理解(natural language understanding, NLU)、对话状态跟踪(dialog state tracking,DST)、自然语言生成(natural language generation,NLG)和语音合成(text to speech,TTS)五部分,一个完整的人机对话流程下图所示.

v2-117b58b76af3033ea31cf6c537ff0441_720w.jpg

1.自动语音识别

自动语音识别的功能是将用户语音中的连续时间信号转变为离散的音节单元或单词.在口语对话系统中,用户语音存在大量的口语现象,通常还伴随着环境噪声,这些为识别算法的特征提取、模型训练等环节增加了更多难度.作为系统输入点,语音识别的准确与否将直接影响后续语言理解和整个系统的性能优劣.提高语音识别的准确率是研发对话系统的关键问题之一.

2 自然语言处理

自然语言理解的功能是利用语义和语法分析将语音识别的结果转化为计算机能够理解的结果化表现形式.对话系统中的语言理解最常用的2个关键方法是文本分类(text classification)和序列标注(sequence labeling).

  • 1 文本分类

文本分类的目的是根据预先定义的主题类别,按照一定的规则为未知类别的文本自动确定一个类别.对话系统中,通过文本分类的方法,将用户的自然语言根据涉及领域的不同分为几类,以判断用户的意图.

目前应用在文本分类领域传统的机器学习模型有k近邻(k-nearest neighbor,kNN)、朴素贝叶斯(naive Bayesian)、支持向量机(support vector machines,SVM)等.神经网络兴起后,一些基于深度学习模型的研究也取得了不俗的效果,主要是运用了卷积神经网络(convolutional neural networks,CNN)模型,以及CNN和循环神经网络(recurrent neural networks,RNN)相结合的模型.

  • 2 序列标注

序列标注模型被广泛应用于文本处理相关领域,以得到自然语言序列对应的标签序列.对话系统中利用序列标注的方法对自然语言序列进行分词(word segmentation)、词性标注(part-of-speech tagging)、命名实体识别(named entity recognition,NER)等工作,得到标签序列后生成结构化的数据,便于对整个句子进行理解.

序列标注领域中常用的模型有隐马尔科夫(hidden Markov model,H M M)、最大熵马尔科夫(maximum entropy Markov model,MEMM)、条件随机场(conditional random fields,C R F)等.与传统的方法相比,深度学习中常用的长短期记忆网络(long-short term memory,LSTM)模型也取得了相近的效果.另外,将神经网络模型自动提取特征的优点与机器学习模型计算联合概率的方式结合在一起,得到了LSTM+CRF模型,这也是目前学术界常用的做法.

口语对话中句式灵活多变,且用户有不同的语言习惯,再加上语音识别本身出现的错误,语言理解模块同样面临着重大挑战.

3. 对话状态跟踪

对话状态跟踪的作用在于通过语言理解生成的结构化数据理解或者捕捉用户的意图或目标,目前应用在这个领域的模型很多,包括有限状态机、填槽法、基于实例方法、基于规划方法、贝叶斯网络等.

对话状态跟踪的思想是将系统和用户交互时的行为看作是在填写一张记录用户当前对话状态的表格.以订机票为例,将这张表格预先设定好状态,比如目的地、出发地、出发时间等,与系统背后的业务数据表中的属性相关联,不断地从对话中抽取相应的值来填充这个表格.这是一个利用监督学习(supervised learning)完成的多分类任务,根据对话的分类结果判断这句话中包括哪些状态和值.往往从一句对话中获取所有的状态只是理想情况,当状态表中的信息存在空白时,系统会根据空白的状态来提问并获取对应的值,直到获取到足够的状态,给出对用户的建议,或者进行相应的服务.对话状态跟踪如图2所示.
v2-ba94f05362275df4bdf14ef207b87b63_720w.jpg

4. 对话策略
5. 自然语言生成

自然语言生成的作用是组织适当的应答语句,将系统的答复转换成用户能够理解的自然语言,通常有3种解决方案:基于人工模板(rule-based)、基于知识库检索(query-based)和基于深度学习的序列到序列(Sequence-to-Sequence)生成模型.语言生成方案的优缺点和适用场景总结如图3所示.
v2-6c4f3ac7605cbff5353eac1bc271c3cd_r.jpg

  • (1)基于人工模板

基于人工模板的技术通过人工设定对话场景,并对每个场景编写针对性的对话模板,回复的最终形式是填充一个大多数的内容已经给定的模板,只有一些具体的参数需要填充.这个技术路线的好处是回答精准,缺点是过多的人工标注和模板编写工作导致移植性差,需要逐个场景去扩展.

2010年,苹果公司在iPhone4S上推出的个人语音助理Siri,在NLG环节采用了基于人工模板的技术路线. Siri里包含的众多数据、模型和计算模块,可以划分为输入系统、活跃本体、执行系统、服务系统和输出系统5个子系统. Siri整体架构如图4所示。
v2-ac41ff68b6320be6422f807b321f132c_720w.jpg
活跃实体内存放的数据和模型包括:领域模型、用户个性化信息、语言模式、词汇表和领域实体数据库等.其中领域模型包括某个垂直领域内的概念、实体、关系、属性和实例的内部表示,即本体(ontology).词汇表用于维护Siri中的表层单词到领域模型或者任务模型中定义的概念、关系、属性的映射关系,即人工编写的特定领域的对话模板.执行系统将用户的文本表示解析为内部用户意图之后调用活跃本体中的数据拼装对话,引导用户输入和生成输出结果.

通过这种方法,Siri根据某几个垂直领域的领域模型和人工编写的对话模板完成固定的任务,通过引导用户输入能得到很高的成功率,而对于解决不了的问题,Siri会直接调用搜索引擎.

  • (2). 基于知识库检索

基于知识库检索的技术路线与搜索引擎类似,预先准备好一个称为知识库的数据库,里面包含丰富的对话资料,对其中的问题建立索引,然后以NLP技术对用户提出的问题进行分析,通过关键词提取、倒排索引、文档排序等方法与定义好的知识库进行模糊匹配,找到最合适的应答内容.这类解决方案的核心技术在于找更多的数据来丰富和清洗知识库,但数据量过大时难以监督,通常找来的数据杂乱无章,使对话连续性很差.

2011年,IBM推出了电脑问答(Q & A)系统Watson,在NLG部分采用了以知识库检索技术为基础,集高级自然语言处理、知识图谱、自动推理、机器学习等开放式问答技术为一体的技术思路,通过假设认知与大规模的证据搜集、分析和评价得出最终答案.

Watson的DeepQA架构以处理流程的形式定义了分析问题的各个步骤,如环形办公室走廊,每间办公室都负责一项特殊的工作,允许多重实现来产生多个结果.每一间办公室的工作都当作大规模并行计算的一部分而单独进行,如图5所示.

v2-2b82abf7011a6b42982744fdb8e3bd9f_720w.jpg

系统在基于对问题和类型的不同理解上对多个不同的资源进行检索,返回多种候选答案。任何答案都不会立即被确定,因为随着时间推移系统会收集到越来越多的证据来分析每一个答案和每一条不同的道路.之后系统用几百种不同的算法从不同的角度分析证据得出上百种特征值或得分,这代表着在某一特定维度上一些证据支持一个答案程度,每个答案的所有特征值或得分综合为一个得分,表示该答案正确的概率.系统通过统计学机器学习方法对大量数据集进行学习来确定各个特征值的权重,最终将得分排名最高的答案输出.

DeepQA技术根据一个问题通过搜索和量化评估给出一个确定的答案,通过知识库的扩张和切换可以很好地完成Q & A任务,但这种形式结构还是无法高效地跟上源知识的增长和领域的切换,也没能与用户进行有效的互动,无法在大量的非结构化内容支持下为用户提供决策.

  • (3) 基于深度学习

基于深度学习的技术通常不依赖于特定的答案库或模板,而是依据从大量语料中习得的语言能力来进行对话,根据问题内容直接生成回答的方法被定义为基于某个条件下的生成模型.深度学习的Sequence-to-Sequence技术可以非常好地实现生成模型的框架,其最诱人的优势就是可以避免人为特征工程的端到端(End-to-End)框架,即利用强大的计算和抽象能力自动从海量的数据源中归纳、抽取对解决问题有价值的知识和特征,使这一过程对于问题的解决者来说透明化,从而规避人为特征工程所带来的不确定性和繁重的工作量.

目前,基于深度学习技术的对话系统多数采用了Encoder-Decoder框架,本节将首先描述Encoder-Decoder框架技术原理,然后分别针对深度学习应用在开发实践时需要特殊考虑的主要问题及其对应的解决方案进行阐述,模型改进思路如图6所示.
v2-4d0e41b638a43e2c70eca898ffa655b8_r.jpg

一些较早的文献采用Encoder-Decoder模型来建立对话系统,收集Twitter或者微博中评论里的聊天信息来作为训练数据,得到了效果不错的对话系统.之后其他文献在Encoder、目标函数和Decoder部分不断改进模型,有效解决了在应用深度学习技术时遇到的一些问题.

6. 语音合成

语音合成的功能是将系统答复的自然语言文本合成应答语音反馈给用户.其主要难点在于如何使生成的语音更加自然生动、需要的语音数据库更小及成本更低.

四、问答型对话系统

问答型对话系统所面临的问题相对简单,因此,我们仅关注其中的核心——问答技术。

当前的问答技术大都是检索式的,在这种方式下,需要预先提供一个知识库,答案即来自于知识库。根据知识库形式的不同,主流的问答技术可以分为以下几种:
1.CQA-Community Question Answe:社区问答,知识库是QA pair(半结构化)
2.FQA-Frequently Asked Questions:知识库是QA pair(半结构化)
3.KBQA:知识库是知识图谱(结构化)
4.Table-QA:知识库是表格(结构化)
5.MRC-QA:知识库是自由文档(非结构化)

1、CQA-Community Question Answe

中文名称是社区问答。是利用半结构化的数据(问答对形式)来回答用户的提问,,其流程通常可以分为三部分。
(1).问题解析,对用户输入的问题进行分词,纠错等预处理步骤
(2).召回部分,利用信息检索引擎如Lucence等根据处理后的问题提取可能的候选问题
(3).排序部分,利用信息检索模型对召回的候选问题进行相似度排序,寻找到最相似的问题并返回给用户
通常,根据应用场景的不同,可以将CQA任务分为两类:

(1)、FAQ(Frequently Asked Questions)问答: 在智能客服的业务场景中,对于用户频繁会问到的业务知识类问题的自动解答(以下简称为FAQ)是一个非常关键的需求,可以说是智能客服最为核心的用户场景,知识通常是封闭的,而且变化较为缓慢,通常可以利用已有的客服回复记录提取出高质量的问答对作为知识库。
(2)、社区问答: 问答对来自于社区论坛中用户的提问和回答,较为容易获取,但是相对质量较低。而且通常是面向开放域的,知识变化与更新速度较快。

2、FQA-Frequently Asked Questions

FAQ(Frequently Asked Questions)面临的问题和搜索引擎非常像:对于用户请求的request_question,在预置的QA pair中,找到一条与其最相似的response_questsion,并且把response_questsion对应的answer作为响应返回给用户,完成一次应答。
1.问题解析,对用户输入的问题进行分词,纠错,提取关键词等预处理步骤
2.召回部分(recall ),首先对预置的QA pair进行建知识库,当用户请求过来后, 召回方式:ES,Lucence,倒排索引等模糊匹配,深度学习召回
3.排序部分(rank),利用信息检索模型对召回的候选问题进行相似度排序,寻找到最相似的问题并返回给用户。排序方式:相似度计算排序(cosine),SBert,SimCse等

3、KBQA-knowledge based question answering

Knowledge Base KB中包括三类元素:实体(entity)、关系(relation),以及属性(literal)。实体代表一些人或事物,关系用于连接两个实体,表征它们之间的一些联系。

业界主流实现方式包括四部分:实体识别、实体链接、子图召回和答案排序

kbqa1.png
kqba2.png

4、MRC-QA:Machine Reading Comprehension

定义:
1.机器阅读理解基础任务是根据问题,从非结构化文档中寻找合适的答案,因此,研究人员通常将机器阅读理解形式化为一个关于(文档,问题,答案)三元组的监督学习问题。
2.给定一个训练数据集{P,Q,A},其中,P是文档集,Q是问题集,A是答案集
分类:

1.多项选择式(Multiple Choice):模型需要从给定的若干选项中选出正确答案。
2.完形填空式(Cloze Test),在原文中除去若干关键词,需要模型填入正确单词或短语。
3.片段抽取式(Span Prediction),答案限定是文章的一个子句(或片段),需要模型在文章中标明正确的答案起始位置和终止位置。
4.自由回答式(Free Answering)或总结回答式(Summary of human):不限定模型生成答案的形式,允许模型自由生成语句。

一般来说,抽取式的问答题,由于任务难度适中,且有高质量的数据集支撑,具有较高的研究价值,而它也恰是MRC-QA中对应的任务形式。(因此下文所提到的“机器阅读理解”均特指“抽取式的问答题”)

技术实现:
基本都是基于深度学习模型,找开始位置和结束位置

               R-NET: Machine Reading Comprehension with Self-matching Networks
              QANet: Combining Local Convolution with Global Self-Attention for Reading Comprehension

产品场景:
1.店小蜜:通过机器阅读理解技术,让机器对详情页中的商品描述文本进行更为智能的阅读和回答,在降低卖家服务成本的同时提高购买转化率。
2.企业小蜜:税务法规解读场景
3.法小飞:中文法律智能助手 http://sf.xfyun.cn/services/IFlyLegal

5、V-QA:Visual Question Answering

定义:
1.给机器一张图片和一个开放式的的自然语言问题,要求机器输出自然语言答案。答案可以是以下任何形式:短语、单词、 (yes/no)、从几个可能的答案中选择正确答案

2.VQA是一个典型的多模态问题,融合了CV与NLP的技术,计算机需要同时学会理解图像和文字单

3.给机器输入一张图片和一个跟这幅图片相关的问题,机器需要根据图片信息对问题进行回答。训练阶段,需要先在一个由图像 ,问题 ,答案 组成的三元组集上训练一个模型

方法:
1.将输入图像和输入问题,分别转换为对应的特征表示
2.对两种模态的特征进行融合,得到图片和问题的联合信息。
3.最后把得到的联合特征送入到分类器中从预定义的候选答案集中推断最可能的答案,或者送入到解码循环神经网络中(Decoder RNN)来直接生成答案

技术实现:
1.传统机器学习的技术:比如贝叶斯
2.深度学习联合嵌入:cnn、rnn、lstm、GRU
3.注意力机制: Attention +transformer
4.多模态融合机制(组合模型): Neural Module Networks、Dynamic Memory Networks、TRRNet

6、Table-QA—基于表格知识库问答

table1.png
table2.png

产品

1.开放领域

(1)关注 “百度 PLATO” 微信公众号
使用生成模型: PLATO-XL,参数达到了 110 亿
(2)小爱同学

1.京东言犀

https://yanxi.jd.com/

参考文献:
1.https://zhuanlan.zhihu.com/p/360410194
2.https://mp.weixin.qq.com/s/ICzDwMbC5FVkFzVOuL9pIA
3.https://zhuanlan.zhihu.com/p/428108034
4.https://github.com/BDBC-KG-NLP/QA-Survey-CN