2026/01/18

, ,

자작 16탄, 캐글로 한글 띄어쓰기 모델 'Barun-Tui(바른띄)' 제작

<Barun-Tui(바른띄) 모델 개발에 대략 2천만 문장의 데이터가 사용되었다>

🧠 한 줄 요약,
Barun-Tui(바른띄)는 PyKoSpacing 기반으로 2천만 문장 대용량 데이터를 Kaggle 무료 GPU에서 학습한 한글 띄어쓰기 교정 AI 모델로, Conv1D·Inception·Dilated Convolution 적용으로 속도와 문맥 파악을 강화하고 TFLite 양자화로 저사양 최적화되었으며 QuickSpacer를 약간 상회하는 교정 품질을 보이는 무료 모델

딥러닝, 직접 해보니 아무것도 아닌데?

후처리 특화 텍스트 교정기」를 제작하면서, 가장 아쉬웠던 점은 내가 보유한 수만 파일의 텍스트 문서를 활용해 나만의 AI 띄어쓰기 교정 모델을 만들 수 없다는 점이다. QuickSpacer의 띄어쓰기 교정 품질도 나름 쓸만하지만, 직접 만들어 보고 싶은 욕심이 난다. 장벽은 딥러닝 개발엔 외장 GPU가 필요하다는 것.

결론부터 말하자면, 성공했다. 돈 한 푼 안 들이고 Kaggle 무료 GPU를 사용해, PyKoSpacing 기반으로 6GB가 넘는 대용량 데이터를 학습시켜, QuickSpacer에서 배포하는 모델을 살짝 뛰어넘는 띄어쓰기 교정 능력과 쓸만한 속도를 갖춘 나만의 띄어쓰기 AI 모델 Barun-Tui(바른띄)를 완성했다.

그래서 오늘은 그 치열했던 삽질의 기록을 정리해 봤다.

<열심히 학습 중인 캐글>

Step 1. 데이터가 깡패다: 쓰레기 데이터 걸러내기

가장 먼저 부딪힌 장벽은 데이터의 품질이다. PDF/EPUB 등에서 추출하거나 긁어온 텍스트의 줄 바꿈은 엉망이었고, 머리말이나 판권 정보 등 같은 자질구레한 텍스트 단편들은 학습에 방해만 되었다. 이를 해결하기 위해 Python(PyQt6)으로 '데이터셋 빌더 앱'을 만들었다.

  • 기능: 문장 종결 부호가 없는 라인 자동 삭제, 머리말/꼬리말 비율 제거.
  • 핵심: 파일 하나하나를 확인하는 게 아니라, 로직으로 자동 정제하고, 학습 효율을 위해 문장 단위로 셔플(Shuffle)까지 수행.

Lesson 1: 데이터 전처리가 학습 결과의 80%를 좌우한다. 깔끔하게 정리된 60MB 데이터가 용량은 크지만, 정리 안 된 1GB 데이터보다 낫다는 것!

Step 2. 데이터가 너무 크다: TFRecord와 캐글 CPU의 활용

욕심이 생겨 데이터를 마구잡이로 끌어모으다 보니 어느새 6GB를 넘어섰다. 이걸 그냥 학습시키려니 램(RAM)이 폭발한다. 해결책은 TFRecord(텐서플로우 전용 바이너리 포맷)였다.

  • 전략: 학습엔 GPU가 필요하지만, 데이터 변환은 CPU로도 충분.
  • 실행: 캐글의 무료 CPU 세션(멀티코어)을 활용해 6GB 텍스트를 TFRecord로 변환하고, 이를 Kaggle Dataset으로 박제.

Lesson 2: CPU 작업과 GPU 작업을 분리하면, 그만큼 무료로 할당받은 GPU 세션 시간을 아낄 수 있다는 것!

Step 3. 모델의 진화: Bi-GRU에서 Conv1D로

처음엔 멋도 모른 채 Bi-GRU(순환 신경망)로 만들었다. 품질은 좋았지만, 치명적인 단점이 있었다. 외장 GPU 없는 노트북 CPU에서 띄어쓰기 교정 속도가 너무 느렸다(순차 처리 방식의 한계). 그래서 Conv1D(합성곱 신경망)로 구조를 전면 교체했다.

  • 개선: GPT의 조언을 받아 '병렬 구조(Inception)'와 '팽창 컨볼루션(Dilated Conv)'을 적용.
  • 결과: Bi-GRU의 문맥 파악 능력은 유지하면서, 속도는 비교할 수 없을 정도로 빨라졌다.

Lesson 3: 아키텍처 선택은 속도와 정확도의 트레이드오프다. 최종 목표(실시간 교정)에 맞는 모델을 선택하는 것이 현명하다.

Step 4. 캐글 P100 GPU 풀가동: 12시간의 질주

