HeadlinesBriefing HeadlinesBriefing 11 languages

Whistle: Speech to Text in 16.9 MB

Hacker News ·

🇬🇧 English

Today we release Whistle, an open speech recognition model built for mobiles, wearables, robots, smart home devices, automotive systems and microcontrollers. It is a single 16.9 MB file that runs on the CPU with no dependencies. It loads into the same C++ engine as Needle, sharing its container and quantisation, so one binary can turn a spoken clip directly into tool calls.

Whistle does three jobs entirely on the device. It transcribes up to 30 seconds of 16 kHz mono audio in English, German, French, Spanish, Italian, Dutch and Polish, detecting the language unless one is named. It produces word timestamps with a start, end and probability for every word, aligned from the decoder's attention. It can also output a speech embedding, one row per 80 ms frame, without decoding a transcript. The model reaches the first token in 11 ms.

The architecture has two halves. The front end converts audio into 80 log-mel bins and uses a convolutional stem to reduce 30 seconds to 375 frames. The encoder then applies eight Simple Attention blocks shared with Needle, with attention that is not causal, so a frame at 3 seconds can attend to one at 12 seconds. The decoder uses eight Laddered Simple Attention blocks at width 512, with gated cross attention in every layer that reads the encoder output. Those projections are computed once per clip, so five beam search paths cost only five short transcript caches rather than five passes over the audio.

Decoding uses five beams scored by length-normalised log probability. Keyword biasing runs an Aho-Corasick automaton over phrases supplied by the user, raising their probability as the search advances. The vocabulary holds 8,192 text pieces plus seven language tokens, and transcripts are capped at 320 tokens.

The model is also available in a browser sandbox where audio never leaves the device.

View original article →


🇸🇦 العربية

Whistle: تحويل الكلام إلى نص مفتوح في 16.9 ميغابايت

نطلق اليوم Whistle، وهو نموذج مفتوح للتعرف على الكلام مصمم للهواتف المحمولة والأجهزة القابلة للارتداء والروبوتات وأجهزة المنزل الذكي والأنظمة الأوتوماتيكية والمتحكمات الدقيقة. وهو ملف واحد بحجم 16.9 ميغابايت يعمل على المعالج دون أي تبعيات. يُحمَّل في محرك C++ نفسه الذي يستخدمه Needle، ويشارك حاويته وتكميمه، لذا يمكن لملف ثنائي واحد تحويل مقطع صوتي منطوق مباشرة إلى استدعاءات أدوات.

يؤدي Whistle ثلاث مهام بالكامل على الجهاز. يقوم بتفريغ ما يصل إلى 30 ثانية من الصوت أحادي القناة بتردد 16 كيلوهرتز بلغات الإنجليزية والألمانية والفرنسية والإسبانية والإيطالية والهولندية والبولندية، ويكتشف اللغة ما لم تُحدَّد. ويُنتج الطوابع الزمنية للكلمات، مع وقت البداية والنهاية واحتمال كل كلمة، مُحاذاة من انتباه المفكِّك. كما يمكنه إخراج تضمين كلامي، صفاً واحداً لكل إطار مدته 80 ملي ثانية، دون فك ترميز نص. ويصل النموذج إلى أول رمز خلال 11 ملي ثانية.

تتكون البنية من نصفين. تحوّل الواجهة الأمامية الصوت إلى 80 نطاقاً لوغاريتمياً من طيف ميل، وتستخدم جذعاً التفافياً لتقليص 30 ثانية إلى 375 إطاراً. ثم يطبّق المشفِّر ثماني كتل Simple Attention مشتركة مع Needle، مع انتباه غير سببي، بحيث يمكن للإطار عند الثانية 3 أن ينتبه إلى إطار عند الثانية 12. ويستخدم المفكِّك ثماني كتل Laddered Simple Attention بعرض 512، مع انتباه تقاطعي مُبوَّب في كل طبقة يقرأ مخرجات المشفِّر. تُحسب هذه الإسقاطات مرة واحدة لكل مقطع، لذا فإن مسارات البحث الخمسة بالشعاع لا تكلّف سوى خمس ذاكرات تخزين مؤقتة قصيرة للنص بدلاً من خمس مرات مرور على الصوت.

