# 중국어 성조를 교정하기 위해 9M 파라미터로 훈련된 모델을 만들었어요

> Clean Markdown view of GeekNews topic #26289. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=26289](https://news.hada.io/topic?id=26289)
- GeekNews Markdown: [https://news.hada.io/topic/26289.md](https://news.hada.io/topic/26289.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2026-02-01T09:40:16+09:00
- Updated: 2026-02-01T09:40:16+09:00
- Original source: [simedw.com](https://simedw.com/2026/01/31/ear-pronunication-via-ctc/)
- Points: 1
- Comments: 1

## Topic Body

- 중국어 발음과 성조 연습을 돕기 위해 약 **300시간의 음성 데이터**로 훈련된 **9M 파라미터 CTC 기반 음성 모델**을 직접 만들어 봄   
- **Conformer 인코더** 구조를 사용해 지역적 음성 특징과 전역적 문맥을 모두 포착하며, **Pinyin+성조 단위 토큰화**로 발음 오류를 명확히 구분  
- **CTC 손실**을 통해 사용자가 실제로 발음한 내용을 프레임 단위로 평가하고, **Viterbi 알고리듬**으로 시간 정렬을 수행  
- 모델 크기를 75M→9M으로 줄여도 **정확도 손실이 거의 없었으며**, INT8 양자화 후 약 11MB로 웹 브라우저에서도 즉시 실행 가능  
- 브라우저 기반 데모는 **온디바이스 발음 교정 시스템의 가능성**을 보여주며, 데이터 품질 개선이 향후 성능 향상의 핵심임  
  
---  
  
### 발음 평가 모델 개요  
- 중국어 발음 학습의 어려움을 해결하기 위해 **발음을 채점하는 소형 음성 모델**을 직접 훈련  
  - 약 300시간의 전사된 음성 데이터(AISHELL-1, Primewords)를 사용  
  - 브라우저에서 직접 실행 가능한 형태로 제공  
- 기존의 **피치 시각화 방식**은 잡음, 발화 차이 등으로 불안정했으며, 데이터 기반 접근이 더 효과적임을 확인  
- 목표는 상용 API 없이 **온디바이스 Computer-Assisted Pronunciation Training (CAPT)** 시스템 구현  
  
### 모델 구조와 학습 방식  
- **Conformer 인코더 + CTC 손실** 구조를 채택  
  - CNN이 짧은 시간대의 음향 특징(예: zh vs z)을 포착  
  - Transformer가 문맥적 성조 패턴(예: tone sandhi)을 처리  
- **CTC 방식**은 프레임별 확률 분포를 출력해 실제 발음된 음소를 직접 평가  
  - `` 토큰을 활용해 반복과 공백을 정렬  
  - 자동 보정 없이 실제 발음된 내용을 그대로 반영  
  
### 토큰화 및 정렬  
- **Pinyin+성조 조합**을 하나의 토큰으로 정의  
  - 예: `zhong1`과 `zhong4`는 서로 다른 토큰  
  - 중성조는 tone 5(`ma5`)로 통일  
  - 총 1,254개 토큰 + ``, `` 구성  
- **Viterbi 알고리듬**으로 음성 프레임과 토큰 간 최적 경로를 계산  
  - 예: “Nǐ hǎo” 발음 시 `ni3`와 `hao3` 구간을 구분  
  
### 모델 경량화 및 성능  
- 초기 75M 파라미터 모델에서 9M까지 축소  
  - 75M: TER 4.83%, Tone Accuracy 98.47%  
  - 9M: TER 5.27%, Tone Accuracy 98.29%  
  - 정확도 손실이 미미해 **데이터 의존적(data-bound)** 과제임을 시사  
- FP32 모델(37MB)을 **INT8 양자화**로 11MB까지 축소  
  - `onnxruntime-web`을 통해 브라우저에서 즉시 로드 가능  
  
### 정렬 오류와 수정  
- **무음 구간**이 발음 평가를 왜곡하는 문제 발생  
  - 예: “我喜欢…” 발음 전 1초 정적이 `wo3`로 잘못 정렬되어 0점 처리  
- 해결책: **무음 프레임을 점수 계산에서 제외**  
  - `` 확률이 0.7 이상인 프레임을 필터링  
  - 수정 후 첫 음절 신뢰도 점수가 0.0 → 0.99로 개선  
  
### 결과 및 한계  
- 베타 테스트 중 발음 교정 효과를 체감  
  - 모델은 매우 엄격하게 채점  
- **원어민과 아동 음성**은 정확도 저하  
  - AISHELL 데이터가 주로 낭독체 음성이라 속도·억양 차이 존재  
  - 향후 **Common Voice 등 대화체 데이터 추가**가 필요  
- 웹 데모는 약 13MB로, **대부분의 웹사이트보다 가벼운 크기**에서 완전한 발음 교정 기능 제공

## Comments



### Comment 50377

- Author: neo
- Created: 2026-02-01T09:40:17+09:00
- Points: 1

###### [Hacker News 의견들](https://news.ycombinator.com/item?id=46832074) 
- 정말 멋진 프로젝트임에 감사함  
  다만 “我想学中文” 문장에서 **“wén”을 “guó”로 인식**한 점이 이상했음  
  이는 모델이 **성조보다는 단어 구조**를 학습한 결과로 보임. “Zhōng guó”가 학습 데이터에 많이 등장해 그런 편향이 생긴 듯함  
  블로그 글에서 말한 것처럼 “내가 실제로 한 발음을 알려주는 모델”이 아니라, 가능한 1254개의 음절 중 가장 가까운 것을 **매핑**하는 구조로 보임  
  - “guó”를 여러 번 반복해봤지만 반복 인식이 안 됐음  
    그래도 이런 **음성 중심 학습 접근법**은 마음에 듦. 문자 기반 학습은 국가마다 표기법이 달라 혼란스러움. 초보자에게는 pinyin조차 헷갈리는 기호가 많음  

- 아이디어와 UI가 직관적이라 인상 깊었음  
  하지만 베이징 출신으로 **표준 중국어를 완벽히 구사**하는 나조차 쉬운 문항을 통과하기 어려웠음  
  예시 “你好吃饭了吗”에서 성조 인식이 틀렸고, “了”는 문맥상 “liǎo”가 아니라 “le”여야 함  
  성조에 대해 걱정하는 의견이 많지만, 실제로는 성조가 완벽하지 않아도 의사소통에 큰 문제 없음  
  지역마다 억양이 달라 성조가 섞여도 다들 잘 이해함. 성조에 너무 집착하지 말고 **맥락 중심 학습**을 추천함  
  - 모국어 화자로서 반박하자면, **성조는 매우 중요**함  
    지역 방언이 달라도 사람들이 의사소통 가능한 이유는 1) 인접 지역 간 성조 차이가 크지 않고, 2) 서로 통하지 않을 땐 **표준어(보통화)** 로 전환하기 때문임  
    중국어가 존재하는 이유 자체가 성조 체계 덕분임. 성조가 틀리면 의사소통이 거의 불가능함  
  - 대만에서 C1 수준으로 배운 입장에서 보면, 성조는 초반엔 중요하지만 **표현력이 늘수록 맥락이 보완**해줌  
    다만 중국이 문자 중심으로 의사소통하는 이유 중 하나가, 지역마다 발음과 성조가 달라 **음성만으로는 통하지 않기 때문**이기도 함  
  - 원어민끼리는 성조 패턴이 다르더라도 문법과 억양이 예측 가능해 이해가 가능하지만, 학습자는 그렇지 않음  
    성조를 무시하도록 동기부여하는 건 위험함. 성조가 정말 중요하지 않았다면 이미 사라졌을 것임  
  - “了” 문제는 **JavaScript 버그**였고 수정 완료됨. 나머지는 더 다양한 데이터셋으로 개선 가능함  
  - 성조가 중요하지 않다고 해도, “熊猫(xióngmāo)”와 “胸毛(xiōngmáo)”처럼 **성조 차이로 전혀 다른 의미**가 되는 경우가 많음  
    맥락이 좁을 땐 혼란이 생기므로, 성조는 여전히 핵심임. 또한 “吃”를 “shi2”로 인식하는 등 데이터 보강이 필요함  

