分享

也谈KBQA知识图谱问答:工业和学术视角下的知识图谱问答场景、技术评测、选型要素与实践分析

 520jefferson 2022-09-11 发布于北京

kBQA是一个有趣的话题。

不同的领域对知识的搜索需求不同,但最终的目的都是做知识的整合、梳理、索引和管理,并在此基础上提升客户应答效率,例如:

在银行业务搜索领域,针对银行业务、理财产品、保险的售前、售中以及售后环节提供垂直智能化服务支撑方案,面向客户、服务人员以及代理人提供系统化智能服务方案,为企业有效降低服务成本、强化组织管理、提升服务体验;

在电子政务与法律领域,针对政府机构,对便民服务、市长热线、来电办理、问题督办等场景在线智能处理,提供民众自主办理、快速响应。

本文主要围绕知识图谱问答这一主题,从工业界知识搜索常见场景、学术场景下的KBQA相关评测、工业场景下的知识搜索技术选型以及相应案例进行介绍,供大家一起参考。

一、工业界知识搜索常见场景

1、知识定位搜索

知识定位搜索,指的是针对用户文档中的信息进行查找和定位的一类搜索模式。例如,对于答案在文中有明确结果的,返回确切值;对于答案隐藏在段落中的,返回文章中的细节段落;对于答案在文章表格中的,返回经过事先解析好的文章表格内容和具体位置等信息。从定位的数据类型来看,大致可将搜索分为句子/段落/全文型、表格型和图片型三种,图片型是其中值得关注的一类。例如,金融领域许多研究报告、公告当中包含着大量记录和反映数据指标的图表,该图表作为检索的对象,既可以方便写作素材调取,也可以作为文本聚合的重要参考依据。

2、知识结构化搜索

结构化搜索,又称图谱搜索,即一类以非大段文本和知识卡片形式进行知识问答的搜索模式,其特点是简洁、明了和结构化,在谷歌上线知识图谱问答以来,成为了一个很火热的方向。例如,当用户直接询问“苹果现任CEO是谁?”,系统直接回复“蒂姆·库克”,询问“中国现役篮球运动员有哪些?”,系统直接回复“易建联、孙悦、朱芳雨、王仕鹏、刘炜、李根、周鹏等”。结构化搜索根据不同的业务场景,在回答样式和展现形式上存在差异,但精简、直接、准确是该搜索方式的重要特点。

知识图谱问答典型类型包括以下几种:

单条件问答。 没有配置相关知识的情况下,能够模糊推荐最相关的知识。例如,输入“银行信用卡五万额度以上的信用卡办理条件是什么”时,给出5万额度以上信用卡类型及对应的办理条件。

复杂条件问答。 例如,针对多款理财产品的收益率,风险级别,起购金额,期限等问题进行提问和产品比较。如,针对学生群体,额度1万以上且不需要年费的信用卡有哪些?

多轮对话问答。 支持对话过程中的上下文关联,能够根据上下文识别问题,并在多轮对话中,支持实体继承、上下文指代消解、上下文省略恢复。

例如:

问:银行信用卡有哪些分期业务?
答:消费分期、账单分期、自动分期
问:第二个是什么?
答:您可将已出账单中的消费交易一次性办理分期,省去多次申请消费分期的繁琐。
问:有什么活动?
答:分期减免手续费,最高6期轻松减负

3、知识实证搜索

“实证搜索”是时下流行的一种可信搜索模式,与直接给出问题答案的知识搜索形式不同,该搜索方式要求在给定具体结果的同时,将答案的来源(包括该答案的发布机构、包含该答案的准确论述,系统对该答案的置信度得分),这样一来,能够提升用户对知识的把控和鉴别能力。实际上,这种知识搜索方式是缓解当前知识结构护化抽取精度不高,导致结果置信度存疑的重要解决方法,用户可以在得到相应答案的同时,根据答案的描述和发布来源自行进行检验。

二、学术场景下的KBQA相关评测

1、KgCLUE

