文献见证了将深度迁移学习 (TL) 成功应用于许多现实世界的 NLP 应用程序,但构建易于使用的 TL 工具包来实现这样的目标并不容易。为了弥补这一差距,EasyTransfer 旨在帮助用户轻松地将深度 TL 用于 NLP 应用程序。2017年初在阿里巴巴开发,目前已应用于阿里巴巴集团各大BU,在20+业务场景中取得了非常好的效果。支持主流的预训练ModelZoo,包括预训练语言模型(PLMs)和PAI上的多模态模型平台,集成了AppZoo中主流NLP应用的SOTA模型,支持PLM知识蒸馏。EasyTransfer 非常方便用户快速开始模型训练、评估、离线预测和在线部署。它还提供了丰富的 API,使 NLP 的开发和迁移学习变得更加容易。
主要特点
- 语言模型预训练工具:支持全面的预训练工具,供用户预训练T5、BERT等语言模型。基于该工具,用户可以轻松训练模型,在 CLUE、GLUE 和 SuperGLUE 等基准排行榜上取得优异成绩;
- ModelZoo 具有丰富优质的预训练模型:支持 BERT、ALBERT、RoBERTa、T5 等主流 LM 模型的 Continual Pre-training 和 Fine-tuning。还支持使用 FashionBERT 开发的多模态模型阿里巴巴时尚领域数据;
- AppZoo 应用丰富易用: 支持主流的NLP应用和阿里巴巴内部开发的模型,例如:文本匹配的HCNN,MRC的BERT-HAE。
- 自动知识蒸馏:支持任务自适应知识蒸馏,将知识从教师模型提取到特定任务的小型学生模型,以减少参数大小,同时保持可比较的性能。
- 易于使用和高性能的分布式策略:基于内部PAI特性,为多CPU/GPU训练提供易于使用和高性能的分布式策略。
架构
安装
您可以从 pip 安装
$ pip install easytransfer
或者从源码设置:
$ git clone https://github.com/alibaba/EasyTransfer.git $ cd EasyTransfer $ python setup.py install
此 repo 在 Python3.6/2.7、tensorflow 1.12.3 上测试
快速开始
现在让我们展示如何仅使用 30 行代码来构建基于 BERT 的文本分类模型。
from easytransfer import base_model, layers, model_zoo, preprocessors from easytransfer.datasets import CSVReader, CSVWriter from easytransfer.losses import softmax_cross_entropy from easytransfer.evaluators import classification_eval_metrics class TextClassification(base_model): def __init__(self, **kwargs): super(TextClassification, self).__init__(**kwargs) self.pretrained_model_name = "google-bert-base-en" self.num_labels = 2 def build_logits(self, features, mode=None): preprocessor = preprocessors.get_preprocessor(self.pretrained_model_name) model = model_zoo.get_pretrained_model(self.pretrained_model_name) dense = layers.Dense(self.num_labels) input_ids, input_mask, segment_ids, label_ids = preprocessor(features) _, pooled_output = model([input_ids, input_mask, segment_ids], mode=mode) return dense(pooled_output), label_ids def build_loss(self, logits, labels): return softmax_cross_entropy(labels, self.num_labels, logits) def build_eval_metrics(self, logits, labels): return classification_eval_metrics(logits, labels, self.num_labels) app = TextClassification() train_reader = CSVReader(input_glob=app.train_input_fp, is_training=True, batch_size=app.train_batch_size) eval_reader = CSVReader(input_glob=app.eval_input_fp, is_training=False, batch_size=app.eval_batch_size) app.run_train_and_evaluate(train_reader=train_reader, eval_reader=eval_reader)
您可以在我们的 Jupyter/Notebook PAI-DSW 中找到更多详细信息或使用代码。
您还可以使用 AppZoo 命令行工具快速训练 App 模型。以 SST-2 数据集上的文本分类为例。首先你可以下载train.tsv、dev.tsv和test.tsv,然后开始训练:
$ easy_transfer_app --mode train \ --inputTable=./train.tsv,./dev.tsv \ --inputSchema=content:str:1,label:str:1 \ --firstSequence=content \ --sequenceLength=128 \ --labelName=label \ --labelEnumerateValues=0,1 \ --checkpointDir=./sst2_models/\ --numEpochs=3 \ --batchSize=32 \ --optimizerType=adam \ --learningRate=2e-5 \ --modelName=text_classify_bert \ --advancedParameters='pretrain_model_name_or_path=google-bert-base-en'
然后预测:
$ easy_transfer_app --mode predict \ --inputTable=./test.tsv \ --outputTable=./test.pred.tsv \ --inputSchema=id:str:1,content:str:1 \ --firstSequence=content \ --appendCols=content \ --outputSchema=predictions,probabilities,logits \ --checkpointPath=./sst2_models/
要了解有关 AppZoo 使用的更多信息,请参阅我们的文档。
教程
- PAI-ModelZoo(20 多个预训练模型)
- FashionBERT 跨模态预训练模型
- 知识蒸馏,包括 vanilla KD、Probes KD、AdaBERT
- BERT 特征提取
- 文本匹配包括BERT、BERT Two Tower、DAM、HCNN
- 文本分类包括BERT、TextCNN
- 机器阅读理解包括BERT、BERT-HAE
- 包括BERT在内的序列标记
- 跨域文本分类的元微调
线索基准
您可以在https://www.yuque.com/easytransfer/cn/rkm4p7 中找到更多基准
这是 CLUE 快速入门笔记本
链接
教程:https://www.yuque.com/easytransfer/itfpm9/qtzvuc
ModelZoo:https://www.yuque.com/easytransfer/itfpm9/oszcof
AppZoo:https://www.yuque.com/easytransfer/itfpm9/ky6hky
API文档:http://atp-modelzoo-sh.oss-cn-shanghai.aliyuncs.com/eztransfer_docs/html/index.html