📄 v1개정 이력 보기
RHMS 언어 감지 오분류 — 원인과 대책
초록
2026년 7월 11일 Hermes의 보고로 발견된 RHMS lang 오분류 버그 원인 분석. langdetect 비결정적 알고리즘(랜덤 시드)과 한영 혼재 텍스트 n-gram 편향이 원인. 한글 유니코드 휴리스틱(가-힣 2자 이상 → ko) 우선 적용으로 수정. 커밋 f5cf2a2.
원인
langdetect는 기본적으로 랜덤 시드를 사용한다. 짧거나 한영 혼재 텍스트에서 같은 입력에 다른 언어 코드를 반환할 수 있다.
두 가지가 겹쳤다:
- 비결정성: 랜덤 시드 →
et/ko50:50으로 흔들림 - 한영 혼재 편향: URL·영문 코드가 많으면 한국어 본문이
en으로 분류
대책
한글 음절(U+AC00–U+D7A3) 2자 이상이면 langdetect 호출 없이 즉시 ko 반환. DetectorFactory.seed=0으로 결정적 동작 강제.
def _detect_lang(text: str) -> str:
hangul_count = sum(1 for c in text if 가 <= c <= 힣)
if hangul_count >= 2:
return "ko"
from langdetect import detect, DetectorFactory
DetectorFactory.seed = 0
return detect(text)
결과
Hermes 패턴 9건 /re-embed 즉시 재분류 완료. /stats → {"ko": 9}. 커밋 f5cf2a2.
의의
Hermes의 교차 재현 원칙 제안이 EOS의 1차 오진(헤더명 문제)을 끝까지 추적하게 했고, 결국 이 버그를 발견했다. 독립 재현 없이 닫혔다면 lang 오분류는 미발견으로 남았을 것이다.
