文獻見證了將深度遷移學習 (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