1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Granite Speech 4.1-2B を watsonx.ai Jupyter Notebook で動かして Watson STT と比較してみた

1
Last updated at Posted at 2026-05-07

1. はじめに

2026年4月30日、IBM Research が Granite 4.1 ファミリー を発表しました。

言語モデル(3B/8B/30B)、Vision、Speech、Embedding、Guardian と多岐にわたるモデルが一斉に公開されたこのリリースは、まさにリリースされたばかりのホヤホヤの情報です。

さっそく試してみたくなりました。IBM watsonx.ai の Prompt Lab(プレイグラウンド)では、2026年5月時点で選択できるモデルは一世代前の Granite 4.0-small のみです。しかし、HuggingFace で公開されているモデルを Jupyter Notebook 上で直接動かすという方法を使えば、最新の Granite 4.1 系モデルを試すことができます。

本記事では、Granite Speech 4.1-2B を日本語音声認識(ASR)に使用し、同じテストセット・同じ評価指標(WER)を用いて Watson STT Large モデル(ja-JP) と定量的に比較した結果を報告します。評価パイプラインおよびテストセットは、以前私が Watson STT の新旧モデルの性能比較で使用したものを再利用しています。

検証を始める前は、2Bというコンパクトなモデルサイズかつマルチリンガル対応という条件から、日本語特化の Watson STT Large には及ばないだろうと予想していました。しかし結果は予想を上回るものでした。

補足(重要): 本検証は限定的なサンプルでの比較です。WER などの指標はモデル間の比較目的で用いており、他ソリューションとの直接比較や一般化には注意が必要です。


2. Granite Speech 4.1-2B とは

Granite Speech 4.1-2B は、IBM が開発した音声言語マルチモーダルモデルで、2026年4月にリリースされた最新モデルです。英語、フランス語、ドイツ語、スペイン語、ポルトガル語、日本語の6言語に対応した多言語音声認識モデルであり、音声エンコーダーと LLM(Granite 4.0-1b-base)を組み合わせた2段構成のアーキテクチャを採用しています。入力は WAV 形式(モノラル、16kHz)で、プロンプトにより句読点・大文字小文字の付与やキーワードバイアスの設定が可能です。

今回使用した 2B モデルのほか、話者識別と単語レベルタイムスタンプを追加した Plus バリアント、非自己回帰型で高スループットを実現した NAR バリアントも公開されています。モデルの詳細については IBM Granite の HuggingFace コレクションを参照してください。


3. セットアップ

実行環境

Jupyter Notebook 上で以下のライブラリをインストールして実行しました。

!pip install git+https://github.com/huggingface/transformers.git
!pip install accelerate soundfile
!pip install torchaudio==2.6.0 --index-url https://download.pytorch.org/whl/cu126

モデルのダウンロードと読み込み

from huggingface_hub import login, snapshot_download

login("hf_...")  # HuggingFace アクセストークン

snapshot_download(
    repo_id="ibm-granite/granite-speech-4.1-2b",
    local_dir="./hf_home/granite-speech",
    ignore_patterns=["*.msgpack", "*.h5"]
)
import torch
from transformers import AutoProcessor, AutoModelForSpeechSeq2Seq

model_path = "./hf_home/granite-speech"
processor = AutoProcessor.from_pretrained(model_path)
model = AutoModelForSpeechSeq2Seq.from_pretrained(
    model_path,
    dtype=torch.float16,
    device_map="auto"
)
model.eval()

推論コード

import torchaudio
import time

tokenizer = processor.tokenizer
user_prompt = "<|audio|>transcribe the speech with proper punctuation and capitalization."
chat = [{"role": "user", "content": user_prompt}]
prompt = tokenizer.apply_chat_template(chat, tokenize=False, add_generation_prompt=True)

wav, sr = torchaudio.load("./audio.wav", normalize=True)

start = time.time()
model_inputs = processor(prompt, wav, device="cuda", return_tensors="pt").to("cuda")
model_outputs = model.generate(
    **model_inputs,
    max_new_tokens=512,
    repetition_penalty=1.3,   # ループ(同一フレーズの繰り返し)を防ぐ
    no_repeat_ngram_size=5,   # 5gram の繰り返しを禁止
)
elapsed = time.time() - start

output_ids = model_outputs[0][model_inputs["input_ids"].shape[1]:]
result = tokenizer.decode(output_ids, skip_special_tokens=True)
print(f"処理時間: {elapsed:.1f}")
print(result)

Note: repetition_penaltyno_repeat_ngram_size は日本語音声認識において重要なパラメータです。これらを指定しないと、同一フレーズが延々と繰り返されるループ現象が発生することがあります。特に話者が「まあ」「あの」などのフィラーを多用する場面で顕著でした。

