معالجة الصوت باستخدام "غيما"

تشكّل اللغة المنطوقة والصوت مصادر غنية بالبيانات التي تتيح التعرّف على نوايا المستخدمين وتسجيل معلومات حول العالم من حولنا وفهم المشاكل المحددة التي يجب حلّها. بدءًا من Gemma 3n، يمكنك استخدام بيانات الصوت في مهام الطلبات وإنشاء المحتوى باستخدام Gemma. يمكنك استخدام هذا النموذج لمجموعة متنوعة من مهام تحليل الصوت وتفسيره، وقد تم تدريبه للتعامل مع مهام معالجة الكلام التالية بأكثر من 100 لغة منطوقة:

  • تحويل الكلام إلى نص (STT): يُعرف أيضًا باسم التعرّف التلقائي على الكلام (ASR)، وهو يحوّل بيانات الصوتية للغة المنطوقة إلى نص باللغة نفسها. مزيد من المعلومات
  • الترجمة الآلية للكلام (AST): تُعرف أيضًا باسم الترجمة من الكلام إلى النص (S2TT)، وهي تحوّل محتوى كلامي صوتي بلغة معيّنة إلى نص بلغة أخرى. مزيد من المعلومات

يمكنك استخدام هذه الميزات في مجموعة متنوعة من التطبيقات، مثل:

  • إنشاء واجهات تطبيقات يمكن التحكّم فيها صوتيًا
  • إنشاء خدمات تحويل الصوت إلى نص في الاجتماعات أو المحاضرات
  • تفعيل ميزة البحث الصوتي في البيئات المتعددة اللغات

يقدّم هذا الدليل نظرة عامة على إمكانات معالجة الصوت في Gemma 3n، بما في ذلك اعتبارات البيانات وأمثلة على الاستخدام وأفضل الممارسات.

البيانات الصوتية

يمكن أن تتوفّر بيانات الصوت الرقمي بأشكال ومستويات دقة متعددة. تعتمد تنسيقات الصوت الفعلية التي يمكنك استخدامها مع Gemma، مثل تنسيقات MP3 وWAV، على إطار العمل الذي تختاره لتحويل بيانات الصوت إلى موترات. في ما يلي بعض الاعتبارات المحدّدة التي يجب مراعاتها عند إعداد البيانات الصوتية للمعالجة باستخدام Gemma:

  • تكلفة الرمز المميز: تبلغ تكلفة كل ثانية من الصوت 6.25 رموز مميزة.
  • القنوات الصوتية: تتم معالجة البيانات الصوتية كقناة صوتية واحدة. إذا كنت تستخدم صوتًا متعدد القنوات، مثل القناتَين اليمنى واليسرى، ننصحك بتقليل البيانات إلى قناة واحدة عن طريق إزالة القنوات أو دمج بيانات الصوت في قناة واحدة.
  • مدة المقطع: يُنصح باستخدام مقاطع صوتية تصل مدتها إلى 30 ثانية، ولكن يمكنك معالجة مقاطع أطول، تصل إلى حجم قدرة استيعاب النموذج، مع طرح الرموز المميزة للناتج التي تطلبها.
  • معدّل البيانات في الملف الصوتي: يبلغ معدّل معالجة الصوت في أداة تقسيم الكلمات 16 كيلوهرتز مع لقطات مدتها 32 ملي ثانية.
  • عمق البت: يستخدم برنامج ترميز الصوت بيانات عائمة ذات 32 بت لكل إطار في النطاق [-1, 1] لكل عيّنة صوتية.

إذا كانت بيانات الصوت التي تخطّط لمعالجتها تختلف بشكل كبير عن معالجة الإدخال، خاصةً من حيث القنوات ومعدّل أخذ العينات وعمق البت، ننصحك بإعادة أخذ العينات أو تقليل بيانات الصوت لتتطابق مع دقة البيانات التي يتعامل معها النموذج.

ترميز الصوت

عند ترميز بيانات الصوت باستخدام تنفيذ الرمز البرمجي الخاص بك لاستخدامه مع Gemma 3n، عليك اتّباع عملية التحويل المقترَحة. إذا كنت تعمل مع ملفات صوتية مرمّزة بتنسيق معيّن، مثل بيانات مرمّزة بتنسيق MP3 أو WAV، عليك أولاً فك ترميزها إلى عيّنات باستخدام مكتبة مثل ffmpeg. بعد فك ترميز البيانات، حوِّل الصوت إلى أشكال موجية أحادية القناة بتردد 16 كيلو هرتز من النوع float32 ضمن النطاق [-1, 1]. على سبيل المثال، إذا كنت تعمل على ملفات WAV بتنسيق PCM مع أعداد صحيحة ذات 16 بت وموقّعة بنظام ستيريو وبمعدّل 44.1 كيلوهرتز، اتّبِع الخطوات التالية:

  • إعادة أخذ عيّنات من البيانات الصوتية بمعدّل 16 كيلوهرتز
  • دمج القنوات الصوتية من الاستريو إلى أحادي الصوت عن طريق حساب متوسط القناتين
  • تحويل من 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، قسم الصوت.