# [토크나이징/임베딩]

안규원·2024년 6월 25일

AI

목록 보기
18/22

[Tokenizer]


텍스트를 분석 가능한 작은 단위로 분할하는 과정

일반적으로 문장을 단어 또는 서브워드(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]

자연어처리의 첫 번째 단계

[Embedding]


단어를 고정된 크기의 실수 벡터로 변환하는 과정
단어 간의 의미적 유사성을 수치화하여 머신러닝 모델이 이해할 수 있도록 변환한다.
가장 널리 사용되는 임베딩 방법은 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>)
"""

0개의 댓글