使用 Gemma 进行音频处理

音频和口语是丰富的数据源,可用于捕获用户意图、记录有关周围世界的信息,以及了解需要解决的具体问题。从 Gemma 3n 开始,您可以在提示和生成任务中使用音频数据。该模型可用于各种音频分析和解读任务,并且经过训练,能够以 100 多种口语处理以下语音处理任务:

  • 语音转文字 (STT):也称为自动语音识别 (ASR),可获取口语音频数据并将其转写为相同语言的文本输出。了解详情
  • 自动语音翻译 (AST):也称为语音转文本翻译 (S2TT),可将一种语言的语音音频数据翻译成另一种语言的文本。了解详情

您可以在各种应用中使用这些功能,例如:

  • 构建语音控制的应用界面
  • 为会议或讲座创建转写服务
  • 在多语言环境中启用语音搜索功能

本指南简要介绍了 Gemma 3n 的音频处理功能,包括数据注意事项、使用示例和最佳实践。

音频数据

数字音频数据可以采用多种格式和分辨率。您可与 Gemma 搭配使用的实际音频格式(例如 MP3 和 WAV 格式)取决于您选择将声音数据转换为张量的框架。以下是准备音频数据以供 Gemma 处理时的一些具体注意事项:

  • token 费用:每秒音频为 6.25 个 token。
  • 音频声道:音频数据以单个音频声道进行处理。 如果您使用的是多声道音频(例如左右声道),请考虑通过移除声道或将声音数据合并到单个声道来将数据减少到单个声道。
  • 剪辑长度:建议使用时长不超过 30 秒的音频剪辑,但您也可以处理更长的音频剪辑,最长可达模型上下文窗口的大小,但需减去您请求的输出 token。
  • 采样率:分词器的音频处理速率为 16kHz,帧大小为 32 毫秒。
  • 位深:音频分词器针对每个音频样本,使用范围为 [-1, 1] 的浮点 32 位数据来表示每个帧。

如果您计划处理的音频数据与输入处理有显著不同(尤其是在通道、采样率和位深方面),请考虑对音频数据进行重采样或剪裁,以匹配模型处理的数据分辨率。

音频编码

如果您使用自己的代码实现来编码音频数据以供 Gemma 3n 使用,则应遵循建议的转换流程。如果您处理的是以特定格式(例如 MP3 或 WAV 编码数据)编码的音频文件,则必须先使用 ffmpeg 等库将这些文件解码为样本。对数据进行解码后,将音频转换为单声道、16 kHz 的 float32 波形,范围为 [-1, 1]。例如,如果您要处理 44.1 kHz 的立体声有符号 16 位 PCM 整数 WAV 文件,请按以下步骤操作:

  • 将音频数据重新采样为 16 kHz
  • 通过对两个声道求平均值,将立体声缩混为单声道
  • 从 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 的音频部分。