基于深度学习的KBQA方法(pipline)的一些思考(一)

1、单跳问句回答思路

1.1 问句解析

1.1.1 实体抽取(识别)

序列标注模型:BERT+CRF

例子:姚明的老婆是谁? 获得问句中的实体:姚明

1.1.2 属性和关系抽取(识别)

分类模型:BERT+Linear,使用分类模对query中的关系做预测

数据构建:

  • 数据格式:”query“+”属性“+“lable”
  • 正样本:原始数据中的属性值为1
  • 负样本:可以以实体抽取的的实体召回知识库中的所有属性,使用其他属性构建负样本,也可以先构建属性词典,随机选取一定数量的属性词(如:5个)构建负样本

数据集样例如下:

微观营销环境的相关机构是什么啊?	相关机构	1
微观营销环境的相关机构是什么啊?	网络接口	0
微观营销环境的相关机构是什么啊?	指挥官	0
微观营销环境的相关机构是什么啊?	指标	0
微观营销环境的相关机构是什么啊?	公司简介	0
微观营销环境的相关机构是什么啊?	理论	0

预测时:拿到所有logits,返回top1的属性即可

0.9963929	0.003607082	微观营销环境的相关机构是什么啊?	相关机构	1
0.00030779938	0.9996922	微观营销环境的相关机构是什么啊?	网络接口	0
...

1.2 单跳KBQA流程

​ 因此单跳KBQA流程总结为:

  1. 输入问句
  2. 通过实体识别模型检测问句中的实体,得到mention
  3. 通过检索模型在知识库中检索mention,得到候选集(K个候选实体的所有三元组)
  4. 通过属性抽取模型在候选集中挑选最合适的属性,得到唯一三元组
  5. 输出答案

2、多跳问句分类建模

2.1 问句分类

模型:BERT+Linear对query

作用:判断问句是单挑问题还是多跳问题

数据解析:

单跳:SPARQL 只出现一个三元组

q9:历史上的秦桧是哪里人?
select ?x where { <秦桧_(南宋著名奸臣)> <出生地> ?x . }
<黄州_(湖北黄冈市辖区)>

双跳或多跳:SPARQL 只出现两个以上三元组

q395:玉皇大帝的诞辰俗称什么?
select ?x where { <玉皇大帝> <诞辰> ?y. ?y <俗称> ?x . }
<天公生>
q13:《红楼梦》中贾兰母亲的住所是哪里?
select ?y where { <贾兰_(小说《红楼梦》人物)> <母亲> ?x . ?x <居所> ?y . }
<稻香村_(《红楼梦》中的稻香村)>

2.2 链式问句分类

模型:BERT+Linear

作用:判断是否属于链式问句

分类数量:二分类

介绍:链式:SPARQL 多个三元组呈递进关系,x->y->z,非交集关系

q894:纳兰性德的父亲担任过什么官职?
select ?y where { <纳兰性德> <父亲> ?x. ?x <主要职位> ?y. }
"武英殿大学士"    "太子太傅"
q554:宗馥莉任董事长的公司的公司口号是?
select ?y where { ?x <董事长> <宗馥莉>. ?x <公司口号> ?y. }
"win happy health,娃哈哈就在你身边"

2.3 主谓宾式问句分类

模型:BERT+Linear

作用:判断是否属于主谓宾式问句

分类数量:三分类

问句的答案对应三元组里面的主语,spo=0

q70:《悼李夫人赋》是谁的作品?
select ?x where { ?x <代表作品> <悼李夫人赋>. }
<汉武帝_(汉朝皇帝)>

问句的答案对应三元组里面的谓语,spo=1

q506:林徽因和梁思成是什么关系?
select ?x where { <林徽因_(中国建筑师、诗人、作家)> ?x <梁思成>. }
<丈夫>

问句的答案对应三元组里面的宾语,spo=2

q458:天津大学的现任校长是谁?
select ?x where { <天津大学> <现任校长> ?x . }
<李家俊_(天津市委委员,天津大学校长)>

2.4 按照实体数与属性数分类

  1. 单实体单属性

  2. 单实体多属性

  3. 多实体多属性

    因此,针对不同的问题类型在逻辑上进行处理也是回答问句的方向。

猜你喜欢

转载自blog.csdn.net/yjh_SE007/article/details/126905543