본문 바로가기
AI Project/Edge AI Agent - 음성처리(연구,분석,검증))

[비교/검증-8] #11. Edge Agent AI 음성처리 : 순정모델 vs 커스텀모델(경제/시사 학습) / 순정(Tiny) vs 커스텀(Tiny)

by 으노으뇨 2026. 5. 17.
728x90
반응형
SMALL

안녕하세요!!!

지난 포스팅에서는

1. 각 모델별(small, large, turbo, medium) 성능비교

2026.05.11-[비교/검증-7] #9. Edge Agent AI 음성처리 : STT+화자분리 최종비교 / 스몰vs 터보, 그리고 '최적화'의 마법 - 4종 벤치마크 총 정리(small,medium,turbo,large)

 

[비교/검증-7] #9. Edge Agent AI 음성처리 : STT+화자분리 최종비교 / 스몰vs 터보, 그리고 '최적화'의 마

지난 포스팅에서는 제가 직접 각 모델들을 이제 윈도우 환경에서 구동하고 분석시에 세밀한 조정을 할 수 있도록 GUI로 만들었습니다.이제 도구는 완성되었습니다. 그렇다면 우리는 이 도구를

uno-kim.tistory.com

2. 그리고 이제 모델별 성능비교를 위한 프레임워크를 개발과 또 학습시킬수 있는 프레임워크를 개발

2026.05.10-[개발문서-1] #9. Edge Agent AI 음성처리 : 대규모 배치 자동화 및 태스크 기반 데이터 관리 아키텍처 구현 - 테스트자동화 Tool 구현

 

[개발문서-1] #9. Edge Agent AI 음성처리 : 대규모 배치 자동화 및 태스크 기반 데이터 관리 아키텍처

1. 개요본 포스팅에서는 지난 포스팅에서 구축한 Vosk + Whisper.cpp 하이브리드 파이프라인을 실무 환경에 적용하기 위한 운영 고도화 과정을 다룹니다.[비교/검증-6] #8. Edge Agent AI 음성처리 : Vosk + Wh

uno-kim.tistory.com

 

2026.05.11-[개발문서-2] #10. 도메인 특화 STT 모델학습 : CPU 노트북으로 도전하는 Whisper Tiny 파인튜닝 (Whisper.cpp 기반 STT 모델 학습 프로그래밍)

 

[개발문서-2] #10. 도메인 특화 STT 모델학습 : CPU 노트북으로 도전하는 Whisper Tiny 파인튜닝 (Whisper.cp

화자분리를 가장 널리 알려진 Whisper.cpp와 vosk 를 이용해서 간단하게 GUI 프로그램을 만들어 비교를 하면서 느낀것이그저 모델만 좋은 것보다. 한번 파인튜닝으로 깎아서 진행한다면 어떨까? 라는

uno-kim.tistory.com

이제 진짜 모델을 학습해보고 비교/검증까지 해보겠습니다.


이번 포스팅에서는

"모델의 체급이 작더라도 특정 도메인의 전문 데이터를 정밀하게 학습시킨다면,
범용적인 대형 모델의 성능을 압도할 수 있는가?"

라는 논제를 바탕으로 실험한 결과를 공유하고자 합니다.

딥러닝 모델의 성능이 단순히 파라미터 수에 비례한다는 통념에서 벗어나, 데이터의 질과 도메인 특화 학습(Fine-tuning)이 실질적인 추론 정확도에 미치는 영향을 정량적으로 검증해 보았습니다. 특히!!! 자원이 제한된 Edge 환경에서의 활용 가능성을 염두에 두고 실험을 진행했습니다.

최대 규모의 경제/시사 유튜브 채널들을 활용하여 약 30시간 분량의 고밀도 발화 데이터를 수집하고, 이를 스마트 청킹(Smart Chunking) 및 발화 정제 알고리즘을 통해 고품질의 학습용 코퍼스로 구축하는 과정을 다루었습니다.

이러한 전처리 과정을 거쳐 탄생한 '경제/시사 특화 커스텀 모델(Tiny)'과 별도의 학습을 거치지 않은 '오리지널 순정 모델(Tiny, Small)' 간의 성능 격차가 어느 정도인지, 실제 벤치마크 수치를 통해 상세히 분석해 보겠습니다.

