|全国知识图谱与语义计算大会竞赛冠军DeepBlueAI团队技术分享


|全国知识图谱与语义计算大会竞赛冠军DeepBlueAI团队技术分享
本文插图

作者 | 罗志鹏
编辑 | 陈大鑫
全国知识图谱与语义计算大会(CCKS 2020) 11月12日至15日在江西南昌举行 , CCKS是(China Conference on Knowledge Graph and Semantic Computing)由中国中文信息学会语言与知识计算专委会定期举办的全国年度学术会议 。
CCKS已经成为国内知识图谱、语义技术、语言理解和知识计算等领域的核心会议 。 CCKS 2020举办的各项挑战赛公布了最终结果 , 来自深兰科技北京AI研发中心的DeepBlueAI团队斩获了3项冠军和1项亚军 , 并获得了一项技术创新奖 。
|全国知识图谱与语义计算大会竞赛冠军DeepBlueAI团队技术分享
本文插图

我们可以通过这篇文章了解下DeepBlueAI 团队在『新冠知识图谱构建与问答评测(一)新冠百科知识图谱类型推断』赛题中的解决方案 。
1 赛题介绍
“CCKS 2020:新冠知识图谱构建与问答评测(一)新冠百科知识图谱类型推断”是由中国中文信息学会语言与知识计算专业委员会主办 , 比赛任务为“实体类型推断” , 即对给定的实体 , 预测实体所属的类别 。
比赛任务
本评测任务围绕新冠百科知识图谱构建中的实体类型推断(Entity Type Inference)展开 。
评测从实体百科(包括百度百科、互动百科、维基百科、医 学百科)页面出发 , 从给定的数据中推断相关实体的类型 。 评测本身不限制各参赛队伍使用的模型、算法和技术 。 允许使用外部数据 , 但该数据必须是公开的 。
输入

  1. entity.txt:需要进行类型预测的所有实体 , 其中包含相关实体和噪音实体 。
  2. entity_pages_1.xml , entity_pages_2.xml , entity_pages_3.xml , entity_pages_4.xml:分别来自百度百科 , 互动百科 , 中文维基百科 , 医学百科的实体页面内容 。 保证 entity.txt 中的任意实体至少被一个页面文件所涵盖 。 实体页面文件中包含类型推断可能会用到的名称、标签、简介等信息 。 此处还可以使用其他公开数据集 。
  3. type.txt:包含 7 个目标类型 , 分别是病毒、细菌、疾病、药物、医学专科、检查科目、症状(非目标类型输出为 NoneType) 。
输出
entity_type.txt:实体及预测的实体类型 , 每行一个“实体t类型”对 。 注意不要包含类型不在给定的7种类型当中的实体 。
评测指标
本任务采用精确率(Precision, P)、召回率(Recall, R)、F1值(F1-measure, F1)来评估效果 。 设 A 为参赛队伍输出文件中的所有实体-类型对的集合 , G 为评测方标注文件中的所有实体-类型对的集合 , 相关计算公式如下:
|全国知识图谱与语义计算大会竞赛冠军DeepBlueAI团队技术分享
本文插图

团队成绩
最终榜单
|全国知识图谱与语义计算大会竞赛冠军DeepBlueAI团队技术分享
本文插图

比赛难点
实体类型判断总体任务明确 , 难点主要来自于数据集本身的几个特点:
  1. 实体文本较短 。 给定实体平均长度为7;实体文本较短导致缺乏足够的信息 , 很多实体类型难以确定 , 其中真菌细菌名称近似 , 十分难以区分 。
  2. 同一实体可能属于多个类型 。 同一实体在不同的百科数据中属于不同的类别 , 但最终只需要一个类别 , 训练集中如何确定其类别会影响测试集中的偏向 。
  3. 类别不平衡 。 7个类别中 , 症状、疾病、药物占了大多数 , 其余类别对应的实体极少 。
