यूनिवर्सल सेंटेंस एनकोडर SentEval डेमो

TensorFlow.org पर देखें Google Colab में चलाएं गिटहब पर देखें नोटबुक डाउनलोड करें टीएफ हब मॉडल देखें

यह colab demostrates यूनिवर्सल वाक्य एनकोडर CMLM मॉडल का उपयोग कर SentEval टूलकिट, जो वाक्य embeddings की गुणवत्ता को मापने के लिए एक पुस्तकालय है। SentEval टूलकिट में डाउनस्ट्रीम कार्यों का एक विविध सेट शामिल है जो एक एम्बेडिंग मॉडल की सामान्यीकरण शक्ति का मूल्यांकन करने और एन्कोडेड भाषाई गुणों का मूल्यांकन करने में सक्षम हैं।

वातावरण को सेटअप करने के लिए पहले दो कोड ब्लॉक चलाएँ, तीसरे कोड ब्लॉक में आप मॉडल का मूल्यांकन करने के लिए एक SentEval कार्य चुन सकते हैं। इस Colab को चलाने के लिए GPU रनटाइम की सलाह दी जाती है.

यूनिवर्सल वाक्य एनकोडर CMLM मॉडल के बारे में अधिक जानने के लिए, https://openreview.net/forum?id=WDVD4lUCTzU

निर्भरता स्थापित करें

डाउनलोड भेजा गया Eval और कार्य डेटा

यह चरण सेंटेवल को जीथब से डाउनलोड करता है और कार्य डेटा को डाउनलोड करने के लिए डेटा स्क्रिप्ट निष्पादित करता है। इसे पूरा होने में 5 मिनट तक का समय लग सकता है।

SentEval स्थापित करें और कार्य डेटा डाउनलोड करें

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.

SentEval मूल्यांकन कार्य निष्पादित करें

निम्न कोड ब्लॉक एक SentEval कार्य निष्पादित करता है और परिणाम आउटपुट करता है, USE CMLM मॉडल का मूल्यांकन करने के लिए निम्न कार्यों में से एक चुनें:

MR  CR  SUBJ    MPQA    SST TREC    MRPC    SICK-E

चलाने के लिए एक मॉडल, पैरामीटर और कार्य का चयन करें। तेजी से परिणाम के लिए गणना समय को कम करने के लिए रैपिड प्रोटोटाइप पैरा का उपयोग किया जा सकता है।

यह आम तौर पर 'धीमी, सबसे अच्छा प्रदर्शन' पैरामीटर वाला एक घंटे के लिए 'रैपिड प्रोटोटाइप' पैरामीटर वाला और किसी कार्य को पूरा करने के लिए 5-15 मिनट लगते हैं।

params = {'task_path': PATH_TO_DATA, 'usepytorch': True, 'kfold': 5}
params['classifier'] = {'nhid': 0, 'optim': 'rmsprop', 'batch_size': 128,
                                 'tenacity': 3, 'epoch_size': 2}

बेहतर परिणाम के लिए, 'धीमी, सबसे अच्छा प्रदर्शन' पैरामीटर, गणना में 1 घंटे तक का समय लग सकता धीमी का उपयोग करें:

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}

और अधिक जानें

संदर्भ