一、知识抽取概念
1、知识抽取
知识抽取的概念最早在20世纪70年代后期出现于NLP研究领域,是指自动化地从文本中发现和抽取相关信息。
这些文本包括从架构化数据、半结构化数据和非结构化文本数据,知识抽取任务一般包括实体识别与实体消歧、实体关系抽取及事件抽取等具体任务。
(1)实体识别(也叫实体抽取)
即从文本中检测出命名实体,并将其分类到预定义的类别中。
实体识别过程中一般要进行实体消歧,即解决同名实体在不同上下文中产生的歧义问题,它的主流方法有基于聚类和基于链接两种,核心问题都是计算待消歧实体与候选实体的语义相似度。
(2)实体关系抽取
即从文本中识别实体与实体之间的关系。
实体关系抽取与实体抽取密切相关,一般先进行实体识别,再进行实体关系抽取,也有一些模型将这两个步骤合二为一。
(3)事件抽取
目的是从非结构化的文本数据中自动识别和提取关于事件的信息。事件一般指的是文本中描述的动作、状况或发生的重要事项,如会议召开、人员任命、自然灾害发生等。
事件抽取不仅涉及识别事件类型(如出生、死亡、合并、收购等),还包括确定事件的参与者(如谁进行了动作、谁受到了影响)、时间、地点等细节信息。
2、不同格式源数据的抽取
(1)结构化数据抽取
W3C在2012年发布了两个推荐的映射语言,DM和R2RML,可以将数据库中的数据转化为RDF数据,实现本体构建。
R2RML映射的输入为符合该模式的关系数据库,输出为采用目标词汇表中谓词和类型描述的RDF数据集。R2RML映射从关系数据库中检索出逻辑表(基本表、视图或SQL查询语句),三元组映射可以通过逻辑表实现,将每一行映射为若干条RDF三元组规则,主要包括主语映射、谓语-宾语映射,以及谓语映射、宾语映射、引用对象映射和图映射。
(2)半结构化和非结构化数据抽取
因为通常使用自然语言描述,所以可以采用基于BERT的联合抽取模型抽取三元组,再通过本体的模式层进行筛选,将构建好的本体作为远程监督的知识库,标注新的文本后补充到训练语料中。
通用过程见下图:
3、事件抽取与关系抽取
事件抽取与关系抽取相比有一定的相似之处,但更加复杂。
关系抽取主要关注实体之间的静态关系,如“张三的父亲是李四”中的“父亲”关系,它旨在识别并建立实体之间的直接联系,这些联系通常是静态的、描述实体属性或归属的。
关系抽取则聚焦于文本中描述的动态情境或动作,如“张三结婚了”中的“结婚”事件,它不仅涉及事件的识别,还包括参与者(如谁结婚)、事件的性质(如喜庆事件)、时间、地点等动态要素。
事件抽取包括下列关联概念:(1)事件指称(mention),是指对一个客观发生的具体事件进行的自然语言形式的描述,通常是一个句子或句群;(2)事件触发词(trigger),是指一个事件中最能代表事件发生的词,是决定事件类别的重要特征,一般是动词或者名词;(3)事件元素(argument),是指事件中的参与信息,是组成事件的核心部分;(4)元素角色,是指事件元素与事件之间的语义关系,即事件元素在相应的时间中扮演的角色;(5)事件类别,事件元素和触发词决定了事件的类别。
4、知识融合
知识融合的目标是解决知识图谱的异构问题,它通常包括知识匹配、知识验证和知识集成三个部分。
知识匹配是指将多个知识图谱中具有关联关系的概念、关系、属性和实例匹配起来,关联关系可以是等价、属于和不相交。知识匹配是知识融合的核心。知识验证是指对不同来源的知识进行一致性验证和冲突消解。知识集成是指将知识匹配和知识验证的结果进行集成处理,得到最终的知识融合结果。
由于不同的知识图谱在建模层面可能差异巨大,因为知识框架匹配在实际应用中效果不是很理想,而实例层面的匹配往往更有效。
在实践过程中,对于没有统一标准和规范的知识图谱来说,不同来源的知识图谱想要融合确实太难了,甚至说在工程上基本不具有可行性。因为如果两个不同构的知识图谱规模如果不大,手工进行转换效率会更高,而规模一旦太大,即使使用了这些技术,但准确率不会很高,哪怕只有10%的误差,这个数量级就基本确定了融合后的知识图谱可用性达不到生产要求了。
二、常用中文类知识抽取方法与模型
1、实体识别与抽取
实体识别的常用方法:基于词典、基于特征工程、基于神经网络(如BiLSTM+CRF方法)。
常用模型有:
- Stanford NER,斯坦福大学开发的命名实体识别系统,基于条件随机场(CRF)模型,广泛应用于多种语言环境,包括中文。
- Lattice LSTM,由新加坡科技设计大学提出,特别针对中文命名实体识别(NER)的模型,利用LSTM网络处理中文特有的分词问题。
- spaCy,一个强大的自然语言处理库,支持多种语言,包括中文。它提供了训练好的实体识别模型,并允许用户自定义模型。
- jieba,有名的中文分词工具,结合自定义词典和模式,也可用于简单的实体识别任务。
- GraphRel,一种用于实体关系联合抽取的模型,通过构建文本的关系图模型来同时识别实体及其之间的关系。
- IDCNN + BiLSTM + CRF,一种结合了深度卷积神经网络(IDCNN)、双向长短期记忆网络(BiLSTM)和条件随机场(CRF)的模型,适用于中文命名实体识别。
- HarvestText,面向中文的自然语言处理工具集,提供了包括命名实体识别在内的多种功能。
- HanLP,由阿里巴巴达摩院研发的中文自然语言处理工具包,包含高性能的NER模型。
- DeepKE,一个支持低资源、长篇章的开源知识抽取工具,支持命名实体识别、关系抽取、属性抽取等任务,DeepKE底层为pytorch,兼容huggingface transformer库。
2、关系抽取
主要包括:
- OpenNRE,清华大学THUNLP实验室推出的开源神经网络关系抽取工具包,内置多种经典及最新模型,支持一键运行和模型选择,便于快速搭建关系抽取系统。
- Jiagu,由思知(OwnThink)开发,尽管主要针对百度百科文本,但也能在一定程度上从其他文本中抽取关系,虽然效果可能受限。
- DeepDive,斯坦福大学InfoLab实验室开发的开源知识抽取系统,支持弱监督学习,能从非结构化文本中抽取结构化的关系数据,适合大型项目和定制化需求。
- DeepKE,一个基于深度学习的开源中文关系抽取工具,提供了多种模型,包括基于CNN、RNN、PCNN(Piecewise Convolutional Neural Networks)、Capsule Network和Transformer的关系抽取模型。
- BERT-family Models,基于BERT的模型,如BERT+Relation,通过微调预训练模型,能够抽取特定领域的实体间关系,展现了很强的泛化能力。
- Span-based Models,这类模型通过预测实体跨度和关系标签来抽取关系,如SpanBERT、SpanRel等,它们在实体边界不明确的场景下表现良好。
3、事件抽取
主要包括:
- DMCNN,是一种基于动态池化(dynamic pooling)的卷积神经网络模型,适用于事件抽取任务,能够灵活地处理不同长度的输入序列。
- LSTM+CRF,结合长短时记忆网络(LSTM)和条件随机场(CRF)的模型,常用于序列标注,包括事件触发词的识别以及事件论元的标注。
- BERT系列模型,包括BERT、RoBERTa、ERNIE等,这些预训练语言模型通过微调可以用于事件类型分类和论元角色标注,展现出了强大的性能。
- News Summary Generator (NSG),一种新闻摘要生成工具,虽然主要功能在于摘要生成,但也涉及到事件抽取,通过选择和进化事件模式种群来生成摘要。
- OpenEE,开源的事件抽取框架或工具,虽然可能不如上述模型那样具体知名,但也能提供一定的事件抽取功能,可能包括基于规则的方法或机器学习模型。
- Neural Network Architectures,如基于注意力机制的Transformer架构,或是专为事件抽取设计的复杂网络,如Graph Neural Networks (GNNs),用于捕获事件间的结构化信息。
- Joint Models,联合模型同时处理事件触发词检测、事件类型识别以及论元角色标注,提高整个事件抽取流程的一致性和效率。
4、OpenSPG对应的知识抽取工具-OneKE
OneKE是由蚂蚁集团和浙江大学联合研发的大模型知识抽取框架,具备中英文双语、多领域多任务的泛化知识抽取能力,并提供了完善的工具链支持。
用户可以按照OpenSPG项目指引完成环境配置、模型权重获取、Schema定义、数据转换后直接使用OneKE。
OneKE在零样本泛化性上与其他大模型的对比如下图(NER为实体命名识别,RE为关系抽取、EE为事件抽取,EN为英文,ZH为中文):
三、项目选型及开发
在第一篇中的本体建模中,项目使用了OpenSPG进行实体、概念、事件等对象进行建模,因此,在知识抽取工具上,也使用了OpenKG中的相关工具-OneKE,当然,因为OneKE存在一些不足,如统一Schema指令结构难以覆盖所有的知识表示形式,因此存在抽不全、抽不准以及难以处理较长文本的问题,同样的,由于模型的规模有限,模型输出极大地依赖于输入的提示词(Prompt)。因此,不同的尝试可能会产生不一致的结果,且可能存在幻觉输出。
所以在项目中将采取两种方式进行知识抽取:
1、基于脚本型语言进行规范性本体信息的获取和导入
具体分为两类,一类是针对结构性数据,如关系数据库、文档数据库等信息的导入和转换,这类数据可通过shell脚本、Python脚本进行定制转换。
第二类是从百度百科等网上结构化信息的爬取、转换,即先通过Python脚本进行信息爬取、清洗和转换,然后形成OpenSPG相关实例信息导入到OpenSPG存储中。
这种方式下的shell脚本和Python脚本都需要根据对应的数据库和网站进行定制化编写,属于逐步积累的脚本集,无统一规范格式。
2、基于OneKE进行有监督下的知识抽取
OneKE的指令采用了类JSON格式的字符串,包含三个字段:instruction,即任务描述,使用自然语言,也可理解为prompt;schema,包含需提取的标签列表,明确待抽取关键字段;input,用于信息抽取的源文本。
一般可分为三类指令:实体命名识别NER、关系识别RE、事件抽取EE、知识图谱构建KGC,举例如下:
// 实体命名识别NER
{
"instruction": "你是专门进行实体抽取的专家。请从input中抽取出符合schema定义的实体,不存在的实体类型返回空列表。请按照JSON字符串的格式回答。",
"schema": {
"职位": "实体类型描述个人或群体的职业或职务,包括特定角色名称如'制片方','报分员','苦行僧','油画家'。",
"景点": "景点实体类型包括建筑物、博物馆、纪念馆、美术馆、河流、山峰等。代表性实体有五角大楼、泰特当代美术馆、郑成功纪念馆、都喜天阙、巴里卡萨、罗博河、gunungbatur、愚公移山LIVE、徐悲鸿纪念馆、杜莎夫人蜡像馆等。",
"公司": "公司是一个实体类型,代表任何法人实体或商业组织。这个类型的实体可以是餐饮集团,制造商,零售商,酒店,银行,设计院等各种类型的公司。例如:'香格里拉酒店集团', 'JVC', '上海酷蕾专业电竞外设装备店', 'k2?海棠湾', '武钢', 'louisvuitton', '苏格兰银行', '北京市建筑设计研究院', '7天', '万科集团'。",
"地址": "地址实体是指具有地理位置信息的实体,它可以代表一个国家、城市、区域、街道等具体的地方或者一个抽象的地理区域。例如:'曼哈顿下城区东南尖上的河边码头', '图阿普谢', '意大利威尼斯水乡', '湖州温泉高尔夫球场', '北卡罗来纳州', '京津区域', '开心网吧', '颐年护理院', '上塘镇浦东', '内蒙古自治区赤峰市'等。",
"组织机构": "组织机构实体是指集体性质的组织,比如公司、商铺、俱乐部、学校等。它们在社会和经济活动中扮演一定角色,并拥有一定的人格权。",
"电影": "电影实体包括中文或英文电影名称,有时也包括电影人物角色名。"
},
"input": "我很难想象在另外一个项目再做一个海渔广场,当时我们拿到这个项目的时候,我正好在三亚,"
}
// 事件识别EE
{
"instruction": "你是专门进行事件提取的专家。请从input中抽取出符合schema定义的事件,不存在的事件返回空列表,不存在的论元返回NAN,如果论元存在多值请返回列表。请按照JSON字符串的格式回答。",
"schema": {
"财经/交易-上市": {
"财经/交易-上市": "金融实体在证券市场上进行上市的行为主要涉及公司、股票等。 正样本包括公司或股票上市的具体信息,负样本则与此类活动无关。",
"trigger": True,
"arguments": {
"融资金额": "指的是公司在上市事件中筹集的资金总额。它综合了所有股份发行的收益,并以货币计量,包括但不限于'亿'、'万'、'美元'、'人民币'等单位。",
"时间": "描述上市事件发生的具体时间,可以是具体日期或相对时间,也可以包含地点信息和具体的日子和星期。",
"上市企业": "指的是在某次上市事件中,进行首次公开招股或已经在交易市场挂牌的公司或企业。例如:'上海复宏汉霖生物技术股份'、'三只松鼠'、'宝信软件'、'小熊电器'、'晋商银行'、''人造肉第一股'Beyond Meat(BYND)'、'游戏直播平台斗鱼'、'快餐帝国'以及'自动驾驶激光雷达厂商Velodyne'等。",
"地点": "财经或交易事件发生的具体地点,比如城市、建筑物或房间。"
}
},
"组织关系-辞/离职": {
"组织关系-辞/离职": "事件类型'组织关系-辞/离职'是指个人或组织成员与所属组织关系变动的情况,主要包括'辞职'、'请辞'、'卸任'、'离队'、'退休'、'离开'等。常发生在高层人事变动、政府官员变动或运动员转会等场景。例如:'李楠宣布辞职'、'于旭波上任董事会主席3个月就辞职 陈朗接棒'。",
"trigger": True,
"arguments": {
"离职者": "指在组织关系-辞/离职事件中,主动或被动地离开原来的职务或工作岗位的个体或群体,可以是一个人,也可以是一组人,如:'财政大臣', '90后邵阳隆回小伙欧阳恩和', '熊晓鸽', '*ST长生两位副总经理', '杨涛', '飞行员马强', 'HE WEI', '百度5名高管', '优信集团首席运营官彭惟廉', '建科院证券事务代表舒彦铭'等。",
"时间": "表示辞/离职事件发生的具体时间点或时间段,一般包括具体的日期、周数、时间等信息。如'9月19号', '6月29日晚', '本周六', '7月9日上午10:30', '6月12日早晨', '4月9日', '9月10号', '当地时间周日', '九月十二日', '10月15日上午十点'等。"
}
},
"财经/交易-加息": {
"财经/交易-加息": "该事件描述银行或金融机构提高利率以收紧货币供应。典型触发词是'加息'。 '加息'表明了财经/交易-加息事件的发生。",
"trigger": True,
"arguments": {
"加息幅度": "加息幅度通常表现为一个百分比或者基点,表示在加息事件中,利率提高的程度或者范围。例如:'至5.75%','25基点','基准利率从0.25%上升至0.5%','25个基点'。",
"加息机构": "加息机构是指在财经/交易-加息事件中,决定或者执行加息政策的具有货币政策调控权的金融机构,比如各国的中央银行(如英央行、美联储、欧洲央行等)或是金融机构(如英格兰银行)。",
"时间": "表示财经/交易-加息事件发生的具体日期或时间段,如'6月18日上午'、'1月24日'、'三个月后'等,具体表达形式既包括精确到分钟的时间如'2018年12月28日11时',也包括相对时间如'昨天(2日)'和特殊的时间表达如'中秋档'等。"
}
},
"组织关系-解约": {
"组织关系-解约": "合同被取消或终止的情况通常在商业、娱乐或体育领域中发生。触发词有'离开', '交易', '裁掉', '合约到期', '解除合约', '贱卖', '解除', '送出', '解约'等。正例包括'彭昱畅解除合约'和'蒋梦婕解约后近破产',负例如'费德勒退出了比赛'。",
"trigger": True,
"arguments": {
"被解约方": "在组织关系解约事件中的角色,是被解除协议或合同关系的一方,可能是个人或组织,如运动员、电影制作方、公司等。例如,'7届全明星得主乔-约翰逊','《小小的愿望》片方','猛龙', '三星'等。"
}
}
},
"input": "8月20日消息,据腾讯新闻《一线》报道,知情人士表示,为了控制成本支出,蔚来计划将美国分公司的人员规模除自动驾驶业务相关人员外,减少至200人左右。截至美国时间8月16日,蔚来位于美国硅谷的分公司已裁减100名员工。"
}
从中可以看出,整体的逻辑基本一致,不过由于事件相对复杂,所以相关的schema定义会更多一些。
具体开发步骤如下:
(1)定义Schema,并发布,具体见第一篇。
(2)编写抽取任务,可参考样例项目中,目录builder/job下的***_oneke.py文件,如医药知识图谱对应目录下的的disease_oneke.py,编写相关的文件。
(3)执行抽取任务,将抽取结果写入图谱存储中。
knext builder execute
主要参考文档:
《知识图谱:算法与实践》,赵军主编,高等教育出版社
《OpenSPG用户手册v0.0.3》,蚂蚁集团