การประมวลผลเสียงด้วย Gemma

เสียงและภาษาพูดเป็นแหล่งข้อมูลที่สำคัญสำหรับการจับเจตนาของผู้ใช้ การบันทึกข้อมูลเกี่ยวกับโลกรอบตัว และการทำความเข้าใจปัญหาเฉพาะที่ต้องแก้ไข ตั้งแต่ Gemma 3n เป็นต้นไป คุณจะใช้ข้อมูลเสียงในงานพรอมต์และงานสร้างด้วย Gemma ได้ คุณสามารถใช้โมเดลนี้สำหรับงานวิเคราะห์และตีความเสียงต่างๆ ได้ และโมเดลได้รับการฝึกให้จัดการงานประมวลผลคำพูดต่อไปนี้ในกว่า 100 ภาษาพูด

  • การแปลงเสียงเป็นข้อความ (STT): หรือที่เรียกว่าการจดจำคำพูดอัตโนมัติ (ASR) จะรับข้อมูลเสียงภาษาพูดและถอดเสียงเป็นข้อความเอาต์พุต ในภาษาเดียวกัน ดูข้อมูลเพิ่มเติม
  • การแปลเสียงพูดอัตโนมัติ (AST): หรือที่เรียกว่าการแปลเสียงพูดเป็นข้อความ (S2TT) จะนำข้อมูลเสียงพูดในภาษาหนึ่งมาแปลเป็นข้อความในอีกภาษาหนึ่ง ดูข้อมูลเพิ่มเติม

คุณสามารถใช้ฟีเจอร์เหล่านี้ในแอปพลิเคชันต่างๆ เช่น

  • การสร้างอินเทอร์เฟซแอปพลิเคชันที่ควบคุมด้วยเสียง
  • การสร้างบริการถอดเสียงเป็นคำสำหรับการประชุมหรือการบรรยาย
  • การเปิดใช้ฟังก์ชันการค้นหาด้วยเสียงในสภาพแวดล้อมที่มีหลายภาษา

คู่มือนี้ให้ภาพรวมของความสามารถในการประมวลผลเสียงของ Gemma 3n รวมถึงข้อควรพิจารณาเกี่ยวกับข้อมูล ตัวอย่างการใช้งาน และแนวทางปฏิบัติแนะนำ

ข้อมูลเสียง

ข้อมูลเสียงดิจิทัลมีหลายรูปแบบและหลายระดับความละเอียด รูปแบบเสียงจริงที่คุณใช้กับ Gemma ได้ เช่น รูปแบบ MP3 และ WAV จะกำหนดโดยเฟรมเวิร์กที่คุณเลือกเพื่อแปลงข้อมูลเสียงเป็นเทนเซอร์ ต่อไปนี้คือข้อควรพิจารณาบางประการในการเตรียมข้อมูลเสียงเพื่อประมวลผลด้วย Gemma

  • ค่าใช้จ่ายโทเค็น: เสียงทุกๆ 1 วินาทีจะใช้โทเค็น 6.25 รายการ
  • ช่องเสียง: ระบบจะประมวลผลข้อมูลเสียงเป็นช่องเสียงเดียว หากใช้เสียงแบบหลายช่อง เช่น ช่องซ้ายและขวา ให้พิจารณาลดข้อมูลให้เหลือช่องเดียวโดยการนำช่องออกหรือ รวมข้อมูลเสียงเป็นช่องเดียว
  • ความยาวคลิป: เราขอแนะนำให้ใช้คลิปเสียงที่มีความยาวไม่เกิน 30 วินาที แต่คุณสามารถประมวลผลคลิปที่ยาวกว่านั้นได้ โดยมีความยาวสูงสุดเท่ากับขนาดหน้าต่างบริบทของโมเดล ลบด้วยโทเค็นเอาต์พุตที่คุณขอ
  • อัตราการสุ่มตัวอย่าง: อัตราการประมวลผลเสียงสำหรับโทเค็นไนเซอร์คือ 16 kHz โดยมีเฟรม 32 มิลลิวินาที
  • ความลึกของบิต: ตัวแยกคำของเสียงใช้ข้อมูลแบบลอยตัว 32 บิตสำหรับแต่ละเฟรมใน ช่วง [-1, 1] สำหรับตัวอย่างเสียงแต่ละรายการ

หากข้อมูลเสียงที่คุณวางแผนจะประมวลผลแตกต่างจากอินพุต การประมวลผลอย่างมาก โดยเฉพาะในแง่ของช่อง อัตราตัวอย่าง และความลึกของบิต ให้ลองทำการสุ่มตัวอย่างใหม่หรือตัดแต่งข้อมูลเสียงเพื่อให้ตรงกับความละเอียดของข้อมูล ที่โมเดลจัดการ

การเข้ารหัสเสียง

เมื่อเข้ารหัสข้อมูลเสียงด้วยการติดตั้งโค้ดของคุณเองเพื่อใช้กับ Gemma 3n คุณควรทําตามกระบวนการแปลงที่แนะนํา หากคุณทำงานกับไฟล์เสียงที่เข้ารหัสในรูปแบบที่เฉพาะเจาะจง เช่น ข้อมูลที่เข้ารหัส MP3 หรือ WAV คุณต้องถอดรหัสไฟล์เหล่านี้เป็นตัวอย่างก่อนโดยใช้ไลบรารี เช่น ffmpeg เมื่อถอดรหัสข้อมูลแล้ว ให้แปลงเสียงเป็นรูปแบบคลื่นแบบช่องเดียว 16 kHz float32 ในช่วง [-1, 1] เช่น หากคุณกำลังทำงานกับไฟล์ WAV ที่เป็นจำนวนเต็ม PCM แบบ 16 บิตที่มีการลงนามแบบสเตอริโอที่ 44.1 kHz ให้ทำตามขั้นตอนต่อไปนี้

  • สุ่มตัวอย่างข้อมูลเสียงอีกครั้งเป็น 16 kHz
  • ดาวน์มิกซ์จากสเตอริโอเป็นโมโนโดยหาค่าเฉลี่ยของ 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])

ดูตัวอย่างโค้ดที่สมบูรณ์ยิ่งขึ้น รวมถึงการติดตั้งไลบรารีได้ที่ส่วนเสียงใน เอกสารประกอบ เรียกใช้ Gemma ด้วย Hugging Face Transformers

การแปลเสียงพูดอัตโนมัติ

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

ดูตัวอย่างโค้ดที่สมบูรณ์ยิ่งขึ้น รวมถึงการติดตั้งไลบรารีได้ที่ส่วนเสียงใน เอกสารประกอบ เรียกใช้ Gemma ด้วย Hugging Face Transformers