Evrensel Cümle Kodlayıcı SentEval demosu

TensorFlow.org'da görüntüleyin Google Colab'da çalıştırın GitHub'da görüntüle Not defterini indir TF Hub modeline bakın

Bu CoLab demostrates Evrensel Cümle Encoder CMLM modelini kullanarak SentEval cümle tespitlerinin kalitesini ölçmek için bir kütüphane araç seti. SentEval araç takımı, bir gömme modelinin genelleme gücünü değerlendirebilen ve kodlanmış dilsel özellikleri değerlendirebilen çeşitli aşağı akış görevleri içerir.

Ortamı kurmak için ilk iki kod bloğunu çalıştırın, üçüncü kod bloğunda modeli değerlendirmek için bir SentEval görevi seçebilirsiniz. Bu Colab'ı çalıştırmak için bir GPU çalışma zamanı önerilir.

Daha Üniversal Cümle Encoder CMLM modeli hakkında bilgi edinmek için bkz https://openreview.net/forum?id=WDVD4lUCTzU

Bağımlılıkları yükle

SentEval ve görev verilerini indirin

Bu adım, github'dan SentEval'i indirir ve görev verilerini indirmek için veri komut dosyasını yürütür. Tamamlanması 5 dakika kadar sürebilir.

SentEval'i kurun ve görev verilerini indirin

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.

Bir SentEval değerlendirme görevi yürütün

Aşağıdaki kod bloğu bir SentEval görevi yürütür ve sonuçların çıktısını alır, USE CMLM modelini değerlendirmek için aşağıdaki görevlerden birini seçin:

MR  CR  SUBJ    MPQA    SST TREC    MRPC    SICK-E

Çalıştırılacak bir model, parametreler ve görev seçin. Hızlı prototipleme parametreleri, daha hızlı sonuç için hesaplama süresini azaltmak için kullanılabilir.

Genellikle 'yavaş, iyi performans' parametreleri içeren bir saate 'hızlı prototipleme' parametreleri içeren ve yukarı bir görevi tamamlamak için 5-15 dakika sürer.

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

Daha iyi sonuç için, 'daha yavaş, en iyi performans' parametreler, hesaplama 1 saat kadar sürebilir yavaş kullanın:

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}

Daha fazla bilgi edin

Referans