나이브 베이즈로 텍스트 분류 모델 선택하기

나이브 베이즈의 가우시안·다항·베르누이 변형을 비교하고, 텍스트 분류 파이프라인의 전처리·튜닝·운영 방법을 정리한다.

2026-08-14 · 최초 발행 2024-04-29

빠른 분류를 가능하게 하는 조건부 독립 가정

나이브 베이즈는 사전확률과 조건부우도를 곱해 사후확률을 구하는 확률적 분류 체계다. 특징이 클래스에 조건부로 독립이라고 가정하기 때문에 우도의 계산을 각 특징의 곱으로 단순화할 수 있다. 실제 계산에서는 수치 언더플로를 피하기 위해 확률의 곱 대신 로그 확률을 더한다.

고차원 희소 데이터에서는 학습과 추론이 매우 빠르다는 점이 두드러진다. 텍스트 분류처럼 어휘 수가 크고 대부분의 값이 비어 있는 데이터에 특히 잘 맞는다.

입력 데이터의 성격에 따라 분포 가정을 바꾼다.

  • 가우시안 나이브 베이즈는 연속형 특징을 정규분포로 보고, 클래스와 특징별 평균·분산을 추정한다.
  • 다항 나이브 베이즈는 단어 빈도 같은 정수 카운트에 적합하다. 희귀어에는 라플라스/리드스톤 스무딩을 적용한다.
  • 베르누이 나이브 베이즈는 특징의 존재 여부를 이진값으로 다룬다. 짧은 텍스트나 키워드 세트에 유리하다.

가우시안 모델은 클래스별 특징 평균과 분산을 표본 통계로 추정한다. 다항 모델은 클래스의 전체 용어 수 대비 각 용어의 빈도 비율을 구하고 알파 스무딩을 적용한다. 베르누이 모델은 클래스별 용어 존재 확률을 추정하므로, 입력을 이진화하기 위한 임계치가 필요하다.

확률 추정과 입력 표현에서 관리할 지점

사전확률은 클래스 비율을 바탕으로 추정한다. 클래스 불균형이 있다면 클래스 가중치도 함께 검토할 수 있다. 조건부확률은 선택한 특징 분포에 따라 닫힌형으로 추정할 수 있다.

스무딩은 관측되지 않은 특징이 0 확률을 만들어 전체 확률을 무너뜨리는 일을 막는다. 라플라스/리드스톤 스무딩과 로그-도메인 계산은 수치 안정성을 위한 기본 장치다.

텍스트 입력은 토크나이즈, 불용어 제거, n-그램 구성 뒤 빈도 또는 TF-IDF 벡터로 바꾼다. 가우시안 모델에 넣는 연속형 특징은 이상치를 처리하고 스케일링하는 편이 좋다. 베르누이 모델은 이진화 기준값의 설계가 결과에 영향을 준다.

시간·메모리 복잡도는 O(ND) 수준이다. 대규모 희소 벡터를 다루기에 적합하며, partial_fit을 통한 온라인 학습도 가능해 스트리밍 환경에 적용하기 쉽다. 다만 특징 간 독립 가정은 강하다. 상관이 높은 특징에서는 성능이 떨어질 수 있고, 단순한 결정경계로는 복잡한 패턴을 학습하기 어렵다. 그 대신 변수 중요도와 토큰 기여도를 로그우도로 해석할 수 있다.

데이터 형태에 따른 모델 선택

구분 가우시안 NB 다항 NB 베르누이 NB
데이터 유형 적합성 연속형 수치 단어 카운트·빈도 이진 존재 여부
성능(텍스트) 낮음 높음(일반적 기준) 중간(짧은 문서 유리)
확장성 매우 높음 매우 높음 매우 높음
일관성(재현성) 높음 높음 높음
안정성(희귀 특징) 스케일링 의존 스무딩 효과 큼 스무딩·임계치 민감
운영 편의 전처리 단순 스무딩 튜닝 중심 이진화 설계 필요

전처리부터 예측까지의 흐름

텍스트수치GaussianMultinomialBernoulli희소/희귀 토큰클래스 불균형수치 안정성입력 데이터전처리토크나이즈/불용어/n-그램스케일링/이상치 처리벡터화: Count/TF-IDF연속 특징 행렬모델 선택평균·분산 추정용어 카운트 집계 + 스무딩(α)이진화(τ) + 스무딩(α)로그-사후확률 계산예측 라벨/확률0 확률?스무딩 α↑ 조정불균형 큼?클래스 priors/가중치 설정언더플로?로그-합산 방식 강제