- 중급 학습자로서 피드백을 남기기 위해 계정을 새로 만들었음  
  빠르게 말하면 **음소 추적이 잘 안 되고 성조 인식이 어긋남**  
  예를 들어 “他是我的朋友”를 자연 속도로 말하면 “我”를 “de”로 인식하거나 “是”를 “si”로 처리함  
  천천히 또박또박 말하면 정확히 인식함  
  **연속된 제3성 변화(성조 변환)** 같은 현상도 고려해야 함. 자연스러운 회화 속 발음을 다루는 기능이 필요함  
  - 성조 변환은 중국어 발음의 핵심임. 현재는 초급자용 수준이라 개선이 필요함  
  - 피드백 덕분에 **sandhi(성조 변환)** 지원을 추가했음. 잘 작동하는지 알려달라고 함  
  - 나도 성조 변환 처리가 안 되는 것 같았음. 그래도 아이디어는 정말 멋짐  
  - 나도 같은 문제를 겪었음. 혹시 “다팡즈(dapangzi)”라서 그런 걸까 농담함  

- 유럽 언어권 화자가 중국어나 다른 **성조 언어를 배우는 건 매우 어렵음**  
  귀가 성조에 익숙하지 않아 자신은 맞게 말한다고 생각하지만 원어민은 못 알아들음  
  - 중국어 원어민으로서, 영어의 **모음 체계**가 훨씬 어렵다고 느낌  
    영어는 지역마다 모음이 달라지고, “done vs down”, “beat vs bit” 같은 차이를 구분하기 힘듦  
    반면 스페인어는 모음이 단순해 훨씬 배우기 쉬웠음  
  - 그래서 중국인들이 영어·독일어 발음에서 실수하는 이유를 이해함. **주의 초점이 다르기 때문**임  
  - 성조나 음높이에 익숙하지 않은 사람에게는 미칠 정도로 어렵지만, 이런 도구들이 그 과정을 덜 고통스럽게 만들어줌  
    일본어 **피치 악센트**를 배울 때도 처음엔 아무 차이도 못 느꼈지만, 반복 훈련으로 점점 들리기 시작했음  
    “uh-oh”처럼 영어에도 피치 패턴이 있다는 걸 깨닫고 나서 감이 잡혔음  
  - 가끔 간단한 문장을 말해도 사람들이 못 알아듣는 경우가 많음.  
    특히 영어식 억양으로 **불확실성을 표현하려는 습관**이 문제임  
  - 하지만 성조는 그렇게 어렵지 않음. 진짜 어려운 건 **어휘량**임  
    성조와 문법은 초반에 익히는 기본이고, 이후 수년간은 단어 암기에 대부분의 노력이 들어감  
    중국어의 진짜 난점은 **공유 어휘의 부족**과 **비음소적 문자 체계**임  

