Lihat di TensorFlow.org | Jalankan di Google Colab | Lihat di GitHub | Unduh buku catatan | Lihat model TF Hub |
Colab ini demostrates yang Universal Kalimat Model Encoder CMLM menggunakan SentEval toolkit, yang merupakan perpustakaan untuk mengukur kualitas embeddings kalimat. Toolkit SentEval mencakup serangkaian tugas hilir yang beragam yang mampu mengevaluasi kekuatan generalisasi dari model embedding dan untuk mengevaluasi properti linguistik yang dikodekan.
Jalankan dua blok kode pertama untuk mengatur lingkungan, di blok kode ketiga Anda dapat memilih tugas SentEval untuk mengevaluasi model. Waktu proses GPU direkomendasikan untuk menjalankan Colab ini.
Untuk mempelajari lebih lanjut tentang Universal Kalimat Model Encoder CMLM, lihat https://openreview.net/forum?id=WDVD4lUCTzU
Instal dependensi
pip install --quiet tensorflow-text
pip install --quiet torch==1.8.1
Unduh SentEval dan data tugas
Langkah ini unduh SentEval dari github dan jalankan skrip data untuk mengunduh data tugas. Mungkin perlu waktu hingga 5 menit untuk menyelesaikannya.
Instal SentEval dan unduh data tugas
rm -rf ./SentEval
git clone https://github.com/facebookresearch/SentEval.git
cd $PWD/SentEval/data/downstream && bash get_transfer_data.bash > /dev/null 2>&1
Cloning into 'SentEval'... remote: Enumerating objects: 691, done.[K remote: Counting objects: 100% (2/2), done.[K remote: Compressing objects: 100% (2/2), done.[K remote: Total 691 (delta 0), reused 0 (delta 0), pack-reused 689[K Receiving objects: 100% (691/691), 33.25 MiB | 21.21 MiB/s, done. Resolving deltas: 100% (434/434), done.
Jalankan tugas evaluasi SentEval
Blok kode berikut menjalankan tugas SentEval dan menampilkan hasilnya, pilih salah satu tugas berikut untuk mengevaluasi model USE CMLM:
MR CR SUBJ MPQA SST TREC MRPC SICK-E
Pilih model, params, dan tugas untuk dijalankan. Params prototyping cepat dapat digunakan untuk mengurangi waktu komputasi untuk hasil yang lebih cepat.
Ini biasanya memakan waktu 5-15 menit untuk menyelesaikan tugas dengan 'cepat prototyping' params dan hingga satu jam dengan 'lebih lambat, kinerja terbaik' params.
params = {'task_path': PATH_TO_DATA, 'usepytorch': True, 'kfold': 5}
params['classifier'] = {'nhid': 0, 'optim': 'rmsprop', 'batch_size': 128,
'tenacity': 3, 'epoch_size': 2}
Untuk hasil yang lebih baik, gunakan lebih lambat 'lebih lambat, kinerja terbaik' params, perhitungan bisa memakan waktu hingga 1 jam:
params = {'task_path': PATH_TO_DATA, 'usepytorch': True, 'kfold': 10}
params['classifier'] = {'nhid': 0, 'optim': 'adam', 'batch_size': 16,
'tenacity': 5, 'epoch_size': 6}
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'
import sys
sys.path.append(f'{os.getcwd()}/SentEval')
import tensorflow as tf
# Prevent TF from claiming all GPU memory so there is some left for pytorch.
gpus = tf.config.list_physical_devices('GPU')
if gpus:
# Memory growth needs to be the same across GPUs.
for gpu in gpus:
tf.config.experimental.set_memory_growth(gpu, True)
import tensorflow_hub as hub
import tensorflow_text
import senteval
import time
PATH_TO_DATA = f'{os.getcwd()}/SentEval/data'
MODEL = 'https://tfhub.dev/google/universal-sentence-encoder-cmlm/en-base/1'
PARAMS = 'rapid prototyping'
TASK = 'CR'
params_prototyping = {'task_path': PATH_TO_DATA, 'usepytorch': True, 'kfold': 5}
params_prototyping['classifier'] = {'nhid': 0, 'optim': 'rmsprop', 'batch_size': 128,
'tenacity': 3, 'epoch_size': 2}
params_best = {'task_path': PATH_TO_DATA, 'usepytorch': True, 'kfold': 10}
params_best['classifier'] = {'nhid': 0, 'optim': 'adam', 'batch_size': 16,
'tenacity': 5, 'epoch_size': 6}
params = params_best if PARAMS == 'slower, best performance' else params_prototyping
preprocessor = hub.KerasLayer(
"https://tfhub.dev/tensorflow/bert_en_uncased_preprocess/3")
encoder = hub.KerasLayer(
"https://tfhub.dev/google/universal-sentence-encoder-cmlm/en-base/1")
inputs = tf.keras.Input(shape=tf.shape(''), dtype=tf.string)
outputs = encoder(preprocessor(inputs))
model = tf.keras.Model(inputs=inputs, outputs=outputs)
def prepare(params, samples):
return
def batcher(_, batch):
batch = [' '.join(sent) if sent else '.' for sent in batch]
return model.predict(tf.constant(batch))["default"]
se = senteval.engine.SE(params, batcher, prepare)
print("Evaluating task %s with %s parameters" % (TASK, PARAMS))
start = time.time()
results = se.eval(TASK)
end = time.time()
print('Time took on task %s : %.1f. seconds' % (TASK, end - start))
print(results)
Evaluating task CR with rapid prototyping parameters Time took on task CR : 46.5. seconds {'devacc': 90.42, 'acc': 88.98, 'ndev': 3775, 'ntest': 3775}
Belajarlah lagi
- Cari model yang lebih embedding teks pada TensorFlow Hub
- Lihat juga multibahasa Universal Kalimat Model Encoder CMLM
- Periksa lain model Kalimat Encoder Universal
Referensi
- Ziyi Yang, Yinfei Yang, Daniel Cer, Jax Law, Eric Darve. Pembelajaran Representasi Kalimat Universal dengan Model Conditional Masked Language. November 2020