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`، می‌توانید فیلتر کلمات رکیک را فعال کنید تا کلمات نامناسب از متن حذف شوند یا با کلمات مناسب‌تر جایگزین شوند.

مشخصات فنی (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"
}