
spaCy Projects 示例实战指南基于 examples 从零训练、评估并打包 NLP 流水线【免费下载链接】spaCy Industrial-strength Natural Language Processing (NLP) in Python项目地址: https://gitcode.com/GitHub_Trending/sp/spaCy导读本指南以仓库中 examples/README.md 为骨架系统讲解 spaCy v3 如何将传统 v2 示例脚本升级为端到端的 spaCy Projects 工作流。你将掌握spacy project clone / assets / run / push / pull / document等核心命令的完整用法并能跟随ner_demo项目从克隆模板、下载数据资产、生成配置、训练 NER 模型一直到打包发布与可视化跑通数据 → 训练 → 评估 → 打包的全链路。从 v2 示例脚本到 v3 Projects 工作流spaCy 在 v3 版本中对示例代码的组织方式做了一次重要演进。在 v2.x 中训练示例以独立的 Python 脚本形式存在例如经典的train_ner.py用户需要自己管理数据格式转换、配置、训练、评估等步骤脚本之间缺乏统一的可复用结构。v3 的解法是引入spaCy Projects一种基于project.yml声明的标准化工作流把原始数据 → 训练语料 → 配置生成 → 训练 → 评估 → 打包的每一个环节拆解为可复现、可共享、可自动跳过的命令。仓库中的 examples/README.md 明确说明For spaCy v3 weve converted many of the v2 example scripts into end-to-end spacy projects workflows. The workflows include all the steps to go from data to packaged spaCy models.也就是说本仓库examples/目录的意义不在于存放大量可运行脚本而在于引导你进入 v3 的项目化训练体系——这也是阅读本指南时最需要建立的认知转变训练一个模型不再靠复制粘贴脚本而是靠克隆项目模板 运行声明式工作流。examples 目录概览仓库中的 examples/ 目录结构非常精简examples/README.md主文档介绍 demo 项目、教程项目与 ner_demo 端到端实战examples/training/README.mdv2 时代的训练示例目录其内容目前仅一句话指引读者返回主 READMESee examples/README.md进一步印证了 v2 脚本已被 v3 Projects 全面取代。如果你手里还持有 v2 的.json训练数据或.iob标注数据无需手工转换——仓库的 extra/example_data/ 提供了可直接用于练习的示例数据及其转换说明本文最后一节会专门介绍。可用的示例项目Pipeline demos 与 Tutorials 单组件训练 demopipelines最简单的入门路径是训练单个流水线组件官方维护的pipelines分类下包含项目训练目标典型用途pipelines/ner_demo命名实体识别器NER从零训练一个实体识别组件pipelines/textcat_demo文本分类器textcat训练一个文本分类组件pipelines/parser_intent_demo依存句法解析器为自定义语义训练依存解析器这类 demo 的优点是流程短、依赖少适合首次接触 spaCy Projects 的用户快速建立配置 → 训练 → 评估的整体直觉。 端到端教程tutorialstutorials分类则面向完整的 NLP 应用场景在单组件之上叠加了更真实的业务逻辑项目核心任务场景亮点tutorials/textcat_goemotions文本分类对 Reddit 帖子进行情绪分类体现多标签分类tutorials/nel_emerson实体链接NEL使用实体链接器消歧同名实体指代涉及知识库KB的使用这两个教程分别对应仓库中textcatspacy/pipeline/textcat.py与entity_linkerspacy/pipeline/entity_linker.py两个可训练组件适合在跑通 demo 后进阶。实战ner_demo 端到端工作流pipelines/ner_demo是 v2 时代train_ner.py演示脚本在 v3 中的项目化形态。下面按官方文档的五个步骤完整执行一遍。Step 1克隆项目模板python -m spacy project clone pipelines/ner_demospacy project clone会从预置的项目仓库中拉取pipelines/ner_demo模板到当前目录默认生成同名目录ner_demo/。从源码看该命令由 spacy/cli/project/clone.py 导出实际实现来自 spaCy 底层的工作流引擎weaselfrom weasel.cli.clone import *。如需从私有仓库克隆可像文档描述的那样追加--repo参数指定仓库地址。Step 2安装依赖并下载数据资产cd ner_demo python -m pip install -r requirements.txt python -m spacy project assetsrequirements.txt由项目模板自带声明训练所需依赖如spacy、streamlit等spacy project assets依据project.yml中assets段的 URL 声明下载原始数据如 NER 标注的 JSON 语料并校验文件哈希。实现见 spacy/cli/project/assets.py同样转发自weasel.cli.assets。提示assets段的extra: true字段可把某些数据标记为可选资源——它们不会随默认assets下载只有显式执行python -m spacy project assets --extra才会拉取。这在数据体积大或非必需时会很有用。Step 3运行默认工作流转换、生成配置、训练、评估python -m spacy project run allall是project.yml中workflows段定义的默认工作流通常串联了convert、create-config、train等命令。命令执行器实现见 spacy/cli/project/run.py。文档给出了真实的运行输出逐段解读如下① convert将 JSON 训练数据转为二进制.spacy格式 convert Running command: /home/user/venv/bin/python scripts/convert.py en assets/train.json corpus/train.spacy Running command: /home/user/venv/bin/python scripts/convert.py en assets/dev.json corpus/dev.spacy.spacy是 v3 训练语料的二进制容器内部为DocBin相比 JSON 加载更快、序列化更紧凑。转换逻辑可对应仓库 spacy/cli/convert.py示例 IOB/JSON 数据及转换命令见 extra/example_data/ner_example_data/README.md。② create-config自动生成训练配置 create-config Running command: /home/user/venv/bin/python -m spacy init config --lang en --pipeline ner configs/config.cfg --force ℹ Generated config template specific for your use case - Language: en - Pipeline: ner - Optimize for: efficiency - Hardware: CPU - Transformer: None ✔ Auto-filled config with all values ✔ Saved config configs/config.cfg You can now add your data and train your pipeline: python -m spacy train config.cfg --paths.train ./train.spacy --paths.dev ./dev.spacyspacy init config实现见 spacy/cli/init_config.py会根据语言、流水线组件、优化目标efficiency/accuracy、硬件CPU/GPU等参数渲染一份完整配置。模板源文件是 spacy/cli/templates/quickstart_training.jinja它编码了多项最佳实践例如GPU 场景自动写入gpu_allocator pytorch并使用更大的 batch sizeGPU 128 / CPU 1000含 NER、tagger、parser 等组件时自动前置tok2vec或 Transformer作为共享特征提取层有 textcat 等组件时还会判断其是否需要特征输入。③ train训练流水线 train Running command: /home/user/venv/bin/python -m spacy train configs/config.cfg --output training/ --paths.train corpus/train.spacy --paths.dev corpus/dev.spacy --training.eval_frequency 10 --training.max_steps 100 --gpu-id -1 ℹ Using CPU Initializing pipeline [2021-03-11 19:34:59,101] [INFO] Set up nlp object from config [2021-03-11 19:34:59,109] [INFO] Pipeline: [tok2vec, ner] [2021-03-11 19:34:59,113] [INFO] Created vocabulary [2021-03-11 19:34:59,113] [INFO] Finished initializing nlp object [2021-03-11 19:34:59,265] [INFO] Initialized pipeline components: [tok2vec, ner] ✔ Initialized pipeline Training pipeline ℹ Pipeline: [tok2vec, ner] ℹ Initial learn rate: 0.001 E # LOSS TOK2VEC LOSS NER ENTS_F ENTS_P ENTS_R SCORE --- ------ ------------ -------- ------ ------ ------ ------ 0 0 0.00 7.90 0.00 0.00 0.00 0.00 10 10 0.11 71.07 0.00 0.00 0.00 0.00 20 20 0.65 22.44 50.00 50.00 50.00 0.50 30 30 0.22 6.38 80.00 66.67 100.00 0.80 40 40 0.00 0.00 80.00 66.67 100.00 0.80 50 50 0.00 0.00 80.00 66.67 100.00 0.80 60 60 0.00 0.00 100.00 100.00 100.00 1.00 70 70 0.00 0.00 100.00 100.00 100.00 1.00 80 80 0.00 0.00 100.00 100.00 100.00 1.00 90 90 0.00 0.00 100.00 100.00 100.00 1.00 100 100 0.00 0.00 100.00 100.00 100.00 1.00 ✔ Saved pipeline to output directory training/model-last这段输出信息量很大值得逐项解读流水线构成Pipeline: [tok2vec, ner]——tok2vec负责把词序列编码为上下文相关的向量表示ner组件在其之上做实体边界与类别预测训练参数demo 项目为了演示速度把eval_frequency评估频率每 10 步评估一次与max_steps最大步数 100调小gpu-id -1表示强制使用 CPU指标含义ENTS_F / ENTS_P / ENTS_R分别是 NER 的 F1、精确率、召回率SCORE是综合得分此处等于 ENTS_F。注意训练日志前 10 步各项为 0是模型尚未收敛的常见现象LOSS TOK2VEC与LOSS NER则反映两个组件的损失下降趋势产物位置训练结束后流水线保存到training/model-last若中途出现更优模型还会产出model-best可用nlp spacy.load(training/model-best)直接加载。如果你希望完全掌控训练细节也可以不依赖create-config直接参照上文中spacy train的提示命令手动执行训练训练入口实现见 spacy/cli/train.py。Step 4打包模型为 Python 包python -m spacy project run package该命令调用spacy package实现见 spacy/cli/package.py把training/model-best连同metas/下的元数据模板meta.json打包成一个可分发的 Python 包wheel产出到packages/目录。打包后的模型即可通过pip install安装并在其他项目中使用。Step 5可视化模型输出python -m spacy project run visualize-modeldemo 项目内置了一个基于 Streamlit 的可视化命令加载训练好的模型对示例文本进行 NER 预测并在浏览器中高亮展示实体标注结果。这是快速验收模型效果的最直观方式。深入Projects 的底层结构与可扩展机制一个典型项目目录长什么样参考 website/docs/usage/projects.mdx 中给出的约定ner_demo这类项目克隆到本地后通常具备以下布局├── project.yml # 项目设置唯一必需文件 ├── project.lock # 记录命令输入/输出的锁文件用于跳过未变化的任务 ├── assets/ # 下载的数据资产 ├── configs/ # 训练用 config.cfg ├── corpus/ # 训练语料.spacy输出目录 ├── metas/ # 打包用 meta.json 模板 ├── metrics/ # 评估指标输出目录 ├── packages/ # 打包后的模型 Python 包 ├── scripts/ # 自定义脚本如 convert.py ├── training/ # 训练产物model-best / model-last └── requirements.txt # 项目依赖其中project.lock是 Projects 实现增量执行的关键命令的deps依赖文件与outputs输出文件被记录在锁文件中若输入未变化且输出已存在命令会被自动跳过从而避免重复训练。若想强制重跑可追加--force参数。project.yml 的四个核心段assets声明远程数据资源URL、目标路径、可选的checksum哈希校验与extra标记由spacy project assets消费commands声明可执行命令name、script、deps、outputs、no_skip。例如定义一个test命令调用pytest验证训练产物并把training/model-best设为依赖以保证其在运行前存在设置no_skip: true可让该命令每次强制执行测试不应被跳过workflows把多个命令编排成一条工作流如all: [convert, create-config, train]一次spacy project run all串行执行vars/env变量注入机制。vars定义项目内变量如${vars.batch_size}命令行可用--vars.batch_size覆盖env则把系统环境变量如GPU_ID、BATCH_SIZE透传给命令脚本例如BATCH_SIZE128 python -m spacy project run evaluate。实现细节命令中的python/pip会被 spaCy 自动替换为当前解释器的sys.executable保证始终使用同一个 Python 环境执行见 website/docs/usage/projects.mdx 中的说明。团队协作push / pull / documentProjects 还支持把产物托管到远程存储如云存储桶便于团队共享已训练模型或中间结果spacy project push把命令的outputs上传到远程见 spacy/cli/project/push.pyspacy project pull拉取远程产物见 spacy/cli/project/pull.py配合锁文件队友无需重训即可复用模型spacy project document --output README.md根据project.yml自动生成项目说明文档见 spacy/cli/project/document.py保持项目文档与配置同步若项目使用 DVC 管理数据版本spacy project dvc系列命令可生成对应的 DVC 配置见 spacy/cli/project/dvc.py。从源码结构看spacy/cli/project/下的每个命令模块clone.py、assets.py、run.py 等都只是一行from weasel.cli.* import *即全部复用 weasel 工作流引擎的实现同时它们在 spacy/cli/init.py 中被注册为project_assets、project_clone、project_run、project_document、project_update_dvc、project_pull、project_push等 CLI 子命令统一挂载在python -m spacy入口下。配套示例数据快速自测 NER 与 textcat如果你不想立刻克隆远程项目仓库 extra/example_data/ 自带了两套可直接用于练习的标注数据NER / IOB 数据extra/example_data/ner_example_data/README.md——提供ner-token-per-line.iob、ner-sent-per-line.iob、ner-token-per-line-conll2003.iob等多种格式的 IOB 文件及对应的 v2 JSON 版本可用以下命令转换为 v3 的.spacy格式python -m spacy convert -c iob -s -n 10 -b en_core_web_sm file.iob . python -m spacy convert file.json .-c iob指定输入格式为 IOB-b en_core_web_sm指定用于提供词向量的基础模型-n 10限制前 10 条示例。文本分类数据extra/example_data/textcat_example_data/README.md——包含两类典型标注形态cooking.json互斥标签baking/not_baking对应单标签 textcatjigsaw-toxic-comment.json多标签数据insult/obscene/severe_toxic/toxic对应textcat_multilabel组件的训练场景实现见 spacy/pipeline/textcat_multilabel.py。这两套数据配合 spacy/cli/convert.py 与spacy train足以在本地复现 ner_demo / textcat_demo 的核心训练流程。小结examples/README.md表面上是示例索引实际上承载了 spaCy v3 最重要的方法论转变用声明式、可复现、可共享的 Projects 取代零散的示例脚本。通过 ner_demo 的五步实战clone → assets → run all → package → visualize-model你可以完整掌握从数据到打包模型的全部环节而project.yml的assets / commands / workflows / vars / env分段、push / pull / document协作命令以及仓库源码中 weasel 引擎与init_config配置模板的支撑则为你在真实项目中搭建、复用和分发训练流水线提供了坚实基础。后续若想深入了解推荐继续阅读仓库内的 website/docs/usage/projects.mdxProjects 完整文档、spacy/cli/templates/quickstart_training.jinja训练配置模板最佳实践以及 spacy/cli/init_config.py配置生成实现。【免费下载链接】spaCy Industrial-strength Natural Language Processing (NLP) in Python项目地址: https://gitcode.com/GitHub_Trending/sp/spaCy创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考