注意❗
このモデルは初期プロンプト(initial prompt) との相性が悪いようで、設定をするとハルシネーションが起きて質が極めて劣化します。初期プロンプトを設定せずにご使用ください。
Using an initial prompt causes a decline in quality, with the model exhibiting hallucinations and significantly degraded performance. Please avoid using an initial prompt.
特徴 🌟
Anime Whisperは、他モデルに比べて一般的に次のような傾向があります。
- ハルシネーションが少ない
- 他のモデルでスキップされがちな言い淀みや、笑い声や叫びや吐息などの非言語発話も忠実に書き起こす
- 「。、!?…」の句読点が音声のリズムや感情に合わせて適切に付き、セリフ台本として違和感がない自然な文体で書き起こされる
- アニメ調な演技セリフに対しては特に精度が高い
- kotoba-whisper (whisper-large-v3の蒸留モデル) ベースなので軽量で高速
- 他モデルでは書き起こしがほぼ不可能なNSFW音声もきちんとした文体で文字起こし可能
使い方例 🚀
import torch
from transformers import pipeline
generate_kwargs = {
"language": "Japanese",
"no_repeat_ngram_size": 0,
"repetition_penalty": 1.0,
}
pipe = pipeline(
"automatic-speech-recognition",
model="litagin/anime-whisper",
device="cuda",
torch_dtype=torch.float16,
chunk_length_s=30.0,
batch_size=64,
)
audio_path = "test.wav"
result = pipe(audio_path, generate_kwargs=generate_kwargs)
print(result["text"])
- 複数ファイルを一気に推論する場合は
pipe に単にファイルパスのリストを渡せばよいです。
- 繰り返しハルシネーションが目立つ場合は、上記の
no_repeat_ngram_size: int を 5 - 10 程度に設定したり、repetition_penalty を1より上に設定することで抑制できます。
評価 📊
詳しい評価・観察レポートや評価コードはGitHubリポジトリで公開予定です。
CER (Character Error Rate, 文字誤り率)
- 「学習データと同じアニメ調セリフのドメインではあるが、学習データには含まれていない個人的に所持している5本ノベルゲーム(合計約75kファイル)」で評価
- OpenAIのWhisper系の繰り返しハルシネーション抑止のため
no_repeat_ngram_size=5のパラメータで生成
- CERは適切な正規化を行った結果に対するCER