يستخدم فك الترميز خمسة أشعة تُقيَّم باحتمال لوغاريتمي مُطبَّع بالطول. ويعمل تحيّز الكلمات المفتاحية بأتوماتا Aho-Corasick على العبارات التي يزوّد بها المستخدم، ويرفع احتمالها مع تقدم البحث. ويحتوي المفردات على 8,192 جزءاً نصياً إضافةً إلى سبعة رموز للغة، ويُحدّ النص المفرّغ بـ 320 رمزاً.

النموذج متاح أيضاً في بيئة تجريبية داخل المتصفح، حيث لا يغادر الصوت الجهاز أبداً.

كيف يحافظ Whistle على حجمه الصغير مع قدرته على تفريغ الكلام؟

يشارك Whistle كتل المشفِّر وطبقات الانتباه والتكميم مع Needle، ويُحمَّل في محرك C++ نفسه، ويحسب إسقاطات الانتباه التقاطعي للمشفِّر مرة واحدة فقط لكل مقطع. تتيح هذه الخيارات مجتمعةً نموذجاً بحجم 16.9 ميغابايت يعمل على المعالج دون أي تبعيات.

العربية version →


🇩🇪 Deutsch

Whistle: Offene Sprache-zu-Text-Erkennung in 16,9 MB

Heute veröffentlichen wir Whistle, ein offenes Spracherkennungsmodell für Mobilgeräte, Wearables, Roboter, Smart-Home-Geräte, Automotive-Systeme und Mikrocontroller. Es handelt sich um eine einzige Datei mit 16,9 MB, die ohne Abhängigkeiten auf der CPU läuft. Sie wird in dieselbe C++-Engine geladen wie Needle und teilt sich deren Container und Quantisierung, sodass ein einziges Binary einen gesprochenen Clip direkt in Tool-Aufrufe umwandeln kann.

Whistle erledigt drei Aufgaben vollständig auf dem Gerät. Es transkribiert bis zu 30 Sekunden Mono-Audio mit 16 kHz in Englisch, Deutsch, Französisch, Spanisch, Italienisch, Niederländisch und Polnisch, wobei die Sprache automatisch erkannt wird, sofern keine angegeben ist. Es erzeugt Wort-Zeitstempel mit Start, Ende und Wahrscheinlichkeit für jedes Wort, die aus der Aufmerksamkeit des Decoders abgeleitet werden. Außerdem kann es eine Sprach-Einbettung ausgeben, eine Zeile pro 80-ms-Frame, ohne ein Transkript zu decodieren. Das Modell erreicht das erste Token in 11 ms.

Die Architektur besteht aus zwei Hälften. Das Frontend wandelt Audio in 80 Log-Mel-Bänder um und nutzt einen konvolutionalen Stem, um 30 Sekunden auf 375 Frames zu reduzieren. Der Encoder wendet dann acht Simple-Attention-Blöcke an, die sich Needle teilt, mit nicht-kausaler Aufmerksamkeit, sodass ein Frame bei 3 Sekunden auf einen Frame bei 12 Sekunden achten kann. Der Decoder verwendet acht Laddered-Simple-Attention-Blöcke mit einer Breite von 512 und in jeder Schicht eine gegatete Cross-Attention, die die Encoder-Ausgabe liest. Diese Projektionen werden einmal pro Clip berechnet, sodass fünf Beam-Search-Pfade nur fünf kurze Transkript-Caches kosten statt fünf Durchläufe über das Audio.

