news 2026/4/23 14:15:04

spaCy v3.0发布:革新NLP工作流与Transformer集成

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
spaCy v3.0发布:革新NLP工作流与Transformer集成

Introducing spaCy v3.0

spaCy v3.0 是一次重大发布!它引入了全新的基于 Transformer 的管道,将 spaCy 的准确性提升至当前最先进水平,并配备了新的工作流系统,帮助您将项目从原型推进到生产环境。配置和训练您的管道变得更加容易,并且与 NLP 生态系统的其他部分有了许多新的和改进的集成。

我们开发 spaCy v3.0 已超过一年,如果算上投入 Thinc 的所有工作,则已近两年。本次发布的主要目标是让您更轻松地将自己的模型,特别是像 Transformer 这样的最先进模型,集成到 spaCy 中。您可以使用我们的全新配置系统,在 PyTorch 或 TensorFlow 等框架中编写驱动 spaCy 组件的模型,来描述所有设置。由于现代 NLP 工作流通常包含多个步骤,因此推出了新的工作流系统来帮助您有条理地组织工作。

有关您平台和设置的具体安装说明,请查看安装快速入门部件。

pipinstall-U spacy

基于 Transformer 的管道

spaCy v3.0 引入了全新的基于 Transformer 的管道,将 spaCy 的准确性提升至当前最先进水平。您可以使用任何预训练的 Transformer 来训练自己的管道,甚至可以通过多任务学习在多个组件之间共享一个 Transformer。spaCy 的 Transformer 支持与 PyTorch 和 HuggingFace transformers 库交互操作,让您能够为管道访问成千上万的预训练模型。请参阅下方新管道概览。

Pipeline Parser Tagger NER

  • en_core_web_trf (spaCy v3) 95.5 98.3 89.4
  • en_core_web_lg (spaCy v3) 92.2 97.4 85.4
  • en_core_web_lg (spaCy v2) 91.9 97.2 85.5

准确性基于 OntoNotes 5.0 语料库(在开发集上报告)。

Named Entity Recognition System OntoNotes CoNLL '03

  • spaCy RoBERTa (2020) 89.7 91.6
  • Stanza (StanfordNLP)¹ 88.8 92.1
  • Flair² 89.7 93.1

在 OntoNotes 5.0 和 CoNLL-2003 语料库上的命名实体识别准确性。更多结果请参见 NLP-progress。项目模板:benchmarks/ner_conll03。
1. Qi 等人 (2020)。2. Akbik 等人 (2018)。

spaCy 允许您在多个组件之间共享单个 Transformer 或其他 token-to-vector(“tok2vec”)嵌入层。您甚至可以更新共享层,执行多任务学习。在组件之间重用嵌入层可以使您的管道运行速度更快,并生成更小的模型。

一个包含共享嵌入层的管道,组件可以通过监听器“连接”到该层

您可以在管道起始位置附近添加一个 Transformer 或 Tok2Vec 组件,从而在多个组件之间共享单个 Transformer 或其他 token-to-vector 模型。管道中靠后的组件可以通过在其模型中包含一个监听器层来“连接”到它。

了解更多
基准测试
下载训练好的管道

新的训练好的管道

spaCy v3.0 为 18 种语言提供了重新训练的模型系列,总共有 59 个训练好的管道,包括 5 个新的基于 Transformer 的管道。您也可以使用自己的数据和选择的 Transformer 权重来训练自己的基于 Transformer 的管道。

Package Language Transformer Tagger Parser NER

  • en_core_web_trf English roberta-base 97.8 95.2 89.9
  • de_dep_news_trf German bert-base-german-cased 99.0 95.8 -
  • es_dep_news_trf Spanish bert-base-spanish-wwm-cased 98.2 94.6 -
  • fr_dep_news_trf French camembert-base 95.7 94.4 -
  • zh_core_web_trf Chinese bert-base-chinese 92.5 76.6 75.4

这些模型每个都使用在整个管道中共享的单个 Transformer 进行训练,这要求必须在单个语料库上进行训练。对于英语和中文,使用了 OntoNotes 5 语料库,它在多个任务上都有标注。对于法语、西班牙语和德语,没有同时包含句法和实体标注的合适语料库,因此这些语言的 Transformer 模型不包括 NER 功能。