KgCLUE是中文语言理解领域最具权威性评测基准CLUE在知识图谱问答任务上的榜单,作为中文KBQA测评基准,基于CLUE的积累和经验,并结合KBQA的特点和近期的发展趋势,精心设计了该测评,希望可以促进中文领域上KBQA领域更多的研究、应用和发展,评测数据如下所示:

Image

其中,所用知识库包括实体数量3137,356,关系数量246,380,高频关系(>100)为4143条,三元组数量共计23,022,248条。

当然,也给出了体验地址:http://www.:5000

地址:https://github.com/CLUEbenchmark/KgCLUE

2、NLPCC2016/2017

NLPCC在2016和2017两年都举办了开放知识图谱问答比赛,其中,NLPCC2017的Task5:Open Domain Question Answering中,提供了KBQA的相关评测数据。其包含 14,609 个问答对的训练集和包含 9870 个问答对的测试集,并提供一个知识库,包含 6,502,738 个实体、 587,875 个属性以及 43,063,796 个三元组。

Image

地址: http://tcci./conference/2017/taskdata.php
地址: http://tcci./conference/2016/pages/page05_evadata.html

3、ccks2018-2021

作为国内标准的知识图谱会议,CCKS连续在2018年至2021年都举行了知识图谱相关评测,即基于中文知识图谱的自然语言问答,简称CKBQA (Chinese Knowledge Base Question Answering)。

Image

即输入一句中文问题,问答系统从给定知识库中选择若干实体或属性值作为该问题的答案。问题均为客观事实型,不包含主观因素。理解并回答问题的过程中可能需要进行实体识别、关系抽取、语义解析等子任务。这些子任务的训练可以使用额外的资源,但是最终的答案必须来自给定的知识库。

地址: https://www./competition/ccks_2019_6/

三、工业场景下的知识搜索技术选型

目前知识搜索先后经历了传统全文检索模式、FAQ模式以及泛QA模式三种模式的变迁,三种方式对技术的要求也不断增加,下图中列举了对应的优势和劣势。在实际的业务实施过程当中,我们常需要根据具体的问题,选择相应特定的应答策略,这通常表现成一个多问题类型集成的泛QA模式,需要充分考虑搜索引擎、业务系统对接、搜索系统管理以及其他能力调用等模块之间的协作。

利用现有的知识抽取和知识搜索技术,的确可以在一定程度上满足一些搜索场景的需求,但在具体搜索项目课题立项以及项目实施的过程中,依旧存在多个需要考虑的关键点、误区和风险点。

1、实施关键点

在实施的过程中,首选需要明确搜索的对象:受众,面向个人or面向统一平台的,DIY式的搜索和大众搜索所带来的维护成本、开发成本时截然不同;确定问题的边界:有所问,有所不问。这个尤其重要,需要将用户问题约束住,切勿脱离数据而设定问题,脱离现实技术而设定问题,以免预期落空;

根据问题找数据:需要根据预先调研和确定好的问题来构建相关的数据库。如前面所提到的,若是走问答对的形式,则走问答对构建以及问句类型设计的路线;若走全文检索的路线,则需要根据所需检索的字段确定搜索的单元,如针对文档内部的搜索,常常需要将文档的层级结构信息,段落、子段落、常句、表格、标题等进行有效索引;

若实施KBQA,则需要构建相应的结构化数据,并考虑多个不同结构化数据库的存储、通信、后续数据的接入问题;

关注搜索架构的鲁棒性:一个成功的搜索系统,需要从搜索性能、搜索变更能力、搜索维护压力、数据的标准化、外围数据接入与通信方式等多个方面进行考虑,尤其是在系统升级的过程中,能够做到快速、平稳的切换;

关注数据的安全性与更新机制:一个搜索系统,在上线运行之后,通常会处于一个不断积累数据和功能扩充的状态,涉及到数据的安全性问题,这个在银行、涉密等多个环境下尤为重要。

2、误区与风险点

认识要冷静:AI搜索助手没不会那么”AI”,大多时候会觉得它很“智障”,尤其是现在“神化知识图谱”或“神化KBQA”的风气不减的当下,更是要保持冷静;

