CodeBlanks Logo Icon CodeBlanks

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.

Başlangıç kodu

model.py
import torch
from torch import nn

X = torch.tensor([[3, 1, 4, 0], [1, 5, 0, 0]])

# buraya yaz

Örnek çözüm

model.py
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.

Soru
gom = nn.Embedding(1000, 16, ____=0)
Cevap
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

İleri seviye bölümündeki tüm dersler