Makine Öğrenmesi
Embedding
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.
Örnek çözümü göster
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()))
Kendini test et
-
5000 kelimelik sözlük ve 64 boyutlu gömme kaç parametre içerir?
Cevabı göster
320000 — Gömme bir arama tablosudur: 5000 × 64.
-
Dolgu indeksinin vektörünü sabitle.
gom = nn.Embedding(1000, 16, ____=0)
Cevabı göster
gom = nn.Embedding(1000, 16, padding_idx=0)
-
Parçaları eşleştir.
- nn.Embedding
- İndeksten vektöre
- num_embeddings
- Sözlük boyutu
- embedding_dim
- Vektör boyutu
- h_n[-1]
- Son gizli durum
Sıradaki ders: Özet - RNN