カテゴリー
galatea

音声合成エンジンとライセンス

私のブログにさっそく匿名のコメントをいただきました:

>再配布不可のUniDicを使ってるからオープンソースの意味ないです
>お金払うなら高性能な他の有料合成エンジン使います

どこかでこの件について書きたいと思っていました。私としては、こういう意見をたくさんの方に出していただけると、問題が明確になってよいと思います(匿名ではない方がよいですが)。

Unidic は形態素解析用の日本語辞書です。無償で利用できますが再配布については制約があります。Unidic のライセンスについては、例えば修正BSDのようなライセンスにしてもらえないか、とお願いしたことがあるのですが、変更できないとのことでした。

現状で単語のイントネーションに関する情報は unidic でしか得られないこともあり、これまで Galatea は unidic の最新版に追従する形で開発が続けられてきました。

Galatea プロジェクトの開始当初は unidic のライセンスは現在の形で明確になっていませんでした。音声対話技術コンソーシアムというプロジェクトの成果として、現在の構成での配付を行っていますが、再配布に関する御意見はこれまでもずっといただいております。

まず unidic 1.1.0 (Unidic が現在のライセンスになるまえに、「IPA2002版」の一部として配付されたもの)へのバックポートの可能性を検討しています。現在の unidic と品詞体系が変わっているので、gtalk および chaone も過去のバージョンに戻すか、unidic 1.1.0 の品詞体系に合わせて最新のエンジンにパッチを当てる必要がありそうです。時間がかかりそうであることと、性能を保証しにくいので、とりあえず現在のバージョンを公開しています。要望が多ければ頑張ってみたいと思うのですが。

unidic を使わない方法については例えば「島根県CMS」で ipadic (現在はnaist_jdic)への差し替えを行ったものなどがあります。これも「IPA2002版」に対する非公式なパッチがベースです。

私は技術的な実験についてはお手伝いできますし、私自身も音声合成を使った研究やソフトウェア開発に関してやりたいことはあるのですが、sourceforge はオープンソースコミュニティですので、多くの人に汎用的に役立つように意識しながら、個別の問題を解決することが望ましいと思います。

ライセンスの問題も大事なのですが、エンジンとしての性能が、商用の技術と比べて、だんだん見劣りしてきていることも問題です。Unidic のアップデートによって必ずしも音声合成エンジンの読み付与精度が上がっていない、という指摘もあります。

もっと幅広くオープンソースの音声合成技術を概観するとき、 espeak や festival のような多言語化を前提として作られた技術と比べて日本語だけが孤立していることも気になります。オーディオデバイスのインタフェースについても PortAudio ライブラリが普及したり、Linux と Windows いずれについても新しいAPIへの移行が進んでいたり、技術を取り巻く環境は常に変化しています。Mac OS X への対応もまだ実現されていません。

先ほどNVDA日本語化プロジェクトのミーティングに出席してきました。以前から NVDA に組み込むことができる日本語TTSとして GalateaTalk の検討を続けてきたのですが、GPL で配付されている NVDA は現状の GalateaTalk を同梱して配付する目処が立ちません。espeak エンジンの日本語化を真剣に検討してはどうか、などの議論を行いました。

私のブログでは繰り返しになりますが、オープンソースプロジェクトが社会的に受け入れられるためには、単に商用ソフトにお金を払いたくないから、といった動機ではなく、「既存のビジネスを破壊しないこと」が重要だと思います。

スクリーンリーダである NVDA の存在意義の一つは、Web開発者にアクセシビリティの問題を幅広く認知していただくことです。JIS X-8341-3(ウェブコンテンツアクセシビリティガイドライン)の改訂作業が進んでいますが、この分野ではコンテンツの対応と支援技術の対応が連携していなくてはなりません。視覚障害の当時者でない方も含めて、多くの方が「新しい標準に準拠した支援技術」を手軽に入手できる環境が必要です。そうでないと、標準化作業が完了しても、「誰も実際に使うことができないから」という理由で形骸化してしまいます。特に国際協調が必要なWeb技術において、日本だけが技術の進歩に取り残されるのはとても不幸なことです。そのような背景から、Web コンテンツ JIS の改訂に取り組んでおられる方々は NVDA に期待しています。「少なくともNVDAは対応しているから新しい標準に対応してください」とアピールしたい、というわけです。

