هذا المستودع مخصص للمقالة "تمثيلات لغة ثنائية الاتجاه سريعة ودقيقة وعميقة للتعلم غير الخاضع للرقابة"، والتي تصف طريقتنا بالتفصيل.
T-TA ، أو T ext A utoencoder المستند إلى T ransformer، هو نموذج لغة عميق ثنائي الاتجاه جديد لمهام التعلم غير الخاضعة للإشراف. تتعلم T-TA هدفًا تعليميًا مباشرًا، وهو التشفير التلقائي للغة ، وهو التنبؤ بجميع الرموز المميزة في الجملة مرة واحدة باستخدام سياقها فقط. على عكس "نموذج اللغة المقنعة"، تتمتع T-TA بآلية إخفاء ذاتي لتجنب مجرد نسخ المدخلات إلى المخرجات. على عكس BERT (الذي يهدف إلى ضبط النموذج المُدرب مسبقًا بالكامل)، فإن T-TA مفيد بشكل خاص للحصول على التضمينات السياقية، وهي تمثيلات ثابتة لكل رمز إدخال تم إنشاؤه من الطبقات المخفية لنموذج اللغة المُدرب.
تعتمد بنية نموذج T-TA على بنية نموذج BERT، والتي تكون في الغالب بنية محولات قياسية. يعتمد الكود الخاص بنا على BERT github من Google، والذي يتضمن طرقًا لبناء مفردات مخصصة، وإعداد مجموعة بيانات ويكيبيديا، وما إلى ذلك.
Ubuntu 16.04 LTS
Python 3.6.10
TensorFlow 1.12.0
git clone https://github.com/joongbo/tta.git
cd tta
قمنا بإصدار نموذج T-TA المُدرب مسبقًا (ملف tar.gz بحجم 262.2 ميجابايت).
cd models
wget http://milabfile.snu.ac.kr:16000/tta/ tta -layer-3-enwiki-lower-sub-32k.tar.gz
tar -xvzf tta -layer-3-enwiki-lower-sub-32k.tar.gz
cd ..
بعد ذلك، سيظهر مجلد tta -layer-3-enwiki-lower-sub-32k
في model/
المجلد. في الوقت الحالي، يعمل النموذج على max_seq_length=128
.
قمنا بإصدار الكود run_unsupervisedstsb.py
كمثال لاستخدام T-TA. لتشغيل هذا الكود، قد تحتاج إلى عدة حزم بايثون: numpy
و scipy
و sklearn
.
للحصول على مجموعة بيانات STS Benchmark،
cd data
wget http://ixa2.si.ehu.es/stswiki/images/4/48/Stsbenchmark.tar.gz
tar -xvzf Stsbenchmark.tar.gz
cd ..
بعد ذلك، سيظهر مجلد stsbenchmark
في مجلد data/
.
يجري:
python run_unsupervisedstsb.py
--config_file models/ tta -layer-3-enwiki-lower-sub-32k/config.layer-3.vocab-lower.sub-32k.json
--model_checkpoint models/ tta -layer-3-enwiki-lower-sub-32k/model.ckpt
--vocab_file models/ tta -layer-3-enwiki-lower-sub-32k/vocab-lower.sub-32k.txt
الإخراج:
ينقسم | ص |
---|---|
STSb-ديف | 71.88 |
اختبار STSb | 62.27 |
قمنا بإصدار بيانات نصية فقط من librispeech تمت معالجتها مسبقًا (ملف tar.gz بحجم 1.66 جيجابايت). في هذه المجموعة، كل سطر عبارة عن جملة واحدة، لذلك نستخدم وحدة الجملة (بدلاً من وحدة الفقرة) لمثال تدريبي. يمكن العثور على البيانات الأصلية في LibriSpeech-LM.
cd data
wget http://milabfile.snu.ac.kr:16000/tta/corpus.librispeech-lower.sub-32k.tar.gz
tar -xvzf corpus.librispeech-lower.sub-32k.tar.gz
cd ..
ثم، corpus-eval.librispeech-lower.sub-32k.txt
و corpus-train.librispeech-lower.sub-32k.txt
سوف تظهر في مجلد data/
.
بعد الحصول على بيانات النص العادي التي تمت معالجتها مسبقًا، نقوم بإنشاء تسجيلات tfrecords (يستغرق إنشاء تسجيلات tfrecords لبيانات القطار بعض الوقت):
rm tfrecords/ tta -librispeech-lower-sub-32k # delete dummy (symbolic link)
python create_tfrecords.py
--input_file data/corpus-eval.librispeech-lower.sub-32k.txt
--vocab_file configs/vocab-lower.sub-32k.txt
--output_file tfrecords/ tta -librispeech-lower-sub-32k/eval.tfrecord
--num_output_split 1
python create_tfrecords.py
--input_file data/corpus-train.librispeech-lower.sub-32k.txt
--vocab_file configs/vocab-lower.sub-32k.txt
--output_file tfrecords/ tta -librispeech-lower-sub-32k/train.tfrecord
نقوم بتدريب النموذج (التهيئة العشوائية) على النحو التالي:
python run_training.py
--config_file configs/config.layer-3.vocab-lower.sub-32k.json
--input_file " tfrecords/ tta -librispeech-lower-sub-32k/train-* "
--eval_input_file " tfrecords/ tta -librispeech-lower-sub-32k/eval-* "
--output_dir " models/ tta -layer-3-librispeech-lower-sub-32k "
--num_train_steps 2000000
--num_warmup_steps 50000
--learning_rate 0.0001
لتهيئة أفضل، يمكننا إضافة سطر --init_checkpoint "models/ tta -layer-3-enwiki-lower-sub-32k/model.ckpt"
(بعد تنزيل الأوزان المدربة مسبقًا).
يتم إصدار جميع الأكواد والنماذج بموجب ترخيص Apache 2.0. راجع ملف LICENSE
لمزيد من المعلومات.
في الوقت الحالي، استشهد بمقالة Arxiv:
@article{shin2020fast,
title={Fast and Accurate Deep Bidirectional Language Representations for Unsupervised Learning},
author={Shin, Joongbo and Lee, Yoonhyung and Yoon, Seunghyun and Jung, Kyomin},
journal={arXiv preprint arXiv:2004.08097},
year={2020}
}
للحصول على مساعدة أو مشكلات في استخدام T-TA، يرجى إرسال مشكلة GitHub.
للتواصل الشخصي المتعلق بـ T-TA، يرجى الاتصال بـ Joongbo Shin ( [email protected]
).