교정 파이프라인 한눈에
바른 맞춤법 검사기 전체 파이프라인 한눈에
바른의 맞춤법 검사는 하나의 모델이 문장을 통째로 고쳐주는 방식이 아닙니다.
형태소 분석 결과를 받아 여러 단계의 규칙 교정을 먼저 적용하고, 규칙으로 풀기 어려운 부분만 LLM에 맡기는
하이브리드 파이프라인입니다. 이 글은 교정 요청 하나가 어떤 순서로 처리되는지를 한눈에 보여주는 개요입니다.
맞춤법 검사 API는 RevisionService의 CorrectError(단발)와 StreamCorrectError(스트리밍)로 제공됩니다.
입력 문장은 먼저 형태소 분석을 거친 뒤, 아래 순서대로 교정 파이프라인을 통과합니다.
바른 교정기의 4대 오류 필터링
바른 교정기는 한 가지 방법에 기대지 않고, 성격이 다른 네 가지 오류 필터링을 겹쳐서 오류를 잡습니다.
| 필터링 | 무엇을 잡나 | 방식 |
|---|---|---|
| ① 분절 단계 오류 유형 | 활용·축약·탈락 등 형태적 오류 | 116개 분절 레이블 중 14개 오류 유형으로 분절 단계에서 식별 |
| ② 음소 기반 사전 | 맞춤법 규정에 어긋난 표기 | 사전을 NFD(초·중·종성 분해)로 구축해 음소 단위로 검색 |
| ③ LLM 혼동 교정 | 발음이 비슷해 헷갈리는 단어쌍 | 맥락 의미를 보고 LLM이 적절한 단어 선택 |
| ④ 문장 오류 모델 | 문장 전체 관점의 오류 | 문장 단위 점검 |
①의 분절 오류는 형태소 분석의 "분절 단계"에서 식별되며, 분절 오류가 있는 어절은 이어서 올바른 형태로 복원 처리됩니다. ②~④에 대한 자세한 내용은 두음법칙·자모 오류 규칙, revise-ai 카테고리, 아래 〈구현 예정〉 절을 참고하세요.
교정기는 이렇게 설계됐습니다
바른 교정기는 다음 흐름으로 설계됐습니다: 한글 맞춤법·표준어 규정 이해 → 오류 유형에 맞춘 데이터 준비 → 오류 판별 모델 → 비표준어 처리 로직 → 문법성 모델 → 남은 과제(외국어 표기·문장 표현). 즉 어문 규정을 먼저 면밀히 분석한 뒤, 그 규정을 사전 데이터와 모델로 옮기는 순서를 따릅니다.
graph TD
IN[입력 문장] --> POST[토큰 후처리];
POST --> SPACE[규칙 기반 띄어쓰기·붙여쓰기 교정];
SPACE --> MERGE[블록 병합];
MERGE --> CHECK[어절별 검사];
CHECK --> FREQ[빈도 기반 오타 교정];
CHECK --> NONSTD[비표준어 교정];
CHECK --> CONF[혼동어 교정 revise-ai];
FREQ --> FALL[미등록·분석불능 어절 LLM 교정];
NONSTD --> FALL;
CONF --> FALL;
FALL --> LSPACE[띄어쓰기 모호성 LLM 판별];
LSPACE --> OUT[교정 결과 + 근거];
1단계 — 토큰 후처리
형태소 분석기가 내놓은 어절·형태소 배열을 교정에 쓰기 좋은 형태로 정리합니다.
이 단계에서 미등록단어(OOV), 분석불능(NA), 미분류(UNK)처럼 추가 검토가 필요한 어절이 표시됩니다.
2단계 — 규칙 기반 띄어쓰기·붙여쓰기 교정
규칙에 따라 어절 경계를 바로잡습니다.
아름다운강산 → 아름다운 강산 처럼 확실한 경우는 이 단계에서 정리됩니다.
그다음/그 다음 처럼 규칙만으로 정하기 어려운 모호한 경우는 표시만 해두고 뒤의 LLM 판별로 넘깁니다.
3단계 — 블록 병합
교정 단위를 RevisedBlock 단위로 묶습니다. 각 블록은 원문 구간(origin)과 교정 후보(revisions[])를 담으며,
복합어처럼 안쪽에 또 교정이 필요한 경우 nested[]로 중첩됩니다.
4단계 — 어절별 검사
블록 안의 어절을 하나씩 점검합니다. 세 가지 규칙 교정이 이 단계에서 동작합니다.
| 검사 | 예시 |
|---|---|
| 빈도 기반 오타 교정 | 스빈다 → 습니다 |
| 비표준어 교정 | 글장이 → 글쟁이, 낌을 → 낌새를 |
| 혼동어 교정(revise-ai) | 의미가 헷갈리는 단어쌍 보정 |
왜 규칙을 먼저 돌리나요?
한국어 맞춤법 오류의 큰 부분은 자주 반복되는 오타, 비표준어, 띄어쓰기에서 나옵니다.
이런 유형은 사전과 규칙으로 빠르고 일관되게, 그리고 근거(rule_article)까지 붙여 교정할 수 있습니다.
규칙으로 충분한 부분을 먼저 처리하면 LLM 호출을 줄여 속도와 비용, 안정성을 모두 챙길 수 있습니다.
5단계 — 미등록·분석불능 어절 LLM 교정
규칙으로 풀리지 않은 어절, 즉 미분류(UNK)·분석불능(NA)·확인 필요(CONFIRM) 어절만 LLM으로 교정합니다.
이때 한글 편집거리(레벤슈타인 거리)로 원문과 너무 동떨어진 결과는 거부해 과교정을 막습니다.
결과는 어절 단위로 캐시(MD5 키)되어 같은 입력을 다시 호출하지 않습니다.
6단계 — 띄어쓰기 모호성 LLM 판별
2단계에서 모호하다고 표시해 둔 띄어쓰기·붙여쓰기를 LLM으로 판별합니다. 복합명사를 붙일지 띄울지를 판단하는 처리도 여기서 이뤄집니다. 이 단계 역시 캐시를 활용합니다.
결과 — 교정 + 근거
최종 응답 CorrectErrorResponse는 원문(origin)과 교정문(revised)뿐 아니라,
교정 블록(revised_blocks[])과 각 교정의 근거를 담은 helps 맵을 함께 돌려줍니다.
ReviseHelp에는 교정 이유(comment), 예시(examples), 규정 출처(rule_article)가 들어 있어
"왜 이렇게 고쳤는지"를 사용자에게 설명할 수 있습니다.
〈구현 예정〉 문장 레벨 오류 교정
위 4대 필터링이 어절·단어 단위 오류를 다룬다면, 문장 전체를 보는 문장 레벨 오류 교정은 LLM을 활용해 구현할 예정입니다. 대상 오류 유형으로는 의미 중첩, 중의성, 지나친 생략, 피동 남용, 사동 남용, 주술(주어·서술어) 호응 문제, 외래어 남용, 주어·목적어 호응, 적절하지 않은 어휘, 구두점 등이 검토되고 있습니다.
한 문장으로 정리하면
바른은 규칙으로 대부분을 빠르게 고치고, 모호하거나 미등록인 부분만 LLM에 맡기는 하이브리드 교정으로 속도·근거·정확도를 동시에 잡습니다.
자주 묻는 질문
Q. 교정 파이프라인은 어떤 순서로 동작하나요?
토큰 후처리 → 규칙 기반 띄어쓰기 교정 → 블록 병합 → 어절별 검사(빈도 오타·비표준어·혼동어) → 미등록·분석불능 어절 LLM 교정 → 띄어쓰기 모호성 LLM 판별 순으로 동작합니다.
Q. 바른 교정기의 4대 오류 필터링은 무엇인가요?
① 116개 분절 레이블 중 14개 오류 유형으로 분절 단계에서 형태적 오류를 식별, ② NFD(음소) 기반 사전 검색, ③ 발음이 비슷한 단어를 맥락으로 가려내는 LLM 혼동 교정, ④ 문장 전체를 보는 문장 오류 모델입니다.
Q. 문장 전체의 오류도 잡아주나요?
의미 중첩, 중의성, 지나친 생략, 피동·사동 남용, 주술 호응, 외래어 남용, 구두점 같은 문장 레벨 오류 교정은 LLM을 활용해 구현할 예정입니다. 현재 파이프라인은 어절·단어 단위 오류를 4대 필터링으로 처리합니다.
Q. 교정 결과에 이유도 함께 나오나요?
네. 응답의 helps 맵에 담긴 ReviseHelp가 교정 이유(comment), 예시(examples),
규정 출처(rule_article)를 제공합니다.
도움이 되었나요?