본문 바로가기
Artificial Intelligence/60. Python

[PYTHON] 소형 모델(SLM)이 거대 모델을 능가하게 만드는 5가지 데이터 정제법과 해결 방법

by Papa Martino V 2026. 4. 24.
728x90

SLM vs LLM
SLM vs LLM

 

1. 서론: 왜 거대한 모델이 항상 정답은 아닌가?

지금까지의 AI 트렌드가 '더 크게(Bigger is Better)'였다면, 2026년 현재의 실무 트렌드는 '더 작고 날카롭게(Smaller and Sharper)'로 변화하고 있습니다. 수천억 개의 파라미터를 가진 거대 모델(LLM)은 범용성은 뛰어나지만, 특정 도메인이나 한정된 자원 환경에서는 비효율적일 수 있습니다. 핵심은 데이터의 양보다 질입니다. 정제되지 않은 1TB의 데이터보다, 완벽하게 가공된 1GB의 데이터가 소형 모델(SLM, Small Language Models)을 거대 모델 이상의 전문가로 만듭니다. 본 글에서는 Python을 활용하여 데이터를 정제하고, SLM의 성능을 극대화하는 구체적인 방법과 기술적 차이를 다룹니다.

2. 데이터 정제 전략에 따른 SLM vs LLM 성능 비교

데이터 정제가 SLM에 미치는 영향력은 LLM보다 훨씬 큽니다. 모델의 용량이 작을수록 노이즈에 취약하기 때문입니다. 아래 표는 정제 전략에 따른 모델별 성능 지표의 차이를 나타냅니다.

비교 항목 LLM (Raw Data) SLM (Clean Data) SLM (Fine-tuned w/ Distilled Data)
특정 태스크 정확도 82% 85% 91%
추론 속도 (Latency) 1.2s 0.05s 0.05s
운영 비용 매우 높음 매우 낮음 매우 낮음
할루시네이션 발생율 중간 낮음 최소화

3. 실무 적용을 위한 Python 데이터 정제 Sample Examples

SLM을 전문가로 만들기 위해 개발자가 즉시 활용할 수 있는 7가지 핵심 Python 코드 예제입니다.

Example 1: 임베딩 유사도 기반 중복 데이터 제거 (Deduplication)

from sentence_transformers import SentenceTransformer
import numpy as np

def remove_duplicates(texts, threshold=0.95):
    model = SentenceTransformer('all-MiniLM-L6-v2')
    embeddings = model.encode(texts)
    
    unique_indices = []
    seen = set()
    
    for i, emb in enumerate(embeddings):
        if i in seen: continue
        unique_indices.append(i)
        for j in range(i + 1, len(embeddings)):
            similarity = np.dot(emb, embeddings[j]) / (np.linalg.norm(emb) * np.linalg.norm(embeddings[j]))
            if similarity > threshold:
                seen.add(j)
    return [texts[i] for i in unique_indices]

# 데이터의 다양성을 확보하여 SLM의 효율적인 학습을 돕습니다.

Example 2: 지식 증류(Knowledge Distillation)를 위한 LLM 합성 데이터 파이프라인

import openai

def generate_distilled_data(topic):
    prompt = f"당신은 전문가입니다. '{topic}'에 대해 SLM 학습용 정답과 그 이유를 논리적으로 설명하세요."
    response = openai.chat.completions.create(
        model="gpt-4o",
        messages=[{"role": "user", "content": prompt}]
    )
    return response.choices[0].message.content

# 거대 모델의 지식을 SLM이 이해하기 쉬운 구조화된 형태로 변환합니다.

Example 3: 독성(Toxicity) 및 노이즈 필터링 로직

import re

def clean_noise(text):
    # 특수문자 과도 반복 제거 및 불필요한 공백 정제
    text = re.sub(r'[^a-zA-Z0-9가-힣\s\.\!\?\-\,]', '', text)
    text = re.sub(r'\s+', ' ', text).strip()
    return text

# 학습 데이터의 품질을 저해하는 기호와 불필요한 패턴을 해결합니다.

Example 4: Pydantic을 활용한 구조화된 데이터 검증

from pydantic import BaseModel, validator

class TrainingSample(BaseModel):
    instruction: str
    input: str
    output: str

    @validator('output')
    def length_check(cls, v):
        if len(v) < 10:
            raise ValueError("응답 내용이 지나치게 짧습니다.")
        return v

# 데이터셋의 규격을 엄격히 관리하여 학습 안정성을 확보합니다.

Example 5: 데이터 난이도 점수(Perplexity) 기반 필터링

from transformers import GPT2LMHeadModel, GPT2Tokenizer
import torch

def calculate_perplexity(text):
    model = GPT2LMHeadModel.from_pretrained('gpt2')
    tokenizer = GPT2Tokenizer.from_pretrained('gpt2')
    inputs = tokenizer(text, return_tensors='pt')
    with torch.no_grad():
        outputs = model(**inputs, labels=inputs['input_ids'])
    return torch.exp(outputs.loss).item()

# 지나치게 난해하거나 깨진 문서를 학습에서 배제하는 방법입니다.

Example 6: 데이터 증강(Augmentation)을 통한 소수 데이터 보강

import random

def synonym_replacement(text):
    # 유의어 사전 기반 치환 (간이 예시)
    replacements = {"중요한": "핵심적인", "매우": "상당히", "성능": "퍼포먼스"}
    words = text.split()
    new_words = [replacements.get(w, w) for w in words]
    return " ".join(new_words)

# 한정된 데이터를 확장하여 SLM의 일반화 능력을 해결합니다.

Example 7: 정제된 데이터의 코사인 유사도 분포 시각화

import matplotlib.pyplot as plt

def plot_similarity_dist(embeddings):
    # 유사도 분포 확인을 통해 데이터의 편향성 진단
    sim_matrix = np.inner(embeddings, embeddings)
    plt.hist(sim_matrix.flatten(), bins=50)
    plt.title("Data Similarity Distribution")
    plt.show()

# 데이터가 특정 주제에 매몰되어 있지 않은지 확인하는 시각화 도구입니다.

4. SLM 성능 극대화를 위한 해결책: 퀄리티 중심의 엔지니어링

SLM이 거대 모델을 이기기 위해서는 데이터의 밀도(Density)를 높여야 합니다. 첫째, 태스크 특화(Task-specific) 데이터셋 구축이 필요합니다. 범용 상식을 줄이고 전문 도메인의 논리 구조를 집중 학습시킵니다. 둘째, 지식 증류(Distillation) 시 LLM의 답변 뿐만 아니라 그 '추론 과정'을 함께 학습시켜야 합니다. 셋째, 검증 루프를 자동화하여 사람이 작성한 수준의 고품질 데이터만 필터링하는 파이프라인을 Python으로 구축해야 합니다.

5. 결론

소형 모델(SLM)의 성공은 모델의 파라미터 개수가 아니라, 그 모델이 먹고 자란 '데이터의 결'에 달려 있습니다. Python을 이용한 고도화된 정제 기법을 통해 3B 이하의 모델로도 175B 모델의 특정 태스크 성능을 압도할 수 있습니다. 이는 비용 절감과 보안, 그리고 실시간성이라는 세 마리 토끼를 잡는 최선의 방법이 될 것입니다.


내용 출처 및 참고 문헌

  • "Textbooks Are All You Need" (Phi-1 Paper), Microsoft Research.
  • "Distilling the Knowledge in a Neural Network", Hinton et al.
  • Hugging Face: Data Cleaning for NLP Best Practices.
  • PyTorch Data Engineering Optimization Guide 2026.
728x90