追一技术分享NL2X技术自然语言与多样知识载体的高效交互.docx
- 文档编号:11283739
- 上传时间:2023-02-26
- 格式:DOCX
- 页数:27
- 大小:1.55MB
追一技术分享NL2X技术自然语言与多样知识载体的高效交互.docx
《追一技术分享NL2X技术自然语言与多样知识载体的高效交互.docx》由会员分享,可在线阅读,更多相关《追一技术分享NL2X技术自然语言与多样知识载体的高效交互.docx(27页珍藏版)》请在冰豆网上搜索。
追一技术分享NL2X技术自然语言与多样知识载体的高效交互
追一技术分享|NL2X技术:
自然语言与多样知识载体的高效交互
采用自然语言直接与不同的知识载体形式,例如文档、数据库、图谱等,进行直接交互,将极大提升交互效率和体验。
数字时代,信息量正呈几何级增长。
对企业来说,大量的信息以各种不同的形式储存在计算机中。
这些信息的储存形式可分为结构化与非结构化两个大类,例如企业中大类的说明文档、合同文档等就是以一种非结构化的形式存放的,而SQL数据库和图谱则是一种典型的结构化数据。
日常工作中我们经常需要对这些资料进行查询、修改等操作。
传统的交互模式,比如SQL,文本搜索等方式效率不高,体验也不够好,如果能以类似人类语言自然交流的交互方式则效果会好很多。
NL2X技术就是是采用自然语言直接与不同的知识载体形式进行直接交互的一种技术,X代表了不同的知识载体形式。
我们通常使用自然语言进行信息的获取与传递,这个过程实际是以自然语言为媒介,与某种知识载体形式进行信息互换的过程,这会极大提升交互效率和体验。
追一科技一直致力于利用AI为企业员工与客户提供更加便捷、智能的交互方式。
作为我们技术分享系列的第二篇文章,这次我们就来介绍一下追一科技如何采用NL2X技术,实现通过自然语言直接与文档、数据库以及图谱这三种不同的信息形式进行交互。
01
NL2Doc
自然语言与非结构化文档交互
NL2Doc指的是直接采用自然语言的方式对无结构化的文档进行查询,并从中找到相应的答案。
举例来说,在购买保险的过程中,购买者会针对保险产品的各个方面进行咨询。
要回答这些咨询问题,往往需要专业的保险营销人员根据产品合同的文档内容进行回答,而现在这一过程则可以借助NL2Doc技术由机器来完成。
MRC模型
NL2Doc的核心是机器阅读理解技术(MRC),它的基本形式是采用深度学习模型对文档以及问题进行编码,通过数据驱动的方式训练模型,让模型从原文中定位出与问题相关的信息并给出答案。
我们可以将不同的阅读理解形式按照任务类型大致划分为四种:
●完形填空:
任务形式为给定一篇文章,将文中部分单词隐去,让模型根据上下文预测被隐去部分的单词,以CLOTH数据集为代表。
完形填空任务的数据集易于构建,可以用准确率指标进行评价。
这种任务形式的缺点在于任务的答案限定为原文中的一个词或实体,所以并不能很好的测试机器对自然语言的理解能力,且与实际应用相距较远。
●多项选择:
任务形式为给定一篇文章、相关问题和候选答案列表,让模型从候选答案中选择出正确答案,代表数据集有MCTest,RACE,CoQA等。
由于提供了候选答案,答案的形式相较于完形填空而言更为灵活,构建数据集可以直接利用现有的语言测试中的多项选择题目,所以较为容易。
而该任务形式的缺点在于,由于该任务要求从备选答案中选出正确答案,因此问题形式相对简单(已经提供了候选答案),模型的搜索空间相对较小。
在实际场景的使用中,这种任务形式需要由其它的模块先将可能的答案候选进行召回(通常是采用各种文本检索的方式),然后在进行MRC过程。
●片段抽取:
任务形式为给定一篇或多篇文章,让模型从原文中抽取连续的片段作为问题的答案,代表数据集有SQuAD,WikiHop等。
这种方式数据集相对容易构建,答案限定为原文中的子片段,相较于多项选择有了更大的搜索空间,也在一定程度上能测试机器对自然语言的理解能力,而这种任务形式也与实际的场景应用比较接近。
●自由作答:
给定一篇或多篇文章,让模型生成一个单词序列,使其尽可能接近原答案,以微软发布的MSMARCO数据集为代表。
这种方式的任务答案形式非常灵活,能很好的测试模型对自然语言的理解,与现实应用最为贴近。
但是这类任务的数据集构建相对困难,另外由于采用的是生成式模型,因此对模型的测评和生成式模型一样,精确的评价需要大量人工的参与。
2018年追一科技研发了MRC模型Z-Reader,该模型在R-NET的基础上进行了进一步改进。
同时,根据业务的实际需求,NL2Doc系统要求所使用的MRC模型带有拒识能力。
(拒识能力指的是当文档中没有问题的答案时,模型需要给出明确的指示以表明当前问题找不到答案。
)因此我们对R-NET进行了相应的修改。
Z-Reader采用的是片段抽取的方式,模型可以分为输入、编码、问题-文档融合、文档自融合以及预测模块这5个部分。
输入部分
在输入部分我们采用了问句以及文档的ELMo向量。
同时我们发现在一些问题中,确定词的词性能给答案的定位提供明显的帮助。
例如在问题“寿险危险保额的累积金额是多少?
”中,“寿险危险保额”是一个专有名词,要从文档中找到相关的答案,则文档中的答案片段附近必定也会出现这个名词,因此让模型知道词性可以辅助定位到答案片段的位置。
我们在输入部分加入了POS特征,显式地将词性等信息带入模型当中。
另一个加入的额外特征是词共现特征,在对问题进行回答时,答案的片段附近通常会出现问题中相同的词,这一特征能够将这种关系显式地表现出来。
我们通过对这两种特征进行拼接,然后输入模型。
文档编码
模型采用双向GRU分别对文档以及问题进行分开编码。
假设输入的问题与文档的ELMo向量分别为Q=
与P=
,则采用如下的方式对文档和问题进行编码。
其中[
]代表拼接操作,e,k分别为POS与词共现特征。
然而,在做阅读理解的时候,文档与问题是密切相关的,因此模型中需有对两者的编码进行交互,而“问题-文档融合”部分则起着这个作用。
问题-文档融合
问题与文档的融合目的是让两者的信息充分融合,这里的融合首先让问题的每个位置上的特征以当前文档位置的特征为基础进行注意力机制加权(attention)得到上下文表征
,这种加权是希望按照当前位置的文档信息来体现问句中的重要部分。
加权后的上下文表征通过单个GRU模块再与文档表征进行融合成为带有问题信息的文档表征
而其中的
则加入了门控机制来体现当前的文档位置是否足够重要
经过融合后的文档编码
携带了完整的问句信息,但它只携带了当前位置的文档信息。
而通常阅读理解的答案片段需要结合全局的文档信息来考虑,因此仅使用这个编码是不足够的。
通常来说我们可以在后面再加上一层RNN来解决这个问题,但RNN虽然在理论上能编码无限长的序列,但实际上却经常只局限在短程内的信息上。
因此这里需要一个类似于Transformer结构中的自注意力(self-attention)机制来让编码携带上全文信息。
同时在这一步中我们加入了拒识标识位,该位置与文档一起输入编码层,进行“问题-文档融合”的计算。
文档自融合
文档自融合的作用则是让当前位置上的文档特征融合整个文档的信息内容。
它采用的依然是类似于上一步中“问题-文档融合”的结构。
其中
是文档采用注意力机制计算,基于自身的上下文表征
同理
也是按问题-文档融合步骤中的方法计算的门控输出。
在这一步中,拒识标识也一样参与计算。
答案预测
答案预测部分采用的是指针网络(PointerNetwork)来预测答案片段的开头与结尾两个位置。
指针网络本身也是一个GRU,但由于只需要预测开头和结尾,因此它实际的长度是2。
由于开始和结束位置上有可能输出文档中全部词的某一个,因此做法是使用指针网络来指向文档中的某个词,如下:
由于只需要开始和结尾位置,因此
{1,2}。
其中
则为指针网络在第
位置上的输出向量,计算方式如下
而当
时,采用问题编码来
对进行初始化,
同时,在答案预测部分,拒识标识会进行一个二分类输出,给出当前问题在文档中是否有存在答案的预测,如果该预测大于某个预设阈值,则任务该文档当中没有问题的答案。
追一科技在阅读理解技术上有着长期的探索与积累,我们在2018年中文信息学会举办的中文阅读理解竞赛CMRC2018中获得了冠军。
此后我们又对NL2Doc中的MRC模型进行了调整,换成了基于大型预训练模型的结构,在系列文章的第一篇中对这些大型的预训练模型进行了详细的介绍。
在2019年我们再次在斯坦福大学发起的对话式问答挑战赛CoQA中获得榜单第一名,这是算法模型在这个榜单上首次超越人类成绩。
关于追一科技在各项比赛中的成绩与介绍,将会在未来的文章中详细介绍。
功能模块
为了适应实际场景的需求,追一科技的NL2Doc系统中除了模型部分外,整个系统可以划分为运营平台、标注平台、训练平台以及服务平台四个功能模块。
运营平台是NL2Doc的管理后台,负责模型的上下线以及文档的增删改等操作,而模型训练所使用的数据可以在标注平台进行标注,标注完成后可以发起训练,模型则会在训练平台上进行训练,训练完成后模型会被推送到服务平台进行在线服务。
标注平台
标注平台给使用者提供了简单快捷的标注入口。
如果我们想针对性地对某些领域的数据进行标注来微调模型,那么这个标注的过程则可以在标注平台完成。
上传的待标注文档将会显示在页面当中,针对文档中与答案有关的片段,可以直接选定并创建标注,然后输入相应的问题。
执行完标注操作后,相应的片段则被视为创建出的问题的答案片段,为模型的训练提供依据。
训练平台
训练平台主要提供模型训练的能力。
在标注平台中标注的数据会被推送至这里进行训练。
同时在运营平台中选定的上线文档集合会在模型训练完成以后,经过导出模块与模型一起打包发送到服务平台。
将训练好的模型与在线文档绑定的目的是因为在教育调优过程中,通常是针对某个在线文档集出现的一些badcase对模型进行调整,因此这种绑定的方式能够明确将调优的模型版本与在线文档进行对应关联。
服务平台
服务平台是模型提供对外服务的部分,它包含了中控、文档解析服务、检索服务以及线上服务四个部分。
通过标注平台标注的数据会由中控向训练平台发起模型的更新训练任务。
此外考虑到模型训练完成后,在线文档也可能会根据业务需要进行一些更新,因此NL2Doc系统也具备在线文档热修改的功能。
用户可以通过运营平台对在线服务中的被阅读文档进行修改,而这部分文档通过文档解析服务处理后,会通过中控直接进入在线服务的文档库中,作为被阅读的文档。
在实际使用的场景中,文档的数量非常大。
因此在MRC模型进行文档阅读之前,我们会针对输入的问题,对全量文档进行检索,被召回后的文档才会通过MRC模型进行进一步的阅读理解。
对文档先进行召回的目的是因为阅读理解模型通常是大型的神经网络模型,耗时较高,所以采用检索召回的方式来降低模型需要阅读的文档数量,以保证NL2Doc系统的性能。
召回的文档会被送入在线服务模型。
我们采用TF-Serving挂载阅读理解模型进行在线服务,召回的文档会按照前面介绍的方法进行前处理,提取POS特征与词共现特征,然后进入模型推理阶段。
02
NL2SQL
基于关系型数据库的自然语言问答
NL2SQL是指让普通使用者可以在不懂SQL数据库相关专用语言(SQL语言)的前提下,直接通过自然语言对已有的SQL数据库进行相关操作的一种技术。
在企业的众多资料信息中,SQL数据库是一种典型的储存结构化数据的方式。
在实际场景中,对SQL数据库的查询需要使用专门的SQL语句进行,这给非专业人士设置了门槛。
而另一方面,企业员工或客户对企业数据的查询又非常普遍,许多自然语言的查寻逻辑实际上可以直接对应到SQL语句上,例如下图的例子:
“哪些城市本周成交量大于200平方米”可以直接转换为SQL语句SELECTCityFROMTABLEWHEREThisweek>20。
而借助NL2SQL,可以将自然语言直接转换为SQL语句,并对数据库进行查询。
NL2SQL模型
与NL2Doc系统一样,NL2SQL系统中最核心的功能是由深度学习模型完成的。
模型会对输入的自然语言询问以及SQL表格进行处理,然后返回完整的SQL语句。
通常来说,输入模型的内容包括了原本的自然语言问句,以及与表格相关的信息内容(schema),如下图所示:
从本质上看,自然语言转化为SQL语句主要需要解决两个核心问题:
1.schemalinking:
找到自然语言中的相关信息片段,并与表格的schema(表名、列名以及值)进行关联。
例如上图中的例子中需要找到“陈启超和李四”关联到表格的“姓名”列;
2.logiclinking:
找到自然语言中的相关逻辑表达,并与SQL语句的逻辑表达进行关联。
这种关联通常体现在SQL的聚合函数、条件逻辑等方面。
例如需要将自然语言中的“最大、多少”等逻辑表达与SQL语句中的“MAX,COUNT”等关键词进行关联。
当前的NL2SQL模型在schemalinking的问题上投入了较多的关注,许多模型设计会采用特别的结构来加强shemalinking的能力,例如为表名、列名以及值设计特殊的编码方式等;而针对logiclinking的设计则较少。
目前将自然语言通过模型转化为SQL语句主要有两种方式,一种是将SQL语句拆分为多个子任务,通过多任务学习来让模型完成各个子任务的预测,然后再组合为SQL语句。
另一种方式是采用生成式,即模型通过对问句以及表的相关信息进行编码以后,直接生成出SQL语句。
这两种方式各有优缺点。
直接生成式的方案在解码时更加简单,适合进行跨表查询的情况。
而拆分为多任务的形式则会让NL2SQL系统更具可解释与可控性,因为在多任务形式下,SQL的每个关键词(例如SELECT,WHERE等)被拆分为不同的任务,模型会分别输出这些子任务的预测。
因此在将这些输出重组为SQL语句的过程中,我们可以根据模型的单个任务输出进行后处理来让整个NL2SQL系统更加可控。
由于在工业场景下生成式的NL2SQL模型对标注数据的需求量较多,并且相比于多任务的方式更加不可控。
为了保证实际场景应用中系统的可控性以及尽可能降低对数据量的需求,追一科技采用多任务方式的NL2SQL模型。
从SQL语句的结构来看,我们可以将其拆解为选择列以及条件两个大的部分,分别对应了SELECT以及WHERE这两个关键词。
而选择列则可以进一步拆解为选择多少列(select-number)、选择哪些列(select-column)以及选择列的集合关系(select-aggregation)。
而条件部分则可以进一步拆解为条件数量(where-number)、条件指定的列(where-column)、条件的类型(where-operator)以及条件的值(where-value)。
除此以外,我们还加入了拒识(rejection)与表值感知(where-relation)两个部分。
模型的编码部分采用了大型的预训练模型(关于大型预训练模型的介绍可以回看以前的文章),在这里我们主要介绍上述任务的具体计算方式。
我们将输入的问句以及所有的列名用[SEP]字符间隔并拼接为一个长序列,然后通过预训练模型进行混合编码,设
为第
个列名中第
个字的输出,我们以表列名的[SEP]位置输出为表列的整体表征
select-number
select-number的目的是确认选择的列的数量,我们先对所有的列进行自注意力计算出所有列的上下文特征
,然后用上下文特征对问句中的每个字特征进行加权计算,得出融合列信息的问句表达:
其中
为模型参数,即我们对计算出的
进行分类来确定选择的列的数量
select-column
select-column的目的是确定选择的列,我们先对问题中所有的词进行自注意力计算得出问句的上下文特征
,然后用上下文特征对每个列中的每个词进行加权计算,得出融合问句信息的列表达:
select-aggregation
select-aggregation的目的是确定列的聚合操作方式,一共包含[Null,AVG,MAX,MIN,COUNT,SUM]这几种,我们采用与计算select-column同样的特征来进行分类预测:
where-number
where-number指的是SQL语句中在WHERE后条件语句的数量。
我们把这个问题作为了一个分类问题来处理,即设定一个固定上限,比如说最多6个condition,然后做6分类。
具体的做法和select-number一样:
where-column
where-column是用来确定条件中列的位置的任务,如select-column一样,我们对每列的位置进行二分类来判断是否属于条件中的列:
where-operator
where-operator是用来确定条件中列的具体操作,我们定义了[>,<,==,!
=]四种条件操作,类似于select-aggregation那样,我们采用分类的方式来进行训练。
where-value
where-value指的是在SQL中WHERE后的条件语句中,找到被提及的、与问句中相关的片段。
针对问句中的每一个字,我们计算它与每一个表的关系,并以此确定value片段以及该片段属于哪一个列:
其中
代表问句中第
个字为第
个表列的value的概率。
追一科技在2018年就开始对NL2SQL进行研究,是国内对该技术进行研究与落地最早的企业之一。
在2019年我们举办了首届中文NL2SQL挑战赛,并提供了全球首个中文NL2SQL数据集,填补了中文在NL2SQL这一技术领域上的空白。
这次比赛共有1457来自于企业、科研院校的队伍参加,最终复赛的最佳成绩达到92%,这一比赛在中文NL2SQL技术积累与发展中起到了巨大的推动作用。
NL2SQL系统
NL2SQL系统中整体可以分为前端服务、后端平台、解析引擎以及执行引擎四个模块。
其中解析引擎是NL2SQL系统的核心功能部件,其中包括信息抽取、表格筛选、模型以及指令编辑四个子模块。
信息抽取与表格筛选
在问句进入模型前,会先对其中的关键信息进行抽取,用于表格的筛选。
虽然NL2SQL模型理论上可以编码多张表格,但为了提高系统的性能我们会对所有的表格进行一次预筛选。
方式是用问句中抽取出的信息对所有表的表名以及表头进行检索,召回头部的表格再送入模型当中。
指令编辑
在实际使用时,用户经常会对相同类型的查询进行多次细微的修改以确定最终想要的信息。
为了让这种重复查询更加便利,需要让用户可以直接在上一次查询的语句上做局部修改即可。
如上图所示,第一次查询的结果会在前端界面上显示,而页面上端会显示这次查询的关键字段,如果再次查询只更改某个字段,可以直接在关键字段上进行编辑而不用重新输入自然语言问句。
指令编辑的输入则不需要再次经过模型的解析,直接以SQL语句的形式返回给后台处理。
这在提高使用便利性的同时也提升了系统性能。
03
NL2Graph
自然语言与知识图谱直接交互
NL2Graph方法
NL2Graph是以知识图谱作为结构化数据的存储媒介,将自然语言转化为知识图谱的子图或SPARQL、CYPHER等图查询语句的技术。
知识图谱是以实体、关系、属性组成的三元组为最小单元构建的网状联通的结构化知识。
知识图谱有着与关系型数据库相同的优点:
可计算、可高效检索。
另一方面,与关系型数据库相比,知识图谱的结构更加灵活、其检索和推理模式更加贴近自然语言,令其尤为适合作文本结构化的存储和检索媒介。
目前NL2Graph的两大主流技术是语义解析方法(SemanticParsing)和信息提取方法(InformationRetrieval)。
语义解析方法将自然语言转化为图查询语句,在知识图谱中执行后获得匹配的子图;而信息提取方法直接将自然语言与知识图谱中的子图匹配。
两者的区别可用下图表示:
信息提取方法
信息提取方法分为召回和打分排序两个阶段。
知识图谱的子图数量与知识图谱本身的规模呈指数增长关系,因此在召回阶段必须限制召回的子图数量,一般会采用锚定话题实体(TopicEntity)限制目标实体,即答案到话题实体的跳数(Hop)的方法得到有限个候选子图。
如果跳数限制为1,则得到的子图为一个三元组,能用一个三元组回答的问句被称为简单问句(SimpleQuestion)。
在打分排序阶段,将所有候选子图与问句进行相似度匹配打分。
对于简单问句,实体、关系和属性均可被编码为三元组的分布式表示,与问句的分布式表示拼接后通过神经网络模型计算出相似度。
此外,实体的类型、关联实体、外部常识信息等也可以被加入编码,提高模型的泛化性和匹配效果。
由于子图数量正比于图结点度数的跳数次方,因此对于跳数大于1的非简单问句,一般采用分阶段召回-排序的策略,每个阶段召回一跳的候选三元组,排序后只保留得分topK的候选集,进入下一跳的召回-排序。
键-值记忆网络、强化学习等方法被用于每个阶段的排序-打分策略。
这种分阶段策略和基于BeamSearch的方法使信息提取在多跳问题上也能获得不错的可扩展性(Scalability),为其赋予了一定的推理能力。
信息提取方法直接将问句与子图匹配,省去了执行查询语句的过程,这是它的一个优点,也是一个局限。
首先,信息提取方法要求每个问句都包含一个话题实体(例句:
科比的职业生涯中,单场得分最高是多少分?
对应的话题实体是科比-篮球运动员),对于没有话题实体的问句,信息提取方法就无能为力(例句:
哪些人既当过NBA球员又当过NBA教练?
)。
其次,信息提取方法只适用于一跳或多跳的事实类问题,即可以用一个或一条链状的三元组“回答”的问题,对于复杂问句,比如条件筛选类、逻辑比较类问句,信息提取方法无法回答。
语义解析方法
语义解析方法将问句与结构化查询语句(StructuredQuery)相匹配,知识图谱常用的结构化查询语句为SparQL(查询图RDF数据库)、Cypher(查询Neo4J图数据库)等。
上图所示的Cypher语句表达的含义是“列出和TomHanks合作过的演员的所有作品”,我们可以看到语义解析方法可以表达这类带有条件筛选、逻辑推理复杂问句,其表达能力要强于信息提取方法。
早期的语义解析方法将问句进行组合范畴语法(combinatorycategoricalgrammar,简称CCG)解析,并将解析到的语法树直接映射为无事实查询图(ungroundedgraph,即不含实体、关系、实体类型信息的查询图框架)。
查询图框架补充了事实类信息后得到的查询图可以映射为SparQL查询语句。
由于事实类信息的补充方法不止一种,一般将候选的查询图与问句进行相似度匹配-排序。
语义解析方法处理多跳复杂查询图时,也会面临信息提取方法一样的组合爆炸问题,分阶段构建查询图加BeamSearch的策略自然也可以用于解决这一问题。
比较成功的有Bao等人提出的STAGG方法和Hu等人提出的State-transitionFramework(STF)等方法,它们的基本思路都是将查询图构建过程拆解为若干种原子操作,将查询图构建问题转化为寻找最优原子操作组合的问题。
图构建的每一步的选择空间都有限,并使用深度学习模型,以原始问句和每一步涉及的子图片段的分布式表示作为输入,通过相似度匹配打分,学习选择的策略,同时用BeamSearch限制体系的整体复杂度。
上图展示了分步语义解析方法拆解问句"WhofirstvoicedMeginFamilyGuy?
"的步骤,包括了话题实体锚定,推理链拓展和限制、聚合添加三类原子操作。
其中用了实体链接模型对话题实体锚定步骤打分,并用了一个交互式的匹配模型对推理链拓展步骤打分。
知识图谱问答机器人
知识图谱问答机器人是对NL2Graph技术的工程化应用,除了对NL2Graph技术的落地外,我们针对工程和业务场景的复杂性,探索出了一套方法论。
实体识别-子图匹配模块
作为在线问答的第一个模块,实体识别模块负责识别用户问句中的实体。
这里的实体既包括图谱中的文本类实体,如人名、产品名等;也包括图谱中的数值类属性。
对于数值类属性,利用图谱内置的单位归一化规则和业务泛化规则,将其转化为可
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 技术 分享 NL2X 自然语言 多样 知识 载体 高效 交互
![提示](https://static.bdocx.com/images/bang_tan.gif)