Die Dekodierung nutzt fünf Beams, bewertet nach der längennormalisierten logarithmischen Wahrscheinlichkeit. Keyword-Biasing läuft über einen Aho-Corasick-Automaten mit den vom Nutzer übergebenen Phrasen und erhöht deren Wahrscheinlichkeit, während die Suche voranschreitet. Das Vokabular umfasst 8.192 Textstücke plus sieben Sprach-Token, und Transkripte sind auf 320 Token begrenzt.

Das Modell ist außerdem in einer Browser-Sandbox verfügbar, in der das Audio das Gerät niemals verlässt.

Wie bleibt Whistle so klein und transkribiert trotzdem Sprache?

Whistle teilt Encoder-Blöcke, Aufmerksamkeitsschichten und Quantisierung mit Needle, wird in dieselbe C++-Engine geladen und berechnet die Cross-Attention-Projektionen des Encoders nur einmal pro Clip. Diese Entscheidungen ermöglichen ein 16,9-MB-Modell, das ohne Abhängigkeiten auf der CPU läuft.

Deutsch version →


🇪🇸 Español

Whistle: voz a texto abierto en 16,9 MB

Hoy lanzamos Whistle, un modelo abierto de reconocimiento de voz diseñado para móviles, wearables, robots, dispositivos domésticos inteligentes, sistemas de automoción y microcontroladores. Es un único archivo de 16,9 MB que se ejecuta en la CPU sin dependencias. Se carga en el mismo motor C++ que Needle, compartiendo su contenedor y su cuantización, de modo que un solo binario puede convertir un clip de voz directamente en llamadas a herramientas.

Whistle realiza tres tareas por completo en el dispositivo. Transcribe hasta 30 segundos de audio mono de 16 kHz en inglés, alemán, francés, español, italiano, neerlandés y polaco, detectando el idioma salvo que se indique uno. Genera marcas de tiempo por palabra, con inicio, fin y probabilidad de cada palabra, alineadas a partir de la atención del decodificador. También puede emitir una incrustación de voz, una fila por cada fotograma de 80 ms, sin decodificar una transcripción. El modelo alcanza el primer token en 11 ms.

La arquitectura tiene dos mitades. La parte frontal convierte el audio en 80 bandas log-mel y utiliza un bloque convolucional para reducir 30 segundos a 375 fotogramas. El codificador aplica después ocho bloques Simple Attention compartidos con Needle, con una atención no causal, de modo que un fotograma en el segundo 3 puede atender a uno en el segundo 12. El decodificador usa ocho bloques Laddered Simple Attention de anchura 512, con atención cruzada controlada por puertas en cada capa que lee la salida del codificador. Estas proyecciones se calculan una vez por clip, así que cinco rutas de búsqueda en haz cuestan solo cinco cachés de transcripción cortas en lugar de cinco pasadas sobre el audio.

La decodificación usa cinco haces puntuados por probabilidad logarítmica normalizada por longitud. El sesgo de palabras clave recorre un autómata Aho-Corasick sobre las frases que proporciona el usuario, elevando su probabilidad conforme avanza la búsqueda. El vocabulario tiene 8.192 piezas de texto más siete tokens de idioma, y las transcripciones se limitan a 320 tokens.

El modelo también está disponible en un entorno de prueba en el navegador, donde el audio nunca sale del dispositivo.

¿Cómo mantiene Whistle un tamaño tan reducido y aun así transcribe voz?

Whistle comparte bloques de codificador, capas de atención y cuantización con Needle, se carga en el mismo motor C++ y calcula las proyecciones de atención cruzada del codificador solo una vez por clip. Estas decisiones permiten un modelo de 16,9 MB que funciona en la CPU sin dependencias.

Español version →


🇫🇷 Français

Whistle : reconnaissance vocale ouverte en 16,9 Mo

Aujourd'hui, nous publions Whistle, un modèle ouvert de reconnaissance vocale conçu pour les mobiles, les objets connectés, les robots, les appareils de maison intelligente, les systèmes automobiles et les microcontrôleurs. Il s'agit d'un fichier unique de 16,9 Mo qui fonctionne sur le CPU sans aucune dépendance. Il se charge dans le même moteur C++ que Needle, en partageant son conteneur et sa quantification, si bien qu'un seul binaire peut transformer un extrait audio directement en appels d'outils.

