使用 Gemma 處理音訊

音訊和口語是豐富的資料來源,可擷取使用者意圖、記錄周遭世界資訊,以及瞭解待解決的特定問題。從 Gemma 3n 開始,您可以在提示和生成作業中使用音訊資料。這項模型可用於各種音訊分析和解讀工作,並經過訓練,可處理超過 100 種口語的下列語音處理工作:

  • 語音轉文字 (STT):又稱自動語音辨識 (ASR),可接收口語音訊資料,並轉錄為相同語言的文字輸出內容。瞭解詳情
  • 自動語音翻譯 (AST):又稱為語音轉文字翻譯 (S2TT),可將一種語言的語音音訊資料翻譯成另一種語言的文字。瞭解詳情

您可以在各種應用程式中使用這些功能,例如:

  • 建構語音控制的應用程式介面
  • 為會議或講座建立轉錄服務
  • 在多語言環境中啟用語音搜尋功能

本指南將概略介紹 Gemma 3n 的音訊處理功能,包括資料考量事項、使用範例和最佳做法。

音訊資料

數位音訊資料的格式和解析度可能各不相同。實際可搭配 Gemma 使用的音訊格式 (例如 MP3 和 WAV 格式),取決於您選擇將聲音資料轉換為張量的架構。以下是使用 Gemma 處理音訊資料時,需要注意的具體事項:

  • 詞元費用:每秒音訊為 6.25 個詞元。
  • 音訊聲道:音訊資料會以單一音訊聲道處理。 如果使用多聲道音訊 (例如左右聲道),請考慮移除聲道或將音訊資料合併為單一聲道,以減少資料量。
  • 剪輯長度:建議使用長度最多 30 秒的音訊片段,但您也可以處理更長的片段,長度上限為模型脈絡窗口的大小,扣除您要求輸出的權杖。
  • 取樣率:權杖化工具的音訊處理率為 16kHz,且影格為 32 毫秒。
  • 位元深度:音訊權杖化工具會針對每個音訊樣本,使用範圍為 [-1, 1] 的浮點 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] 範圍

Speech-to-Text

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」文件中的音訊部分。