본문 바로가기

AI Algorithms (AI 기술과 알고리즘)

텍스트 데이터 다루기

 

『밑바닥부터 만들면서 배우는 LLM』 2장 완주 - 텍스트 데이터 처리의 모든 것

📚 이번 주 학습 범위

『밑바닥부터 만들면서 배우는 LLM』 2장 "텍스트 데이터 다루기"를 직접 코드로 구현하며 학습했습니다.

🔥 주요 구현 내용

1. 텍스트 토큰화 구현

# 정규표현식으로 텍스트를 토큰으로 분할
preprocessed = re.split(r'([,.:;?_!"()\']|--|\s)', text)
preprocessed = [item.strip() for item in preprocessed if item.strip()]

직접 SimpleTokenizerV1과 V2를 구현하면서 토큰화의 기본 원리를 체득했습니다. 특히 <|endoftext|>와 <|unk|> 같은 특수 토큰 처리 로직을 추가하면서 실제 LLM이 어떻게 미지의 단어나 문서 경계를 처리하는지 이해할 수 있었습니다.

2. Sliding Window 데이터 로더 구현

class GPTDatasetV1(Dataset):
    def __init__(self, txt, tokenizer, max_length, stride):
        for i in range(0, len(token_ids) - max_length, stride):
            input_chunk = token_ids[i:i + max_length]
            target_chunk = token_ids[i + 1:i + max_length + 1]

stride와 max_length를 조절하며 다양한 시퀀스 샘플링 전략을 실험했습니다. stride=1일 때와 stride=max_length일 때의 차이를 직접 확인하면서 학습 데이터의 중복도와 다양성 간의 트레이드오프를 이해했습니다.

3. 토큰 임베딩 + 위치 임베딩 결합

token_embeddings = token_embedding_layer(inputs)  # [8, 4, 256]
pos_embeddings = pos_embedding_layer(torch.arange(context_length))  # [4, 256]
input_embeddings = token_embeddings + pos_embeddings  # [8, 4, 256]

최종적으로 8개의 배치, 각 4개 토큰, 256차원 임베딩을 생성하는 전체 파이프라인을 완성했습니다.

💡 실무 연계 포인트

현재 진행 중인 ex-GPT 프로젝트에서 이 지식을 다음과 같이 활용할 수 있을 것 같습니다:

  1. 토큰화 최적화: 한국어 정부 문서의 특성을 고려한 커스텀 토크나이저 설계
  2. 컨텍스트 윈도우 관리: RAG 시스템의 청킹 전략과 sliding window 방식의 연계
  3. 임베딩 차원 설정: H100 서버 리소스를 고려한 최적 임베딩 차원 결정

🎯 다음 주 목표

3장 "어텐션 메커니즘"을 같은 방식으로 직접 구현하며 학습할 예정입니다. 특히 멀티헤드 어텐션의 병렬 처리 부분을 중점적으로 이해하고자 합니다.