نماذج اللغة2019متقدم12 دقيقة قراءة
XLNet: تدريب مسبق ذاتي الانحدار مُعمَّم لفهم اللغة
XLNet: Generalized Autoregressive Pretraining for Language Understanding
Yang, Z. · Dai, Z. · Yang, Y. · Carbonell, J. · Salakhutdinov, R. · Le, Q. V. — NeurIPS
المشكلة
بحلول 2019، كان مجال للنماذج اللغوية قد انقسم إلى مدرستين، كلتاهما تقدّم شيئاً وتخسر شيئاً. النماذج ذاتية الانحدار مثل GPT تقرأ الجملة من اليسار إلى اليمين فتُنتج تقديرات احتمالية سليمة رياضياً، لكنها عمياء عن أي كلمة لم تأتِ بعد. في المقابل، نماذج الترميز الذاتي مثل BERT ترى السياق من الاتجاهين لأنها تُخفي رموزاً عشوائية ثم تتنبأ بها — لكنها تدفع ثمنين: أولاً، رمز [MASK] يظهر في أثناء ولا وجود له عند ، فتنشأ فجوة بين مرحلتَي التدريب والاستخدام. ثانياً، BERT يتنبأ بالرموز المُخفاة كلاً على حدة، كأنها مستقلة عن بعضها، فيفقد العلاقات المشتركة بينها. لم يكن هناك نموذج يحصد فوائد السياق دون هذه التنازلات.
الإسهام
XLNet هو أسلوب تدريب مسبق مُعمَّم يمنح النموذج فهماً ثنائي الاتجاه للسياق دون الحاجة إلى تقنيع أي رمز. الفكرة الجوهرية هي : بدلاً من التنبؤ دائماً من اليسار إلى اليمين، يُدرَّب النموذج على تعظيم الاحتمالية المتوقعة عبر جميع ترتيبات التحليل الممكنة للتسلسل. بهذا يرى كل رمز سياقاً من الاتجاهين دون التخلي عن قاعدة الضرب الذاتية الانحدارية، فيتجنّب مشكلتَي BERT: افتراض الاستقلال . ولتنفيذ هذه الفكرة، يستخدم XLNet انتباهاً ذاتياً ثنائي التدفق يتكوّن من تيار للمحتوى وتيار للاستعلام، ويدمج آلية من Transformer-XL لالتقاط الاعتماديات بعيدة المدى. تفوّق النموذج على BERT في 20 مهمة وحقّق أفضل أداء في 18 منها، تشمل SQuAD وGLUE وRACE وترتيب المستندات.
الأثر
أظهر XLNet أن النماذج ذاتية الانحدار قادرة على منافسة نماذج التقنيع الثنائية الاتجاه وتجاوزها إذا دُرِّبت بأسلوب التبديل. كما أكّد أن آلية التكرار المستعارة من Transformer-XL عنصر أساسي في التعامل مع السياق الطويل. صحيح أن نماذج لاحقة مثل RoBERTa أثبتت أن تحسين إعدادات تدريب BERT يردم جزءاً من الفجوة، لكن فكرة نمذجة اللغة بالتبديل أثّرت في أعمال تالية مثل UniLM وMPNet. وتحوّلت ثنائي التدفق إلى مرجع معماري للمهام التي تتطلب تنبؤاً يراعي الموضع من غير تسريب معلومات.
تخيّل أنك تُركّب أحجية (Puzzle)، لكنك في كل مرة تبدأ من مكان مختلف: مرة تبدأ بقطع السماء، ومرة بالعشب، ومرة بالمنزل في الوسط. بعد أن تُركّب الأحجية نفسها عشرات المرات بترتيبات مختلفة، تصبح تفهم علاقة كل قطعة بكل قطعة أخرى — لا بجارتها المباشرة فقط.
هذا بالضبط ما يفعله XLNet مع الجمل. BERT يتبع أسلوباً مختلفاً: يُغطّي بعض القطع ويحاول تخمينها، لكنه لا يتعلّم في أي ترتيب تترابط هذه القطع. GPT يسير دائماً من اليسار إلى اليمين فلا يرى إلا ما سبقه. أما XLNet فيُغيّر ترتيب التركيب في كل مرة — مع الالتزام بقاعدة «قطعة واحدة في كل خطوة» — حتى يتعلّم في النهاية كل العلاقات من كل الاتجاهات.
المشكلة: معسكران وتنازلان
بحلول 2019، كان التدريب المسبق للنماذج اللغوية قد انقسم إلى مدرستين، كل منهما تحمل قيداً جوهرياً.
مثل GPT تُفكّك الاحتمال المشترك للتسلسل إلى سلسلة من ، دائماً من اليسار إلى اليمين: P(x₁) · P(x₂|x₁) · P(x₃|x₁,x₂) · ... الأسلوب نظيف رياضياً — كل يُتنبَّأ به من توزيع احتمالي حقيقي. لكن المشكلة أن النموذج لا يرى إلا ما يسبق الكلمة الحالية. في مهمة مثل الإجابة عن الأسئلة — حيث قد تعتمد الإجابة على كلمات تأتي قبل الموضع المطلوب وبعده — تتحوّل هذه الرؤية الأحادية إلى عائق حقيقي.
نماذج الترميز الذاتي مثل BERT تتغلّب على ذلك بإخفاء رموز عشوائية ثم التنبؤ بها اعتماداً على كامل السياق المحيط — يميناً ويساراً. لكن هذا الحل يأتي بثمنين. الأول هو الفجوة بين التدريب المسبق والضبط الدقيق: في أثناء التدريب المسبق يتعامل BERT مع رموز [MASK] مصطنعة، لكن هذه الرموز تختفي تماماً عند الضبط الدقيق — فينشأ عدم تطابق بين التوزيعين. الثمن الثاني هو افتراض الاستقلال: BERT يتنبأ بكل الرموز المُخفاة دفعة واحدة كأنها مستقلة عن بعضها. مثلاً، إذا أُخفيت كلمتا «نيو» و«يورك» معاً، يتنبأ بكل منهما على حدة دون أن يلتقط العلاقة المشتركة بينهما.
الفكرة المحورية: نمذجة اللغة بالتبديل
فكرة XLNet أنيقة وبسيطة: بدلاً من الاختيار بين التحليل من اليسار إلى اليمين كما في GPT، أو التقنيع كما في BERT — لماذا لا نُحلّل احتمالية التسلسل بكل ممكن؟
لنأخذ مثالاً عملياً: جملة من أربعة رموز: [x₁, x₂, x₃, x₄]. النموذج الذاتي الانحداري التقليدي يُحلّلها دائماً بالترتيب: P(x₁) · P(x₂|x₁) · P(x₃|x₁,x₂) · P(x₄|x₁,x₂,x₃).
لكن هذا ترتيب واحد فقط من أصل 4! = 24 ترتيباً ممكناً. تخيّل أننا جرّبنا الترتيب [x₃, x₁, x₄, x₂]، فنحسب: P(x₃) · P(x₁|x₃) · P(x₄|x₃,x₁) · P(x₂|x₃,x₁,x₄).
لاحظ ما حدث: عند التنبؤ بـ x₂، استخدم النموذج x₃ وx₁ وx₄ كسياق — أي أن x₂ رأى سياقاً من يمينه ويساره معاً، رغم أن التحليل ظل ذاتي الانحدار بالكامل. حين نُدرّب على جميع التبديلات الممكنة (بالقيمة المتوقعة)، يرى كل رمز في النهاية كل رمز آخر كسياق. النتيجة: فهم ثنائي الاتجاه بهدف ذاتي الانحدار نظيف — بلا رموز [MASK] وبلا افتراض استقلال.
النقطة الحاسمة هنا أن XLNet لا يُحرّك الرموز من أماكنها. الرموز تبقى في مواضعها الأصلية تماماً. ما يتغيّر هو التي تتحكّم في أي الرموز يُسمح لها برؤية أي رموز أخرى — وبذلك يُحاكي النموذج ترتيب التحليل المُبدَّل مع الحفاظ على الطبيعي.
الآلية: الانتباه الذاتي ثنائي التدفق
نمذجة اللغة بالتبديل تطرح تحدّياً تقنياً دقيقاً. حين يريد النموذج التنبؤ بالرمز عند الموضع z_t، يحتاج أن يعرف أين يقع هذا الرمز (موضعه)، لكن يجب ألّا يرى ما هو (محتواه) — وإلا أصبح التنبؤ بلا معنى لأن الإجابة أمامه. في المقابل، الرموز التي تُشكّل السياق (المواضع التي سبقت z_t في التبديل) يحتاج النموذج إلى مواضعها ومحتوياتها معاً.
تخيّل طاولة اجتماع: كل مشارك (رمز) يحمل بطاقة باسمه (الموضع) ومجلّداً فيه معلوماته (المحتوى). حين يحين دورك للعرض، يعرف رئيس الجلسة أين تجلس لأنه يرى بطاقتك، لكنه يسحب مجلّدك — لا يعرف ماذا تحمل من معلومات. أما بقية الحاضرين فبطاقاتهم ومجلّداتهم مرئية. هذا التباين بين «أعرف أين أنت لكن لا أعرف ماذا تحمل» هو بالضبط ما يحتاجه XLNet.
القياسي لا يستطيع تحقيق ذلك — فهو إما يرى الرمز بالكامل أو لا يراه أبداً. حلّ XLNet هو ، الذي يتكوّن من تيارين يعملان بالتوازي:
يعمل تماماً كـ المعتاد: يرى موضع ومحتوى جميع الرموز بما فيها الرمز نفسه، ويبني التمثيل السياقي.
يرى مواضع جميع الرموز، لكنه لا يرى المحتوى إلا لتلك التي سبقته في ترتيب التبديل الحالي — ولا يرى محتوى نفسه. هذا التيار هو المسؤول فعلياً عن التنبؤ.
السياق طويل المدى: دمج Transformer-XL
المحوِّلات القياسية تعمل ضمن ثابتة — عادةً 512 رمزاً في حالة BERT. أي شيء خارج هذه النافذة لا يراه النموذج. يستعير XLNet من Transformer-XL فكرتين ذكيتين لتجاوز هذا القيد:
التكرار على مستوى المقاطع: بعد أن يُعالج النموذج مقطعاً من النص، يحتفظ بـ من جميع الطبقات في ذاكرة مؤقتة. حين ينتقل إلى المقطع التالي، تتحوّل هذه الحالات المُخزّنة إلى سياق إضافي يستطيع النموذج الانتباه إليه. الأمر أشبه بنافذة منزلقة في الذاكرة: النموذج يُجزّئ النص إلى قطع ثابتة الطول، لكن كل قطعة تستطيع «النظر للخلف» إلى تمثيلات القطعة السابقة. هذا يمدّ السياق الفعلي إلى ما هو أبعد بكثير من طول أي مقطع بمفرده.
: بما أن النموذج أصبح يُوجّه انتباهه عبر حدود المقاطع، فإن (كتلك المستخدمة في BERT) ستُسبّب ارتباكاً — الموضع 0 في المقطع الثاني ليس الموضع 0 في المقطع الأول. يستخدم XLNet ترميزاً موضعياً نسبياً يعتمد على المسافة بين الرموز بدلاً من مواقعها المطلقة، فيستطيع النموذج مدّ الانتباه عبر المقاطع بسلاسة دون تعارض في المواضع.
التنبؤ الجزئي: كفاءة دون التضحية بالجودة
لو طبّقنا نمذجة اللغة بالتبديل حرفياً، لاحتجنا إلى التنبؤ بكل رمز في كل تبديل — وهذا مُكلف حسابياً بشكل هائل. الحل العملي الذي يعتمده XLNet هو التنبؤ الجزئي: بدلاً من التنبؤ بجميع الرموز الـ T، يكتفي بالتنبؤ بآخر c رمز فقط في كل تسلسل مُبدَّل (تُختار c بحيث تكون نسبة الرموز المتنبَّأ بها نحو 15%، قريبة من نسبة التقنيع في BERT).
لماذا نختار الرموز الأخيرة تحديداً؟ السبب بسيط: في أي ترتيب مُبدَّل، الرموز المتأخرة هي التي تملك أغنى سياق — فقد «شاهدت» أكبر عدد من الرموز الأخرى قبل أن يحين دورها. أما الرموز في بداية التبديل فسياقها شحيح جداً، وتنبؤاتها تكون مشوّشة وقليلة الفائدة. بالتركيز على المواضع الغنية بالمعلومات، يحصل النموذج على إشارة تعلّم أقوى مقابل كل وحدة حساب يستهلكها.
الفكرة في الكود
مبسَّط لإظهار الفكرة — ليس التنفيذ الحقيقي.
import numpy as np
def sample_permutation(seq_len):
"""اختر ترتيب تحليل عشوائي."""
return np.random.permutation(seq_len)
def build_attention_mask(perm, predict_start):
"""ابنِ قناع الانتباه الذي يفرض الترتيب المُبدَّل.
للموضع perm[t]:
- تيار المحتوى: يرى perm[0], ..., perm[t] (بما فيه نفسه)
- تيار الاستعلام: يرى perm[0], ..., perm[t-1] (بدون نفسه)
التنبؤ فقط من predict_start فصاعداً (تنبؤ جزئي).
"""
T = len(perm)
content_mask = np.zeros((T, T), dtype=bool)
query_mask = np.zeros((T, T), dtype=bool)
for t in range(T):
pos = perm[t]
# المواضع المرئية: كل ما سبق في التبديل
for s in range(t + 1):
content_mask[pos, perm[s]] = True # المحتوى يرى نفسه + السابقين
for s in range(t):
query_mask[pos, perm[s]] = True # الاستعلام يرى السابقين فقط
return content_mask, query_mask
def xlnet_loss(model, tokens, predict_ratio=0.15):
"""خطوة تدريب واحدة لنمذجة اللغة بالتبديل في XLNet."""
T = len(tokens)
perm = sample_permutation(T)
# تنبأ فقط بآخر 15% من الرموز في هذا التبديل
predict_start = int(T * (1 - predict_ratio))
content_mask, query_mask = build_attention_mask(perm, predict_start)
# تمرير أمامي بالانتباه ثنائي التدفق
content_h, query_g = model.two_stream_forward(
tokens, content_mask, query_mask
)
# احسب الخسارة على المواضع المُتنبَّأ بها فقط
loss = 0
count = 0
for t in range(predict_start, T):
pos = perm[t]
logits = query_g[pos] @ model.vocab_proj.T
loss += cross_entropy(logits, tokens[pos])
count += 1
return loss / count
# الفكرة الأساسية: الرموز لا تتحرّك أبداً! فقط أقنعة الانتباه تتغير.
# التبديل يُحدّد مَن يرى مَن — وليس أين تجلس الرموز.البنية: تجميع كل القطع معاً
يأتي XLNet بحجمين صُمِّما ليوازيا أحجام BERT لتكون المقارنة عادلة:
- XLNet-Base: 12 طبقة، 768 بُعداً خفياً، 12 رأس انتباه — يوازي BERT-Base
- XLNet-Large: 24 طبقة، 1024 بُعداً خفياً، 16 رأس انتباه — يوازي BERT-Large
البنية في جوهرها هي Transformer-XL مُعدَّل بآلية الانتباه الذاتي ثنائي التدفق. كل طبقة تُشغّل تيار المحتوى وتيار الاستعلام بالتوازي، ولكل تيار قناع انتباه مستقل. تيار المحتوى يعمل بـالانتباه الذاتي القياسي (يرى نفسه والسياق السابق). تيار الاستعلام يستخدم قناعاً مُقيَّداً يحجب محتوى الرمز المستهدف.
عند الضبط الدقيق، يُستغنى عن تيار الاستعلام — تيار المحتوى وحده يكفي، وهو يسلك سلوك محوِّل قياسي تماماً. لذلك فإن الضبط الدقيق في XLNet بسيط كما في BERT: نُضيف رأس مهمة فوق النموذج ونضبط جميع المعاملات.
النتائج: تفوّق على BERT في 20 مهمة
عند المقارنة في ظروف متكافئة (البيانات نفسها وحجم النموذج متقارب)، تفوّق XLNet على BERT في كل اختُبر عليه:
- SQuAD 1.1: ارتفعت دقة F1 من 94.9 (BERT) إلى 95.5 (XLNet) — فهم القراءة مع إجابات مضمونة
- SQuAD 2.0: من 89.1 إلى 90.6 — ويشمل أسئلة قد لا تملك إجابة
- RACE (فهم القراءة): الدقة قفزت من 81.8 إلى 85.0 — نتيجة لافتة لأن RACE يتطلّب استدلالاً على فقرات طويلة
- : حقّق XLNet-Large أفضل النتائج على عدة مهام
- تصنيف النصوص: تحسينات واضحة على مجموعات Yelp وIMDB وDBpedia وAG News ومراجعات Amazon
- ترتيب المستندات (ClueWeb09-B): تقدّم ملموس على BERT
اللافت أن XLNet حقّق كل ذلك بدون (NSP). أكّدت أن NSP لم تُضِف شيئاً للأداء، وهو ما أكّده RoBERTa لاحقاً بشكل مستقل.
XLNet في مشهد النماذج اللغوية
2017
المحوِّل
بنية الانتباه الذاتي التي حلّت محل التكرار. تصميمه القائم على مرمِّز وفاكّ ترميز فتح الباب أمام BERT وGPT معاً.
2018
GPT-1
تدريب مسبق ذاتي الانحدار يقرأ النص من اليسار إلى اليمين. أثبت جدوى التدريب المسبق غير المُشرف ثم الضبط الدقيق، لكنه لا يرى السياق إلا من اتجاه واحد.
2018
BERT
نمذجة اللغة المُقنَّعة تتيح رؤية السياق من الاتجاهين. تصدّر 11 معياراً، لكنه يُدخل فجوة رمز [MASK] ويتعامل مع الرموز المُقنَّعة كأنها مستقلة عن بعضها.
2019
Transformer-XL
يعتمد التكرار على مستوى المقاطع والترميز الموضعي النسبي لالتقاط الاعتماديات بعيدة المدى. شكّل الأساس المعماري الذي بنى عليه XLNet.
2019
XLNet
يجمع بين نمذجة اللغة بالتبديل والانتباه ثنائي التدفق وتكرار Transformer-XL. تفوّق على BERT في 20 مهمة دون استخدام رموز [MASK].
2019
RoBERTa
أظهر أن تحسين إعدادات تدريب BERT (بيانات أكثر، تدريب أطول، حذف NSP) يردم جزءاً من الفارق مع XLNet، مما يؤكد أن المنهجيتين كلتيهما فعّالتان.
2020
ELECTRA
استبدل التقنيع بمهمة كشف الرموز المُستبدَلة، فيحصل كل رمز على إشارة تدريبية. حقّق نتائج بمستوى BERT بتكلفة حسابية أقل بكثير.
أثر XLNet مزدوج. من جهة، أثبت أن الإطار الذاتي الانحداري أمرن بكثير مما كان يُظنّ — فمع التدريب بالتبديل يستطيع التقاط سياق ثنائي الاتجاه بكفاءة تُضاهي أساليب التقنيع. من جهة أخرى، أبرز أهمية التعامل مع السياق بعيد المدى عبر آلية التكرار في Transformer-XL. ورغم أن النماذج اللاحقة سلكت مسارات مختلفة — RoBERTa عاد إلى تدريب BERT بصورة أبسط، وELECTRA اتّجه نحو أهداف تدريبية أكفأ — إلا أن ابتكارات XLNet تركت بصمتها على بنيات مثل UniLM وMPNet التي واصلت استكشاف المنطقة الوسطى بين التدريب الذاتي الانحداري والترميز الذاتي.
المرجعYang, Dai, Yang, Carbonell, Salakhutdinov, Le. XLNet: Generalized Autoregressive Pretraining for Language Understanding. NeurIPS, 2019.
مصطلحات هذه الورقة
- نمذجة اللغة بالتبديلPermutation Language Modeling
- النموذج التوليدي التراجعيAutoregressive Model
- ثنائي الاتجاهBidirectional
- الانتباه الذاتي ثنائي التدفقTwo-Stream Self-Attention
- تيار المحتوىContent Stream
- تيار الاستعلامQuery Stream
- قناع آلية الانتباهAttention Mask
- التكرار على مستوى المقاطعSegment-Level Recurrence
- الترميز الموضعي النسبيRelative Positional Encoding
- الضبط الدقيقFine-Tuning
- التدريب المسبقPretraining
- نمذجة اللغة المُقنَّعة (MLM)Masked Language Modeling (MLM)
- نافذة السياقContext Window
- الحالة المخفيةHidden State