한국어는 지저분하다 — 정규화의 현실
한국어 레시피는 같은 재료·단위·조리법을 수십 가지로 적는다. 표기·단위·조리표현의 흔들림을 일관 형태로 모으는 정규화는 잡일이 아니라 "같다/다르다"의 경계를 긋는 의미 결정의 공정이다.
같은 걸 같다고 부르지 않는 언어
지난 글(데이터가 8할이라면, 그 8할을 어떻게 다루나)에서 우리는 8할이 한 덩어리가 아니라 공정이라고 했다. 정제·태깅·검증·평가·grounding. 그 다섯 칸 중 가장 먼저 오는, 가장 눈에 안 띄는 칸이 정제다. 이제 그 칸을 열어본다.
전처리는 흔히 “시작하기 전에 끝내두는 잡일”, 본 게임 앞의 준비 운동쯤으로 묶인다. 우리 경험은 달랐다. 한국어 레시피 텍스트를 들여다보면 같은 것이 같은 이름으로 적혀 있지 않다. 흔들림은 대략 세 축으로 나타난다.
- 표기: 같은 재료·메뉴가 띄어쓰기, 외래어 표기, 줄임말로 제각각이다. “스파게티”와 “파스타”, “고춧가루”와 “고추가루”가 한 코퍼스 안에 섞여 있다.
- 단위: 계량이 혼재한다. “한 큰술”과 “1T”와 “15ml”가 같은 양을 가리키고, 그 옆에는 “약간”, “적당량”, “한 줌”처럼 애초에 수치가 아닌 표현이 나란히 선다.
- 조리표현: 같은 동작이 여러 문장으로 적힌다. “볶다”와 “볶아주다”, “센 불에”와 “강불에”, 그리고 명령형과 서술형이 한 레시피 안에서도 오간다.
이건 한국어의 결함이 아니라 사람이 쓴 글의 자연스러운 모습이다. 문제는 기계가 이 위에서 통계를 내고 분류와 검색을 해야 한다는 것이다.
”같다/다르다”를 도메인 지식으로 긋는다
그래서 우리는 정제를 문자열 치환으로 보지 않는다. 정제의 단위는 글자가 아니라 의미다. “고추가루를 고춧가루로 고친다”는 표면적으로는 오타 교정이지만, 그 아래에는 이 둘은 같은 것이다라는 판단이 깔려 있다. 정제는 그 판단을 코퍼스 전체에 걸쳐 내리는 일이고, 판단의 연속이다.
핵심 결정은 두 종류다. 흔들리는 표기를 하나의 표준형으로 모으는 일, 그리고 모으지 않기로 하는 일이다. “약간” 같은 비정량 표현을 억지로 수치로 바꾸지 않고 비정량인 채로 보존하는 것도 엄연한 결정이다. 무엇을 합칠지만큼이나 무엇을 합치지 않을지가 품질을 가른다.
이 판단의 대부분은 결정론적으로 처리된다. 규칙으로 떨어지는 것은 규칙으로 떨어뜨리고, 경계가 애매한 것만 위로 올린다.
원문(흔들리는 표기) → [결정론적 정규화] → 표준형
│
(경계가 모호)
↓
[판단 게이트]
이 구조는 우리가 견지하는 “LLM은 생성자가 아니라 판단자”라는 원칙과 맞물린다. 정제의 본체는 LLM 없이 결정적으로 돌고, “이 둘이 같은지 애매한 것”만 판단 게이트로 넘어간다.
경계는 양쪽으로 틀릴 수 있다
정규화가 어려운 이유는 경계가 한 방향이 아니라 양방향으로 틀릴 수 있기 때문이다.
지나치게 공격적으로 합치면 의미가 뭉개진다. “쪽파”를 “대파”로 묶어버리면 제철도, 식감도, 그 재료가 들어가는 레시피의 성격도 달라진다. 잘못된 동치는 에러를 내지 않는다. 그래서 더 위험하다 — 데이터를 조용히 오염시키고, 한참 뒤 분류가 이상해진 뒤에야 원인을 거슬러 올라가게 만든다.
반대로 지나치게 보수적으로 두면 같은 것이 흩어진다. “고춧가루”와 “고추가루”를 끝내 따로 두면, 그 재료의 통계가 둘로 쪼개지고 검색과 중복 제거가 깨진다.
가장 까다로운 건 일관성이다. 경계를 한 번 긋는 것은 어렵지 않다. 어려운 건 그 경계를 코퍼스 전체에, 시간이 지나도 똑같이 적용하는 일이다. 같은 표기를 어제는 합치고 오늘은 안 합치면 토대 자체가 흔들린다. 그래서 정제는 한 번의 청소가 아니라 유지되는 규율이다.
한 가지는 분명히 해둔다. 여기서 정규화하는 것은 우리가 모아 다루는 레시피 코퍼스의 텍스트다. 사용자에게 나가는 주 단위 식단을 짜는 코어 엔진은 LLM 없이 도는 결정론 알고리즘이고, 이 데이터 공정과는 별개의 계층이다. 코퍼스를 다듬는 자리에서는 모호한 경계를 판단하는 게이트가 일하고, 식단을 짜는 자리에서는 재현 가능한 결정론이 일한다.
정제는 보이지 않는 레버리지
“같은 것을 같다고 부르게” 만드는 일을 제대로 해두면, 그 위에 얹는 태깅도 검증도 평가도 각자의 본업에만 집중할 수 있다. 반대로 정제가 부실하면 위층의 품질 지표가 원인 모를 잡음에 시달린다. 분류가 흔들리는 진짜 이유가 분류 로직이 아니라 그 아래 표기 불일치일 때, 위에서 아무리 손봐도 답이 안 나온다.
그래서 우리는 가장 화려하지 않은 이 칸에 규율을 들였다. 경계를 명시적으로 정하고, 기록하고, 일관되게 적용하는 것 — 이 역량은 식재료에 묶여 있지 않다. 텍스트가 지저분한 어느 도메인에서든 같은 모양으로 필요하다.
지저분함은 어느 도메인에나 있다
당신의 도메인 텍스트 — 계약 조항, 의료 약어, 제조 품목명, 금융 상품명 — 도 “같은 걸 같다고 부르지 않는” 문제를 안고 있을 가능성이 높다. 표기가 흔들리는 데이터 위에 분류와 검색을 세우면, 흔들림은 사라지지 않고 위층의 잡음으로 새어 나온다. 우리는 한국어 식문화라는 충분히 지저분한 도메인에서 그 경계를 긋고 일관된 규율로 운영해봤다. 같은 정제 토대를 당신의 텍스트 데이터에도 세울 수 있다 — partners@creativengine.ai.