spaCy V3.0 基于规则匹配(4)----举例说明基于规则与基于统计模型组件的组合命名实体识别NER

可以通过多种方式组合基于统计模型和基于规则的组件。基于规则的组件可以通过为特定词符(Tokens)预先标记词性、命名实体或句子边界来提高统计模型的准确性。统计模型通常会采用这些预设标记,来提高其他判定的准确性。也可以在统计模型之后使用基于规则的组件来更正常见错误。最后,基于规则的组件可以引用统计模型设置的属性,以实现更抽象的匹配逻辑。例1: 扩充命名实体当使用经过预训练的命名实体识别模型从文本中提取信息时,可能会发现预测的span仅包括你想要查找实体的一部分。发生这种问题,一种情况是,统计模型错误地.
摘要由CSDN通过智能技术生成

可以通过多种方式组合基于统计模型和基于规则的组件。基于规则的组件可以通过为特定词符(Tokens)预先标记词性、命名实体或句子边界来提高统计模型的准确性。统计模型通常会采用这些预设标记,来提高其他判定的准确性。也可以在统计模型之后使用基于规则的组件来更正常见错误。最后,基于规则的组件可以引用统计模型设置的属性,以实现更抽象的匹配逻辑。

例1: 扩充命名实体

当使用经过预训练的命名实体识别模型从文本中提取信息时,可能会发现预测的span仅包括你想要查找实体的一部分。发生这种问题,一种情况是,统计模型错误地预测了实体;另一种情况是,在原始训练语料库中定义实体类型的方法与应用程序所需要的不匹配。

例如,语料库spaCy的Chinese pipelines定义一个PERSON实体时,被训练为只匹配人名,没有包含像“先生”或“老师”这样的头衔。这样做是合理的,因为可以更容易地将实体类型解析回知识库。但是如果你的应用需要包括头衔的全名呢?

虽然可以通过使用更多包含头衔的span样本来更新模型,从而教给模型一个PERSON实体的新定义,但这可能不是最有效的方法。现有的模型是在200多万字的基础上训练的,因此为了完全改变实体类型的定义,你可能需要大量的训练样本。但是,如果已经有了预测的PERSON实体,则可以使用基于规则的方法来检查它们是否带有头衔,如果是,则将实体范围扩展一个Token。毕竟,本例中所有头衔的共同点是,它们总是出现在person实体之后的下一个Token中。

  • 方法一:通过添加自定义管道组件完成
@Language.component("expand_person_entities")
def expand_person_entities(doc):
	new_ents = []
	for ent in doc.ents:
		# 当 ent是第一个token时,不检查头衔
		if ent.label_ == "PERSON" and ent.start != 0:
			prev_token = doc[ent.start - 1]
			if prev_token.text in ("先生", "老师", "女士", "教授"):
				new_ent = Span(doc, ent.start - 1, ent.end, label=ent.label)
				new_ents.append(new_ent)
			else:
				new_ents.append(ent)
		else:
			new_ents.append(ent)
	doc.ents = new_ents
	return doc

给上面的函数传入一个Doc对象,修改doc.ents后返回doc。使用@Language.component装饰符,我们可以将它注册为一个管道组件,这样它可以在处理文本时自动运行。用nlp.add_pipe将其添加到当前管道。

完整示例代码如下:

# coding=utf-8
import spacy
from spacy.language import Language
from spacy.tokens import Span

nlp 
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,我已经了解了你的问题。下面是我的回答: 命名实体识别 (Named Entity Recognition, NER) 是自然语言处理 (Natural Language Processing, NLP) 中的一个重要任务,其目的是从文本中识别和分类出包括人名、地名、组织机构名、时间、货币等在内的命名实体。NER 在信息抽取、知识图谱构建、机器翻译等领域有着广泛的应用。 NER 的基本思路是将文本中的每个词标注为其所属的命名实体类别,通常采用 BIO 标注法。B 表示实体的开头,I 表示实体的中间,O 表示普通词语。 开源工具方面,常用的 NER 工具有 Stanford NERSpaCy、NLTK、LTP 等。这些工具均提供了预训练好的模型和相应的 API,可以方便地进行实体识别。 MindSpore 是华为开发的一款深度学习框架,其支持自定义算子和分布式训练,可以用于各种深度学习任务。使用 MindSpore 实现 NER,可以采用 BiLSTM-CRF、BERT 等模型。具体步骤如下: 1. 数据预处理:将文本数据转换为数字表示,例如采用词嵌入 (Word Embedding) 的方式将每个词语转换为一个向量。 2. 模型设计:设计相应的神经网络结构,例如 BiLSTM-CRF 或者 BERT。 3. 损失函数定义:NER 任务通常采用 CRF 模型,需要定义相应的损失函数。 4. 模型训练:采用训练数据对模型进行训练,并在验证集上进行验证,直到模型收敛。 5. 模型评估:采用测试集对模型进行评估,计算准确率、召回率、F1 值等指标。 以上就是命名实体识别的基本知识点和使用开源工具以及 MindSpore 框架实现命名实体识别模型的流程。希望能对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值