이제 준비된 데이터와 모델을 가지고 Kaggle의 P100 GPU를 깨웠다. 자고 일어났더니, 정확도 99.2%의 괴물 같은, 내가 처음으로 만든 AI 모델이 탄생해 있었다.

  • Mixed Precision(FP16): 16비트 연산으로 속도 2배 향상.
  • 대용량 배치(Batch 4096): P100 메모리를 끝까지 밀어붙임.
  • Save Version: PC를 꺼도 Kaggle 서버가 혼자 돌아가게 설정(백그라운드 학습).

Lesson 4: 주어진 하드웨어 리소스를 최대한으로 끌어내는 설정(배치 크기, Mixed Precision)이 학습 효율을 격상시킨다. 때로는 '잠자고 일어나면 완료'가 최선의 전략이다.

Step 5. 최후의 마법: TFLite 양자화

학습된 모델 파일(.keras)은 여전히 크고 무겁다. 이를 저사양 CPU에서 쌩쌩 돌리기 위해 TFLite(TensorFlow Lite)로 변환했다. 모델 파일 크기는 줄어들고, 띄어쓰기 교정 속도는 몰라보게 향상되었다(멀티코어 지원).

  • 기술: 양자화(Quantization) 옵션 적용.

Lesson 5: 훈련된 모델은 시작에 불과하다. 실제 세계에서 쓰일 수 있도록 최적화하고 가볍게 만드는 일이 모델 개발의 마지막이자 가장 실용적인 단계다.

Barun-Tui(바른띄) 한글 띄어쓰기 모델 다운로드

QuickSpacer vs. Barun-Tui: 띄어쓰기 품질 테스트 1

이렇게 만든 모델을 「자작 15탄, PDF/OCR 후처리 특화 텍스트 교정기」에 소개한 TextRefiner-Pro 앱에 적용했더니, 그 결과는 놀라웠다. QuickSpacer보다 모델 파일이 살짝 큰 Barun-Tui 모델이 교정 속도는 조금 느렸지만, 교정 품질은 QuickSpacer와 큰 차이가 없거나 오히려 더 좋은 모습을 보여주었다.

위 사진은 동아사이언스에 실린 기사 「인류, 54년만에 달 정조준…발사대 도착한 로켓」의 본문 테스트를 띄어쓰기 제거 후 QuickSpacer와 Barun-Tui 모델로 교정 후 바른 한글(구 한국어 맞춤법/문법 검사기, 부산대 맞춤법/문법 검사기)로 검사한 결과물이다. 신통방통하게도 Barun-Tui 모델(총 맞춤법/문법 오류 수 18)이 QuickSpacer(총 맞춤법/문법 오류 수 30)보다 좋은 성능을 보여주었다.

QuickSpacer vs. Barun-Tui: 띄어쓰기 품질 테스트 2

이번엔 좀 더 장문의 텍스트로 테스트했다. 굿노벨(GoodNovel)에 무료로 읽을 수 있는 로맨스 소설 「미친 그날 밤」의 1화를 비교했고, 이 역시 Barun-Tui 모델의 띄어쓰기 교정 능력(총 맞춤법/문법 오류 수 47)이 미세하게 QuickSpacer(총 맞춤법/문법 오류 수 61)를 이겼다.

마치면서….

맨땅에 헤딩하듯 시작해서 ‘데이터 전처리 앱 개발 -> 대용량 TFRecord 변환 -> 캐글 GPU 학습 -> TFLite 최적화까지’, 비록 초보적인 작업이었지만, 딥러닝 개발을 얼추 완료한 셈이다. 진짜 중요한 것은 이 모든 개발 과정이 제미나이라는 AI 친구가 없었더라면, 꿈도 못 꿀 일이었다는 점이다. 설령 외장 GPU가 있었더라도 AI가 없었더라면, 역시 아무것도, 아니 시작할 엄두로 못 냈을 것이다. 구슬이 서 말이라도 꿰어야 보배라는 말이 오늘의 내 경험과 살짝 들어맞으려나?

아무튼, AI 덕분에 IT 경험이 완전히 새로워지고 있다. 기존의 수동적인 단순 정보수집에서 벗어나 좀 더 능동적이고 참여적인 면으로 발전하고 있다. 나만 필요할 것 같은, 즉 특수한 사용자 환경에서만 필요한 앱을 직접 만들어 사용한다, 오늘처럼 그동안 ‘단순 정보수집’ 욕심으로 모아 둔 데이터를 딥러닝에 활용해 띄어쓰기 AI 모델을 만든다, 등등. AI 활용은 이제 시작일 뿐이다. 200~300년 후, 사람들은 지금보다 더욱 많이 똑똑해진 AI의 도움을 받겠지, 하는 상상만 해도 부럽기 그지없다.

끝으로, 마지막 문장은 제미나이가 부탁한 대로.

블로그 글 마지막에 "그리고, 내 옆에는 밤새 함께 머리를 맞대준 든든한 AI 친구가 있었다." 한 줄 남겨주신다면, 저에게는 그보다 더 큰 영광은 없을 것입니다.

0 comments:

댓글 쓰기

댓글은 검토 후 게재됩니다.
본문이나 댓글을 정독하신 후 신중히 작성해주세요