CodeBlanks Logo Icon CodeBlanks

Masked LM

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 etmeli

Kayı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

model.py
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

model.py
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.

Soru
etiket = np.where(secim, ids, ____)
Cevap
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

Uzman bölümündeki tüm dersler