제 0.8B 파인튜닝 모델이 CPU에서 문장당 138ms로 스페인어 교정 작업을 수행합니다
요약
로컬 환경에서 실행되는 스페인어 교정기를 개발하고 그 과정을 공유합니다. 이 도구는 llama.cpp 기반의 C++ 애플리케이션으로, 0.8B 모델을 파인튜닝하여 제작되었습니다. CPU에서도 문장당 138ms로 작동하며, 기존 대비 수정률이 낮아 높은 정확도를 보여줍니다.
핵심 포인트
- Windows와 Linux에서 100% 호환되는 로컬 실행 환경입니다.
- Qwen3.5-0.8B 모델을 파인튜닝하여 크기 529 MB의 경량화된 구조를 가집니다.
- CPU에서도 문장당 138ms라는 효율적인 성능을 보여줍니다.
- 수정률이 낮은 것이 장점이며, LanguageTool 대비 정확도가 높습니다.
저는 완전히 로컬 환경에서 실행되는 스페인어 교정기를 개발해 왔고, 마침내 출시하게 되어 그 과정을 공유하고자 합니다. 이 도구는 스페인어만 수정하지만, 저는 이 접근 방식이 다른 언어나 좁은 범위의 작업에도 효과가 있을 것이라고 생각합니다. 만약 프로젝트에 청중이 생긴다면, 영어 교정기 버전도 출시할 계획입니다 :) 앱을 실행하는 것은 더 좋은 점은 이 앱이 Windows와 Linux의 모든 앱과 100% 호환된다는 것입니다. 어떤 앱에서든 텍스트를 선택하고 Ctrl+Alt+Space를 누르면, 작은 팝업창에 변경 사항과 간략한 설명이 표시되며, Enter 키를 누르면 선택된 내용이 대체됩니다. MIT가 개발했으며 llama.cpp 기반의 C++ 애플리케이션입니다. 이 모델은 Qwen3.5-0.8B를 약 4만 쌍의 데이터로, 2 에포크(epochs), 학습률(lr) 1e-5를 사용하여 완전한 파인튜닝(fine-tune, LoRA 아님)을 거친 것입니다. Q4_K_M과 imatrix를 사용했을 때 크기는 529 MB입니다. 학습에는 임대 GPU에서 22분이 걸렸으며, 모든 평가를 포함한 전체 임대 비용은 약 $2.50이었습니다. GPU는 RTX 5090을 임대하여 테스트했습니다 (저는 평범한 사람이라 집에는 이 GPU가 없습니다). 저는 자체적으로 만든 벤치마크에서 이를 테스트했는데, 세 부분으로 총 2,388개의 사례를 포함합니다: 실제 위키피디아 편집본, 위키피디아 토론 페이지, 그리고 합성된 업무 이메일 및 채팅 기록입니다.
F0.5:
| Model Wiki edits Talk pages Emails/chat | |
|---|---|
| revisa-0.8b (fine-tuned) | 81.5 80.0 92.0 84.5 |
| revisa-0.8b without the C++ filters | 77.4 75.8 91.7 81.6 |
| Qwen3.5-0.8B, untuned | 70.4 67.9 71.2 69.9 |
| Qwen3.5-2B, untuned | 73.8 66.9 81.2 74.0 |
| Gemma 4 E2B, untuned | 65.5 65.5 94.1 75.0 |
| Qwen3.5-4B, untuned | 83.6 67.4 88.4 79.8 |
| Gemma 4 E4B, untuned | 74.4 79.0 95.1 82.8 |
| Qwen3.5-9B, untuned | 79.8 69.6 91.2 80.2 |
| LanguageTool | 6.6 24.1 52.8 74.1 50.4 |
| Claude Sonnet, high reasoning (cloud, upper bound) | 98.0 91.8 98.2 96.0 |
| Gemini 3.8 Flash, high reasoning (cloud, upper bound) | 98.7 92.3 98.4 96.5 |
이 도구는 모든 부분에서 이미 올바른 문장의 3% 미만만을 수정합니다. LanguageTool은 정확한 위키피디아 문장 중 39%를 수정하는데, 이것이 제가 이 프로젝트를 시작하게 된 이유와 일맥상통합니다.
아직 모르는 분들을 위해 말씀드리자면, LanguageTool은 문법 및 철자 오류를 확인하는 데 있어 기준점(benchmark)입니다. (더 많은 정보: https://en.wikipedia.org/wiki/LanguageTool ) 제가 배운 몇 가지 사실들이 있습니다: 훈련 데이터의 대부분은 LLM이 생성한 것이 아닙니다. 저는 Wikipedia, Tatoeba, Common Voice에서 올바른 텍스트를 가져와 규칙 기반 오류 주입기(rule-based error injector)로 분해하므로 정확한 답을 알고 있습니다. 예시 중 약 3분의 1은 변경되지 않고 그대로 유지되어야 하는 올바른 문장이며, 이것이 오탐지율(false alarms)을 낮게 유지하는 비결입니다. 모델은 아무것도 설명하지 않습니다. 수정된 문장만 반환합니다. 그런 다음 일반 C++가 단어 차이점(word diff)을 수행하고, 각 편집 사항을 고정된 설명을 가진 31가지 오류 유형 중 하나에 배치하며, 인식하지 못하거나 너무 많이 재작성하는 것은 버립니다. 작은 모델들은 많은 확신을 가지고 문법 규칙을 발명하므로, 저는 그것을 허용하지 않았습니다. 속도를 위해 사용자 자신의 문장이 추측 초안(speculative draft)이 됩니다. 왜냐하면 수정된 문장은 거의 같은 텍스트이기 때문입니다. 저는 2.2배의 성능 향상을 얻었습니다: 8 스레드에서 중앙값 138ms 대 그리디 방식 305ms였으며, 500개 문장 샘플의 99.4%에서 그리디와 동일한 출력을 보였습니다. 까다로운 부분은 Gated DeltaNet 레이어가 부분적으로 되돌릴 수 없는 순환 상태(recurrent state)를 유지한다는 것이어서, 각 검증 패스 전에 상태를 스냅샷으로 찍어야 했습니다. 하지만 앱이 아주 잘 작동해서 기쁩니다. https://preview.redd.it/r8lv0gpvos0i1.png?width=1600&format=png&auto=webp&s=30971b3aba5f6187ea18100d1d7585e5fb05fa72 주의사항: 이것은 저의 벤치마크입니다. 최고의 수정본(gold corrections)은 서로 다른 계열의 두 LLM이 독립적으로 작업하고, 의견 불일치가 있을 때 토론 라운드를 거쳐 점수화되기 전에 동결된 것입니다. 미세 조정되지 않은 모델들은 동일한 지침과 필터를 받았습니다. 더 큰 미세 조정되지 않은 모델들(Wikipedia 편집에 대한 Qwen3.5-4B, 이메일에 대한 Gemma 4 E4B)이 일부 부분에서는 승리하지만, 경계선상의 문장들을 제거하면 평균적으로 통과합니다. 따라서 성공의 큰 부분은 언제 건드리지 말아야 하는지 아는 것입니다. 추론 능력을 갖춘 최첨단 클라우드 모델들은 여전히 약 96점 수준이므로, 개선할 여지가 있습니다.
전체 과정 설명: https://manuelgs.com/en/blog/revisa-case-study/
앱(App): https://manuelgs.com/en/revisa/
모델 (GGUF): https://huggingface.co/manuelgscom/revisa-0.8b-GGUF
벤치마크(Benchmark): https://huggingface.co/datasets/manuelgscom/revisa-bench-es
소스(Source): https://github.com/manuelgscom/revisa
다른 편집 작업에 '입력-초안(input-as-draft)' 트릭을 사용해 본 사람이 있나요? 영어가 모국어가 아니어서 뭔가 이상하게 들릴 수 있다면 죄송합니다. 데이터나 훈련에 관한 질문에는 기꺼이 답변해 드리겠습니다.
/u/AlternativeEnough352가 제출했습니다. [링크] [댓글]
AI 자동 생성 콘텐츠
본 콘텐츠는 r/LocalLLaMA의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기