Voice/Speech ModelsopenaiSpeech-to-Text

معرفی و مستندات مدل هوش مصنوعی whisper-medium

مستندات مربوط به مدل whisper-medium از OpenAI برای استفاده در ای آی کار (AI-KAR)

معرفی و بررسی فنی

⚡ وضعیت پشتیبانی از زبان فارسی

این مدل از زبان فارسی به صورت متوسط پشتیبانی می‌کند و ممکن است در تشخیص لهجه‌ها و اصطلاحات خاص دقت کمتری داشته باشد.

مدل Whisper-medium یک مدل تشخیص گفتار است که توسط OpenAI توسعه داده شده است. این مدل بر پایه یک شبکه عصبی عمیق آموزش داده شده است و قادر است گفتار را به متن با دقت بالا تبدیل کند. مدل Whisper-medium با استفاده از 680,000 ساعت داده صوتی و متن آموزش داده شده است که شامل 65% داده‌های انگلیسی، 18% داده‌های غیرانگلیسی با متن انگلیسی و 17% داده‌های غیرانگلیسی با متن غیرانگلیسی است. این مدل از 98 زبان مختلف پشتیبانی می‌کند.

مدل Whisper-medium برای تحقیقات هوش مصنوعی طراحی شده است و بر روی استحکام، تعمیم‌پذیری و کاهش سوگیری تمرکز دارد. این مدل به ویژه در تشخیص گفتار انگلیسی عملکرد خوبی دارد. با این حال، به دلیل احتمال وجود خطاها و ملاحظات اخلاقی، استفاده از مدل‌های Whisper برای رونویسی ضبط‌های غیرمجاز یا در تصمیم‌گیری‌های پرخطر توصیه نمی‌شود.

این مدل می‌تواند برای طیف گسترده‌ای از کاربردها مورد استفاده قرار گیرد، از جمله:
  • رونویسی خودکار پادکست‌ها و ویدیوها
  • ایجاد زیرنویس برای فیلم‌ها و برنامه‌های تلویزیونی
  • تبدیل گفتار به متن در برنامه‌های کاربردی موبایل و وب
  • تحلیل احساسات و تشخیص موضوعات در مکالمات
  • بهبود دسترسی برای افراد کم‌شنوا یا ناشنوا

مدل Whisper-medium از طریق API قابل دسترسی است و هزینه استفاده از آن بر اساس تعداد ثانیه‌های فایل صوتی ورودی محاسبه می‌شود، نه زمان پردازش. برای استفاده از این مدل، ابتدا باید یک کلید API از AI-KAR دریافت کنید. سپس می‌توانید با استفاده از API، فایل صوتی خود را ارسال کرده و متن رونویسی شده را دریافت کنید.

برای جلوگیری از مشکلات مربوط به timeout، فرآیند تبدیل گفتار به متن به دو مرحله تقسیم شده است: ابتدا یک درخواست POST به آدرس `/stt/create` ارسال می‌شود که یک شناسه تولید (generation_id) برمی‌گرداند. سپس با استفاده از این شناسه، یک درخواست GET به آدرس `/stt/{generation_id}` ارسال می‌شود تا متن رونویسی شده دریافت شود. این روش به اطمینان از تکمیل فرآیند رونویسی کمک می‌کند.

مدل Whisper-medium یک ابزار قدرتمند برای تبدیل گفتار به متن است که می‌تواند در بسیاری از زمینه‌ها مفید باشد. با این حال، مهم است که از محدودیت‌ها و ملاحظات اخلاقی آن آگاه باشید و از آن به درستی استفاده کنید.

مشخصات فنی (API References)