Galatea プロジェクトへの要望や批判的な御意見は歓迎です。しかし、ただ批判していただくだけではなく、論理的で客観的な議論のための材料を求めたいと思います。「ライセンスに対して何のためにどういう要求があるか」「何のために、どういう機能や性能のものが必要なのか」「現在使えるリソースは何か」「どう具体的なアクションを起こすか」など、建設的な議論が必要です。今後ともよろしくお願いします。

カテゴリー
galatea

オープンソースと経済活動

擬人化音声対話エージェントツールキット Galatea Toolkit は、広く人間と機械の音声対話の技術を開発・普及するべく、以下の特長を持つ技術として開発されました。

  • 人間の顔と表情を持ち、音声で対話するエージェントを作成できる
  • 顔、声、音声合成テキスト、認識文法、対話の流れなどがカスタマイズ可能
  • 構成要素(音声認識、音声合成、顔画像合成など)を別々に利用できる
  • オープンソース、無償で利用でき、商用利用も可能

Galatea Project では2000年~2002年度に情報処理技術振興協会(IPA)の支援 (2000, 2001年度 独創的情報技術育成事業、2002年度 重点領域情報技術開発事業) を受け、財団法人京都高度技術研究所 (ASTEM) とIPAの契約の元に、主に大学の十数名の研究者が協力して開発を行ないました。この成果は2003年に「IPAライセンス版(galatea-linux-ipa および galatea4win-ipa)」としてリリースされました。現在は sourceforge.jp にプロジェクトのサイトを開設しています。

西本個人も関連する技術情報を提供しています。

2003年11月から2009年3月まで、情報処理学会 音声言語情報処理(SLP)研究会のもとで音声対話技術コンソーシアム(ISTC) が活動を行い、このツールキットの改良を行いつつ、技術講習会などを行いました。この期間の成果は「IPAライセンス版のアップデート」という形でのリリースを予定しています。

この活動にずっと関わってきた私は「オープンソースプロジェクトであることの意味」を改めて考え直しているところです。

すでに商用の音声合成エンジンが複数存在します。一方で、商用のエンジンに依存せず行いたい研究開発や標準化検討などの活動は重要です。

例えば、スクリーンリーダや音声ブラウザなどのアクセシビリティ支援技術は、そもそも市場が小さく、ビジネスになりにくい、だから、こうした技術に使われる音声合成エンジンが無償であることに意味がある、という意見も頻繁に伺います。

一方で、ビジネスになるかどうかは「やり方次第」であり、既存のビジネスを破壊することが一方的な正義であってはいけない、という立場も納得できます。

私はオープンソースを「オープンプロセス=開発プロセスをオープン化した結果として生じる成果」と捉えています。オープンソースの発展は、「インターネットの速度感」に「ソフトウェア開発の速度感」が追いついてきた過程だと思います。その意味で、例えばCVSからGITへとオープンソフト開発のモデルが進化したことを好ましく思います。

また、いわゆるフリーソフトであることを保証するライセンスとは、利用、配付、改変に関する「コミュニケーションのコスト」を不要にするシステムと捉えています。

オープンソースソフトウェアでビジネスを行っていただくことは有意義だと私は考えています。既存の市場の構造にとらわれない枠組みを実現することは、新しいビジネスモデルの創出につながると期待できるからです。

例えば Galatea Toolkit は経済産業省の外郭団体であるIPAから支援を受けており、これは「いずれ経済活動に貢献せよ」という趣旨の支援であったと私は考えています。実際「IPAライセンス版」のツールキットは成果がどのように製品化されているか完全には把握できていませんが、「どこどこのなになには GalateaTalk の合成音声らしい」という話はときどき研究者同士で語られています。

一方で、プロジェクトの目標が野心的であればあるほど、研究開発には時間がかかります。Galatea Toolkit が本来の目標を達成するためには、技術や世の中の動向を正しく把握しながら、「売り物になる技術」に向かって進化させていく必要があります。企業に取り組んでいただくにはリスクがあります。研究者が本務の合間に取り組む活動としても限界があります。

