Audioinhalte verstehen

Auf ai.google.dev ansehen In Google Colab ausführen In Kaggle ausführen In Vertex AI öffnen Quelle auf GitHub ansehen

Ab Gemma 3n können Sie Audio direkt in Ihren Prompts und Workflows verwenden. Audio und gesprochene Sprache sind reichhaltige Datenquellen, um Nutzerabsichten zu erfassen, Informationen über die Welt um uns herum aufzuzeichnen und spezifische Probleme zu verstehen, die gelöst werden müssen.

In diesem Leitfaden finden Sie eine Übersicht über die Audioverarbeitungsfunktionen von Gemma 4, einschließlich automatischer Spracherkennung (ASR), Übersetzung und allgemeinem Sprachverständnis.

Dieses Notebook wird auf einer T4-GPU ausgeführt.

Python-Pakete installieren

Installieren Sie die Hugging Face-Bibliotheken, die zum Ausführen des Gemma-Modells und zum Senden von Anfragen erforderlich sind.

# Install PyTorch & other libraries
pip install torch accelerate

# Install the transformers library
pip install "transformers>=5.10.1"

Modell laden

Verwenden Sie die transformers-Bibliotheken, um eine Instanz eines processor und model mit den Klassen AutoProcessor und AutoModelForImageTextToText zu erstellen, wie im folgenden Codebeispiel gezeigt:

MODEL_ID = "google/gemma-4-E2B-it" # @param ["google/gemma-4-E2B-it","google/gemma-4-E4B-it", "google/gemma-4-12B-it"]

from transformers import pipeline

pipe = pipeline(
    task="any-to-any",
    model=MODEL_ID,
    device_map="auto",
    dtype="auto"
)
config.json:   0%|          | 0.00/4.95k [00:00<?, ?B/s]
model.safetensors:   0%|          | 0.00/10.2G [00:00<?, ?B/s]
Loading weights:   0%|          | 0/1951 [00:00<?, ?it/s]
generation_config.json:   0%|          | 0.00/208 [00:00<?, ?B/s]
processor_config.json:   0%|          | 0.00/1.69k [00:00<?, ?B/s]
chat_template.jinja:   0%|          | 0.00/17.3k [00:00<?, ?B/s]
tokenizer_config.json:   0%|          | 0.00/2.10k [00:00<?, ?B/s]
tokenizer.json:   0%|          | 0.00/32.2M [00:00<?, ?B/s]

Audiodaten

Digitale Audiodaten können in vielen Formaten und Auflösungen vorliegen. Die tatsächlichen Audioformate, die Sie mit Gemma verwenden können, z. B. MP3- und WAV-Formate, werden durch das Framework bestimmt, das Sie zum Konvertieren von Audiodaten in Tensoren auswählen. Hier sind einige spezifische Überlegungen zur Vorbereitung von Audiodaten für die Verarbeitung mit Gemma:

  • Token-Kosten:Jede Sekunde Audio kostet 25 Token für Gemma 4. (6,25 Token für Gemma 3n).
  • Clip-Länge:Audio unterstützt eine maximale Länge von 30 Sekunden.
  • Audiokanäle:Audiodaten werden als einzelner Audiokanal verarbeitet. Wenn Sie Mehrkanal-Audio verwenden, z. B. linke und rechte Kanäle, sollten Sie die Daten auf einen einzelnen Kanal reduzieren, indem Sie Kanäle entfernen oder die Audiodaten zu einem einzelnen Kanal kombinieren.
  • Technische Codierung:
    • Abtastrate:16 kHz
    • Bit-Tiefe:32-Bit-Gleitkommaformat mit Samples, die im Bereich von [-1, 1] normalisiert sind.

Wenn sich die Audiodaten, die Sie verarbeiten möchten, erheblich von der Eingabeverarbeitung unterscheiden, insbesondere in Bezug auf Kanäle, Abtastrate und Bit-Tiefe, sollten Sie die Audiodaten neu abtasten oder zuschneiden, um sie an die vom Modell verarbeitete Datenauflösung anzupassen.

