Makine Öğrenmesi
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.
Örnek çözümü göster
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)
Kendini test et
-
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
- Hesabı hızlandırmak
Cevabı göster
İnce ayarda [MASK] görünmediği için eğitim ile kullanım arasındaki farkı azaltmak — Model, gerçek kelimelerin de temsilini öğrenmek zorunda kalır.
-
Seçilmeyen konumları kayıptan çıkar.
etiket = np.where(secim, ids, ____)
Cevabı göster
etiket = np.where(secim, ids, -100)
-
Oranları eşleştir.
- seçim
- %15
- [MASK]
- Seçilenlerin %80'i
- rastgele kelime
- Seçilenlerin %10'u
- değişmez
- Seçilenlerin kalan %10'u
Sıradaki ders: Tokenization