NVDA jpdev100909

やっと NVDA に音声合成エンジンが搭載され、開発版としてリリースされました!!

今日と明日はオープンソースカンファレンスというイベントでデモをしています。私は明日参加して、夕方のライトニングトークに出ます。

メーリングリストでさっそく動作報告、御要望などいただいています。1週間前にやっと最低限の動作をするようになったエンジンが、皆様のマシンで動いているとお知らせいただき、大変嬉しく思っています。

読み上げが始まるまでの遅延や、速度などの設定変更がない、という問題は私も承知しています。すこし時間をいただければ幸いです。
音声エンジン以外の機能との役割分担を整理する必要がある部分は、開発メンバーで話し合って検討したいと思います。

この機会に、特に、音声エンジンに関する作業方針について、私自身の考えをお伝えしておきます。

私自身はアクセシビリティや音声技術の研究を本業としております。今回組み込んだエンジンはもともと Open JTalk(New BSDライセンス)というもので、音声技術に関するプロジェクトでご一緒してきた研究グループの最新成果(GalateaTalkの関連技術)です。私は本家のメンバーと連絡を取りながら今回の作業を進めています。ちなみに現在使っている声はその研究室の卒業生の方の音声とのことです。

限られた作業時間の中で、商用ソフトウェアのように多くの御要望にお応えすることは難しいかも知れません。しかし、いただいた御要望、不具合報告、御提案をきちんとデータベース化して、なるべく対応したいと思っています。

音声エンジンについては、何か読みのおかしいところを場当たり的に修正すると、これまで正しく読めていた部分に悪影響が及ぶ、ということがあります。テストの手順をまとめて環境を整備することは重要です。
矛盾が起こらないように時間をかけて慎重に作業させていただく場合もあります。「簡単なことが、なぜすぐに直せないのか」とお思いのことも
あるかも知れませんが、もし疑問があればご説明しますので、御了承いただければ幸いです。

私からなにか NVDA に関する改良の提案をさせていただき、ユーザの皆様にご評価いただき、私の研究に御協力いただく、といったお願いをすることがあるかも知れません。もちろん、その場合は事前にお許しを得たいと思います。

それから、デイジー書籍の作成支援ツールに使える音声合成が欲しい、という問い合わせも、私個人に対していただいています。今年の春にスタートしたサピエというシステムの立ち上げを、私もすこしだけお手伝いしています。JTalk エンジンを NVDA で鍛えていただいて、いずれデイジーでも活用していただけるように、と考えております。

  • 2010-09-11: OSC参加は無事に終了しました。なお、Open JTalk に関する記述を一部訂正しました。

NVDAのための音声エンジン

NVDA日本語版は先日「ベータ版」という形で新たに公開されました。
http://accessibility.mitsue.co.jp/archives/000256.html

ベータ版に間に合わなかった音声エンジンの方を私が頑張ってるところです。。
8月末までにNVDAのための音声合成をやると宣言したのですが、とうとう今日で8月も終わりです。

New BSD ライセンスで公開されているエンジン Open-JTalk を Python から ctypes 経由で叩けるようにする作業を進めてきました。
さきほどやっと speak や stop などの基本コマンドが動くようになりました。

いまのところ成果は github の私のレポジトリにあります:
http://github.com/nishimotz/libopenjtalk
この中の lib というサブディレクトリが DLL 関連です。

cygwin gcc-3 の minGW 互換モードで DLL を作っています。
Python は cygwin 版 2.5 と Win32 版 2.6 の両方でチェックしています。
(ただし後述の nvwave.py の制約で cygwin 版 2.5 には非対応になりました)

ただし、技術的な制約で、open-JTalk に組み込まれている mecab (形態素解析エンジン)を使わず、単独で配布されている Win32 版の mecab DLL を組み合わせて使っています。(そのほうがライセンスも管理しやすいはず)

今後の拡張性や保守性を考慮して、オリジナルのエンジンが main 関数でやっている処理を python でほぼ実装しなおしました。
もともと Open-JTalk は HTS_Engine_API の中でオーディオ出力を行っていたようです。しかしスクリーンリーダのためには(音声対話システムであっても)「再生中の音声を自由に止める機能」が必要であるため、HTS_Engine_API 側のオーディオデバイス処理は(configureのオプションで)無効化しました。

ctypes でポインタやダブルポインタを渡す処理を苦労して書きましたが、Python 側にバッファのメモリ管理をやらせるとハマりやすい、ということが分かったので、DLL 側で malloc のラッパー関数を作ってごまかしつつあります。あとでメモリリーク対策が必要になりそうですが。。

