微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 spaCy v3 中正确使用用于自定义 NER 的转换器模型?

如何解决如何在 spaCy v3 中正确使用用于自定义 NER 的转换器模型?

我正在尝试使用 spaCy 版本 3 为自定义标签训练命名实体识别 (NER) 模型。我浏览了他们网站上的所有文档,但我不明白创建管道模型的正确方法是什么。显然,如果我尝试使用 en_core_web_trf,我将无法添加自己的标签,因为最终的输出分数都是零。但它适用于 en_core_web_sm

但是,如果我尝试通过创建一个空白的英语模型,然后手动添加来自 en_core_web_trf 的转换器模型和与 en_core_web_sm 分开的 ner 模型来做一些临时方法,它会起作用。

我的问题是 - 除了这种临时方法之外,是否有更好的方法来初始化我的模型和管道方法?我不关心 LOCATION 等预训练实体。我只想根据我在数据集中定义的自定义实体来训练我的模型(使用基于转换器的方法)。

def load_spacy():
    spacy.require_gpu()

    # 1) 'Makeshift' method
    source_nlp = spacy.load("en_core_web_sm")
    source_nlp_trf = spacy.load("en_core_web_trf")
    nlp = spacy.blank("en")
    nlp.add_pipe("transformer",source=source_nlp_trf)
    nlp.add_pipe("ner",source=source_nlp)
    
    # 2) trf only method
    nlp = spacy.load("en_core_web_trf")
    
    # Getting the pipeline component
    ner = nlp.get_pipe("ner")
    return ner,nlp

编辑:我使用的确切训练方法已在已定义类 fit()NerModel 函数中的 this python 脚本中描述。

脚本(第 16 行)中的 load_spacy() 使用小模型,但我正在试验变压器模型并使用我在本问题开头定义的 load_spacy() 的定义.

PS:我一直在 Google Colab(又名笔记本)上进行实验,以便将 GPU 用于 Transformer,但源代码方法几乎相同。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?