![]() | ![]() | ![]() | ![]() | ![]() |
Ce colab demostrates le modèle de phrase Universal Encoder CMLM en utilisant la SentEval boîte à outils, qui est une bibliothèque pour mesurer la qualité des incorporations de phrase. La boîte à outils SentEval comprend un ensemble diversifié de tâches en aval capables d'évaluer le pouvoir de généralisation d'un modèle d'intégration et d'évaluer les propriétés linguistiques encodées.
Exécutez les deux premiers blocs de code pour configurer l'environnement, dans le troisième bloc de code, vous pouvez choisir une tâche SentEval pour évaluer le modèle. Un runtime GPU est recommandé pour exécuter ce Colab.
Pour en savoir plus au sujet de la phrase universelle modèle Encoder CMLM, voir https://openreview.net/forum?id=WDVD4lUCTzU
Installer les dépendances
pip install --quiet tensorflow-text
pip install --quiet torch==1.8.1
Télécharger SentEval et les données de tâche
Cette étape télécharge SentEval depuis github et exécute le script de données pour télécharger les données de la tâche. Cela peut prendre jusqu'à 5 minutes.
Installez SentEval et téléchargez les données de tâche
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.
Exécuter une tâche d'évaluation SentEval
Le bloc de code suivant exécute une tâche SentEval et génère les résultats, choisissez l'une des tâches suivantes pour évaluer le modèle USE CMLM :
MR CR SUBJ MPQA SST TREC MRPC SICK-E
Sélectionnez un modèle, des paramètres et une tâche à exécuter. Les paramètres de prototypage rapide peuvent être utilisés pour réduire le temps de calcul pour un résultat plus rapide.
Il faut généralement 5-15 minutes pour remplir une tâche avec les params « de prototypage rapide » et jusqu'à une heure avec les params « plus lents, les meilleures performances ».
params = {'task_path': PATH_TO_DATA, 'usepytorch': True, 'kfold': 5}
params['classifier'] = {'nhid': 0, 'optim': 'rmsprop', 'batch_size': 128,
'tenacity': 3, 'epoch_size': 2}
Pour un meilleur résultat, utilisez le ralentissement « plus lent, les meilleures performances » params, le calcul peut prendre jusqu'à 1 heure:
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}
Apprendre encore plus
- Trouver plus de modèles Embedding texte sur tensorflow Hub
- Voir aussi la phrase universelle multilingue modèle Encoder CMLM
- Consultez les autres modèles de codeur Sentence Universal
Référence
- Ziyi Yang, Yinfei Yang, Daniel Cer, Jax Law, Eric Darve. Représentations de phrases universelles Apprentissage avec le modèle de langage masqué conditionnel. novembre 2020