Ask HN: Non-cloud voice recognition for home use?
Hi, I&#x27;m the dev behind <a href="https:&#x2F;&#x2F;talonvoice.com" rel="nofollow">https:&#x2F;&#x2F;talonvoice.com</a><p>I&#x27;ve been working with Facebook&#x27;s wav2letter project and the results (speed on CPU, command accuracy) are extremely good in my experience. They also hold the &quot;state of the art&quot; for librispeech (a common benchmark) on wer_are_we [1]. Granted, that&#x27;s with a 2GB model that doesn&#x27;t run very well on CPU, but I think most of the fully &quot;state of the art&quot; models are computationally expensive and expected to run on GPU. Wav2letter has other models that are very fast on CPU and still extremely accurate.<p>You can run their &quot;Streaming ConvNets&quot; model on CPU to transcribe multiple live audio streams in parallel, see their wav2letter@anywhere post for more info [2]<p>I am getting very good accuracy on the in-progress model I am training for command recognition (3.7% word error rate on librispeech clean, about 8% WER on librispeech other, 20% WER on common voice, 3% WER on &quot;speech commands&quot;). I plan to release it alongside my other models here [5] once I&#x27;m done working on it.<p>There&#x27;s a simple WER comparison between some of the command engines here [3] Between this and wer_are_we [1] it should give you a general idea of what to expect when talking about Word Error Rate (WER). (Note the wav2letter-talonweb entry in [3] is a rather old model I trained, known to have worse accuracy, it&#x27;s not even the same NN architecture).<p>----<p>As far as constraining the vocabulary, you can try train a kenlm language model for kaldi, deepspeech, and wav2letter by grabbing KenLM and piping normalized (probably lowercase it and remove everything but ascii and quotes) text into lmplz:<p><pre><code>    cat corpus.txt | kenlm&#x2F;build&#x2F;bin&#x2F;lmplz -o 4 &gt; model.arpa
</code></pre>
And you can turn it into a compressed binary model for wav2letter like this:<p><pre><code>    kenlm&#x2F;build&#x2F;bin&#x2F;build_binary -a 22 -q 8 -b 8 trie model.arpa model.bin
</code></pre>
There are other options, like using a &quot;strict command grammar&quot;, but I don&#x27;t have enough context as to how you want to program this to guide you there.<p>I also have tooling I wrote around wav2letter, such as wav2train [4] which builds wav2letter training and runtime data files for you.<p>I&#x27;m generally happy to talk more and answer any questions.<p>----<p>[1] <a href="https:&#x2F;&#x2F;github.com&#x2F;syhw&#x2F;wer_are_we" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;syhw&#x2F;wer_are_we</a><p>[2] <a href="https:&#x2F;&#x2F;ai.facebook.com&#x2F;blog&#x2F;online-speech-recognition-with-wav2letteranywhere&#x2F;" rel="nofollow">https:&#x2F;&#x2F;ai.facebook.com&#x2F;blog&#x2F;online-speech-recognition-with-...</a><p>[3] <a href="https:&#x2F;&#x2F;github.com&#x2F;daanzu&#x2F;kaldi-active-grammar&#x2F;blob&#x2F;master&#x2F;docs&#x2F;models.md" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;daanzu&#x2F;kaldi-active-grammar&#x2F;blob&#x2F;master&#x2F;d...</a><p>[4] <a href="https:&#x2F;&#x2F;github.com&#x2F;talonvoice&#x2F;wav2train" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;talonvoice&#x2F;wav2train</a><p>[5] <a href="https:&#x2F;&#x2F;talonvoice.com&#x2F;research&#x2F;" rel="nofollow">https:&#x2F;&#x2F;talonvoice.com&#x2F;research&#x2F;</a>