NVDA が espeak の中でどのようにオーディオを叩いているかも調べました。(ctypesの参考になりました。。)
http://ja.nishimotz.com/espeak

Windows マルチメディア API で音声出力する部分が nvwave.py という Python のコードでコールバック処理もふくめて実現されています。
驚きでした。
この NVDA 的なやり方を見習って jtalk.py の実装を行いました。ただし DLL から音声波形をコールバックで受け取るのではなく、生成された波形をまとめて nvwave の player に渡しています。
この _espeak.py の実装では、メインスレッドとバックグラウンドスレッドでコマンドキューを共有し、バックグラウンドのスレッドがキューの再生を行っています。さらに stop 命令を受け取ると、キューの中で「時間がかかる処理」だけを削除し、モードの切り替えなどの処理はキャンセルしないで順次実行する、ということになっています。
このような処理は私が「ウチコミくん」で最初に Visual Basic Ver.6 で実装し、そして Galatea Dialog Studio でも実装したものです。
懐かしいような嬉しいような気もします。
そして Python という言語の奥の深さを感じます。

残った仕事は synthDrivers を継承して NVDA 用のドライバークラスを書くことです。
スクリーンリーダーに統合して、安定して動けばいいのですが。。

今回つくった音声合成エンジンでは、かなり多くの部分を Python で実装してあるので、例えば文字列の前処理くらいなら簡単にカスタマイズできそうです。

明日の夜は久しぶりに NVDA 日本語化プロジェクトの開発ミーティングです。

人工知能学会全国大会

人工知能学会全国大会(第24回)で「学会・研究会の情報保障におけるソーシャルネットワークの役割」(1D3-1)という発表をしてきました。
スライド(最終版の一つ手前の版)も公開しています。
福祉情報工学研究会での経験を踏まえて考えた個人としての見解でしたが、直前に作ったビデオ(GoogleWaveと音声認識による字幕配信の可能性)について、いろいろな人に興味をもっていただいているので、これから実験を進めたいと思っています。
“人工知能学会全国大会” の続きを読む

Galatea Toolkit 近況

ヒューマンインタフェース学会誌2010年5月号の掲載に向けて、京都工芸繊維大学の荒木雅弘先生と共著で「音声対話システムの開発方法論とプラットフォーム」という記事を執筆しています。
誌面の都合もあり Galatea Dialog Studio(Linux版)の簡単な紹介(すでに sourceforge の wiki に書いた内容の短縮版)のみを、具体的なツールの説明として挙げています。

これから1ヶ月くらいの間に、sourceforge で公開しているソフトウェアや情報について、未着手の作業に取り組む予定です。皆様から御提案や御助言いただけることがあればお知らせください。

それから、私個人の情報発信としては、Windows 環境で GalateaTalkJulius のソケットインタフェースをPython からアクセスするラッパーを書き始めています。

現在の Galatea Dialog Studio はいろいろな機能を Java で作り込んだものの、全体構造の見通しが悪く、メンテナンス性に問題があると自分自身で認識しています。

Galatea Project の初期に Perl による AgentManager として例えば「オウム返しスクリプト」が実装されたのですが、こういう基本的なことを再考しつつ、部品としての利便性にも配慮して次の段階の活動を模索したいと思っています。

この他にやろうと思っているのは各モジュールの Mac 対応だし、実験としては FSM を iPhone OS で動かしてみたいと思っています。(iPadはエージェント対話システムの手頃なデバイスになりそうなので)iPod Touch アプリの開発環境は揃えたんですけどね。。

2月末に東京近郊で開催されたオープンソースカンファレンスに参加して様子を見てきました。細々とでもこういう場で Galatea Toolkit をアピールするのもよいかなと思い始めています。

ソフトウェア公開とライセンス

ソフトウェアの公開とライセンスに関して議論をする場があったので、気づいたことや感じたことを書いておきます。

例えば Linux 用の一般的な(glibcを動的にリンクしている=LGPLが適用される)実行バイナリを、登録者だけが利用できるように、ダウンロードサイトにパスワード保護をかけたり、ZIPファイルにパスワード暗号化をかけたりすることは、LGPLに違反する恐れがあるそうです。
だとすると過去にGalatea Toolkitを配付した際にも不適切な状況があったかも知れません。。
“ソフトウェア公開とライセンス” の続きを読む

浅川さんのテレビ番組

