Visualizza su TensorFlow.org | Esegui in Google Colab | Visualizza su GitHub | Scarica taccuino | Vedi il modello del mozzo TF |
Questo CoLab demostrates il modello di encoder CMLM universale Frase utilizzando il SentEval toolkit, che è una libreria per misurare la qualità di incastri di frase. Il toolkit SentEval include un insieme diversificato di attività a valle che sono in grado di valutare il potere di generalizzazione di un modello di incorporamento e di valutare le proprietà linguistiche codificate.
Esegui i primi due blocchi di codice per configurare l'ambiente, nel terzo blocco di codice puoi scegliere un'attività SentEval per valutare il modello. Si consiglia un runtime GPU per eseguire questo Colab.
Per saperne di più sul modello di universale Frase Encoder CMLM, vedere https://openreview.net/forum?id=WDVD4lUCTzU
Installa le dipendenze
pip install --quiet tensorflow-text
pip install --quiet torch==1.8.1
Scarica SentEval e i dati dell'attività
Questo passaggio scarica SentEval da github ed esegue lo script di dati per scaricare i dati dell'attività. Potrebbero essere necessari fino a 5 minuti per il completamento.
Installa SentEval e scarica i dati dell'attività
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.
Eseguire un'attività di valutazione SentEval
Il seguente blocco di codice esegue un'attività SentEval e genera i risultati, scegli una delle seguenti attività per valutare il modello USE CMLM:
MR CR SUBJ MPQA SST TREC MRPC SICK-E
Seleziona un modello, parametri e attività da eseguire. I parametri di prototipazione rapida possono essere utilizzati per ridurre il tempo di calcolo per risultati più rapidi.
Si richiede in genere 5-15 minuti per completare un compito con il params 'prototipazione rapida' e fino a un'ora con i 'più lenti, migliori performance' 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}
Per un risultato migliore, utilizzare il più lento 'più lento, migliori performance' params, il calcolo può richiedere fino a 1 ora:
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}
Per saperne di più
- Trova più modelli di testo all'incorporamento su tensorflow Hub
- Vedi anche il modello di encoder CMLM multilingue universale Frase
- Scopri altri modelli universali Frase Encoder
Riferimento
- Ziyi Yang, Yinfei Yang, Daniel Cer, Jax Law, Eric Darve. Rappresentazioni della frase universale Apprendimento con il modello condizionale del linguaggio mascherato. novembre 2020