Word2Vec와 BERT 임베딩으로 토픽 모델을 평가하는 방법
Word2Vec와 BERT 임베딩의 선택 기준, LDA·CTM 토픽 모델링, Perplexity와 Coherence 평가 및 운영 관리 방법을 정리합니다.
2026-08-14 · 최초 발행 2024-04-29
임베딩 선택이 토픽 품질의 출발점이 된다
대규모 비정형 텍스트를 다룰 때 임베딩 방식은 검색·추천의 의미 보존 수준뿐 아니라 토픽 모델의 해석과 운영 비용에도 영향을 준다. Word2Vec과 BERT의 특성을 구분하고, 토픽 모델 평가지표를 어떻게 읽을지 정해 두어야 모델 탐색과 운영 판단이 흔들리지 않는다.
Word2Vec은 단어를 고정 길이의 밀집 벡터로 학습하는 신경망 기반 임베딩이다. CBOW와 Skip-gram 아키텍처를 사용하며, 분포 가설에 따른 공동 출현 정보를 학습한다. 문맥과 무관하게 하나의 단어에 하나의 표현이 대응되는 정적(static) 임베딩이라는 점이 특징이다.
BERT 임베딩은 Transformer 인코더를 기반으로 문맥 의존(contextual) 표현을 만든다. 같은 단어라도 놓인 문맥에 따라 다른 벡터가 생성된다. 사전학습(Pretraining) 뒤 전이학습(Fine-tuning) 또는 특성추출(Feature-based) 방식을 적용할 수 있으며, 문장과 문서 단위 의미 표현에 강점이 있다.
Perplexity와 Coherence를 읽는 기준
Perplexity는 확률 모델이 테스트 데이터에 부여한 평균 역확률을 지수화한 지표다. 값이 낮을수록 모델 적합도가 좋다고 해석한다. 다만 코퍼스 규모 증가에 민감하고 사람의 판단과 일관되지 않을 수 있으므로, 모델 후보를 좁히는 초기 단계의 참고값으로 쓰는 편이 적절하다.
Coherence는 각 토픽의 상위 단어가 의미적으로 얼마나 함께 묶이는지를 측정한다. c_v, u_mass, c_npmi 등이 있으며, 사람의 판단과 상대적으로 높은 상관을 보인다. 특히 Coherence(c_v)는 불용어 처리, 상위 단어 수, 윈도우 크기에 민감하지만 실무의 최종 의사결정 지표로 활용하기 좋다.
최종 모델은 Perplexity와 Coherence를 함께 보고, 실제 샘플을 점검하는 정성 평가까지 병행해 고른다.
데이터와 운영 조건에 맞춰 고르는 방식
정적 임베딩과 문맥적 임베딩의 선택은 어휘 희소성, 다의어 처리 필요성, 문장 수준의 의미 보존 요구를 기준으로 판단한다. Word2Vec은 경량이고 빠르며 CPU 친화적이다. BERT는 정확도 측면에서 우위가 있지만 자원을 더 많이 사용한다.
토픽 모델링은 정규화, 토큰화, 불용어 제거, 표제어 추출부터 시작한다. 한국어 데이터에서는 형태소 분석기 선택도 결과에 영향을 준다. 이후 LDA나 CTM 같은 알고리즘을 선택하고 K, alpha, eta, passes를 탐색한다.
재현성을 확보하려면 시드와 라이브러리 버전을 고정하고, 토큰 사전(Dictionary)의 스냅샷을 저장해야 한다. 벡터와 토픽 아티팩트 역시 버전으로 관리한다. 데이터 스키마나 전처리 파이프라인을 바꿀 때는 회귀 테스트를 자동화하고, 메트릭 저장은 트랜잭션 처리로 일관성을 유지한다.
| 기법 | 성능(의미 보존) | 확장성(속도/자원) | 일관성(재현성) | 안정성(데이터 변화 대응) | 운영 편의 |
|---|---|---|---|---|---|
| Word2Vec | 단어 유사도 우수, 문맥 한계 | 매우 높음, CPU 친화 | 높음, 결정론적 학습 용이 | 어휘 변경에 민감, 재학습 필요 | 경량 운영 용이 |
| BERT | 문맥 이해 우수, 문장 의미 강점 | 중간~낮음, GPU 권장 | 중간, 배치/FP 정밀도 영향 | 도메인 변화에 강함, 미세조정으로 보정 | 모델/토크나이저 관리 필요 |
| LDA(토픽) | 토픽 해석 용이 | 높음, 분산 처리 용이 | 높음, 시드·사전 고정 시 안정 | 코퍼스 확장 시 토픽 드리프트 가능 | 결과 해석·보고 용이 |
전처리부터 배포 감시까지 이어지는 흐름
검색, VOC, 위험 문서에서의 활용
검색과 추천에서는 질의와 문서의 임베딩으로 의미 검색을 구성하고, BERT 임베딩 기반 ANN 인덱스를 적용할 수 있다. CTR 향상, 장바구니 전환 개선, 귀납적 동의어 자동 확장이 활용 대상이다.
VOC와 콜센터 데이터는 LDA로 초기 토픽 시드를 만들고 BERT 임베딩 k-means로 세분화할 수 있다. Coherence를 기준으로 토픽을 정제한 뒤 라우팅 규칙 자동화로 연결한다.
규제·위험 문서 모니터링에는 BERT 임베딩과 키워드 룰을 결합한 하이브리드 탐지를 적용한다. 임계치 기반 알림을 두고, 변경 추적과 재현성을 위해 메트릭과 토픽 스냅샷을 보관한다.
검색·추천 품질은 nDCG/Recall@k 310%p 향상 가능 범위가 제시된다. 분류·토픽 품질에서는 Macro-F1 512%p 개선과 Coherence(c_v) 0.050.15 상승 사례가 있으며, 라벨 비용은 2040% 절감되고 피처 엔지니어링이 단순화되며 실험 주기가 단축될 수 있다.
구현 예시
사전 준비는 다음과 같다.
- Python 3.10+, pip install gensim==4.3.2 sentence-transformers==2.6.1 scikit-learn==1.5.2
- 한국어 형태소 분석기는 선택 사항. 예시는 간단한 공백/정규식 토큰화 사용.
예시 코퍼스는 다음과 같다.
docs = [
"고객 문의 처리 자동화를 위해 챗봇을 도입한다",
"반품 및 교환 정책 변경 안내 공지",
"배송 지연 관련 불만 접수 증가",
"추천 시스템 고도화로 매출 상승 기대",
"모바일 앱 성능 개선과 오류 수정 배포",
"개인정보 보호 규정 준수 강화",
]
Word2Vec 학습과 유사도 확인
import re, random
from gensim.models import Word2Vec
random.seed(42)
def tokenize(s):
s = re.sub(r"[^가-힣a-zA-Z0-9\s]", " ", s)
return [t for t in s.lower().split() if t]
sentences = [tokenize(d) for d in docs]
model_w2v = Word2Vec(
sentences=sentences, vector_size=100, window=5,
min_count=1, workers=4, sg=1, epochs=30, seed=42
)
print(model_w2v.wv.most_similar("추천", topn=3))
BERT 임베딩과 코사인 유사도
from sentence_transformers import SentenceTransformer, util
import torch
torch.manual_seed(42)
bert = SentenceTransformer("sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2")
emb = bert.encode(docs, convert_to_tensor=True, normalize_embeddings=True)
sim = util.cos_sim(emb[0], emb) # 첫 문서와의 유사도
for i, s in enumerate(sim[0].tolist()):
print(i, round(s, 3), docs[i])
LDA와 Perplexity·Coherence 측정
from gensim.corpora import Dictionary
from gensim.models import LdaModel, CoherenceModel
tokens = [tokenize(d) for d in docs]
dictionary = Dictionary(tokens)
dictionary.filter_extremes(no_below=1, no_above=0.9)
corpus = [dictionary.doc2bow(t) for t in tokens]
lda = LdaModel(
corpus=corpus, id2word=dictionary, num_topics=3,
random_state=42, passes=20, alpha="auto", eta="auto"
)
print("Perplexity(log):", lda.log_perplexity(corpus))
cm_cv = CoherenceModel(model=lda, texts=tokens, dictionary=dictionary, coherence='c_v')
print("Coherence(c_v):", round(cm_cv.get_coherence(), 4))
for t, words in lda.print_topics(num_words=5):
print(f"토픽 {t}:", words)
Perplexity는 검증 코퍼스를 분리했을 때 더 신뢰도 높은 지표가 된다. 같은 코퍼스로 평가하면 과적합 위험이 있다. Coherence는 전처리 품질과 상위 단어 개수에 민감하므로 불용어와 고유명사 처리가 중요하다.
품질과 비용을 함께 관리하는 운영 기준
PII 비식별화, 로그 마스킹, 벡터 스토어 접근 제어로 데이터를 보호한다. 시드·버전·사전 스냅샷을 고정하고, 메트릭은 트랜잭션 처리로 저장해 결과의 일관성을 지킨다.
BERT의 정확도 우위는 GPU 비용과 지연 증가를 동반한다. 캐싱, 지연 임계치, 배치 엔코딩으로 이를 절충할 수 있다. 입력 분포의 언어·용어 변화를 감지하고, Coherence와 업무 KPI를 동시에 추적하면서 주기적 리프레시 전략을 운영한다.
임베딩은 과제 특성, 리소스, 해석 가능성을 기준으로 선택한다. 토픽 모델은 Perplexity로 탐색하고 Coherence와 샘플 검증으로 확정한다. 소규모 PoC로 기준선을 세운 뒤 점진적으로 확장하는 방식이 적합하다.