预期要实际:“深度学习”有所为有所不能为,需要大量的人工、规则、模板,动辄的“模型迭代”和“自我学习”在工业级场景大多很难实施,受到人力、算力、客户忍耐度、维护等多方因素的制约,警惕将学术论文评测的做法引入到工业级落地当中;

人机结合是正道:选择平稳、可靠的AI助手的最佳方式:灵活可配置的人工参与接口,可迭代升级,尽可能减少后期维护成本额,这样才能省心、省人力。在整个项目实施上,可以小步快跑,步步迭代,切勿超之过急,先做好每个细分功能点;数据整合占大块:功能的设计、业务的梳理、数据的整理,占据整个项目超过70%的时间。针对不同数据库之间的搜索,需要花费大量的人工进行数据梳理;针对结构化查询,需要准备大量的外部知识库(业务词典、同义词词典等);

项目设立要慎重:在确定是否需要建设一个搜索系统之前,需要考虑当前的数据类型是否适合于搜索,自己当前的资源是否能够支撑搜索代价,预设的数据架构是否能够涵盖后续的数据类型,不慎的话会影响后期维护和扩展。

四、基于FAQ的匹配式知识问答

FAQ是英文Frequently Asked Questions的缩写,中文意思就是“经常问到的问题”,或者更通俗地叫做“常见问题解答”,是较全文检索信息进一步聚合、回复进一步精确的搜索方式。FAQ实施的过程包括两个核心点,即:问答对数据的构建和问题匹配评分模型,其中,问答对的规模取决于具体的业务积累,在前期冷启动环节中常需借助业务专家标注,设定一些相关的标准问答对。

1、问句预处理

问句压缩和纠错,是FAQ模块必备的两个预处理技术。由于FAQ的问题通常较短,用户在提问的过程当中,往往会夹带着一些主观噪声,即我们常说的口水句,这会对实际的标准问匹配造成困扰。

针对这类问题,解决的方案包括基于语法树分析与关键词的规则方法以及基于文本摘要和句子压缩的方法加以精简和剔除。前者通过标点或空格将长句分割成若干个短句,对短句进行口水句分类,然后基于概率和句法分析进行句子压缩,尽可能剔除非必要成分,只留下关键词、主谓宾等核心成分。后者的可用模型较多,从传统的textrank到采用RNN、CNN等的深度学习模型,均可以生成相应的摘要效果。此外,问题纠错也是FQA(不限于FAQ,KBQA以及全文搜索范式都需要用到)的预处理流程之一,常见的解决方法包括字典+规则的纠错以及基于神经网络模型的纠错两种。

2、基于知识图谱的QA对构造

基于知识图谱的QA对构造。于知识图谱三元组是典型的<实体1,关系,实体2>或者<实体,属性,属性值>,而知识查询大多是以已知其中两个元素为条件,以其中某一元素作为答案,因此,可以在已有的知识图谱数据的基础上,可以通过人工设定QA对生成的方式,快速生成大量的QA对。

1、Question:实体1的关系是?Answer:实体2
2、Question:实体1是实体2的?Answer:关系
3、Question:实体的属性是?Answer:属性值

3、问句匹配

问题匹配负责将用户的自然问句和问答库中的问题进行匹配,找出最佳标准问,常见的方式包括基于es相似度,编辑距离等传统方式,siamese孪生网络、BERT-finetune等深度方式。

五、基于KBQA的解析式知识问答

KBQA(Knowledge base question answering)是针对结构化数据的一种直截了当的问答方式,可以根据设定的问题类型,通过问句解析的方式,形成若干三元组及相关的操作条件,并转换成特定的查询语句,直接返回相应结果,是当前一种较为流行和新颖的搜索方式,但技术还相对较为初步。

KBQA方式的问答包括意图分析、标签(实体、操作符)识别、条件体与目标体识别、查询语句生成等几个关键步骤。

1、意图分析

意图分析是KBQA范式知识问答的第一步,其任务在于对用户所提出的问题进行问题分类,因此又称为意图分类。不同的意图对应于不同的意图槽(即所需要进行抽取识别的问句查询要素),因此后续所需进行的标签识别、条件体与目标体识别也不同,意图分类的准确性会影响整个后续环节的性能。与典型的自然语言处理分类任务一样,问题分类的方法主要包括基于学习和基于规则词典两种方式。在已有语料的情况下,可以通过语料训练,得到基于学习型方法的问题分类,在缺少训练语料时,基于关键词和规则的问题方式往往成为首选,

