Voice/Speech ModelsopenaiSpeech-to-Text
معرفی و مستندات مدل هوش مصنوعی whisper-base
مستندات مربوط به مدل whisper-base از OpenAI، ارائه شده توسط ای آی کار (AI-KAR)
معرفی و بررسی فنی
⚡ وضعیت پشتیبانی از زبان فارسی
این مدل از زبان فارسی به صورت متوسط پشتیبانی میکند. دقت تشخیص گفتار فارسی در این مدل به اندازه زبان انگلیسی نیست و ممکن است نیاز به ویرایش متن رونویسی شده باشد.
مدل whisper-base یک مدل تشخیص گفتار است که توسط OpenAI توسعه داده شده است. این مدل با استفاده از 680,000 ساعت داده صوتی و متن آموزش داده شده است. این دادهها شامل 65% صوت و متن انگلیسی، 18% صوت غیر انگلیسی با متن انگلیسی و 17% صوت غیر انگلیسی با متن غیر انگلیسی است و در مجموع 98 زبان را پوشش میدهد. هدف اصلی از توسعه این مدل، تحقیقات در زمینه هوش مصنوعی، با تمرکز بر استحکام مدل، تعمیمپذیری و کاهش خطاها بوده است. این مدل به ویژه در تشخیص گفتار انگلیسی عملکرد خوبی دارد. با این حال، به دلیل احتمال وجود خطاها و ملاحظات اخلاقی، استفاده از مدلهای Whisper برای رونویسی صداهای ضبط شده بدون رضایت یا در زمینههای تصمیمگیری پرخطر توصیه نمیشود.
مدل whisper-base از ای آی کار (AI-KAR) برای تبدیل گفتار به متن (STT) استفاده میشود. این مدل به صورت per-second billing محاسبه میشود، به این معنی که هزینه رونویسی صدا بر اساس تعداد ثانیههای فایل صوتی ورودی محاسبه میشود، نه زمان پردازش. برای استفاده از این مدل، ابتدا باید یک API key از ای ای کار دریافت کنید. سپس میتوانید از طریق API به مدل دسترسی پیدا کنید و فایلهای صوتی خود را برای تبدیل به متن ارسال کنید.
فرآیند کار با این مدل در ای ای کار شامل دو مرحله است: ابتدا یک درخواست POST به آدرس `/v1/stt/create` ارسال میکنید تا یک task پردازش گفتار به متن ایجاد شود. این درخواست شامل پارامترهایی مانند مدل (#g1_whisper-base) و URL فایل صوتی است. پاسخ این درخواست شامل یک `generation_id` است. سپس، با استفاده از این `generation_id`، یک درخواست GET به آدرس `/v1/stt/{generation_id}` ارسال میکنید تا متن تولید شده را از سرور دریافت کنید. این رویکرد دو مرحلهای به جلوگیری از خطاهای ناشی از timeout کمک میکند.
این مدل قابلیت تشخیص زبان را نیز دارد و میتواند زبان اصلی فایل صوتی را تشخیص دهد. همچنین، امکان تشخیص موجودیتها، موضوعات و تغییرات گوینده (diarization) نیز وجود دارد. با فعال کردن ویژگی diarization، هر کلمه در متن رونویسی شده به یک شماره گوینده اختصاص داده میشود که از 0 شروع میشود. این ویژگی برای تشخیص و تفکیک صحبتهای افراد مختلف در یک فایل صوتی مفید است.
علاوه بر این، مدل whisper-base میتواند کلمات پرکننده (filler words) مانند "uh" و "um" را نیز رونویسی کند. همچنین، امکان تشخیص intent گوینده، استخراج کلمات کلیدی، تبدیل اعداد به فرمت عددی و افزودن نشانهگذاری و حروف بزرگ به متن رونویسی شده وجود دارد. این مدل همچنین میتواند محتوا را خلاصه کند و موضوعات مختلف را در متن تشخیص دهد. با استفاده از پارامتر `profanity_filter`، میتوانید فیلتر کلمات رکیک را فعال کنید تا کلمات نامناسب از متن حذف شوند یا با کلمات مناسبتر جایگزین شوند.
مدل whisper-base از ای آی کار (AI-KAR) برای تبدیل گفتار به متن (STT) استفاده میشود. این مدل به صورت per-second billing محاسبه میشود، به این معنی که هزینه رونویسی صدا بر اساس تعداد ثانیههای فایل صوتی ورودی محاسبه میشود، نه زمان پردازش. برای استفاده از این مدل، ابتدا باید یک API key از ای ای کار دریافت کنید. سپس میتوانید از طریق API به مدل دسترسی پیدا کنید و فایلهای صوتی خود را برای تبدیل به متن ارسال کنید.
فرآیند کار با این مدل در ای ای کار شامل دو مرحله است: ابتدا یک درخواست POST به آدرس `/v1/stt/create` ارسال میکنید تا یک task پردازش گفتار به متن ایجاد شود. این درخواست شامل پارامترهایی مانند مدل (#g1_whisper-base) و URL فایل صوتی است. پاسخ این درخواست شامل یک `generation_id` است. سپس، با استفاده از این `generation_id`، یک درخواست GET به آدرس `/v1/stt/{generation_id}` ارسال میکنید تا متن تولید شده را از سرور دریافت کنید. این رویکرد دو مرحلهای به جلوگیری از خطاهای ناشی از timeout کمک میکند.
این مدل قابلیت تشخیص زبان را نیز دارد و میتواند زبان اصلی فایل صوتی را تشخیص دهد. همچنین، امکان تشخیص موجودیتها، موضوعات و تغییرات گوینده (diarization) نیز وجود دارد. با فعال کردن ویژگی diarization، هر کلمه در متن رونویسی شده به یک شماره گوینده اختصاص داده میشود که از 0 شروع میشود. این ویژگی برای تشخیص و تفکیک صحبتهای افراد مختلف در یک فایل صوتی مفید است.
علاوه بر این، مدل whisper-base میتواند کلمات پرکننده (filler words) مانند "uh" و "um" را نیز رونویسی کند. همچنین، امکان تشخیص intent گوینده، استخراج کلمات کلیدی، تبدیل اعداد به فرمت عددی و افزودن نشانهگذاری و حروف بزرگ به متن رونویسی شده وجود دارد. این مدل همچنین میتواند محتوا را خلاصه کند و موضوعات مختلف را در متن تشخیص دهد. با استفاده از پارامتر `profanity_filter`، میتوانید فیلتر کلمات رکیک را فعال کنید تا کلمات نامناسب از متن حذف شوند یا با کلمات مناسبتر جایگزین شوند.
مشخصات فنی (API References)
| پارامتر | نوع | توضیحات و مقادیر |
|---|---|---|
model | stringRequired | مدل مورد استفاده برای تبدیل گفتار به متن. مقدار پیشفرض: #g1_whisper-base مقادیر مجاز (کلیک برای کپی): |
custom_intent | string | string[] | یک intent سفارشی که میخواهید مدل در صوت ورودی شما تشخیص دهد (در صورت وجود). حداکثر 100 مورد. |
custom_topic | string | string[] | یک موضوع سفارشی که میخواهید مدل در صوت ورودی شما تشخیص دهد (در صورت وجود). حداکثر 100 مورد. |
custom_intent_mode | string | نحوه تفسیر رشتههای ارسالی به پارامتر `custom_intent`. وقتی `strict` باشد، مدل فقط intentهایی را برمیگرداند که با استفاده از پارامتر `custom_intent` ارسال شدهاند. وقتی `extended` باشد، مدل علاوه بر intentهای ارسالی، intentهای تشخیص داده شده خود را نیز برمیگرداند. مقادیر مجاز (کلیک برای کپی): |
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 | جفتهای کلید-مقدار دلخواه که برای استفاده در پردازش downstream به پاسخ API پیوست میشوند. |
filler_words | boolean | کلمات پرکننده میتوانند به رونویسی وقفهها در صوت شما مانند "uh" و "um" کمک کنند. |
intents | boolean | تشخیص intent گوینده در سراسر متن رونویسی شده یا متن. |
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-base",
"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": "h66460ba-0562-1dd9-b440-a56d947e72a3"
}