Thinc: 一种清新的函数式深度学习方法,与您喜爱的库兼容
来自spaCy 和 Prodigy 的创造者
Thinc 是一个轻量级的深度学习库,提供优雅的、类型检查的函数式编程 API 用于组合模型, 支持在其他框架(如 PyTorch、TensorFlow 和 MXNet)中定义的层。您可以将 Thinc 用作接口层、独立工具包或灵活的方式来开发新模型。以前版本的 Thinc 已通过 spaCy 和 Prodigy 静悄悄地在成千上万的公司中运行。我们编写了新版 Thinc,允许用户使用他们最喜欢的框架来组合、配置和部署定制模型。
🔥 特色
- 使用自定义类型和
mypy
插件类型检查您的模型定义。 - 包装 PyTorch、TensorFlow 和 MXNet 模型以在您的网络中使用。
- 使用合成而非继承的简洁函数式编程方法定义模型。
- 通过 操作符重载实现可选的自定义中缀表示法。
- 集成的配置系统描述对象树和超参数。
- 可选择的可扩展后端。
- 阅读更多 →
🚀 快速入门
Thinc 兼容 Python 3.6+,并可在 Linux、macOS 和 Windows 上运行。最新的二进制轮子可从
pip 获取。在安装 Thinc 及其依赖项之前,请确保您的 pip
、setuptools
和 wheel
是最新的。建议使用 pip 19.3 或更高版本来获取最新发布版本。
pip install -U pip setuptools wheel
pip install thinc
有关不同后端和 GPU 的可选依赖项的详细信息,请参阅扩展安装文档。您可能还希望 设置静态类型检查以利用 Thinc 的类型系统。
⚠️ 如果您已经安装了 PyTorch 且使用的是 Python 3.7+,请使用
pip uninstall dataclasses
卸载包dataclasses
,因为它可能由 PyTorch 安装且与 Python 3.7+ 不兼容。
📓 选定的示例和笔记本
另请参阅 /examples
目录和
使用文档获取更多示例。大多数示例是 Jupyter 笔记本 — 要在
Google Colab(支持 GPU!)上启动它们,请点击笔记本名称旁边的按钮。
笔记本 | 描述 |
---|---|
intro_to_thinc | 入门所需的一切。使用配置文件、注册自定义函数和包装 PyTorch、TensorFlow 和 MXNet 模型,组合并训练模型 MNIST 数据。 |
transformers_tagger_bert | 如何使用 Thinc、transformers 和 PyTorch 训练一个词性标注器。从模型定义和配置到训练循环。 |
pos_tagger_basic_cnn | 实现和训练一个基本的 CNN 用于词性标注模型,无需外部依赖,使用 Thinc 的不同级别配置系统。 |
parallel_training_ray | 如何使用 Thinc 和 Ray 设置同步和异步参数服务器训练。 |
📖 文档及使用指南
文档 | 描述 |
---|---|
介绍 | 所需了解的一切。 |
概念与设计 | Thinc 的概念模型及其工作原理。 |
定义和使用模型 | 如何组合模型并更新状态。 |
配置系统 | Thinc 的配置系统和函数注册表。 |
整合 PyTorch、TensorFlow 和 MXNet | 与机器学习框架的互操作性。 |
层 API | 权重层、变换、组合器和包装器。 |
类型检查 | 类型检查您的模型定义等。 |
🗺 目录
模块 | 描述 |
---|---|
thinc.api | 面向用户的 API。 所有类和函数都应该从这里导入。 |
thinc.types | 自定义 类型和数据类。 |
thinc.model | Model 类。所有 Thinc 模型都是 Model 的实例(而不是子类)。 |
thinc.layers | 层。每个层在其自己的模块中实现。 |
thinc.shims | 在 PyTorch、TensorFlow 等中实现外部模型的接口。 |
thinc.loss | 计算损失的函数。 |
thinc.optimizers | 创建优化器的函数。目前支持“普通”SGD、Adam 和 RAdam。 |
thinc.schedules | 生成不同速率、调度、衰减或序列的生成器。 |
thinc.backends | numpy 和 cupy 的后端。 |
thinc.config | 配置解析和验证以及函数注册系统。 |
thinc.util | 工具和辅助函数。 |
🐍 开发笔记
Thinc 使用black
进行自动格式化,
使用flake8
进行代码检测,
使用mypy
进行类型检查。所有代码都兼容 Python 3.6+,并尽可能使用类型提示。有关 Thinc 自定义类型的详细信息,请参阅类型参考。
👷♀️ 从源代码构建 Thinc
从源代码构建 Thinc 需要安装 requirements.txt
中列出的所有依赖项。您还需要一个编译器来构建 C 扩展。
git clone https://github.com/explosion/thinc
cd thinc
python -m venv .env
source .env/bin/activate
pip install -U pip setuptools wheel
pip install -r requirements.txt
pip install --no-build-isolation .
或者,以可编辑模式安装:
pip install -r requirements.txt
pip install --no-build-isolation --editable .
或者通过设置 PYTHONPATH
:
export PYTHONPATH=`pwd`
pip install -r requirements.txt
python setup.py build_ext --inplace
🚦 运行测试
Thinc 配有一个广泛的测试套件。以下命令应全部通过,并且不报告任何警告或错误:
python -m pytest thinc # 测试套件
python -m mypy thinc # 类型检查
python -m flake8 thinc # 代码检测
要查看测试覆盖率,可以运行 python -m pytest thinc --cov=thinc
。我们的目标是 100% 的测试覆盖率。这并不意味着我们会仔细测试每一行代码 —— 我们忽略不相关或难以测试的部分,并确保测试执行所有代码路径。