投稿者: nishimotz

  • 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 インスタンスにもうちょっと賢いメソッドを追加したら良いのかなあ、などと思案しています。

  • 明日への遺言

    映画「明日への遺言」が封切られてヒット中だそうです。私は昨年秋に、東京国際映画祭の特別招待作品として渋谷オーチャードホールで観てきました。映画祭に行くのも初めて、舞台挨拶も初めてで、あいにくの天気でしたが、貴重な「お祭り気分」を楽しむことができました。知人がエンドロールに名前を連ねていたのも嬉しかったのですが。

    上映後、主演の藤田まことさんが挨拶の最後に「15秒や20秒でオチをつけなくてはいけない昨今、もっとゆっくりした時代に戻っていってほしい」といったことを言われました。監督の小泉堯史氏が、「来年3月の公開のときの観客動員が一番心配だ」と言っておられました。そのくらい「頑張らないと観てもらいにくい」映画であり、「頑張って多くの人に観てもらうべき」映画だと、制作者たちが自覚しているのだろう、と思って話を聞きました。

    ひたすら「語ること」で物語が進み、「語ること」だけが観客の心を動かしていく、そんな映画です。戦争に関する映画なのですが、派手なシーンはなく、特殊な状況が言葉によって淡々と描写されていきます。

    そして紡がれる言葉によって明らかになっていくのは、「法」や「組織」といったシステムの不透明で不気味な力です。「責任を取ること」を放棄した経営者や官僚たちが起こした昨今の数々の不祥事を思うと、複雑な気持ちになる。そんなことを考えながら映画館を後にしました。

    あれから数ヶ月、相変わらず「責任の取り方」については不愉快なニュースが続いています。

  • アクセシビリティのアンチパターン

    2月27日、NHK放送技術研究所で行われた「視覚障害者向けマルチメディアブラウジング技術の開発」というシンポジウムに参加しました。ディジタル放送のバリアフリー研究開発についての情報通信研究機構の委託研究の成果発表でした。

    視覚障害を持つ方の多くがテレビを情報源にしている、という現状があるのですが、ディジタルテレビ放送のデータ放送にはスクリーンリーダーのような技術が存在しません。このような現状を解決するために、音声ブラウザの技術、点字ディスプレイや触覚ディスプレイなどの技術を応用した興味深い技術報告とデモンストレーションが行われました。

    そのことはとても意義のあることだと思ったのですが、一方で私が感じたのは、そもそもディジタル放送という技術をもっとユニバーサルデザインで設計できなかったのだろうか、放送情報の作り手がもっとアクセシビリティに配慮することができないのだろうか、ということです。

    データ放送に使われるBMLはDynamic HTMLの技術がベースなのですが、ECMAScriptで動的に制御することに特化していて、pとdivとobjectしかタグがないのだそうです。意味的な構造を記述するタグがないので、たとえ情報を取り出せたとしても、音声や展示で提示するためのナビゲーション操作ができません。

    だから、放送局でBMLの画面を作った後で、それに合わせて意味的情報を取り出すための「後処理用データ」を作って、受信側に送る、という仕組みが開発されています。XPathなどを使ってテキストエレメントを取り出して、視覚的構造から意味的構造をごりごり抽出するわけです。

    どうにもスマートじゃないと思うのですが、放送の現場で最初から「意味的構造でマークアップされたデータを作成する」というのは難しいのだそうです。

    新しい技術が開発されるたびに「アクセシビリティのアンチパターン」というべきものが繰り返されているように感じます。

    そんなに歴史の古い技術でもないはずのディジタルテレビが、こんな方法でしかアクセシビリティを確保できないのは、技術よりも思想に問題があったとしか言いようがないように思います。

    セマンティクスを無視して低レベルのインタラクションを記述するような、スクリプト言語での制御に過度に依存するような、そんなマークアップ言語を設計してしまうと、ユニバーサルデザインが損なわれる。こういうことは、新しい技術を開発して標準化する人が、教訓として持つべきではないでしょうか。

    そういえばテレビもラジオも、もともと受信機を自作できるくらいオープンなインフラだった、ということをふっと思い出しました。

    いまやテレビは、データのコピーさえ自由にできないインフラになっています。ブラックボックスをアクセシブルにすることがいかに難しいか。。。

    ラジオが相変わらず、受信機を自作できるくらいオープンなインフラであることは、いいことだなあ、と思ったりもします。