2 竞赛方案
类型信息在知识库中具有非常高的价值 , 实体类型推断的研究一直是领域的热点 。 实体类型推断根据给定实体推断其类别 , 本质是一个单标签多分类问题 , 每个实体被分配一个给定的类别 , 如果不属于任何一个类别 , 则指定为NoneType;
针对本数据集的特点 , 我们设计了一个多分类模型和多个二分类模型及有规则的后处理来完成 。
首先采用BERT或Roberta做编码获得文本对应的编码 , 然后接多分类器得到其类别 , 针对NoneType设计一个二分类器 , 针对细菌真菌设计了一个二分类器 。
在数据方面 , 额外引入:中文症状库 、通用知识图谱(ownthink)、新冠开放知识图谱.百科、微生物物种编目数据库新冠知识图谱构建与问答评测(四)新冠知识图谱问答评测数据等共5个公开数据集作为官方数据的补充 。
最终将以上三个模型的判断结果结合关键词特征进行融合得到最终的分类结果 , 最终取得了第一名 。
数据处理
训练集共包含5000个实体 , 验证集19999个实体 , 测试集14320个实体;给定的百科和映入的外部数据处理后作为实体的描述输入 。
输入:实体+实体描述(无描述则只使用实体即可)
输出:实体类别
模型
实体分类模型是主要基于 BERT 模型 , 将实体+描述文本(不存在则不加描述)作为输入文本 , 经过 BERT 模型编码 , 取 CLS 位置的特征向量 , 经过全连接层 , 最后 Softmax 激活得到实体的类别概率分布 。
模型结构如下图:
|全国知识图谱与语义计算大会竞赛冠军DeepBlueAI团队技术分享
本文插图

图1
其中的主要优化有:
  1. 描述文本融入 。 测试集中很多实体没有对应的文本 , 为了解决这个问题 , 在训练时 , 同时使用了仅实体和实体+描述两种输入 , 这样一来 , 对每一个实体 , 我们构造了两个样本 。 只使用实体作为输入时 , 可以训练模型有效的提取关键字信息;使用描述文本时 , 可以引入额外信息;通过这样的样本构建方式 , 也相当于做了数据增强 , 增加了训练集数据量 。
  2. 对抗学习 。 它在训练中构造了一些对抗样本加入到原数据集中 , 希望增强模型对对抗样本的鲁棒性 。 我们在模型训练的时候加入了对抗学习 , 所使用的对抗学习方法是 Fast Gradient Method(FGM) 。
  3. 多模型融合 。 针对数据集的特点 , 我们设计了3个模型 , 一个多分类模型 , 一个NoneType分类模型 , 一个细菌真菌分类模型 。 每个模型使用5折交叉验证 , 最终结果取平均 。 再对三个模型做人工规则融合 。

补充信息引入
官方给定数据集中描述缺失过多 , 难以判断其类型 , 其中验证集缺失19999个实体 , 官方给定百科缺失12302个实体的描述;为了解决这个问题 , 我们在官方数据集①之外 , 另外使用了②③④⑤⑥等5个公开数据集 , 引入额外数据集后 , 测试集上实体描述文本缺失从12302降低到805 , 验证集缺失从12302降低到330 , 极大提升了分类准确率 。
引入的外部数据集如下表:
编号
数据集
对应模型

官方数据集 CCKS 2020:新冠知识图谱构建与问答评测(一)新冠百科知识图谱类型推断

CCKS 2020:新冠知识图谱构建与问答评测(四)新冠知识图谱问答评测
NoneType二分类模型

中文症状库 - dsc.nlp-bigdatalab.org.ttl
多分类模型

通用知识图谱(ownthink)
多分类模型

新冠开放知识图谱.百科 - wiki-covid-19-v0.3.json
多分类模型

