함께 읽는 AI 구축하기: 소형 모델 독서 튜터 제작기
요약
Hugging Face 해커톤을 위해 제작된 Read-Along AI는 소형 모델을 활용하여 아이들의 독서 연습을 돕는 오프라인 지원 앱입니다. MiniCPM을 미세 조정하여 음성 평가기로 사용하며, 개인정보 보호를 위해 로컬 실행이 가능한 구조를 갖추고 있습니다.
핵심 포인트
- 소형 모델(Small Model)을 활용한 프라이빗한 로컬 실행 환경 구축
- MiniCPM을 미세 조정하여 모호한 음성 전사를 정밀하게 평가
- 아동의 발달 단계를 고려한 부드럽고 즉각적인 피드백 루프 설계
- 대규모 클라우드 파이프라인 없이도 가능한 엔드 투 엔드 읽기 루프 구현
요약 버전
Read-Along AI는 Hugging Face Build Small Hackathon을 위해 제작된, 초기 독서 학습자를 위한 오프라인 지원 가능 독서 연습 앱입니다.
이 앱은 한 번에 하나의 짧은 문장을 보여주고, 아이가 도움을 받기 위해 개별 단어를 탭할 수 있게 하며, 소리 내어 읽는 시도를 기록하고 부드러운 피드백을 제공합니다. 깨끗하게 읽은 경우 즉시 통과됩니다. 불분명하거나 모호한 전사(transcripts)는 미세 조정(fine-tuned)된 MiniCPM 음성 평가기(phonetic evaluator)를 통해 다시 검토됩니다. 의미를 변화시키는 실수는 여전히 실패로 처리됩니다.
제출된 Space는 여기 있습니다:
https://huggingface.co/spaces/build-small-hackathon/read-along-ai
저장소(repository)는 여기 있습니다:
https://github.com/kingkw1/read-along-ai
미세 조정된 평가 모델은 여기 있습니다:
https://huggingface.co/kingkw1/minicpm-phonetic-evaluator
제작 이유
독서 연습은 놀라울 정도로 섬세한 상호작용입니다.
초보 독자에게는 반복, 격려, 그리고 즉각적인 피드백이 필요합니다. 하지만 피드백은 너무 가혹해지거나, 너무 늦어지거나, 혹은 성인이 매 순간 완전히 곁에 있어야만 하는 상황에 의존하기 쉽습니다. 표준 음성 인식(speech recognition) 또한 발달 중인 조음(articulation), 느린 말하기, 부분적인 확신, 그리고 어린 독자들에게 정상적인 미세한 발음 차이로 인해 어려움을 겪습니다.
Read-Along AI의 이면에 있는 제품적 질문은 다음과 같았습니다:
아이의 목소리를 대규모 호스팅 AI 파이프라인(pipeline)으로 보내지 않고도, 소형 모델(small-model) 앱이 독서 연습을 마치 이야기 옆에 인내심 있는 도우미가 있는 것처럼 느끼게 만들 수 있을까?
이 점이 이 프로젝트를 Backyard AI 트랙에 자연스럽게 부합하도록 만들었습니다. 의도된 사용자는 추상적인 기업 페르소나가 아닙니다. 집에서 짧은 독서 연습을 하는 가족이며, 이 앱은 단순하고, 프라이빗하며, 정서적으로 부담이 적어야 합니다.
무엇을 만들었는가
해커톤 MVP는 의도적으로 범위를 좁게 설정했습니다. 하나의 신뢰할 수 있는 문장 읽기 루프에 집중합니다:
- 크고 읽기 쉬운 텍스트로 짧은 커리큘럼 문장을 보여줍니다.
- 아이가 도움을 듣기 위해 어떤 단어든 탭할 수 있게 합니다.
- 아이가 전체 문장을 읽는 것을 녹음합니다.
- 오디오를 텍스트로 변환 (Transcribe) 합니다.
- 정확하게 정규화된 일치 (Normalized matches) 항목을 즉시 승인합니다.
- 유사하거나 모호한 전사 결과 (Transcripts)에 대해 미세 조정된 (Fine-tuned) MiniCPM 평가 모델에게 질문합니다.
- 성공을 축하하거나 부드럽게 재시도를 요청합니다.
현재 커리큘럼은 의도적으로 작게 구성되었습니다:
- "The cat sat."
- "The dog ran fast."
- "She had a red hat."
- "I love to play outside."
이러한 범위 설정 덕분에 데모에서 가장 중요한 부분들에 집중할 수 있었습니다: 엔드 투 엔드 (End-to-end) 읽기 루프, 아동 친화적 인터페이스, 개인정보를 보호하는 로컬 실행 (Local execution), 그리고 엄격한 문자열 매칭 (String matching)보다 발달 단계에 있어 더 공정한 평가 경로에 집중할 수 있었습니다.
엄격한 ASR만으로는 부족했던 이유
첫 번째 베이스라인 (Baseline)은 간단했습니다: 아이의 음성을 텍스트로 변환하고, 대소문자와 문장 부호를 정규화한 후 전사 결과가 목표 문장과 정확히 일치하는지 확인하는 것이었습니다.
이는 깨끗하게 읽었을 때를 위한 빠르고 좋은 경로이지만, 유일한 채점 규칙으로 사용하기에는 너무 취약합니다. 초기 독자들은 느리게 말하거나, 소리를 대체하거나, 복수형 어미를 붙이거나, ASR (자동 음성 인식)이 서로 다른 단어로 분리해 버리는 음성을 생성할 수 있기 때문입니다.
평가 세트의 예시:
scientist->scientistssunflower->sunny flowerswindow->wind up
이것들은 일반적인 NLP (자연어 처리) 환경에서는 모두 동일하지 않지만, 초기 읽기 연습 단계에서는 아이가 목표 단어를 시도했다는 그럴듯한 증거가 될 수 있습니다.
동시에, 앱이 무엇이든 허용하는 관대한 검사기가 되어서는 안 됩니다. 문장이 "She had a red hat"라면, "She had a blue hat"은 통과해서는 안 됩니다. 의미가 변했기 때문입니다.
이로 인해 2단계 평가 시스템이 도입되었습니다:
- 먼저 정확한 정규화 일치 여부를 확인합니다.
- 유사하거나 모호한 경우에만 MiniCPM의 음성적 판단 (Phonetic judgment)을 사용합니다.
MiniCPM의 응답을 확신 있게 파싱 (Parse)할 수 없는 경우, 앱은 보안상 실패(Fail closed)로 처리하고 아이에게 다시 시도하도록 요청합니다.
소형 모델 아키텍처 (Small-Model Architecture)
Read-Along AI는 이중 모드 아키텍처를 사용합니다.
터보 모드 (Turbo Mode)
터보 모드 (Turbo Mode)는 낮은 지연 시간 (latency)을 위해 Modal 엔드포인트를 통해 추론 (inference)을 라우팅합니다:
- ASR (자동 음성 인식)을 위한 Cohere Transcribe.
- 텍스트 음성 변환 (text-to-speech) 및 문장 오디오를 위한 OpenBMB VoxCPM.
- 정밀한 전사 (transcript) 판단을 위한 호스팅된 미세 조정 (fine-tuned) MiniCPM 평가기 (evaluator).
Modal은 또한 A100 인프라에서 MiniCPM 평가기를 위한 신속한 미세 조정 (fine-tuning) 워크플로우를 지원했습니다.
오프 더 그리드 모드 (Off the Grid Mode)
오프 더 그리드 모드 (Off the Grid Mode)는 개인정보를 보호하는 경로입니다. 이 모드는 Modal 호출 없이 Hugging Face Space 프로세스 내부에서 실행됩니다:
faster-whisper가 로컬 ASR을 처리합니다.- MiniCPM 평가기는
llama-cpp-python을 통해 Q4 GGUF 형식으로 실행됩니다. - 문장 및 단어 도움말은 고정된 커리큘럼 WAV 파일을 사용합니다.
- 단어 클립은 요청 시 생성되는 대신 로컬 타이밍 레이블 (timing labels)에서 잘라냅니다.
로컬 경로는 터보 모드보다 느리지만, 해커톤의 핵심 논지를 입증합니다: 소형화되고 집중된 모델들은 항상 프런티어 규모 (frontier-scale)의 클라우드 API에 의존하지 않고도 유용한 작업을 수행할 수 있습니다.
MiniCPM 음성 평가기 (Phonetic Evaluator)
미세 조정된 평가기는 openbmb/MiniCPM-2B-sft-bf16을 기반으로 합니다.
이 모델은 컴팩트한 이진 판정기 (binary judge)로 학습되었습니다. 대상 읽기 항목과 ASR 전사 (transcript)가 주어지면, 전사가 대상과 수용 가능한 음성적 일치 (phonetic match)를 이루는지 여부에 따라 True 또는 False만을 출력합니다.
학습 데이터 세트는 의도적으로 작고 작업 특화적으로 구성되었습니다:
- 50개의 아동 음성 ASR 예시.
- 38개의 정확한 ASR 일치를 긍정 예시 (positive examples)로 설정.
- 12개의 엄격한 일치 실패 사례를 수동으로 검토.
- 5개의 실패 사례를 수용 가능한 음성 또는 ASR 변형으로 레이블링.
- 7개의 실패 사례를 잘못된 내용 또는 증거 부족 부정 예시 (negatives)로 레이블링.
미세 조정 (fine-tuning)에는 Modal에서 LoRA를 사용했으며, 이후 병합된 모델을 GGUF로 변환하고 로컬 llama.cpp 추론을 위해 양자화 (quantized)했습니다.
이 모델은 독서 진단 도구, 언어 치료 도구 또는 일반적인 발음 채점기가 아닙니다. 이는 최종 앱이 실패 시 안전하게 차단되도록 유지하면서도, 제품 루프를 정확한 문자열 일치 (exact string matching)보다 더 인내심 있게 만들어주는 해커톤 MVP 구성 요소입니다.
측정 항목
평가용 노트북(evaluator notebook)은 다음 저장소(repository)에 문서화되어 있습니다:
https://github.com/kingkw1/read-along-ai/blob/main/notebooks/02_post_tuning_evaluation.ipynb
중요한 주의 사항: 이 결과는 훈련 데이터를 도출하는 데 사용된 동일한 50개의 예시에 대한 작은 출처(provenance) 및 스모크 테스트(smoke evaluation)입니다. 이는 앱이 프로젝트 예시들에 대해 의도된 경계(boundary)를 학습했음을 보여줍니다. 이는 광범위한 일반화(generalization)에 대한 주장이 아닙니다.
결과:
| 평가 관점 (Evaluation view) | 결과 |
|---|---|
| Baseline ASR 정확한 일치 수락률 (exact-match acceptance) | 38/50, 76.0% |
| ... |
제품 측면에서의 교훈은 헤드라인 수치보다 더 중요했습니다. 정확한 일치(exact-match) 경로는 유지되어야 하지만, 소형 평가기(evaluator)를 사용하면 ASR이 그럴듯한 유사 일치(near-matches)를 생성할 때 경험이 덜 가혹해질 수 있습니다.
단어 도움 기능은 그 자체로 하나의 작은 문제였습니다
클릭 가능한 단어 도움 기능은 이를 로컬(local)로 구현하려고 시도하기 전까지는 단순해 보입니다.
터보 모드(Turbo Mode)에서 앱은 TTS를 사용할 수 있습니다. 오프 더 그리드 모드(Off the Grid Mode)에서는 클라우드 호출을 피하기 위해 단어 도움 기능이 작동하기를 원했습니다. 따라서 앱은 문장 WAV 파일을 커밋(commit)하고 로컬 라벨 타이밍(label timings)에서 단어 클립을 슬라이스(slice)합니다.
단어 경계(word boundaries)를 찾는 몇 가지 접근 방식을 시도했습니다:
| 방법 | 수동 간격 적중 (Manual-gap hits) |
|---|---|
| 텍스트 길이 비례 분할기 (Text-length proportional splitter) | 0/13 |
| ... |
최종 로컬 탐지기(local detector)는 문장 지속 시간 사전 정보(sentence-duration prior)와 단시간 RMS 최솟값(short-time RMS minima)을 결합한 다음, 예상되는 내부 경계를 근처의 저에너지 프레임(low-energy frames)에 맞춥니다(snaps). 커밋된 라벨 세트에서, 이 방식은 13개의 내부 경계 중 12개를 수동으로 라벨링된 무음 간격(silence gaps)에 맞추었으며, 평균 경계 오차는 약 5ms였습니다.
이는 유용한 상기점이었습니다. 때로는 가장 강력한 소형 솔루션이 더 큰 모델이 아닐 수도 있다는 점입니다. 그것은 모델 출력(model output)을 감싸는 집중된 신호 처리 휴리스틱(signal-processing heuristic)입니다.
인터페이스는 더 이상 노트북처럼 보이지 않아야 했습니다
기본 Gradio는 AI 데모를 빠르게 구축하는 데 탁월하지만, 표준 Gradio 패널은 4세에서 7세 사이의 독자를 위한 적절한 인터페이스(surface)가 아닙니다.
아이들을 위한 UI는 Gradio 내부에서 실행되는 커스텀 HTML, CSS, JavaScript로 구성됩니다:
- 한 번에 하나의 긴 문장만 표시
- 도움을 받을 수 있는 클릭 가능한 단어 스팬 (word spans)
- 간단한 낭독 (read-aloud) 제어 기능
- 학습 루프 중 최소한의 기술적 텍스트 노출
- 진행 상황 피드백
- 성공 시 축하 효과(Confetti) 및 자동 진행
디자인 목표는 단순한 장식이 아니었습니다. 그것은 인지 부하 (cognitive load) 감소였습니다. 아이는 문장을 보고, 도움을 받고, 녹음하고, 다시 시도하기만 하면 됩니다. 모델 로그, API 위젯, 또는 데이터 과학 제어 도구들을 분석할 필요가 없어야 합니다.
성공적인 부분
이번 구축에서 가장 강력했던 부분은 다음과 같습니다:
- 좁은 범위의 MVP (Minimum Viable Product) 설정
- 빠른 경로를 위한 정확한 문자열 매칭 (exact string matching)
- 2단계 판정관으로서만 사용된 MiniCPM
llama.cpp를 통한 로컬 GGUF 경로- 빠른 반복 작업과 터보 모드 (Turbo Mode)를 위한 Modal 사용
- 안정적인 로컬 데모를 위한 전용 오디오 에셋 확보
- 구현 내용을 노출하는 대신 사용자에게 적합한 커스텀 Gradio 인터페이스 (surface) 구축
가장 큰 제품 측면의 성과는 앱이 부주의하지 않으면서도 관대할 수 있다는 점입니다. "Da dog ran fast"는 "The dog ran slow"와 다르게 처리될 수 있습니다. 이러한 차별화는 독서 튜터에게 매우 중요합니다.
아직 작동하지 않는 부분
현재 빌드는 여전히 프로토타입 단계입니다.
평가기 (evaluator)는 아주 작은 데이터셋으로 학습되었습니다. 더 큰 홀드아웃 평가 세트 (held-out evaluation set), 더 많은 부정적 예시 (negative examples), 더 많은 문장 수준의 예시, 그리고 아이들의 화자 특성, 마이크, 억양, 읽기 수준에 따른 더 많은 변동성이 필요합니다.
로컬 경로는 작동하지만, 이상적인 것보다 느립니다. 약 3초 정도의 낭독 시도가 배포된 Space에서는 엔드 투 엔드 (end-to-end)로 약 10초가 소요될 수 있습니다. 이는 해커톤 데모로는 수용 가능하지만, 실제 독서 제품은 더 빠른 피드백이 필요합니다.
커리큘럼은 의도적으로 매우 작게 구성되었습니다. 이는 해커톤에서의 적절한 트레이드오프 (tradeoff)였지만, 다음 버전에는 더 큰 해독 가능한 문장 뱅크 (decodable sentence bank), 부모 제어 기능, 그리고 시간이 지남에 따라 시도 내용을 검토할 수 있는 방법이 필요합니다.
배운 점
소형 모델은 작업이 명확하게 정의되어 있을 때 가장 잘 작동합니다.
Read-Along AI는 언어 모델(Language Model)에게 교사, 상담사, 커리큘럼 설계자, 그리고 ASR(자동 음성 인식) 시스템의 역할을 한꺼번에 수행하라고 요구하지 않습니다. 대신 각 구성 요소가 하나의 제한된 작업만을 수행하도록 요청합니다.
- ASR은 오디오를 텍스트로 변환합니다.
- 정확한 일치(Exact matching)는 명확한 성공 사례를 처리합니다.
- MiniCPM은 유사한 텍스트 변형을 판별합니다.
- 로컬 오디오 자산은 단어 도움을 제공합니다.
- UI는 상호작용을 단순하고 격려하는 방식으로 유지합니다.
이러한 분업화가 'Build Small(작게 만들기)' 제약 조건 하에서도 앱이 실현 가능하게 느껴지도록 만들었습니다.
또한 개인정보 보호와 UX(사용자 경험)가 연결되어 있다는 점도 배웠습니다. '오프 더 그리드 모드(Off the Grid Mode)'는 단순한 배지 전략이 아닙니다. 어린이를 대상으로 하는 음성 앱에서 로컬 추론(Local inference)은 신뢰의 이야기를 바꿉니다. 이를 통해 제품은 다음과 같이 말할 수 있습니다: 이 연습은 아이의 목소리를 피드백의 대가로 지불하지 않고도, 가족과 함께 방 안에서 이루어질 수 있습니다.
다음에 구축하고 싶은 것
다음 버전은 다음 사항에 집중할 것입니다:
- 실시간 스트리밍 ASR.
- 아이가 읽는 동안 실시간 단어 하이라이팅.
- 더 큰 규모의 아동 음성 평가 데이터셋.
- MiniCPM 판별기를 위한 더 많은 문장 수준의 학습 예시.
- 학부모 및 교사용 검토 도구.
- 더 나은 로컬 지연 시간(Latency).
- 읽기 기술별로 구성된 더 풍부한 커리큘럼.
장기적인 제품 아이디어는 성인을 대체하는 것이 아닙니다. 매일의 읽기 연습을 더 쉽게 시작하고, 더 쉽게 반복하며, 아이가 아직 단어를 찾아가는 과정에서 더 부드럽게 도와주는 것입니다.
링크
- Space: https://huggingface.co/spaces/build-small-hackathon/read-along-ai
- Repository: https://github.com/kingkw1/read-along-ai
- Fine-tuned MiniCPM evaluator: https://huggingface.co/kingkw1/minicpm-phonetic-evaluator
- Hackathon social post: https://huggingface.co/posts/kingkw1/522163043386016
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기