下载管道

新的训练工作流和配置系统

spaCy v3.0 引入了一个全面且可扩展的系统来配置训练过程。一个配置文件描述了训练过程的每个细节,没有隐藏的默认值,使得重新运行实验和跟踪变更变得容易。

快速入门部件自动为您的特定用例和设置生成启动配置

可以使用快速入门部件或 init config 命令开始使用。您无需在命令行提供大量参数,只需将 config.cfg 文件传递给 spacy train 即可。

训练配置文件包含训练管道所需的所有设置和超参数。某些设置也可以是注册的函数,您可以进行交换和自定义,从而轻松实现自己的自定义模型和架构。

config.cfg [training] accumulate_gradient = 3 [training.optimizer] @optimizers = "Adam.v1" [training.optimizer.learn_rate] @schedules = "warmup_linear.v1" warmup_steps = 250 total_steps = 20000 initial_rate = 0.01

spaCy 训练配置的主要优势和特点包括:

  • 结构化部分:配置按部分分组,嵌套部分使用 . 符号定义。例如,[components.ner] 定义了管道的命名实体识别器设置。配置可以加载为 Python 字典。
  • 对注册函数的引用:部分可以引用注册函数,如模型架构、优化器或调度程序,并定义传递给它们的参数。您也可以注册自己的函数来定义自定义架构或方法,在配置中引用它们并调整其参数。
  • 插值:如果有多个组件使用的超参数或其他设置,可以定义一次,并将其作为变量引用。
  • 无隐藏默认值的可重复性:配置文件是“唯一的真相来源”,包含所有设置。
  • 自动检查和验证:加载配置时,spaCy 会检查设置是否完整以及所有值是否具有正确的类型。这有助于及早发现潜在的错误。在自定义架构中,可以使用 Python 类型提示来告诉配置期望的数据类型。

了解更多

使用任何框架的自定义模型

spaCy 的新配置系统使得自定义不同管道组件使用的神经网络模型变得容易。您还可以通过 spaCy 的机器学习库 Thinc 实现自己的架构,该库提供了各种层、实用程序以及对 PyTorch、TensorFlow 和 MXNet 等框架的轻量级包装。组件模型都遵循统一模型 API,每个模型也可以用作更大网络的子层,允许您将来自不同框架的实现自由组合到单个模型中。

包装 PyTorch 模型

fromtorchimportnnfromthinc.apiimportPyTorchWrapper torch_model=nn.Sequential(nn.Linear(32,32),nn.ReLU(),nn.Softmax(dim=1))model=PyTorchWrapper(torch_model)

了解更多

使用项目管理端到端工作流

spaCy 项目让您能够管理和共享针对不同用例和领域的端到端 spaCy 工作流,并编排自定义管道的训练、打包和服务。您可以从克隆预定义的项目模板开始,调整以适应需求,加载数据,训练管道,将其导出为 Python 包,将输出上传到远程存储,并与团队共享结果。

spaCy 项目还使得与数据科学和机器学习生态系统中的其他工具集成变得容易,包括用于数据版本控制的 DVC,用于创建标记数据的 Prodigy,用于构建交互式应用程序的 Streamlit,用于在生产中服务模型的 FastAPI,用于并行训练的 Ray,用于实验跟踪的 Weights & Biases 等等!

使用 spaCy 项目

# 克隆项目模板python -m spacy project clone pipelines/tagger_parser_udcdtagger_parser_ud# 下载数据资产python -m spacy project assets# 运行工作流python -m spacy project run all

选定的示例模板
要克隆模板,可以运行 spacy project clone 命令及其相对路径,例如 python -m spacy project clone pipelines/ner_wikiner。

  • pipelines/tagger_parser_ud:在通用依赖树库上训练标记器和解析器。
  • pipelines/ner_wikiner:在 WikiNER 语料库上训练命名实体识别模型。
  • tutorials/textcat_goemotions:对 Reddit 帖子中的情绪进行文本分类。
  • integrations/fastapi:使用 FastAPI 服务训练好的管道。
  • integrations/streamlit:使用 Streamlit 可视化和探索训练好的管道。

