Gemma를 사용한 오디오 처리

오디오와 음성 언어는 사용자 의도를 파악하고, 주변 세계에 관한 정보를 기록하고, 해결해야 할 특정 문제를 이해하는 데 유용한 데이터 소스입니다. Gemma 3n부터 Gemma를 사용하여 프롬프트 및 생성 작업에 오디오 데이터를 사용할 수 있습니다. 다양한 오디오 분석 및 해석 작업에 사용할 수 있으며, 100개 이상의 음성 언어로 다음과 같은 음성 처리 작업을 처리하도록 모델이 학습되었습니다.

  • 음성 텍스트 변환 (STT): 자동 음성 인식 (ASR)이라고도 하며, 음성 언어 오디오 데이터를 가져와 동일한 언어로 텍스트 출력 으로 변환합니다. 자세히 알아보기
  • 자동 음성 번역 (AST): 음성 텍스트 번역 (S2TT)이라고도 하며, 한 언어로 된 음성 오디오 데이터를 가져와 다른 언어로 된 텍스트로 번역합니다. 자세히 알아보기

이러한 기능은 다음과 같은 다양한 애플리케이션에서 사용할 수 있습니다.

  • 음성 제어 애플리케이션 인터페이스 빌드
  • 회의 또는 강의용 스크립트 작성 서비스 만들기
  • 다국어 환경에서 음성 검색 기능 사용 설정

이 가이드에서는 데이터 고려사항, 사용 예, 권장사항을 비롯한 Gemma 3n의 오디오 처리 기능에 관한 개요를 제공합니다.

오디오 데이터

디지털 오디오 데이터는 다양한 형식과 해상도로 제공될 수 있습니다. MP3 및 WAV 형식과 같이 Gemma에서 사용할 수 있는 실제 오디오 형식은 사운드 데이터를 텐서로 변환하는 데 선택한 프레임워크에 따라 결정됩니다. 다음은 Gemma로 처리하기 위해 오디오 데이터를 준비할 때 고려해야 할 몇 가지 사항입니다.

  • 토큰 비용: 오디오 1초당 토큰 6.25개입니다.
  • 오디오 채널: 오디오 데이터는 단일 오디오 채널로 처리됩니다. 왼쪽 및 오른쪽 채널과 같은 다중 채널 오디오를 사용하는 경우 채널을 삭제하거나 사운드 데이터를 단일 채널로 결합하여 데이터를 단일 채널로 줄이는 것이 좋습니다.
  • 클립 길이: 최대 30초의 오디오 클립이 권장되지만 요청하는 출력 토큰을 뺀 모델의 컨텍스트 창 크기까지 더 긴 길이를 처리할 수 있습니다.
  • 샘플링 레이트: 토큰화 도구의 오디오 처리 레이트는 32밀리초 프레임으로 16kHz입니다.
  • 비트 심도: 오디오 토큰화 도구는 각 오디오 샘플의 범위 [-1, 1] 에서 각 프레임에 float 32비트 데이터를 사용합니다.

처리하려는 오디오 데이터가 특히 채널, 샘플링 레이트, 비트 심도 측면에서 입력 처리와 크게 다른 경우 모델에서 처리하는 데이터 해상도와 일치하도록 오디오 데이터를 리샘플링하거나 트리밍하는 것이 좋습니다.

오디오 인코딩

Gemma 3n에서 사용할 자체 코드 구현으로 오디오 데이터를 인코딩할 때는 권장되는 변환 프로세스를 따라야 합니다. MP3 또는 WAV 인코딩 데이터와 같은 특정 형식으로 인코딩된 오디오 파일을 사용하는 경우 먼저 ffmpeg와 같은 라이브러리를 사용하여 샘플로 디코딩해야 합니다. 데이터가 디코딩되면 오디오를 범위 [-1, 1]의 모노 채널 16kHz float32 파형으로 변환합니다. 예를 들어 44.1kHz에서 스테레오 서명된 16비트 PCM 정수 WAV 파일을 사용하는 경우 다음 단계를 따르세요.

  • 오디오 데이터를 16kHz로 리샘플링합니다.
  • 2개 채널의 평균을 구하여 스테레오에서 모노로 다운믹스합니다.
  • 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 실행, 오디오 섹션을 참고하세요.