- 미디움까지는 힘들것같고, 우선 비교를 위해

타이니모델 & 스몰모델 vs 학습시킨 타이니모델 

이렇게 진행해보겠습니다!!!


Git source

1. STT 모델 학습 툴

https://github.com/uno-km/AMEVA-STT-Trainer

 

GitHub - uno-km/AMEVA-STT-Trainer: A Whisper-based Korean STT trainer featuring LoRA fine-tuning for high-accuracy speech recogn

A Whisper-based Korean STT trainer featuring LoRA fine-tuning for high-accuracy speech recognition with minimal resources. It offers a full pipeline—from data scraping and audio preprocessing to tr...

github.com

2. STT 모델 검증툴

https://github.com/uno-km/AMEVA-STT-Agent

 

GitHub - uno-km/AMEVA-STT-Agent

Contribute to uno-km/AMEVA-STT-Agent development by creating an account on GitHub.

github.com

 


[데이터 엔지니어링] 고도화된 도메인 특화 데이터셋 구축 공정

1. 데이터 선정 규모

우리가 학습에 사용한 데이터는 국내 최대 규모의 경제/시사 유튜브 채널들의 콘텐츠들을 중심으로 수집되었습니다.

영상 개수: 총 30개의 에피소드를 선정했습니다.

총 시간: 소스 영상 기준으로 약 30시간 분량이며, 이 중 유효한 발화 구간을 정밀하게 추출하여 최종적으로 약 15시간 내외의 순수 학습 코퍼스를 구축했습니다.

2. 데이터 선정 기준

단순히 양이 많은 데이터가 아니라, 학습의 난이도와 품질을 모두 고려하여 다음과 같은 기준으로 선별했습니다.

전문성: 금융, 거시경제, 사회 이슈 등 전문 용어 비중이 높은 콘텐츠를 우선했습니다.

발화 특성: 일반적인 대화보다 속도가 빠르고 정보 밀도가 높은 전문가의 강연 및 대담 형식을 선택했습니다. 이를 통해 모델이 극한의 상황에서도 정확하게 음성을 인식하도록 유도했습니다.

3. 데이터 분할 및 전처리 방식

수집된 30개의 대용량 영상은 학습에 적합한 형태로 가공하는 과정을 거쳤습니다.

스마트 청킹(Smart Chunking) : 단순히 시간 단위로 자르는 것이 아니라, 자막(VTT)의 타임스탬프 경계를 인식하여 문장이 중간에 끊기지 않도록 15초에서 30초 단위로 정밀하게 분할했습니다.

다운로드

데이터 필터링 : 발화가 없는 무음 구간이나 학습에 방해가 되는 노이즈 구간을 제거했습니다. 또한, 텍스트 전처리 알고리즘을 통해 불필요한 특수문자와 반복되는 추임새를 정제하여 데이터의 무결성을 높였습니다. 

노이즈 구간, 그리고 반복/추임새 데이터 정재

학습/검증 데이터 분할 : 전체 데이터 중 90%는 모델의 성능 향상을 위한 학습용으로 사용했고, 나머지 10%는 학습에 전혀 관여하지 않는 홀드아웃데이터로 분류하여 객체적인 성능 평가를 위한 검증용으로 활용했습니다.

유효성검사???

1단계: 물리적 존재 검수 (Physical Existence Check)
metadata.csv에 등록된 오디오 파일 경로가 실제 스토리지에 존재하는지 전수 조사합니다.
경로 오류로 인해 학습 도중 'File Not Found' 에러가 발생하는 상황을 원천 봉쇄합니다.

2단계: 0바이트 유령 파일 필터링 (Zero-byte Ghost File Detection)
파일은 존재하지만 실제 데이터가 없는 0바이트(Empty) 파일을 찾아냅니다.
전처리 과정에서 인코딩 오류나 시스템 중단으로 인해 생성된 파손된 데이터를 식별하여 격리합니다.