Audiocodierung

Während Bibliotheken auf hoher Ebene (z. B. AutoProcessor von Hugging Face) die Audiovorverarbeitung oft automatisch übernehmen, müssen Sie manchmal eine benutzerdefinierte Codierung implementieren.

Wenn Sie Audiodaten mit Ihrer eigenen Codeimplementierung für die Verwendung mit Gemma codieren, sollten Sie den empfohlenen Konvertierungsprozess befolgen. Wenn Sie mit Audiodateien arbeiten, die in einem bestimmten Format codiert sind, z. B. MP3- oder WAV-codierte Daten, müssen Sie diese zuerst mit einer Bibliothek wie ffmpeg in Samples decodieren. Nachdem die Daten decodiert wurden, konvertieren Sie das Audio in 16-kHz-Gleitkomma-Wellenformen mit einem Kanal im Bereich [-1, 1]. Wenn Sie beispielsweise mit signierten 16-Bit-PCM-Stereo-WAV-Dateien mit 44, 1 kHz arbeiten, gehen Sie so vor:

  • Audiodaten auf 16 kHz neu abtasten
  • Von Stereo zu Mono downmixen, indem die beiden Kanäle gemittelt werden
  • Von int16 zu float32 konvertieren und durch 32768,0 dividieren, um auf den Bereich [-1, 1] zu skalieren

Sprache-zu-Text

Gemma 4 E2B, E4B und 12B Unified sind für die mehrsprachige Spracherkennung trainiert, sodass Sie Audioeingaben in verschiedenen Sprachen in Text transkribieren können.

Verwenden Sie die folgende Promptstruktur für die automatische Spracherkennung (ASR).

Transcribe the following speech segment in {LANGUAGE} into {LANGUAGE} text.

Follow these specific instructions for formatting the answer:
*   Only output the transcription, with no newlines.
*   When transcribing numbers, write the digits, i.e. write 1.7 and not one point seven, and write 3 instead of three.

Die folgenden Codebeispiele zeigen, wie Sie das Modell auffordern, Text aus Audiodateien mit Hugging Face Transformers zu transkribieren:

from transformers import GenerationConfig
config = GenerationConfig.from_pretrained(MODEL_ID)
config.max_new_tokens = 64
gen_kwargs = dict(generation_config=config)

RESOURCE_URL_PREFIX = "https://raw.githubusercontent.com/google-gemma/cookbook/refs/heads/main/apps/sample-data/"

messages = [
    {
        "role": "user",
        "content": [
            {"type": "text", "text": "Transcribe the following speech segment in its original language. Follow these specific instructions for formatting the answer:\n* Only output the transcription, with no newlines.\n* When transcribing numbers, write the digits, i.e. write 1.7 and not one point seven, and write 3 instead of three."},
            #{"type": "text", "text": "Transcribe the following speech segment in English into English text. Follow these specific instructions for formatting the answer:\n* Only output the transcription, with no newlines.\n* When transcribing numbers, write the digits, i.e. write 1.7 and not one point seven, and write 3 instead of three."},
            {"type": "audio", "audio": f"{RESOURCE_URL_PREFIX}journal1.wav"},
        ]
    }
]

outputs = pipe(messages, return_full_text=False, generate_kwargs=gen_kwargs)
print(outputs[0]['generated_text'])
I woke up early today feeling really fresh the morning light was beautiful and I enjoyed a nice cup of coffee<turn|>
from transformers import GenerationConfig
config = GenerationConfig.from_pretrained(MODEL_ID)
config.max_new_tokens = 1024
gen_kwargs = dict(generation_config=config)