この6年間はコンソーシアムという形で活動をさせていただきました。会員の方から多くの御意見を伺うことができ、有意義ではありました。しかし、一方で、コンソーシアムの外部の方から具体的な御要望や依頼をうけたときに、個別に対応させていたくための組織としては若干不適切のようにも感じました。

例えば、コンソーシアムが開発に関わり、会員向けに配付しているソフトウェアがあるとします。そしてこの技術をベースにある企業が独自に仕様を作って製品を開発したいとします。ベース技術の提供を受けるために会費を払っていただいてコンソーシアムの会員になっていただいたあとで、さらに「カスタマイズについて相談したい」という場合には「ベース技術に詳しい研究者・研究機関と個別に相談」ということになります。そのようなサービスを提供するにあたっては、守秘義務契約なども必要です。新たに技術者を探して作業を依頼する場合もあるでしょう。

今後の Galatea Toolkit について、私の立場で、こういったサポートを提供する一つの選択肢は、共同研究だと考えています。不自然な枠組みという気もしますが、自分の就業規定と「利益相反」という問題をクリアするにはやむを得ません。

具体的には、企業の方に、私の所属(東京大学)と共同研究契約を結んでいただき、私から情報提供や技術支援などのサービスを提供することが可能です。必要に応じて、さらに適切なパートナーをご紹介することもありえます。予算については(下限の規定がないので)柔軟に対応できると思います。ただし成果の帰属や公開等について、大学の基本方針に従った契約を結んでいただく必要があります。

もう一つの可能性として、これまで述べてきた趣旨の活動を遂行する非営利組織の設立が考えられます。具体的には、以下のような考え方の組織です:

  • オープンソースソフトウェア開発に貢献する
  • 用途をなるべく限定せず、多様な応用に対応する技術を育成する
  • オープンソースソフトウェア技術によりビジネスや雇用を創出する
  • 技術の非専門家、ユーザの視点でサポートを行う
  • 秘密保持、知的財産権管理などを適切に行う
  • 商用ソフトウェアに関する既存のビジネスを破壊しない
  • 大学等の研究者にとって望ましい協力関係を構築する
  • 既存のプロジェクトとの活動の重複を避ける
  • 運営や活動方針などの情報を積極的に公開する
  • 自発的に(楽しく)活動する

もう少し活動の内容を具体的に挙げてみます:

  • ソフトウェアの配付、カスタマイズ用データの提供
  • サポート、カスタマイズ、講習会などの業務
  • 技術情報の提供・執筆
  • 事業者、研究者、開発者などの仲介

後者は最近読んだ藤井孝一さんの「週末起業」 (ちくま新書)からヒントを得ました。大学に所属して研究と教育以外のことをするのは「週末起業」に似ているように思えて、興味深く感じます。

「ビジネスの手法で社会に貢献する方法」については、最近考え始めたばかりです。いろいろな立場の方の御意見を伺おうと思っています。既存の組織を活用させていただく場合にも、上記の考察を踏まえて検討をするつもりです。

自分の関わってきた技術を形にすることについて、これからもいろいろ考えたいと思います。

カテゴリー
galatea

音声対話技術講習会

高度言語情報融合フォーラム http://alagin.jp の主催による「音声認識・音声対話技術講習会」が先週京都大学で開催され、私は最終日(8月28日)の演習を担当しました。

京都工芸繊維大学の荒木先生が講義された内容をふまえて Galatea Dialog Studio による VoiceXML アプリケーションの開発を体験していただきました。

これに合わせて、Ubuntu Linux をベースに Galatea の Live 環境を作成しました。ハードディスクを消去することなく、CD-ROM や USB メモリから OS を起動し、実習を体験していただくことができます。さらに、実習直前に発見されたDialog Studioの不具合を修正しました。詳細は下記をご参照ください。

受講者の方から、マルチモーダル入出力への対応、Windows 版 Interaction Builder との仕様の統合についてご意見をいただきました。これらについては、重要性を認識していながらも、今年3月まで活動した「音声対話技術コンソーシアム」で成果をまとめ切れなかった課題です。

私に直接お問い合わせをくださる方もおられます。例えば Vine Linux 5 での動作についてお問い合わせをいただき、検証をすすめています。また、Galatea Toolkit を使ったアプリケーション開発についてのご相談もいただいています。

