ユニバーサルセンテンスエンコーダ 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.[K
remote: Counting objects: 100% (2/2), done.[K
remote: Compressing objects: 100% (2/2), done.[K
remote: Total 691 (delta 0), reused 2 (delta 0), pack-reused 689[K
Receiving objects: 100% (691/691), 33.25 MiB | 27.39 MiB/s, done.
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}

詳細情報

リファレンス