태국어를 처음 접하는 독자들이 가장 당황하는 순간이 있습니다. 바로 "단어 사이에 일반적인 띄어쓰기를 사용하지 않고, 문장 끝에 마침표(. )조차 찍히지 않는다"는 사실을 알게 되었을 때입니다. 사람도 어디서 숨을 쉬어야 할지 난감한 이 빽빽한 문자열을, 컴퓨터는 대체 어떻게 문장 단위로 올바르게 읽어낼 수 있을까요?
타이탄(ThaiTan) 개발팀이 시작부터 지금까지 가장 많은 시간과 노력을 쏟고 있는 분야 중 하나가 바로 문장 분절 엔진(Sentence Segmenter)입니다. 겉보기엔 단순해 보이지만, 자연어 처리(NLP) 분야에서 가장 까다로운 난제 중 하나로 꼽히는 태국어 문장 분절. 타이탄이 왜 이 문제에 집착하게 되었고, 오픈소스 통계 모델의 한계를 어떤 엔지니어링 접근으로 풀어가고 있는지 그 개발 과정을 공유하고자 합니다.
1. 태국어에서 '문장의 끝'을 찾는 일이 왜 어려울까?
영어와 한국어는 마침표나 물음표 같은 명확한 종결 부호가 있고, 단어와 단어 사이에 공백이 존재합니다. 하지만 태국어는 다릅니다.
- 단어와 단어가 빈틈없이 이어져 있습니다.
- 문장 끝에 마침표를 찍지 않습니다.
- 태국어에도 공백(วรรค)은 존재하지만, 이는 문장의 끝뿐 아니라 구(Phrase), 절(Clause), 단어 나열, 혹은 단순한 호흡 조절 등 다양한 언어적 경계로 쓰입니다.
따라서 컴퓨터에게 태국어 문장을 나누라는 것은, "마침표도 없는 글에서 표지어와 국소 패턴, 통계적 모델을 결합해 숨 쉴 자리를 알아서 찾아내라"는 고난도의 과제를 주는 것과 같습니다.
2. 기존 분절 과정에서 마주했던 4가지 대표적 오류
현재 태국어 오픈소스 생태계(PyThaiNLP 등)에서 널리 활용되고, 타이탄 역시 초기 기반으로 삼았던 모델은 CRFCut(조건부 무작위장, Conditional Random Fields 기반 확률 모델)입니다. 대량의 말뭉치에서 패턴을 학습해 공백 주변의 문장 분할 확률을 계산하는 방식입니다.
하지만 통계적 확률에만 의존하는 모델을 실제 온라인 뉴스 기사에 적용해 보면, 현실 기사의 복잡한 표면 표기 관습 때문에 다음과 같은 구조적인 분절 오류들이 반복해서 관찰되었습니다.
🔍 실제 기사 분석 중 발견한 4가지 대표적인 분절 오류
- ① 인용문 내부의 목록 번호 오분할:
“우리의 목표는 1. 품질 혁신 2. 고객 신뢰입니다”라고 대표가 밝혔다처럼 짧은 인용문 안에 번호 목록이 들어갈 때,2.앞의 공백을 문장 종결로 착각하여“2. 고객 신뢰입니다”라고 밝혔다만 따로 떼어내 버리는 현상입니다. (이 문제는 최근 진행된 Phase 5.2.1 정규식 개선을 통해 해당 테스트 사례에서 완전히 해결되었습니다.) - ② 인명과 직책 사이의 공백 분리:
태국 뉴스 관습상 ‘솜차이(인명) [공백] 협회장(직책)은 말했다’와 같이 이름 뒤에 공백을 두고 직책이 이어지는 경우가 많습니다. 단순 통계 모델은 이 공백을 문장 경계로 보고 직책 뒤에 본동사도 없는데 앞을 잘라버려, 주어가 없는 비문 조각을 만들어냈습니다. - ③ 닫히지 않은 괄호로 인한 과병합(Domino Merge):
인터넷 기사의 사소한 오타로 여는 괄호(()만 있고 닫는 괄호가 누락되었을 때, 문장 분절기가 괄호가 닫힐 때까지 후속 문장 전체를 하나의 거대 문장으로 묶어버리는 연쇄 병합 오류가 나타났습니다. - ④ 원문 좌표계의 뒤틀림:
분절 처리의 편의를 위해 내부에서 문자열의 공백을 임의로 다듬거나 치환하다 보면, 실제 원문 텍스트의 글자 위치(인덱스)와 어긋나게 됩니다. 이로 인해 브라우저 익스텐션에서 마우스를 올렸을 때 엉뚱한 단어에 사전 팝업이 뜨는 심각한 무결성 결함이 발생합니다.
문장의 경계가 엉뚱한 곳에서 잘리거나 묶이면, 그 뒤에 따르는 사전 검색 및 단어 매칭, 품사 판별, 발음 분석 등 후속 언어 처리 과정에도 오류가 전파될 수 있습니다.
3. 타이탄의 엔지니어링 접근: 3단계 하이브리드 아키텍처
타이탄은 순수 기계학습 모델 하나만으로는 신문 기사의 다양한 예외와 인용문 관습을 전부 감당할 수 없다고 판단했습니다. 대신, 확률적 분절 모델(CRFCut)의 전후에 정밀한 정서법 가드와 국소 패턴 기반 후처리 병합 규칙을 결합한 3단계 하이브리드 엔진을 구축해 나가고 있습니다.
분절 모델이 텍스트를 처리하기 전, 시각(17.00 น.), 소수점(1.5), 경찰·행정 약어(ภ.จว. 등), 대칭 따옴표("...", “...”)를 인식하여 원문 손상 없이 안전한 마스킹 토큰으로 먼저 보호합니다.
태국어의 주요 표지어(โดย, เมื่อ 등)가 나타났을 때 이를 무조건 문장 경계로 확정 잠금하지 않습니다. 표지어 앞뒤의 문자열 길이, 인접 토큰 및 접두사 패턴을 검사하여 문장 경계(SENTENCE), 절 경계(CLAUSE), 추가 판단이 필요한 후보 경계(CANDIDATE)로 처리 정책을 구분합니다. 이를 통해 문장 종결과 학습자가 호흡하며 읽기 편한 절 단위를 분리하여 처리할 수 있도록 설계했습니다.
본동사 후보가 없는 단편이 앞문장의 꼬리(시간, 수치 등)에 해당하면 뒷문장이 아닌 앞문장으로 역방향 병합하고, 인명 뒤에 이어지는 직책·직위 표현 등 113종의 후보군을 활용해 이름과 직책이 부당하게 분리되는 현상을 방지합니다. 특히 최종 세그먼트를 내부 가공 텍스트가 아닌 원문 슬라이스(raw_input[start:end])에서 직접 추출하여, 검증 데이터에서 원문 슬라이스 불일치(SliceErr), 0길이 세그먼트(ZeroWidth) 및 원문 재구성 오류를 모두 0건으로 유지했습니다.
4. "스스로를 속이지 않는다": 엄격한 2중 검증 체계
새로운 예외 규칙을 하나 추가해서 눈앞의 기사 하나가 잘 잘리게 만드는 것은 쉽습니다. 하지만 그 규칙 하나 때문에 다른 수천 개의 문장이 조용히 깨지는 '회귀(Regression)'가 일어난다면 그것은 개선이 아닙니다.
타이탄은 코드 수정 시 발생할 수 있는 부작용을 통제하기 위해, 성격이 전혀 다른 두 가지 검증 축을 구축하여 운영하고 있습니다.
※ LST20 466개 개발·검증 문서 기준 수치입니다. (F1 39.83%는 Phase 5.2의 기준 성능을 100% 온전히 유지하면서 인용구/괄호 결함 3건을 해결한 검증 결과이며, 독립 테스트셋의 일반화 성능을 의미하지는 않습니다.)
🧪 타이탄의 문장 분절 품질 검증 시스템
- 1. NECTEC LST20 말뭉치 기반 개발·검증 파이프라인 (466개 문서):
태국 국립전자컴퓨터기술원(NECTEC)의 표준 LST20 말뭉치 중 466개 뉴스 문서(5,604개 문장, 5,138개 골드 경계)를 활용해 개발 및 규칙 튜닝을 진행합니다. 코드 변경 시마다 정밀도(Precision), 재현율(Recall), F1 지표를 자동으로 산출하여 과분절과 과병합이 어떻게 움직이는지 전수 추적합니다. (※ 이 데이터는 규칙 튜닝용 개발·검증셋이며, 독립적인 최종 테스트셋과는 엄격히 구분하여 관리합니다.) - 2. 실제 언론사 기사 기반 Golden 54 회귀 스냅샷:
Thairath 등 현지 언론사의 실제 심층 기사 3편(54개 문단)에서 사람이 확인한 기존 분절 결과를 불변 스냅샷으로 보존합니다. 새로운 규칙을 적용했을 때 기존에 정상적으로 처리되던 문장들이 단 1문단이라도 의도치 않게 변경되면 테스트가 실패하도록 안전장치를 두었습니다. - 3. 35개 자동화 회귀 테스트 스위트:
원문 글자 추출 무결성, 약어 마침표 보존, ASCII 직선 따옴표 대칭, 괄호 내부 목록 보존 등 핵심 케이스 35개를 상시 테스트하여 35개 테스트 모두 통과를 검증했습니다.
5. 에필로그: 타이탄이 보이지 않는 경계에 집착하는 이유
사용자가 태국어 뉴스를 읽을 때 타이탄의 내부 엔진이 몇 단계로 돌아가는지, 뒤편에서 어떤 정규식이 작동하는지 굳이 알 필요는 없습니다. 낯선 태국어 단어의 의미를 바로 확인하고, 자연스러운 호흡으로 문장을 따라가며, 현지의 소식을 조금 더 편안하게 이해할 수 있다면 그것으로 충분합니다.
타이탄은 현재 약 45만 개 표제어의 PostgreSQL 통합 사전(Integrated Dictionary)과, 이를 웹 브라우저 환경에서 지연 없이 탐색하기 위해 약 40만 개 어휘를 메모리에 인덱싱한 Marisa-Trie 캐시, 그리고 자연스러운 독해 호흡 단위를 찾아내는 자체 하이브리드 분절 엔진을 독자적으로 개발해 가고 있습니다.
솔직히 말씀드리면, 타이탄의 문장 분절은 아직 가야 할 길이 멉니다. 지금도 복잡한 장문이나 구어체 기사에서는 어색하게 끊기거나 길게 이어지는 문장들이 분명히 존재합니다.
💡 "완성된 마법 같은 AI는 없습니다. 다만 실제 언어를 사용하는 사람들의 불편을 관찰하고, 문제를 하나씩 정직하게 분석하여, 문장 하나의 경계를 꾸준히 다듬어 나가는 엔지니어링이 있을 뿐입니다."
타이탄은 앞으로도 겉보기 화려한 포장보다, 가장 밑바닥에서 독해의 뼈대를 이루는 문장 하나, 단어 하나의 정확성을 위해 묵묵히 나아가겠습니다.