Whistle accomplit trois tâches entièrement sur l'appareil. Il transcrit jusqu'à 30 secondes d'audio mono à 16 kHz en anglais, allemand, français, espagnol, italien, néerlandais et polonais, en détectant la langue sauf si elle est précisée. Il produit des horodatages par mot, avec un début, une fin et une probabilité pour chaque mot, alignés à partir de l'attention du décodeur. Il peut également générer une représentation vocale, une ligne par trame de 80 ms, sans décoder de transcription. Le modèle atteint le premier jeton en 11 ms.

L'architecture comporte deux parties. La partie frontale convertit l'audio en 80 bandes log-mel et utilise un tronc convolutif pour réduire 30 secondes à 375 trames. L'encodeur applique ensuite huit blocs Simple Attention partagés avec Needle, avec une attention non causale, de sorte qu'une trame à 3 secondes peut porter son attention sur une trame à 12 secondes. Le décodeur utilise huit blocs Laddered Simple Attention de largeur 512, avec une attention croisée à portes dans chaque couche qui lit la sortie de l'encodeur. Ces projections sont calculées une seule fois par extrait, si bien que cinq chemins de recherche par faisceau ne coûtent que cinq courts caches de transcription au lieu de cinq passages sur l'audio.

Le décodage utilise cinq faisceaux notés par la probabilité logarithmique normalisée par la longueur. Le biais de mots-clés parcourt un automate Aho-Corasick sur les expressions fournies par l'utilisateur, en augmentant leur probabilité au fil de la recherche. Le vocabulaire comprend 8 192 fragments de texte et sept jetons de langue, et les transcriptions sont limitées à 320 jetons.

Le modèle est également disponible dans un bac à sable dans le navigateur, où l'audio ne quitte jamais l'appareil.

Comment Whistle reste-t-il si petit tout en transcrivant la parole ?

Whistle partage ses blocs d'encodeur, ses couches d'attention et sa quantification avec Needle, se charge dans le même moteur C++ et ne calcule les projections d'attention croisée de l'encodeur qu'une seule fois par extrait. Ces choix permettent un modèle de 16,9 Mo qui fonctionne sur CPU sans aucune dépendance.

Français version →


🇮🇳 हिन्दी

Whistle: 16.9 MB में ओपन स्पीच-टू-टेक्स्ट

आज हम Whistle जारी कर रहे हैं, जो एक ओपन स्पीच रिकग्निशन मॉडल है और मोबाइल, वियरेबल, रोबोट, स्मार्ट होम उपकरण, ऑटोमोटिव सिस्टम और माइक्रोकंट्रोलर के लिए बनाया गया है। यह 16.9 MB की एक एकल फ़ाइल है जो बिना किसी निर्भरता के CPU पर चलती है। यह Needle के समान C++ इंजन में लोड होती है, उसका कंटेनर और क्वांटाइज़ेशन साझा करती है, इसलिए एक ही बाइनरी किसी बोले गए क्लिप को सीधे टूल कॉल में बदल सकती है।

Whistle तीनों काम पूरी तरह डिवाइस पर करता है। यह 16 kHz मोनो ऑडियो के 30 सेकंड तक का ट्रांसक्रिप्शन अंग्रेज़ी, जर्मन, फ्रेंच, स्पैनिश, इतालवी, डच और पोलिश में करता है, और जब तक कोई भाषा निर्दिष्ट न की जाए, भाषा अपने आप पहचान लेता है। यह हर शब्द के लिए शुरुआत, अंत और संभावना वाले शब्द-स्तरीय टाइमस्टैम्प बनाता है, जो डिकोडर के attention से संरेखित होते हैं। यह बिना ट्रांसक्रिप्ट डिकोड किए हर 80 ms फ्रेम के लिए एक पंक्ति वाला स्पीच एम्बेडिंग भी दे सकता है। मॉडल 11 ms में पहला टोकन दे देता है।

