Gemma ile ses işleme

Ses ve konuşma dili, kullanıcıların amaçlarını belirlemek, etrafımızdaki dünya hakkında bilgi kaydetmek ve çözülmesi gereken belirli sorunları anlamak için zengin veri kaynaklarıdır. Gemma 3n'den itibaren, Gemma ile istem ve oluşturma görevlerinizde ses verilerini kullanabilirsiniz. Bu modeli çeşitli ses analizi ve yorumlama görevlerinde kullanabilirsiniz. Model, 100'den fazla konuşma dilinde aşağıdaki konuşma işleme görevlerini yerine getirecek şekilde eğitilmiştir:

  • Sesle yazma (STT): Otomatik konuşma tanıma (ASR) olarak da bilinir. Konuşma dili ses verilerini alır ve aynı dilde metin çıkışına dönüştürür. Daha fazla bilgi
  • Otomatik konuşma çevirisi (AST): Konuşmayı metne çevirme (S2TT) olarak da bilinir. Bir dildeki seslendirilmiş içerik verilerini alıp başka bir dilde metne çevirir. Daha fazla bilgi

Bu özellikleri aşağıdaki gibi çeşitli uygulamalarda kullanabilirsiniz:

  • Sesle kontrol edilen uygulama arayüzleri oluşturma
  • Toplantılar veya dersler için transkripsiyon hizmetleri oluşturma
  • Çok dilli ortamlarda sesli arama işlevini etkinleştirme

Bu kılavuzda, veriyle ilgili hususlar, örnek kullanımlar ve en iyi uygulamalar da dahil olmak üzere Gemma 3n'nin ses işleme özelliklerine genel bir bakış sunulmaktadır.

Ses verileri

Dijital ses verileri birçok biçimde ve çözünürlük düzeyinde olabilir. Gemma ile kullanabileceğiniz gerçek ses biçimleri (ör. MP3 ve WAV biçimleri), ses verilerini tensörlere dönüştürmek için seçtiğiniz çerçeveye göre belirlenir. Gemma ile işlenmek üzere ses verilerini hazırlarken dikkate almanız gereken bazı özel noktaları aşağıda bulabilirsiniz:

  • Jeton maliyeti: Her saniye için 6,25 jeton gerekir.
  • Ses kanalları: Ses verileri tek bir ses kanalı olarak işlenir. Sol ve sağ kanallar gibi çok kanallı ses kullanıyorsanız kanalları kaldırarak veya ses verilerini tek bir kanalda birleştirerek verileri tek bir kanala indirgemeyi düşünebilirsiniz.
  • Klip uzunluğu: 30 saniyeye kadar olan ses klipleri önerilir ancak istediğiniz çıkış jetonlarını çıkararak modelin bağlam penceresinin boyutuna kadar daha uzun klipleri işleyebilirsiniz.
  • Örnekleme hızı: Tokenleştiricinin ses işleme hızı, 32 milisaniyelik çerçevelerle 16 kHz'dir.
  • Bit derinliği: Ses belirteçleştirici, her ses örneği için [-1, 1] aralığındaki her karede 32 bitlik kayan nokta verileri kullanır.

İşlemeyi planladığınız ses verileri, özellikle kanal sayısı, örnekleme hızı ve bit derinliği açısından giriş işleminden önemli ölçüde farklıysa ses verilerinizi yeniden örnekleyerek veya kırparak modelin işlediği veri çözünürlüğüne uygun hale getirmeyi düşünebilirsiniz.

Ses kodlama

Gemma 3n ile kullanılmak üzere kendi kod uygulamanızla ses verilerini kodlarken önerilen dönüştürme sürecini izlemeniz gerekir. MP3 veya WAV kodlu veriler gibi belirli bir biçimde kodlanmış ses dosyalarıyla çalışıyorsanız bunları önce ffmpeg gibi bir kitaplık kullanarak örneklere kod çözmeniz gerekir. Veriler kod çözüldükten sonra sesi, [-1, 1] aralığında tek kanallı, 16 kHz float32 dalga biçimlerine dönüştürün. Örneğin, 44, 1 kHz'de stereo imzalı 16 bit PCM tamsayı WAV dosyalarıyla çalışıyorsanız aşağıdaki adımları uygulayın:

  • Ses verilerini 16 kHz'ye yeniden örnekleyin.
  • 2 kanalı ortalayarak stereo sesin mono sese dönüştürülmesi
  • int16'dan float32'ye dönüştürün ve [-1, 1] aralığına ölçeklemek için 32768, 0'a bölün.

Sesle yazma

Gemma 3n, çok dilli konuşma tanıma için eğitilmiştir. Bu sayede, çeşitli dillerdeki ses girişlerini metne dönüştürebilirsiniz. Aşağıdaki kod örneklerinde, Hugging Face Transformers'ı kullanarak modelden ses dosyalarındaki metinleri transkribe etmesini isteme yöntemi gösterilmektedir:

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

Kitaplık yükleme de dahil olmak üzere daha eksiksiz bir kod örneği için Run Gemma with Hugging Face Transformers (Gemma'yı Hugging Face Transformers ile Çalıştırma) başlıklı dokümanın ses bölümüne bakın.

Otomatik konuşma çevirisi

Gemma 3n, çok dilli konuşmayı çevirme görevleri için eğitilmiştir. Bu sayede, seslendirilmiş içeriği doğrudan başka bir dile çevirebilirsiniz. Aşağıdaki kod örnekleri, Hugging Face Transformers'ı kullanarak seslendirilmiş içeriği metne çevirmesi için modele nasıl istem göndereceğinizi gösterir:

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

Kitaplık yükleme de dahil olmak üzere daha eksiksiz bir kod örneği için Run Gemma with Hugging Face Transformers (Gemma'yı Hugging Face Transformers ile Çalıştırma) başlıklı dokümanın ses bölümüne bakın.