הצג באתר TensorFlow.org | הפעל בגוגל קולאב | הצג ב-GitHub | הורד מחברת | ראה דגם TF Hub |
Colab זה demostrates המודל האוניברסלי משפט Encoder CMLM באמצעות SentEval Toolkit, שהינה ספרייה למדידת איכות שיבוצי משפט. ערכת הכלים SentEval כוללת קבוצה מגוונת של משימות במורד הזרם המסוגלות להעריך את כוח ההכללה של מודל הטמעה ולהעריך את המאפיינים הלשוניים המקודדים.
הפעל את שני בלוקי הקוד הראשונים כדי להגדיר את הסביבה, בבלוק הקוד השלישי אתה יכול לבחור משימת SentEval כדי להעריך את המודל. זמן ריצה של GPU מומלץ להפעלת Colab זה.
כדי ללמוד עוד על המודל יוניברסל משפט Encoder CMLM, לראות https://openreview.net/forum?id=WDVD4lUCTzU
התקנת תלות
pip install --quiet tensorflow-text
pip install --quiet torch==1.8.1
הורד את SentEval ואת נתוני המשימות
שלב זה הורד את SentEval מ-github והפעל את סקריפט הנתונים כדי להוריד את נתוני המשימה. ההשלמה עשויה להימשך עד 5 דקות.
התקן את SentEval והורד נתוני משימות
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.
בצע משימת הערכה של SentEval
בלוק הקוד הבא מבצע משימת SentEval ומוציא את התוצאות, בחר אחת מהמשימות הבאות כדי להעריך את מודל USE CMLM:
MR CR SUBJ MPQA SST TREC MRPC SICK-E
בחר דגם, פרמטרים ומשימה להפעלה. ניתן להשתמש בפרמטרים של יצירת אב טיפוס מהיר להפחתת זמן החישוב לתוצאה מהירה יותר.
זה בדרך כלל לוקח 5-15 דקות כדי להשלים משימה עם "אבי טיפוס ודגמים" פרמטרים ועד שעה עם פרמטרים "לאט, הביצועים הטובים ביותר".
params = {'task_path': PATH_TO_DATA, 'usepytorch': True, 'kfold': 5}
params['classifier'] = {'nhid': 0, 'optim': 'rmsprop', 'batch_size': 128,
'tenacity': 3, 'epoch_size': 2}
לקבלת תוצאה טובה יותר, להשתמש איטי "לאט, הביצועים הטובים ביותר" פרמטרים, חישוב עשוי להימשך עד 1 שעה:
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}
למד עוד
- מצא עוד דגמי הטבעת טקסט TensorFlow Hub
- ראה גם המודל הרב יוניברסל משפט Encoder CMLM
- עזיבה אחרים מודלים Encoder משפט יוניברסל
התייחסות
- Ziyi Yang, Yinfei Yang, Daniel Cer, Jax Law, Eric Darve. ייצוגי משפטים אוניברסליים למידה עם מודל שפה מסכה מותנית. נובמבר 2020