3단계: 논리적 텍스트 검증 (Logical Transcription Validation)
오디오와 매핑된 전사 텍스트(Transcription)가 비어 있거나, 데이터 로드 시 발생하는 'NaN(Not a Number)' 값인지를 검사합니다.
텍스트 정보가 없는 데이터는 학습 시 손실 함수(Loss) 계산에 악영향을 주기 때문에 즉시 제거 대상이 됩니다.


모델 아키텍처 및 학습 전략

1. 초경량, 고효율 도메인 특화 STT 구축

자원 제한적인 Edge 환경(Windows CPU)에서 전문가 수준의 인식률 확보를 최우선 과제로 설정했습니다. 그리고 범용 모델의 한계를 극복하기 위해 '선택과 집중'형 학습 전략을 수립했습니다. 또한 모델 체급의 한계를 기술적 최적화로 정면 돌파하는 것을 목표로 했습니다.

2. 전략적 선택: Whisper-Tiny 모델과 PEFT의 결합

모델 레이어: 인퍼런스 속도가 가장 빠른 Whisper-Tiny를 메인 타겟으로 삼아 실시간성을 확보했습니다.

학습 레이어: '치명적 망각'을 방지하고 일반 언어 지능을 보존하기 위해 파라미터 효율적 미세 조정(PEFT)을 도입했습니다.

초경량 베이스 모델에 도메인 지식을 정밀 이식하는 아키텍처를 설계했습니다.

3. 기술적 구현: LoRA(Low-Rank Adaptation) 정밀 튜닝

구조적 최적화: 대규모 파라미터 수정 대신 저차원 행렬(R=32, Alpha=64)을 주입하여 가중치 업데이트 효율을 극대화했습니다.

외과 수술식 접근: Tiny 모델의 좁은 수용 용량(Capacity)을 고려하여, 경제 전문 용어에 대한 반응성만 선택적으로 증폭시켰습니다.

파라미터 밀도를 높여 모델 규모를 뛰어넘는 도메인 정밀도를 구현했습니다.

4. 실시간 모니터링 및 복구 체계

Rich 라이브러리 및 커스텀 로거를 활용한 실시간 하드웨어-학습 통합 모니터링을 구현을 통해 학습 과정에서 발생하는 수치적 변화와 시스템 자원 상태를 시각적으로 즉각 파악하기 위해 고도화된 CLI 관제 환경을 구축했습니다. 단순한 텍스트 로그를 넘어 하드웨어 메트릭과 손실 함수(Loss)의 추이를 실시간으로 확인 가능하며, 학습의 이상 징후를 조기에 감지하도록 설계했습니다.

오류발생시 출력되고 기록되는 로그
실시간으로 기록되며, Rich 라이브러리 효과로 실제 CLI 환경에서는 가독성이 더 좋습니다.

자동 체크포인트 저장 및 최적 어댑터 추출 시스템을 통해 학습의 회복 탄력성을 확보하여 예기치 못한 시스템 크래시나 하드웨어 장애 상황에서도 학습의 연속성을 보장하기 위해 단계별 영속성 레이어를 적용했습니다. 모든 학습 스텝마다 모델의 상태를 스냅샷으로 기록하며, 최종적으로는 검증 데이터셋에서 가장 우수한 성능을 보인 최적의 가중치 어댑터만을 자동으로 선별하여 저장합니다.

크래시가 나도 재시작하면 여기 저장된 스냅샷부터 재게됩니다

네트워크 격리 환경에서도 구동 가능한 완전 독립형 학습 파이프라인을 구축을 하여 전쟁통에서도 빠떼리만 있으면 학습가능하며 외부 네트워크와의 연결이 완전히 차단된 극한의 환경에서도 데이터 수집부터 학습, 평가까지의 전 과정이 중단 없이 수행될 수 있도록 설계했습니다. 모델 가중치와 의존성 라이브러리의 로컬 캐싱을 통해 인터넷 연결 유무와 관계없이 독립적인 AI 트레이닝이 가능한 '풀 오프라인(Full-Offline)' 인프라를 완성했습니다.

추후 완드비 라이브러리 사용을 위한 확장을 위한 설정


양자화 및 배포 모델 최적화 공정

