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
pip install --quiet tensorflow-text
pip install --quiet torch==1.8.1
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
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.
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
- Üzerinde daha fazla metin gömme modelleri bul TensorFlow Hub
- Ayrıca bkz Dilde Evrensel Cümle Encoder CMLM modeli
- Diğer göz atın Evrensel Cümle Encoder modelleri
Referans
- Ziyi Yang, Yinfei Yang, Daniel Cer, Jax Yasası, Eric Darve. Koşullu Maskeli Dil Modeli ile Öğrenme Evrensel Cümle Temsilleri. Kasım 2020