미션: Hugging Face Tr…, EDA 및 데이터 정제 실험 중심의 LLM 실험에서 직접 따라간 구현 흐름과 코드 증거를 다시 볼 수 있게 정리한 LLM 학습 기록입니다. 본문은 미션: Hugging Face Tr…, EDA 및 데이터 정제 실험, 데이터 파이프라인 순서로 핵심 장면을 먼저 훑고, 정제비교실험, 토크나이저 정렬 분석, 모델 파이프라인 같은 코드로 실제 구현을 이어서 확인할 수 있습니다. ipynb/md 원본과 22개 코드 블록, 19개 실행 셀을 함께 남겨 구현 흐름을 다시 따라갈 수 있게 정리했습니다. 주요 스택은 google, torch, os, json입니다.

빠르게 볼 수 있는 포인트: 미션: Hugging Face Transformers를 활용한 문서 요…, EDA 및 데이터 정제 실험, 데이터 파이프라인.

남겨둔 자료: ipynb/md 원본과 22개 코드 블록, 19개 실행 셀을 함께 남겨 구현 흐름을 다시 따라갈 수 있게 정리했습니다. 주요 스택은 google, torch, os, json입니다.

주요 스택: google, torch, os, json, pandas

Snapshot

Item Value
Track LLM
Type Mission
Source Files ipynb, md
Code Blocks 22
Execution Cells 19
Libraries google, torch, os, json, pandas, re, html, numpy
Source Note 미션12_1팀_박시찬

What This Note Covers

미션: Hugging Face Transformers를 활용한 문서 요약 모델 구현

미션 소개 Hugging Face transformers 라이브러리를 사용하여 실제 한국어 문서 요약 모델을 처음부터 끝까지 구축하는 미션입니다. 데이터 로드 → 전처리 → 모델 Fine-tuning → 요약 생성 → 평가까지 전체 파이프라인을 직접 구현해 봅니다. 사용 데이터셋 - 데이터 출처: AI Hub - 문서요약 텍스트 -…

  • 읽을 포인트: 임베딩, 모델 구조, 학습 루프를 실제 코드로 연결하는 구간입니다.

EDA 및 데이터 정제 실험

원문 (Text): 95%가 678 토큰 이내. 요약 (Summary): 95%가 74 토큰 이내. 이 숫자가 황금 비율입니다. 보통 BART 기본 설정이 1024인데, 굳이 1024까지 쓸 필요 없이 700~800 정도만 써도 충분하다는 뜻입니다. 이러면 학습 속도도 빨라지고 메모리도 아낄 수 있습니다. 우리는 안전하게 여유를 좀…

  • 읽을 포인트: 세부 흐름: 정제비교실험

정제비교실험

실험 조건을 바꾸고 지표를 비교하며 어떤 설정이 맞는지 확인하는 구간입니다.

데이터 파이프라인

토크나이저 정렬 분석 같은 코드를 직접 따라가며 데이터 파이프라인 흐름을 확인했습니다.

  • 읽을 포인트: 세부 흐름: 토크나이저 정렬 분석

토크나이저 정렬 분석

UNK 비율 확인: 모델이 모르는 단어가 1% 미만이어야 안전합니다. - 파편화율 확인: 단어가 너무 잘게 쪼개지면 학습이 어렵습니다. (0.3 ~ 0.6 사이면 양호)

모델 파이프라인

학습완료 같은 코드를 직접 따라가며 모델 파이프라인 흐름을 확인했습니다.

  • 읽을 포인트: 세부 흐름: 학습완료

학습완료

임베딩, 모델 구조, 학습 루프를 실제 코드로 연결하는 구간입니다.

Why This Matters

임베딩과 표현 학습

  • 왜 필요한가: 텍스트나 토큰을 그대로는 모델이 다룰 수 없기 때문에, 의미를 담은 수치 벡터 표현으로 바꾸는 단계가 필요합니다.
  • 왜 이 방식을 쓰는가: Word2Vec, FastText, GloVe 같은 방식은 같은 단어라도 주변 문맥이나 서브워드 정보를 반영해 비교 가능한 표현 공간을 만듭니다.
  • 원리: 자주 함께 등장하는 단어는 가까운 벡터가 되도록 학습해, 의미적으로 비슷한 표현이 공간에서도 가까워지게 합니다.

