spacy-course
spacy-course 是一套免费的在线进阶自然语言处理(NLP)课程,旨在帮助学习者掌握如何使用 spaCy 库构建高级语言理解系统。它解决了从基础语法分析迈向复杂 NLP 应用时的学习断层问题,通过结合规则匹配与机器学习两种主流方法,引导用户深入理解技术原理并付诸实践。
这套资源特别适合具备一定编程基础的开发者、数据科学家及 AI 研究人员进行自学。课程设计灵活包容,鼓励探索式学习:所有练习题均提供提示与完整解决方案,用户可随时查看参考代码并按自己的节奏标记进度,无需担心犯错。
在技术实现上,spacy-course 不仅内容详实,其本身也是一个现代化的开源 Web 框架范例。前端采用 Gatsby、Reveal.js 和 Plyr 打造流畅的交互体验,后端则巧妙集成 Binder 服务,允许用户在浏览器中直接运行和修改代码示例,无需本地配置环境。目前课程已支持英语、德语和西班牙语等多种语言版本,所有内容均在开放许可协议下发布,是社区驱动技术教育的优秀典范。
使用场景
某初创公司的 NLP 工程师李明急需构建一个多语言评论情感分析系统,但团队对 spaCy 的高级特性(如规则匹配与机器学习结合)缺乏系统性认知。
没有 spacy-course 时
- 学习路径支离破碎,只能在零散的技术博客和过时的文档中摸索高级用法,效率极低。
- 面对复杂的自定义管道(Pipeline)构建,因缺乏实战指引,频繁陷入代码报错却不知如何调试的困境。
- 难以理解如何将规则系统与统计模型有效结合,导致开发出的原型准确率低且泛化能力差。
- 团队缺乏统一的练习环境,新成员上手慢,且无法即时验证代码逻辑,沟通成本高昂。
使用 spacy-course 后
- 通过结构化的在线章节,李明快速掌握了从基础到进阶的完整知识体系,大幅缩短了调研时间。
- 利用内置的交互式练习和即时反馈机制,他直接在浏览器中调试代码,迅速解决了管道配置的难题。
- 课程中关于“规则 + 机器学习”混合架构的实战案例,帮助他成功设计出高精度的情感分析模型。
- 团队成员利用开源的课程框架进行自测和协作,统一了技术标准,新人也能通过“提示与解答”功能快速独立上手。
spacy-course 将抽象的 NLP 理论转化为可交互的实战演练,让开发者能以最低成本掌握构建工业级自然语言理解系统的核心能力。
运行环境要求
- Linux
- macOS
- Windows
未说明
未说明