텍스트 분류와 운영 환경에서의 활용

스팸 필터링, 감성 분석, 뉴스 토픽 분류는 나이브 베이즈가 적용되는 대표적인 텍스트 분류 작업이다. 대규모 어휘와 희소 행렬 환경에서도 학습과 추론을 초고속으로 처리할 수 있다.

메모리와 전력 제약이 있는 기기에서도 안정적으로 동작하며, partial_fit 기반 온라인 업데이트로 개체명과 신조어를 반영할 수 있다. 데이터가 적은 지도학습 초기 실험에서는 비교 기준선으로도 쓸 수 있다.

모델을 운영 가능한 형태로 만드는 과정

먼저 분류 목적과 정확도·F1·AUROC 같은 평가 지표를 정한다. 텍스트라면 도메인 사전과 토큰 정규화 방식을 함께 결정한다.

표현 단계에서는 CountVectorizer와 TF-IDF 중 하나를 고르고 n-그램 범위와 최소 빈도 임계치를 설정한다. 베르누이 모델에는 이진화 임계치 τ가 추가된다.

텍스트 분류에서는 MultinomialNB를 기본 선택지로 두고 α 스무딩을 그리드 탐색할 수 있다. 짧은 문서나 키워드 기반 입력에는 BernoulliNB를 검토하며, 연속형 특징은 GaussianNB에 맞춘다.

학습과 검증에서는 계층화 분할로 불균형에 대응하고 로그 확률을 점검한다. 혼동 행렬을 이용해 오분류에 영향을 준 토큰을 확인한다. 운영 단계에서는 배치 또는 스트림 예측 파이프라인을 구성하고, 데이터 분포 이동 감지·주기적 재학습·어휘 업데이트 정책을 마련한다.

scikit-learn으로 구성한 분류기

전제조건: Python 3.10+, scikit-learn >= 1.2

from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB, BernoulliNB
from sklearn.pipeline import Pipeline
from sklearn.metrics import classification_report

# 샘플 데이터
X = [
    "free trial offer click now",
    "meeting schedule attached",
    "limited time discount offer",
    "project update please review",
    "win cash prize now",
    "team lunch invitation",
]
y = ["spam", "ham", "spam", "ham", "spam", "ham"]

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42, stratify=y)

# MultinomialNB + TF-IDF
clf_m = Pipeline([
    ("tfidf", TfidfVectorizer(ngram_range=(1,2), min_df=1)),
    ("nb", MultinomialNB(alpha=0.5))
])
clf_m.fit(X_train, y_train)
print("MultinomialNB")
print(classification_report(y_test, clf_m.predict(X_test)))

# BernoulliNB + Count (바이너리)
clf_b = Pipeline([
    ("count", CountVectorizer(binary=True, ngram_range=(1,2), min_df=1)),
    ("nb", BernoulliNB(alpha=1.0))
])
clf_b.fit(X_train, y_train)
print("BernoulliNB")
print(classification_report(y_test, clf_b.predict(X_test)))

희귀 토큰이 많으면 α를 높여 분산을 완화할 수 있다. 클래스 불균형이 심할 때는 훈련 데이터 리샘플링 또는 사전확률(fit_prior=False, class_prior 명시)을 검토한다. 스트리밍 입력에는 HashingVectorizerMultinomialNB.partial_fit 조합을 활용한다.

처리 성능과 유지보수 측면의 효과

학습과 추론은 O(ND)로 선형 규모 확장성을 확보한다. 수십만 특징·수백만 샘플에서는 분 단위 학습이 가능하며, 환경 의존적이므로 최신 정보 확인이 필요하다. 온디바이스 예측 지연은 밀리초 단위로 달성할 수 있다.

구현이 단순하고 해석이 가능해 운영 리스크를 줄이는 데 도움이 된다. 데이터가 적거나 노이즈가 많은 상황에서 견고한 기준선을 제공하며, 파이프라인을 표준화해 유지보수 비용을 절감하기 쉽다.

나이브 베이즈텍스트 분류머신러닝확률 모델scikit-learn