spaCy v3.0发布:基于Transformer的NLP技术革新

spaCy v3.0引入了基于Transformer的管道,显著提升准确率至业界前沿水平。新版本提供改进的训练配置系统、多框架模型支持、端到端项目管理工具,并集成多种ML生态工具,助力NLP项目从原型到生产。

spaCy v3.0发布

spaCy v3.0是一个重大版本发布!它引入了全新的基于Transformer的管道,将spaCy的准确率提升至当前业界前沿水平,并提供了新的工作流系统,帮助用户将项目从原型推进到生产环境。配置和训练管道变得更加简单,同时增加了许多与NLP生态系统其他部分的新集成和改进。

基于Transformer的管道

spaCy v3.0配备了全新的基于Transformer的管道,可以使用任何预训练的Transformer来训练自己的管道,甚至通过多任务学习在多个组件之间共享一个Transformer。spaCy的Transformer支持与PyTorch和HuggingFace transformers库互操作,让用户能够访问数千个预训练模型。

准确性比较

管道 解析器 标注器 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语料库上的准确性(基于开发集报告)。

命名实体识别系统在OntoNotes和CoNLL ‘03数据集上的表现也达到了先进水平,具体数据可参考NLP-progress。

共享嵌入层

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

新的训练管道

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

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

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

配置示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
[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的新配置系统使得定制不同管道组件使用的神经网络模型变得容易。用户还可以通过spaCy的机器学习库Thinc实现自己的架构,该库提供了各种层和实用程序,以及对PyTorch、TensorFlow和MXNet等框架的薄包装。

包装PyTorch模型示例

1
2
3
4
5
6
7
8
from torch import nn
from thinc.api import PyTorchWrapper

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项目示例

1
2
3
4
5
6
7
8
9
# 克隆项目模板
python -m spacy project clone pipelines/tagger_parser_ud
cd tagger_parser_ud

# 下载数据资产
python -m spacy project assets

# 运行工作流
python -m spacy project run all

使用Weights & Biases跟踪结果

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

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

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

并行训练示例

1
2
3
4
5
6
7
pip install spacy-ray --pre

# 检查CLI是否注册
python -m spacy ray --help

# 训练管道
python -m spacy ray train config.cfg --n-workers 2

新的内置管道组件

spaCy v3.0包括几个新的可训练和基于规则的组件,用户可以添加到管道中并根据用例进行定制:

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

新的和改进的管道组件API

定义、配置、重用、训练和分析管道组件现在更加方便。@Language.component和@Language.factory装饰器允许用户注册组件并定义其默认配置和元数据。任何自定义组件都可以在训练期间包含,从现有训练管道中获取组件允许用户混合和匹配自定义管道。

依赖匹配

新的DependencyMatcher允许使用Semgrex操作符在依赖解析中匹配模式。它遵循与基于token的Matcher相同的API。

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

spaCy v3.0正式放弃对Python 2的支持,现在需要Python 3.6+。这意味着代码库可以充分利用类型提示。spaCy的用户面向API现在带有类型提示。新版本的Thinc还具有广泛的类型支持,包括模型和数组的自定义类型,以及用于类型检查模型定义的自定义mypy插件。

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

资源

  • 发布说明:官方GitHub发布
  • spaCy v3.0:使用文档和API参考
  • spaCy v3.0的新功能:新功能和所有更改
  • GitHub上的spaCy:仓库和问题跟踪器
  • 从v2.x迁移到v3.x的指南:如何更新代码
  • spaCy模型目录:下载训练管道
  • spaCy项目模板:端到端NLP工作流
  • 视频教程:YouTube上的更深入spaCy内容
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计