BERT
تمثيلات ثنائية الاتجاه من المحوّلات: التدريب بالكلمات المقنَّعة، والرمز CLS، والضبط الدقيق.
المدخل
[CLS] الطقس جميل اليوم [SEP] سنخرج إلى الحديقة [SEP]لكل رمز ثلاثة تضمينات تُجمع: الرمز، والموضع، والمقطع (الجملة الأولى أو الثانية).
التدريب المسبق
- MLM: تُختار 15% من الرموز؛ 80% منها تُستبدل بـ
[MASK]، و10% برمز عشوائي، و10% تبقى، ويتنبأ النموذج بالأصل. - NSP: هل الجملة الثانية تتبع الأولى فعلاً؟ (أُزيلت في تطويرات لاحقة مثل RoBERTa.)
الأحجام الأصلية
| النموذج | الطبقات | الأبعاد | الرؤوس | المعاملات |
|---|---|---|---|---|
| BERT-Base | 12 | 768 | 12 | ~110 مليون |
| BERT-Large | 24 | 1024 | 16 | ~340 مليون |
الضبط الدقيق للتصنيف
from datasets import load_dataset
from transformers import (AutoTokenizer, AutoModelForSequenceClassification,
TrainingArguments, Trainer)
import numpy as np, evaluate
name = "bert-base-uncased"
ds = load_dataset("imdb") # يُنزَّل عند أول استخدام
tok = AutoTokenizer.from_pretrained(name)
ds = ds.map(lambda b: tok(b["text"], truncation=True, max_length=256), batched=True)
model = AutoModelForSequenceClassification.from_pretrained(name, num_labels=2)
acc = evaluate.load("accuracy")
def metrics(p):
return acc.compute(predictions=np.argmax(p.predictions, -1), references=p.label_ids)
args = TrainingArguments("out-bert", learning_rate=2e-5, per_device_train_batch_size=16,
num_train_epochs=2, eval_strategy="epoch", weight_decay=0.01)
trainer = Trainer(model=model, args=args, train_dataset=ds["train"].shuffle(seed=0).select(range(4000)),
eval_dataset=ds["test"].shuffle(seed=0).select(range(2000)),
processing_class=tok, compute_metrics=metrics)
trainer.train()أسماء بعض المعاملات تتغير بين إصدارات المكتبة؛ راجع التوثيق للإصدار المثبت لديك. يُفضّل تشغيل هذا المثال على GPU.
إرشادات الضبط
- معدل تعلم صغير (\(2\times10^{-5}\) إلى \(5\times10^{-5}\)) وحقب قليلة (2–4).
- طول أقصى مناسب للبيانات؛ الحد الأقصى في BERT الأصلي 512 رمزاً.
- كرر التجربة ببذور عشوائية مختلفة؛ نتائج الضبط الدقيق قد تتفاوت بين التشغيلات.
مصطلحات الدرس
- الانتباه ثنائي الاتجاه Bidirectional Attention
- انتباه يسمح لكل رمز برؤية الرموز السابقة واللاحقة معاً.
- الرمز [CLS] Classification Token
- رمز خاص يوضع في بداية المدخل، ويُستخدم تمثيله النهائي ملخصاً للتسلسل في مهام التصنيف.
- نمذجة اللغة المقنَّعة Masked Language Modeling
- مهمة تدريب مسبق تُخفى فيها نسبة من الرموز عشوائياً ويتنبأ النموذج بها من السياق المحيط.
الملخص
BERT الذي قدمه Devlin وزملاؤه في Google عام 2018 مشفر محوّل يُدرب مسبقاً على مهمتين: التنبؤ بالكلمات المقنَّعة (MLM) والتنبؤ بالجملة التالية (NSP). لأن الانتباه ثنائي الاتجاه، يستفيد تمثيل كل كلمة من السياق السابق واللاحق. يُضبط ضبطاً دقيقاً بإضافة طبقة بسيطة فوق تمثيل الرمز [CLS] للتصنيف أو فوق تمثيلات الرموز للوسم، وحقق عند صدوره أفضل النتائج في مجموعة واسعة من معايير الفهم.
أسئلة مراجعة
-
ما نسبة الرموز المقنَّعة في تدريب BERT الأصلي؟
15% من الرموز، يُستبدل 80% منها بـ [MASK] و10% برمز عشوائي و10% تبقى كما هي.
-
لماذا لا يناسب BERT توليد النصوص الطويلة مباشرة؟
لأنه مشفر ثنائي الاتجاه دُرب على ملء الفراغات وليس على التنبؤ بالرمز التالي تسلسلياً.
المصادر والمراجع
إكمال الدرس
أكملت كل دروس المسار! يمكنك الآن طلب شهادة إكمال المسار.
اطلب الشهادة