messages = [
    {
        "role": "user",
        "content": [
            {"type": "text", "text": "Give me a concise overview of these audio files."},
            {"type": "text", "text": "journal1:"},
            {"type": "audio", "audio": f"{RESOURCE_URL_PREFIX}journal1.wav"},
            {"type": "text", "text": "journal2:"},
            {"type": "audio", "audio": f"{RESOURCE_URL_PREFIX}journal2.wav"},
            {"type": "text", "text": "journal3:"},
            {"type": "audio", "audio": f"{RESOURCE_URL_PREFIX}journal3.wav"},
            {"type": "text", "text": "journal4:"},
            {"type": "audio", "audio": f"{RESOURCE_URL_PREFIX}journal4.wav"},
            {"type": "text", "text": "journal5:"},
            {"type": "audio", "audio": f"{RESOURCE_URL_PREFIX}journal5.wav"},
        ]
    }
]

outputs = pipe(messages, return_full_text=False, generate_kwargs=gen_kwargs)
print(outputs[0]['generated_text'])
Here is a concise overview of each audio file:

**journal1:** The speaker describes a fresh and peaceful day, enjoying a cup of coffee.
**journal2:** The speaker had a perfect day at the park, including a walk and watching cherry blossoms.
**journal3:** The speaker finished the day with a good book, feeling grateful for simple moments.
**journal4:** The speaker returned from work and noted the beautiful night sky and a clear view from the train.
**journal5:** The speaker had a great lunch with an old friend, which was a pleasant way to catch up and made their day.
<turn|>

Live-Dolmetscher

Gemma 4 E2B, E4B und 12B Unified sind für mehrsprachige Live-Dolmetscher-Aufgaben trainiert, sodass Sie gesprochene Audioinhalte direkt in eine andere Sprache übersetzen können.

Verwenden Sie die folgende Promptstruktur für die automatische Sprachübersetzung (AST).

Transcribe the following speech segment in {SOURCE_LANGUAGE}, then translate it into {TARGET_LANGUAGE}.
When formatting the answer, first output the transcription in {SOURCE_LANGUAGE}, then one newline, then output the string '{TARGET_LANGUAGE}: ', then the translation in {TARGET_LANGUAGE}.

Die folgenden Codebeispiele zeigen, wie Sie das Modell auffordern, gesprochene Audioinhalte mit Hugging Face Transformers in Text zu übersetzen:

from transformers import GenerationConfig
config = GenerationConfig.from_pretrained(MODEL_ID)
config.max_new_tokens = 64
gen_kwargs = dict(generation_config=config)

messages = [
    {
        "role": "user",
        "content": [
            {"type": "text", "text": "Transcribe the following speech segment in English, then translate it into Korean. When formatting the answer, first output the transcription in English, then one newline, then output the string 'Korean: ', then the translation in Korean."},
            {"type": "audio", "audio": "https://ai.google.dev/gemma/docs/audio/roses-are.wav"},
        ]
    }
]

outputs = pipe(messages, return_full_text=False, generate_kwargs=gen_kwargs)
print(outputs[0]['generated_text'])
Roses are red, violets are blue.
Korean: 장미는 빨갛고, 제비꽃은 파랗다.<turn|>

Automatische Sprachübersetzung / Automatische Spracherkennung

Selbst ausprobieren

pip install ipywebrtc

Drücken Sie die Kreistaste und beginnen Sie zu sprechen. Klicken Sie noch einmal auf die Kreistaste, wenn Sie fertig sind. Das Widget beginnt sofort mit der Wiedergabe des aufgezeichneten Inhalts.

from google.colab import output
output.enable_custom_widget_manager()

from ipywebrtc import AudioRecorder, CameraStream