1)基于词典规则的意图分类

基于词典规则方式的问题分类核心思想在于通过收集制定出能够明显标记和区分出该问题类型的触发词或关键词集合,并对所输入的问句进行词语匹配或在此基础上设定相应规则进行问题判定;以医疗问答为例子,给定对于判定疾病的发病原因、治疗方式、预防措施三种不同的意图类型,可以构造出如下关键词。

症状表现:['症状''表征''现象''症候''表现']
发病原因:['原因','成因''为什么''怎么会''怎样才''咋样才''怎样会''如何会''为啥''为何''如何才会''怎么才会''会导致''会造成']
并发症状:['并发症''并发''一起发生''一并发生''一起出现''一并出现''一同发生''一同出现''伴随发生''伴随''共现']

针对一个问句,分别对问句进行意图关键词进行匹配,并分别得到每种意图中对应词语的个数进行计数,根据计数信息进行排序,选择数目最大的意图作为问句的最佳意图。

2)基于学习模型的意图分类

基于学习模型的意图分类方法,则通过预先对问句进行意图标注,形成一定规模的标注数据集,然后通过构造分类器进行训练,然后得到分类结果。例如,在典型的FAQ法律问答当中,存在'婚姻家庭'、'劳动纠纷'、'交通事故'、'债权债务'、'刑事辩护'、'合同纠纷','房产纠纷','侵权'等13类问题,通过构造CNN和LSTM模型,可以实现意图分类,如下图采用keras搭建双向LSTM分类模型。

   def build_lstm_model(self):
        model = Sequential()
        model.add(LSTM(32, return_sequences=True, input_shape=(self.max_length, self.embedding_size)))  # returns a sequence of vectors of dimension 32
        model.add(LSTM(32, return_sequences=True))  # returns a sequence of vectors of dimension 32
        model.add(LSTM(32))  # return a single vector of dimension 32
        model.add(Dense(13, activation='softmax'))
        model.compile(loss='categorical_crossentropy',
                      optimizer='rmsprop',
                      metrics=['accuracy'])
        return model
    def train_lstm(self):
        X_train, Y_train, X_test, Y_test = self.split_trainset()
        model = self.build_lstm_model()
        model.fit(X_train, Y_train, batch_size=100, epochs=50, validation_data=(X_test, Y_test))
        model.save(self.lstm_modelpath)

通过模型运行,可以对输入的问句进行问题类型预测,例如:

输入:question desc:他们俩夫妻不和睦,老公总是家暴,怎么办?
输出:question_type: 婚姻家庭,概率为0.9994359612464905;
输入:question desc:我们老板总是拖欠工资怎么办,怎么起诉他?
输出:question_type: 劳动纠纷,概率为0.9999903440475464

单意图分类在实现上已经有较好的方式,但在真实情况下会出现多意图分类的情况,例如“我今天为啥会头痛,该怎么办?”问句中同时包含了“发病原因”和“发病治疗措施”两个意图。针对这种情况,则常需要转换成一个多标签分类任务进行处理。

2、标签(实体、操作符)识别

标签识别,是指识别出与目标数据库中相关联的实体、属性、关系或操作符集合,即常说的槽位识别。实体识别包括常见的机构、日期、金额、地点、人物等实体,职位、指标名称等属性关系。例如,给定问句“比亚迪的老总和董秘是谁”,经过标签识别后,可以得到公司实体“比亚迪”,属性类型“老总”和“董秘”。

Image

包含操作符的回答是处理难度较大的一类,我们会经常涉及到一些最高、最低、平均、总和、相差多少等问法,这种问题比确定性问题的解决方法要复杂一些,下图列举了一些常见的操作符示例。

3、条件体与目标体识别