実際に watsonx.ai Studio 上で動かすには、IBM Cloud Object Storage からの音声ファイル取得や結果のダウンロードなど、環境固有のファイル入出力操作が必要です。動作確認済みのコードは以下のリポジトリを参照してください。

📓 granite4.ipynb(GitHub)


4. 評価方法

テストセット

以前 Watson STT の性能比較で作成した5件のオリジナル音声を使用しました。

  • ビジネス系の文脈(経理、マーケティング、会議の議事録想定など)
  • 意図的にやや不明瞭(ボソボソ)に発話した箇所を含む
  • 「生成AI」「ChatGPT」「インボイス制度」など比較的新しい用語を含む

評価指標

WER(Word Error Rate):値が低いほど認識精度が高いことを示します。形態素解析(MeCab/Fugashi)でトークン化後、Substitution / Insertion / Deletion を計算しました。

評価パイプライン

watson-stt-comparison の評価パイプラインをそのまま使用。Granite Speech の書き起こし結果テキストを同パイプラインに流し込み、WER を算出しました。


5. 結果

WER 比較

WER は値が低いほど認識精度が高いことを示します。

# ワード数 Granite Speech WER Watson STT Large WER
1 28 0.107 0.143
2 25 0.080 0.200
3 29 0.172 0.138
4 40 0.100 0.075
5 43 0.163 0.140

Granite Speech は5件中2件でより良い結果、Watson STT Large は3件でより良い結果となりました。全体的にはほぼ互角と言える内容です。

書き起こし速度(参考)

# 音声長 Granite Speech 処理時間
1 14秒 3.4秒
2 15秒 2.9秒
3 15秒 3.3秒
4 20秒 3.6秒
5 20秒 4.6秒

※ Granite Speech は GPU 環境でのローカル実行、Watson STT は SaaS サービスのため、速度の直接比較は適切ではありません。


6. 定性的分析

数字の表記

音声 正解 Granite Large
にせんにじゅうさん(不明瞭) 2023 2013 二千十三

Granite は数字をアラビア数字で書こうとするのに対し、Large は漢数字で書こうとする傾向があります。不明瞭な発話で Large が「二千十三」と書き起こした場合、MeCab が「二千」「十」「三」の3トークンに分解するためWERが大きく悪化しました。

英語固有名詞の扱い

音声 正解 Granite Large
code of conduct コード・オブ・コンダクト codeforconduit 行動コンタクト
ChatGPT ChatGPT チャット,gpt チャット,GPT

Granite(マルチリンガルモデル)は英語として聞こえた音声を英語で書き起こそうとします。一方 Large(日本語特化モデル)は日本語に引き寄せる傾向があります。

不明瞭発話への対応

音声 正解 Granite Large
統合基盤(不明瞭) 統合基盤 とおきばん 十万
ターゲット層(不明瞭) ターゲット層 あげてそう 上げ塗装

どちらのモデルも不明瞭発話には苦労しており、それぞれ特徴的な誤り方をしています。


7. 考察

2Bモデルながら互角の結果

Granite Speech 4.1-2B は、2Bパラメータというコンパクトなモデルサイズでありながら、日本語特化の Watson STT Large モデルとほぼ互角の WER を達成しました。特にレコーディング2では数字の表記方法の違いにより Granite がより良い結果となりました。

マルチリンガルモデルの特性

Granite Speech はマルチリンガルモデルであるため、英語固有名詞を英語のまま書き起こそうとする傾向があります。これはビジネス用語が多い日本語音声では有利に働く場面もありますが、認識精度が低い場合は英語の誤りとして現れます(例:codeforconduit)。

課題

  • 固有名詞の読み取りにばらつきが見られた(IBM → アイビン など)
  • キーワードバイアス機能の日本語音声への効果は今回の検証では確認できなかった

8. まとめ

本記事では、リリースされたばかりの Granite Speech 4.1-2B を日本語音声認識に使用し、Watson STT Large と同じテストセット・同じ評価指標で比較しました。

結果として、2Bパラメータのマルチリンガルモデルが、日本語特化の Watson STT Large モデルと互角の性能を発揮しました。

HuggingFace で公開されているモデルを Jupyter Notebook 上で直接動かすというアプローチは、watsonx.ai の Prompt Lab では選べない最新モデルを試す上で非常に有効な手段です。今後 Granite Speech の日本語対応がさらに改善されることに期待したいと思います。

(本記事は、執筆にあたり Anthropic Claude を利用し、その出力を参考にしています。)

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?