Makine Öğrenmesi
CLS token
CLS token, sınıflandırma görevleri için tüm dizinin özetini taşır.
[CLS] ve [SEP]
BERT girişinin başına [CLS], her cümlenin sonuna [SEP] konur. Cümle çifti görevlerinde (doğal dil çıkarımı, soru-cevap) segment kimlikleri (token_type_ids) hangi belirtecin hangi cümleye ait olduğunu söyler:
[CLS] film güzel ##di [SEP] oyun ##cu ##lar iyi [SEP]
0 0 0 0 0 1 1 1 1 1 <- token_type_ids
Sınıflandırmada son katmandaki [CLS] vektörü (konum 0) tüm cümlenin özeti olarak kullanılır; dikkat sayesinde bu konum tüm belirteçlerden bilgi toplar.
Dikkat maskesi ve dolgu
Yığındaki girişler aynı uzunluğa dolgulanır; attention_mask gerçek belirteçlerde 1, dolguda 0'dır. Tokenizer üç diziyi birlikte döndürür:
{"input_ids": [2, 5, 7, 8, 3, 0, 0],
"token_type_ids": [0, 0, 0, 0, 0, 0, 0],
"attention_mask": [1, 1, 1, 1, 1, 0, 0]}
BERT'in en uzun girişi 512 belirteçtir; daha uzun metinler kesilir ya da parçalara bölünür.
Uygulama BERT girişi kur
Verilen wordpiece ve sözlükle kodla(a, b=None, n=12) fonksiyonunu yaz: [CLS] a [SEP] (varsa b [SEP]), segment kimlikleri (ikinci cümle 1), dolgu ve dikkat maskesi. kodla("film güzeldi", "oyuncular iyi") sonucunun üç dizisini alt alta yazdır.
Örnek çözümü göster
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
def parcala(metin):
return [p for k in metin.split() for p in wordpiece(k)]
def kodla(a, b=None, n=12):
parcalar = ["[CLS]"] + parcala(a) + ["[SEP]"]
tip = [0] * len(parcalar)
if b:
ek = parcala(b) + ["[SEP]"]
parcalar += ek
tip += [1] * len(ek)
ids = [sozluk[p] for p in parcalar]
maske = [1] * len(ids)
dolgu = n - len(ids)
return ids + [0] * dolgu, tip + [0] * dolgu, maske + [0] * dolgu
for dizi in kodla("film güzeldi", "oyuncular iyi"):
print(dizi)
Kendini test et
-
BERT'in sınıflandırma başı hangi konumun vektörünü kullanır?
- Son [SEP]
- Tüm konumların toplamı
- Rastgele bir konum
- [CLS] (konum 0)
Cevabı göster
[CLS] (konum 0) — Ön eğitimdeki sonraki-cümle görevi de [CLS] üzerinden yapılmıştı.
-
Cümleyi ayırıcıyla bitir.
parcalar = ["[CLS]"] + a + ["____"]
Cevabı göster
parcalar = ["[CLS]"] + a + ["[SEP]"]
-
Dizileri eşleştir.
- input_ids
- Belirteç kimlikleri
- token_type_ids
- Hangi cümle
- attention_mask
- Gerçek mi dolgu mu
- [CLS] çıktısı
- Cümle özeti
Sıradaki ders: Özet - BERT