Voice/Speech ModelsopenaiSpeech-to-Text

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

مستندات مربوط به مدل whisper-small از OpenAI، ارائه شده توسط ای آی کار (AI-KAR)

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

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

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

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

این مدل با استفاده از 680,000 ساعت داده صوتی و متن متناظر از اینترنت آموزش داده شده است. 65% این داده‌ها شامل صوت و متن انگلیسی، 18% صوت غیرانگلیسی با متن انگلیسی و 17% صوت غیرانگلیسی با متن غیرانگلیسی است. این تنوع داده‌ها به مدل کمک می‌کند تا در شرایط مختلف و با لهجه‌های گوناگون عملکرد خوبی داشته باشد.

مدل whisper-small از سیستم پرداخت به ازای هر ثانیه استفاده می‌کند. هزینه رونویسی صوتی بر اساس تعداد ثانیه‌های فایل صوتی ورودی محاسبه می‌شود، نه زمان پردازش. این امر به کاربران این امکان را می‌دهد تا با دقت بیشتری هزینه‌های خود را مدیریت کنند.

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

مدل whisper-small می‌تواند در زمینه‌های مختلفی مورد استفاده قرار گیرد، از جمله رونویسی جلسات، تولید زیرنویس برای ویدیوها، و تحلیل داده‌های صوتی. با این حال، باید توجه داشت که این مدل ممکن است در برخی موارد دقت کافی نداشته باشد، به خصوص در زبان‌هایی غیر از انگلیسی. بنابراین، استفاده از آن در زمینه‌های حساس توصیه نمی‌شود.

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

پارامترنوعتوضیحات و مقادیر
model
stringRequired
مدلی که برای پردازش استفاده می‌شود. مقدار معتبر: #g1_whisper-small
مقادیر مجاز (کلیک برای کپی):
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 که به زبان اصلی گفتاری اشاره می‌کند. بسته به مدل و endpoint API انتخابی، فقط زبان‌های خاصی در دسترس هستند.
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-small",
 "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":
 print("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": "88a282a7-6f90-4532-a2a2-882c9d20d08e"
}