Özet - BERT
- Makine Öğrenmesi kursu
- Uzman
- Ders 22/44
- 6 dk
Bu grupta BERT, masked LM ve fine-tuning'i öğrendin.
Özet: BERT
Bu grupta:
- BERT, çift yönlü bir transformer encoder yığınıdır (base: 12 katman, 768, ~110M).
- Ön eğitim: belirteçlerin %15'i seçilir, 80/10/10 kuralıyla bozulur; kayıp yalnızca seçilenlerde.
- WordPiece, kelimeleri en uzun sözlük parçalarına böler; devam parçaları
##ile işaretlenir. - İnce ayar: küçük öğrenme oranı, ısınma + doğrusal azalma, küçük bir görev başı.
- Giriş:
[CLS] … [SEP] … [SEP], segment kimlikleri ve dikkat maskesi; sınıflandırma [CLS] vektörünü kullanır.
Uygulama Uçtan uca MLM örneği
Verilen yardımcılarla "film çok güzeldi" cümlesini [CLS] … [SEP] olarak kodla. "güzel" parçasını [MASK] ile değiştir ve etiket dizisini (yalnızca o konumda gerçek kimlik, diğerleri -100) kur. Girişi ve etiketleri alt alta, ardından maskeli girişin belirteçlerini (kimlikten geri çevirerek) yazdır.
Başlangıç kodu
sozluk = {"[PAD]": 0, "[UNK]": 1, "[CLS]": 2, "[SEP]": 3, "[MASK]": 4,
"film": 5, "çok": 6, "güzel": 7, "##di": 8, "oyun": 9, "##cu": 10,
"##lar": 11, "iyi": 12, "kötü": 13, "##ydi": 14}
def wordpiece(kelime):
parca, bas = [], 0
while bas < len(kelime):
son = len(kelime)
while son > bas:
aday = kelime[bas:son] if bas == 0 else "##" + kelime[bas:son]
if aday in sozluk:
break
son -= 1
if son == bas:
return ["[UNK]"]
parca.append(aday)
bas = son
return parca
ters = {v: k for k, v in sozluk.items()}
# buraya yazÖrnek çözüm
sozluk = {"[PAD]": 0, "[UNK]": 1, "[CLS]": 2, "[SEP]": 3, "[MASK]": 4,
"film": 5, "çok": 6, "güzel": 7, "##di": 8, "oyun": 9, "##cu": 10,
"##lar": 11, "iyi": 12, "kötü": 13, "##ydi": 14}
def wordpiece(kelime):
parca, bas = [], 0
while bas < len(kelime):
son = len(kelime)
while son > bas:
aday = kelime[bas:son] if bas == 0 else "##" + kelime[bas:son]
if aday in sozluk:
break
son -= 1
if son == bas:
return ["[UNK]"]
parca.append(aday)
bas = son
return parca
ters = {v: k for k, v in sozluk.items()}
parcalar = ["[CLS]"] + [p for k in "film çok güzeldi".split() for p in wordpiece(k)] + ["[SEP]"]
ids = [sozluk[p] for p in parcalar]
i = parcalar.index("güzel")
giris = ids.copy()
giris[i] = sozluk["[MASK]"]
etiket = [ids[j] if j == i else -100 for j in range(len(ids))]
print(giris)
print(etiket)
print([ters[t] for t in giris])Beklenen çıktı
[2, 5, 6, 4, 8, 3] [-100, -100, -100, 7, -100, -100] ['[CLS]', 'film', 'çok', '[MASK]', '##di', '[SEP]']
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 MLM'de 1000 belirteçlik bir metinde yaklaşık kaç belirteç [MASK] ile değiştirilir?
- 800
- 15
- 120 Doğru cevap
- 150
Açıklama: 1000 × 0.15 = 150 seçilir; bunların %80'i = 120.
2 Kayıpta yok sayılacak etiketi ver.
kayip = nn.CrossEntropyLoss(ignore_index=____)
kayip = nn.CrossEntropyLoss(ignore_index=-100)
Açıklama: Seçilmeyen konumların etiketi -100'dür.
3 Eşleştir.
| Kavram | Anlamı |
|---|---|
MLM |
Ön eğitim görevi |
WordPiece |
Alt-kelime bölme |
[CLS] |
Sınıflandırma vektörü |
ısınma |
Kararlı başlangıç |