데이터 파이프라인

  • 왜 필요한가: 모델 성능 이전에 입력이 일정한 형식으로 잘 들어가야 학습과 평가가 안정적으로 반복됩니다.
  • 왜 이 방식을 쓰는가: Dataset/DataLoader 구조는 데이터 읽기, 변환, 배치 처리를 분리해 코드 재사용성과 실험 반복성을 높여줍니다.
  • 원리: 각 샘플을 Dataset이 제공하고, DataLoader가 이를 배치로 묶어 셔플·병렬 로딩·collate를 담당합니다.

전처리와 입력 정리

  • 왜 필요한가: 원본 데이터는 결측치, 스케일 차이, 불필요한 기호처럼 학습을 방해하는 요소가 많아 바로 넣기 어렵습니다.
  • 왜 이 방식을 쓰는가: 전처리는 모델 종류와 데이터 특성에 맞는 입력 형식을 먼저 맞춰주기 때문에, 단순해 보여도 성능 차이를 크게 만듭니다.
  • 원리: 불필요한 정보를 줄이고 유효한 패턴을 남기도록 데이터를 정규화·정제·인코딩해 모델이 학습하기 쉬운 분포로 바꿉니다.

Implementation Flow

  1. 미션: Hugging Face Transformers를 활용한 문서 요약 모델 구현: 미션 소개 Hugging Face transformers 라이브러리를 사용하여 실제 한국어 문서 요약 모델을 처음부터 끝까지 구축하는 미션입니다. 데이터 로드 → 전처리 → 모델…
  2. EDA 및 데이터 정제 실험: 정제비교실험
  3. 데이터 파이프라인: 토크나이저 정렬 분석
  4. 모델 파이프라인: 학습완료

Code Highlights

정제비교실험

정제비교실험는 이 노트에서 핵심 구현을 보여주는 코드 블록입니다. 코드 안에서는 =================================================…, 데이터 로드 흐름이 주석과 함께 드러납니다.

import pandas as pd
import numpy as np
from transformers import AutoTokenizer
import os
import time

# =========================================================
BASE_PATH =  r"C:\Users\bhs33\PyCharmMiscProject\summarization\summarization"

FILE_RAW = "step1_clean_train.csv"           # 전처리 전 (Step 1-1 결과)
FILE_CLEAN = "step5_density_controlled_train.csv" # 전처리 후 (Step 1-5 결과)

MODEL_NAME = "gogamza/kobart-base-v2"
# =========================================================

def step1_7_efficiency_report():
    print(f"\n🚀 [Step 1-7] 데이터 효율성 및 개선 효과 검증 (A/B Compare)")

    path_raw = os.path.join(BASE_PATH, FILE_RAW)
    path_clean = os.path.join(BASE_PATH, FILE_CLEAN)

    if not os.path.exists(path_raw) or not os.path.exists(path_clean):
        print("❌ 비교할 파일이 없습니다.")
        return

    # 1. 데이터 로드
    print("   - 데이터 로드 중...")
    df_raw = pd.read_csv(path_raw)
# ... trimmed ...

토크나이저 정렬 분석

토크나이저 정렬 분석는 이 노트에서 핵심 구현을 보여주는 코드 블록입니다. 코드 안에서는 =================================================…, 여기서 정의한 값을 함수로 넘겨줄 겁니다 흐름이 주석과 함께 드러납니다.

import pandas as pd
from datasets import Dataset, DatasetDict
from transformers import AutoTokenizer
import os

# =========================================================
BASE_PATH =  r"C:\Users\bhs33\PyCharmMiscProject\summarization\summarization"
INPUT_TRAIN = "step5_density_controlled_train.csv"
INPUT_VALID = "step5_density_controlled_valid.csv"
OUTPUT_DIR = "final_processed_dataset"
MODEL_NAME = "gogamza/kobart-base-v2"

# 여기서 정의한 값을 함수로 넘겨줄 겁니다
MY_MAX_INPUT = 700
MY_MAX_TARGET = 128
# =========================================================