快速开始
使用 spaCy 的高级自然语言处理:免费在线课程
此仓库包含一个在线课程,以及其现代化的开源Web框架。在课程中,您将学习如何使用spaCy构建先进的自然语言理解系统,同时采用基于规则和机器学习的方法。前端由Gatsby、Reveal.js和Plyr提供支持,后端代码执行则借助Binder实现 💖。整个项目均为开源,并以MIT许可证(代码和框架)及CC BY-NC协议(spaCy课程材料)发布。
本课程主要面向自学者。是的,您可以“作弊”——所有答案都包含在这个仓库中,点击“显示提示”或“显示答案”并不会受到任何惩罚,当您认为某个练习已完成时,也可以将其标记为已完成。
💬 语言与翻译
| 语言 | 文本示例1 | 来源 | 作者 |
|---|---|---|---|
| 英语 | 英语 | chapters/en, exercises/en |
@ines |
| 德语 | 德语 | chapters/de, exercises/de |
@ines, @Jette16 |
| 西班牙语 | 西班牙语 | chapters/es, exercises/es |
@mariacamilagl, @damian-romero |
| 法语 | 法语 | chapters/fr, exercises/fr |
@datakime |
| 日语 | 日语 | chapters/ja, exercises/ja |
@tamuhey, @hiroshi-matsuda-rit, @icoxfog417, @akirakubo, @forest1988, @ao9mame, @matsurih, @HiromuHota, @mei28, @polm |
| 中文 | 中文 | chapters/zh, exercises/zh |
@crownpku |
| 葡萄牙语 | 英语 | chapters/pt, exercises/pt |
@Cristianasp |
如果您发现任何错误,欢迎随时提交 pull requests!
1. 这是指练习中使用的文本示例和资源所采用的语言。例如,德语版课程也会使用德语文本示例和模型。由于并非所有代码示例都能翻译,因此部分翻译版本在课程中仍会使用并分析英语文本。
相关资源
- 📚 更喜欢笔记本? 请查看由 @cristianasp 整理的 Jupyter 笔记本版本 的本课程。
💁 常见问题解答
这是否与 DataCamp 上的 spaCy 课程相关?
我最初是为 DataCamp 开发这些内容的,但我想制作一个免费版本,以便让更多人使用,这样大家就不必注册他们的服务了。作为一个周末项目,我最终搭建了一个自己的小应用,以有趣且互动的方式呈现练习和内容。
我可以用这个来构建自己的课程吗?
大概可以!如果你一直在寻找一种自助式的方式来发布你的学习材料,我希望我的这个小框架能对你有所帮助。由于很多人对此表现出兴趣,我整理了一些入门仓库,你可以直接 fork 并进行调整:
- 🐍 Python:
ines/course-starter-python - 🇷 R:
ines/course-starter-r
为什么有不同的许可证?
用于构建交互式课程的应用程序源代码、UI 组件以及 Gatsby 框架采用 MIT 许可证,这与我几乎所有开源软件的许可证一致。而课程本身的材料(幻灯片和章节)则采用 CC BY-NC 许可证。这意味着你可以自由使用这些材料,但不能从中获利。
我想帮助将这门课程翻译成我的语言。我该如何贡献?
首先,非常感谢你!这对社区来说真的太棒了,也非常有价值 🙌 我尽量让课程结构便于添加多种语言:特定语言的文件分别放在 exercises 和 chapters 目录中,其他语言相关的文本则存储在 locale.json 文件中。如果你想参与贡献,有两种方式:
发起一个社区翻译项目。这是最简单、没有任何附加条件的方式。你可以 fork 这个仓库,复制粘贴英文版本,更改 语言代码,开始翻译,并邀请其他人一起参与(如果你愿意的话)。如果你正在寻找合作者,欢迎在这里开一个 issue,或者在 Twitter 上标记 @spacy_io,我们会帮忙宣传。我们也很乐意在 issue tracker 中回答你的问题。
向我们提出报价。我们愿意委托不同语言的翻译工作,所以如果你感兴趣,请发送邮件至 contact@explosion.ai,并附上你的报价、预计时间安排,以及关于你个人背景的一些信息(如果有过往的技术写作或翻译经验也请一并提供)。无论你身处何地,只要你能够以自由职业者或其他类似身份开具发票即可。
我想帮助为现有翻译版本制作音频/视频教程。我该如何参与?
再次感谢你,这真是太酷了!虽然 英语 和 德语 视频都包含了画面录制,但这并不是必需的,我们也很乐意只提供音频轨道配合幻灯片使用。后期处理和视频剪辑由我们负责,因此你只需要提供音频录音即可。如果你觉得自己能够用母语朗读幻灯片上的文字说明,请发送邮件至 contact@explosion.ai,并向我们提出报价,同时附上一些关于你个人及以往类似工作的信息(如果有的话)。
🎛 使用与 API
运行应用
要启动本地开发服务器,你需要先安装 Gatsby,然后再安装所有其他依赖项,最后运行 npm run dev 即可启动开发服务器。请确保你已安装 Node 10.15 或更高版本。
npm install -g gatsby-cli # 全局安装 Gatsby
npm install # 安装依赖项
npm run dev # 启动开发服务器
如果你使用 Docker 运行,只需执行 make build,然后运行 make gatsby-dev 即可。
工作原理
在构建站点时,Gatsby 会查找 .py 文件,并将其内容通过 GraphQL 提供给查询。这样我们就可以在应用中直接使用原始代码。在底层,该应用使用 Binder 来提供一个包含包依赖项(包括 spaCy 模型)的镜像。通过调用 JupyterLab,我们可以使用当前内核执行代码。这使得用户可以在浏览器中编辑代码并实时查看结果。有关实现的更多细节,请参阅我的 juniper 仓库。
为了在用户点击“提交”时验证代码,我目前采用了一个略显 hack 的技巧。由于 Python 代码以字符串形式发送回内核,我们可以对其进行操作并添加测试——例如,练习 exc_01_02_01.py 将使用 test_01_02_01.py 进行验证(如果存在)。用户代码和测试将通过字符串模板合并在一起。目前,meta.json 中的 testTemplate 如下所示:
from wasabi import msg
__msg__ = msg
__solution__ = """${solution}"""
${solution}
${test}
try:
test()
except AssertionError as e:
__msg__.fail(e)
如果存在 ${solution},它将被替换为用户提交代码的字符串值。在这种情况下,我们将它插入两次:一次作为字符串,以便检查提交是否包含任何内容;另一次作为代码,以便实际运行并检查其创建的对象。${test} 则会被测试文件的内容替换。我还把 wasabi 的打印工具作为 __msg__ 提供,这样我们就可以在测试中轻松地输出美观的消息。最后,try/except 块会检查测试函数是否抛出 AssertionError,如果是,则显示错误信息。这样做还可以隐藏完整的错误堆栈跟踪(这可能会轻易泄露正确答案)。
一个测试文件可能如下所示:
def test():
assert "spacy.load" in __solution__, "你是否调用了 spacy.load?"
assert nlp.meta["lang"] == "en", "你是否加载了正确的模型?"
assert nlp.meta["name"] == "core_web_sm", "你是否加载了正确的模型?"
assert "nlp(text)" in __solution__, "你是否正确地处理了文本?"
assert "print(doc.text)" in __solution__, "你是否打印了 Doc 的文本?"
__msg__.good(
"做得好!现在你已经练习了加载模型,接下来让我们看看它们的一些预测吧。"
)
采用这种方法,并不能总是完美地验证输入——因为选项太多,而且我们希望避免误报。
运行自动化测试
自动化测试确保提供的解决方案代码与用于验证提交的测试文件兼容。测试套件由 pytest 框架驱动,在测试会话开始前,会在 __tests__ 目录中自动生成可运行的测试文件。有关实现细节,请参阅 conftest.py。
# 安装依赖
pip install -r binder/requirements.txt
# 运行测试(会自动生成文件)
python -m pytest __tests__
如果使用 Docker 运行,只需执行 make build,然后运行 make pytest 即可。
目录结构
├── binder
| └── requirements.txt # Binder 所需的 Python 依赖项
├── chapters # 按语言分组的章节
| ├── en # 英文章节,每种语言一个 Markdown 文件
| | └── slides # 英文幻灯片,每场演示一个 Markdown 文件
| └── ... # 其他语言
├── exercises # 练习的代码文件、测试和资源
| ├── en # 英文练习、解答、测试和数据
| └── ... # 其他语言
├── public # 编译后的站点
├── src # Gatsby/React 源代码,与内容无关
├── static # 静态资源,如图片,可在幻灯片和章节中使用
├── locale.json # 元数据和 UI 文本的翻译
├── meta.json # 课程元数据
└── theme.sass # UI 主题颜色和设置
设置 Binder
仓库中的 requirements.txt 定义了使用 Binder 构建时要安装的包。对于本课程,我将源仓库用作 Binder 仓库,这样可以将所有内容集中在一个地方。这也使得练习能够引用和加载其他文件(例如 JSON),这些文件会被复制到 Python 环境中。不过,我是在 binder 分支上构建 Binder 的,只有当与 Binder 相关的文件发生变化时才会更新该分支。否则,每次对 master 分支的更新都会触发镜像的重新构建。
您可以在 meta.json 的 "juniper" 部分指定 Binder 的设置,如仓库、分支和内核类型。我建议首次构建时通过 Binder 官网 上的界面进行操作,这样可以获得详细的构建日志以及关于一切是否按预期工作的反馈。输入您的仓库 URL,点击“启动”,然后等待依赖项安装完毕并完成镜像构建。

