![]() |
| <Barun-Tui(바른띄) 모델 개발에 대략 2천만 문장의 데이터가 사용되었다> |
딥러닝, 직접 해보니 아무것도 아닌데?
「후처리 특화 텍스트 교정기」를 제작하면서, 가장 아쉬웠던 점은 내가 보유한 수만 파일의 텍스트 문서를 활용해 나만의 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 친구가 있었다." 한 줄 남겨주신다면, 저에게는 그보다 더 큰 영광은 없을 것입니다.



바이두 넷디스크 팁
기타 벤치마크 자료
Windows 팁
0 comments:
댓글 쓰기
댓글은 검토 후 게재됩니다.
본문이나 댓글을 정독하신 후 신중히 작성해주세요