학습된 도메인 지식을 보존하면서, 일반 CPU 환경에서도 실시간 처리가 가능한 수준으로 모델 용량과 연산 부하를 최적화를 했습니다. 학습용 프레임워크(PyTorch)에서 추론 전용 엔진(whisper.cpp)으로의 환경 전이를 수행하기 위해서죠. 배포 가용성을 확보하기 위한 '모델 경량화 파이프라인'을 가동했습니다.

1단계: 가중치 통합

어댑터 병합 : 베이스 모델과 분리되어 있던 LoRA 어댑터를 베이스 가중치에 완전히 통합(Merge)하여 단일 모델 파일로 일체화합니다.

추론 구조 단순화 : 추론 시 어댑터를 별도로 로드하는 오버헤드를 제거하고, 모델의 연산 그래프를 정적 형태로 단순화하여 처리 속도를 높입니다.

학습된 도메인 지식을 베이스 모델에 영구 주입하여 단일 추론 엔진을 구성!!!

2단계: GGUF 포맷 변환 및 양자화(Quantization)

GGUF 바이너리 생성: HuggingFace 포맷의 가중치를 C++ 기반 추론 엔진에서 직접 읽을 수 있는 GGUF 포맷으로 변환하여 시스템 호환성을 확보했습니다.


이렇게 생성된 저 인생의 첫 모델!!!

한번 기존의 타이니모델과 우선 비교해보겟습니다!

그리고 이전에 개발을 완료한 STT 모델을 돌리는 프로그램을 활용하여 뽑아아 봤습니다.

검증을 위한 툴입니다.

학습된_full_result_set.csv
0.04MB
기본값_full_result_set.csv
0.04MB

이렇게 학습된 파일이고 조금 난이도 쉬울것으로 예상되었으며 그리고 학습에 사용하지 않은 슈카월드님의 영상으로 검증해 봤습니다.https://youtu.be/gZ1HlsRJV1w?si=3IdsCbWSj_QWvyJr

결과는 csv 파일 2개로 나왔으며 이걸 한번 제미나이 프로모드로 분석을 돌려봤는데요....

제미나이가 분석한 결과

분석 결과, 1000 스텝의 파인튜닝을 거친 모델에서 심각한 과적합(Overfitting) 및 환각(Hallucination) 현상이 발생한 것으로 검증되었습니다.

상세한 비교 결과는 다음과 같습니다.

1. 추임새 과적합 및 환각 (Hallucination) 현상 발생

파인튜닝된 모델의 가장 큰 특징은 실제 오디오에 존재하지 않는 화자(슈카) 특유의 추임새를 무분별하게 텍스트로 생성해낸다는 점입니다.

  • 기본값 모델은 불분명한 구간에서도 들리는 발음을 그대로 적으려 시도합니다. 반면 학습된 모델은 기본 모델에는 없던 특정 단어들을 대거 추가했습니다.
  • 예를 들어 영상 초입 부분에서 기본값은 "이게 됩니다. 독일 얘기를 외 같고 아냐"로 시작하지만, 학습된 모델은 원본에 없는 "돈이 된다. 그니까요. 그니까"라는 화자의 평소 버릇을 문장 앞에 창조해 냈습니다.
  • "종전 협상"과 관련된 구간에서도 기본값은 바로 본론을 적어낸 반면, 학습된 모델은 "그래서 그니까 그니까 그니까 그니까 그"라는 무의미한 추임새를 문장 시작에 반복해서 출력하는 심각한 환각 증세를 보입니다.

2. 고유명사 및 핵심 어휘의 과교정 (Overcorrection)

학습 데이터의 편향성으로 인해, 발음을 정확히 인식하는 대신 화자의 도메인(경제 및 사회)에서 자주 쓰였을 법한 단어로 억지 왜곡하는 현상이 발생했습니다.

  • '호르무즈 (해협)' 인식 오류: 기본 모델은 이를 "고룸우지"라는 단순 발음 오류로 표기했습니다. 하지만 학습된 모델은 이를 "코로나주"라는, 발음과 완전히 무관하지만 학습 과정에서 많이 접했을 법한 고빈도 단어로 과교정해버렸습니다.
  • '징병제' 인식 오류: 영상의 핵심 키워드인 '징병제'에 대해 기본 모델은 문맥에 따라 "징병제"나 "진병재"로 비교적 원음에 가깝게 인식했습니다. 반면 학습된 모델은 경제 유튜버라는 데이터 편향성 때문인지 "징경제"라는 존재하지 않는 단어로 반복해서 잘못 출력하고 있습니다.