camera = CameraStream(constraints={'audio': True,'video':False})
recorder = AudioRecorder(stream=camera)
recorder
AudioRecorder(audio=Audio(value=b'', format='webm'), stream=CameraStream(constraints={'audio': True, 'video': …

Konvertieren Sie die WEBM-Datei in das WAV-Format, das von PyTorch verstanden werden kann.

with open('/content/recording.webm', 'wb') as f:
    f.write(recorder.audio.value)
!ffmpeg -i /content/recording.webm /content/recording.wav -y
ffmpeg version 4.4.2-0ubuntu0.22.04.1 Copyright (c) 2000-2021 the FFmpeg developers
  built with gcc 11 (Ubuntu 11.2.0-19ubuntu1)
  configuration: --prefix=/usr --extra-version=0ubuntu0.22.04.1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librabbitmq --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --enable-pocketsphinx --enable-librsvg --enable-libmfx --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared
  libavutil      56. 70.100 / 56. 70.100
  libavcodec     58.134.100 / 58.134.100
  libavformat    58. 76.100 / 58. 76.100
  libavdevice    58. 13.100 / 58. 13.100
  libavfilter     7.110.100 /  7.110.100
  libswscale      5.  9.100 /  5.  9.100
  libswresample   3.  9.100 /  3.  9.100
  libpostproc    55.  9.100 / 55.  9.100
Input #0, matroska,webm, from '/content/recording.webm':
  Metadata:
    encoder         : Chrome
  Duration: 00:00:03.00, start: 0.000000, bitrate: 132 kb/s
  Stream #0:0(eng): Audio: opus, 48000 Hz, mono, fltp (default)
Stream mapping:
  Stream #0:0 -> #0:0 (opus (native) -> pcm_s16le (native))
Press [q] to stop, [?] for help
Output #0, wav, to '/content/recording.wav':
  Metadata:
    ISFT            : Lavf58.76.100
  Stream #0:0(eng): Audio: pcm_s16le ([1][0][0][0] / 0x0001), 48000 Hz, mono, s16, 768 kb/s (default)
    Metadata:
      encoder         : Lavc58.134.100 pcm_s16le
size=     287kB time=00:00:02.99 bitrate= 783.7kbits/s speed=79.4x    
video:0kB audio:287kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.026552%

ASR

from transformers import GenerationConfig
config = GenerationConfig.from_pretrained(MODEL_ID)
config.max_new_tokens = 64
gen_kwargs = dict(generation_config=config)

messages = [{
  "role": "user",
  "content": [
    {"type": "text", "text": "Transcribe the following speech segment in its original language. Follow these specific instructions for formatting the answer:\n* Only output the transcription, with no newlines.\n* When transcribing numbers, write the digits, i.e. write 1.7 and not one point seven, and write 3 instead of three."},
    {"type": "audio", "audio": "/content/recording.wav"},
  ]
}]

outputs = pipe(messages, return_full_text=False, generate_kwargs=gen_kwargs)
print(outputs[0]['generated_text'])
How can I get to the station?<turn|>

AST

messages = [{
  "role": "user",
  "content": [
    {"type": "text", "text": "Transcribe the following speech segment in English, then translate it into Korean. When formatting the answer, first output the transcription in English, then one newline, then output the string 'Korean: ', then the translation in Korean."},
    {"type": "audio", "audio": "/content/recording.wav"},
  ]
}]

outputs = pipe(messages, return_full_text=False, generate_kwargs=gen_kwargs)
print(outputs[0]['generated_text'])
How can I get to the station?
Korean: 역에 어떻게 가나요?<turn|>

Zusammenfassung und nächste Schritte

In diesem Leitfaden haben Sie erfahren, wie Sie Audio mit Gemma 4-Modellen verarbeiten. Die Beispiele haben gezeigt, wie Sie die Sprache-zu-Text-Funktion (ASR) verwenden, um gesprochene Sprache zu transkribieren, sowie die automatische Sprachübersetzung (AST), um gesprochene Audioinhalte direkt in eine andere Sprache zu übersetzen. Außerdem haben Sie gesehen, wie Sie Audio in einer Notebook-Umgebung von einem Mikrofon aufnehmen und verarbeiten können.

Weitere Informationen finden Sie in der folgenden Dokumentation.