आर्किटेक्चर के दो हिस्से हैं। फ्रंट एंड ऑडियो को 80 log-mel बिन में बदलता है और एक convolutional stem से 30 सेकंड को 375 फ्रेम तक घटाता है। इसके बाद एन्कोडर Needle के साथ साझा आठ Simple Attention ब्लॉक लागू करता है, जिसका attention non-causal है, इसलिए 3 सेकंड पर का फ्रेम 12 सेकंड वाले फ्रेम पर ध्यान दे सकता है। डिकोडर चौड़ाई 512 के आठ Laddered Simple Attention ब्लॉक इस्तेमाल करता है, और हर परत में gated cross attention है जो एन्कोडर आउटपुट पढ़ता है। ये प्रोजेक्शन हर क्लिप के लिए एक बार गणना होते हैं, इसलिए पाँच beam search पथों की लागत ऑडियो पर पाँच पास के बजाय केवल पाँच छोटे ट्रांसक्रिप्ट कैश होती है।

डिकोडिंग में पाँच beams होते हैं, जिन्हें length-normalised log probability से स्कोर किया जाता है। कीवर्ड बायसिंग उपयोगकर्ता द्वारा दिए गए वाक्यांशों पर Aho-Corasick automaton चलाती है और खोज आगे बढ़ने के साथ उनकी संभावना बढ़ाती है। शब्दावली में 8,192 टेक्स्ट पीस और सात भाषा टोकन हैं, और ट्रांसक्रिप्ट 320 टोकन पर सीमित है।

यह मॉडल ब्राउज़र सैंडबॉक्स में भी उपलब्ध है, जहाँ ऑडियो कभी डिवाइस से बाहर नहीं जाता।

Whistle इतना छोटा कैसे रहता है और फिर भी speech transcribe करता है?

Whistle अपने encoder ब्लॉक, attention layers और quantisation Needle के साथ साझा करता है, उसी C++ इंजन में लोड होता है, और encoder के cross-attention प्रोजेक्शन हर क्लिप के लिए केवल एक बार गणना करता है। इन विकल्पों से 16.9 MB का ऐसा मॉडल संभव होता है जो बिना किसी निर्भरता के CPU पर चलता है।

हिन्दी version →


🇮🇩 Bahasa Indonesia

Whistle: Speech to Text Terbuka dalam 16,9 MB

Hari ini kami merilis Whistle, model pengenalan ucapan terbuka yang dibuat untuk ponsel, perangkat wearable, robot, perangkat rumah pintar, sistem otomotif, dan mikrokontroler. Ini adalah satu berkas berukuran 16,9 MB yang berjalan di CPU tanpa dependensi apa pun. Model ini dimuat ke mesin C++ yang sama dengan Needle, berbagi kontainer dan kuantisasinya, sehingga satu biner dapat mengubah klip ucapan langsung menjadi pemanggilan alat.

Whistle menjalankan tiga tugas sepenuhnya di perangkat. Model ini mentranskrip audio mono 16 kHz hingga 30 detik dalam bahasa Inggris, Jerman, Prancis, Spanyol, Italia, Belanda, dan Polandia, dan mendeteksi bahasa kecuali jika bahasa ditentukan. Model ini menghasilkan penanda waktu per kata, dengan waktu mulai, waktu selesai, dan probabilitas untuk setiap kata, yang diselaraskan dari perhatian decoder. Model ini juga dapat menghasilkan embedding ucapan, satu baris per frame 80 md, tanpa mendekode transkrip. Model mencapai token pertama dalam 11 md.

