知识图谱之实体抽取大总结:难点和方法


2024.11.20
I hear and I forget; I see and I know; I do and I understand

1.什么是实体?

通义千问解释:

在知识图谱中,实体是表示现实世界中具体或抽象事物的基本单元。实体可以是具体的对象、概念、事件、地点、人物等。每个实体在知识图谱中通常都有一个唯一的标识符(ID),并且可以具有多个属性和与其他实体的关系。

在我看来:所有你关注的内容都可以定义为实体。

比如我在新闻领域中,关注时间、地点、人物;在医疗领域中,我关注症状、药物、科室、疾病原因、医疗手段;在汽车故障领域中,我关注故障现象、故障原因、维修手段;

2.实体抽取的本质?

实体抽取(NER)的本质就是从输入文本中提取出用户感兴趣的部分,从这个意义上来说和关键词提取有一些相同点,但区别是关键词提取只需要把词给提取出来,而实体抽取还关注提取出来的词或句的类型,其实质包含两个子任务:实体边界检测实体类别识别,任何一部分出错,则会提取出错误的实体。除此外,还容易发生错误识别漏识别的问题。

eg:

输入:汽车在踩刹车时发动机[Part]那个位置出现不规则哄哄声音[Trouble]

注:黑体为期望识别的实体,[]为对应的实体类型

  • 错误示例:

汽车在踩刹车[PART]发动机那个位置[PART]出现不规则哄哄声音[Trouble]

3.实体抽取的难点?

在处理以下几个场景时存在难点:

  • 嵌套:即一个实体中还包含了其它实体,分为组间嵌套,嵌套的为不同类型,(eg,"发动机哄哄响"这个故障现象还嵌套了发动机这个部件); 组内嵌套,嵌套的为同一类型(eg,左车门车窗玻璃开关);
  • 不连续:即一个实体被分割成多段,需要拼接后才能称为一个完成的实体。eg。左车门、右车门的车窗玻璃里面的”左车门的车窗玻璃“
  • 歧义:即一词多义。eg。刹车(踩刹车异响和刹车时异响)
  • 新词识别(OOV):即未出现在训练数据集中的词
  • 非正式:包含口语化、简化、谐音、错别字等,eg:发动鸡、三元(三元催化器)、搭铁

整体上,中文的NER比英文的要更难,因为中文的歧义性和简化表达更加广泛存在,同时英文可以通过空格进行分词(在边界识别上就简单了一些),而中文无法明确边界,句子中不同的分词方式对实体抽取的结果影响非常大。

eg:南京市/长江大桥,南京/市长/江大桥

因此在中文的NER任务中,通常是基于字粒度进行实体抽取。

4.实体抽取的方法?

(1)基于词典+规则的方法

一般来说,就是基于自定义词典+分词+词性标注完成实体抽取。典型工具有:jieba、LAC、pyLTP、Spacy

优点:简单上手快,抽取准确性高,前期开发成本低;

缺点:无法识别词典中未出现的词,即OOV问题

(2)基于统计学习的方法:

典型的模型为HMM、CRF、MEMM,这些都是处理序列标注任务的常见模型。基于CRF的BiLSTM-CRF是2018年前的主流方法。

优点:识别性能更好

缺点:需要标注数据集,人工成本高

(3)基于预训练模型的方法

一个简单的思路就是就是Bert+序列解码器的方式,使用参数冻结或者微调后的Bert生成文本向量,然后输入给softmax或者crf进行解码,获取标签,然后解析标签得到实体。

在Bert时代,针对实体抽取的难点,还诞生了很多其它优秀的思路,闪耀着智慧的光芒! 💡

可参考:

https://zhuanlan.zhihu.com/p/469879435

https://zhuanlan.zhihu.com/p/586888321

具体的有以下思路:

  • 序列标注:如BIO、BMES,原生的bert-CRF无法处理嵌套和不连续问题,因为一个token只能预测一个标签。可以采用分层CRF+自定义标签的方法进行改进:一种实体类型就创建一个CRF解码层,通过多层CRF实现多个标签,同时自定义的多功能了的N和I标签来解决嵌套和不连续问题

在这里插入图片描述

  • 矩阵标注:一种实体类型就创建一个head矩阵,矩阵中的每个值都关联对应的头token和尾token(相当于只用一个实体的首尾token来表示它)。这是一个非常稀疏的矩阵(1、2为正样本、0为负样本),样本非常不均衡,因此要采用负采样。

    在这里插入图片描述

  • 指针标注:用两个指针遍历文本获取所有的span可能,然后判断span是否为某种实体。如果有 n 个实体类别,需要做 2 次 n 分类任务;(Bert时代的主流)

  • 阅读理解:用提问的方式来抽取实体。一种实体类型就需要提一次问。
    在这里插入图片描述

优点:在所有NER方法中性能最好

缺点:部署成本更高,同时也需要标注大量数据集训练,耗时

(4)基于生成式模型的方法

在Bert时代就诞生了阅读理解和统一信息抽取进行NER的方式,在大模型时代,有更强的理解不去标注数据集和训练模型了,因为在很多场景下,大模型的零样本或者少样本的方式都能表现出不错的效果。此时实体抽取的任务就变成了编写实体抽取Prompt。

eg:

请从以下文本中抽取所有的实体,并按照实体类型进行分类:

{输入文本}

例如:
文本:张三在北京大学读书,他的专业是计算机科学。
实体:
- 人物:张三
- 组织:北京大学
- 学科:计算机科学
- 地点:北京

请按照以下格式输出实体:
- [实体类型]:[实体名称]
- [实体类型]:[实体名称]

优点:不用标注数据和训练了,非常省事。

缺点:在细分领域上无法准确识别出一些领域专业词汇,此时可考虑微调LLM或者考虑使用bert类方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值