KBQA–knowledge base question answering,通过对问题进行语义理解及解析,通过知识库进行查询。
输入:自然语言问句,例如“姚明的老婆是谁?”,“姚明的身高多少?”
输出:知识图谱里的实体或者关系,例如“叶莉”,“2米29”
评价标准:召回率,准确率,F1-Score
步骤:
自然语言查询–>分词(word segmentation)–>意图识别(Intention Recognition)–>实体链指(Entity Linking)+关系识别(Relation Detection) -->查询语句拼装(Query Construction)–>返回结果选择(Answering Selection)
下面简单介绍下各个步骤的内容:
分词(word segmentation) :简单而言,汉语自动分词就是让计算机系统在汉语文本中的词与词之间自动加上空格或其他边界标记。分词器有很多,比如HanLP分词器、jieba分词器。
HanLP不仅能够分词,而且还可以通过自带或用户自定义的词典标注单词的词性(这个很关键)
意图识别(Intention Recognition):预先准备好意图模板,可以通过相似度来匹配,也可以通过机器学习里的分类问题来解决,这个是所有问答系统都要面临的问题。
用户自然语言问题向模板的映射:
例如某dict中保存有如下的模板(nm代表电影,nnt代表人物,ng代表电影类型):
0:nm 评分
1:nm 上映时间
2:nm 类型
3:nm 简介
4:nm 演员列表
5:nnt 介绍
6:nnt ng 电影作品
7:nnt 电影作品
8:nnt 参演评分 大于 x
9:nnt 参演评分 小于 x
10:nnt 电影类型
11:nnt nnr 合作 电影列表
12:nnt 电影数量
13:nnt 出生日期
训练阶段:
对于“刘德华演过哪些电影呀?”这个问题,他可以转化成模板7,也就是nnt 电影作品。我们把这个转化成一个多分类问题,具体流程为:首先可以用cnn(或lstm啥的都行)对“刘德华演过哪些电影呀?”提取特征,接一个全连接层,用这14个分类做一个loss,反向传播。同样的,输入另一段训练语料,比如“刘德华的出生日期”,也可以做训练语料。这样就能训练一个模型,这个模型的作用是:输入一句话,比如“卧虎藏龙的电影类型是什么?”,然后他就会将这句话映射到模板10(也就是nnt 电影类型)上
实体链指(Entity Linking)+关系识别(Relation Detection):将查询语句中出现的实体和关系映射到知识图谱里,本质是一个命名实体识别NER问题,只是需要将NER结果进一步链接到图谱。
查询语句拼装(Query Construction):需要根据底层知识图谱数据库的查询语言,拼装成对应的query来查询(sparq等),最简单的方法就是预先定义好查询模板,根据之前解析出来的(意图,实体,关系)填进模板查询即可。
返回结果选择(Answering Selection):图谱查询之后的结果可能存在多个,需要选择一个最合适的答案,可以预先指定排序规则去选择答案。
实体识别
将用户的问题进行多分类,进而实现“用户自然语言问题→形式化问题模板”
将实体识别作为问题模板的实参,去图数据库中查询问题的答案。
实体识别阶段:
例如:“刘德华演过哪些电影呀?”
对其进行命名实体识别,就可以得到:“刘德华”,且也能将它标注为“nnt”,nnt实际上就是“人”的词性,这个实体识别过程就相当于一个分词+词性标注过程。(这个过程可以用bert来做,就不会产生用jieba分词把词分错的问题了。比如卧虎藏龙 分成了 卧虎 藏龙两个词)
注意,电影在此处不是个实体,它应该包含在“演过哪些电影”这个问题之中(更简单的理解就是“演过的电影”是一个关系)
测试阶段:
此处共有14个问题模板
那么,比如“刘德华演过哪些电影呀?”这个问题,我们将它输入到我们刚刚训练好的模型里,就可以得到这句话对应的模板类型,也就是7了。(当然,预测结果甚至有可能是2、3这类主语是nm而不是nt的,这时我们就可以做一个限制。由于我们通过ner能得到“刘德华演过哪些电影呀?”中刘德华这个实体,同时也能知道“刘德华”所对应的实体类型为nnt,那么我们就可以只在带有nnt的模板中,选择预测概率最高的)
将实体传入模板中,用图数据库查询语句查答案:
例如“刘德华演过哪些电影呀?”,通过上面的步骤,我们可以得到模板“nnt 电影作品”,也可以得到“刘德华演过哪些电影呀?”这句话中的实体刘德华(nnt),于是可以将nnt所对应的“刘德华”填入到模板“nnt 电影作品”中,就可以得到一条查询语句“刘德华 电影作品”了,用图数据库查询语句就是
MATCH (tom:Person {name: "刘德华"})-[:ACTED_IN]->(Movies) RETURN 刘德华,Movies
非常像一条sql语句。
然后就可以查到刘德华参演的所有电影了
基于模板的优点:
查询响应速度快;准确率高,可以回答复杂查询
基于模板的缺点:
要满足用户的各种问法,需要建立庞大的模板库,这个过程是很耗精力的
优化点:
以上步骤最大的问题在于,需要人工事先准备模板,需要很大的工作量,是否可以自动生成模板?
参考论文:Automated Template Generation for Question Answering over KnowledgeGraphs
KBQA除了基于模板的方法之外,还有基于语义解析和基于深度学习等方法,后续再开新的文章进行介绍。