Xem trên TensorFlow.org | Chạy trong Google Colab | Xem trên GitHub | Tải xuống sổ ghi chép | Xem mô hình TF Hub |
Colab này demostrates sự phổ Câu mô hình mã hóa CMLM sử dụng SentEval toolkit, mà là một thư viện để đo lường chất lượng embeddings câu. Bộ công cụ SentEval bao gồm một tập hợp đa dạng các tác vụ xuôi dòng có thể đánh giá sức mạnh tổng quát của một mô hình nhúng và đánh giá các thuộc tính ngôn ngữ được mã hóa.
Chạy hai khối mã đầu tiên để thiết lập môi trường, trong khối mã thứ ba, bạn có thể chọn một nhiệm vụ SentEval để đánh giá mô hình. Thời gian chạy GPU được khuyến nghị để chạy Colab này.
Để tìm hiểu thêm về Universal Câu mô hình mã hóa CMLM, xem https://openreview.net/forum?id=WDVD4lUCTzU
Cài đặt phần phụ thuộc
pip install --quiet tensorflow-text
pip install --quiet torch==1.8.1
Tải xuống SentEval và dữ liệu tác vụ
Bước này tải xuống SentEval từ github và thực thi tập lệnh dữ liệu để tải xuống dữ liệu tác vụ. Có thể mất đến 5 phút để hoàn thành.
Cài đặt SentEval và tải xuống dữ liệu tác vụ
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.
Thực thi nhiệm vụ loại bỏ SentEval
Khối mã sau thực hiện một tác vụ SentEval và xuất ra kết quả, hãy chọn một trong các tác vụ sau để đánh giá mô hình USE CMLM:
MR CR SUBJ MPQA SST TREC MRPC SICK-E
Chọn một mô hình, thông số và nhiệm vụ để chạy. Các thông số tạo mẫu nhanh có thể được sử dụng để giảm thời gian tính toán để có kết quả nhanh hơn.
Nó thường mất 5-15 phút để hoàn thành một nhiệm vụ với 'mẫu nhanh' params và lên đến một tiếng đồng hồ với sự 'chậm hơn, hiệu suất tốt nhất' 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}
Đối với kết quả tốt hơn, sử dụng chậm hơn 'chậm hơn, hiệu suất tốt nhất' params, tính toán có thể mất đến 1 giờ:
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}
Tìm hiểu thêm
- Tìm thêm mô hình văn bản nhúng vào TensorFlow Hub
- Xem thêm đa ngôn ngữ phổ Câu mã hóa CMLM mô hình
- Kiểm tra khác mô hình Câu mã hóa phổ quát
Tài liệu tham khảo
- Ziyi Yang, Yinfei Yang, Daniel Cer, Jax Law, Eric Darve. Biểu diễn câu phổ quát Học với mô hình ngôn ngữ được che dấu có điều kiện. Tháng 11 năm 2020