Arsitekturnya terdiri dari dua bagian. Front end mengubah audio menjadi 80 pita log-mel dan menggunakan stem konvolusional untuk mengurangi 30 detik menjadi 375 frame. Encoder kemudian menerapkan delapan blok Simple Attention yang dibagi dengan Needle, dengan atensi non-kausal, sehingga frame pada detik ke-3 dapat memperhatikan frame pada detik ke-12. Decoder menggunakan delapan blok Laddered Simple Attention berlebar 512, dengan gated cross attention di setiap lapisan yang membaca keluaran encoder. Proyeksi ini dihitung sekali per klip, sehingga lima jalur beam search hanya memerlukan lima cache transkrip pendek, bukan lima kali pemindaian audio.

Dekoding menggunakan lima beam yang dinilai berdasarkan probabilitas log yang dinormalisasi panjangnya. Pembobotan kata kunci menjalankan automaton Aho-Corasick atas frasa yang Anda berikan, dan menaikkan probabilitasnya seiring pencarian berlangsung. Kosakata terdiri dari 8.192 potongan teks ditambah tujuh token bahasa, dan transkrip dibatasi hingga 320 token.

Model ini juga tersedia di sandbox browser, tempat audio tidak pernah meninggalkan perangkat.

Bagaimana Whistle tetap berukuran kecil namun tetap dapat mentranskrip ucapan?

Whistle berbagi blok encoder, lapisan atensi, dan kuantisasi dengan Needle, dimuat ke mesin C++ yang sama, dan hanya menghitung proyeksi cross-attention encoder sekali per klip. Pilihan-pilihan ini memungkinkan model 16,9 MB yang berjalan di CPU tanpa dependensi apa pun.

Bahasa Indonesia version →


🇯🇵 日本語

Whistle:16.9 MBのオープン音声認識モデル

本日、Whistleを公開します。これは、モバイル端末、ウェアラブル機器、ロボット、スマートホーム機器、自動車システム、マイクロコントローラー向けに設計されたオープンな音声認識モデルです。16.9 MBの単一ファイルで、依存関係なしにCPU上で動作します。Needleと同じC++エンジンに、コンテナーと量子化方式を共有する形で読み込まれるため、1つのバイナリで音声クリップを直接ツール呼び出しに変換できます。

Whistleは3つの処理をすべてデバイス上で行います。16 kHzモノラル音声を最大30秒まで文字起こしでき、対応言語は英語、ドイツ語、フランス語、スペイン語、イタリア語、オランダ語、ポーランド語です。言語は指定がなければ自動判定されます。各単語について開始時間、終了時間、確率を含む単語単位のタイムスタンプを、デコーダーのアテンションから整列させて出力します。また、文字起こしをデコードせず、80ミリ秒フレームごとに1行の音声埋め込みを出力することもできます。このモデルは11ミリ秒で最初のトークンに到達します。

アーキテクチャは2つの部分から成ります。フロントエンドは音声を80のlog-melバンドに変換し、畳み込みステムを使って30秒分を375フレームに圧縮します。次にエンコーダーが、Needleと共有する8つのSimple Attentionブロックを適用します。アテンションは非因果的なので、3秒地点のフレームは12秒地点のフレームに注目できます。デコーダーは幅512の8つのLaddered Simple Attentionブロックを使い、各層にはエンコーダー出力を読み取るゲート付きクロスアテンションがあります。これらの射影はクリップごとに1回だけ計算されるため、5つのビーム探索経路は、音声を5回走査するのではなく、5つの短い文字起こしキャッシュのコストで済みます。

デコードでは、長さで正規化された対数確率で採点される5つのビームを使います。キーワードバイアスは、ユーザーが指定したフレーズに対してAho-Corasickオートマトンを走らせ、探索が進むにつれてそれらの確率を引き上げます。語彙は8,192個のテキストピースと7つの言語トークンから成り、文字起こしは320トークンで上限が設定されています。

このモデルはブラウザーのサンドボックスでも利用でき、音声がデバイスの外に出ることはありません。

Whistleはどのようにしてこれほど小さなサイズを保ちながら音声を文字起こしするのですか?

