پیادهسازی صوت جلسات، زیرنویس ویدیوهای آموزشی، تحلیل تماسهای مرکز تماس و جستجو در آرشیو صوتی؛ همه با تبدیل گفتار به متن شروع میشوند. Whisper، مدل متنباز OpenAI، از فارسی پشتیبانی میکند و روی سرور خودتان اجرا میشود؛ بدون ارسال فایلهای صوتی محرمانه به سرویس خارجی. در این راهنما تبدیل گفتار فارسی به متن با Whisper را از انتخاب مدل تا اجرای سریع با faster-whisper و ساخت یک سرویس پردازش توضیح میدهیم.
فهرست مطالب
Whisper چیست؟
Whisper یک مدل تشخیص گفتار چندزبانه است که OpenAI وزنهای آن را منتشر کرده است. روی صدها هزار ساعت صوت آموزش دیده، در برابر نویز و لهجه نسبتاً مقاوم است، زمانبندی هر بخش را برمیگرداند و میتواند گفتار را مستقیم به انگلیسی ترجمه کند. پیادهسازی faster-whisper همان مدلها را با موتور CTranslate2 چند برابر سریعتر و با حافظه کمتر اجرا میکند و برای استفاده روی سرور گزینه پیشنهادی است.
اندازه مدلها و منابع لازم
| مدل | دقت فارسی | سرعت | کاربرد |
|---|---|---|---|
| small | متوسط | بسیار سریع | تست و صوتهای تمیز؛ روی CPU هم قابل استفاده |
| medium | خوب | سریع | تعادل دقت و منابع |
| large-v3 | بهترین | کندتر | بیشترین دقت؛ پیشنهادی برای فارسی |
| large-v3-turbo | نزدیک به large | بسیار سریعتر از large | حجم بالای فایلها |
برای فارسی، مدلهای large تفاوت محسوسی با مدلهای کوچک دارند. با faster-whisper و دقت float16، مدل large روی GPU با ۸ گیگابایت VRAM بهخوبی اجرا میشود و یک ساعت صوت را روی GPU مناسب در چند دقیقه پیاده میکند. روی CPU هم اجرا میشود، اما برای مدل large بسیار کندتر است. مقایسه پردازش GPU و API در سرور GPU یا API.
نصب faster-whisper
پس از نصب درایور NVIDIA (بررسی با nvidia-smi):
sudo apt install -y python3-venv ffmpeg
python3 -m venv ~/whisper-env
source ~/whisper-env/bin/activate
pip install faster-whisper
faster-whisper به کتابخانههای cuBLAS و cuDNN سازگار با نسخه CTranslate2 نیاز دارد؛ اگر خطای یافت نشدن این کتابخانهها را دیدید، نسخههای مناسب را طبق مستندات پروژه نصب کنید. ffmpeg برای خواندن فرمتهای مختلف صوت و ویدیو لازم است.
اولین پیادهسازی فارسی
from faster_whisper import WhisperModel
model = WhisperModel("large-v3", device="cuda", compute_type="float16")
segments, info = model.transcribe(
"meeting.mp3",
language="fa",
vad_filter=True,
beam_size=5,
)
with open("meeting.txt", "w", encoding="utf-8") as f:
for s in segments:
f.write(f"[{s.start:.1f} - {s.end:.1f}] {s.text.strip()}\n")
language="fa": زبان را صریح تعیین کنید؛ تشخیص خودکار در فایلهایی با کلمات انگلیسی ممکن است اشتباه کند.vad_filter=True: بخشهای سکوت حذف میشوند؛ هم سرعت بیشتر میشود و هم «توهم» مدل در سکوتها کم میشود.- بار اول مدل از اینترنت دانلود میشود (چند گیگابایت).
بهبود دقت برای فارسی
- کیفیت صوت: مهمترین عامل است. میکروفون نزدیک و نویز کم، بیش از تغییر مدل اثر دارد.
- Initial Prompt: با پارامتر
initial_promptاسامی خاص، اصطلاحات تخصصی و نام محصولات را به مدل معرفی کنید تا درستتر نوشته شوند. - پسپردازش: یکسانسازی حروف و نیمفاصله، اصلاح اعداد و افزودن نقطهگذاری با یک مدل زبانی.
- مدلهای فاینتیونشده فارسی: نسخههایی از Whisper که روی داده فارسی فاینتیون شدهاند در Hugging Face منتشر شدهاند؛ روی نمونههای خودتان مقایسه کنید. نکات فاینتیون در فاینتیون با QLoRA.
- تشخیص گوینده: Whisper گویندهها را جدا نمیکند؛ برای جلسات، آن را با ابزار Diarization مثل pyannote ترکیب کنید.
ساخت زیرنویس
def ts(t):
h, m = int(t // 3600), int(t % 3600 // 60)
s, ms = int(t % 60), int((t - int(t)) * 1000)
return f"{h:02}:{m:02}:{s:02},{ms:03}"
segments, _ = model.transcribe("lesson.mp4", language="fa", vad_filter=True)
with open("lesson.srt", "w", encoding="utf-8") as f:
for i, s in enumerate(segments, 1):
f.write(f"{i}\n{ts(s.start)} --> {ts(s.end)}\n{s.text.strip()}\n\n")
فایل SRT در پخشکنندهها و پلتفرمهای ویدیو قابل استفاده است. پیش از انتشار، زیرنویس را بازبینی کنید.
ساخت سرویس پردازش
برای استفاده تیمی، Whisper را پشت یک API یا صف کار قرار دهید:
- یک API ساده (مثلاً با FastAPI) که فایل را دریافت، در صف قرار میدهد و شناسه کار را برمیگرداند.
- یک Worker که مدل را یک بار در حافظه GPU بارگذاری و فایلها را به ترتیب پردازش میکند.
- نگهداری نتیجه و حذف خودکار فایلهای صوتی پس از پردازش برای حفظ حریم خصوصی.
- اتصال به n8n برای گردشکارهایی مثل «فایل جلسه آپلود شد ← پیادهسازی ← خلاصه با LLM ← ارسال به تیم»؛ نمونه گردشکار در ایجنت هوش مصنوعی با n8n و Ollama.
API را فقط در شبکه داخلی یا با احراز هویت در دسترس بگذارید.
کاربردهای سازمانی
- صورتجلسه خودکار: پیادهسازی و سپس خلاصه و فهرست اقدامات با یک مدل زبانی.
- تحلیل تماسهای مرکز تماس: کیفیت پاسخگویی، موضوعات پرتکرار و شکایات.
- زیرنویس و نسخه متنی محتوای آموزشی برای دسترسپذیری و سئو.
- جستجو در آرشیو صوتی با ترکیب متن پیادهشده و RAG.
سوالات متداول
دقت Whisper برای فارسی چقدر است؟
برای صوت تمیز با مدل large، دقت قابل قبولی برای بیشتر کاربردها دارد؛ اما اسامی خاص، اصطلاحات تخصصی، لهجههای قوی و صوت پرنویز خطا را بالا میبرند. همیشه روی نمونههای واقعی خودتان ارزیابی کنید.
آیا Whisper روی CPU اجرا میشود؟
بله؛ با faster-whisper و کوانتیزاسیون int8، مدلهای کوچک و متوسط روی CPU قابل استفادهاند. برای حجم بالا و مدل large، GPU لازم است.
پردازش زنده (Real-time) ممکن است؟
Whisper برای فایل طراحی شده، اما با تقسیم صوت به بخشهای کوتاه و GPU سریع، پیادهسازی نزدیک به زنده ممکن است. تأخیر چند ثانیهای را در نظر بگیرید.
استفاده تجاری از Whisper مجاز است؟
وزنهای Whisper با مجوز MIT منتشر شدهاند که استفاده تجاری را مجاز میداند. مجوز مدلهای فاینتیونشده دیگران را جداگانه بررسی کنید.
پردازش صوت روی سرور داخلی
برای پیادهسازی حجم بالای صوت بدون ارسال فایلها به خارج، سرورهای GPU تراست هاست را ببینید.