Views
No views yet
AutoModel (trust_remote_code=True) を使用して簡単に読み込むことができます。japanese-wav2vec2-large-hiragana-ctc から以下の点を変更しています。ノーマライズ->ドロップアウト->線形層に、かなはノーマライズ->線形層->アクティベーション->ドロップアウト->線形層としました。AutoModel ネイティブ対応
カスタムモジュール (modeling_dual_ctc.py) を同梱したため、ローカルのチェックポイントファイルを意識することなく、transformers から直接モデルをロードして推論できるようになりました。1Audio (16kHz) → DistilHuBERT Encoder
2 ├── Intermediate Layer 2 → Kana CTC Head (84 classes)
3 └── Intermediate Layer 2 → Phoneme CTC Head (44 classes)DualCTCModel)を使用しているため、ロード時に trust_remote_code=True を指定する必要があります。pip install torch torchaudio transformers1import torch
2import torchaudio
3from transformers import AutoFeatureExtractor, AutoModel, PreTrainedTokenizerFast
4
5model_id = "TylorShine/distilhubert-hiragana-ctc"
6
7# 特徴量抽出器とモデルのロード
8processor = AutoFeatureExtractor.from_pretrained(model_id)
9model = AutoModel.from_pretrained(model_id, trust_remote_code=True)
10model.eval()
11
12# トークナイザーのロード
13kana_tokenizer = PreTrainedTokenizerFast.from_pretrained(model_id, subfolder="kana_tokenizer")
14phoneme_tokenizer = PreTrainedTokenizerFast.from_pretrained(model_id, subfolder="phoneme_tokenizer")
15
16# 音声ファイルの読み込み (16kHzにリサンプリング)
17waveform, sample_rate = torchaudio.load("nihongo_no_onsei.wav")
18if sample_rate != 16000:
19 resampler = torchaudio.transforms.Resample(orig_freq=sample_rate, new_freq=16000)
20 waveform = resampler(waveform)
21
22# 前処理
23inputs = processor(waveform.squeeze().numpy(), sampling_rate=16000, return_tensors="pt")
24
25# 推論
26with torch.no_grad():
27 outputs = model(**inputs)
28
29# ひらがなと音素のロジットを取得
30kana_logits = outputs["kana_logits"]
31phoneme_logits = outputs["phoneme_logits"]
32
33# Greedy Decoding
34kana_preds = torch.argmax(kana_logits, dim=-1).tolist()
35phoneme_preds = torch.argmax(phoneme_logits, dim=-1).tolist()
36
37# print("Kana Token IDs:", kana_preds[0])
38# print("Phoneme Token IDs:", phoneme_preds[0])
39
40# `model.ctc_decode()` でトークンをテキストに変換
41kana_text = model.ctc_decode(kana_preds, kana_tokenizer, is_kana=True)
42phoneme_text = model.ctc_decode(phoneme_preds, phoneme_tokenizer, is_kana=False)
43
44print("Kana:", kana_text)
45print("Phoneme:", phoneme_text)| Property | Value |
|---|---|
| Architecture | DistilHuBERT + Dual CTC (Kana & Phoneme) |
| Precision | BF16 |
| Kana vocab | 84 tokens |
| Phoneme vocab | 44 tokens |
| Dataset | Condition | KER | PER |
|---|---|---|---|
| JSUT-BASIC5000 | スタジオ収録、単一話者 | 9.09% | 8.26% |
| JVS pallarel100 | 100話者 | 12.5% | 8.65% |
| JVS whisper10 | 100話者、ささやき声 | 39.4% | 28.6% |
ReazonSpeech (20k samples from medium subset) | TV音声 | 30.5% | 25.3% |