今後 Galatea ユーザというコミュニティの形成を目指し、例えばメーリングリストの活用を考えています。

現在 Galatea の開発は予算や組織の裏付けがなく、ボランティアベースで行われています。従って、できるだけ多くの課題について、利用してくださる方に参加していただき、オープンソース活動として研究・開発をする必要があります。

ただし、成果の公開が望ましくない、というご要望については、開発者が所属する大学等との共同研究などで個別に対応できます。一方で、これらのツールのサポートを営利事業として行う組織が必要ではないか、という考えもあります。ご意見をお聞かせください。

カテゴリー
galatea ruby

島根県CMSの技術

「島根県CMS」はRuby on Railsで作られたオープンソースソフトウェアの行政機関向けCMSです。このシステムの中で音声合成エンジン GalateaTalk がどのように使われているかを理解し、今後どのように改良のお手伝いをしていくべきなのか考えたいと思っています。

以前「島根県CMS」について日記を書いてからずいぶん時間が立ってしまったのですが、やっとソースを眺めたり動かしてみたりする作業に手を付けました。配付パッケージに書かれているインストールの手順は複雑そうなので、あえてひねくれて手順を逸脱しながら作業してみることで、ちょっとでも内部の仕組みを明らかにできればと思います。

作業環境はUbuntu Linux 9.04です。

カテゴリー
galatea

checkinstall

最近、簡単に .deb パッケージを作るツールの存在を知りました。

さっそく galatea で使用しています。

GalateaTalk で使っている言語処理系 /usr/local/istc をパッケージにする例です:

準備

作業環境は Ubuntu Linux 8.10

$ sudo apt-get install checkinstall

目標

  • /usr/xxx にインストールするための .deb を作る

準備

  • インストールするコマンドを確認。ここでは sudo ruby setup-morph.rb だとする。
  • mkdir istc-galatea-morph-20090216 のようにパッケージ名とバージョン番号をつなげたディレクトリを作り、その中で作業するとスムーズ。

作業

$ sudo checkinstall ruby setup-morph.rb

いくつかデフォルトから変更。

管理者: nishimoto@m.ieice.org

ライセンス:ISTC

パッケージ名: istc-galatea-morph

  • パッケージが作成され、インストールが行われる。owner が root なので sudo chown しておく。

完成したパッケージのインストール

$ sudo dpkg -i istc-galatea-morph_20090216-1_i386.deb

$ ls /usr/local/istc

chaone-1.3.2-istc chasen-2.4.1-istc unidic-chasen139_eucj

カテゴリー
galatea ruby

リリースノートとチュートリアル

sourceforge.jp の galatea プロジェクトの wiki サイトに、3月に配付される予定の Galatea Toolkit リリースノートとチュートリアルの草稿を公開しています。

チュートリアルでは Ruby on Rails を使う具体的な例を掲載しました。

カテゴリー
galatea ruby

テンプレートの階層

音声対話ツールキット Galatea のプロジェクトに関わり、マルチモーダル対話記述・アーキテクチャの標準化に関わり、Ruby on Rails による VoiceXML アプリケーションの実装について考えた末、「階層化されたシステムの実装は、テンプレートエンジンの階層になる」と思うようになりました。

Webアプリケーションのフレームワークの多くがテンプレートエンジンを提供しています。いくつもの階層でそれぞれに記述の標準化を行っていることのメリットは十分にありますが、記述が冗長になるというデメリットもあります。テンプレートエンジンはこうした問題を解決する一つの手段です。

音声対話技術コンソーシアム(ISTC)では、音声入出力、GUI入出力などを有するインタフェースシステムについて、各階層でのインタラクション記述仕様の標準化について検討を行い、いわゆる Model/View/Controller の構造をさらに詳細化した6階層を提案しています。

私が開発を続けている Galatea Dialog Studio という対話制御エンジンについて考えると、いくつかの階層は Ruby on Rails のMVCフレームワークに対応していると考えられます。また、いわゆる Web アプリケーションをまず実装して、HTML に依存するレイヤーだけを VoiceXML に差し替える、という音声対話システムの実装も、妥当な手法になると思います。

