Xử lý âm thanh bằng Gemma

Âm thanh và ngôn ngữ nói là những nguồn dữ liệu phong phú để nắm bắt ý định của người dùng, ghi lại thông tin về thế giới xung quanh chúng ta và hiểu rõ những vấn đề cụ thể cần giải quyết. Kể từ Gemma 3n, bạn có thể sử dụng dữ liệu âm thanh trong các tác vụ tạo và đưa ra câu lệnh bằng Gemma. Bạn có thể sử dụng mô hình này cho nhiều nhiệm vụ phân tích và diễn giải âm thanh. Mô hình này được huấn luyện để xử lý các nhiệm vụ xử lý lời nói sau đây bằng hơn 100 ngôn ngữ nói:

  • Chuyển lời nói thành văn bản (STT): Còn được gọi là công nghệ nhận dạng lời nói tự động (ASR), công nghệ này lấy dữ liệu âm thanh bằng ngôn ngữ nói và chép lời thành văn bản đầu ra bằng cùng một ngôn ngữ. Tìm hiểu thêm
  • Dịch lời nói tự động (AST): Còn được gọi là dịch lời nói sang văn bản (S2TT), lấy dữ liệu âm thanh lời nói bằng một ngôn ngữ và dịch sang văn bản bằng một ngôn ngữ khác. Tìm hiểu thêm

Bạn có thể sử dụng các tính năng này trong nhiều ứng dụng, chẳng hạn như:

  • Xây dựng giao diện ứng dụng điều khiển bằng giọng nói
  • Tạo dịch vụ chép lời cho các cuộc họp hoặc bài giảng
  • Bật chức năng tìm kiếm bằng giọng nói trong môi trường đa ngôn ngữ

Hướng dẫn này cung cấp thông tin tổng quan về các khả năng xử lý âm thanh của Gemma 3n, bao gồm cả các điểm cần cân nhắc về dữ liệu, ví dụ về cách sử dụng và các phương pháp hay nhất.

Dữ liệu âm thanh

Dữ liệu âm thanh kỹ thuật số có thể có nhiều định dạng và mức độ phân giải. Các định dạng âm thanh thực tế mà bạn có thể sử dụng với Gemma (chẳng hạn như định dạng MP3 và WAV) được xác định bằng khung mà bạn chọn để chuyển đổi dữ liệu âm thanh thành tensor. Sau đây là một số điểm cụ thể cần cân nhắc khi chuẩn bị dữ liệu âm thanh để xử lý bằng Gemma:

  • Chi phí mã thông báo: Mỗi giây âm thanh có giá 6,25 mã thông báo.
  • Kênh âm thanh: Dữ liệu âm thanh được xử lý dưới dạng một kênh âm thanh duy nhất. Nếu bạn đang sử dụng âm thanh đa kênh, chẳng hạn như kênh trái và kênh phải, hãy cân nhắc việc giảm dữ liệu xuống một kênh bằng cách xoá các kênh hoặc kết hợp dữ liệu âm thanh thành một kênh.
  • Độ dài đoạn trích: Bạn nên sử dụng đoạn trích âm thanh có thời lượng tối đa 30 giây, nhưng bạn có thể xử lý đoạn trích dài hơn, tối đa bằng kích thước cửa sổ ngữ cảnh của mô hình, trừ đi số lượng mã thông báo đầu ra mà bạn yêu cầu.
  • Tốc độ lấy mẫu: Tốc độ xử lý âm thanh cho mã hoá từ là 16 kHz với khung hình 32 mili giây.
  • Độ sâu bit: Trình mã hoá từ âm thanh sử dụng dữ liệu dấu phẩy động 32 bit cho mỗi khung hình trong dải [-1, 1] cho mỗi mẫu âm thanh.

Nếu dữ liệu âm thanh mà bạn dự định xử lý khác biệt đáng kể so với quá trình xử lý đầu vào, đặc biệt là về số kênh, tốc độ lấy mẫu và độ sâu bit, hãy cân nhắc việc lấy lại mẫu hoặc cắt dữ liệu âm thanh để khớp với độ phân giải dữ liệu mà mô hình xử lý.

Mã hoá âm thanh

Khi mã hoá dữ liệu âm thanh bằng phương thức triển khai mã của riêng bạn để sử dụng với Gemma 3n, bạn nên tuân theo quy trình chuyển đổi được đề xuất. Nếu đang làm việc với các tệp âm thanh được mã hoá ở một định dạng cụ thể, chẳng hạn như dữ liệu được mã hoá MP3 hoặc WAV, trước tiên, bạn phải giải mã các tệp này thành mẫu bằng một thư viện như ffmpeg. Sau khi giải mã dữ liệu, hãy chuyển đổi âm thanh thành dạng sóng float32 16 kHz một kênh trong phạm vi [-1, 1]. Ví dụ: nếu bạn đang làm việc với các tệp WAV số nguyên PCM 16 bit có dấu âm thanh nổi ở tần số 44, 1 kHz, hãy làm theo các bước sau:

  • Lấy mẫu lại dữ liệu âm thanh thành 16 kHz
  • Trộn từ âm thanh nổi sang âm thanh đơn bằng cách lấy trung bình của 2 kênh
  • Chuyển đổi từ int16 sang float32 và chia cho 32768.0 để chia tỷ lệ thành phạm vi [-1, 1]

Chuyển giọng nói thành văn bản

Gemma 3n được huấn luyện để nhận dạng giọng nói bằng nhiều ngôn ngữ, cho phép bạn chuyển bản ghi âm bằng nhiều ngôn ngữ thành văn bản. Các ví dụ về mã sau đây cho thấy cách nhắc mô hình phiên âm văn bản từ tệp âm thanh bằng 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])

Để xem ví dụ đầy đủ hơn về mã, bao gồm cả việc cài đặt thư viện, hãy xem phần Chạy Gemma bằng Hugging Face Transformers, phần âm thanh trong tài liệu.

Dịch lời nói tự động

Gemma 3n được huấn luyện cho các tác vụ dịch lời nói sang văn bản bằng nhiều ngôn ngữ, cho phép bạn dịch trực tiếp nội dung âm thanh sang một ngôn ngữ khác. Các ví dụ về mã sau đây cho thấy cách nhắc mô hình dịch âm thanh lời nói thành văn bản bằng 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])

Để xem ví dụ đầy đủ hơn về mã, bao gồm cả việc cài đặt thư viện, hãy xem phần Chạy Gemma bằng Hugging Face Transformers, phần âm thanh trong tài liệu.