音声と話し言葉は、ユーザーの意図を把握し、身の回りの世界に関する情報を記録し、解決すべき特定の問題を理解するための豊富なデータソースです。Gemma 3n 以降では、Gemma でプロンプト タスクと生成タスクに音声データを使用できます。このモデルは、さまざまな音声分析と解釈のタスクに使用できます。また、100 以上の言語で次の音声処理タスクを処理するようにトレーニングされています。
- 音声テキスト変換(STT): 自動音声認識(ASR)とも呼ばれ、音声言語の音声データを受け取り、同じ言語のテキスト出力に変換します。詳細
- 自動音声翻訳(AST): 音声テキスト翻訳(S2TT)とも呼ばれ、ある言語の音声データを取得して、別の言語のテキストに翻訳します。詳細
これらの機能は、次のようなさまざまなアプリケーションで使用できます。
- 音声操作アプリのインターフェースを構築する
- 会議や講義の文字起こしサービスを作成する
- 多言語環境で音声検索機能を有効にする
このガイドでは、Gemma 3n の音声処理機能の概要について説明します。データに関する考慮事項、使用例、ベスト プラクティスなどについて説明します。
音声データ
デジタル音声データには、さまざまな形式と解像度があります。Gemma で使用できる実際の音声形式(MP3 や WAV など)は、音声データをテンソルに変換するために選択するフレームワークによって決まります。Gemma で処理する音声データを準備する際の具体的な考慮事項は次のとおりです。
- トークン費用: 音声 1 秒あたり 6.25 トークン。
- 音声チャンネル: 音声データは単一の音声チャンネルとして処理されます。左右のチャンネルなどのマルチチャンネル オーディオを使用している場合は、チャンネルを削除するか、音声データを 1 つのチャンネルに結合して、データを 1 つのチャンネルに減らすことを検討してください。
- クリップの長さ: 最大 30 秒の音声クリップが推奨されますが、モデルのコンテキスト ウィンドウのサイズからリクエストする出力トークン数を差し引いた長さまで、より長い長さを処理できます。
- サンプルレート: トークナイザーの音声処理レートは 16 kHz で、フレームは 32 ミリ秒です。
- ビット深度: オーディオ トークナイザーは、各オーディオ サンプルの範囲 [-1, 1] の各フレームに float 32 ビットデータを使用します。
処理する予定の音声データが入力処理と大幅に異なる場合(特にチャネル、サンプルレート、ビット深度に関して)、モデルで処理されるデータ解像度に合わせて音声データをリサンプリングまたはトリミングすることを検討してください。
音声エンコード
Gemma 3n で使用するために独自のコード実装で音声データをエンコードする場合は、推奨される変換プロセスに従う必要があります。MP3 や WAV エンコード データなど、特定の形式でエンコードされた音声ファイルを扱う場合は、まず ffmpeg などのライブラリを使用して、これらのデータをサンプルにデコードする必要があります。データをデコードしたら、音声データをモノラル チャンネルの 16 kHz float32 波形(範囲 [-1, 1])に変換します。たとえば、44.1 kHz のステレオ符号付き 16 ビット PCM 整数 WAV ファイルを操作する場合は、次の手順を行います。
- 音声データを 16 kHz に再サンプリングする
- 2 つのチャネルを平均化してステレオからモノラルにダウンミックス
- int16 から float32 に変換し、32768.0 で割って [-1, 1] の範囲にスケーリングします。
音声入力
Gemma 3n は多言語音声認識用にトレーニングされており、さまざまな言語の音声入力をテキストに変換できます。次のコード例は、Hugging Face Transformers を使用して音声ファイルからテキストを文字変換するようにモデルにプロンプトを送信する方法を示しています。
import torch
from transformers import AutoProcessor, AutoModelForImageTextToText
GEMMA_MODEL_ID = "google/gemma-3n-E4B-it"
processor = AutoProcessor.from_pretrained(GEMMA_MODEL_ID, device_map="auto")
model = AutoModelForImageTextToText.from_pretrained(
GEMMA_MODEL_ID, torch_dtype="auto", device_map="auto")
messages = [
{
"role": "user",
"content": [
{"type": "audio", "audio": "http://localhost/recording_01.wav"},
{"type": "audio", "audio": "http://localhost/recording_02.wav"},
{"type": "audio", "audio": "http://localhost/recording_03.wav"},
{"type": "text", "text": "Transcribe these audio files in order"},
]
}
]
input_ids = processor.apply_chat_template(
messages,
add_generation_prompt=True,
tokenize=True, return_dict=True,
return_tensors="pt",
)
input_ids = input_ids.to(model.device, dtype=model.dtype)
outputs = model.generate(**input_ids, max_new_tokens=64)
text = processor.batch_decode(
outputs,
skip_special_tokens=False,
clean_up_tokenization_spaces=False
)
print(text[0])
ライブラリのインストールを含む完全なコード例については、ドキュメントの Hugging Face Transformers で Gemma を実行するの音声セクションをご覧ください。
自動音声翻訳
Gemma 3n は、多言語の音声から翻訳へのタスク用にトレーニングされており、音声の音声を別の言語に直接翻訳できます。次のコード例は、Hugging Face Transformers を使用して、音声オーディオをテキストに変換するようにモデルにプロンプトする方法を示しています。
import torch
from transformers import AutoProcessor, AutoModelForImageTextToText
GEMMA_MODEL_ID = "google/gemma-3n-E4B-it"
processor = AutoProcessor.from_pretrained(GEMMA_MODEL_ID, device_map="auto")
model = AutoModelForImageTextToText.from_pretrained(
GEMMA_MODEL_ID, torch_dtype="auto", device_map="auto")
messages = [
{
"role": "user",
"content": [
{"type": "audio", "audio": "https://ai.google.dev/gemma/docs/audio/roses-are.wav"},
{"type": "text", "text": "Transcribe this audio into English, and then translate it into French."},
]
}
]
input_ids = processor.apply_chat_template(
messages,
add_generation_prompt=True,
tokenize=True, return_dict=True,
return_tensors="pt",
)
input_ids = input_ids.to(model.device, dtype=model.dtype)
outputs = model.generate(**input_ids, max_new_tokens=64)
text = processor.batch_decode(
outputs,
skip_special_tokens=False,
clean_up_tokenization_spaces=False
)
print(text[0])
ライブラリのインストールを含む完全なコード例については、ドキュメントの Hugging Face Transformers で Gemma を実行するの音声セクションをご覧ください。