T5X adalah implementasi T5 (dan lebih banyak lagi) yang baru dan lebih baik dalam Jax dan Flax. T5 pada TensorFlow dengan meshTf tidak lagi dikembangkan secara aktif. Jika Anda baru mengenal T5, kami sarankan mulai dengan T5X.
Perpustakaan t5
berfungsi terutama sebagai kode untuk mereproduksi eksperimen dalam mengeksplorasi batas-batas pembelajaran transfer dengan transformator teks-ke-teks terpadu . Dalam makalah ini, kami mendemonstrasikan cara mencapai hasil canggih pada beberapa tugas NLP menggunakan transformator teks-ke-teks yang telah dilatih sebelumnya pada corpus teks besar.
Sebagian besar kode dalam repositori ini digunakan untuk memuat, preprocessing, pencampuran, dan mengevaluasi set data. Ini juga menyediakan cara untuk menyempurnakan model pra-terlatih yang dirilis bersama publikasi.
Perpustakaan t5
dapat digunakan untuk pengembangan model di masa depan dengan menyediakan modul yang berguna untuk pelatihan dan model penyempurnaan (berpotensi besar ) pada campuran tugas teks-ke-teks.
t5.data
adalah paket untuk mendefinisikan objek Task
yang menyediakan tf.data.Dataset
s.
Setiap Task
terdiri dari:
Selain itu, Anda dapat memberikan secara opsional:
Sumber data dapat berupa fungsi sewenang -wenang yang menyediakan tf.data.Dataset
, tetapi kami juga menyediakan pembungkus yang lebih sederhana untuk set data yang tersedia dalam TensorFlow Datasets (TFD) ( TfdsTask
) atau disimpan sebagai file teks dengan satu contoh per baris ( TextLineTask
) .
Preprocessor teks mengubah contoh dalam dataset sumber menjadi format yang sesuai untuk model teks-ke-teks dengan bidang untuk inputs
dan targets
. Misalnya, t5.data.preprocessors.translate
preprocessor mengkonversi input dalam bentuk
{ 'de' : 'Das ist gut.' , 'en' : 'That is good.' }
ke formulir
{ 'inputs' : 'translate German to English: Das ist gut.' , 'targets' : 'That is good.' }
Selain preprocessing teks, Anda juga dapat menggunakan satu atau lebih preprosesor token untuk memodifikasi input pasca-tokenisasi. Kami menerapkan tujuan pra-pelatihan kami yang tidak diawasi menggunakan preprosesor token ini.
Kami menyediakan banyak preprosesor yang telah ditentukan sebelumnya di t5.data.preprocessors
, tetapi Anda juga dapat mendefinisikan milik Anda.
Model kalimat digunakan untuk tokenize string input dan mendekode token output. Anda dapat membuat model Anda sendiri dengan perpustakaan Google/kalimat, atau menggunakan satu default kami di t5.data.DEFAULT_SPM_PATH
. Jika Anda membuat sendiri, Anda harus menggunakan bendera --pad_id=0 --eos_id=1 --unk_id=2 --bos_id=-1
dengan spm_train
untuk kompatibel dengan kode model kami.
Fungsi metrik mengembalikan skor yang diberikan target dan prediksi dari model. Anda juga dapat mendefinisikan fungsi postprocess untuk mengonversi teks target dan prediksi ke format lain sebelum memanggil metrik. Kami menyediakan beberapa metrik yang telah ditentukan dalam t5.evaluation.metrics
.
Akhirnya, t5.data
berisi kelas Mixture
yang dapat dipakai untuk menggabungkan beberapa dataset Task
untuk pelatihan multi-tugas menggunakan berbagai fungsi untuk menentukan laju campuran.
t5.evaluation
berisi dua komponen inti:
t5.models
berisi shims untuk menghubungkan Tasks
dan Mixtures
T5 ke implementasi model untuk pelatihan, evaluasi, dan inferensi.
Saat ini ada dua shim yang tersedia: satu untuk transformator tensorflow mesh yang kami gunakan di koran kami dan satu lagi untuk perpustakaan memeluk Face Transformers. API Wajah Memeluk saat ini eksperimental dan dapat berubah, tetapi memberikan cara sederhana dan mudah untuk memuat, menyempurnakan, dan mengevaluasi model pra-terlatih kami menggunakan Pytorch pada satu GPU. Jika Anda ingin menggunakan model terbesar kami pada TPU dan/atau mereproduksi hasilnya dalam makalah kami, Anda harus menggunakan API MTFModel dan biner t5_mesh_transformer
. Jika Anda tertarik untuk menyempurnakan model kami di GPU di Pytorch, Anda harus mencoba HFPyTorchmodel API. Karena hfpytorchmodel bersifat eksperimental, sisa readme ini mengasumsikan penggunaan MTFModel dan biner yang terkait. Contoh penggunaan hfpytorchmodel tersedia di sini.
Cara termudah untuk mencoba T5 adalah dengan TPU gratis di tutorial Colab kami.
Di bawah ini kami memberikan contoh tentang cara melakukan pra-pelatihan, menyempurnakan, mengevaluasi, dan mendekode dari model dari baris perintah dengan basis kode kami. Anda dapat menggunakan instruksi ini untuk mereproduksi hasil kami, menyempurnakan salah satu pos pemeriksaan kami yang dirilis dengan data Anda sendiri dan/atau hiperparameter, atau pra-pelatihan model dari awal.
Anda dapat menggunakan Task
baru atau yang sudah ada sebelumnya, atau Anda dapat memuat contoh dari file TSV yang diproses sebelumnya.
Task
Bergantung pada sumber data Anda (lihat di atas), Anda harus menyiapkan data Anda dengan tepat.
Task
Jika menggunakan tugas vanilla, cukup pastikan file apa pun yang dimuat oleh dataset_fn
Anda dapat diakses oleh TPU (yaitu, ada dalam ember GCS), dan Anda harus baik untuk pergi!
TfdsTask
Sebagian besar Task
yang telah ditentukan sebelumnya menggunakan Dataset TensorFlow (TFD) sebagai sumber data mereka. Saat Anda menjalankan biner pelatihan kami (lihat instruksi di bawah) dengan TfdsTask
, dataset akan secara otomatis diunduh dan disiapkan pada penggunaan pertama. Setelah persiapan selesai, dataset di -cache ke penyimpanan lokal Anda untuk menghindari overhead ini di masa depan. Jika bekerja di cloud, kami sarankan Anda mengatur bendera --t5_tfds_data_dir
untuk menunjuk ke lokasi penyimpanan yang persisten, seperti ember GCS. Ini adalah persyaratan saat pelatihan tentang TPU.
Dataset C4 yang kami buat untuk pra-pelatihan tanpa pengawasan tersedia dalam set data tensorflow, tetapi membutuhkan sejumlah besar bandwidth untuk mengunduh goresan crawl umum mentah (~ 7 TB) dan menghitung untuk persiapannya (~ 335 hari CPU). Kami menyarankan Anda memanfaatkan dukungan balok Apache di TFD, yang memungkinkan pemrosesan dataset yang didistribusikan dan dapat dijalankan di Google Cloud Dataflow. Dengan 500 pekerja, pekerjaan harus selesai dalam ~ 16 jam.
Setelah mendefinisikan MY_PROJECT
dan MY_BUCKET
dengan tepat, Anda dapat membangun dataset di dataflow dari GCP menggunakan perintah berikut:
pip install 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:// $MY_BUCKET /temp,runner=DataflowRunner,requirements_file=/tmp/beam_requirements.txt,experiments=shuffle_mode=service,region= $MY_REGION "
Baca lebih lanjut dalam instruksi balok TFDS.
TextLineTask
TextLineTask
berguna ketika sumber data Anda adalah file teks (atau file) dengan satu contoh per baris. Anda kemudian dapat menggunakan preprocessor teks untuk mengubah setiap baris menjadi kamus input dan target.
Pastikan file Anda dapat diakses oleh TPU (yaitu, ada dalam ember GCS), dan Anda harus baik untuk pergi!
Alih -alih mendefinisikan Task
baru, Anda dapat menggunakan file TSV (atau file) secara langsung sebagai dataset Anda di mana setiap baris diformat sebagai <input>t<target>
.
Namun, ada beberapa peringatan:
Jika Anda memerlukan salah satu fitur ini, Anda harus menentukan Task
baru, TfdsTask
, atau TextLineTask
.
Mirip dengan kasus di atas, file TSV Anda harus dapat diakses oleh TPU (yaitu, ada dalam ember GCS).
Untuk menginstal paket T5, cukup jalankan:
pip install t5[gcp]
Pertama -tama Anda perlu meluncurkan mesin virtual (VM) di Google Cloud. Detail tentang peluncuran VM dapat ditemukan di dokumentasi Google Cloud.
Untuk menjalankan pelatihan atau evaluasi pada TPU cloud, Anda harus mengatur variabel berikut berdasarkan proyek Anda, zona dan ember GCS dengan tepat. Silakan merujuk ke panduan Cloud TPU QuickStart untuk detail lebih lanjut.
export PROJECT=your_project_name
export ZONE=your_project_zone
export BUCKET=gs://yourbucket/
export TPU_NAME=t5-tpu
export TPU_SIZE=v3-8
export DATA_DIR= " ${BUCKET} /your_data_dir "
export MODEL_DIR= " ${BUCKET} /your_model_dir "
Silakan gunakan perintah berikut untuk membuat perangkat TPU di Cloud VM.
ctpu up --name= $TPU_NAME --project= $PROJECT --zone= $ZONE --tpu-size= $TPU_SIZE
--tpu-only --noconf
Dalam perintah di bawah ini, kami melatih model pada tolok ukur lem MRPC tugas dari awal. Anda dapat mengubah parameter gin MIXTURE_NAME
untuk menggunakan salah satu tugas atau campuran yang disediakan dalam paket kami.
t5_mesh_transformer
--tpu= " ${TPU_NAME} "
--gcp_project= " ${PROJECT} "
--tpu_zone= " ${ZONE} "
--model_dir= " ${MODEL_DIR} "
--t5_tfds_data_dir= " ${DATA_DIR} "
--gin_file= " dataset.gin "
--gin_file= " models/bi_v1.gin "
--gin_param= " utils.tpu_mesh_shape.model_parallelism = 1 "
--gin_param= " utils.tpu_mesh_shape.tpu_topology = ' ${TPU_SIZE} ' "
--gin_param= " MIXTURE_NAME = 'glue_mrpc_v002' "
Daftar lengkap tugas dan campuran dapat diperoleh dengan menjalankan:
python -c " import t5; print(t5.data.MixtureRegistry.names()) "
Anda juga dapat mendefinisikan tugas dan campuran tambahan dalam file baru dan mengimpornya menggunakan bendera --module_import
.
Atau, Anda dapat berlatih dengan file TSV di mana setiap baris diformat sebagai <input>t<target>
(lihat di atas).
Untuk menyempurnakan salah satu model pra-terlatih kami, Anda perlu melewati konfigurasi operasi model yang sudah terlatih ke skrip pelatihan. Konfigurasi Operatif harus dilewati sebagai bendera gin_file
. Ini menentukan arsitektur model dan hiperparameter lainnya. Selain itu, Anda perlu menentukan campuran untuk menyempurnakan. Misalnya, untuk menyempurnakan model T5-Small pada campuran glue_mrpc_v002
, silakan jalankan:
t5_mesh_transformer
--tpu= " ${TPU_NAME} "
--gcp_project= " ${PROJECT} "
--tpu_zone= " ${ZONE} "
--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= " MIXTURE_NAME = 'glue_mrpc_v002' "
--gin_file= " gs://t5-data/pretrained_models/small/operative_config.gin "
Jalur pos pemeriksaan pra-terlatih yang benar termasuk dalam konfigurasi operasi.
Anda juga dapat mendefinisikan tugas dan campuran tambahan dalam file baru dan mengimpornya menggunakan bendera --module_import
.
Atau, Anda dapat menyempurnakan dengan file TSV di mana setiap baris diformat sebagai <input>t<target>
(lihat di atas). Misalnya, Anda dapat mencoba salah satu set pelatihan terjemahan berpasangan dari WMT '19 News Commentary 14 set pelatihan (misalnya, bahasa Inggris-Prancis). Saat menggunakan file TSV, Anda akan mengganti bendera MIXTURE_NAME
dengan:
--gin_param= " utils.run.train_dataset_fn = @t5.models.mesh_transformer.tsv_dataset_fn "
--gin_param= " tsv_dataset_fn.filename = 'gs:/path/to/tsv' "
Untuk menyempurnakan dengan hiperparameter yang sama yang kami gunakan di koran (menggunakan tingkat pembelajaran konstan 0,001), Anda dapat lulus dalam file gin ini yang termasuk dalam paket T5:
--gin_file="learning_rate_schedules/constant_0_001.gin"
Konfigurasi operatif untuk model pra-terlatih diatur sehingga secara efektif tidak ada batasan pada jumlah langkah kereta. Jika Anda ingin melatih untuk sejumlah langkah tertentu, Anda harus meneruskannya. Karena model yang sudah terlatih telah dilatih untuk 1.000.000 langkah, Anda harus menentukan jumlah total langkah setelah pra-pelatihan dan fine-tuning. Misalnya, jika Anda ingin menyempurnakan 10.000 langkah tambahan, Anda harus lulus
--gin_param="run.train_steps = 1010000"
Anda juga dapat menggunakan ukuran batch yang berbeda untuk fine-tuning. Kami mengatur ukuran batch sesuai dengan jumlah total token dalam satu batch. Secara default, batch menggunakan panjang urutan 512. Untuk mengatur jumlah token dalam batch, Anda harus mengatur
--gin_param = "tokens_per_batch=1048576"
Untuk mengevaluasi model dalam kerangka T5, Anda perlu menggunakan file eval.gin
, tentukan direktori model, metode decoding, dan langkah pos pemeriksaan mana yang akan dievaluasi. Jadi, untuk mengevaluasi tugas MRPC lem menggunakan pencarian balok di semua pos pemeriksaan, gunakan perintah berikut:
t5_mesh_transformer
--tpu= " ${TPU_NAME} "
--gcp_project= " ${PROJECT} "
--tpu_zone= " ${ZONE} "
--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 = 'validation' "
--gin_param= " utils.tpu_mesh_shape.tpu_topology = ' ${TPU_SIZE} ' "
--gin_param= " MIXTURE_NAME = 'glue_mrpc_v002' "
--gin_param= " eval_checkpoint_step = 'all' "
Untuk mengevaluasi pos pemeriksaan tertentu, cukup atur parameter eval_checkpoint_step
ke pos pemeriksaan yang sesuai.
--gin_param="eval_checkpoint_step = 100000"
Anda juga dapat menggunakan greedy_decode.gin
atau sample_decode.gin
, bukan beam_search.gin
dalam perintah di atas.
Untuk menghasilkan prediksi dari model dalam kerangka T5, Anda perlu menentukan direktori model, metode decoding, dan langkah pos pemeriksaan mana yang akan digunakan untuk decoding. Dengan asumsi Anda memiliki file teks dari urutan input yang disimpan di /path/to/inputs.txt
, perintah contoh adalah:
t5_mesh_transformer
--tpu= " ${TPU_NAME} "
--gcp_project= " ${PROJECT} "
--tpu_zone= " ${ZONE} "
--model_dir= " ${MODEL_DIR} "
--gin_file= " ${MODEL_DIR} /operative_config.gin "
--gin_file= " infer.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= " infer_checkpoint_step = 'all' "
Untuk memprediksi dengan pos pemeriksaan tertentu, cukup atur parameter infer_checkpoint_step
ke pos pemeriksaan yang sesuai.
--gin_param="infer_checkpoint_step = 100000"
Anda juga dapat menggunakan beam_search.gin
atau greedy_decode.gin
bukan sample_decode.gin
dalam perintah di atas.
Anda mungkin juga ingin mengekspor SavedModel
, yang berguna untuk melayani model terlatih Anda, (misalnya, ketika digunakan dengan mesin ML atau dalam gambar Docker).
t5_mesh_transformer
--gcp_project= " ${PROJECT} "
--tpu_zone= " ${ZONE} "
--model_dir= " ${MODEL_DIR} "
--use_model_api
--mode= " export_predict "
--export_dir= " /path/to/export/dir "
Perintah di atas mengekspor pos pemeriksaan terbaru di direktori model. Untuk mengekspor pos pemeriksaan tertentu, tambahkan bendera berikut:
--checkpoint_mode= " specific "
--checkpoint_steps=1000000
Notebook T5-Deploy menunjukkan mengekspor SavedModel
dan mengemasnya dalam gambar Docker untuk disajikan.
Jika Anda ingin menggunakan GPU alih-alih TPU, Anda dapat memodifikasi perintah di atas dengan menghapus bendera khusus TPU ( --tpu
, --tpu_zone
, --gcp_project
) dan mengatur param gin untuk mesh_shape
dan mesh_devices
berdasarkan pengaturan yang Anda inginkan .
Misalnya, jika mesin Anda memiliki akses ke 6 GPU dan Anda ingin melakukan paralelisme model 3 arah dan paralelisme data 2 arah, perintah penyempurnaan di atas adalah:
t5_mesh_transformer
--model_dir= " ${MODEL_DIR} "
--t5_tfds_data_dir= " ${DATA_DIR} "
--gin_file= " dataset.gin "
--gin_param= " utils.run.mesh_shape = 'model:3,batch:2' "
--gin_param= " utils.run.mesh_devices = ['gpu:0','gpu:1','gpu:2','gpu:3','gpu:4','gpu:5'] "
--gin_param= " MIXTURE_NAME = 'glue_mrpc_v002' "
--gin_file= " gs://t5-data/pretrained_models/small/operative_config.gin "
Dengan satu GPU, perintahnya adalah:
t5_mesh_transformer
--model_dir= " ${MODEL_DIR} "
--t5_tfds_data_dir= " ${DATA_DIR} "
--gin_file= " dataset.gin "
--gin_param= " utils.run.mesh_shape = 'model:1,batch:1' "
--gin_param= " utils.run.mesh_devices = ['gpu:0'] "
--gin_param= " MIXTURE_NAME = 'glue_mrpc_v002' "
--gin_file= " gs://t5-data/pretrained_models/small/operative_config.gin "
Kami menyediakan konfigurasi operatif untuk semua percobaan di koran di GS: // T5-Data/Eksperimen. Folder experiments
memiliki subdirektori yang berbeda yang sesuai dengan bagian yang berbeda dalam makalah kami. Misalnya, GS: // T5-Data/Eksperimen/Tujuan berisi percobaan dari Bagian 3.3 ("Tujuan yang tidak diawasi"). Setiap subdirektori dari folder objectives
berisi konfigurasi operatif untuk beberapa percobaan tertentu (di mana secara longgar berbicara "percobaan" adalah salah satu baris di salah satu tabel dalam makalah kami).
Katakanlah Anda ingin mereproduksi hasil untuk tujuan "pemodelan bahasa awalan" (baris pertama pada Tabel 4). Konfigurasi operasi untuk eksperimen itu secara langsung di GS: // T5-Data/Eksperimen/Tujuan/OBJ-Prefix_LM. Di direktori dasar, ada konfigurasi operasi untuk pra-pelatihan model (GS: //T5-Data/experiments/Objectives/obj-prefix_lm/operative_config.gin). Kemudian, ada subdirektori untuk masing-masing campuran penyempurnaan hilir yang kami pertimbangkan, masing-masing memiliki konfigurasi operatif sendiri (misalnya, gs: //t5-data/experiments/objectives/obj-prefix_lm/cnn_dailymail_v002/operative_config.gin ). Untuk menjalankan percobaan ini, model pra-pelatihan pertama dengan konfigurasi operasi pra-pelatihan:
export PRETRAIN_MODEL_DIR= " ${BUCKET} /obj-prefix_lm "
t5_mesh_transformer
--tpu= " ${TPU_NAME} "
--gcp_project= " ${PROJECT} "
--tpu_zone= " ${ZONE} "
--model_dir= " ${PRETRAIN_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} ' "
Kemudian, Anda dapat menyempurnakan model pra-terlatih di CNN/Daily Mail seperti:
export FINETUNE_MODEL_DIR= " ${BUCKET} /obj-prefix_lm/cnn_dailymail_v002 "
t5_mesh_transformer
--tpu= " ${TPU_NAME} "
--gcp_project= " ${PROJECT} "
--tpu_zone= " ${ZONE} "
--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 = ' ${PRETRAIN_MODEL_DIR} /model.ckpt-524288' "
--gin_param= " utils.tpu_mesh_shape.model_parallelism = 1 "
--gin_param= " utils.tpu_mesh_shape.tpu_topology = ' ${TPU_SIZE} ' "
Beberapa varian pelatihan perlu banyak bendera untuk diatur pada saat yang sama. Untuk masing -masing varian di bawah ini, tambahkan kelompok flag ke ./third_party/py/t5/google/scripts/run_finetune.sh
.
Pelatihan deterministik
--train_gin_param= " mesh_train_dataset_fn.seed= ${SEED} "
--train_gin_param= " utils.run.skip_seen_data = True "
Model Bahasa
--objective= " lm "
--train_gin_param= " utils.run.model_type = " lm " "
Kami telah merilis pos pemeriksaan berikut untuk model pra-terlatih yang dijelaskan dalam makalah kami:
Lihat di sini untuk daftar pos pemeriksaan model pra-terlatih eksperimental tambahan.
Jika Anda memperluas atau menggunakan pekerjaan ini, silakan kutip kertas di mana ia diperkenalkan:
@article { 2020t5 ,
author = { Colin Raffel and Noam Shazeer and Adam Roberts and Katherine Lee and Sharan Narang and Michael Matena and Yanqi Zhou and Wei Li and Peter J. Liu } ,
title = { Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer } ,
journal = { Journal of Machine Learning Research } ,
year = { 2020 } ,
volume = { 21 } ,
number = { 140 } ,
pages = { 1-67 } ,
url = { http://jmlr.org/papers/v21/20-074.html }
}