在识别完特定的标签之后,还需要在此基础上形成可供查询转换的条件部分和目标部分。条件体,即在进行答案搜索过程中需要进行匹配的条件,如某个实体或标签应该满足的属性值或关系类型(也常称为意图槽填充)。目标体指具体需要返回的数据,通常包括某个实体或标签、某个实体或标签的属性或关系、符合条件体的布尔型数据(是否存在这样的数据)。同样的,用于条件体和目标体识别的方法包括基于规则模板和基于学习两种。

1)基于规则模板的识别方法

基于规则模板的识别方法包括基于问题模板和基于标签依存两种。问题模板,即对目标实体条件体和目标体进行符号化,后续通过符号化所在索引位置直接进行相应的取值。例如,在进行电影知识图谱问答时,在识别出电影名称、人物、角色等标签后,可针对某一类问题,自定义识别模板,例如 “参演电影”、“ 扮演角色的演员”、“ 谁在电影中扮演了某个角色”三类问题的模板示例的问题模板。

例如:问参演电影

ACTOR.*作品,ACTOR-ACTEDIN-MOVIE?
ACTOR.*电影,ACTOR-ACTEDIN-MOVIE?
#问扮演角色的演员
.*参演.*ROLE,ACTOR?-TAKES-ROLE
.*饰演.*ROLE,ACTOR?-TAKES-ROLE
#问谁在电影中扮演了某个角色
MOVIE.*ROLE.*出演,ACTOR?-ACTEDIN-MOVIE AND MOVIE-HASROLE-ROLE AND ACTOR?-TAKES-ROLE
MOVIE.*ROLE.*扮演,ACTOR?-ACTEDIN-MOVIE AND MOVIE-HASROLE-ROLE AND ACTOR?-TAKES-ROLE

自定义模板映射的方式具有准确率较高,易维护和扩展的优点,但人工成本要求较多,同一个问题通常会有多种不同问法,在短时间内无法穷举所有可能。依存关系的引入,在一定程度上解决了这一难题,构建起所识别的标签之间的父子关系,可对条件体和查询体进行准确定位,将实现识别好的标签组成一张图,并通过计算标签与标签之间的可能关联,利用动态规划的方法,找出标签之间概率最大化的依存路径。

2)基于学习方式的识别方法

基于学习方式的识别方法,可以将该任务转换为一个实体关系识别的任务。

4、查询语句生成

查询语句生成是整个KBQA过程中的最后一步,通过问题意图分析之后,得到了查询体中的条件体和目标体,即可以通过模板转换的方式,进行语句的映射和转换,其中,查询语句的转换要和目标数据库,例如对于如下“演员导演作品”、“演员的身高”、“演员的毕业院校”、“演员扮演的角色”分别对应的查询问句转换方式为:

    # 演员导演作品
    if intention == 'ACTOR-DIRECTED-MOVIE?':
        actor = ACTORS[0]
        sql = 'MATCH (n:Actor)-[:DIRECTED]->(m:Movie) WHERE n.cn_name = '%s' return m.movie_name as name'% actor
    # 问演员的身高
    elif intention == 'ACTOR-height':
        actor = ACTORS[0]
        sql = 'MATCH (n:Actor) WHERE n.cn_name = '%s' return n.height as name'% actor
    # 问演员的毕业院校
    elif intention == 'ACTOR-college':
        actor = ACTORS[0]
        sql = 'MATCH (n:Actor) WHERE n.cn_name = '%s' return n.college as name' % actor
    # 问演员扮演的角色
    elif intention == 'ACTOR-TAKES-ROLE?':
        actor = ACTORS[0]
        sql = 'MATCH (n:Actor)-[:TAKES]->(m:Role) WHERE n.cn_name = '%s' return m.role_name as name' % actor

总结

本文主要介绍了关于知识问答KBQA的一些典型方法,相关竞赛以及在落地过程中所需要关注的风险点。

其中,当前的知识图谱问答评测较好的推动了现有知识图谱KBQA的进展,感兴趣的可以跟进,到后面的文章中,我们将进一步介绍单跳场景下的KBQA实现方案。

实际上,在单跳场景中,目前KBQA已经能够取得较好的结果,但在复杂问句、复合问句等场景中,还有很长的一段路要走。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多