Veri hazırlama
- Makine Öğrenmesi kursu
- Uzman
- Ders 13/44
- 7 dk
Dizi verisini tensor'a dönüştürürsün.
Proje: duygu sınıflandırıcı
Bu projede küçük bir transformer encoder'ı NumPy ile adım adım kuracak ve kısa Türkçe cümleleri olumlu/olumsuz diye ayıracaksın. Birinci adım veriyi sayılara çevirmektir:
- Sözlük kur: her kelimeye bir kimlik (id) ver; 0 dolgu (
<pad>) için ayrılır. - Her cümleyi kimlik listesine çevir.
- Hepsini aynı uzunluğa getir (doldur ya da kes).
sozluk = {"<pad>": 0}
for c in metinler:
for k in c.split():
sozluk.setdefault(k, len(sozluk))setdefault, kelime yoksa sıradaki numarayla ekler, varsa dokunmaz.
Dolgu maskesi
Dolgu konumları gerçek kelime değildir; dikkat onlara bakmamalıdır. Bunun için bir boolean dolgu maskesi tutulur:
def kodla(c, n=5):
ids = [sozluk[k] for k in c.split()][:n]
return ids + [0] * (n - len(ids))
X = np.array([kodla(c) for c in metinler]) # (5, 5)
pad = X == 0 # True = dolguSonraki derste bu maske, dolgu sütunlarının skorunu çok küçük bir sayıya çekerek ağırlıklarını sıfırlayacak.
Uygulama Cümleleri kodla
Verilen sözlükle kodla(c, n=5) fonksiyonunu yaz (kes ve doldur). X matrisini ve pad maskesini oluştur. Sözlük boyutunu, X'i ve her cümledeki gerçek kelime sayısını ((~pad).sum(axis=1)) alt alta yazdır.
Başlangıç kodu
import numpy as np
metinler = ["film çok iyi", "çok kötü bir film", "iyi", "oyuncular iyi ama senaryo kötü", "kötü"]
sozluk = {"<pad>": 0}
for c in metinler:
for k in c.split():
sozluk.setdefault(k, len(sozluk))
# buraya yazÖrnek çözüm
import numpy as np
metinler = ["film çok iyi", "çok kötü bir film", "iyi", "oyuncular iyi ama senaryo kötü", "kötü"]
sozluk = {"<pad>": 0}
for c in metinler:
for k in c.split():
sozluk.setdefault(k, len(sozluk))
def kodla(c, n=5):
ids = [sozluk[k] for k in c.split()][:n]
return ids + [0] * (n - len(ids))
X = np.array([kodla(c) for c in metinler])
pad = X == 0
print(len(sozluk))
print(X)
print((~pad).sum(axis=1))Beklenen çıktı
9 [[1 2 3 0 0] [2 4 5 1 0] [3 0 0 0 0] [6 3 7 8 4] [4 0 0 0 0]] [3 4 1 5 1]
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Neden tüm cümleler aynı uzunluğa getirilir?
- Doğruluğu artırmak için
- Sözlüğü küçültmek için
- Dikkati kapatmak için
- Yığın hâlinde tek bir dizi (matris) olarak işlemek için Doğru cevap
Açıklama: NumPy dizileri dikdörtgen olmalıdır.
2 Eksik konumları 0 ile doldur.
return ids + [0] * (n - ____(ids))
return ids + [0] * (n - len(ids))
Açıklama: Eklenecek dolgu sayısı n − uzunluktur.
3 Eşleştir.
| Kavram | Anlamı |
|---|---|
sozluk["<pad>"] |
0 |
X.shape |
(5, 5) |
pad |
Dolgu konumları |
setdefault |
Yoksa ekler |