바른 vs Khaiii
바른 vs Khaiii — 트랜스포머 기반의 우위
Khaiii는 카카오가 공개한 한국어 형태소 분석기로, CNN(합성곱 신경망) 기반의 딥러닝 모델을 사용합니다.
바른 역시 딥러닝 기반이지만, 트랜스포머를 쓰고 분석을 분절(Segmenter) → 품사 태깅(PosTagger) 두 단계로
나누어 처리한다는 점이 다릅니다. 둘 다 사전에만 의존하지 않는 학습 기반 분석기라는 공통점이 있지만,
모델 구조와 처리 단계 설계에서 차이가 드러납니다.
한눈에 보는 비교
| 항목 | 바른 | Khaiii |
|---|---|---|
| 모델 구조 | 트랜스포머(분절 + 태깅 단계 분리) | CNN 기반 |
| 처리 단계 | 분절 → 품사 태깅 → 후처리 | 음절 단위 분석 + 태깅 |
| 문맥 처리 | 어텐션으로 넓은 문맥 반영 | 합성곱 윈도우 중심 |
| 사용자 사전 | 무중단 실시간 갱신(파일 변경 감지) | 사전 적용 방식 상이 |
| 띄어쓰기 보정 | auto_spacing·auto_jointing 내장 |
별도 처리 |
| 제공 형태 | 서버(gRPC/REST/connect-web) + 다국어 클라이언트 | 라이브러리 |
| 품사 체계 | 국립국어원 기준 47품사 + 8대 단위 | 세종 태그셋 기반 |
왜 분절 단계를 따로 두는가
한국어는 교착어라서 한 어절 안에 여러 형태소가 활용·축약·생략된 채 붙어 있습니다.
바른은 품사를 붙이기 전에 "어디서 끊을지"를 전담하는 분절 단계를 먼저 둡니다.
각 단계가 더 단순한 문제를 풀게 되어 전체 정확도가 올라갑니다.
트랜스포머와 CNN의 차이
Khaiii의 CNN은 합성곱 윈도우 안의 지역적 패턴을 잘 잡습니다. 가볍고 효율적인 구조이지만,
멀리 떨어진 문맥을 반영하는 데에는 한계가 있을 수 있습니다.
바른의 트랜스포머는 어텐션으로 문장 안의 넓은 문맥을 함께 보기 때문에,
중의성이 있는 표현이나 긴 의존 관계에서 강점을 기대할 수 있습니다.
모델 구조의 자세한 설계는 트랜스포머 구조에서 다룹니다.
또한 바른은 분절을 따로 학습해, 활용·축약으로 복원된 형태소가 원 음절의 정확한 위치를 갖도록
후처리에서 오프셋을 다시 계산합니다. 예를 들어 킨데요는 키+이+ㄴ데+요로 복원되며,
키·이·ㄴ데이 모두 같은 시작 위치를 가리키도록 처리됩니다.
바른의 분절 모델은 음절마다 분절 레이블을 부여하며, 공백 처리 규칙(SP)을 포함해 116개 레이블(그중 14개는 맞춤법 검사 오류 탐지용)을 사용합니다.
여기에 형태정보를 포함한 임베딩으로 표면형이 같아도 형태가 다른 단어 12,175개를 구분합니다. 이런 설계 덕분에 분절 단계에서부터 형태 정보를 함께 복원합니다.
분석이 흐르는 전체 단계는 분석 파이프라인 개요에서, 형태정보 임베딩은 임베딩에서 더 볼 수 있습니다.
운영 관점의 차이
바른은 분석 엔진을 서버로 제공하므로, gRPC·REST·connect-web으로 호출하고 다국어 클라이언트를 붙일 수 있습니다.
사용자 사전의 파일 변경을 실시간으로 감지해 무중단으로 갱신하고, 띄어쓰기·붙여쓰기 보정을 분석 옵션으로 함께 켤 수 있습니다.
수치 비교 주의
바른의 정확도(품사 태깅 99.6%, 어절 분리/복원 99.7%)는 자체 평가셋 기준입니다.
Khaiii의 정확도·속도는 모델 버전, 평가셋, 하드웨어, 측정 방법에 따라 달라지므로
직접 비교가 필요하면 같은 환경에서 동일 입력으로 측정해야 공정합니다.
관련 문서
- 바른 vs Kiwi · 바른 vs Mecab-ko — 다른 분석기와의 비교
- 정확도 99.6%는 어떻게 측정했나 — 평가셋과 지표 정의
자주 묻는 질문
Q. CNN 기반 Khaiii보다 트랜스포머 바른이 항상 정확한가요?
모델 구조만으로 우열을 단정할 수는 없습니다. 다만 트랜스포머는 넓은 문맥을 반영하기 좋고,
바른은 분절과 태깅을 분리해 각 단계를 단순화했습니다. 자체 평가셋에서 품사 태깅 99.6%,
어절 분리/복원 99.7%를 기록했습니다.
Q. Khaiii처럼 라이브러리로 임베드할 수 있나요?
바른은 서버 형태로 제공되며, 다양한 언어의 클라이언트로 호출하는 방식입니다.
폐쇄망에서는 설치본을, 클라우드에서는 api.bareun.ai를 사용할 수 있습니다.
Q. 분절 단계를 따로 두면 느려지지 않나요?
분절과 태깅을 나누면 각 단계가 더 쉬운 문제를 풀게 되어 정확도가 올라갑니다.
처리 속도는 executionProvider(CPU/GPU)와 배치 설정으로 조정할 수 있습니다.
Q. 바른의 분절 모델은 어떤 규칙으로 동작하나요?
바른의 분절 모델은 음절마다 분절 레이블을 부여하는 트랜스포머 인코더로, 공백 처리 규칙을 포함해 116개 레이블을
사용합니다. 그중 14개는 맞춤법 검사 오류 탐지용입니다. 또한 형태정보를 포함한 임베딩으로 표면형이 같아도 형태가
다른 단어 12,175개를 구분해, 분절 단계에서부터 형태 정보를 함께 복원합니다.
도움이 되었나요?