- 단어 단위로 말할 때만 잘 작동하고, 문장 단위나 자연 속도에서는 **오인식이 많음**  
  나는 **표준어 2A 자격증**을 가진 원어민인데도 캐주얼하게 말하면 오류가 남  
  일상 회화와 공식 발음의 차이를 모델이 구분하지 못함  

- 대만에서 공부할 때 성조를 기억하려고 **손으로 성조 곡선을 그리며 연습**했음  
  미친 외국인처럼 보였지만 효과는 확실했음  
  지역 억양 차이도 크니, **기준 데이터를 원어민별로 수집**하면 좋겠음  
  - 내 수업에서도 어떤 학생이 성조를 과장되게 말했는데, 나중엔 **가장 정확한 발음**을 구사하게 됨  
    그때 따라 하지 않은 걸 후회함  
  - [Mike Laoshi의 유튜브 강의](https://youtu.be/cna89A2KAU4?si=SQEZ_0ooO1z119_k)를 추천함  
  - 나도 친구 몇 명으로만 테스트했는데, **지역을 파라미터로 설정**할지 고민 중임. 모든 방언을 학습시키면 너무 관대해질 수 있음  
  - 이건 마치 **솔페지오 훈련**처럼 손동작으로 음높이를 표현하는 방식과 비슷함  
  - 손동작은 특히 새로운 단어를 외울 때 도움이 됨. 손가락으로 성조를 표시하면 기억이 잘 남음  

- 원어민인데 데모가 내 발음을 인식하지 못했음  
  아마 **배경 소음** 때문인 듯함. 옆에서 딸이 만화 보고 있었음  
  - 현재는 배경 소음에 민감하지만, **데이터 증강으로 개선된 버전**을 훈련 중이라고 함  

- 정말 멋진 프로젝트지만, **외부 피드백에 과도하게 의존하지 말라**고 조언하고 싶음  
  발음 교정의 핵심은 **귀 훈련**임. 성인 학습자도 신경가소성이 남아 있으므로, 최소쌍 듣기 훈련 등으로 귀를 단련해야 함  
  이렇게 하면 발음뿐 아니라 **청취력과 어휘 습득 속도**도 크게 향상됨  
  - 나는 [Phrasing.app](https://phrasing.app)을 개발 중인데, 이 조언에 전적으로 동의함  
    SST보다 **텍스트-오디오 동기화(가라오케 스타일)** 가 훨씬 효과적이었음  
    사용자가 자신의 음성을 원본과 겹쳐 들으며 차이를 스스로 인식하는 방식이 학습에 매우 유용했음  
  - 나도 같은 생각임. 듣기가 곧 말하기의 핵심임  
    단어별 성조를 외우기보다, **원어민 발음을 그대로 모방**하는 게 훨씬 자연스러움  

- **ONNX Runtime Web**으로 브라우저 내에서 전부 실행되는 점이 인상적임  
  강제 정렬 방식으로 의미 추측을 배제하고 **성조 문제만 분리**한 접근이 영리함  
  향후 버전에서는 **성조 변환(sandhi)** 을 후처리 단계로 추가하면 회화 속도 연습에 더 유용할 것임  

- **pinyin 모드**가 있었으면 좋겠음. 나는 말하기만 배우고 문자 읽기는 배우지 않음  
  내가 만든 [플래시카드 웹앱](https://memalign.github.io/m/mandarin/cards/index.html)으로 어휘를 정리 중임  
  - 좋은 제안이라 **pinyin 토글 기능**을 추가했다고 함  
  - 나도 같은 생각임. 다만 자음 인식이 잘 안 돼서 답답했음. 내가 그렇게 나쁜 발음은 아닐 텐데  
  - pinyin 모드에 한 표 추가함
