T5X是JAX和亞麻中T5(以及更多)的新的和改進的實施。 T5在帶有MESHTF的Tensorflow上不再積極開發。如果您是T5的新手,我們建議您從T5X開始。
t5
庫主要用作用統一的文本到文本變壓器探索傳輸學習限制的實驗的代碼。在本文中,我們演示瞭如何使用在大型文本語料庫中預先訓練的文本到文本變壓器在多個NLP任務上實現最新的結果。
此存儲庫中的大部分代碼用於加載,預處理,混合和評估數據集。它還提供了一種與出版物一起釋放的預培訓模型的方法。
t5
庫可通過為文本到文本任務的混合物提供培訓和微調(潛在的巨大)模型來用於未來的模型開發。
圖書館
用法
C4
數據集準備
安裝
在GCP上設置TPU
訓練
微調
評估
解碼
出口
GPU的使用
再現我們的實驗
有用的選項
已發布模型檢查點
如何引用
t5.data
是用於定義提供tf.data.Dataset
s的Task
對象的軟件包。
每個Task
都是由:
數據源
文本預處理器函數
句子模型
公制函數
此外,您可以選擇提供:
令牌預處理器函數
後進程功能
數據源可以是提供tf.data.Dataset
的任意函數,但是我們還為TensorFlow數據集(TFDS)( TfdsTask
)中可用的數據集提供了更簡單的包裝器(TFDSTASK),也可以將其存儲為文本文件,每行示例( TextLineTask
)一個示例。
文本預處理器將源數據集中的示例轉換為具有inputs
和targets
字段的文本到文本模型的適當格式。 例如,預定義的t5.data.preprocessors.translate
預處理器轉換為形式的輸入
{'de':'das ist腸道。
到表格
{'inputs':'將德語翻譯成英文:das ist腸道。','targets':'那很好。'}
除了文本預處理外,您還可以使用一個或多個令牌預處理器來修改tokenization的輸入。我們使用這些令牌預處理器實施了無監督的預訓練目標。
我們在t5.data.preprocessors
中提供許多預定義的預處理器,但您也可以定義自己的。
句子模型用於代幣化輸入字符串並解碼輸出令牌。您可以使用Google/句子庫創建自己的模型,或在t5.data.DEFAULT_SPM_PATH
上使用我們的默認模型。如果創建自己的,則必須使用標誌--pad_id=0 --eos_id=1 --unk_id=2 --bos_id=-1
with spm_train
與我們的模型代碼兼容。
度量函數返回給定目標和預測的分數。您還可以定義一個後進程功能,以在調用指標之前將目標和預測文本轉換為另一種格式。我們在t5.evaluation.metrics
中提供一些預定義的指標。
最後, t5.data
包含一個Mixture
類別,可以實例化,以使用各種功能來指定混合速率來組合多個Task
數據集,以用於多任務訓練。
t5.evaluation
包含兩個核心組成部分:
評估期間要使用的指標
在評估時應用這些指標的實用程序
t5.models
包含用於將T5 Tasks
和Mixtures
連接到用於培訓,評估和推理的模型實現的墊片。
目前有兩個可用的墊片:一個用於網格張量型變壓器,我們在紙上使用,另一個用於擁抱面孔變壓器庫。擁抱面API目前是實驗性的,並且可能會發生變化,但提供了一種簡單簡便的方法,可以使用Pytorch在單個GPU上使用Pytorch進行加載,微調和評估我們的預訓練模型。如果您想在TPU上使用我們最大的模型和/或在我們的論文中重現結果,則應使用MTFModel API和t5_mesh_transformer
BINARY。如果您有興趣在Pytorch的GPU上微調我們的模型,則應嘗試使用HFPYTORCHMODEL API。由於HFPYTORCHMODEL是實驗性的,因此該讀數的其餘部分假設MTFMODEL及其相關的二進制。 HFPYTORCHMODEL的用法示例可在此處提供。
嘗試T5的最簡單方法是在我們的COLAB教程中使用免費的TPU。
在下面,我們提供瞭如何通過我們的代碼庫從命令行中的模型進行預訓練,微調,評估和解碼的示例。您可以使用這些說明來重現我們的結果,並使用您自己的數據和/或超級參數來微調我們已發布的檢查點之一,或者從頭開始預先培訓模型。
您可以使用新任務或預先存在的Task
,也可以從預處理的TSV文件中加載示例。
Task
根據您的數據源(見上文),您需要適當準備數據。
Task
如果使用Vanilla任務,只需確保TPU可以訪問dataset_fn
的任何文件(即,在GCS存儲桶中)即可,您應該很好!
TfdsTask
我們的大多數預定義Task
s使用TensorFlow數據集(TFD)作為其數據源。當您使用TfdsTask
運行我們的培訓二進製文件(請參見下面的說明)時,數據集將自動下載並在首次使用時準備。準備完成後,將數據集緩存到您的本地存儲空間,以避免將來運行中的開銷。 如果在雲中工作,我們建議您設置--t5_tfds_data_dir
標誌以指向持久的存儲位置,例如GCS存儲桶。在TPU培訓時,這是一項要求。
我們為無監督的預訓練創建的C4數據集提供了Tensorflow數據集中的可用,但是它需要大量的帶寬來下載原始的常見爬網刮擦(〜7 TB)併計算其準備工作(〜335 CPU日)。我們建議您利用TFD中的Apache Beam支持,該支持可以對數據集進行分佈式預處理,並且可以在Google Cloud DataFlow上運行。有500名工人,這項工作應在約16小時內完成。
在適當地定義MY_PROJECT
和MY_BUCKET
之後,您可以使用以下命令從GCP中構建數據集中的數據集:
PIP安裝tfds-nightly [C4] echo'tfds-nightly [c4]'> /tmp/beam_requirements.txt python -m tensorflow_datasets.scripts.download_and_prepare -datasets = C4/en -data_dir = gs:// $ my_bucket/tensorflow_datasets -beam_pipeline_options =“ project = $ my_project,job_name = c4,staging_location = gs:// $ my_bucket/binaries,temp_location = gs://qymy_bucket/temmy_bucket/temp,,temp carrunner = dataflowrunner = dataflowrunner,requirimements_filetement_filetem_filecter.exexexext.exexeckexect. exexexbert.exexeckexent.Exext = shuffle_mode =服務,區域= $ my_region”
在TFDS梁說明中閱讀更多內容。
TextLineTask
當您的數據源是每行示例一個示例的文本文件(或文件)時, TextLineTask
很有用。然後,您可以使用文本預處理器將每行轉換為輸入和目標的字典。
確保您的文件可用於TPU(即,在GCS存儲桶中),您應該很好!
您可以將TSV文件(或文件)直接用作數據集,而不是定義新Task
,其中每行的格式為<input>t<target>
。
但是,有幾個警告:
無法定義文本處理器,因此TSV需要以預處理格式包含您的數據。
當前,當直接使用TSV文件時,當前也無法設置令牌預處理器,後處理功能或度量功能以進行評估。
如果需要這些功能,則必須定義一個新Task
, TfdsTask
或TextLineTask
。
與上述情況類似,必須訪問TPU的TSV文件(即,在GCS存儲桶中)。
要安裝T5軟件包,只需運行:
PIP安裝T5 [GCP]
您首先需要在Google Cloud上啟動虛擬機(VM)。有關啟動VM的詳細信息可以在Google Cloud文檔上找到。
為了在Cloud TPU上進行培訓或評估,您必鬚根據項目,區域和GCS存儲桶進行適當設置以下變量。有關更多詳細信息,請參閱Cloud TPU Quickstart指南。
導出項目= your_project_nameexport Zone = your_project_zoneexport buck = gs:// yourbucket/yourbucket/export tpu_name = t5-tpuexport tpu_size = v3-8export data_dir = v3-8export data_dir =“ $ {bucket}
請使用以下命令在雲VM中創建TPU設備。
ctpu up -name = $ tpu_name -project = $ project -zone = $ ZONE -tpu-size = $ tpu_size - 僅限tpu- noconf
在下面的命令中,我們從頭開始訓練一個模型MRPC任務。您可以更改MIXTURE_NAME
Gin參數以使用包裝中提供的任何任務或混合物。
t5_mesh_transformer -tpu =“ $ {tpu_name}” -gcp_project =“ $ {project}” -tpu_zone =“ $ {ZOIRS}” -model_dir =“ $ {model_dir}” -t5_tfds_data_dir =“ $ {data_dir}” -gin_file =“ dataset.gin” -gin_file =“型號/bi_v1.gin” -gin_param =“ utils.tpu_mesh_shape.model_parallelism = 1” -gin_param =“ utils.tpu_mesh_shape.tpu_topology ='$ {tpu_size}'” -gin_param =“ computer_name ='glue_mrpc_v002'”
可以通過運行來獲得任務和混合物的完整列表:
python -c“導入T5; print(t5.data.mixtureregistry.names())”
您還可以在新文件中定義其他任務和混合物,並使用--module_import
標誌導入它。
另外,您可以使用TSV文件訓練每行的格式為<input>t<target>
(請參見上文)。
為了微調我們的預訓練模型之一,您需要將預訓練模型的手術配置傳遞給培訓腳本。操作配置應作為gin_file
標誌傳遞。它指定了模型體系結構和其他超參數。此外,您需要指定混合物以進行微調。例如,要微調glue_mrpc_v002
混合物上的T5-Small模型,請運行:
t5_mesh_transformer -tpu =“ $ {tpu_name}” -gcp_project =“ $ {project}” -tpu_zone =“ $ {ZOIRS}” -model_dir =“ $ {model_dir}” -t5_tfds_data_dir =“ $ {data_dir}” -gin_file =“ dataset.gin” -gin_param =“ utils.tpu_mesh_shape.model_parallelism = 1” -gin_param =“ utils.tpu_mesh_shape.tpu_topology ='$ {tpu_size}'” -gin_param =“ computer_name ='glue_mrpc_v002'” -gin_file =“ gs://t5-data/pretraining_models/small/operative_config.gin”
正確訓練的檢查點路徑包含在手術配置中。
您還可以在新文件中定義其他任務和混合物,並使用--module_import
標誌導入它。
另外,您可以使用TSV文件進行微調,其中每行的格式為<input>t<target>
(請參見上文)。例如,您可以嘗試WMT '19新聞評論14培訓集(例如英語 - 法國)中的配對翻譯數據集之一。使用TSV文件時,您將用以下方式替換MIXTURE_NAME
標誌
-gin_param =“ utils.run.train_dataset_fn = @t5.models.mesh_transformer.tsv_dataset_fn” - gin_param =“ tsv_dataset_fn.fn.fln.filename ='
要用我們在論文中使用的相同的超參數(使用0.001的恆定學習率)進行微調,您可以將其傳遞到T5軟件包中包含的此杜松子酒文件中:
--gin_file="learning_rate_schedules/constant_0_001.gin"
設置了預訓練模型的操作配置,以便實際上沒有限制火車步驟的數量。如果您想培訓特定數量的步驟,則需要將其通過。由於預訓練的模型已經接受了1,000,000個步驟的培訓,您應該指定預訓練後的總步驟數量微調。例如,如果您想額外調整10,000步,則應通過
--gin_param="run.train_steps = 1010000"
您也可以使用不同的批次大小進行微調。我們根據批處理中的令牌總數設置批量大小。默認情況下,批次使用512的序列長度。要在批處理中設置令牌數,您應該設置
--gin_param = "tokens_per_batch=1048576"
為了評估T5框架中的模型,您需要使用eval.gin
文件,指定模型目錄,解碼方法以及要評估的檢查點步驟。因此,要使用所有檢查點上的Beam搜索評估MRPC任務,請使用以下命令:
t5_mesh_transformer -tpu =“ $ {tpu_name}” -gcp_project =“ $ {project}” -tpu_zone =“ $ {ZOIRS}” -model_dir =“ $ {model_dir}” -gin_file =“ $ {model_dir}/operative_config.gin” -t5_tfds_data_dir = $ {data_dir} -gin_file =“ eval.gin” -gin_file =“ beam_search.gin” -gin_param =“ run.dataset_split ='驗證'” -gin_param =“ utils.tpu_mesh_shape.tpu_topology ='$ {tpu_size}'” -gin_param =“ computer_name ='glue_mrpc_v002'” -gin_param =“ eval_checkpoint_step ='all'”
要評估特定的檢查點,只需將eval_checkpoint_step
參數設置為適當的檢查點即可。
--gin_param="eval_checkpoint_step = 100000"
您也可以在上面的命令中使用greedy_decode.gin
或sample_decode.gin
而不是beam_search.gin
。
為了從T5框架中的模型中產生預測,您需要指定模型目錄,解碼方法以及用於解碼的檢查點步驟。假設您有一個存儲在/path/to/inputs.txt
上的輸入序列的文本文件,則示例命令是:
t5_mesh_transformer -tpu =“ $ {tpu_name}” -gcp_project =“ $ {project}” -tpu_zone =“ $ {ZOIRS}” -model_dir =“ $ {model_dir}” -gin_file =“ $ {model_dir}/operative_config.gin” -gin_file =“ peash.gin” -gin_file =“ sample_decode.gin” -gin_param =“ input_filename ='/path/to/inputs.txt'” -gin_param =“ output_filename ='/tmp/outputs.txt'” -gin_param =“ utils.tpu_mesh_shape.tpu_topology ='$ {tpu_size}'” -gin_param =“ peash_checkpoint_step ='all'”
要使用特定的檢查點進行預測,只需將infer_checkpoint_step
參數設置為適當的檢查點即可。
--gin_param="infer_checkpoint_step = 100000"
您還可以在上面的命令中使用beam_search.gin
或greedy_decode.gin
而不是sample_decode.gin
。
您可能還需要導出一個SavedModel
,這對於服務訓練的模型很有用(例如,使用ML Engine或Docker Image部署時)。
t5_mesh_transformer -gcp_project =“ $ {project}” -tpu_zone =“ $ {ZOIRS}” -model_dir =“ $ {model_dir}” -use_model_api -mode =“ export_predict” -export_dir =“/path/to/export/dir”
上面的命令在模型目錄中導出最新檢查點。要導出特定檢查點,請添加以下標誌:
-checkpoint_mode =“特定” - checkpoint_steps = 1000000
T5 Deploy筆記本演示了導出SavedModel
並將其包裝在Docker圖像中以進行服務。
如果您想使用GPU代替TPU,則可以通過刪除TPU特定的標誌( --tpu
, --tpu_zone
, --gcp_project
)來修改上述命令,並根據您所需的設置設置mesh_shape
和mesh_devices
的GIN參數。
例如,如果您的計算機可以訪問6個GPU,並且您想進行3向模型並行性和2向數據並行性,則上面的微調命令將成為:
t5_mesh_transformer -model_dir =“ $ {model_dir}” -t5_tfds_data_dir =“ $ {data_dir}” -gin_file =“ dataset.gin” -gin_param =“ utils.run.mesh_shape ='型號:3,批次:2'” -gin_param =“ utils.run.mesh_devices = ['gpu:0','gpu:1','gpu:2','gpu:3','gpu:4',gpu:5']” -gin_param =“ computer_name ='glue_mrpc_v002'” -gin_file =“ gs://t5-data/pretraining_models/small/operative_config.gin”
使用一個GPU,該命令是:
t5_mesh_transformer -model_dir =“ $ {model_dir}” -t5_tfds_data_dir =“ $ {data_dir}” -gin_file =“ dataset.gin” -gin_param =“ utils.run.mesh_shape ='型號:1,批次:1'” -gin_param =“ utils.run.mesh_devices = ['gpu:0']” -gin_param =“ computer_name ='glue_mrpc_v002'” -gin_file =“ gs://t5-data/pretraining_models/small/operative_config.gin”
我們為gs:// t5-data/實驗的論文中的所有實驗提供手術配置。 experiments
文件夾具有與論文不同部分相對應的不同子目錄。例如,gs:// t5-data/實驗/目標包含第3.3節(“無監督目標”)的實驗。 objectives
文件夾的每個子目錄都包含某些特定實驗的可操作配置(在我們論文中,一個表中的一排是一個行)。
假設您要重現“前綴語言建模”目標的結果(表4中的第一行)。該實驗的手術配置生存在GS:// T5-DATA/實驗/目標/OBJ-PREFIX_LM中。在基本目錄中,有一個用於預訓練模型的操作配置(gs://t5-data/experiments/objectives/obj-prefix_lm/operative_config.gin)。然後,我們考慮的每個下游微調混合物都有子目錄,每種混合物都有自己的操作配置(例如,gs://t5-data/experiments/objectives/obj-prefix/obj-prefix_lm/cnn_dailymail_v002/operative_config .gin )。要運行此實驗,請首先使用預訓練的手術配置進行培訓:
導出pritrain_model_dir =“ $ {bucket}/obj-prefix_lm” t5_mesh_transformer -tpu =“ $ {tpu_name}” -gcp_project =“ $ {project}” -tpu_zone =“ $ {ZOIRS}” -model_dir =“ $ {PROTRAIN_MODEL_DIR}” -gin_file =“ gs://t5-data/experiments/objectives/obj-prefix_lm/operative_config.gin” -gin_param =“ utils.tpu_mesh_shape.model_parallelism = 1” -gin_param =“ utils.tpu_mesh_shape.tpu_topology ='$ {tpu_size}'”
然後,您可以在CNN/Daily Mail上微調預訓練的模型:
export finetune_model_dir =“ $ {桶}/obj-prefix_lm/cnn_dailymail_v002” t5_mesh_transformer -tpu =“ $ {tpu_name}” -gcp_project =“ $ {project}” -tpu_zone =“ $ {ZOIRS}” -model_dir =“ $ {finetune_model_dir}” -gin_file =“ gs://t5-data/experiments/objectives/obj-prefix_lm/cnn_dailymail_v002/operative_config.gin” -gin_param =“ init_checkpoint ='$ {priprain_model_dir} /model.ckpt-524288'” -gin_param =“ utils.tpu_mesh_shape.model_parallelism = 1” -gin_param =“ utils.tpu_mesh_shape.tpu_topology ='$ {tpu_size}'”
一些培訓變體需要同時設置多個標誌。對於以下每個變體,將一組標誌添加到./third_party/py/t5/google/scripts/run_finetune.sh
。
確定性培訓
-train_gin_param =“ mesh_train_dataset_fn.seed = $ {seed}” -train_gin_param =“ utils.run.skip_seen_data = true”
語言模型
-Objective =“ LM” -train_gin_param =“ utils.run.model_type =” lm“”
我們已經發布了以下有關論文中描述的預訓練模型的檢查點:
T5-SMALL (6000萬參數):gs:// t5-data/pretraining_models/small
T5基本(2.2億參數):GS:// T5-DATA/PRETRAIND_MODELS/BASE
T5-LARGE (7.7億個參數):GS:// T5-DATA/PRETRAINDE_MODEL/大型
T5-3B (30億個參數):gs:// t5-data/pretraining_models/3b
T5-11b (110億個參數):gs:// t5-data/pretraining_models/11b
有關其他實驗預訓練的模型檢查點的列表,請參見此處。
如果您擴展或使用這項工作,請引用引入的紙張:
@Article {2020T5,作者= {Colin Raffel和Noam Shazeer,Adam Roberts,Adam Roberts以及Katherine Lee,Sharan Narang以及Michael Matena和Yanqi Zhou和Wei Li和Peter J. Li and Peter J. Liu}文本到文本變壓器} ,日記= {機器學習研究期刊,年= {2020},音量= {21},number = {140},pages = {1-67},url = {http:/ /jmlr.org/papers/v21/ 20-074.html}}}}}}