File size: 5,406 Bytes
cb9ad2c | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 | ---
language:
- ja
license: cc-by-sa-3.0
library_name: transformers
tags:
- automatic-speech-recognition
- ctc
- wavlm
- japanese
- hiragana
- phoneme
- custom_code
pipeline_tag: automatic-speech-recognition
base_model: microsoft/wavlm-base-plus
---
# wavlm-base-plus-hiragana-ctc
WavLMをベースに、ひらがなと音素のデュアルCTC(Dual CTC)ヘッドを搭載した軽量な日本語音声認識(ASR)モデルです。
自己回帰デコーダを持たないため繰り返すハルシネーションを起こさず、ひらがな(および音素)のみを安定して出力します。
前バージョンの [`wavlm-base-plus-hiragana-ctc`](https://huggingface.co/TylorShine/wavlm-base-plus-hiragana-ctc) から、音素CTCとかなCTCのHead両方をMLPに変更しています。
このモデルはカスタムアーキテクチャを採用しており、Hugging Faceの `AutoModel` (`trust_remote_code=True`) を使用して簡単に読み込むことができます。
## 🚀 元モデルからの変更点
オリジナルである [`japanese-wav2vec2-large-hiragana-ctc`](https://huggingface.co/sakasegawa/japanese-wav2vec2-large-hiragana-ctc) から以下の点を変更しています。
1. **ベースモデルを WavLM に変更**
よりノイズに強く、幅広い音声表現を獲得できる [WavLM-Base-Plus](https://huggingface.co/microsoft/wavlm-base-plus) をエンコーダに採用しました。
2. **Head位置の変更**
[WavLM: Large-Scale Self-Supervised Pre-Training for Full Stack Speech Processing](https://arxiv.org/abs/2110.13900) のデータを参考に、音素CTCとかなCTCのHead位置を変更しました。
3. **Hugging Face `AutoModel` ネイティブ対応**
カスタムモジュール (`modeling_dual_ctc.py`) を同梱したため、ローカルのチェックポイントファイルを意識することなく、`transformers` から直接モデルをロードして推論できるようになりました。
## 🏗 Architecture
```text
Audio (16kHz) → WavLM Encoder
├── Intermediate Layer 9 → Kana CTC Head (84 classes)
└── Intermediate Layer 11 → Phoneme CTC Head (44 classes)
```
## 💻 Usage
本モデルはカスタムコード(`DualCTCModel`)を使用しているため、ロード時に `trust_remote_code=True` を指定する必要があります。
### インストール
```bash
pip install torch torchaudio transformers
```
### 推論コードの例
```python
import torch
import torchaudio
from transformers import AutoFeatureExtractor, AutoModel, PreTrainedTokenizerFast
model_id = "TylorShine/wavlm-base-plus-hiragana-ctc"
# 特徴量抽出器とモデルのロード
processor = AutoFeatureExtractor.from_pretrained(model_id)
model = AutoModel.from_pretrained(model_id, trust_remote_code=True)
model.eval()
# トークナイザーのロード
kana_tokenizer = PreTrainedTokenizerFast.from_pretrained(model_id, subfolder="kana_tokenizer")
phoneme_tokenizer = PreTrainedTokenizerFast.from_pretrained(model_id, subfolder="phoneme_tokenizer")
# 音声ファイルの読み込み (16kHzにリサンプリング)
waveform, sample_rate = torchaudio.load("nihongo_no_onsei.wav")
if sample_rate != 16000:
resampler = torchaudio.transforms.Resample(orig_freq=sample_rate, new_freq=16000)
waveform = resampler(waveform)
# 前処理
inputs = processor(waveform.squeeze().numpy(), sampling_rate=16000, return_tensors="pt")
# 推論
with torch.no_grad():
outputs = model(**inputs)
# ひらがなと音素のロジットを取得
kana_logits = outputs["kana_logits"]
phoneme_logits = outputs["phoneme_logits"]
# Greedy Decoding
kana_preds = torch.argmax(kana_logits, dim=-1).tolist()
phoneme_preds = torch.argmax(phoneme_logits, dim=-1).tolist()
# print("Kana Token IDs:", kana_preds[0])
# print("Phoneme Token IDs:", phoneme_preds[0])
# `model.ctc_decode()` でトークンをテキストに変換
kana_text = model.ctc_decode(kana_preds, kana_tokenizer, is_kana=True)
phoneme_text = model.ctc_decode(phoneme_preds, phoneme_tokenizer, is_kana=False)
print("Kana:", kana_text)
print("Phoneme:", phoneme_text)
```
## 📊 Model Details & Evaluation
| Property | Value |
|----------|-------|
| Architecture | WavLM + Dual CTC (Kana & Phoneme) |
| Precision | BF16 |
| Kana vocab | 84 tokens |
| Phoneme vocab | 44 tokens |
| Dataset | Condition | KER | PER |
|---------|-----------|-----|-----|
| JSUT-BASIC5000 | スタジオ収録、単一話者 | 3.97% | 3.33% |
| JVS pallarel100 | 100話者 | 5.46% | 4.35% |
| JVS whisper10 | 100話者、ささやき声 | 11.6% | 7.51% |
| ReazonSpeech (20k samples from `medium` subset) | TV音声 | 17.5% | 14.7% |
## 📜 License
Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) license. See [LICENSE](LICENSE) for details.
(CC BY-SA 3.0 ライセンスはWavLMから継承しています。)
## 🎓️ References / Acknowledgements
本モデルのベースとさせていただいたプロジェクト(Wav2Vec 2.0版)に関する詳細は、以下をご参照ください。
- Sakasegawa. (2026). "hiragana-asr: Lightweight Japanese ASR with Dual CTC". [github.com/nyosegawa/hiragana-asr](https://github.com/nyosegawa/hiragana-asr)
|