Universal Sentence Encoder التجريبي

عرض على TensorFlow.org تشغيل في Google Colab عرض على جيثب تحميل دفتر انظر نموذج TF Hub

هذا colab demostrates و العالمي الجملة نموذج التشفير CMLM باستخدام SentEval الأدوات، التي هي مكتبة لقياس جودة التضمينات الجملة. تتضمن مجموعة أدوات SentEval مجموعة متنوعة من المهام النهائية التي تكون قادرة على تقييم قوة التعميم لنموذج التضمين وتقييم الخصائص اللغوية المشفرة.

قم بتشغيل أول كتلتين من التعليمات البرمجية لإعداد البيئة ، في مقطع التعليمات البرمجية الثالث يمكنك اختيار مهمة SentEval لتقييم النموذج. يوصى بوقت تشغيل GPU لتشغيل Colab.

لمعرفة المزيد عن العالمي الجملة نموذج التشفير CMLM، انظر https://openreview.net/forum؟id=WDVD4lUCTzU

تثبيت التبعيات

تنزيل SentEval وبيانات المهام

هذه الخطوة قم بتنزيل SentEval من جيثب وقم بتنفيذ البرنامج النصي للبيانات لتنزيل بيانات المهمة. قد يستغرق الأمر ما يصل إلى 5 دقائق حتى يكتمل.

قم بتثبيت SentEval وتنزيل بيانات المهمة

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}

يتعلم أكثر

المرجعي