Embedding
- Makine Öğrenmesi kursu
- İleri seviye
- Ders 51/78
- 5 dk
Embedding katmanı, kelime indekslerini yoğun vektörlere dönüştürür.
Embedding
Kelimeler sayı değildir; her kelimeye bir indeks verilir ve nn.Embedding her indeksi öğrenilen bir vektöre çevirir. Bu tablo eğitimle birlikte öğrenilir; benzer anlamlı kelimeler benzer vektörler alır:
gom = nn.Embedding(num_embeddings=1000, embedding_dim=16, padding_idx=0)
X = torch.tensor([[3, 1, 4, 0], [1, 5, 0, 0]]) # (toplu, zaman) indeksler
print(gom(X).shape) # torch.Size([2, 4, 16])
print(gom.weight.shape) # torch.Size([1000, 16])padding_idx verilen indeksin vektörü sıfırda sabit kalır ve güncellenmez.
Gömme + RNN sınıflandırıcı
Tipik bir metin sınıflandırıcısı: indeksler → gömme → RNN → son gizli durum → doğrusal katman:
class MetinRNN(nn.Module):
def __init__(self, sozluk, gom, gizli, sinif):
super().__init__()
self.gom = nn.Embedding(sozluk, gom, padding_idx=0)
self.rnn = nn.RNN(gom, gizli, batch_first=True)
self.bas = nn.Linear(gizli, sinif)
def forward(self, x):
_, h_n = self.rnn(self.gom(x))
return self.bas(h_n[-1]) # (toplu, sınıf)h_n[-1] son katmanın son gizli durumudur.
Uygulama Metin sınıflandırıcı
Kart'taki MetinRNN sınıfını yaz. MetinRNN(1000, 16, 32, 2) için (2, 4) indeks girdisinin çıktı şeklini yazdır. Ardından dolgu indeksinin (0) gömme vektörünün tamamen sıfır olduğunu yazdır.
Başlangıç kodu
import torch
from torch import nn
X = torch.tensor([[3, 1, 4, 0], [1, 5, 0, 0]])
# buraya yazÖrnek çözüm
import torch
from torch import nn
X = torch.tensor([[3, 1, 4, 0], [1, 5, 0, 0]])
class MetinRNN(nn.Module):
def __init__(self, sozluk, gom, gizli, sinif):
super().__init__()
self.gom = nn.Embedding(sozluk, gom, padding_idx=0)
self.rnn = nn.RNN(gom, gizli, batch_first=True)
self.bas = nn.Linear(gizli, sinif)
def forward(self, x):
_, h_n = self.rnn(self.gom(x))
return self.bas(h_n[-1])
m = MetinRNN(1000, 16, 32, 2)
print(m(X).shape)
print(bool((m.gom.weight[0] == 0).all()))Beklenen çıktı
torch.Size([2, 2]) True
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 5000 kelimelik sözlük ve 64 boyutlu gömme kaç parametre içerir?
- 5000
- 320000 Doğru cevap
- 5064
- 64
Açıklama: Gömme bir arama tablosudur: 5000 × 64.
2 Dolgu indeksinin vektörünü sabitle.
gom = nn.Embedding(1000, 16, ____=0)
gom = nn.Embedding(1000, 16, padding_idx=0)
Açıklama: padding_idx vektörü sıfır kalır ve gradyan almaz.
3 Parçaları eşleştir.
| Kavram | Anlamı |
|---|---|
nn.Embedding |
İndeksten vektöre |
num_embeddings |
Sözlük boyutu |
embedding_dim |
Vektör boyutu |
h_n[-1] |
Son gizli durum |