3. 다국어 환각 제거 및 잔존하는 특수 기호 오류

Tiny 사이즈의 기본 모델이 묵음이나 노이즈 구간에서 엉뚱한 외국어를 뱉어내는 문제는 학습을 통해 일부 변형되었습니다.

  • 기본 모델은 첫 문장 끝에 "추지なんだ."라는 일본어 환각을 뱉어냅니다. 학습된 모델에서는 이러한 일본어 생성 현상은 사라졌으나, 대신 그 자리를 앞서 언급한 '화자 특유의 추임새'가 채우는 부작용으로 이어졌습니다.
  • 다만 "빼んだ"와 같이 문자가 깨지는 특수 기호 인코딩 오류는 1000 step 학습 후에도 교정되지 않고 두 모델 모두에서 동일하게 나타났습니다.

요약 및 검증 결론

슈카월드 영상 30개를 1000 step으로 파인튜닝한 결과, 모델이 발음과 음향적 특징을 정교하게 학습한 것이 아니라 화자의 평소 언어 습관("그니까", "자", "아" 등)에 완전히 과적합되었습니다. 빈 오디오 구간이나 불분명한 발음이 나올 때마다 조건반사적으로 추임새를 텍스트로 생성하는 치명적인 성능 열화가 발생했습니다. 학습 품질을 정상화하려면 학습 데이터(Label)에 포함된 무의미한 추임새 텍스트를 모두 제거하는 데이터 클렌징 작업이 필수적으로 보입니다.


마치며...

야심차게 준비한 제 첫 커스텀 모델이 이렇게 처참한 환각 결과를 낼 줄은 정말 몰랐습니다....

단순히 전문적인 데이터를 많이 먹이고 학습만 돌리면 알아서 똑똑해질 거라 믿었는데 오히려 유튜버의 말버릇만 달달 외워버린 앵무새를 만들어버렸네요....

작은 체급의 타이니 모델에게 무작정 높은 스텝의 파인튜닝을 강행한 것이 걷잡을 수 없는 오버피팅을 유발했습니다.

이번 실험을 통해 AI 모델 학습에서는 데이터의 양보다 질이 절대적으로 중요하다는 뼈저린 교훈을 아주 제대로 얻었습니다.

추임새 제거와 완벽한 텍스트 동기화 같은 세밀한 전처리가 없으면 아무리 훌륭한 아키텍처라도 결국 쓰레기 데이터만 증폭시킨다는 것을 제 두 눈으로 직접 확인한 셈입니다.

하지만!!!!!

당연히 여기서 포기할 수는 없겠죠.

다음 포스팅에서는 모델이나 환경을 탓하기 전에 제가 수집한 코퍼스 데이터부터 대대적으로 수술해보려고 합니다.

분석 결과에서 지적받은 대로 학습 데이터셋에 널려있는 무의미한 추임새들을 스크립트로 모조리 날려버리고 문장 간의 중복 구간을 칼같이 잘라내는 데이터 클렌징 공정을 최우선으로 도입할 계획입니다.!!!

그 후에는 학습 스텝 수와 하이퍼파라미터 역시 타이니 모델의 뇌 용량에 딱 맞게 조절해서 다시 한번 정밀한 파인튜닝에 도전해보겠습니다.

이번의 맵고 쓴 실패를 밑거름 삼아 독하게 깎아낸 커스텀 모델이 무거운 범용 모델들을 어떻게 박살내는지 다음 번엔 반드시 증명해 보이겠습니다.

그리고 스몰모델까지도 한번 이 CPU로 학습을 시켜서 다시 도전해 보겠습니다!!!!!

긴 글 읽어주셔서 감사합니다. 제가 비전공자고 그냥 배운것도없이 도전하는 거라 많이 부족하고 못배운 티가납니다. 

그래도 열의를 가지고 열심히 틈틈히 공부하고 성장해 나가는 개발자가 되려고 합니다. 감사합니다.

728x90
반응형
LIST

댓글