NHKテレビで浅川智恵子さんのお仕事の様子が取り上げられていました。
「ホームページリーダー」の開発者として著名な浅川さんですが「音声読み上げソフト」についての理解が広まるのはよいことだと思います。

ホームページ・リーダー バージョン 3.04
日本アイ・ビー・エム (2001-07-19)
売り上げランキング: 6229
おすすめ度の平均: 4.0

4 ホームページ・リーダー使用感

“浅川さんのテレビ番組” の続きを読む

音声対話技術の普及促進と進化

下記の場で連名で発表をした内容について、西本担当分の原稿をご紹介しておきます。

  • 第78回 音声言語情報処理研究会 (SIG-SLP)(第5回 音声言語情報処理技術デベロッパーズフォーラム)
  • 日時: 平成21年10月23日(金)
  • (5) 階層的MMIアーキテクチャに基づくプラットフォーム実装方法の検討

今後の活動のために新しい組織が必要と考えています。

に公開したマニフェストを随時改訂していくつもりです。

****

3 音声対話技術の普及促進と進化

3.1 Rubyによる対話記述の検討

さまざまな機能を持つWebベースのアプリケーションが広く使われるようになった現在こそ、たとえその一部でも音声インタフェースを介して利用できることの意義は大きい。ブラウザのフォームに情報を埋める作業を繰り返していると、もっと効率よく、あるいは、キーボードやマウスに頼らずに操作したい、と感じるのではなかろうか。

システム記述言語の設計においては、実績のある成功事例(ベストプラクティス)が有用である。我々の6階層アーキテクチャにおける第5~6層(タスク間制御、データモデル、アプリケーションロジック)について、既存のWebアプリケーション開発から借用できる成功事例の一つとして、Rails (Ruby on Rails) に着目している。

VoiceXMLは第5層と第4層の界面に対応しており、これは一般的なWebにおけるHTMLに相当する。Webアプリケーションではテンプレートエンジン(HTML に埋め込まれたスクリプト言語を実行する処理系)が一般的である。

「階層の界面が記述言語に対応し、各階層がテンプレートエンジン処理系に対応する」

という構図は6階層モデルの随所に当てはまる。

テンプレートエンジンにはさまざまな技術や記述言語が乱立しているが、Rails によるWebアプリケーション開発ではオブジェクト指向が徹底され、MVC のすべての要素が Ruby で記述され、一貫性がある。Ruby言語はコードブロックによって手続き型言語と宣言型言語の記述の混在が可能になり、いわゆる「ドメイン記述言語」への流用が容易とされる。Model においては SQL データベースを簡潔な記述で操作できるクラスライブラリがある。View においては HTML にRubyの記述を埋め込むテンプレートエンジン機能(ERB)がある。

RubyによるVoiceXMLアプリケーションの事例は、階層モデルにおける記述言語やアーキテクチャの詳細を考える出発点になるという立場から、Galatea Dialog Studio の開発はRuby on Rails との互換性を重視して進めている。

3.2 知識からの対話生成

音声対話システムによって「どのようなインタラクションを実現すべきか」を議論することは重要である。目標が定まらない段階でアーキテクチャや記述言語を検討するのは時期尚早という意見もある。これまでの標準化活動では、できるだけ先進的なユースケースを取り入れることでこの問題を克服してきたが、ユースケースもやがて時代遅れになる懸念がある。

これに対して、時代遅れになりにくい「抽象的で普遍的な情報構造」に着目して、インタラクションの詳細を後から開発・標準化する、というアプローチがある。多くの実現例が報告されている「一問一答型の対話システム」も一例と言える。書籍のメタファで音声対話コンテンツを記述する提案はこれまでにも行われてきた。

  • Takuya Nishimoto, Masahiro Araki, Yasuhisa Niimi:”RadioDoc : A Voice-Accessible Document System,”Proc. ICSLP2002, pp.1485-1488, Denver, Sep 2002.
  • 西本 卓也, 荒木 雅弘, 新美 康永:”擬人化音声対話エージェントのためのタスク管理機能,”日本音響学会2002年春季研究発表会, 1-5-15, pp.29-30, Mar 2002.

近年「情報提供型の音声対話」の要素技術として注目に値するのは、障害の有無にかかわらず読書ができる環境を実現する「マルチメディアDAISY」

である。その派生技術である「テキストDAISY」はテキスト音声合成技術の新しい応用分野である。ハイパーリンクや検索といった電子書籍の操作手段としての音声対話にも期待が高まる。

3.3 コミュニケーションの効率性