微生物物种编目数据库
细菌真菌二分类模型
表1
类别不均衡解决
训练集中 , 各类别实体数目分布如下:
药物
症状
疾病
检查科目
病毒
医学专科
细菌
NoneType
2550
867
1267
147
10
7
52
100
表2
可以看出 , 药物、症状、疾病三个类别实体占了绝大部分;剩下几个类别中 , 通过对预测错误实体的分析 , 检查科目、病毒、医学专科几个类别可以通过关键词做修正;细菌和NoneType则无法通过关键词修正 。 主要由于细菌和真菌名字较为接近 , 而NoneType可能来自各个类别 。
针对细菌真菌难以区分 , 使用表1的数据⑥训练一个判断细菌真菌的二分类器 。 针对NoneType无法正确识别 , 使用表1数据集②的实体作为NoneType与原始数据集做3:1采样 , 训练一个判断实体是否为NoneType的二分类器 。
后处理
对以上三个模型 , 每个模型分别使用BERT、Roberta和Ernie三个预训练模型作为encoder , 对预测结果取平均得到各个模型的预测结果 。 得到三个模型的最终结果后 , 我们手动尝试了几个组合规则 , 取效果最好的作为最终的组合结果 。
具体为:当主分类器中NoneType类别的概率值排在前两位时 , 使用NoneType分类器的结果作为最终结果 。 当主分类器类别为细菌时 , 最终分类采用细菌真菌分类器的结果 。 真菌对应类别为NoneType 。 对病毒、检查科目自定义了部分关键字规则 。 经过组合 , 得到最终的预测结果 。
比赛结果
最终测试集共14321个实体 , 输出其对应的类别 。 每个实体输入只有实体名 , 然后根据实体名到数据集中匹配描述文本 , 将实体名与描述文本作为输入 , 不存在描述的直接用实体名作为输入 。
各个模型的效果如下:
模型
数据(对应表1)
Test F1
BERT多分类
官方数据①
0.9781
BERT多分类
①③
0.9831
BERT多分类+规则后处理
①③⑤
0.9930
BERT多分类+NoneType二分类+规则后处理
①②③⑤
0.9957
BERT多分类+NoneType二分类+细菌真菌二分类+规则后处理
①②③⑤⑥
0.9975
BER+对抗训练+多分类+NoneType二分类+细菌真菌二分类+规则后处理
①②③④⑤⑥
0.9992
可以看到数据集的引入和几个二分类模型均取得了较大提升 。
3 总结与讨论
实体类型判断作为一个常规任务 , 我们针对数据集的特点做了较多的探索;使用BERT、对抗学习、模型融合等方法极大提高了类别判断的准确率 , 最终获得比赛的第一名 。
针对这种较为常规的任务 , 除了选择一个好的预训练模型之外 , 对任务数据的理解分析也至关重要 。
针对效果较差的类别或样本做一些探索、数据特点分析 , 构造一些特征通常会取得不错的效果 。
参考文献:
1、Devlin J, Chang M W, Lee K, et al. Bert: Pre-training of deep bidirectional transformers for language understanding[J]. arXiv preprint arXiv:1810.04805, 2018.
2、Liu Y, Ott M, Goyal N, et al. Roberta: A robustly optimized bert pretraining approach[J]. arXiv preprint arXiv:1907.11692, 2019.
3、Miyato, T., Dai, A.M., & Goodfellow, I.J. (2016). Virtual Adversarial Training for Semi-Supervised Text Classification. ArXiv, abs/1605.07725.
4、王梦婕.华东理工大学. 中文症状库. http://www.openkg.cn/dataset/symptom-in-chinese (2018-03-26)
5、Yener. 通用知识图谱(ownthink) http://openkg.cn/dataset/ownthink (2019-09-08)
6、王昊奋、漆桂林.新冠开放知识图谱.百科. http://www.openkg.cn/dataset/covid-19-baike (2020-06-07)
7、刘彭涛, 劳一美, 孙清岚, 马俊才. 微生物物种编目数据库. V1. Science Data Bank. http://www.dx.doi.org/10.11922/sciencedb.6. (2015-07-16).
8、CCKS 2020:新冠知识图谱构建与问答评测(四)新冠知识图谱问答评测https://www.biendata.xyz/competition/ccks_2020_7_4/data/
9、Zhang, Z., Han, X., Liu, Z., Jiang, X., Sun, M., & Liu, Q. (2019). ERNIE: Enhanced Language Representation with Informative Entities. ACL.
|全国知识图谱与语义计算大会竞赛冠军DeepBlueAI团队技术分享
本文插图
【|全国知识图谱与语义计算大会竞赛冠军DeepBlueAI团队技术分享】


    推荐阅读