한국어로 의도 분석을 하려면 영어에 없는 관문을 하나 지나야 한다: 형태소 분석과 토크나이징. "짜장면시켜줘"처럼 띄어쓰기가 무너진 입력, '먹었다/먹어서/먹으니'처럼 어미가 갈라지는 활용, '이미지생성' 같은 복합명사 — 이 층을 잘못 설계하면 위층의 분류기가 아무리 좋아도 소용없다. 이번 글은 분석기 선택과 단위(unit) 선택의 근거 자료들이다.
형태소 분석기: 무엇을 쓸 것인가
- Kiwi (논문: 이민철 2024) — 현재의 유력한 답. 통계 언어모델 + Skip-Bigram으로 문맥 모호성을 해소해 동형이의 형태소 구분 정확도 86.7%(타 오픈소스 50~70%)를 보고한다. 짧고 노이즈 많은 사용자 질의에 특히 중요한 세 기능 — 띄어쓰기 오류 허용, 오타 교정, 사용자 사전 — 을 갖췄고 C++라 빠르다. Python 바인딩은 kiwipiepy.
- MeCab-ko / mecab-ko-dic (은전한닢) — 업계 속도 기준선. Elasticsearch/Lucene의 공식 한국어 분석기 Nori의 기반이기도 하다. 사전 기반이라 신조어·띄어쓰기 붕괴에 상대적으로 약하다 — Kiwi와의 비교 실험에서 대조군으로 삼기 좋다.
- KoNLPy — Hannanum·Kkma·Komoran·MeCab·Okt를 한 API로 묶은 실험 하네스. 같은 데이터에 분석기만 바꿔 끼우며 하류 성능을 비교할 때 쓴다.
- soynlp — 사전 없이 통계(cohesion, branching entropy)만으로 말뭉치에서 단어를 스스로 발견하는 비지도 도구. 사전에 없는 서비스 고유 용어·신조어를 찾아 Kiwi 사용자 사전에 등록하는 파이프라인의 앞단으로 제격이다.
단위 선택의 실증 근거
- Park et al. (2020, AACL) — 자모·음절·형태소·BPE·형태소+BPE·어절을 한국어 태스크 전반에서 체계 비교한 기준 논문. 결론: 형태소 분할 후 BPE가 대부분의 NLU에서 최선, 순수 어절이 일관되게 최악. "형태소 우선" 파이프라인의 인용 근거.
- Jeon et al. (2023) — 형태소 인지 서브워드 + 자모 분해로 위 결과를 정교화. 조사·어미 변이를 정규화해야 같은 의도 표현의 표면형 변화에 시그널 매칭이 안정된다는 논거.
- 분석기별 분류 성능 비교 (2023, Applied Sciences) — 같은 분류 태스크에서 형태소 분석기만 바꿔도 정확도가 최대 13%p, 속도가 72배 차이난다는 실측. 전처리 선택이 하이퍼파라미터가 아니라 설계 결정임을 보여준다.
- Lee & Ahn (1999, IP&M) — 반전의 고전: 한국어 검색에서 문자 n-gram 색인이 형태소 색인보다 빠르고 효과적일 수 있다. 분석기가 틀리는 노이즈 입력에서 n-gram은 무너지지 않는다 — 형태소 기반 시그널에 n-gram 폴백을 두는 하이브리드의 근거.
- 형태소·키워드 기반 웹문서 분류 (2012, KCI) — 형태소 필터링 + 주제 판별력 점수 키워드로 분류기를 만든 국내 선행 연구. 판별력(discriminability) 점수라는 아이디어는 의도별 시그널 선정에도 그대로 쓸 수 있다.
정리
실무 레시피는 이렇게 요약된다: Kiwi(사용자 사전 + 오타 허용)로 형태소 분석 → soynlp로 말뭉치 고유 용어 발굴·사전 보강 → 형태소 우선 토크나이징 위에 분류기 → 노이즈 입력엔 n-gram 폴백. 그리고 분석기 선택을 반드시 실험 변수로 취급해 정확도와 지연시간을 함께 잴 것 — 13%p와 72배는 무시할 수 있는 차이가 아니다. 다음 글이 시리즈의 마지막이다: 사용자 로그를 연구·개발에 쓸 때의 개인정보보호법과 IRB.
— 사용자 의도 분석과 LLM 라우팅 시리즈 ⑨ / 다음 글(완결): 채팅 로그 연구와 개인정보 — 가명처리와 IRB
댓글 없음:
댓글 쓰기
국정원의 댓글 공작을 지탄합니다.