새소식

반응형
AI/ML*DL Study

현대 NLP - 토큰화, 임베딩, 텍스트 분류

  • -
반응형

현대 NLP - 토큰화, 임베딩, 텍스트 분류 text image

주요 용어 요약

  • NLP (자연어 처리): 컴퓨터가 인간 언어를 이해하고 생성하도록 돕는 기술
  • LLM (대형 언어 모델): 텍스트 생성 및 이해에 사용되는 대규모 모델
  • NLTK (Natural Language Toolkit): 텍스트 분석에 유용한 자연어 처리 도구킷
  • SpaCy: 고성능 NLP 라이브러리로 효율적인 텍스트 처리를 지원
  • n-grams: 텍스트 내에서 반복되는 n개의 단어 시퀀스
  • word clouds: 텍스트에서 자주 등장하는 단어를 시각적으로 표현
  • tokenization (토큰화): 텍스트를 의미 있는 작은 단위(토큰)로 분리
  • embeddings (임베딩): 단어를 숫자 벡터로 변환해 의미 관계를 포착
  • transformers (트랜스포머): 어텐션 메커니즘 기반 모델로 문맥 이해에 강력
  • attention mechanism (어텐션 메커니즘): 모델이 입력의 관련 부분에 집중하도록 지원
  • BERT: 양방향 인코더 표현(Bidirectional Encoder Representations from Transformers)을 사용하는 사전 학습 언어 모델
  • IMDB: 영화 리뷰 데이터셋을 제공하는 인터넷 영화 데이터베이스

1. 소개

Python 코드를 활용해 현대 자연어 처리(NLP)를 배우는 여정에 오신 것을 환영합니다. NLP는 컴퓨터가 인간 언어를 이해하고 생성하도록 돕는 기술로, 최근 대형 언어 모델 (LLM) 덕분에 눈부신 발전을 이루었습니다. 현대 기술 덕분에 컴퓨터와의 대화가 마치 사람과 이야기하는 것처럼 자연스럽게 느껴집니다.

과거에는 NLTKSpaCy 같은 도구를 사용해 텍스트에서 패턴을 찾고, 키워드를 추출하며, n-grams을 활용해 문맥을 분석했습니다. 또한, 아름다운 word clouds도 큰 인기를 끌었죠.
하지만 이제는 전통적인 도구와 더불어 LLM을 다루기 위한 현대적인 NLP 기법들이 필요해졌습니다. 이번 글에서는 이러한 최신 기법들을 자세히 살펴보겠습니다.

반응형

2. 현대 NLP 개념

이번 글에서는 다음 내용을 다룹니다:

  • 토큰화 (Tokenization): LLM이 텍스트를 어떻게 처리하는지
  • 임베딩 (Embedding): 단어를 숫자 벡터로 변환하는 방법
  • 어텐션 메커니즘 (Attention Mechanism): 트랜스포머 모델 내 작동 원리
  • BERT 세밀 조정 (Fine-tuning BERT): 텍스트 분류 작업에 적용하는 방법

3. LLM이 텍스트를 처리하는 방법: 토큰화

인간이 언어를 배우는 과정처럼, 컴퓨터도 텍스트를 입력받아 가장 의미 있는 작은 단위인 토큰으로 분리합니다.
예를 들어, 인간이 소리를 듣고 단어와 의미를 연결해 어휘력을 확장하는 것처럼, 컴퓨터는 텍스트를 단어 또는 단어의 일부로 쪼갭니다. 그리고 나서 각 토큰을 숫자 벡터로 변환하여 임베딩 단계에서 단어 간 관계를 이해하게 합니다.

Python 예제: BERT 토크나이저 사용

from transformers import BertTokenizer

# BERT 토크나이저 로드
tokenizer = BertTokenizer.from_pretrained("bert-base-uncased")

# 샘플 텍스트
text = "AI is transforming the future of technology."

# 텍스트 토큰화
tokens = tokenizer(text, return_tensors="pt", padding=True, truncation=True)
print(tokens)

출력 예시:

{'input_ids': tensor([[ 101, 7414, 2003, 12345, 1996, 2490, 1997, 2931, 1012, 102]]),
 'token_type_ids': tensor([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]),
 'attention_mask': tensor([[1, 1, 1, 1, 1, 1, 1, 1, 1, 1]])}

각 단어는 고유한 ID로 변환되며, ID 101은 [CLS] 토큰(문장 전체 의미 캡처), ID 102는 [SEP] 토큰(문장 구분) 역할을 합니다.


4. 임베딩이란 무엇인가

컴퓨터는 텍스트를 토큰으로 분리한 후, 이 토큰들을 숫자 벡터로 변환해 단어 간 의미 관계를 이해합니다. 임베딩은 두 가지 방식으로 이해할 수 있습니다:

  1. 지도에 비유:
    뉴욕과 로스앤젤레스라는 도시 이름만으로는 그 위치 관계가 모호하지만, 좌표를 알면 두 도시가 같은 나라 내 반대편에 위치함을 파악할 수 있습니다. 임베딩은 각 토큰에 좌표를 부여해 의미적 거리를 이해하도록 합니다.
  2. 의미 프로필:
    임베딩 벡터의 각 숫자는 단어의 특정 의미적 특성을 나타냅니다. 예를 들어, 3차원 벡터에서 "dog"의 임베딩이 [0.8, 0.2, 0.1]라면, 이는 "동물" 개념에서는 높게, "음식"에서는 낮게, "행동"에서는 매우 낮은 점수를 받음을 의미합니다.

