Zobacz na TensorFlow.org | Uruchom w Google Colab | Zobacz na GitHub | Pobierz notatnik | Zobacz model piasty TF |
Ten colab demostrates ten uniwersalny Sentence modelu Encoder CMLM używając SentEval Toolkit, który jest biblioteką do pomiaru jakości zanurzeń zdanie. Zestaw narzędzi SentEval zawiera zróżnicowany zestaw dalszych zadań, które są w stanie ocenić moc uogólniania modelu osadzania i ocenić zakodowane właściwości językowe.
Uruchom pierwsze dwa bloki kodu, aby skonfigurować środowisko, w trzecim bloku kodu możesz wybrać zadanie SentEval, aby ocenić model. Do uruchomienia tego programu Colab zalecane jest środowisko wykonawcze GPU.
Aby dowiedzieć się więcej o Uniwersalny Zdanie modelu Encoder CMLM patrz https://openreview.net/forum?id=WDVD4lUCTzU
Zainstaluj zależności
pip install --quiet tensorflow-text
pip install --quiet torch==1.8.1
Pobierz SentEval i dane zadań
W tym kroku pobierz SentEval z github i wykonaj skrypt danych, aby pobrać dane zadania. Może to potrwać do 5 minut.
Zainstaluj SentEval i pobierz dane zadania
rm -rf ./SentEval
git clone https://github.com/facebookresearch/SentEval.git
cd $PWD/SentEval/data/downstream && bash get_transfer_data.bash > /dev/null 2>&1
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.
Wykonaj zadanie oceny SentEval
Poniższy blok kodu wykonuje zadanie SentEval i wyświetla wyniki, wybierz jedno z następujących zadań, aby ocenić model USE CMLM:
MR CR SUBJ MPQA SST TREC MRPC SICK-E
Wybierz model, parametry i zadanie do uruchomienia. Parametry szybkiego prototypowania można wykorzystać do skrócenia czasu obliczeń w celu uzyskania szybszych wyników.
To zwykle trwa 5-15 minut, aby zakończyć zadanie z „szybkiego prototypowania” params a nawet godzinę z „wolniejszych, najlepsze wyniki” params.
params = {'task_path': PATH_TO_DATA, 'usepytorch': True, 'kfold': 5}
params['classifier'] = {'nhid': 0, 'optim': 'rmsprop', 'batch_size': 128,
'tenacity': 3, 'epoch_size': 2}
Dla lepszego efektu, użyj wolniej „wolniej, najlepsze wyniki” params, obliczenie może potrwać do 1 godziny:
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}
Ucz się więcej
- Znajdź więcej Osadzanie tekst modele na TensorFlow Hub
- Zobacz także wielojęzyczny Uniwersalny Zdanie modelu Encoder CMLM
- Sprawdź inne modele Zdanie Encoder uniwersalne
Odniesienie
- Ziyi Yang, Yinfei Yang, Daniel Cer, Jax Law, Eric Darve. Uczenie się uniwersalnych reprezentacji zdań za pomocą warunkowego modelu języka zamaskowanego. Listopad 2020