为灵活的研究和开发而设计的nlp库
transfer-nlp的Python项目详细描述
欢迎来到Transfer NLP库,这是一个建立在Pythorch之上的框架,其目标是逐步实现两种传输:
- 代码的轻松传输:框架应该足够模块化,这样您就不必每次尝试新的体系结构/新的任务时都重新编写所有内容
- 轻松转移学习:该框架应该能够轻松地与预先训练的模型交互并操纵它们,以便微调它们的某些部分。
您可以在这本colab笔记本上对高级api进行概述,它展示了如何在几个示例中使用框架。 这些笔记本上的所有例子都嵌入了Cell Tensorboard Training Monitoring!
作为预先训练的模型微调的一个例子,我们提供了一个关于BertClassifier微调的简短可执行教程,关于这个colab笔记本
设置您的环境
mkvirtualenv transfernlp
workon transfernlp
git clone https://github.com/feedly/transfer-nlp.git
cd transfer-nlp
pip install -r requirements.txt
- 创建虚拟环境:
mkvirtualenv yourenvname
(使用mkvirtualenv或您选择的虚拟环境管理器) - 克隆存储库:
git clone https://github.com/feedly/transfer nlp.git
- 安装要求:
pip install-r requirements.txt
该库位于pypi上,但不建议使用pip install transfer nlp
。
文档
API文档和库的概述可以在这里找到
库的高级别使用
您可以查看colab笔记本了解库的使用情况。
库的核心由一个实验构建器组成:定义实验所需的不同对象,配置加载程序以一种良好的方式构建它们:
from transfer_nlp.plugins.config import ExperimentConfig
# Launch an experiment
config_file = {...} # Dictionary config file, or str/Path to a json config file
experiment = ExperimentConfig(experiment=config_file)
# Interaact with the experiment's objects, e.g. launch a training job of a `trainer` object
experiment['trainer'].train()
# Another use of experiment object: use the `predictor` object for inference
input_json = {"inputs": [Some Examples]}
output_json = experiment['predictor'].json_to_json(input_json=input_json)
如何在图书馆进行实验?
对于可重复的研究和简单的消融研究,库强制使用实验配置文件。
在transfer nlp中,实验配置文件包含定义整个实验所需的所有信息。
在这里,您将插入实验将使用的不同组件的名称。
transfer nlp使用了控制模式的反转,它允许您定义任何类型的类,并且expericsconfig.from_json
方法将创建一个措辞并相应地设置您的对象。
要在transfer nlp中使用您自己的类,您需要使用@register\u插件
装饰器注册它们。这里不为每种组件(模型、数据加载器、矢量器、优化器等)使用不同的注册表,而只使用一个注册表,以便强制进行完全自定义。
目前,配置文件逻辑有三种组件:
- 简单参数:这些是预先知道值的参数:
{"initial_learning_rate": 0.01,
"embedding_dim": 100,...}
- 简单列表:类似于简单参数,但作为列表:
{"layers_dropout": [0.1, 0.2, 0.3], ...}
- 复杂配置:这是库实例化对象的地方:每个对象都需要指定它的
\u name
名称(通过它注册的类的名称@register_plugin
decorator)及其定义的参数。如果类具有默认参数,而配置文件不包含这些参数,则对象将被实例化为默认值。否则,参数必须出现在配置文件中。有时,在启动实验之前,初始化参数不可用。例如,假设您的模型对象需要一个词汇表大小作为init输入。这里的配置文件逻辑使处理这个问题变得容易,同时保持库代码的通用性。
您可以查看配置加载器可以生成的实验设置示例。
此外,我们还提供了可运行的实验,在实验/
使用管道
配置文件的目标是加载不同的对象并从中运行实验。
一个很常见的使用对象是Trainer,您将在实验期间运行它。我们在transfer-nlp.plugins.trainers.py
中提供一个基本控制器。
这个基础培训师将以一个模型和一些数据作为输入,并运行一个完整的培训管道。我们利用pytorch ignite库来监控培训过程中的事件(记录一些指标、控制学习率、检查点模型等)。tensorboard日志也是一个选项,您必须在配置文件中指定一个
tensorboard_logs
simple parameters路径。然后在终端上运行tensorboard--logdir=path/to/logs
,你就可以在训练时监视你的实验了!
tensorboard附带了非常好的实用程序,可以跟踪模型权重、直方图、分布、可视化嵌入等的规范,因此我们建议您使用它。
松弛积分
在试验自己的模型/数据时,培训可能需要一些时间。要在培训结束或崩溃时获得通知,您可以使用huggingface上的人使用的简单库knockknockknockknockknockknockknockknockrel="nofollow",该库向您的运行函数添加了一个简单的装饰器,以通过slack、电子邮件等方式通知您。
要达到的一些目标:
- 包括使用最先进的预培训模型的示例
- 包括模型的语言属性
- 对连续任务使用rl进行实验
- 包括探测任务,尝试理解模型学习到的属性
确认
该图书馆的灵感来源于Delip Rao和Brian McMahan阅读的"自然语言处理与pytorch"。
在实验中的实验,词汇构建块和最近的嵌入是从书中提供的代码中获取或改编的。