هذا المستودع هو التطبيق الرسمي لـ DeBERTa : ترميز BERT المحسّن مع اهتمام منفصل و DeBERTa V3: تحسين DeBERTa باستخدام التدريب المسبق على نمط ELECTRA مع مشاركة التضمين المتدرج المفكك.
كود DeBERTa v2 والطراز 900M، 1.5B موجودان هنا الآن. يتضمن ذلك نموذج 1.5B المستخدم في تقديم النموذج الفردي SuperGLUE وتحقيق 89.9، مقابل خط الأساس البشري 89.8. يمكنك العثور على مزيد من التفاصيل حول هذا الإرسال في مدونتنا
مع نموذج DeBERTa 1.5B، نتجاوز نموذج T5 11B والأداء البشري على لوحة المتصدرين SuperGLUE. سيتم إصدار الكود والنموذج قريبًا. يرجى مراجعة ورقتنا لمزيد من التفاصيل.
لقد أصدرنا النماذج المدربة مسبقًا، والكود المصدري، والبرامج النصية الدقيقة لإعادة إنتاج بعض النتائج التجريبية في الورقة. يمكنك اتباع نصوص برمجية مماثلة لتطبيق DeBERTa على تجاربك أو تطبيقاتك الخاصة. سيتم إصدار البرامج النصية للتدريب المسبق في الخطوة التالية.
يعمل DeBERTa (BERT المحسّن لفك التشفير مع الاهتمام غير المتشابك) على تحسين نماذج BERT وRoBERTa باستخدام تقنيتين جديدتين. الأول هو آلية الانتباه غير المتشابك، حيث يتم تمثيل كل كلمة باستخدام متجهين يرمزان لمحتواها وموقعها، على التوالي، ويتم حساب أوزان الانتباه بين الكلمات باستخدام مصفوفات غير متشابكة على محتوياتها ومواضعها النسبية. ثانيًا، يتم استخدام وحدة فك ترميز القناع المحسّنة لاستبدال طبقة softmax الناتجة للتنبؤ بالرموز المميزة المقنعة للتدريب المسبق للنموذج. لقد أظهرنا أن هاتين التقنيتين تعملان على تحسين كفاءة التدريب المسبق النموذجي وأداء المهام النهائية بشكل كبير.
يتم تجميع نماذجنا المدربة مسبقًا في ملفات مضغوطة. يمكنكم تحميلها من إصداراتنا، أو تحميل نموذج فردي عبر الروابط أدناه:
نموذج | المفردات(ك) | معلمات العمود الفقري (م) | الحجم المخفي | طبقات | ملحوظة |
---|---|---|---|---|---|
V2-XXL 1 | 128 | 1320 | 1536 | 48 | 128 ألف مفردة SPM جديدة |
V2-XLarge | 128 | 710 | 1536 | 24 | 128 ألف مفردة SPM جديدة |
كبير جدًا | 50 | 700 | 1024 | 48 | نفس المفردات مثل RoBERTa |
كبير | 50 | 350 | 1024 | 24 | نفس المفردات مثل RoBERTa |
قاعدة | 50 | 100 | 768 | 12 | نفس المفردات مثل RoBERTa |
V2-XXLarge-MNLI | 128 | 1320 | 1536 | 48 | تم التعامل بشكل جيد مع الحركة الوطنية لتحرير ليبيريا |
V2-XLarge-MNLI | 128 | 710 | 1536 | 24 | تم التعامل بشكل جيد مع الحركة الوطنية لتحرير ليبيريا |
XLarge-MNLI | 50 | 700 | 1024 | 48 | تم التعامل بشكل جيد مع الحركة الوطنية لتحرير ليبيريا |
MNLI الكبيرة | 50 | 350 | 1024 | 24 | تم التعامل بشكل جيد مع الحركة الوطنية لتحرير ليبيريا |
قاعدة الحركة الوطنية لتحرير أزواد | 50 | 86 | 768 | 12 | تم التعامل بشكل جيد مع الحركة الوطنية لتحرير ليبيريا |
DeBERTa -V3-كبير 2 | 128 | 304 | 1024 | 24 | 128 ألف مفردة SPM جديدة |
DeBERTa -V3-Base 2 | 128 | 86 | 768 | 12 | 128 ألف مفردة SPM جديدة |
DeBERTa -V3-صغير 2 | 128 | 44 | 768 | 6 | 128 ألف مفردة SPM جديدة |
DeBERTa -V3-XSmall 2 | 128 | 22 | 384 | 12 | 128 ألف مفردة SPM جديدة |
م DeBERTa -V3-Base 2 | 250 | 86 | 768 | 12 | 250 ألف مفردة SPM جديدة، نموذج متعدد اللغات بـ 102 لغة |
اقرأ وثائقنا
هناك عدة طرق لتجربة الكود الخاص بنا،
Docker هي الطريقة الموصى بها لتشغيل التعليمات البرمجية حيث قمنا بالفعل ببناء كل التبعيات في docker Bagai/ DeBERTa ويمكنك متابعة الموقع الرسمي لـ docker لتثبيت docker على جهازك.
للتشغيل مع عامل الإرساء، تأكد من أن نظامك يلبي المتطلبات الواردة في القائمة أعلاه. فيما يلي خطوات تجربة تجارب GLUE: اسحب الكود، وقم بتشغيل ./run_docker.sh
، وبعد ذلك يمكنك تشغيل أوامر bash ضمن / DeBERTa /experiments/glue/
اسحب الكود وقم بتشغيل pip3 install -r requirements.txt
في الدليل الجذر للكود، ثم أدخل مجلد experiments/glue/
للكود وجرب أوامر bash ضمن هذا المجلد لإجراء تجارب الغراء.
pip install DeBERTa
# To apply DeBERTa to your existing code, you need to make two changes to your code,
# 1. change your model to consume DeBERTa as the encoder
from DeBERTa import DeBERTa
import torch
class MyModel ( torch . nn . Module ):
def __init__ ( self ):
super (). __init__ ()
# Your existing model code
self . DeBERTa = DeBERTa . DeBERTa ( pre_trained = 'base' ) # Or 'large' 'base-mnli' 'large-mnli' 'xlarge' 'xlarge-mnli' 'xlarge-v2' 'xxlarge-v2'
# Your existing model code
# do inilization as before
#
self . DeBERTa . apply_state () # Apply the pre-trained model of DeBERTa at the end of the constructor
#
def forward ( self , input_ids ):
# The inputs to DeBERTa forward are
# `input_ids`: a torch.LongTensor of shape [batch_size, sequence_length] with the word token indices in the vocabulary
# `token_type_ids`: an optional torch.LongTensor of shape [batch_size, sequence_length] with the token types indices selected in [0, 1].
# Type 0 corresponds to a `sentence A` and type 1 corresponds to a `sentence B` token (see BERT paper for more details).
# `attention_mask`: an optional parameter for input mask or attention mask.
# - If it's an input mask, then it will be torch.LongTensor of shape [batch_size, sequence_length] with indices selected in [0, 1].
# It's a mask to be used if the input sequence length is smaller than the max input sequence length in the current batch.
# It's the mask that we typically use for attention when a batch has varying length sentences.
# - If it's an attention mask then if will be torch.LongTensor of shape [batch_size, sequence_length, sequence_length].
# In this case, it's a mask indicating which tokens in the sequence should be attended by other tokens in the sequence.
# `output_all_encoded_layers`: whether to output results of all encoder layers, default, True
encoding = DeBERTa . bert ( input_ids )[ - 1 ]
# 2. Change your tokenizer with the tokenizer built-in DeBERTa
from DeBERTa import DeBERTa
vocab_path , vocab_type = DeBERTa . load_vocab ( pretrained_id = 'base' )
tokenizer = DeBERTa . tokenizers [ vocab_type ]( vocab_path )
# We apply the same schema of special tokens as BERT, e.g. [CLS], [SEP], [MASK]
max_seq_len = 512
tokens = tokenizer . tokenize ( 'Examples input text of DeBERTa ' )
# Truncate long sequence
tokens = tokens [: max_seq_len - 2 ]
# Add special tokens to the `tokens`
tokens = [ '[CLS]' ] + tokens + [ '[SEP]' ]
input_ids = tokenizer . convert_tokens_to_ids ( tokens )
input_mask = [ 1 ] * len ( input_ids )
# padding
paddings = max_seq_len - len ( input_ids )
input_ids = input_ids + [ 0 ] * paddings
input_mask = input_mask + [ 0 ] * paddings
features = {
'input_ids' : torch . tensor ( input_ids , dtype = torch . int ),
'input_mask' : torch . tensor ( input_mask , dtype = torch . int )
}
لمهام الغراء،
cache_dir=/tmp/ DeBERTa /
cd experiments/glue
./download_data.sh $cache_dir /glue_tasks
task=STS-B
OUTPUT=/tmp/ DeBERTa /exps/ $task
export OMP_NUM_THREADS=1
python3 -m DeBERTa .apps.run --task_name $task --do_train
--data_dir $cache_dir /glue_tasks/ $task
--eval_batch_size 128
--predict_batch_size 128
--output_dir $OUTPUT
--scale_steps 250
--loss_scale 16384
--accumulative_update 1
--num_train_epochs 6
--warmup 100
--learning_rate 2e-5
--train_batch_size 32
--max_seq_len 128
$HOME/.~ DeBERTa
، وقد تحتاج إلى تنظيفه إذا فشل التنزيل بشكل غير متوقع.يتم إجراء تجارب الضبط الدقيق لدينا على نصف عقدة DGX-2 مع بطاقات GPU 8x32 V100، وقد تختلف النتائج بسبب نماذج GPU المختلفة، وبرامج التشغيل، وإصدارات CUDA SDK، باستخدام FP16 أو FP32، والبذور العشوائية. نقوم بالإبلاغ عن أرقامنا بناءً على عمليات تشغيل متعددة ببذور عشوائية مختلفة هنا. فيما يلي نتائج النموذج الكبير:
مهمة | يأمر | نتائج | وقت التشغيل (وحدات معالجة الرسومات 8x32G V100) |
---|---|---|---|
منلي إكس لارج v2 | experiments/glue/mnli.sh xxlarge-v2 | 91.7/91.9 +/-0.1 | 4 ساعات |
منلي اكس لارج v2 | experiments/glue/mnli.sh xlarge-v2 | 91.7/91.6 +/-0.1 | 2.5 ساعة |
MNLI اكس لارج | experiments/glue/mnli.sh xlarge | 91.5/91.2 +/-0.1 | 2.5 ساعة |
الحركة الوطنية الإسلامية كبيرة | experiments/glue/mnli.sh large | 91.3/91.1 +/-0.1 | 2.5 ساعة |
QQP كبيرة | experiments/glue/qqp.sh large | 92.3 +/-0.1 | 6 ساعات |
QNLI كبيرة | experiments/glue/qnli.sh large | 95.3 +/-0.2 | 2 ساعة |
إم آر بي سي كبير | experiments/glue/mrpc.sh large | 91.9 +/- 0.5 | 0.5 ساعة |
RTE كبيرة | experiments/glue/rte.sh large | 86.6 +/-1.0 | 0.5 ساعة |
SST-2 كبير | experiments/glue/sst2.sh large | 96.7 +/- 0.3 | ساعة واحدة |
STS-ب كبير | experiments/glue/Stsb.sh large | 92.5 +/-0.3 | 0.5 ساعة |
كولا كبيرة | experiments/glue/cola.sh | 70.5 +/-1.0 | 0.5 ساعة |
وهنا النتائج من النموذج الأساسي
مهمة | يأمر | نتائج | وقت التشغيل (وحدات معالجة الرسومات 8x32G V100) |
---|---|---|---|
قاعدة الحركة الوطنية لتحرير أزواد | experiments/glue/mnli.sh base | 88.8/88.5 +/-0.2 | 1.5 ساعة |
نقدم نتائج التطوير على SQuAD 1.1/2.0 والعديد من المهام المعيارية لـ GLUE.
نموذج | فرقة 1.1 | فرقة 2.0 | MNLI-م/مم | طائرة أسرع من الصوت-2 | QNLI | كولا | RTE | MRPC | QQP | إس تي إس-بي |
---|---|---|---|---|---|---|---|---|---|---|
F1/م | F1/م | لجنة التنسيق الإدارية | لجنة التنسيق الإدارية | لجنة التنسيق الإدارية | مركز عملائي | لجنة التنسيق الإدارية | لجنة التنسيق/F1 | لجنة التنسيق/F1 | ف / س | |
بيرت-كبير | 90.9/84.1 | 81.8/79.0 | 86.6/- | 93.2 | 92.3 | 60.6 | 70.4 | 88.0/- | 91.3/- | 90.0/- |
روبرتا-كبير | 94.6/88.9 | 89.4/86.5 | 90.2/- | 96.4 | 93.9 | 68.0 | 86.6 | 90.9/- | 92.2/- | 92.4/- |
XLNet-كبير | 95.1/89.7 | 90.6/87.9 | 90.8/- | 97.0 | 94.9 | 69.0 | 85.9 | 90.8/- | 92.3/- | 92.5/- |
DeBERTa - كبير 1 | 95.5/90.1 | 90.7/88.0 | 91.3/91.1 | 96.5 | 95.3 | 69.5 | 91.0 | 92.6/94.6 | 92.3/- | 92.8/92.5 |
DeBERTa - اكس لارج 1 | -/- | -/- | 91.5/91.2 | 97.0 | - | - | 93.1 | 92.1/94.3 | - | 92.9/92.7 |
DeBERTa -V2-XLarge 1 | 95.8/90.8 | 91.4/88.9 | 91.7/91.6 | 97.5 | 95.8 | 71.1 | 93.9 | 92.0/94.2 | 92.3/89.8 | 92.9/92.9 |
DeBERTa -V2-XXLarge 1,2 | 96.1/91.4 | 92.2/89.7 | 91.7/91.9 | 97.2 | 96.0 | 72.0 | 93.5 | 93.1/94.9 | 92.7/90.3 | 93.2/93.1 |
DeBERTa -V3-كبير | -/- | 91.5/89.0 | 91.8/91.9 | 96.9 | 96.0 | 75.3 | 92.7 | 92.2/- | 93.0/- | 93.0/- |
DeBERTa -V3-Base | -/- | 88.4/85.4 | 90.6/90.7 | - | - | - | - | - | - | - |
DeBERTa -V3-صغير | -/- | 82.9/80.4 | 88.3/87.7 | - | - | - | - | - | - | - |
DeBERTa -V3-XSmall | -/- | 84.8/82.0 | 88.1/88.3 | - | - | - | - | - | - | - |
نقدم نتائج التطوير على XNLI مع إعداد النقل عبر اللغات بدون لقطة، أي التدريب باستخدام البيانات الإنجليزية فقط، واختبار اللغات الأخرى.
نموذج | متوسط | أون | الاب | وفاق | دي | ش | بغ | رو | آر | ع | سادسا | ذ | ز | أهلاً | جنوب غرب | أور |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
قاعدة XLM-R | 76.2 | 85.8 | 79.7 | 80.7 | 78.7 | 77.5 | 79.6 | 78.1 | 74.2 | 73.8 | 76.5 | 74.6 | 76.7 | 72.4 | 66.5 | 68.3 |
م DeBERTa -V3-Base | 79.8 +/-0.2 | 88.2 | 82.6 | 84.4 | 82.7 | 82.3 | 82.4 | 80.8 | 79.5 | 78.5 | 78.1 | 76.4 | 79.5 | 75.9 | 73.9 | 72.4 |
لتدريب DeBERTa مسبقًا على أهداف الامتيازات والرهونات البحرية وRTD، يرجى مراجعة experiments/language_models
بينجتشنغ هي ([email protected])، شياو دونغ ليو ([email protected])، جيان فينغ غاو ([email protected])، ويزهو تشن ([email protected])
@misc{he2021 DeBERTa v3,
title={ DeBERTa V3: Improving DeBERTa using ELECTRA-Style Pre-Training with Gradient-Disentangled Embedding Sharing},
author={Pengcheng He and Jianfeng Gao and Weizhu Chen},
year={2021},
eprint={2111.09543},
archivePrefix={arXiv},
primaryClass={cs.CL}
}
@inproceedings{
he2021 DeBERTa ,
title={ DeBERTa : DECODING-ENHANCED BERT WITH DISENTANGLED ATTENTION},
author={Pengcheng He and Xiaodong Liu and Jianfeng Gao and Weizhu Chen},
booktitle={International Conference on Learning Representations},
year={2021},
url={https://openreview.net/forum?id=XPZIaotutsD}
}