ユニバーサルセンテンスエンコーダ SentEval の実演

TensorFlow.org で表示 Google Colabで実行 GitHub でソースを表示 ノートブックをダウンロード TF Hub モデルを参照

この Colab は、文の埋め込みの品質を測定するためのライブラリである SentEval ツールキットを使用したユニバーサルセンテンスエンコーダ CMLM モデルを説明します。 SentEval ツールキットには、埋め込みモデルの一般化能力を評価し、エンコードされた言語プロパティを評価できる、さまざまな下流タスクのセットが含まれています。

最初の 2 つのコードブロックを実行して環境をセットアップします。3 番目のコードブロックでは、SentEval タスクを選択してモデルを評価できます。この Colab を実行するには、GPU ランタイムをお勧めします。

ユニバーサルセンテンスエンコーダ CMLM モデルの詳細については、https://openreview.net/forum?id=WDVD4lUCTzU を参照してください。

Install dependencies

SentEvalとタスクデータをダウンロードする

このステップでは、github から SentEval をダウンロードし、データスクリプトを実行してタスクデータをダウンロードします。完了するまでに最大 5 分かかる場合があります。

Install SentEval and download task data

Cloning into 'SentEval'...
remote: Enumerating objects: 691, done.
remote: Counting objects:  50% (1/2)
remote: Counting objects: 100% (2/2)
remote: Counting objects: 100% (2/2), done.
remote: Compressing objects:  50% (1/2)
remote: Compressing objects: 100% (2/2)
remote: Compressing objects: 100% (2/2), done.
Receiving objects:   0% (1/691)
Receiving objects:   1% (7/691)
Receiving objects:   2% (14/691)
Receiving objects:   3% (21/691)
Receiving objects:   4% (28/691)
Receiving objects:   5% (35/691)
Receiving objects:   6% (42/691)
Receiving objects:   7% (49/691)
Receiving objects:   8% (56/691)
Receiving objects:   9% (63/691)
Receiving objects:  10% (70/691)
Receiving objects:  11% (77/691)
Receiving objects:  12% (83/691)
Receiving objects:  13% (90/691)
Receiving objects:  14% (97/691)
Receiving objects:  15% (104/691)
Receiving objects:  16% (111/691)
Receiving objects:  17% (118/691)
Receiving objects:  18% (125/691)
Receiving objects:  19% (132/691)
Receiving objects:  20% (139/691)
Receiving objects:  21% (146/691)
Receiving objects:  22% (153/691)
Receiving objects:  23% (159/691)
Receiving objects:  24% (166/691), 11.57 MiB | 23.12 MiB/s
Receiving objects:  24% (168/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  25% (173/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  26% (180/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  27% (187/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  28% (194/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  29% (201/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  30% (208/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  31% (215/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  32% (222/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  33% (229/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  34% (235/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  35% (242/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  36% (249/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  37% (256/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  38% (263/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  39% (270/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  40% (277/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  41% (284/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  42% (291/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  43% (298/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  44% (305/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  45% (311/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  46% (318/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  47% (325/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  48% (332/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  49% (339/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  50% (346/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  51% (353/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  52% (360/691), 26.68 MiB | 26.67 MiB/s
remote: Total 691 (delta 0), reused 2 (delta 0), pack-reused 689
Receiving objects:  53% (367/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  54% (374/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  55% (381/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  56% (387/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  57% (394/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  58% (401/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  59% (408/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  60% (415/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  61% (422/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  62% (429/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  63% (436/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  64% (443/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  65% (450/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  66% (457/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  67% (463/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  68% (470/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  69% (477/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  70% (484/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  71% (491/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  72% (498/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  73% (505/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  74% (512/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  75% (519/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  76% (526/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  77% (533/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  78% (539/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  79% (546/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  80% (553/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  81% (560/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  82% (567/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  83% (574/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  84% (581/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  85% (588/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  86% (595/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  87% (602/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  88% (609/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  89% (615/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  90% (622/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  91% (629/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  92% (636/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  93% (643/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  94% (650/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  95% (657/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  96% (664/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  97% (671/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  98% (678/691), 26.68 MiB | 26.67 MiB/s
Receiving objects:  99% (685/691), 26.68 MiB | 26.67 MiB/s
Receiving objects: 100% (691/691), 26.68 MiB | 26.67 MiB/s
Receiving objects: 100% (691/691), 33.25 MiB | 27.39 MiB/s, done.
Resolving deltas:   0% (0/434)
Resolving deltas:   1% (6/434)
Resolving deltas:   2% (11/434)
Resolving deltas:   3% (17/434)
Resolving deltas:   7% (32/434)
Resolving deltas:   9% (40/434)
Resolving deltas:  11% (52/434)
Resolving deltas:  12% (55/434)
Resolving deltas:  15% (67/434)
Resolving deltas:  17% (77/434)
Resolving deltas:  18% (79/434)
Resolving deltas:  19% (85/434)
Resolving deltas:  21% (93/434)
Resolving deltas:  23% (100/434)
Resolving deltas:  27% (121/434)
Resolving deltas:  35% (155/434)
Resolving deltas:  36% (157/434)
Resolving deltas:  38% (166/434)
Resolving deltas:  42% (183/434)
Resolving deltas:  43% (187/434)
Resolving deltas:  44% (194/434)
Resolving deltas:  45% (196/434)
Resolving deltas:  47% (205/434)
Resolving deltas:  51% (224/434)
Resolving deltas:  53% (231/434)
Resolving deltas:  54% (238/434)
Resolving deltas:  55% (239/434)
Resolving deltas:  57% (248/434)
Resolving deltas:  59% (259/434)
Resolving deltas:  60% (264/434)
Resolving deltas:  61% (267/434)
Resolving deltas:  62% (270/434)
Resolving deltas:  63% (277/434)
Resolving deltas:  64% (278/434)
Resolving deltas:  65% (285/434)
Resolving deltas:  67% (291/434)
Resolving deltas:  68% (298/434)
Resolving deltas:  69% (300/434)
Resolving deltas:  70% (304/434)
Resolving deltas:  73% (320/434)
Resolving deltas:  77% (336/434)
Resolving deltas:  79% (347/434)
Resolving deltas:  80% (350/434)
Resolving deltas:  86% (377/434)
Resolving deltas:  87% (378/434)
Resolving deltas:  88% (383/434)
Resolving deltas:  90% (392/434)
Resolving deltas:  91% (399/434)
Resolving deltas:  92% (402/434)
Resolving deltas:  94% (412/434)
Resolving deltas:  97% (424/434)
Resolving deltas:  98% (429/434)
Resolving deltas: 100% (434/434)
Resolving deltas: 100% (434/434), done.

#SentEval 評価タスクの実行。次のコードブロックは SentEval タスクを実行して結果を出力し、次のタスクのいずれかを選択して USE CMLM モデルを評価します。

MR  CR  SUBJ    MPQA    SST TREC    MRPC    SICK-E

実行するモデル、パラメーター、およびタスクを選択します。ラピッドプロトタイピングパラメータは、計算時間を短縮するために使用でき、より速く結果を得ることができます。

通常、'rapid prototyping' パラメータを使用してタスクを完了するには 5〜15 分かかり、'slower, best performance' パラメータでは最大 1 時間かかります。

params = {'task_path': PATH_TO_DATA, 'usepytorch': True, 'kfold': 5}
params['classifier'] = {'nhid': 0, 'optim': 'rmsprop', 'batch_size': 128,
                                 'tenacity': 3, 'epoch_size': 2}

より良い結果を得るには、より遅い 'slower, best performance' パラメータを使用してください。計算には最大 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)
WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.9/site-packages/tensorflow/python/autograph/pyct/static_analysis/liveness.py:83: Analyzer.lamba_check (from tensorflow.python.autograph.pyct.static_analysis.liveness) is deprecated and will be removed after 2023-09-23.
Instructions for updating:
Lambda fuctions will be no more assumed to be used in the statement where they are used, or at least in the same block. https://github.com/tensorflow/tensorflow/issues/56089
WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.9/site-packages/tensorflow/python/autograph/pyct/static_analysis/liveness.py:83: Analyzer.lamba_check (from tensorflow.python.autograph.pyct.static_analysis.liveness) is deprecated and will be removed after 2023-09-23.
Instructions for updating:
Lambda fuctions will be no more assumed to be used in the statement where they are used, or at least in the same block. https://github.com/tensorflow/tensorflow/issues/56089
Evaluating task CR with rapid prototyping parameters
4/4 [==============================] - 8s 2s/step
4/4 [==============================] - 7s 2s/step
4/4 [==============================] - 7s 2s/step
4/4 [==============================] - 7s 2s/step
4/4 [==============================] - 7s 2s/step
4/4 [==============================] - 6s 2s/step
4/4 [==============================] - 7s 2s/step
4/4 [==============================] - 7s 2s/step
4/4 [==============================] - 7s 2s/step
4/4 [==============================] - 7s 2s/step
4/4 [==============================] - 6s 2s/step
4/4 [==============================] - 6s 2s/step
4/4 [==============================] - 7s 2s/step
4/4 [==============================] - 6s 2s/step
4/4 [==============================] - 6s 2s/step
4/4 [==============================] - 7s 2s/step
4/4 [==============================] - 6s 2s/step
4/4 [==============================] - 6s 2s/step
4/4 [==============================] - 6s 2s/step
4/4 [==============================] - 7s 2s/step
4/4 [==============================] - 7s 2s/step
4/4 [==============================] - 7s 2s/step
4/4 [==============================] - 6s 2s/step
4/4 [==============================] - 6s 2s/step
4/4 [==============================] - 6s 2s/step
4/4 [==============================] - 6s 2s/step
4/4 [==============================] - 7s 2s/step
4/4 [==============================] - 6s 2s/step
4/4 [==============================] - 6s 2s/step
2/2 [==============================] - 4s 2s/step
Time took on task CR : 223.1. seconds
{'devacc': 90.42, 'acc': 88.98, 'ndev': 3775, 'ntest': 3775}

詳細情報

リファレンス