日本語の音声認識(ASR)モデルを固有名詞に特化してファインチューニングし、Hugging Faceで無償公開しました。
この記事では、なぜ作ったか・何を改善したか・どう使うかを技術的に説明します。
なぜ作ったか——CERだけでは実務に使えない
日本語ASRのベンチマークは通常 CER(文字誤り率) で比較されます。自分が行ったベンチマークでは、Qwen3-ASR-1.7B が Whisper・ReazonSpeech・Granite を含む主要モデルの中で最もCERが低い結果になっていました。
しかし実際に使ってみると、こういう問題が起きます:
音声:「アンスロピックがクロード3.5シンキングをリリースした。」
実際に欲しい出力:
「AnthropicがClaude3.5 Thinkingをリリースした。」
CERは0に近くても、固有名詞がカタカナのまま出てくる。議事録・文字起こしツールとして使うとき、これが一番ストレスになります。
もちろんPost Processingとして文字起こし結果をLLMで改善することもできますが、そもそもQwen ASRはLMがすでについているので、そこを学習してPost Processingをなくす方がコストやレイテンシーに響きます。
評価軸として固有名詞F1スコアを使った
CERで測れない部分を定量化するため、固有名詞F1スコア(PN_F1)と普通名詞F1スコア(CN_F1) を評価軸に追加しました。評価の詳細はこちらの記事に書いています。
指標の定義
| 指標 | 説明 | 良い方向 |
|---|---|---|
| WER | 単語単位の誤り率 | ↓ 低いほど良い |
| CER | 文字単位の誤り率 | ↓ 低いほど良い |
| CN_F1 | 普通名詞の認識F1スコア | ↑ 高いほど良い |
| PN_F1 | 固有名詞の認識F1スコア | ↑ 高いほど良い |
ベンチマーク結果(ITドメイン)
技術系の音声・会議・解説動画を想定したデータセットでの結果です。
| モデル | WER↓ | CER↓ | CN_F1↑ | PN_F1↑ |
|---|---|---|---|---|
| neosophie/Qwen3-ASR-1.7B-JA(今回) | 0.2162 | 0.0892 | 0.8754 | 0.6512 |
| qwen/Qwen3-ASR-1.7B(ベースモデル) | 0.3003 | 0.0823 | 0.8642 | 0.5909 |
| Whisper | 0.3441 | 0.1565 | 0.8831 | 0.5641 |
ポイント:
- CER は Qwen3-ASR ベースが最強(0.0823)。今回のモデルはわずかに劣るが、それでも Whisper より大幅に低い
- WER と PN_F1 は今回のモデルが全体トップ
- つまり「文字の正確さ」と「固有名詞の正確さ」の両方でWhisperを上回る
ファインチューニングで変わる具体的な出力
カタカナ→英字表記
| 音声(カタカナ) | Before(ベースモデル) | After(今回のモデル) |
|---|---|---|
| バイトダンス | バイトダンス | ByteDance |
| プルリクエスト | プルリクエスト | Pull Request |
| グーグルスライド | グーグルスライド | Google Slides |
| ポジションアブソルート | ポジションアブソルート | position: absolute |
| サードパーティークッキー | サードパーティークッキー | third-party cookie |
漢数字→アラビア数字
| 音声 | After |
|---|---|
| 一万二千三百四十五 | 1万2345 |
| 十人 | 10人 |
数式・コード
| 音声 | After |
|---|---|
| AイコールAプラス1 | A=A+1 |
なぜ日本語ASRで固有名詞が難しいのか
日本語は表記体系が複雑で、同じ音声に対して複数の「正しい書き方」が存在します。
音声: 「バイトダンス」
正解A(一般文書): バイトダンス
正解B(技術文書): ByteDance
汎用的なASRモデルは「音を文字に変換する」ことに最適化されており、「この文脈ではどの表記が適切か」という判断が苦手です。これがドメイン特化ファインチューニングで解決できる問題の一つです。
一番難しかった:変換辞書をどうやって作るか
ファインチューニングには「カタカナ音声 → 正しい表記」のペアデータが必要です。この変換辞書の作成が今回のプロジェクトで最も難しいところでした。
問題の核心:「正しい表記」は文脈によって変わる
一見シンプルに見えますが、実際はこういうケースが大量に出てきます。
| カタカナ読み | 正解 | 不正解 |
|---|---|---|
| メタ(企業名) | Meta | メタ |
| メタ(メタ認知・メタデータ) | メタ | Meta |
| オープンエーアイ(企業) | OpenAI | オープンエーアイ |
| アイディー(IDという略語) | ID | アイディー |
| アイディー(固有名詞 "aidy" 等) | aidy | ID |
同じ読みでも「固有名詞として使われているか」「一般語として使われているか」で正解が変わります。しかも新しい企業名・サービス名は登場し続けるので、モデルの学習データだけでは対応できません。
LLMに判断させてみたが、精度が出なかった
最初の案は「LLMにカタカナ単語リストを渡して、英字表記にすべきかどうか日本人目線で判断させる」というものでした。
# 試みたアプローチ(イメージ)
prompt = """
以下のカタカナ語について、日本語の一般的な文章で使う場合に
英字表記が適切かカタカナ表記が適切かを判定してください。
- メタ → ?
- バイトダンス → ?
- プルリクエスト → ?
"""
しかしこれには2つの問題がありました。
問題1:文脈なしでは判断できない
「メタ」は企業名なら「Meta」ですが、「メタ認知」「メタデータ」のように一般語として使われる場合はカタカナのままです。単語単体を渡しても、LLMは文脈を持てないので精度が安定しません。
問題2:最新の固有名詞に弱い・コストが高い
新しいサービス名や企業名は、LLMの学習データに含まれていないケースがあります。正確な表記を確認するにはWeb検索が必要ですが、単語1つごとに検索+判定を繰り返すと時間もAPIコストも膨大になります。
解決策:LLMで候補生成 → 人間が○×レビュー
最終的に落ち着いたのは LLMと人間のハイブリッドアプローチ です。
① カタカナ単語リストをLLMに渡して変換候補を生成
「バイトダンス → ByteDance」
「メタ → Meta(企業名の場合)/ メタ(一般語の場合)」
「プルリクエスト → Pull Request」
② 人間が○×でレビュー
✅ バイトダンス → ByteDance
✅ プルリクエスト → Pull Request
❌ メタ → Meta(「メタ認知」などで誤変換が多いのでカタカナのまま維持)
③ 承認した変換ペアをデータセットに追加してファインチューニング
④ ①に戻って繰り返す
LLMは「一件ずつ丁寧にWeb検索して確認する」作業のコストを大幅に下げるために使います。最終判断は人間が行うことで、「メタ→Meta」のような文脈依存の誤変換を弾けます。
このプロセスを繰り返すことで辞書の品質が上がっていきます。最初は粗くても、レビューを重ねるうちに「LLMが間違えやすいパターン」が見えてきて、プロンプトや候補生成の精度も改善していきます。
使い方
インストール
pip install -U qwen-asr
推論コード
import torch
from qwen_asr import Qwen3ASRModel
model = Qwen3ASRModel.from_pretrained(
"neosophie/Qwen3-ASR-1.7B-JA",
dtype=torch.bfloat16,
device_map="cuda:0",
)
results = model.transcribe(audio="/path/to/audio.wav")
print(results[0].language)
print(results[0].text)
1.7Bモデルなので、GPUがなくてもCPUのみで動作します。ただし推論速度はGPU環境に比べて大幅に遅くなります。速度が重要な場合はfloat16やint8量子化を検討してください。
設計の判断について
なぜ1.7Bか
- ローカル推論・エッジデバイスでの動作を想定
- large-v3クラスのモデルと比べてもCERが同等以下
- CPUのみでも動作するサイズ感
ファインチューニングデータの構成
固有名詞を中心とした音声・テキストペアを収集し、以下のカテゴリを重点的に学習させています:
- 技術用語(プログラミング言語、フレームワーク、コマンド)
- 企業名・製品名・サービス名
- 数式・コードスニペットの表記
このモデルは日本語の技術・ビジネス領域に特化しています。医療・法律・行政などの専門領域では別途評価が必要です。
今後の方針
音声認識の精度は凄まじい速度で向上していく一方で、日本語の音声認識には依然として課題が多い。
特に固有名詞や漢字、専門用語などはまだまだ改善の余地があるので、表記方法や語句をリストアップしてモデルを引き続き改善していく。それに伴い、CERでは測れない音声認識の評価方法とベンチマークデータセットについても検討していきたい。
まとめ
- 日本語ASRはCERだけでは評価が不十分。固有名詞F1スコアも重要な指標
- Qwen3-ASRはCERで最強だが固有名詞認識でWhisperに劣るという課題があった
- ファインチューニングでこの課題を解消し、CERでも固有名詞F1でもWhisperを上回るモデルを公開
- 1.7BモデルなのでCPUのみでも動作可能
モデルの詳細・技術的背景の全文はこちら:
👉 日本語最高水準の音声認識モデルを無償公開した | Neosophie Blog