سوت: گفتار به متن در 16.9 مگابایت
آدرس مقاله: https://cactuscompute.com/blog/whistle آدرس نظرات: https://news.ycombinator.com/item?id=50008427 امتیاز: 304 # نظرات: 73
امروز Whistle را منتشر میکنیم، یک مدل تشخیص گفتار برای موبایل، پوشیدنیها، روباتها، خانههای هوشمند، خودرو و میکروکنترلرها. این یک فایل 16.9 مگابایتی است، بدون وابستگی بر روی CPU اجرا میشود و در همان موتور C++ که Needle است، از همان ظرف و همان مقدار کمی بارگیری میشود.
Whistle سه کار را انجام می دهد که همه آنها روی دستگاه هستند:
قسمت جلویی صدای مونو 16 کیلوهرتز در یک پنجره 25 میلیثانیه و یک پرش 10 میلیثانیه به 80 محفظه log-mel، باند محدود به 250-3500 هرتز و در هر کانال عادی میشود. سی ثانیه 3000 فریم است. یک ساقه کانولوشن از 128 کانال و هسته 9 نیمه که سه بار میشمارند و 375 فریم را در یک فریم در 80 میلیثانیه باقی میگذارند. هر مرحله بعد از این با آن نرخ اجرا میشود و embed یک ردیف در هر فریم را برمیگرداند.
رمزگذار. هشت بلوک توجه ساده: چهار خط باقیمانده mHC و یک Monarch Hadamard MLP به جای شبکه پیشخور، همان بلوکهایی که Needle از آن استفاده میکند. توجه سببی نیست. یک فریم در 3 ثانیه به یک فریم در 12 ثانیه توجه می کند.
رمزگشا. هشت بلوک توجه ساده نردبانی در عرض 512، 8 هد پرس و جو به هدهای 2 کیلوولت، پرس و جوها و کلیدهای 48 بعدی، مقادیر 64 بعدی، یک پیچیدگی علی 3 ضربه ای در Q، K و V، و جستجوهای انگرام در لایه های 3 و 7 روی شکاف های 18، 4. این لیست بلوک های Needle با تعداد لایه های متفاوت است.
بخش ویژه گفتار یک اضافه در هر لایه است. هر لایه رمزگشا رمزگذار را از طریق یک توجه متقاطع دروازهای میخواند، x ← x + σ(g) · softmax(q̂ K̂ᵀ/√d) V، با یک گیت در هر لایه و K و V گرفته شده از کلیپ. زمانی که کلیپ می رسد، این پیش بینی ها یک بار اجرا می شوند، 375 فریم در 8 لایه، و سپس برای کل رمزگشایی نگه داشته می شوند. بنابراین، پنج پرتو هزینه پنج حافظه پنهان رونوشت کوتاه دارند، نه پنج عبور از صدا.
رمزگشایی پنج تیر با احتمال ورود به سیستم نرمال شده با طول به ثمر رسید. بایاس کردن کلیدواژه یک خودکار Aho-Corasick را روی عباراتی که در کنار تیرها عبور میدهید، میگذراند و با پیشروی خودکار، احتمال ثبت آنها را افزایش میدهد. رونوشت در 320 توکن محدود شده است. دایره لغات 8192 قطعه متن به اضافه هفت نشانه زبان، یکی در هر زبان است، بنابراین زبان شناسایی شده به جای بازگرداندن به خارج از باند، به عنوان یک نشانه منتشر می شود.
نردبان روی رسیور است. هر عمق از 2 لایه به بالا به عنوان یک مدل برای خودش آموزش داده شد و ---audio-depth یکی را در زمان بارگذاری انتخاب می کند. رمزگذار هرگز تکه تکه نمی شود: هر هشت بلوک در هر عمق اجرا می شوند.
سکوت موتور محدوده بلندی کلیپ را قبل از شروع به کار رسیور اندازه گیری می کند. در زیر آستانه، یک رونوشت خالی و یک زبان خالی برمی گرداند و هرگز وارد جستجوی پرتو نمی شود.
Whistle در LibriSpeech test-clean و test-other، در SPGISpeech، در Earnings-22 و میانگین FLEURS جلوتر است. Whisper base در TED-LIUM، AMI و میانگین MLS با 145.3 مگابایت در مقابل 16.9 جلوتر است.
هر مدل در زمان اجرای رسمی خود در پیشفرض خود اجرا میشد: موتور C++ Whistle با 5 پرتو، صدای زمزمه باز، و عدم پخش صدای مهتاب در کل صدا. زمان ورود به اولین نشانه صوتی به اولین نشانه است. رمزگشایی نشانه هایی است که بر زمان دیوار بعد از آن تقسیم می شوند، بنابراین رمزگذار دو بار شمارش نمی شود. هر ورودی را تا 30 ثانیه زمزمه کنید، بنابراین زمان اولین توکن در طول کلیپ صاف است. Whistle's این کلیپ را ردیابی می کند: 5.9 میلی ثانیه در 5 ثانیه، 11.1 میلی ثانیه در 10، 36.3 میلی ثانیه در 30.
نرخ خطای کلمه با نرمال سازهای Whisper امتیاز می گیرد. Whistle بیش از 86174 گفته اندازه گیری می شود. Whisper's و Moonshine ارقامی هستند که نویسندگان آنها منتشر کرده اند، از پست های بازرسی چند زبانه به جای آنهایی که فقط انگلیسی هستند. هیچ صدای آزمایشی در دادههای آموزشی یا اعتبارسنجی Whistle ظاهر نمیشود، که با مقایسه جمعهای کنترل صوتی و شناسههای بلندگو در هر مجموعه آزمایشی گزارششده تأیید میشود.
needle_load هر مدلی را که یک فایل .cact داشته باشد می خواند، بنابراین همان باینری گفتار، متن یا هر دو را انجام می دهد:
در خط سوم needle_complete مستقیما کلیپ را می گیرد. موتور آن را رونویسی میکند، رونوشت را در مقابل ابزارهای شما پاسخ میدهد، و یک شی JSON را با تماسها و فیلدهای گفتار، که پیشوندهای گفتاری با پیشوند audio_ هستند، برمیگرداند. هیچ رونوشتی توسط تماس گیرنده انجام نمی شود.
یک WAV 16 کیلوهرتز یا نمونه های خام به چیزی فراتر از نصب پایه نیاز ندارند. سایر نرخهای نمونه و ضبط میکروفون به [mic] اضافی نیاز دارند که soxr و sounddevice را اضافه میکند.
هر فراخوانی متن، زبان، میلیثانیهها را به اولین نشانه و نشانههای رمزگشا در هر ثانیه پس از آن برمیگرداند. word_timestamps=True هر کلمه را با زمان و احتمال آن اضافه می کند. keywords=["Siobhan"، "Krzysztof"] احتمال ثبت آن عبارات را در طول جستجو افزایش می دهد. language="de" زبان را به جای تشخیص آن مجبور می کند. needle.Whistle() همان مدل یک شی است، برای embed (صوتی) یا برای نگه داشتن یک .cact تنظیم شده.
زمین بازی سوزن سوت از میکروفون در ترمینال رونویسی می کند، و مقایسه سوت سوزن همان کلیپ را از طریق Whistle، Whisper و Moonshine در کنار زمان بندی آنها اجرا می کند.
این موتور برای هفده هدف، از macOS و Linux تا Android، iOS، watchOS، Windows on ARM، RISC-V، MIPS، مرورگر و یک جزء WASI از پیش ساخته شده است. هر پوشه یک سوزن باینری، libneedle.a و needle.h را نگه میدارد، و هر کاکتی را که به دست میدهید، بارگیری میکند.
needle_load، needle_transscribe و needle_embed کل گفتار C API هستند. موتور هیچ متغیر محیطی را نمی خواند. هر رفتار یک پیش فرض کامپایل شده یا یک پرچم صریح است.
وزنها روی Hugging Face هستند، موتور و پوشههای پلتفرم آن در Cactus-Compute/needle3 هستند و منبع آن در GitHub است.
متن اصلی (انگلیسی)
Whistle: Speech to Text in 16.9 MB
Article URL: https://cactuscompute.com/blog/whistle Comments URL: https://news.ycombinator.com/item?id=50008427 Points: 304 # Comments: 73