|
|
In Google Colab ausführen
|
|
|
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 librariespip install torch accelerate# Install the transformers librarypip 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 ipywebrtcDrü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.
In Google Colab ausführen
Quelle auf GitHub ansehen