MedVoice-JP — 日本語医療特化 ASR (whisper-small, フル fine-tuning, 60話者)
日本語の医療現場の発話を、汎用 ASR より正確に文字起こしする fine-tuning 済みモデル。 60名の医療関係者の声で学習(whisper-small ベース)。
⚕️ 医療機器ではありません。 文字起こし補助(人間の確認が前提)であり、診断・治療判断には使用しないでください。
結果(eval-P2 ベンチマーク, 155発話)
| モデル | CER ↓ | TermMiss ↓ |
|---|---|---|
| baseline (whisper-small 素) | 0.2906 | 0.7208 |
| このモデル (Full FT, 60話者) | 0.1194 | 0.3344 |
| 参考: LoRA版 (同データ) | 0.1168 | 0.3409 |
→ CER 約60%削減 / 医療用語ミス 約53%削減。
詳細
- ベース: openai/whisper-small (244M, MIT)
- 手法: フル fine-tuning(encoder 凍結 + decoder 学習), bf16
- 学習データ: 同意済みボランティア 60話者 / 約3,600発話(患者データではありません)。日本語医療ドメイン(22診療科 + 看護/薬剤/その他医療職)。
- 評価指標: CER (micro) + TermMiss (医療用語 recall)
使い方
from transformers import WhisperForConditionalGeneration, WhisperProcessor
import librosa
M = "NikotoraIi/medvoice-jp-whisper-small-ft-n60"
proc = WhisperProcessor.from_pretrained(M, language="japanese", task="transcribe")
model = WhisperForConditionalGeneration.from_pretrained(M)
audio, _ = librosa.load("your_audio.wav", sr=16000, mono=True)
feats = proc(audio, sampling_rate=16000, return_tensors="pt").input_features
ids = model.generate(feats, language="japanese", task="transcribe", max_new_tokens=225)
print(proc.batch_decode(ids, skip_special_tokens=True)[0])
限界
- 高齢者音声で精度劣化。話者コホートにより性能変動。
- 小データ fine-tuning 由来の一般語の軽微な劣化があり得る(部分的忘却。データ増で改善見込み)。
- 小規模評価(155発話)。医療機器非該当(文字起こし補助)。
倫理・データ
- 全話者から研究利用・公開の明示同意取得。連絡先等の PII は非公開。生音声・話者識別情報は非公開。
ライセンス
MIT。ベース openai/whisper-small は MIT。MEDIS 標準病名マスター本体は再配布せず。