Whistleは、エンコーダーブロック、アテンション層、量子化をNeedleと共有し、同じC++エンジンに読み込まれます。また、エンコーダーのクロスアテンション射影はクリップごとに1回だけ計算されます。これらの選択により、依存関係なしにCPU上で動作する16.9 MBのモデルが実現しています。

日本語 version →


🇧🇷 Português

Whistle: conversão de voz em texto aberta em 16,9 MB

Hoje lançamos o Whistle, um modelo aberto de reconhecimento de voz criado para celulares, wearables, robôs, dispositivos de casa inteligente, sistemas automotivos e microcontroladores. Trata-se de um único arquivo de 16,9 MB que roda na CPU sem dependências. Ele é carregado no mesmo motor C++ do Needle, compartilhando seu contêiner e sua quantização, de modo que um único binário pode transformar um trecho de fala diretamente em chamadas de ferramentas.

O Whistle realiza três tarefas inteiramente no dispositivo. Ele transcreve até 30 segundos de áudio mono de 16 kHz em inglês, alemão, francês, espanhol, italiano, holandês e polonês, detectando o idioma, a menos que um seja informado. Produz marcações de tempo por palavra, com início, fim e probabilidade de cada palavra, alinhadas a partir da atenção do decodificador. Também pode gerar uma incorporação de fala, uma linha por quadro de 80 ms, sem decodificar uma transcrição. O modelo alcança o primeiro token em 11 ms.

A arquitetura tem duas metades. O front end converte o áudio em 80 faixas log-mel e usa um estágio convolucional para reduzir 30 segundos para 375 quadros. Em seguida, o codificador aplica oito blocos Simple Attention compartilhados com o Needle, com atenção não causal, de forma que um quadro em 3 segundos pode prestar atenção a um quadro em 12 segundos. O decodificador usa oito blocos Laddered Simple Attention com largura 512, com atenção cruzada controlada por portas em cada camada que lê a saída do codificador. Essas projeções são calculadas uma vez por trecho, então cinco caminhos de busca em feixe custam apenas cinco caches curtos de transcrição, em vez de cinco passagens sobre o áudio.

A decodificação usa cinco feixes pontuados pela probabilidade logarítmica normalizada pelo comprimento. O viés de palavras-chave percorre um autômato Aho-Corasick sobre as frases fornecidas pelo usuário, elevando a probabilidade delas conforme a busca avança. O vocabulário tem 8.192 peças de texto mais sete tokens de idioma, e as transcrições são limitadas a 320 tokens.

O modelo também está disponível em um sandbox no navegador, onde o áudio nunca sai do dispositivo.

Como o Whistle se mantém tão pequeno e ainda transcreve fala?

O Whistle compartilha blocos de codificador, camadas de atenção e quantização com o Needle, é carregado no mesmo motor C++ e calcula as projeções de atenção cruzada do codificador apenas uma vez por trecho. Essas escolhas permitem um modelo de 16,9 MB que roda na CPU sem dependências.

Português version →


🇷🇺 Русский

Whistle: открытое распознавание речи в 16,9 МБ

Сегодня мы выпускаем Whistle — открытую модель распознавания речи, созданную для мобильных устройств, носимой электроники, роботов, устройств умного дома, автомобильных систем и микроконтроллеров. Это один файл размером 16,9 МБ, который работает на CPU без каких-либо зависимостей. Он загружается в тот же C++-движок, что и Needle, используя общий контейнер и квантование, поэтому один бинарный файл может превратить записанный фрагмент речи непосредственно в вызовы инструментов.

Whistle выполняет три задачи полностью на устройстве. Он транскрибирует до 30 секунд монофонического аудио с частотой 16 кГц на английском, немецком, французском, испанском, итальянском, нидерландском и польском языках, автоматически определяя язык, если он не указан. Он формирует временные метки для каждого слова с началом, концом и вероятностью, выравненные по вниманию декодера. Также модель может выдавать речевое вложение — одну строку на каждый кадр длительностью 80 мс — без декодирования транскрипции. Модель выдаёт первый токен за 11 мс.