バイアス等 🚨
- 人名等の固有名詞が学習データのビジュアルノベルに存在する場合、そのゲーム内の漢字で書き起こされることが多い
- 他にもデータセットに存在する一部特定の単語が通常とは異なる書き起こしになることがある(例:
からだ → 身体 等や、その他固有名詞等)
- データセットの正規化 により、以下のものは出力結果にほぼ現れない:
- 母音や長音符の連続:
ああああーーーー
- 同じ感嘆符の連続:
こらーっ!!!! なにそれ!?!?!?!?
- 三点リーダーの連続:
…… (日本語表記としては2個用いる …… が正しいが、ほぼ常に1個のみ … で出力される)
- 数字とアルファベットと感嘆符は半角で書き起こされる
例 👀
上記評価と同じ、学習元には入っていないノベルゲームのセリフの書き起こし比較です(同様にno_repeat_ngram_size=5での生成)。
結果を見ると、だいたいwhisper-large-v3程度の良い性能が出ており、以下では他モデルとの差が顕著な例(特に非言語発話や感情的な音声等)のみいくつか抜粋しています。
Table with columns: 正解テキスト, Anime Whisper, whisper-large-v3, kotoba-whisper-v2.0, reazonspeech-nemo| 正解テキスト | Anime Whisper | whisper-large-v3 | kotoba-whisper-v2.0 | reazonspeech-nemo |
|---|
| あわわわっ!わわわわっ! | はわわっ、わわわわっ…! | ああああああああああ | うわうわ | うわ! |
| そっ、そっか……。………。……そうなんだ。 | そっ…そっか…そうなんだ… | そっか…そうなんだ… | そっか…そうなんだ | そっそっかあっそうなんだ。 |
| たぶん、ぼくが勝つ、はず | たぶん、ボクが勝つ、はず | 多分、僕が勝つはず。 | 多分僕が勝つはず |
NSFW例 🫣
成人向けの表現が含まれるため、閲覧にはご注意ください。
Table with columns: 正解テキスト, Anime Whisper, whisper-large-v3, kotoba-whisper-v2.0, reazonspeech-nemo| 正解テキスト | Anime Whisper | whisper-large-v3 | kotoba-whisper-v2.0 | reazonspeech-nemo |
|---|
| ひっ、あっ!あぅっ、ああぁぁあぁぁぁぁぁっ!はっ、はっ、はっ、はっ、ひぁっ! | んぁっ、あっ、あっ、ああぁぁっ!あっ、はぁっ、はぁっ…んっ、ふぁああっ! | ご視聴ありがとうございました | アハハハ | うわ! |
| ち、ちがっ……んっ、あぁぁ……気持ちいい、わけが……あぁっ、やぁっ、待てと……んんっ、はぁ……あふぅっ…… | ち、ちがっ…はぁっ、はぁっ、気持ちいい、わけがっ…あっ、やぁっ、待てとっ…んくっ、はぁ、はぁっ… | ち、ちが…気持ちいいわけが…待てと… | ちちが気持ちいいわけが待てと | ち違うはあ気持ちいいわけが待てとあっ。 |
| あんっ!あっ、あっ……そっ、それ……あっ、はぁはぁはぁ。ンンンンッ!ぴっ、ぴりぴり、ってして……。あんっ!はぁはぁはぁ、きっ、きもち……いいです! | ふぁんっ!あっ、あぁっ!そっ、それっ…あっ、はぁっ、はぁっ…んんっ!ぴ、ぴりぴりって、して…ひぁっ!はっ、はぁ、はぁっ…!き、気持ち、いいですっ…! | それ…フィリフィリでした…気持ちいいです… |
Table with columns: 正解テキスト, Anime Whisper, whisper-large-v3, kotoba-whisper-v2.0, reazonspeech-nemo| 正解テキスト | Anime Whisper | whisper-large-v3 | kotoba-whisper-v2.0 | reazonspeech-nemo |
|---|
| れろっ、んっ……れろ、ちゅ、んちゅ | れろっ、れろっ、ちゅううっ | ううううう | わいしゅう | シュッ! |
| はっ、はい!んっ、れろっ、れろっ……あっ、れろっ | は、はい…っ、れろぉ…っ、れりゅっ、れりょっ… | わ、はぁい、わ、う、う、わ、へ、へ、へ | わあはい | はい。 |
| れろっ、れろ……むふふ、ここの線なぞると反応いいね、んちゅ、ちゅうっ……ここいい?どう? | れろれろれろっ…んっ、ふふっ、ここの線なぞると反応いいね…ちゅっ、ちゅっ…ここいい?どう? | ここの線なぞると反応いいねここいい?どう? | ここの線なぞると反応いいねうんふうに |
学習手順 📚
詳しい学習手順やハイパーパラメータや学習コードはそのうちGitHubで公開予定です。
- 全データのうち1番最後のtarファイルをtestデータとして残し、それ以外の3,735,363ファイルで学習
- まずはベースモデルからEncoderを凍結してDecoderのみで数エポックを学習
- その後Encoderの凍結を解除し、全体で数エポックを学習
- 学習打ち切り後に、「ある時点から別の時点までのモデルの平均(マージ)」を取る操作で性能向上を試み、Optunaを使ってベンチマークデータに対するCERで最適化し、その結果を最終モデルとした
環境 🖥
- 自腹でvast.aiで H100 NVL (VRAM 96GB) を借りて合計3週間弱、試行錯誤しながら学習をした(当初はベースモデルをwhisper-large-v3-turboにしていたので、その分も含まれる)
- 実際にこのモデルに使われた学習時間は、H100 NVL * 11.2日 程度(ただし後半の方はおそらく過学習によりテストデータに対する性能が悪かったため、最終マージには用いなかった)