نسخه ی نمایشی رمزگذاری جملات جهانی SentEval

مشاهده در TensorFlow.org در Google Colab اجرا شود در GitHub مشاهده کنید دانلود دفترچه یادداشت مدل TF Hub را ببینید

این COLAB demostrates حکم جهانی مدل رمزگذار CMLM با استفاده از SentEval ابزار است، که یک کتابخانه برای اندازه گیری کیفیت تعبیه شده جمله. جعبه ابزار SentEval شامل مجموعه متنوعی از وظایف پایین دستی است که قادر به ارزیابی قدرت تعمیم یک مدل جاسازی و ارزیابی ویژگی های زبانی کدگذاری شده است.

دو بلوک کد اول را برای تنظیم محیط اجرا کنید، در بلوک کد سوم می توانید یک وظیفه SentEval را برای ارزیابی مدل انتخاب کنید. برای اجرای این Colab یک زمان اجرا GPU توصیه می شود.

برای کسب اطلاعات بیشتر در مورد حکم جهانی مدل رمزگذار CMLM، و https://openreview.net/forum؟id=WDVD4lUCTzU

وابستگی ها را نصب کنید

SentEval و داده های وظیفه را دانلود کنید

این مرحله SentEval را از github دانلود کرده و اسکریپت داده را برای دانلود داده های وظیفه اجرا کنید. ممکن است تا 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}

بیشتر بدانید

ارجاع