了解更多
项目模板

使用 Weights & Biases 跟踪结果

Weights & Biases 是一个流行的实验跟踪平台。spaCy 通过 WandbLogger 与其开箱即用地集成,您可以将其作为 training.logger 块添加到训练配置中。

使用 config.cfg 中定义的所有配置值(包括注册函数)的参数重要性

然后,每个步骤的结果都会与完整的训练配置一起记录在您的项目中。这意味着每个超参数、注册函数名和参数都将被跟踪,您将能够看到它对结果的影响。

config.cfg [training.logger] @loggers = "spacy.WandbLogger.v1" project_name = "monitor_spacy_training" remove_config_values = ["paths.train", "paths.dev", "training.dev_corpus.path", "training.train_corpus.path"]

使用 Ray 进行并行和分布式训练

Ray 是一个用于构建和运行分布式应用程序的快速且简单的框架。您可以使用 Ray 在一台或多台远程机器上训练 spaCy,从而可能加快训练过程。

该集成由一个轻量级扩展包 spacy-ray 提供支持,如果它与 spaCy 安装在同一个环境中,它会自动将 ray 命令添加到 spaCy CLI。然后您可以运行 spacy ray train 进行并行训练。

使用 Ray 进行并行训练

pipinstallspacy-ray --pre# 检查 CLI 是否已注册python -m spacy ray --help# 训练管道python -m spacy ray train config.cfg --n-workers2

了解更多
spacy-ray

新的内置管道组件

spaCy v3.0 包含了几个新的可训练和基于规则的组件,您可以将其添加到管道中并为您的用例进行自定义:

  • SentenceRecognizer:用于句子分割的可训练组件。
  • Morphologizer:用于预测形态特征的可训练组件。
  • Lemmatizer:用于基于规则和查找词形还原的独立组件。
  • AttributeRuler:用于使用匹配模式设置 token 属性的组件。
  • Transformer:用于在管道中使用 Transformer 模型、访问输出和对齐 token 的组件。通过 spacy-transformers 提供。

新的和改进的管道组件 API

现在定义、配置、重用、训练和分析管道组件变得更加容易和方便。@Language.component 和 @Language.factory 装饰器允许您注册组件并定义其默认配置和元数据,例如它分配和需要的属性值。任何自定义组件都可以在训练期间包含在内,并且从现有训练好的管道中获取组件可以让您混合搭配自定义管道。nlp.analyze_pipes 方法输出有关当前管道及其组件的结构化信息,包括它们分配的属性、在训练期间计算的分数以及是否有任何必需属性未设置。

importspacyfromspacy.languageimportLanguage@Language.component("my_component")defmy_component(doc):returndoc nlp=spacy.blank("en")# 使用字符串名称添加组件nlp.add_pipe("my_component")# 从其他管道获取组件other_nlp=spacy.load("en_core_web_sm")nlp.add_pipe("ner",source=other_nlp)# 分析组件及其属性nlp.analyze_pipes(pretty=True)

了解更多

依赖匹配

新的 DependencyMatcher 允许您使用 Semgrex 运算符在依存解析树中匹配模式。它遵循与基于 token 的 Matcher 相同的 API。添加到依赖匹配器的模式由字典列表组成,每个字典描述一个要匹配的 token 及其与模式中现有 token 的关系。

importspacyfromspacy.matcherimportDependencyMatcher nlp=spacy.load("en_core_web_sm")matcher=DependencyMatcher(nlp.vocab)pattern=[{"RIGHT_ID":"anchor_founded","RIGHT_ATTRS":{"ORTH":"founded"}},{"LEFT_ID":"anchor_founded","REL_OP":">","RIGHT_ID":"subject","RIGHT_ATTRS":{"DEP":"nsubj"}},{"LEFT_ID":"anchor_founded","REL_OP":">","RIGHT_ID":"founded_object","RIGHT_ATTRS":{"DEP":"dobj"}},{"LEFT_ID":"founded_object","REL_OP":">","RIGHT_ID":"founded_object_modifier","RIGHT_ATTRS":{"DEP":{"IN":["amod","compound"]}}}]matcher.add("FOUNDED",[pattern])doc=nlp("Lee, an experienced CEO, has founded two AI startups.")matches=matcher(doc)

