雲計算

EasyTransfer幫助用戶輕鬆地將深度 TL 用於 NLP 應用程序

image.png

文獻見證了將深度遷移學習 (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訓練提供易於使用和高性能的分佈式策略。

架構

image.png

安裝

您可以從 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.tsvdev.tsvtest.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 使用的更多信息,請參閱我們的文檔

教程

線索基準

image.png

您可以在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

Leave a Reply

Your email address will not be published. Required fields are marked *