Python 예제: BERT를 통한 임베딩 생성

from transformers import AutoTokenizer, AutoModel
import torch

# 토크나이저와 모델 로드
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
model = AutoModel.from_pretrained("bert-base-uncased")

# 샘플 텍스트
text = "AI is transforming the future of technology."

# 텍스트 토큰화
tokens = tokenizer(text, return_tensors="pt", padding=True, truncation=True)

# 모델을 사용해 임베딩 생성 (gradients 계산 불필요)
with torch.no_grad():
    output = model(**tokens)

# [CLS] 토큰 임베딩 사용
embedding = output.last_hidden_state[:, 0, :]
print(embedding)

출력된 숫자 텐서는 LLM이 문장의 의미를 다른 텍스트와 연결해 복잡한 출력을 생성하는 데 사용됩니다.


5. 임베딩이 NLP 작업에서 중요한 이유

컴퓨터는 기본적으로 숫자를 다룹니다. 임베딩은 단어를 숫자 벡터로 변환함으로써 컴퓨터가 의미를 이해할 수 있도록 돕습니다. 비슷한 의미를 가진 단어들은 벡터 공간에서 가까운 거리에 위치하며, 이를 통해 동의어, 반의어, 관련 개념 등 단어 간의 미묘한 관계를 파악할 수 있습니다. 특히 BERT와 같은 트랜스포머 모델의 임베딩은 문맥적 의미까지 포착합니다.

Words to Numbers | AI generated image from Meta, 2025
meta.ai


6. 트랜스포머의 어텐션 메커니즘 작동 원리

유명 논문 *"Attention is All You Need"*에서 제안된 어텐션 메커니즘은 쿼리와 키-값 쌍을 입력받아, 관련성이 높은 부분에 집중하여 출력(값의 가중치 합)을 생성하는 방식입니다.
즉, LLM에 질문(쿼리)을 하면, 모델은 학습된 레이블 정보(키와 값) 중 질문과 관련성이 높은 부분을 찾아내어 답변을 생성합니다.


7. BERT 세밀 조정: 텍스트 분류 실습

영화 리뷰 분류 작업에 BERT를 활용하기 위해, IMDB 데이터셋을 사용합니다.

Python 예제: IMDB 데이터셋을 활용한 텍스트 분류 준비

import torch
from transformers import BertTokenizer, BertForSequenceClassification
from datasets import load_dataset

# 토크나이저 로드
tokenizer = BertTokenizer.from_pretrained("bert-base-uncased")

# IMDB 데이터셋 로드
dataset = load_dataset("imdb")

# 토큰화 함수 정의
def tokenize_function(examples):
    return tokenizer(examples["text"], padding="max_length", truncation=True, max_length=128)

# 데이터셋 토큰화
tokenized_datasets = dataset.map(tokenize_function, batched=True)

# 학습 데이터 일부 선택 (샘플용)
train_dataset = tokenized_datasets["train"].shuffle(seed=42).select(range(20))
test_dataset = tokenized_datasets["test"].shuffle(seed=42).select(range(10))

# 이후 모델 로드 및 학습 설정은 생략합니다.

 


8. 마무리

이번 글에서는 현대 NLP의 핵심 개념들을 다루었습니다.

  • 토큰화를 통해 텍스트를 처리하는 방법
  • 임베딩을 활용해 단어 간 의미 관계를 파악하는 과정
  • 어텐션 메커니즘의 원리
  • BERT를 활용한 텍스트 분류 실습

이 모든 과정을 통해 LLM이 텍스트 쿼리를 입력받아 놀라운 결과를 생성하는 과정을 쉽게 이해할 수 있기를 바랍니다. 마지막으로, Jay AlammarBERT Visual Guide를 참고하여 시각화 자료도 함께 살펴보시길 추천드립니다.

이 콘텐츠가 마음에 드셨다면, 데이터 과학 관련 더 많은 글을 위해 저를 팔로우해주세요!


Key Citations


이와 같이 정돈된 포스트가 독자들이 현대 NLP의 핵심 원리와 기술들을 이해하는 데 큰 도움이 되길 바랍니다.


함께보면 좋은 글

[Python 3.13] AI와 ML 혁신을 위한 새로운 기능들

 

[Python 3.13] AI와 ML 혁신을 위한 새로운 기능들

파이썬 3.13 버전은 특히 머신러닝(ML)과 인공지능(AI) 분야에서 혁신적인 변화를 가져올 업데이트를 포함하고 있어보여 또 정리해보았습니다. 파이썬은 간단한 문법, 풍부한 라이브러리, 그리고

intelloper.tistory.com

ML(Machine Learning) 짧은 Review

 

ML(Machine Learning) 짧은 Review

이미지 프로세싱 쪽을 공부하다보면 자연스럽게 머신러닝을 접하게 됩니다. 특히 요즘처럼 스마트폰 카메라와 AI를 적용한 어플리케이션들이 나오면서 관심이 있는 분들은 관련 기술분야를 찾

intelloper.tistory.com

[Grok 3] AI 스케일링의 새로운 기준 🌟

 

[Grok 3] AI 스케일링의 새로운 기준 🌟

Grok 3가 뭔지 모른다면 이 글 참고 go [AI/AI 정보] - Grok3에 대해서 빠르게 아라보자 (요약본) Grok3에 대해서 빠르게 아라보자 (요약본)🔍 Grok 3란 무엇인가?Grok 3는 xAI가 개발한 최신 대형 언어 모델(

intelloper.tistory.com

 

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.