了解更多

类型提示和基于类型的数据验证

spaCy v3.0 正式放弃对 Python 2 的支持,现在需要 Python 3.6+。这也意味着代码库可以充分利用类型提示。spaCy 面向用户的纯 Python 实现 API(相对于 Cython)现在配备了类型提示。spaCy 机器学习库 Thinc 的新版本也提供了广泛的类型支持,包括用于模型和数组的自定义类型,以及可用于类型检查模型定义的自定义 mypy 插件。

对于数据验证,spaCy v3.0 采用了 pydantic。它还支持 Thinc 配置系统的数据验证,允许您注册带有类型参数的自定义函数,在配置中引用它们,并在参数值不匹配时查看验证错误。

使用类型提示进行参数验证

fromspacy.languageimportLanguagefrompydanticimportStrictBool@Language.factory("my_component")defcreate_component(nlp:Language,name:str,custom:StrictBool):...

了解更多

资源

  • 发布说明:官方 GitHub 发布
  • spaCy v3.0:使用文档和 API 参考
  • spaCy v3.0 的新功能:新功能和所有变更
  • GitHub 上的 spaCy:存储库和问题跟踪器
  • 从 v2.x 迁移到 v3.x 的指南:如何更新代码
  • spaCy 模型目录:下载训练好的管道
  • spaCy 项目模板:端到端 NLP 工作流
  • 视频教程:YouTube 上更深入的 spaCy 内容
    更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)或者 我的个人博客 https://blog.qife122.com/
    对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 7:58:37

零GPU资源如何跑大模型?M2FP CPU优化版满足中小团队需求

零GPU资源如何跑大模型?M2FP CPU优化版满足中小团队需求 在AI视觉应用日益普及的今天,语义分割作为高阶感知能力的核心技术之一,正被广泛应用于虚拟试衣、智能安防、人机交互和数字人生成等场景。然而,大多数高性能人体解析模型依…

作者头像 李华
网站建设 2026/4/18 14:23:48

为什么M2FP选择PyTorch 1.13.1?底层兼容性问题全解析

为什么M2FP选择PyTorch 1.13.1?底层兼容性问题全解析 📌 背景与挑战:多人人体解析的工程落地困境 在计算机视觉领域,多人人体解析(Multi-person Human Parsing) 是一项极具挑战性的任务。它不仅要求模型能够…

作者头像 李华
网站建设 2026/4/18 8:27:22

企业级部署建议:M2FP配合Docker实现服务容器化

企业级部署建议:M2FP配合Docker实现服务容器化 📌 引言:为何选择M2FP Docker进行服务化部署? 在当前AI模型快速迭代的背景下,如何将高性能语义分割模型稳定、高效地部署到生产环境,是企业面临的核心挑战之…

作者头像 李华
网站建设 2026/4/18 9:45:12

混沌工程职业指南:软件测试从业者的技能跃迁路径

一、破壁:测试工程师为何需要混沌工程思维1.1 传统测试的局限性已知缺陷验证 vs 未知风险探测:功能/性能测试聚焦预设场景,混沌工程探索复杂系统连锁故障被动防御机制:基于历史故障的补丁式修复,缺乏主动失效验证能力案…

作者头像 李华
网站建设 2026/4/23 5:00:54

混沌工程案例研究:电商系统韧性构建与测试启示

一、引言:电商系统的脆弱性图谱 电商系统作为典型分布式架构(如图1),存在多级脆弱点: [用户层] → [CDN] → [网关集群]↓ [微服务层]:订单/支付/库存/推荐↓ [数据层]:Redis集群 → MySQL分库…

作者头像 李华
网站建设 2026/4/22 10:09:32

如何选择人体解析技术?M2FP的ResNet-101骨干网络有何优势

如何选择人体解析技术?M2FP的ResNet-101骨干网络有何优势 在计算机视觉领域,人体解析(Human Parsing) 是一项关键的细粒度语义分割任务,旨在将人体图像中的每个像素精确分类到特定的身体部位类别中,如头发…

作者头像 李华