概要
- Mandarinの発音矯正 のため、約300時間の音声データで Conformer-CTCモデル を自作・訓練
- ブラウザ上で動作、1音節ごとに発音と声調を厳密採点
- Pinyin+声調 をトークン化、音声認識よりも発音重視
- モデル圧縮・量子化 で11MBに、即時ロード可能
- ライブデモ を公開、今後は会話データ追加を検討
Mandarin発音矯正支援AIの開発記録
- Mandarinの発音 が難しく、 自分の間違い も聞き取れない課題
- Langseed で語彙力は伸びたが、 発話理解 は依然困難
- 声調 の習得が特に課題、 教師不在 でフィードバック不足
初期アプローチ:ピッチ可視化
- 音声を分割・FFT解析 し、 ピッチ変化 を可視化するツールを試作
- 背景ノイズ・連音・話者差 などで、手作業チューニングが破綻
- 大量データと計算資源 があれば、 機械学習 が手法を凌駕する事実
最終アプローチ:ディープラーニングCAPT
- 商用API も存在するが、 自作 で技術習得と楽しさを優先
- ASR(自動音声認識) の枠組みで、 Conformerエンコーダ+CTC損失 を採用
Conformer選択理由
- 局所特徴(zh/z等) はCNNで、 グローバル特徴(声調・文脈依存) はTransformerで抽出
- Conformer は両者を組み合わせ、 発音細部と全体構造 を同時把握
CTC選択理由
- 通常ASR は「意味重視」で自動補正するが、 発音矯正 では「実際の発音」重視
- CTC は40msごとに 発音確率分布 を出力し、 フレーム単位 で評価
- <blank>トークン で アライメント を管理し、 Viterbiアルゴリズム で最適経路を探索
トークン設計:Pinyin+声調
- 漢字出力 は発音ミスを隠すため、 Pinyin+声調 を1トークン化
- 例: zhong1 と zhong4 は別トークン
- 声調5(軽声) も明示的に採用、 全1,254トークン+<unk>/<blank>
データ・訓練
- AISHELL-1/Primewords (計約300時間)+ SpecAugment で拡張
- RTX 4090×4 で8時間訓練
- 重視指標 :TER(Token Error Rate)、Tone Accuracy、混同ペア(zh/ch/sh等)
モデル圧縮
- 75M→35M→9Mパラメータ まで縮小、精度ほぼ維持
- 例:9Mモデルで TER 5.27%、Tone 98.29%
- FP32で37MB→INT8量子化で11MB、精度低下ほぼなし
- onnxruntime-web で即時ロード・ブラウザ動作
アライメント課題と修正
- 先頭無音区間 でアライメント誤判定、 無音フレーム がスコアを下げる問題
- UIハイライト と スコア計算 を分離、 無音フレーム除外 で正しい信頼度に
- 1行の修正 で、信頼度0.0→0.99に改善
実用・今後
- 厳格なフィードバック で発音向上を実感
- 母語話者・子供 は認識率が下がる傾向(訓練データのドメイン差・ピッチ差)
- 会話音声データ(Common Voice等) 追加が今後の課題
- デモ公開中 (約13MB)、 完全ブラウザ動作
付記:技術仕様と公開デモ
- 9MパラメータConformer-CTCモデル
- AISHELL+Primewords 約300時間で訓練、 INT8量子化で11MB
- onnxruntime-web で100%ブラウザ実行
- Viterbi強制アライメント で1音節ごとに発音・声調採点
- デモはこちら :https://simedw.com/projects/ear/