Ver en TensorFlow.org | Ejecutar en Google Colab | Ver en GitHub | Descargar cuaderno | Ver modelo TF Hub |
Esta colab demostrates la universal Sentencia modelo de codificador CMLM utilizando el SentEval conjunto de herramientas, que es una biblioteca para la medición de la calidad de incrustaciones de oraciones. El kit de herramientas de SentEval incluye un conjunto diverso de tareas posteriores que pueden evaluar el poder de generalización de un modelo de incrustación y evaluar las propiedades lingüísticas codificadas.
Ejecute los dos primeros bloques de código para configurar el entorno, en el tercer bloque de código puede elegir una tarea de SentEval para evaluar el modelo. Se recomienda un tiempo de ejecución de GPU para ejecutar este Colab.
Para obtener más información acerca de la oración universal modelo de codificador CMLM, ver https://openreview.net/forum?id=WDVD4lUCTzU
Instalar dependencias
pip install --quiet tensorflow-text
pip install --quiet torch==1.8.1
Descargar SentEval y datos de tareas
Este paso descarga SentEval de github y ejecuta el script de datos para descargar los datos de la tarea. Puede tardar hasta 5 minutos en completarse.
Instale SentEval y descargue los datos de la tarea
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.
Ejecutar una tarea de evaluación de SentEval
El siguiente bloque de código ejecuta una tarea SentEval y genera los resultados, elija una de las siguientes tareas para evaluar el modelo USE CMLM:
MR CR SUBJ MPQA SST TREC MRPC SICK-E
Seleccione un modelo, parámetros y tarea para ejecutar. Los parámetros de creación rápida de prototipos se pueden utilizar para reducir el tiempo de cálculo para obtener resultados más rápidos.
Normalmente se tarda 5-15 minutos para completar una tarea con los parametros 'Rapid Prototyping' y hasta una hora con los mejores 'un rendimiento más lento' 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}
Para un mejor resultado, utilice el lento 'más lento, mejor rendimiento' params, computación pueden tardar hasta 1 hora:
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}
Aprende más
- Encuentra más modelos de incrustación de texto en TensorFlow Hub
- Véase también el multilingüe universal Sentencia modelo de codificador CMLM
- En cuanto a otros modelos de encoder Sentencia Universal
Referencia
- Ziyi Yang, Yinfei Yang, Daniel Cer, Jax Law, Eric Darve. Aprendizaje de representaciones de oraciones universales con el modelo de lenguaje enmascarado condicional. Noviembre de 2020