پارامترنوعتوضیحات و مقادیر
model
stringRequired
مدل مورد استفاده برای تبدیل گفتار به متن. مقدار پیش‌فرض و پیشنهادی: #g1_whisper-medium
مقادیر مجاز (کلیک برای کپی):
custom_intent
string | string[]
یک یا چند عبارت سفارشی که می‌خواهید مدل در صوت ورودی تشخیص دهد. حداکثر 100 عبارت.
custom_topic
string | string[]
یک یا چند موضوع سفارشی که می‌خواهید مدل در صوت ورودی تشخیص دهد. حداکثر 100 موضوع.
custom_intent_mode
string
نحوه تفسیر عبارات ارسالی به پارامتر custom_intent. strict: فقط عبارات ارسالی در custom_intent برگردانده می‌شوند. extended: علاوه بر عبارات ارسالی، عبارات تشخیص داده شده توسط مدل نیز برگردانده می‌شوند.
مقادیر مجاز (کلیک برای کپی):
custom_topic_mode
string
نحوه تفسیر موضوعات ارسالی به پارامتر custom_topic. strict: فقط موضوعات ارسالی در custom_topic برگردانده می‌شوند. extended: علاوه بر موضوعات ارسالی، موضوعات تشخیص داده شده توسط مدل نیز برگردانده می‌شوند.
مقادیر مجاز (کلیک برای کپی):
detect_language
boolean
فعال کردن تشخیص زبان غالب در صوت ارسالی.
detect_entities
boolean
فعال کردن تشخیص موجودیت‌ها. با فعال شدن این گزینه، قابلیت نقطه‌گذاری نیز به طور پیش‌فرض فعال می‌شود.
detect_topics
boolean
تشخیص مهم‌ترین و مرتبط‌ترین موضوعات در صوت ارسالی.
diarize
boolean
تشخیص تغییرات گوینده. به هر کلمه در متن رونویسی شده یک شماره گوینده اختصاص داده می‌شود که از 0 شروع می‌شود.
dictation
boolean
شناسایی و استخراج موجودیت‌های کلیدی از محتوای صوت ارسالی.
diarize_version
string
نسخه diarize
extra
string
جفت‌های کلید-مقدار دلخواه که به پاسخ API پیوست می‌شوند و می‌توانند در پردازش‌های بعدی مورد استفاده قرار گیرند.
filler_words
boolean
تشخیص کلمات پرکننده مانند "uh" و "um" در صوت.
intents
boolean
تشخیص هدف گوینده در متن رونویسی شده.
keywords
string
کلمات کلیدی می‌توانند اصطلاحات تخصصی و نام‌های تجاری را تقویت یا سرکوب کنند.
language
string
تگ زبان BCP-47 که به زبان اصلی گفتاری اشاره می‌کند. بسته به مدل و API endpoint انتخابی، فقط زبان‌های خاصی در دسترس هستند.
measurements
boolean
تبدیل واحدهای اندازه‌گیری گفتاری به اختصارات مربوطه.
multi_channel
boolean
رونویسی مستقل هر کانال صوتی.
numerals
boolean
تبدیل اعداد از فرمت نوشتاری به فرمت عددی.
paragraphs
boolean
تقسیم صوت به پاراگراف‌ها برای بهبود خوانایی متن رونویسی شده.
profanity_filter
boolean
فیلتر کلمات رکیک. کلمات رکیک شناسایی شده به نزدیک‌ترین کلمه غیر رکیک تبدیل می‌شوند یا از متن رونویسی شده حذف می‌شوند.
punctuate
boolean
اضافه کردن نقطه‌گذاری و حروف بزرگ به متن رونویسی شده.
search
string
جستجو برای اصطلاحات یا عبارات در صوت ارسالی.
sentiment
boolean
تشخیص احساسات در متن رونویسی شده.
smart_format
boolean
اعمال قالب‌بندی به خروجی متن رونویسی شده. با تنظیم این گزینه به true، قالب‌بندی اضافی برای بهبود خوانایی اعمال می‌شود.
summarize
string
خلاصه‌سازی محتوا. برای Listen API، از گزینه string version پشتیبانی می‌کند. برای Read API، فقط مقدار boolean را می‌پذیرد.
tag
string[]
برچسب‌گذاری درخواست‌ها برای شناسایی در گزارش‌گیری استفاده.
topics
boolean
تشخیص موضوعات در متن رونویسی شده.
utterances
boolean
تقسیم گفتار به واحدهای معنایی معنادار.
utt_split
number
مدت زمان (به ثانیه) برای تشخیص مکث بین کلمات در صوت ارسالی.

نمونه کدهای درخواست

نکته مهم برای توسعه‌دهندگان:

برای احراز هویت، حتما کلید API خود را جایگزین YOUR_API_KEY کنید. هدر Authorization الزامی است.

import time
import requests
base_url = "https://api.ai-kar.com/v1"
# Insert your AI-KAR API Key instead of <YOUR_AI-KARAPI_KEY>:
api_key = "<YOUR_AI-KARAPI_KEY>"
# Creating and sending a speech-to-text conversion task to the server
def create_stt():
    url = f"{base_url}/stt/create"
    headers = {
        "Authorization": f"Bearer {api_key}",
    }
    data = {
        "model": "#g1_whisper-medium",
        "url": "https://audio-samples.github.io/samples/mp3/blizzard_primed/sample-0.mp3"
    }
    response = requests.post(url, json=data, headers=headers)
    if response.status_code >= 400:
        print(f"Error: {response.status_code} - {response.text}")
    else:
        response_data = response.json()
        print(response_data)
        return response_data
# Requesting the result of the task from the server using the generation_id
def get_stt(gen_id):
    url = f"{base_url}/stt/{gen_id}"
    headers = {
        "Authorization": f"Bearer {api_key}",
    }
    response = requests.get(url, headers=headers)
    return response.json()
# First, start the generation, then repeatedly request the result from the server every 10 seconds.
def main():
    stt_response = create_stt()
    gen_id = stt_response.get("generation_id")
    if gen_id:
        start_time = time.time()
        timeout = 600
        while time.time() - start_time < timeout:
            response_data = get_stt(gen_id)
            if response_data is None:
                print("Error: No response from API")
                break
            status = response_data.get("status")
            if status == "waiting" or status == "active":
                ("Still waiting... Checking again in 10 seconds.")
                time.sleep(10)
            else:
                print("Processing complete:/n", response_data["result"]['results']["channels"][0]["alternatives"][0]["transcript"])
                return response_data
        print("Timeout reached. Stopping.")
        return None
if __name__ == "__main__":
    main()

نمونه پاسخ موفق (JSON)

RESPONSE (200 OK)
{
  "generation_id": "e3d46bba-7562-44a9-b440-504d940342a3"
}