擬人化音声対話エージェント技術は「人間が声で会話したいと感じるような人工物をいかに実現するか」という問題への一つの回答だと考えられてきた。

  • 嵯峨山 茂樹, 西本 卓也, 中沢 正幸: “擬人化音声対話エージェント,”情報処理学会誌, Vol.45, No.10, pp.1044-1049, Oct. 2004.

その目標を真に達成するためには「対人コミュニケーション」を形式的な問題として捉えるのではなく、高品質の映像や音声を高速に制御し、豊かな情報の伝達を可能にし、コミュニケーションの効率性を本質的に高める必要があろう。

エージェント制御に力学や物理学のモデルを取り入れる試み

  • 中沢正幸, 西本卓也, 嵯峨山茂樹:”視線制御モデルによる擬人化音声対話エージェントの制御,”2005年度人工知能学会全国大会(第19回)論文集, 3B2-07, Jun 2005.

音声インタフェースを「実時間の効率性」という観点から構成要素に分解する検討

  • 西本 卓也,岩田 英三郎, 櫻井 実, 廣瀬 治人:”探索的検索のための音声入力インタフェースの検討,”情報処理学会研究報告 2008-HCI-127(2), pp.9-14, Jan 2008.

などはマルチモーダル対話アーキテクチャに今後必要となる視点を与えるだろう。

音声によるインクリメンタル検索

擬人化エージェントの研究から派生したアイディアだが、ちょっと前に作って放置していたデモをビデオにしてみた。

  • 西本 卓也 他: “探索的検索のための音声入力インタフェースの検討,” 情報処理学会研究報告 2008-HCI-127(2), pp.9-14, Jan 2008.

ビデオの作り方に関するメモ。Snagit 9 でデスクトップをビデオキャプチャしたら、ちゃんとマイク入力も取り込んでくれる。VideoStudio 12 で編集。タイトルだけのところは黒の「カラークリップ」で作る。キャプチャした映像は画面サイズが不均一なので、オーバーレイトラックに乗せる。最後は1080×720のWMVに落として、YouTubeにアップロード。

考えていただきたいポイントは「ユーザが入力したいものの名前を言っている間に、常に意味のある反応をし続けること」の効果である。前半ではそれが無効になっており、後半では有効になる。

このこと自体は多くの研究で主張され続けてきたが、具体的な手段についてはいろいろあっていいはずだ。だからこのデモでは「選択肢そのものをつかんで触る」というインタラクションと組み合わせてみた。

スライドと予稿はこちら。

この研究そのものは中断しているが、少なくとも「常に情報を受け取りながら意味のある反応を実時間で行う」という目標は、擬人化エージェントの制御に必要な要素だと考えている。

お弁当を選ぶだけなら話は簡単だが、一般的に「意味のある反応」のための実時間制御を作り込むのは簡単ではない。現在取り組んでいる手法について、近いうちに御報告できると思う。

メーリングリストでの議論

先日、音声対話ツールキット(構成要素として音声認識、音声合成、顔画像合成などを含む)の公開パッケージを更新しました。

galatea-users および galatea-i18n の各MLの皆様にお知らせしたところ、さっそく Windows 版の音声合成に関する不具合の御報告をいただき、開発者にも確認していただいて対応しました。リリース前に不具合を発見できなかったことを申し訳なく思っておりますが、やはり幅広い立場の方に評価していただけることが必要と痛感しました。

Galatea ツールキットはいろいろな構成要素の寄せ集めです。各構成要素のいくつかは sourceforge.jp に別のプロジェクトを持っています。しかし不具合や要望について各構成要素の何が関係しているのか切り分けが難しいケースも多いと思います。そういった場面で「総合案内」として galatea プロジェクト(あるいは私のお手伝い)がお役に立てると思います。

音声合成を取り出して別のアプリケーションと連携させて使いたい、という要望は頻繁に伺っています。galatea プロジェクトは「汎用のツールキット」の整備を目指していますが、「汎用性」に貢献する議論は積極的に行うべきだと思います。その上で、新しいアプリケーションの構想が具体化したら、そのためのプロジェクトを別途設けていくことも必要ではないかと思います。

英語の情報を整備し、ツールキット全体を多言語対応していくことも必要な課題です。これについては galatea-i18n で今後議論を進めていくつもりです。

galatea プロジェクトはチケットシステムも利用しています。不具合や要望の管理に役立てていきたいと思います。

今後もいろいろ皆様の御意見を伺いながら、このツールを発展させていきたいと思っております。