Архитектура состоит из двух частей. Фронтенд преобразует аудио в 80 лог-мел полос и с помощью свёрточного блока сокращает 30 секунд до 375 кадров. Энкодер затем применяет восемь блоков Simple Attention, общих с Needle, с некаузальным вниманием, поэтому кадр на 3-й секунде может обращаться к кадру на 12-й секунде. Декодер использует восемь блоков Laddered Simple Attention шириной 512 с gated cross attention в каждом слое, который считывает выход энкодера. Эти проекции вычисляются один раз на фрагмент, поэтому пять путей лучевого поиска требуют лишь пяти коротких кэшей транскрипции, а не пяти проходов по аудио.

Декодирование использует пять лучей, оцениваемых по нормализованной по длине логарифмической вероятности. Смещение по ключевым словам работает через автомат Ахо — Корасик по фразам, которые передаёт пользователь, повышая их вероятность по мере продвижения поиска. Словарь содержит 8 192 текстовых фрагмента и семь языковых токенов, а транскрипция ограничена 320 токенами.

Модель также доступна в браузерной песочнице, где аудио никогда не покидает устройство.

Как Whistle остаётся таким компактным и при этом распознаёт речь?

Whistle использует общие с Needle блоки энкодера, слои внимания и квантование, загружается в тот же C++-движок и вычисляет проекции кросс-внимания энкодера только один раз на фрагмент. Такой подход позволяет получить модель размером 16,9 МБ, которая работает на CPU без зависимостей.

Русский version →


🇨🇳 简体中文

Whistle:16.9 MB 的开源语音转文字模型

今天,我们发布 Whistle,这是一款开源语音识别模型,专为移动设备、可穿戴设备、机器人、智能家居设备、汽车系统和微控制器而打造。它是一个 16.9 MB 的单一文件,可在 CPU 上运行,无需任何依赖。它与 Needle 加载到同一个 C++ 引擎中,共享其容器和量化方式,因此单个二进制文件即可将语音片段直接转换为工具调用。

Whistle 完全在设备端完成三项任务。它可以转录最长 30 秒、16 kHz 单声道音频,支持 英语、德语、法语、西班牙语、意大利语、荷兰语和波兰语,除非指定语言,否则会自动检测语言。它还能为每个单词生成起止时间和概率的词级时间戳,这些时间戳由解码器的注意力机制对齐得出。它也可以输出语音嵌入,即每 80 毫秒一帧的一行数据,而无需解码出转录文本。该模型在 11 毫秒内即可输出第一个词元。

该架构分为两个部分。前端将音频转换为 80 个对数梅尔频带,并使用卷积主干将 30 秒的音频压缩为 375 帧。随后,编码器应用八个与 Needle 共享的 Simple Attention 模块,其注意力机制并非因果式,因此 3 秒处的帧可以关注 12 秒处的帧。解码器使用八个宽度为 512 的 Laddered Simple Attention 模块,每一层都包含读取编码器输出的门控交叉注意力。由于这些投影每段音频只需计算一次,五条束搜索路径只需五份较短的转录缓存,而无需对音频进行五次遍历。

解码采用五束搜索,并以长度归一化的对数概率进行评分。关键词偏置功能会在用户提供的短语上运行 Aho-Corasick 自动机,并在搜索推进过程中提高这些短语的概率。词表包含 8,192 个文本片段以及七个语言词元,转录结果最多为 320 个词元。

该模型也提供浏览器演示版本,音频永远不会离开设备。

Whistle 如何在保持体积如此小巧的同时实现语音转录?

Whistle 与 Needle 共享编码器模块、注意力层和量化方式,并加载到同一个 C++ 引擎中;同时,编码器的交叉注意力投影每段音频只计算一次。这些设计共同实现了一个可在 CPU 上运行、无需任何依赖的 16.9 MB 模型。

简体中文 version →