图谱问答在小爱场景中的实践与展望
如果无法正常显示,请先停止浏览器的去广告插件。
1. 图谱问答在小爱场景
中的实践与展望
代文 高级算法工程师
2. 目录 CONTENT
01 介绍
02 信息抽取
应用场景
关系抽取
事件抽取
03 图谱问答关键技术
04 业务展望
文法解析
槽位识别
路径检索与匹配
业务效果
未来展望
3. 01
介绍
小爱同学应用场景
4. 介绍—应用场景
截止2021年11月,数据来源:https://xiaoai.mi.com/Homewear
内容 信息查询
互动 控制
生活服务 基础工具
5. 介绍—应用场景
语音
控制
闲聊
音乐
天气
智能
问答
时间
. . .
智能问答:
有客观事实性答案
满足用户信息查询类需求
6. 设备层 手机 无屏
音箱 有屏
音箱 电视 手表 …
业务层 词典 古诗 人物 星座 菜谱 …
图谱问答
逻辑层
语义层
检索问答
文法解析 槽位识别 term检索 语义检索
路径检索 路径匹配 文本匹配 答案排序
句法成分 词权重 问题分类 实体链接
改写
纠错
文档问答
阅读理解
同义词挖掘
意图识别
关系抽取
知识层 知识图谱
数据层 UGC网页
文档
QA库
百科
新闻
cp站点
事件抽取
7. 介绍—小米知识图谱
三元组spo量:
实体量:
超百亿
书籍 百科
本地生活 音乐
字词、古诗 景点
房产 人物、作品
数十亿+
商品
……
8.
9. 02
信息抽取
关系抽取
事件抽取
10. 信息抽取
信息抽取旨在从非结构化自然语言文本中提取结构化知识,如实体、关系、事件等。
关系抽取(Relation extraction)根据预先定义
的schema集合,抽取出所有满足schema约束的
SPO三元组。 事件抽取(Event Extraction)是指根据预先指定的事件类型和论
元角色,识别给定自然语言句子中所有目标事件类型的事件,并抽取
事件所对应的论元。
示例: 示例:
输入:{"text":"王雪纯是87版《红楼梦》中晴雯的配
音者,她是《正大综艺》的主持人。"} 输入:{"text":"历经4小时51分钟的体力、意志力鏖战,北京时间9月
9日上午纳达尔在亚瑟·阿什球场,以7比5、6比3、5比7、4比6和6比
4击败赛会5号种子俄罗斯球员梅德韦杰夫,夺得了2019年美国网球
公开赛男单冠军。"}
输出:
{"spo_list":
[{"predicate":"配音",
"subject":"王雪纯",
"subject_type":"娱乐人物",
"object":{"@value":"晴雯","inWork":"红楼梦"},
"object_type":{"@value":"人物","inWork":"影
视作品"}}
输出:
{"event_list":[
{"event_type":"竞赛行为-胜负",
"arguments":[
{ "role":"时间", "argument":"北京时间9月9日上午" },
{ "role":"胜者", "argument":"纳达尔" },
{ "role":"败者", "argument":"5号种子俄罗斯球员梅德韦杰夫" },
{ "role":"赛事名称", "argument":"2019年美国网球公开赛" }]}]}
11. 信息抽取
信息抽取旨在从非结构化自然语言文本中提取结构化知识,如实体、关系、事件等。
同义词挖掘
关系抽取
事件抽取
知识层
知识图谱
QA库
文档
12. 关系抽取-难点
难点一:SPO重叠
1.
2.
EPO:
SEO:
a)
b)
SO 两个实体分别相同
SO任意一个实体相同
SEO_S: 仅S实体相同
SEO_O: 仅O实体相同
难点二:复杂O值
O由多个语义明确的文本片段共同组成
如"配音"关系:
"subject_type":"娱乐人物"
"object_type":{"@value":"人物","inWork":"影视作品"}
13. LIC
关系抽取-框架介绍
多模型粗召回
1. SPO模型:先识别subject,再识别predicate与object
2. PSO模型:先识别predicate ,再识别subject与object
3. 规则召回+知识库远程监督召回
推理模型细打分
1. 机器推理
2. 规则校验
3. 阈值搜索
14. LIC
关系抽取-
SPO模型召回
模型: 使用指针网络的方式去先抽取S,
然后抽取对应的O和P,缓解重叠情况带来的问题
复杂O:解码的时候对复杂O值中的各个槽位分
别处理,同时,利用位置距离选择最优匹配
Wei, Z., Su, J., Wang, Y., Tian, Y. and Chang, Y., 2019. A novel cascade
binary tagging framework for relational triple extraction.
15. LIC
关系抽取-
PSO模型召回
模型:使用分类模型先抽取P,然后通过指针网络抽取
对应的S和O,缓解重叠情况带来的问题
复杂O:解码的时候对复杂O值中的各个槽位分别处理,
同时,利用位置距离选择最优匹配
16. LIC
关系抽取-推理模型
模型:把召回模型的SPO和原始句子拼一起,判
断是否相似,用阈值选出置信度较高的SPO
构造负例:
在同一句子中选取错误的关系组合作为难样本
17. LIC
事件抽取-主要方法
Pipeline Approach
事件类型预测
Joint Approach
标签组合
触发词预测
事件类型+事件角色
事件类型预测
事件论元预测
事件论元预测
事件论元预测
误差会向下传递
1. 事件类型预测准确率高的话,误差
传递影响不大
2. 便于分模块分析优化
3. 多个事件类型时方便处理
End2End Approach
多个子任务难以同时最优
e.g. 电影上映_上映方
电影上映_上映影视
电影上映_时间
事件类型的分数未知,
多个事件类型时处理不够好
18. 事件抽取-主要方法
Model Type
Pointer Network
Sequence Labeling
监督信号很稀疏
模型不好收敛
处理不了overlap问题
选型:Sequence Labeling
1. Overlap占比很少
2. 序列标注通过规则能解决部分overlap
3. Sequence Labeling的训练更容易一些
蔚
来 软 件 副 总 裁 庄 莉
Org-B Org-I Org-I Org-I Per-I Per-I Per-I Per-I Per-I
19. LIC
事件抽取-事件类型和触发词识别联合模型
Joint Model of Event Type and Event Trigger
事件类型:订婚
触发词:婚期已定
触发词:婚外情
事件类型:出轨
通过联合模型,同时对事件类型和事
件触发词进行学习,相互约束,以进
一步提升预测准确率
20. LIC
事件抽取-基于事件类型的要素抽取
Event Type based (role, argument) Extraction
缺陷:事件类型预测的
False Negative中 ,有一
些有明显的触发词,但事
件类型预测模型没有召回
示例:
预测事件元素时,将事件类型添加到给定文本前面,以SEP分隔
针对每一个预测的事件类型,分别预测对应的事件元素
Role只保留schema中Event Type对应的事件角色
例如,当Event Type预测为“订婚”,根据schema,序列标注时事件角
色只保留“订婚时间”、“订婚对象”等
输入:"太无情?女爱
豆出道四个月突然怀孕,
公司宣布将其除名退圈
“
输出:事件类型: [], 触
发词: [“怀孕”]
21. 事件抽取-基于事件触发词的要素抽取
Event Trigger based (role, argument) Extraction
标签组合
事件类型+事件角色
例如:
电影上映_上映方_B
电影上映_上映方_I
电影上映_上映影视_B
电影上映_上映影视_I
电影上映_时间_B
电影上映_时间_I
预测事件角色时,添加触发词距离信息,将它与BERT输出级联
针对每一个预测的事件触发词,分别预测对应的事件元素
标签采用事件类型与事件角色组合的形式
22. 信息抽取
结构化
爬取
知识图谱
信息
抽取
23. 03
图谱问答关键技术
文法解析
槽位识别
路径检索与匹配
24. 图谱问答关键技术
基于文法解析的方法
跨垂域粗粒度的槽位抽取方法
基于路径检索的方法
25. 基于文法解析的方法
姚明的老婆是谁
运动员
实体链接
类型
身高
叶莉
{person}的
老婆是谁
实体类型替换
命中模板库
lambda_x.配偶
({person},x)
叶莉
结构化
查询语句
配偶
模板库
人物:set
字词:set
古诗:set
. . .
身高
226cm
姚明
教练
杰夫∙范甘迪
出生日期
队友
麦迪
1962年1月19日
出生地
203cm
图谱查询
答案
190cm
模板的获取是一个困难的问题
从线上高频query扩展补充
自动化获取
佛罗里达
26. 基于文法解析的方法
问答论坛
结构化词条
李白(实体) - 所处时代(属性) - 唐朝(属性值)
问法:{person}是什么朝代的?
一些清洗规则:
1.答案中出现多个属性值的问答对要过滤掉
2.出现频次低的问法要过滤掉
…
结构化解析
lambda_x.所处时代({person},x)
27. 基于文法解析的方法
世界之最
支持实体
类型
实体类型
schema
抽取
实体类型 抽取
序数词 选择属性 抽取
约束条件
动物 第一 体重 类型:猫科
体重最大的猫科动物
意图判断:
query是否包含世界之最支持实体类型,以及是否包含最大、
最小、第一、第二等触发词。
槽位结果
&查询语句
答案
28. 基于文法解析的方法
29. 跨垂域粗粒度的槽位抽取方法
跨垂域迁移的难点:
1. 建设新垂域重复工作多
2. 小垂类训练样本少
Liu B, Lane I. Attention-based recurrent
neural network models for joint intent
detection and slot filling[J]. arXiv
preprint arXiv:1609.01454, 2016.
古诗
slot
诗人
诗名
体裁
. . .
intention
查朝代
查上下句
. . .
概念抽象&归并
定理 – 低资源
slot
提出者
定理名
领域
. . .
粗粒度跨垂域
意图 槽位
古诗 人物
作品名
作品类型
作品时间
.. .
定理
intention
查定理
查表达式
. . .
细粒度映射
细粒度意图
细粒度槽位
30. 基于路径检索的方法-介绍
给定知识库来回答客观事实问题
知识库为PKUBASE, 由三元组的形式给出:
Subject
<不能再等待>
Predicate
<歌曲原唱>
Object
<陈奕迅>
<刘德华_(中国香港男演员、 <类型>
歌手、词作人)> <制作人>
<练习_(刘德华主唱歌曲)> <歌曲原唱> <刘德华_(中国香港男演
员、歌手、词作人)>
<清华大学> <现任校长> <邱勇_(清华大学校长)>
问题示例:
问题 在乌鲁木齐西北石油酒店的退房时间?
SPARQL select ?time where { <乌鲁木齐西北石油酒店>
<酒店退房时间> ?time. }
答案 14:00
31. 基于路径检索的方法-介绍
带约束的复杂Query
示例一, 涉及带有距离约束的查询需求
问题 北京故宫博物院(故宫)附近2公里还有哪些好玩的?
SPARQL select ?y where { <故宫博物院(故宫)> <附近> ?cvt. ?cvt <实体名称> ?y. ?cvt <距
离值> ?distance. filter(?distance <= 2). ?y <类型> <景点>. }
答案 <北海公园><国家大剧院><景山公园>
示例二, 有按价格排序/过滤的查询需求
问题 故宫附近5km内便宜的酒店是多少钱?
SPARQL select ?price where { <故宫博物院(故宫)> <附近> ?cvt. ?cvt <实体名称> ?y. ?cvt
<距离值> ?distance. ?y <类型> <酒店>. ?y <平均价格> ?price. filter(?distance <= 5). }
ORDER BY asc(?price) LIMIT 1
答案 758
32. 基于路径检索的方法-方案
Step1:实体/属性值/数值抽取
Step2:路径挖掘
Q:离天坛最近的酒店人均800以下酒店是哪一家? Cand1 天坛公园 附近 CVT Cand2 X 类型 酒店
实体/属性值/数值 Cand3 天坛公园 附近 CVT 实体 X 类型 酒店
Cand4 天坛公园 附近 CVT 实体 X 类型 酒店
天坛公园
酒店
800
价格
Cand5
天坛公园
降序
附近
排序
Z
CVT
实体
距离值
Y
类型
X
价格
小于
Y
小于
Step5:答案生成
Sparql
transfer
Cand5
query
Gstore
1
Step3:路径&问题匹配打分
generate
Answers
Match Score
[CLS]
PLM
Step4:路径排序
1 Query Cand5 Score5 [CLS] Query [SEP] Cand1 [SEP]
2 Query Cand4 Score4 [CLS] Query [SEP] Cand2 [SEP]
Candn [SEP]
...
...
[CLS]
n
Query
Candn
Scoren
Query
[SEP]
800
酒店
800
33. 基于路径检索的方法-实体/属性值/数值抽取
1
基于字典树和Duckling的字面实体/数值抽取
2
模糊实体抽取/发现
Q:[雍和宫]附近[3公里]内,能在[晚上六点]入住的[酒店]有哪些?
1. Aho-corasick算法
酒
店
酒店
1.建立倒排
新
实体
Trie-Root
2. Duckling
雍
Rule + PCFG
和
3.0
宫
雍和宫
新型冠状病毒
倒排索引
属性值
型
...
新型冠状病毒
18:00
2.模糊抽取
3
基于检索的实体发现
Mentions
1. NER+Lucene的实体抽取
检索
BERT-NER
检索倒排
实体/属性
Query
Lucence
公共子序列
Step1:按字符
检索倒排
大量实体/属性值 Results
编辑距离排序 Step3:计算实体和
query片段的最小编
辑距离,确定实体
Step2:寻找公共子序
列最长的K个候选
Query
检索
长实体/属性
2. 长实体发现
TopK候选
34. 基于路径检索的方法-路径挖掘
• 常规路径方法: 路径扩展&组合
• 约束路径方法: 约束挂载
35. 基于路径检索的方法-路径扩展&组合
路径扩展:
1. 以Query中某个实体为出
发节点,通过新增三元组
来扩展路径
2. 以当前路径的答案作为出
发节点,通过三元组拼接
路径
路径组合:
以答案作为合并节点来拼接
路径
1 路径的扩展
天坛公园
1.当前节点作为head
来扩展,新增三元组
天坛公园
天坛公园
附近
2.当前节点作为tail
来扩展,新增三元组
酒店
CVT
附近
CVT
实体
类型
X
X
酒店
2 路径的组合
天坛公园
附近
CVT
实体
X
类型
酒店
36. 基于路径检索的方法-约束挂载
天坛公园
CVT 实体 X 类型 酒店
附近 CVT 实体 X 类型 酒店
Z 距离值 价格 Y
附近
约束变量挂载
天坛公园
排序&过滤约束
天坛公园
降序
附近
排序
Z
约束可以看作是特殊的三元组
CVT
距离值
实体
类型
X
价格
Y
小于
酒店
800
37. 基于路径检索的方法-约束挂载
常见约束类型
1.
2.
约束属性名 约束变量类型
<平均价格> 价格
<酒店入住开始时间> 时间
<酒店退房时间> 时间
<押金> 价格
<酒店入住结束时间> 时间
<距离值> 距离
<房屋面积> 面积
<容纳人数> 人数
排序类型: 降序、升序
过滤类型: 大于、 小于、 等于、 大于等于、 小于等于
38. 基于路径检索的方法-路径匹配
Pointwise Model
Ensemble Models
Match Score
BERT
[CLS]
Roberta-wmm
PLM
ERNIE
[CLS] Query [SEP]
[CLS] Query [SEP]
Cand1 [SEP]
Candn [SEP]
...
BERT-wmm
Weighted
Average Score
39. 基于路径检索的方法-负采样
问题:模型可能对于某些类的预测比较差,而这些类在随机负采样中未能覆盖到
方案:
当前模型打分结果不理想的样本,加入到下一轮训练集中
为避免训练不稳定,需要保留原有的样本
Next Epoch
1st Epoch
数据集
数据集
新训练集
P
(q, pos)
N
(q, neg)
来自上个训练
集的N个样本
结果最差的M个样本
(2) 预测
q
Score
Cand
q
Model
(1) 训练
Score
Cand
q
Model
Cand
(2)预测
q
Model
(1) 训练
N
(q, neg)
+
抽样k*len(P)个
训练集
P
(q, pos)
Score
结果最差的M个样本
Model
Cand
Score
结果最差的M个样本
40. 基于路径检索的方法-路径的文本表示
路径:
Subject
Predicate_1
Y
Predicate_2
X
1 自然语言模板
模板:
<Subject>的<Predicate_1>的<Predicate_2>是什么?
2 拼接
特征:
<Subject><Predicate_1><Predicate_2><ans_symbol>
3 替换
特征: <Subject>,<Predicate_1>,[UNK]. [UNK],<Predicate_2>,[MASK].
实验比较发现三种特征效果差不多
41. 基于路径检索的方法-方案
Step1:实体/属性值/数值抽取
Step2:路径挖掘
Q:离天坛最近的酒店人均800以下酒店是哪一家? Cand1 天坛公园 附近 CVT Cand2 X 类型 酒店
实体/属性值/数值 Cand3 天坛公园 附近 CVT 实体 X 类型 酒店
Cand4 天坛公园 附近 CVT 实体 X 类型 酒店
天坛公园
酒店
800
价格
Cand5
天坛公园
降序
附近
排序
Z
CVT
实体
距离值
Y
类型
X
价格
小于
Y
小于
Step5:答案生成
Sparql
transfer
Cand5
query
Gstore
1
Step3:路径&问题匹配打分
generate
Answers
Match Score
[CLS]
PLM
Step4:路径排序
1 Query Cand5 Score5 [CLS] Query [SEP] Cand1 [SEP]
2 Query Cand4 Score4 [CLS] Query [SEP] Cand2 [SEP]
Candn [SEP]
...
...
[CLS]
n
Query
Candn
Scoren
Query
[SEP]
800
酒店
800
42. 基于路径检索的方法-业务落地
•
目标变化
比赛: 效果(F1值)是唯一标准
现实场景: 追求性能和效果的平衡,且资源有限
•
问题变化
比赛: query都是有效有意义,可回答的
现实场景: query可能是无意义,不可回答的
43. 基于路径检索的方法-业务落地
小爱同学中的落地方案:(暂不支持约束路径)
1 实体/属性值抽取
2 路径/答案检索
实体 路径&答案
OUT OUT
3 路径&问题匹配打分
答案
Match Score
满足阈值?是
[CLS]
BERT
实体链接
自研路径/答案检索器
(预先定义可检索的路径类型)
IN 建立索引
Query 小米知识图谱
干预/过滤模块
关键点:
1. 小米自有的实体链接服务代替原先实体抽取的方案
2. 针对常见路径类型,自研路径在线检索器
[CLS] Query [SEP] Cand1 [SEP] Ans1
[CLS] Query [SEP] Cand2 [SEP] Ans2
Candn [SEP] Ansn
...
[CLS]
Query
[SEP]
有限路径
排序
取top1的结果
44. 基于路径检索的方法-业务落地
问题:图数据库中,多跳情形下检索的耗时特别长
自研路径检索方案:
一、实体到整数ID的映射
刘德华 -> 0
张学友 -> 1
陈奕迅 -> 2
朱丽倩 -> 3
二、关系到整数ID的映射
妻子 -> 1
搭档 -> 2
...
关系ID从1开始连续
0
1
1023 1323
...
2:陈奕迅
代表刘德华的邻接节点起始
于表的0位置,结束于661位
置
四、数据存储表
(5,11)
661
0:刘德华
实体ID从0开始连续
(3,1)
三、节点索引表
1:张学友
...
(500,-8)
(1033,1009)
...
661
ID为3,5, ,500,1033号节点是刘德华的邻接节点。1,11,-8,1099是对应的关系
内存占用:
1. 若节点个数为Ω,一个整型ID占4
个字节,节点索引 表会占用4Ω 字节;
2. 若三元组的总数量为Δ,那么数
据存储表占用16Δ字节
45. 基于路径检索的方法-业务落地
内存占用
三元组规模 数据存储表占用空间 实体(属性值)规模 节点索引表占用空间
一百万 15.3MB 一百万 3.8MB
一千万 152.5MB 一千万 38.1MB
一亿 1.4GB 一亿 381.4MB
十亿 14.9GB 十亿 3.7GB
检索耗时
Queries 路径(?x为答案节点) 模块耗时
陈坤的出生地在哪 <陈坤> <出生地> ?x 1ms
姚明的父亲的出生地 <姚明> <父亲> ?a, ?a <出生地> ?x 3ms
邓超和孙俪的关系 <邓超> ?x <孙俪> 15ms
灭绝师太的哪个徒弟会九阴白骨爪 <灭绝师太> <徒弟> ?a, ?a <技能> <九阴白骨爪> 3ms
提出"星云假说"的哲学家的代表作品有哪些 ?a <贡献> “星云假说”, ?a <代表作品> ?x 6ms
普瓦捷大学毕业的法国著名哲学家做出了什么
突出贡献 ?a <国籍> <法国>, ?a <毕业大学> <普瓦捷大学>, ?a <职
业> <哲学家>, ?a <贡献> ?x 12ms
46. 基于路径检索的方法-业务落地
更好的可解释性
47. 04
业务展望
业务效果
未来展望
48. 业务效果
49. 未来展望
•
对话合并。用户意图与上文相关,或asr错误造成用户反复澄清
–
–
•
能力更强的复杂Query解析能力
–
–
•
用户意图与上文相关
asr错误造成用户反复澄清
更高的准确率,降低负向体验
更多类型的复杂Query:是否类、比较类、多实体多跳
事件图谱问答能力
–
–
事件抽取+图谱问答
特定趣味类场景落地,满足用户信息检索需求
50. 非常感谢您的观看