2013-01-02

XVoice: Linuxデスクトップアプリの音声操作

Dubhrosa: XVoice: speech control of Linux desktop applications

XVoice

参考にされるのを求めているオープンソースの音声操作プロジェクト

黎明期

1990年代の終わり頃、IBMはViaVoice音声認識エンジンのLinux版をリリースした。常にベータ版で、オリジナルのWindows用のプログラムの完全な機能は提供されていなかったが、当時、Linux用のまともな音声認識エンジンとしては、唯一の存在だった。そこで、私はそれを使って遊んでいた。

すぐに、XVoiceというオープンソースプロジェクトを発見した。XVoiceはViaVoiceエンジンを使って音声認識を行い、その認識結果をLinuxデスクトップをコントロールするために使うアプリケーションであった。多くのプログラムを、本来想定していない方法で使うハックの塊だったが、すばらしい事を達成していた。Linuxに向かって言葉で命令することができるのだ。

ViaVoiceエンジンのすばらしい機能に、文法を定義すれば、エンジンは入力された音声に対し、文法に一致するかどうかを試みるというものがあった。つまり、特定の文法(すばらしいことにBNFで定義)に対しては、トレーニングなしで、認識率をほぼ完璧にすることができたのだ。

進歩と成功

2000年初頭に数ヶ月の開発の末、XVoiceはユーザー定義されたコマンド文法をサポートした。文法を定義して、話されたコマンドを、キーストロークに割り当てる。しかもアプリケーションごとにそれぞれ、複数の文法を設定できる。XVoiceは、ややハック的なヒューリスティックによって、正規表現でウインドウのタイトルにマッチさせることができた。これにより、正しい文法ファイルを自動的に読み込むのだ。マウスもコントロールできた。XVoiceは画面を3x3グリッドに分割して、マウスが望みの位置に移動するまで誘導させることができた。文法は階層的なので、数字を単語として入力するEmacs用コントロール文法[訳注:1-one, 2-twoのように数字を単語に変換すること]を含めることができたし、パターン認識もサポートしていたので、アプリケーションに送られるコマンドは、話された単語の一部を含めることもできた。

開発に多大に貢献した、積極的な利用者もいた。あるVi使いのプログラマーはひどい反復性ストレス障害をわずらっており、コンピューター操作に支障をきたしていた。彼は洗練されたVi用の文法を定義して、プログラミングをしていた。興味深いことに、彼はむしろ作業がより効率的なったと主張した。というのも、Viコマンドを従来より高度に使いこなせるからである。Emacs利用者達は巨大な文法集をこしらえて、ニュースを読み、メールを送り、lispでプログラミングし、そのほかおよそすべての作業を行なっていた。

それはそうと、XVoiceの経験から言えば、普通の人間にとっては、コンピューターを声で操作するのは楽しいことであるが、日常的に使う人間は、それ以外に選択肢のない人間だけである。一日数時間発声し続けるのは肉体的に難しく、どんなに賢い文法をこしらえようとも、これ以外に方法がない場合のみ、仕方なく使う機能だ。頸髄損傷を起こした何人かの利用者がこのシステムを使って、ある程度の成功を収めていた。彼らにとっては、Unixマシンを操作する方法は、XVoiceだけなのだ。この認識は、プロジェクトの将来の方向性を明白にした。我々は、タイプできないか、あるいはタイプに相当の支障がある人間を助ける機能を重視したのだ。

プログラミングのプロジェクトとして、XVoiceを開発するのは最高だった。私は自分よりはるかに経験や能力のあるプログラマーから、多くのことを学んだ。最終的には(Version 0.9.6だったと思うが)、とてもクールなプログラムになり、コンピューターを操作する必要のある人たちに使われていた。我々はボイスコントールのGUIのいくつかの問題に対処した。コマンド文法はとても洗練されていて、拡張性の高い仕組みだ。かえりみるに、ほとんどの興味深い開発は、よりよく幅広い文法集を構築することに集中していた。

突然の終了

残念ながら、IBMはLinuxにおけるViaVoiceに、それほど興味を持っていなかったようだ。我々は開発者と何度か意思疎通をしたが、彼らは協力的であった。しかし、「公式」のIBMの人間は、Linuxサポートを続ける計画について、何も話さなかった。彼らの唯一の連絡事項は、XVoiceの関連サイトで、XVoiceをViaVoiceとともに配布しないようにしろというものだけだった。XVoiceは、別に購入しなければならなかったのだ(もちろん、我々はちゃんと購入した)

ある日、IBMはLinuxにおけるViaVoiceを打ち切ってしまった。単に、Webサイト上から消えてしまったのだ。その時、ViaVoiceのかわりに使えるオープンソースの音声認識エンジンとしてはCMU Sphinxがあるぐらいだったが、あまりよろしくなく、容易に解決できない問題も山ほどあった。プロジェクトの主要な開発者達は、趣味で開発しており、XVoiceの開発にしばらく参加できないこともしばしばあったので、プロジェクトの開発速度ははかばかしくなかった。

考察

たまに、音声認識に関する記事、特に操作システムに関するものを読むたびに、XVoiceをオープンソースのエンジン向けに作り直したいと思う。オープンソースにせよ、そうでないにせよ、音声でしか意思疎通ができない人たちに対する決定的な解決策が、いまだに存在しないのは、とても残念なことだ。多くの技術系の大企業各社は、アクセシビリティに関してうわべのいいことを言っているが、この問題に関しては、巨人達はなにもやっていない。

将来

思うに、汎用的な認識精度の高い音声認識エンジンと、アクセシビリティを目指した音声操作システムは、明確に分けて考えるべきである。音声による完全な操作は難しく、汎用的で巨大な音声操作システムだけで解決できる問題ではないだろう。アクセシビリティに注力し、実際にアクセシビリティに問題を抱えている利用者と相談して、ともに作業して乗り越えて行かなければならない問題である。音声操作システムを開発しているのであれば、注目が薄れて喉元過ぎ去った後でも、そのソフトウェアを使い続けなければならない利用者のみが、本当の利用者だということを肝に銘じるべきである。最後の数カ月、XVoiceが注力したのはその点で、解決しなければならない厄介な問題は多かったが、それこそやりがいのある仕事であった。

XVoiceや、その他の音声操作システムの根本的な機能は、文脈に特化した文法を、音声認識エンジンにすぐに流し込めるということである。エンジンの内部的な精度は、文法が十分に構築できれば、それほど問題ではない。最近のエンジンは、どれも悪くないだろう。しかし、私の知る限り、HTML5の実装による音声入力は、文法設定をサポートしていない。CMU Sphinxはサポートしているらしいが、どの程度動くのか分からないし、設定ファイルはやたらと複雑だ。

XVoiceのコードはGPLであり、Sourceforceと、GitHubにある。dどうかいじくり回して欲しい。私が関わっていたのは、今を去ること十数年前だが、ドキュメントは実際なかなかいいし、コードは危惧していたほど読みにくいわけではない。ほとんどがRAII以前のC++なので、クリーンアップして、スマートポインターを使うように置き換えるなどして、近代的な水準に引き上げる必要があるだろう。プロジェクトの復活は望めないとしても、コマンド文法のアイディアや構造は、他のプロジェクトに役立つかもしれない。Xイベントを生成する部分のコードは再利用できるかもしれない。モジュールのサブディレクトリに文法のサンプル集がある。読めば面白いだろう。netscape用のものまであるのだ。懐かしいなぁ。

教訓としては、不自由なソフトウェアに依存してはならないということだ。

No comments: