Whistle: تشخیص گفتار ۱۷ مگابایتی روی دستگاه
خلاصهٔ کاملتر
تیم Cactus مدل Whistle رو منتشر کرده که یه مدل تشخیص گفتار برای گوشی، گجتهای پوشیدنی، ربات، خونهی هوشمند، ماشین و میکروکنترلره. کل مدل یه فایل ۱۶.۹ مگابایتیه که بدون هیچ وابستگی روی CPU اجرا میشه و توی همون موتور C++ مدل قبلیشون یعنی Needle بارگذاری میشه. Whistle سه کار انجام میده: تبدیل گفتار به متن تا ۳۰ ثانیه در یک مرحله، دادن زمان شروع و پایان هر کلمه، و speech embedding (یعنی یه بردار عددی برای هر ۸۰ میلیثانیه از صدا، بدون ساختن متن).
زبانهای پشتیبانیشده انگلیسی، آلمانی، فرانسوی، اسپانیایی، ایتالیایی، هلندی و لهستانی هستن و اگه زبان رو مشخص نکنی خودش تشخیصش میده. ورودی صدای ۱۶ کیلوهرتز تککانالهست. صدا اول به فریمهای mel تبدیل میشه و بعد یه لایهی کانولوشنی تعداد فریمها رو از ۳۰۰۰ به ۳۷۵ میرسونه، یعنی یه فریم برای هر ۸۰ میلیثانیه.
معماریش یه encoder و یه decoder هشتلایهست. نکتهی اصلی اینه که decoder از طریق یه cross attention با دروازه (یعنی هر لایهی decoder با یه وزن یادگرفتهشده به خروجی encoder نگاه میکنه) به صدا وصل میشه. این محاسبه فقط یه بار برای هر کلیپ انجام میشه و نگه داشته میشه. یعنی پنج beam موقع جستجو فقط پنج کش کوچیک متن هزینه داره، نه پنج بار پردازش کل صدا.
چندتا قابلیت کاربردی هم داره. keyword biasing اجازه میده اسمهای خاص مثل اسم آدمها رو بهش بدی تا احتمال تشخیصشون بالا بره. decoder بهصورت ladder آموزش دیده، یعنی هر عمق از ۲ لایه به بالا یه مدل جداست و میشه موقع بارگذاری با --audio-depth عمق کمتر رو برای سرعت بیشتر انتخاب کرد. اگه کلیپ ساکت باشه، موتور اصلاً وارد جستجو نمیشه و متن خالی برمیگردونه.
به گفتهی Cactus، Whistle روی LibriSpeech، SPGISpeech، Earnings-22 و میانگین FLEURS از Whisper base جلوتره، ولی Whisper base که ۱۴۵.۳ مگابایته روی TED-LIUM، AMI و MLS بهتره. زمان رسیدن به اولین توکن هم به طول کلیپ بستگی داره: ۵.۹ میلیثانیه برای ۵ ثانیه و ۳۶.۳ میلیثانیه برای ۳۰ ثانیه. Whisper همهی ورودیها رو تا ۳۰ ثانیه پر میکنه و برای همین زمانش ثابته. تیم میگه هیچ صدای تستی توی دادهی آموزش نبوده.
موتور برای هفده پلتفرم از macOS و Linux تا Android، iOS، watchOS، RISC-V، مرورگر و WASI آمادهست. کل API گفتاری C فقط سه تابع needle_load، needle_transcribe و needle_embed هست. یه قابلیت جالب هم اینه که needle_complete میتونه مستقیم صدا بگیره، متنش رو دربیاره و بر اساسش tool call برگردونه. وزنها روی Hugging Face و سورس روی GitHub منتشر شدن.
نکات کلیدی:
- حجم کل مدل ۱۶.۹ مگابایته، در برابر ۱۴۵.۳ مگابایت Whisper base
- هفت زبان: انگلیسی، آلمانی، فرانسوی، اسپانیایی، ایتالیایی، هلندی و لهستانی
- تا ۳۰ ثانیه صدا در یک مرحله، با حداکثر ۳۲۰ توکن خروجی
- زمان اولین توکن ۵.۹ میلیثانیه برای کلیپ ۵ ثانیهای و ۳۶.۳ میلیثانیه برای ۳۰ ثانیه
- روی LibriSpeech و FLEURS از Whisper base بهتره ولی روی TED-LIUM و AMI عقبتره
- موتور برای ۱۷ پلتفرم از جمله iOS، Android، RISC-V و مرورگر آمادهست