# 인자에 max_input_len, max_target_len 추가
def preprocess_function(examples, tokenizer=None, max_input_len=None, max_target_len=None):
    # 텍스트가 숫자로 들어오는 경우 대비 문자열 변환
    inputs = [str(t) for t in examples["text"]]
    targets = [str(s) for s in examples["summary"]]

    # 인자로 받은 max_input_len 사용
    model_inputs = tokenizer(
        inputs,
        max_length=max_input_len,
        truncation=True,
# ... trimmed ...

모델 파이프라인

모델 파이프라인는 이 노트에서 핵심 구현을 보여주는 코드 블록입니다. 코드 안에서는 =================================================…, [사용자 설정] 흐름이 주석과 함께 드러납니다.

import os
import torch
import gc
import numpy as np
import evaluate
from datasets import load_from_disk
from transformers import (
    AutoTokenizer,
    AutoModelForSeq2SeqLM,
    DataCollatorForSeq2Seq,
    Seq2SeqTrainingArguments,
    Seq2SeqTrainer,
    EarlyStoppingCallback
)

# =========================================================
# [사용자 설정]
# =========================================================
BASE_PATH = r"C:\Users\bhs33\PyCharmMiscProject\summarization\summarization"
DATASET_DIR = "final_processed_dataset"
OUTPUT_DIR = "bart_summary_model_final"
MODEL_NAME = "gogamza/kobart-base-v2"

# [1660 Ti 최적화 파라미터]
BATCH_SIZE = 2           # 6GB VRAM 안전값
GRAD_ACCUM_STEPS = 16    # 실질적 배치 32
LEARNING_RATE = 3e-5
NUM_EPOCHS = 5           # Early Stopping이 있으므로 넉넉하게 설정
# ... trimmed ...

학습완료

학습완료는 이 노트에서 핵심 구현을 보여주는 코드 블록입니다. 코드 안에서는 =================================================…, [경로 설정] 꼬이지 않게 절대 경로로 각각 지정 흐름이 주석과 함께 드러납니다.

import torch
from datasets import load_from_disk
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
import evaluate
import os
from tqdm import tqdm

# =========================================================
# [경로 설정] 꼬이지 않게 절대 경로로 각각 지정
# =========================================================

# 1. 데이터셋 폴더 (final_processed_dataset)
DATASET_PATH = r"C:\Users\bhs33\PyCharmMiscProject\summarization\summarization\final_processed_dataset"

# 2. 모델 체크포인트 폴더 (checkpoint-xxxx)
MODEL_PATH = r"C:\Users\bhs33\PyCharmMiscProject\summarization\summarization\bart_summary_model_final\bart_summary_model_final\checkpoint-1774"

# =========================================================

def step3_5_final_evaluation():
    print(f"\n🚀 [Step 5] 최종 모델 정량 평가 (ROUGE)")
    print(f"   - 모델 경로: {MODEL_PATH}")
    print(f"   - 데이터 경로: {DATASET_PATH}")

    if not os.path.exists(MODEL_PATH):
        print(f"❌ 모델 경로가 잘못되었습니다.")
        return

# ... trimmed ...

Source Bundle

  • Source path: 13_LLM_GenAI/Code_Snippets/미션12_1팀_박시찬.md
  • Source formats: ipynb, md
  • Companion files: 미션12_1팀_박시찬.ipynb, 미션12_1팀_박시찬.md
  • Note type: code-note
  • Last updated in the source vault: 2026-03-08T03:33:14
  • Related notes: text'', ''summary, 13_LLM_code_Roadmap.md, 13_LLM_GenAI_Code_Summary.md
  • External references: aihub.or.kr, localhost, pypi.python.org

Note Preview

미션 소개 Hugging Face transformers 라이브러리를 사용하여 실제 한국어 문서 요약 모델을 처음부터 끝까지 구축하는 미션입니다. 데이터 로드 → 전처리 → 모델 Fine-tuning → 요약 생성 → 평가까지 전체 파이프라인을 직접 구현해 봅니다. 사용 데이터셋 - 데이터 출처: AI Hub - 문서요약 텍스트 - 용량: 약 0.4GB - 형식: JSON 파일 - 문서 종류: - 신문 기사 - 사설 - 법률 문서 - 구성: 각 문서 타입별로 train.json / test.json 쌍 제공 → 전체 사용 가능 / 원하는 문서 종류만 선택 가능