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 میتواند در زمینههای مختلفی مورد استفاده قرار گیرد، از جمله رونویسی جلسات، تولید زیرنویس برای ویدیوها، و تحلیل دادههای صوتی. با این حال، باید توجه داشت که این مدل ممکن است در برخی موارد دقت کافی نداشته باشد، به خصوص در زبانهایی غیر از انگلیسی. بنابراین، استفاده از آن در زمینههای حساس توصیه نمیشود.
این مدل با استفاده از 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"
}