Processamento de áudio com a Gemma

O áudio e a linguagem falada são fontes ricas de dados para capturar intenções do usuário, registrar informações sobre o mundo ao nosso redor e entender problemas específicos a serem resolvidos. A partir do Gemma 3n, é possível usar dados de áudio nas tarefas de comando e geração com o Gemma. Ele pode ser usado em várias tarefas de análise e interpretação de áudio, e foi treinado para lidar com as seguintes tarefas de processamento de fala em mais de 100 idiomas falados:

  • Conversão de voz em texto (STT): também conhecido como reconhecimento automático de fala (ASR), usa dados de áudio da linguagem falada e os transcreve para texto no mesmo idioma. Saiba mais
  • Tradução automática de fala (AST): também conhecida como conversão de voz em texto traduzido (S2TT), pega dados de áudio falados em um idioma e os traduz para texto em outro idioma. Saiba mais

Você pode usar esses recursos em vários aplicativos, como:

  • Como criar interfaces de aplicativos controlados por voz
  • Criar serviços de transcrição para reuniões ou palestras
  • Ativar a funcionalidade de pesquisa por voz em ambientes multilíngues

Este guia fornece uma visão geral dos recursos de processamento de áudio do Gemma 3n, incluindo considerações sobre dados, exemplos de uso e práticas recomendadas.

Dados de áudio

Os dados de áudio digital podem ter vários formatos e níveis de resolução. Os formatos de áudio que você pode usar com a Gemma, como MP3 e WAV, são determinados pelo framework escolhido para converter dados de som em tensores. Confira algumas considerações específicas para preparar dados de áudio para processamento com a Gemma:

  • Custo do token:cada segundo de áudio custa 6,25 tokens.
  • Canais de áudio:os dados de áudio são processados como um único canal. Se você estiver usando áudio multicanal, como canais esquerdo e direito, considere reduzir os dados para um único canal removendo ou combinando os dados de som em um único canal.
  • Duração do clipe:recomenda-se usar clipes de áudio de até 30 segundos, mas é possível processar durações maiores, até o tamanho da janela de contexto do modelo, subtraindo os tokens de saída solicitados.
  • Taxa de amostragem:a taxa de processamento de áudio para o tokenizador é de 16 kHz com frames de 32 milissegundos.
  • Profundidade de bits:o tokenizador de áudio usa dados de ponto flutuante de 32 bits para cada frame no intervalo [-1, 1] em cada amostra de áudio.

Se os dados de áudio que você planeja processar forem significativamente diferentes do processamento de entrada, principalmente em termos de canais, taxa de amostragem e profundidade de bits, considere reamostrar ou cortar os dados de áudio para corresponder à resolução de dados processada pelo modelo.

Codificação de áudio

Ao codificar dados de áudio com sua própria implementação de código para uso com a Gemma 3n, siga o processo de conversão recomendado. Se você estiver trabalhando com arquivos de áudio codificados em um formato específico, como dados codificados em MP3 ou WAV, primeiro decodifique-os em amostras usando uma biblioteca como ffmpeg. Depois que os dados forem decodificados, converta o áudio em formas de onda de ponto flutuante de 16 kHz de canal único float32 no intervalo [-1, 1]. Por exemplo, se você estiver trabalhando com arquivos WAV PCM de 16 bits assinados estéreo a 44,1 kHz, siga estas etapas:

  • Fazer uma nova amostragem dos dados de áudio para 16 kHz
  • Fazer o downmix de estéreo para mono calculando a média dos dois canais
  • Converta de int16 para float32 e divida por 32768, 0 para dimensionar para o intervalo [-1, 1].

Conversão de voz em texto

A Gemma 3n é treinada para reconhecimento de fala multilíngue, permitindo transcrever entradas de áudio em vários idiomas para texto. Os exemplos de código a seguir mostram como solicitar ao modelo que transcreva texto de arquivos de áudio usando o 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])

Para um exemplo de código mais completo, incluindo a instalação da biblioteca, consulte a documentação Executar o Gemma com o Hugging Face Transformers, seção de áudio.

Tradução simultânea de fala

A Gemma 3n foi treinada para tarefas de fala multilíngue para tradução, permitindo que você traduza áudio falado diretamente para outro idioma. Os exemplos de código a seguir mostram como pedir ao modelo para traduzir áudio falado em texto usando os Transformers do Hugging Face:

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])

Para um exemplo de código mais completo, incluindo a instalação da biblioteca, consulte a documentação Executar o Gemma com o Hugging Face Transformers, seção de áudio.