텍스트를 분석 가능한 작은 단위로 분할하는 과정
일반적으로 문장을 단어 또는 서브워드(subword) 단위로 분할한다.
import torch
from transformers import BertTokenizer
# BERT tokenizer 사용
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
text = "Hello, how are you?"
# 텍스트를 토크나이징
tokens = tokenizer.tokenize(text)
token_ids = tokenizer.convert_tokens_to_ids(tokens)
print("Tokens:", tokens)
print("Token IDs:", token_ids)
# Tokens: ['hello', ',', 'how', 'are', 'you', '?']
# Token IDs: [7592, 1010, 2129, 2024, 2017, 1029]
자연어처리의 첫 번째 단계
단어를 고정된 크기의 실수 벡터로 변환하는 과정
단어 간의 의미적 유사성을 수치화하여 머신러닝 모델이 이해할 수 있도록 변환한다.
가장 널리 사용되는 임베딩 방법은 Word2Vec, GloVe, 그리고 트랜스포머 모델을 통한 학습 기반 임베딩
import torch
import torch.nn as nn
# 임베딩 레이어 생성
embedding_dim = 10 # 임베딩 벡터의 차원
vocab_size = 100 # 어휘 사전의 크기
embedding = nn.Embedding(num_embeddings=vocab_size, embedding_dim=embedding_dim)
# 단어 인덱스
word_ids = torch.tensor([1, 2, 3, 4])
# 임베딩 벡터 추출
embedded = embedding(word_ids)
print("Embedding Vectors:\n", embedded)
"""
Embedding Vectors:
tensor([[-0.4264, -0.6970, -0.5090, -0.5639, -0.2469, 0.3100, -1.7544, -0.0582,
1.2487, -0.0938],
[ 0.5208, -0.6266, -1.2191, -0.7226, -0.6199, -1.1047, 1.8084, -1.1666,
-0.2693, 0.7863],
[-1.0036, -0.6259, 1.1146, 0.2225, 1.8272, -0.3927, 2.0783, 1.3570,
1.2845, -1.3328],
[ 0.9614, 0.0743, 0.0255, -1.6797, -0.7077, -0.4163, -0.6714, 0.2737,
1.4236, -0.1987]], grad_fn=<EmbeddingBackward0>)
"""