728x90
반응형
import torch.nn as nn
courpus = 'I am a good boy'
courpus_split = courpus.split() # 단어가 분리된 문장
word_set = set(courpus.split()) # 중복 단어 제거
vocabulary = dict = {'<unk>': '0', '<pad>': '1'} # 단어 사전
# <unk> 모르는 단어에 적용
# <pad> 문장 길이를 맞추기 위해 적용
# 단어 사전 만들기
for i, word in enumerate(word_set):
vocabulary[word] = i+2 # i+2는 위에 특별 토큰 <unk>,<pad> 추가 한 것을 표시
# 숫자로 구성된 문장 만들기
number_coupus = []
for word in courpus_split:
number_coupus.append(vocab[word])
# 단어만 분리된 문장 'courpus_split'
# ['I', 'am', 'a', 'good', 'boy']
# 숫자로 구성된 문장 'number_coupus'
# [3, 4, 2, 5, 6]
# 단어 사전 'vocabulary'
# {'<unk>': '0', '<pad>': '1', 'a': 2, 'I': 3, 'am': 4, 'good': 5, 'boy': 6}
# 단어 길이 설정
vocabulary_counts = len(vocabulary)
# 임베딩 설정
Embedding_vocabulary = nn.Embedding(num_embeddings=vocabulary_counts
,embedding_dim=10
,padding_idx=1) # 3번째 파라미터는 선택
# 임베딩 imput에는 tensor 형태로 들어가야한다.
# 숫자로 구성된 변수를 텐서로 변환
input = torch.tensor(number_coupus)
result = embedding(input)
- num_embeddings : 단어사전
- embedding_dim : 임베딩 할 벡터의 차원
- padding_idx : 패딩 번호
- len() : 딕셔너리, 리스트 등 요소의 길이를 확인하는 함수
print(result)
print(result.size())
# 결과값
tensor([[-1.0586, -0.3920, 2.1072, -0.5490, -1.1683, 0.7467, -0.2672, 0.3694,
-0.5761, 0.7961],
[-0.7848, 1.1735, -2.2849, -0.1315, -0.7158, 2.0988, -1.4909, -0.5098,
-1.6478, -1.3557],
[ 0.6959, 0.3170, -0.6668, -1.1703, 0.0493, 1.1710, -0.7776, 0.3881,
-0.8804, -0.3676],
[-0.4160, 1.7372, 0.8942, -0.6586, 0.3471, 1.1535, -1.0113, 1.7878,
-0.0269, 1.0291],
[ 0.0998, -0.8214, 1.3969, 0.4016, 0.4374, -0.8214, -0.4019, 0.0376,
0.1936, -0.1674]], grad_fn=<EmbeddingBackward0>)
torch.Size([5, 10])
- 행의 길이 5는 숫자로 구성된 문장의 길이 len(number_coupus)
- 열의 길이 10은 단어에 대한 차원 embedding_dim=10
- 한 단어를 10개의 차원으로 표시
- 단어 사전을 10 차원으로 표현 시키고, input 안에 단어들을 10차원으로 표현한 값으로 변경해준다는 개념
['I', 'am', 'a', 'good', 'boy']
↓
[3, 4, 2, 5, 6]
↓
[3, 4, 2, 5, 6]의 길이는 5, tensor 로 변환 [5]
↓
embedding[단어사전길이(7), 표현하려는 차원(10)]
↓
[5] → [7,10] → [5,10]
- [5] : [3, 4, 2, 5, 6] 리스트 요소의 길이
- [7,10] : [단어 사전 길이,표현하려는 차원 수]
- [5,10] : [5]를 embedding[7,10]에 넣었을때 결과 값, [5] 에서 [5,10]으로 10차원으로 변경된 값으로 나온다.
- 주의 사항 : input 으로 들어가는 단어는 단어사전에 반드시 포함 되어야한다. 그렇지 않으면 imdex 에러 발생
반응형
'자연어 처리 - 파이썬' 카테고리의 다른 글
[자연어 처리] Do it! BERT 와 GPT로 배우는 자연어처리 요 (0) | 2022.12.07 |
---|---|
[자연어 처리] 특수 문자 제거 - re 함수, Stopword(불용어) 제거 (1) | 2022.11.20 |
댓글