モデル概要
モデル特徴
モデル能力
使用事例
🚀 Kotoba-Whisper-v2.2
Kotoba-Whisper-v2.2 は、kotoba-tech/kotoba-whisper-v2.0 をベースにした日本語の自動音声認識(ASR)モデルです。このモデルには、pipeline
として追加の後処理スタックが統合されています。新機能には、(i) diarizers を用いた話者分離、および (ii) punctuators を用いた句読点の追加が含まれています。このパイプラインは、Asahi Ushio と Kotoba Technologies の共同開発によって作成されました。
🚀 クイックスタート
Kotoba-Whisper-v2.2 は、バージョン 4.39 以降の Hugging Face 🤗 Transformers ライブラリでサポートされています。このモデルを実行するには、まず最新バージョンの Transformers をインストールしてください。
pip install --upgrade pip
pip install --upgrade transformers accelerate torchaudio
pip install "punctuators==0.0.5"
pip install "pyannote.audio"
pip install git+https://github.com/huggingface/diarizers.git
ハブから事前学習済みの話者分離モデルをロードするには、まず以下の 2 つのモデルの利用規約に同意する必要があります。
その後、Hugging Face の認証トークンを使用してログインします。
huggingface-cli login
💻 使用例
基本的な使用法
モデルは、pipeline
を使用して利用できます。
- オーディオサンプルをダウンロードします。
wget https://huggingface.co/kotoba-tech/kotoba-whisper-v2.2/resolve/main/sample_audio/sample_diarization_japanese.mp3
- パイプラインを介してモデルを実行します。
import torch
from transformers import pipeline
# config
model_id = "kotoba-tech/kotoba-whisper-v2.2"
torch_dtype = torch.float16 if torch.cuda.is_available() else torch.float32
device = "cuda:0" if torch.cuda.is_available() else "cpu"
model_kwargs = {"attn_implementation": "sdpa"} if torch.cuda.is_available() else {}
# load model
pipe = pipeline(
model=model_id,
torch_dtype=torch_dtype,
device=device,
model_kwargs=model_kwargs,
batch_size=8,
trust_remote_code=True,
)
# run inference
result = pipe("sample_diarization_japanese.mp3", chunk_length_s=15)
print(result)
>>> {
'chunks/SPEAKER_00': [{'speaker_id': 'SPEAKER_00', 'text': '水をマレーシアから買わなくてはならないのです', 'timestamp': [22.1, 24.97]}],
'chunks/SPEAKER_01': [{'speaker_id': 'SPEAKER_01', 'text': 'これも先ほどがずっと言っている自分の感覚的には大丈夫ですけれども', 'timestamp': [0.03, 13.85]},
{'speaker_id': 'SPEAKER_01', 'text': '今は屋外の気温', 'timestamp': [5.03, 18.85]},
{'speaker_id': 'SPEAKER_01', 'text': '昼も夜も上がってますので', 'timestamp': [7.63, 21.45]},
{'speaker_id': 'SPEAKER_01', 'text': '空気の入れ替えだけではかえって人が上がってきます', 'timestamp': [9.91, 23.73]}],
'chunks/SPEAKER_02': [{'speaker_id': 'SPEAKER_02', 'text': '愚直にやっぱりその街の良さをアピールしていくという', 'timestamp': [13.48, 22.1]},
{'speaker_id': 'SPEAKER_02', 'text': 'そういう姿勢が基本にあった上での', 'timestamp': [17.26, 25.88]},
{'speaker_id': 'SPEAKER_02', 'text': 'こういうPR作戦だと思うんですよね', 'timestamp': [19.86, 28.48]}],
'chunks': [{'speaker_id': 'SPEAKER_00', 'text': '水をマレーシアから買わなくてはならないのです', 'timestamp': [22.1, 24.97]},
{'speaker_id': 'SPEAKER_01', 'text': 'これも先ほどがずっと言っている自分の感覚的には大丈夫ですけれども', 'timestamp': [0.03, 13.85]},
{'speaker_id': 'SPEAKER_01', 'text': '今は屋外の気温', 'timestamp': [5.03, 18.85]},
{'speaker_id': 'SPEAKER_01', 'text': '昼も夜も上がってますので', 'timestamp': [7.63, 21.45]},
{'speaker_id': 'SPEAKER_01', 'text': '空気の入れ替えだけではかえって人が上がってきます', 'timestamp': [9.91, 23.73]},
{'speaker_id': 'SPEAKER_02', 'text': '愚直にやっぱりその街の良さをアピールしていくという', 'timestamp': [13.48, 22.1]},
{'speaker_id': 'SPEAKER_02', 'text': 'そういう姿勢が基本にあった上での', 'timestamp': [17.26, 25.88]},
{'speaker_id': 'SPEAKER_02', 'text': 'こういうPR作戦だと思うんですよね', 'timestamp': [19.86, 28.48]}],
'speaker_ids': ['SPEAKER_00', 'SPEAKER_01', 'SPEAKER_02'],
'text/SPEAKER_00': '水をマレーシアから買わなくてはならないのです',
'text/SPEAKER_01': 'これも先ほどがずっと言っている自分の感覚的には大丈夫ですけれども今は屋外の気温昼も夜も上がってますので空気の入れ替えだけではかえって人が上がってきます',
'text/SPEAKER_02': '愚直にやっぱりその街の良さをアピールしていくというそういう姿勢が基本にあった上でのこういうPR作戦だと思うんですよね'
}
高度な使用法
句読点付与の有効化
- result = pipe("sample_diarization_japanese.mp3")
+ result = pipe("sample_diarization_japanese.mp3", add_punctuation=True)
句読点付与機能は、text/*
特徴に適用されます。例えば:
'text/SPEAKER_00': '水をマレーシアから買わなくてはならないのです。'
'text/SPEAKER_01': 'これも先ほどがずっと言っている。自分の感覚的には大丈夫です。けれども。今は屋外の気温、昼も夜も上がってますので、空気の入れ替えだけではかえって人が上がってきます。'
'text/SPEAKER_02': '愚直にその街の良さをアピールしていくという。そういう姿勢が基本にあった上での、こういうPR作戦だと思うんですよね。'
話者数の制御(こちら を参照)
- result = pipe("sample_diarization_japanese.mp3")
+ result = pipe("sample_diarization_japanese.mp3", num_speakers=3)
または
- result = pipe("sample_diarization_japanese.mp3")
+ result = pipe("sample_diarization_japanese.mp3", min_speakers=2, max_speakers=5)
オーディオの前後に無音を追加する
オーディオの前後に無音を追加すると、転写品質が向上することがあります。
- result = pipe("sample_diarization_japanese.mp3")
+ result = pipe("sample_diarization_japanese.mp3", add_silence_end=0.5, add_silence_start=0.5) # オーディオの前後に 0.5 秒の無音を追加
Flash Attention 2 の使用
GPU がサポートしている場合は、Flash-Attention 2 の使用をおすすめします。そのためには、まず Flash Attention をインストールする必要があります。
pip install flash-attn --no-build-isolation
次に、from_pretrained
に attn_implementation="flash_attention_2"
を渡します。
- model_kwargs = {"attn_implementation": "sdpa"} if torch.cuda.is_available() else {}
+ model_kwargs = {"attn_implementation": "flash_attention_2"} if torch.cuda.is_available() else {}
📄 ライセンス
このプロジェクトは、Apache-2.0 ライセンスの下で提供されています。
🔗 参考情報
- OpenAI の Whisper モデル
- Hugging Face 🤗 Transformers のモデル統合
- Hugging Face 🤗 の Distil-Whisper コードベース
- Reazon Human Interaction Lab の ReazonSpeech データセット



