Masked LM
- Makine Öğrenmesi kursu
- Uzman
- Ders 18/44
- 5 dk
BERT, eğitim sırasında rastgele kelimeleri maskeleyip tahmin eder.
Maskeli dil modeli
BERT'in ön eğitim görevi maskeli dil modelidir (MLM): belirteçlerin %15'i seçilir ve model bunları bağlamdan tahmin eder. Seçilenlere 80/10/10 kuralı uygulanır:
- %80'i
[MASK]ile değiştirilir, - %10'u rastgele bir kelimeyle değiştirilir,
- %10'u olduğu gibi bırakılır.
"film çok [MASK] di" -> model "güzel" tahmin etmeliKayıp yalnızca seçilen konumlarda hesaplanır; diğer %85 için tahmin istenmez.
Maskelemeyi uygulamak
Rastgele sayılarla üç grup ayrılır. Etiket dizisi, seçilmeyen konumlarda -100 olur; PyTorch'un çapraz entropisi bu değeri yok sayar:
secim = rng.random(n) < 0.15
r = rng.random(n)
maskeli = secim & (r < 0.8)
rastgele = secim & (r >= 0.8) & (r < 0.9)
giris = ids.copy()
giris[maskeli] = MASK_ID
giris[rastgele] = rng.integers(5, V, rastgele.sum())
etiket = np.where(secim, ids, -100)Özel belirteçler ([CLS], [SEP], [PAD]) maskelemeden hariç tutulur.
Uygulama MLM maskelemesi
100 000 belirteçlik rastgele bir dizide 80/10/10 kuralıyla maskeleme uygula. Seçilen oranı, seçilenler içinde [MASK], rastgele ve değişmeyen oranlarını round(..., 2) ile aynı satırda yazdır. Ardından etiketlerin kaçının -100 olmadığını (seçilen sayısıyla aynı olduğunu) == ile yazdır.
Başlangıç kodu
import numpy as np
rng = np.random.default_rng(0)
V, MASK_ID, n = 15, 4, 100_000
ids = rng.integers(5, V, n)
# buraya yazÖrnek çözüm
import numpy as np
rng = np.random.default_rng(0)
V, MASK_ID, n = 15, 4, 100_000
ids = rng.integers(5, V, n)
secim = rng.random(n) < 0.15
r = rng.random(n)
maskeli = secim & (r < 0.8)
rastgele = secim & (r >= 0.8) & (r < 0.9)
ayni = secim & (r >= 0.9)
giris = ids.copy()
giris[maskeli] = MASK_ID
giris[rastgele] = rng.integers(5, V, rastgele.sum())
etiket = np.where(secim, ids, -100)
k = secim.sum()
print(round(secim.mean(), 2), round(maskeli.sum() / k, 2), round(rastgele.sum() / k, 2), round(ayni.sum() / k, 2))
print((etiket != -100).sum() == k)Beklenen çıktı
0.15 0.8 0.1 0.1 True
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Seçilen belirteçlerin bir kısmı neden [MASK] yerine olduğu gibi bırakılır?
- Sözlüğü küçültmek
- Kaybı sıfırlamak
- İnce ayarda [MASK] görünmediği için eğitim ile kullanım arasındaki farkı azaltmak Doğru cevap
- Hesabı hızlandırmak
Açıklama: Model, gerçek kelimelerin de temsilini öğrenmek zorunda kalır.
2 Seçilmeyen konumları kayıptan çıkar.
etiket = np.where(secim, ids, ____)
etiket = np.where(secim, ids, -100)
Açıklama: CrossEntropyLoss'un varsayılan ignore_index değeri -100'dür.
3 Oranları eşleştir.
| Kavram | Anlamı |
|---|---|
seçim |
%15 |
[MASK] |
Seçilenlerin %80'i |
rastgele kelime |
Seçilenlerin %10'u |
değişmez |
Seçilenlerin kalan %10'u |