Javaで書かれた音声認識エンジン SPHINX-4

http://cmusphinx.sourceforge.net/sphinx4/
恥ずかしながら、昨日大学の先輩に話しを聞くまで知らなかったのだが、なんと全てのコードがJavaで書かれた音声認識エンジンSPHINX-4がある。
SPHINXカーネギーメロン大学(CMU)の音声認識エンジンで歴史はかなり古い。今、GoogleとMSが裁判で争っている人、Kai-Fu Lee氏が博士論文を書いていた頃に作られたものが最初と言われている。大体10年位前だろうか。

Javaって遅いと思っていた

音声認識で時間がかかる場所ってのは大規模なデータを探索する処理がほとんどである。具体的に言えば、入ってきた音声に対して、「どの単語が一番合ってるっぽいかな〜」と幅優先探索するのが一般的である。
孤立単語認識*1だったら、比較的簡単だが単語が連結する連続音声認識*2だと探索の仮説管理がそこそこ面倒なので、メモリ管理が超重要と考えていた。したがってガベージコレクタのあるJavaは向かないと思っていたのだが。。。
リンク先の結果を見ると、Cで書かれたSPHINX3.3と同等の速度で動くようだ。まぁ、SPHINX3.3の実装がヘボい可能性もあるけど。しかし、この結果は驚きである。

プラグインモデルを採用しているらしい

詳しくはリンク先に書いてあるのだが、あらゆる認識に使用するモデルや、フロントエンド信号処理、探索のアルゴリズムなど、様々な物がプラグイン形式になっているらしい。例えば言語モデルは有名なN-gramモデルだけでなく、ARPAフォーマットのFSTまで扱えるらしい。凄いことだ。

参加しているメンバー

参加しているメンバーも凄い

It was created via a joint collaboration between the Sphinx group at Carnegie Mellon University, Sun Microsystems Laboratories, Mitsubishi Electric Research Labs (MERL), and Hewlett Packard (HP), with contributions from the University of California at Santa Cruz (UCSC) and the Massachusetts Institute of Technology (MIT).

CMUSPHINXグループ、サン、三菱電機研究所、ヒューレットパッカード、さらにカリフォルニア大学とMITの貢献が入っているそうだ。まさに、state-of-the-art(最先端)と呼ぶにふさわしい。

今後はSPHINX-4がデファクトに?

リンク先にはこんなことも書いてある。

Sphinx-4 started out as a port of Sphinx-3 to the Java programming language, but evolved into a recognizer designed to be much more flexible than Sphinx-3, thus becoming an excellent platform for speech research.

(和訳)Sphinx-4はSphix-3をJava言語へ移殖することで始まりました。しかし、SPHINX-3より凄く柔軟に設計された認識エンジンへと進化しました。それゆえ、音声認識の優れたプラットフォームへなりつつあります。

この自信も凄いが、リンク先の売り文句を信じるならば、SPHINX-4はまさしく次世代の音声認識エンジンという気がする。あとでいじってみよう。

*1:単語の認識、カーナビのコマンド入力を考えるとイメージしやすいかも

*2:文章の認識、いわゆる書き起こしです