Galatea Toolkit の Linux 版について、インストールや設定の難しさという課題が残っています。当初の設計によって各モジュールを統合することに成功しました。しかし、カスタマイズやデバイス設定が必要な場合に、現時点では、多くの箇所を矛盾なく変更する必要があります。

インタラクション記述ではないものの、各階層を動作させるためには、それぞれ必要なパラメータや設定情報があります。例えば音声合成であれば、言語処理や話者モデルのリストを与える必要があります。音声認識についてはオーディオ入力、音声検出、音響モデルなど数多くのパラメータが存在します。これらの設定を Galatea Toolkit で統合的に扱いたいと考えています。設計していくとこれはやはり「テンプレートの階層」になりそうです。

具体的には、以下のようなアーキテクチャで実装を進めています。

  1. システム領域にインストールされるファイルやツール
    • 汎用的なエンジンやファイル
      • プロジェクトファイルのテンプレート
      • 実行時ファイルのテンプレート
    • パスを固定してインストールする必要があるツール
    • プロジェクトを生成する galatea-generate コマンド
  2. ユーザ領域にプロジェクトファイルとして生成されるファイル群
    • config ディレクトリ
      • システム設定ファイル: システム領域の path などを参照する
      • プロジェクト設定ファイル:プロジェクト固有の設定
    • 拡張モジュール用ディレクトリ:プロジェクト固有のモダリティ拡張など
    • log / tmp 用ディレクトリ
    • runner スクリプト
    • プロジェクトの編集を支援するスクリプト
    • 対話アプリケーションサーバ:例えば rails のプロジェクト
  3. 実行時に生成されるファイル群
    • システム領域のテンプレートとプロジェクト設定ファイルに基づいて生成

これらをできるだけ Ruby on Rails の作法に馴染むように設計を行っています。

私は Rails に触れる前に、Java で簡易テンプレートエンジンを実装してみたり、PHP や Perl のテンプレートエンジンを使ったりしましたが、インストールが面倒であったり、テンプレートエンジン独自の記述言語を使用していたり、といったところに不満を感じました。

Ruby が ERB というテンプレートエンジンを標準で備えていて、ERB の中で Ruby 言語そのものが使用できる、自作の Ruby スクリプトから簡単に ERB の機能が利用できる、ということに、好感を持っています。

VoiceXML ブラウザと HTML ブラウザは完全に等価な位置づけと見なせない部分がいくつかあります。またモダリティを使い分けるのではなく組み合わせる場合にはさらに考慮が必要となります。どの階層をどのように補っていくべきか、今後システム実装の経験を踏まえた提案をしていきたいと考えています。

カテゴリー
galatea

顔モデルのカスタマイズ

合成音声や顔画像合成のカスタマイズができるのが Galatea の特長のひとつなのですが、カスタマイズされたモジュールを連携させて制御するためには、対話統合処理においても設定が必要です。これらの設定を統一的に管理する枠組みは、残された課題のひとつになっています。

昨日から今日にかけて Galatea for Linux (2008年8月版)をお使いの方と以下のやりとりをしました。

質問:

linux/bin/FSM/data/config.txt を下記のように myself を付け加えて、linux/bin/fsm を実行し、

set Mask = myself

と打てば、自前で作成した顔を表示してくれるのですが、

cd linux/bin/DM2
./galatea tests/vxml/ticket.vxml

にて、

<native>to @FS-MCL set Background = myself bg1</native>
<native>to @AM-MCL set Mask = myself HAPPY 100 0 0 0</native>

のように変更すると、

Exception in thread "main" java.lang.NullPointerException
at galatea.agent.BehaviorManager._handleSet(BehaviorManager.java:319)
at galatea.agent.BehaviorManager._iteration(BehaviorManager.java:425)
at galatea.agent.BehaviorManager.run(BehaviorManager.java:453)
at galatea.agent.BehaviorManager.main(BehaviorManager.java:531)
finalize_CHLD at ./AgentManager-gdm.pl line 455.
LOG: AM: finalize()
finalize_PIPE at ./AgentManager-gdm.pl line 459.
LOG: AM: finalize()
print() on closed filehandle GEN7 at /usr/lib/perl5/5.8.6/i386-linux-thread-multi/IO/Handle.pm line 399.
print() on closed filehandle GEN12 at /usr/lib/perl5/5.8.6/i386-linux-thread-multi/IO/Handle.pm line 399.