文件格式
章节
章节位于 /chapters 目录中,是包含 <exercise> 组件的 Markdown 文件。它们将被转换为页面,例如 /chapter1。在文件顶部的 frontmatter 区域,需要指定 type: chapter 以及以下元数据:
---
title: 章节标题
description: 章节描述
prev: /chapter1 # 上一章的精确路径,或 null 表示不显示链接
next: /chapter3 # 下一章的精确路径,或 null 表示不显示链接
id: 2 # 章节的唯一标识符
type: chapter # 重要:这会将章节转化为独立页面
---
幻灯片
幻灯片位于 /slides 目录中,是包含幻灯片内容的 Markdown 文件,各张幻灯片之间用 --- 分隔。文件顶部需要指定以下 frontmatter 区域:
---
type: slides
---
第一张和最后一张幻灯片 使用特殊的布局,将在幻灯片中央显示标题。演讲者备注(即讲稿)可以添加在幻灯片末尾,前面加上 Notes: 标记。这些备注将显示在幻灯片右侧。以下是一个幻灯片文件的示例:
---
type: slide
---
# 处理流水线
Notes: 这是一份关于处理流水线的幻灯片。
---
# 下一张幻灯片
- 这里有一些要点
- 还有另一个要点
<img src="/image.jpg" alt="位于 /static 的一张图片" />
自定义元素
使用自定义元素时,请确保在开始标签/结束标签与子元素之间留出空行。否则,Markdown 内容可能无法正确渲染。
<exercise>
单个练习的容器。
| 参数 | 类型 | 描述 |
|---|---|---|
id |
数字 / 字符串 | 章节内唯一的练习 ID。 |
title |
字符串 | 练习标题。 |
type |
字符串 | 可选类型。设置为 "slides" 会使容器更宽,并添加图标。 |
| children | - | 练习的内容。 |
<exercise id="1" title="spaCy 简介">
内容写在这里...
</exercise>
<codeblock>
| 参数 | 类型 | 描述 |
|---|---|---|
id |
数字 / 字符串 | 代码练习的唯一标识符。 |
source |
字符串 | 源文件名(不含文件扩展名)。若未设置,则默认为 exc_${id}。 |
solution |
字符串 | 解答文件名(不含文件扩展名)。若未设置,则默认为 solution_${id}。 |
test |
字符串 | 测试文件名(不含文件扩展名)。若未设置,则默认为 test_${id}。 |
| children | 字符串 | 用户点击“显示提示”时显示的可选提示。 |
<codeblock id="02_03">
这是一个提示!
</codeblock>
<slides>
使用 Reveal.js 和 Markdown 文件交互式展示幻灯片的容器。
| 参数 | 类型 | 描述 |
|---|---|---|
source |
字符串 | 幻灯片文件名(不含文件扩展名)。 |
<slides source="chapter1_01_introduction-to-spacy">
</slides>
<choice>
选择题的容器。
| 参数 | 类型 | 描述 |
|---|---|---|
id |
字符串 / 数字 | 可选的唯一 ID。如果一个练习中包含多个选择题,可以使用此 ID。 |
| children | 节点 | 仅包含用于选项的 <opt> 组件。 |
<choice>
<opt text="选项一">您选择了选项一!这不太好。</opt>
<opt text="选项二" correct="true">太好了!</opt>
</choice>
<opt>
一个多项选择题的选项。
| 参数 | 类型 | 描述 |
|---|---|---|
text |
字符串 | 要显示的选项文本。支持内联 HTML。 |
correct |
字符串 | 如果该选项是正确答案,则设置为 "true"。 |
| children | 字符串 | 如果该选项被选中,要显示的文本(解释其正确或错误的原因)。 |
常见问题
相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
gemini-cli
gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。
markitdown
MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器