Published on

nn.Embedding 사용 방법

Authors
  • avatar
    Name
    Inhwan Cho
    Twitter

nn.Embedding

  • 출처 : 위키독스

  • 임베딩 층(embedding layer)을 만들어 훈련 데이터로부터 처음부터 임베딩 벡터를 학습하는 방법을 nn.Embedding을 이용하여 구현합니다.

  • 주요 파라미터는 2개입니다.

    • num_embeddings : 임베딩을 할 단어들의 개수. (단어 집합의 크기)
    • embedding_dim : 임베딩 할 벡터의 차원입니다. (사용자 정의)
import torch.nn as nn

train_data = 'we can do lots of things like climbing do'

# 중복을 제거한 단어들의 집합인 단어 집합 생성.(num_embeddings 인자)
word_set = set(train_data.split())

# 단어 집합의 각 단어에 고유한 정수 맵핑.
vocab = {tkn: i+2 for i, tkn in enumerate(word_set)}
vocab['<unk>'] = 0
vocab['<pad>'] = 1
print(vocab)

# {'things': 2, 'lots': 3, 'can': 4, 'like': 5, 'do': 6, 'climbing': 7, 'of': 8, 'we': 9, '<unk>': 0, '<pad>': 1}
# 단어 집합의 크기의 행을 가지는 임베딩 테이블 생성
import torch.nn as nn
embedding_layer = nn.Embedding(num_embeddings=len(vocab), 
                               embedding_dim=3)

embedding_layer
# Embedding(10, 3, padding_idx=1)
print(embedding_layer.weight)

Parameter containing:
tensor([[ 0.2915,  0.8197,  0.1080],
        [ 0.4103,  1.2429, -0.7658],
        [ 0.4185, -0.0410,  2.1945],
        [-0.9706, -0.6196, -1.3778],
        [-1.8044, -0.8070, -1.0277],
        [ 0.7752, -0.1011,  1.5459],
        [ 0.2195,  1.2008,  0.1253],
        [ 0.6568,  1.3255,  0.5347],
        [-1.2790,  0.3015, -0.2819],
        [-0.0371, -0.0291, -0.2894]], requires_grad=True)