と、落ちてしまいます。

回答:

java.lang.NullPointerException で落ちてしまうのは明らかに不適切なので、実装の不備をお詫びしたいと思います。

また、本件に関連するシステムの実装を以下にご説明します:

まず

to @AM-MCL set Mask = myself HAPPY 100 0 0 0

を解釈しているのは AM-MCL.rb という Ruby スクリプトで、

の do_set_mask メソッドで FS-MCL に set Mask を送ります。

つぎに FS-MCL = BehaviorManager.java についてご説明します。

このモジュールは Galatea FSM の Autonomous 動作の自然性や頭部運動のなめらかさなどを補うために Java で実装されています。

jar ファイルとしては DialogManager クラスと同じですが、AgentManager からは別々の java インタプリタとして実行しています。

このモジュールに与える情報は Java のリソース形式で記述されており、

DM2/skel/gdm.conf

に以下のように記述されています。

# for BehaviorManager
Behavior.DefaultAgent   :woman01
Behavior.NumAgent           :3
Behavior.Agent.1            :woman01 woman01 female01 bg03 1.2
Behavior.Agent.2            :man01   man01   male01   bg01 1.2
Behavior.Agent.3            :man02   man02   m001     bg02 1.6

引数の内容は Agent クラスのコンストラクタの引数に対応しています:

String mask, String speaker, String bg, double scale

= FSM の顔モデル名、SSM の音声話者モデル名、FSM の背景名、FSM の顔の大きさの正規化パラメータ

例えば Behavior.NumAgent : 4 にして、

Behavior.Agent.4            :myself   myself   myvoice     bg01 1.0

のように追加記述していただくと、FS-MCL に新しいエージェントモデルを教えることができます。

FSM の config にモデルを追加する必要がありますが、これについては、DM2/skel の中にある雛形ファイル

を変更してください。これを実行時に ~/.galatea にコピーして使います。

あわせて DM2/Modules/AM-MCL.rb に、myself の追加が必要です。(この部分はスクリプトにハードコーディングされているので改善が必要です)

@agents["man01"]   = Agent.new('man01',   'male01')
@agents["man02"]   = Agent.new('man02',   'm001')
@agents["woman01"] = Agent.new('woman01', 'female01')
@agents["myself"] = Agent.new('myself', 'male01')

なお、skel/gdm.conf は次期バージョンでは Ruby のテンプレートエンジン ERB を用いて

のように変更する予定です。

また、上記のカスタマイズに関してもシステム全体の入口である “galatea” スクリプトにて、各モジュールのコンフィグレーションを一元的に記述できるようにしたいと考えております。

具体的には ~/.galatea/config.yml のようなファイルに統一的な記述を行い、このファイルが存在しない場合は雛形ファイルを生成する、といった処理を導入する計画です。

カテゴリー
galatea

Julius の「デコーダに基づくVAD」

音声認識エンジン Julius 4.1 に関する記録。

「デコーダに基づく VAD は,デフォルトでは無効化されており,使用するにはコンパイル時に configure オプションで –enable-decoder-vad を指定し,実行時に -spsegmentを指定する」だそうです。

$ sudo apt-get install cvs flex libdb-dev
$ cvs -z3 -d:pserver:anonymous@cvs.sourceforge.jp:/cvsroot/julius co julius4
$ cd julius4
$ sh configure  --enable-decoder-vad
$ make

ということで現在 Galatea Dialog Studio にて評価中です。

カテゴリー
galatea ruby

ERBとインスタンス変数

Rails の View のようなテンプレートエンジンを ERB 単体で使う例。

詳しい説明はあちこちで見かけたのですが私が確認したかったポイントに絞ってみました。

#!/usr/bin/ruby
require 'erb'
erb_doc = <<EOS
hello world 1
<% 1.upto(3) do |i| -%>
<%= @hoge %>:<%= i %>
<% end -%>
hello world 2
EOS
class MyTemplate
def initialize
@hoge = 123
end
def result(script)
ERB.new(script, nil, '-').result(binding)
end
end
puts MyTemplate.new.result(erb_doc)
# hello world 1
# 123:1
# 123:2
# 123:3
# hello world 2