VoiceXMLとRuby on Rails
先日、音声対話技術コンソーシアム(ISTC)総会で、Galatea Dialog Studioについて御報告をして、表題の件についてこんなデモをお見せしました。
# voice_controller.rb class VoiceController < ApplicationController def state1 # counter をセッションで記憶する if !session[:counter] session[:counter] = 1 else session[:counter] += 1 end @regions = { '東京' => 'とうきょう', '横浜' => 'よこはま', '大阪' => 'おおさか', '広島' => 'ひろしま', '京都' => 'きょうと' } end def state2 if params[:region] @region = NKF.nkf('--utf8', params[:region]) end end end
# voice/state1.rxml xml.instruct! xml.vxml "version" => 2.0, "xml:lang" => "ja" do xml.form :id => 'ask' do xml.field :name => 'region' do xml.prompt :timeout => '20s' do xml.text! "#{session[:counter]}番です。" xml.text! "天気を聞きたい地域を、" @regions.each_key { |k| xml.text! k + "、" } xml.text! "から選んでください。" end xml.grammar :version => 1.0, :root => '#region_rule' do xml.rule :id => 'region_rule' do xml.tag!('one-of') do @regions.each_key do |k| xml.item do xml.token :sym => @regions[k], :slot => "region" do xml.text! k end end end xml.item do xml.token :sym => "まいくてすと" do xml.text! "マイクテスト" end end end end end end xml.block do xml.submit :next => (url_for :action => "state2") end end end
# voice/state2.rxml xml.instruct! xml.vxml "version" => 2.0, "xml:lang" => "ja" do xml.form :id => 'answer' do xml.block :id => 'answer' do xml.log "地域=#{@region}" xml.prompt do xml.text! "#{@region}の天気は曇りです。" xml.break end xml.goto :next => (url_for :action => "state1") end end end
VoiceXML処理系とRailsを組み合わせてフルスタックのアプリケーション開発環境を作る提案の最初のステップをお見せしたわけですが、RXML で VoiceXML を書いてみて、すっきりしたようなしないような、ちょっと中途半端な感じです。xml インスタンスにもうちょっと賢いメソッドを追加したら良いのかなあ、などと思案しています。
GalateaTalk と ISTC の今後
ISTC総会では音声認識、音声合成、顔画像合成の各グループの成果報告と次年度の目標なども伺いました。ISTCは情報処理学会の下で活動してきましたが、現在の計画では2008年度が最終年度となっています。
私は Galatea Dialog Studio に加えて Linux 版の統合作業を担当していますが、統合作業のほとんどの部分は GalateaTalk の統合作業になっています。
GalateaTalkは多くの構成要素から成り立っていて、それぞれの構成要素が独立した開発プロジェクトとしての側面を持っています。要素ごとにライセンスや配布許諾などの立場の違いもあります。
そして各プロジェクトは、それ自身が一つの研究プロジェクトでもあり、研究プロジェクトとしてのミッションで開発方針を決めておられる場合もあります。
結果的に「各パーツは公開されておりすべて入手可能だが、組み合わせてブラックボックス的に使うとなると手軽ではない」という事態になっているように感じます。
最近話題になった「島根県CMS」はシステムの一部として GalateaTalk を組み込んでオープンソースプロジェクトとして配布をしておられます。バージョン 1.0.2 のソースを私が確認してみたところ、ある過去の段階での GalateaTalk(信号処理エンジン)とChasen(形態素解析結果の後処理モジュール)に、別途 debian のパッケージとしての chasen, ipadic, kakasi などを組み合わせて使用されていることがわかりました。現在 ISTC が配布している GalateaTalk の最新版とはかなり異なったシステムになっているわけです。
こういった現状を考えると、ISTC があと1年で活動を終えてしまって、本当に大丈夫なのだろうか、という不安を感じます。
久しぶりにワインバーグ「コンサルタントの道具箱」をめくっていたら
- 「鉄道の逆説」サービスがひどいから、サービス向上の要求が拒否される
- 「鉄道の逆逆説」サービスがよすぎると、評判が聞こえてこないため、提供側がサービスを取りやめることがある
というのが目に入りました。ISTCのサービスはよすぎるとは決して言えないのですが、ひどいのかと言われると。。。
ISTCの中にいると「成果がどう受け入れられているのか見えない」と感じる反面、音声認識や音声合成のフリーソフトに対するニーズはそれなりに高いとも感じています。最終年度のISTCでどんなことができるのか、いろいろ考えていきたいと思います。