カテゴリー: general

  • 音声対話講習会

    7月31日から8月3日まで京都大学で「音声認識・音声対話技術講習会」があり、私は最終日で「ISTCソフトウェア紹介」というテーマの時間をいただき、ソフトウェアの実演をしました。

    私がGalatea Projectで開発を担当しているGalatea Toolkit Linux版の紹介をしました。主に VoiceXML による対話シナリオ記述について御説明して、まだ正式対応ではありませんが Windows 環境で VoiceXML のシナリオを実行してデモを行いました。

    実演で御紹介したソースコードをいくつかお見せします。

    以下は PHP で動的にVoiceXMLを生成する例です。

    <?php echo '<?xml version="1.0" encoding="utf-8"?>' ."\n" ?>
    <?php mb_http_output('utf-8') ?>
    <vxml version="2.0" xml:lang="ja">
    <?php
    if(isset($_REQUEST['region']) && $_REQUEST['region'] != '') {
    $region = $_REQUEST['region'];
    mb_convert_variables("UTF-8", mb_detect_encoding($region), $region);
    ?>
    <form id="answer">
    <block>
    <log>地域:<?php echo $region ?>,今日:晴れ,明日:曇り</log>
    <prompt>
    天気予報です。
    <?php echo $region ?>の、
    今日の天気は晴れです。
    明日は曇りです。
    <break/>
    </prompt>
    <goto next="#ask"/>
    </block>
    </form>
    <?php } ?>
    <form id="ask">
    <field name="region">
    <prompt timeout="20s">
    天気を聞きたい地域を、東京、横浜、京都から選んでください。
    </prompt>
    <grammar version="1.0" root="#region_rule">
    <rule id="region_rule">
    <one-of>
    <item> <token sym="まいくてすと">マイクテスト</token> </item>
    <item> <token sym="とうきょう" slot="region">東京</token> </item>
    <item> <token sym="よこはま" slot="region">横浜</token> </item>
    <item> <token sym="きょうと" slot="region">京都</token> </item>
    </one-of>
    </rule>
    </grammar>
    </field>
    <block>
    <submit next="<?php echo basename(__FILE__) ?>"/>
    </block>
    </form>
    </vxml>
    

    また、以下は PostgreSQL とも連携して、音声認識文法も動的に生成し、出力する情報もデータベースから取得して読み上げる例です。

    <?php echo '<?xml version="1.0" encoding="utf-8"?>' ."\n" ?>
    <?php mb_http_output('utf-8'); ?>
    <vxml version="2.0" xml:lang="ja">
    <?php
    $db_user = "galatea";
    $db_pass = "galatea";
    $db_host = "localhost";
    $db_name = "galatea_db";
    $db = pg_connect("host=$db_host port=5432 dbname=$db_name user=$db_user password=$db_pass");
    if (isset($_REQUEST['item']) && $_REQUEST['item'] != '') {
    $item = $_REQUEST['item'];
    mb_convert_variables("UTF-8", mb_detect_encoding($item), $item);
    $rs = pg_query($db, "SELECT name,price FROM goods WHERE code = $item");
    if ($row = pg_fetch_assoc($rs)) {
    $name  = $row['name'];
    $price = $row['price'];
    }
    ?>
    <form id="answer">
    <block>
    <log>name: <?php echo $name ?>,price: <?php echo $price ?></log>
    <prompt>
    <?php echo $name ?><?php echo $price ?>円です。
    <break/>
    </prompt>
    <goto next="#ask"/>
    </block>
    </form>
    <?php } ?>
    <form id="ask">
    <field name="item">
    <prompt timeout="20s"> 値段を聞きたい果物は何ですか? </prompt>
    <grammar version="1.0" root="#item_rule">
    <rule id="item_rule">
    <one-of>
    <item> <token sym="まいくてすと">マイクテスト</token> </item>
    <?php
    $rs = pg_query($db, "SELECT code,name,yomi FROM goods");
    while ($row = pg_fetch_assoc($rs)) {
    $code = $row['code'];
    $name = $row['name'];
    $yomi = $row['yomi'];
    echo "      <item> <token sym=\"$yomi\" slot=\"item\" value=\"$code\">$name</token> </item>\n";
    }
    ?>
    </one-of>
    </rule>
    </grammar>
    </field>
    <block>
    <submit next="<?php echo basename(__FILE__) ?>"/>
    </block>
    </form>
    </vxml>
    

    最後に、音声認識エンジンに対してユーザが発話している途中にどのようなフィードバックをユーザに見せるべきか、ということを考えていただくために、試作中の「音声インクリメンタルサーチ」のデモをお見せしました。

    音声対話システムの開発において VoiceXML が常に最適な技術とは限りません。

    ISTC-SIG-MMIでは、Galatea Toolkit 開発の経験を生かしつつ、W3Cでの標準化の動向も踏まえて、マルチモーダル対話システムのアーキテクチャーと記述言語の検討を進めています。

    Galatea Dialog Manager もそれらの成果を取り込みながら、さらに開発を続けていきたいと思っています。

  • ワザオギ落語会

    第3回ワザオギ落語会に行ってきました。

    場所は国立演芸場。チケットは前売りで完売とのことで、観客にまで

    大入り袋が出ました。最初「なんだろう?」と思いました。

    DVD販売が予告されている落語会ということで、

    第1回のときは「DVDをご覧の皆様」と舞台の上で話しかける方が

    いらっしゃったりしましたが、今回はそういう演出ではなく、

    古典落語で、できるだけ動きや仕草が楽しめるものを、

    出演者はみんなお選びになったのだろう、という、そういう演目ばかりでした。

    そういえば新作落語の大御所ばかりだったにも関わらず、

    みなさん古典落語を個性たっぷりに演じておられました。

    3回目にして、今度こそDVDを買わなくてはと思いました。。

    くわしくはこちらを:

    http://www.wazaogi.jp/

  • 対面朗読者と視覚障害者の対話

    ひさしぶりに研究会で発表をしてきました。

    西本 卓也, 嵯峨山 茂樹, 藤原 扶美, 下永 知子, 渡辺 隆行:
    “対面朗読者と視覚障害者の対話の分析とその応用,”
    情報処理学会研究報告(SIG-SLP), pp.55-60, Feb 2007.
    Nishimoto2007SLP02.pdf

    内容は12月のWIT/HI研究会で東京女子大の学生に発表してもらった内容と
    同じなのですが、原稿にはかなり手を加えました。
    今回はヒューマン・インタフェース(HI)と音声言語情報処理(SLP)の共催研究会で、
    特にHIの方から質問やコメントをいただいたのが嬉しかったです。

    今回は、プレゼン用PCで Apache/PHP/PostgreSQL を動かしてデモをしました。
    また、ALTAIR for Windows を動かして、スクリーンリーダーってこんなものです、
    という紹介もちょっとしました。
    かなり個性的なソフトですが、デモに使うには適していたように思います。
    (本当は定番の「ホームページリーダー」などを使えばよかったのですが、
    買ったはずのインストールCDが見あたらなかったのです。
    新しいのを買わなくては、と思っています)。

    自由と制約

    話をわかりやすくするために

    「自由ではないが自然なインタフェース」

    というキャッチフレーズを使ってみました。
    するとさっそく

    「『自由』や『自然』とはどんな意味なのか定義してください」

    という質問がありました。

    今回の例で言うと、選択肢が最初から3つ用意されていて、この中から選んでください、
    というのは「自由」とは言えません。
    本当は「サラダはどれについていますか?」など、言いたいことを自由なタイミングで
    自由に言えることが望まれます。
    音声認識の語彙サイズを増やすのはそういうニーズに応えるためです。

    私の話における「自然」とは、やりたいことを違和感なく、楽に、効率的にできる、
    実用上満足できる、といったことです。本当は「自然」という言葉はぴったり
    当てはまらないかも知れません。人間がやっているコミュニケーションの有り様を
    そのまま実現することが「自然」とは限らない、と考えています。

    こんな風に答えたのですが、後でこの質問をした方と話をしてみたら、
    この方は Ruby on Rails の開発者が言っている

    「制約が自由を生む」

    というフレーズを連想したのだそうです。
    Rails の「制約」はプログラマーに「余計なことを考えないで、
    本当にやりたいことが楽にできるようになる」という意味での
    「自由」を与えている、というわけです。

    私の話では「自由」をむしろ「複雑さをもたらすもの」として
    否定的に扱っていましたが、
    私の話の中での「自由ではない」という部分が
    Rails の「制約」と同じ意味になるのだと思います。
    「制約があるから楽になれる」というプログラマーと、
    「自然な選択肢を与えれば楽に使える」という今回の私の話は、
    似ているように思います。

    逆に、音声対話システムに関する研究でしばしば
    「何を言えばいいか分からないから使いにくい」
    というユーザの意見が紹介されているのは、
    「制約が足りないことの不自由」なのかも知れません。

    フォーム選択操作の詳細

    視覚障害者がPCを使うためのスクリーンリーダーについての
    具体的な質問をいただきました
    (WITと違ってそういう質問もあるだろうと思ったのです)。

    「お気に入りの選び方の詳細」はどうなっているのですか?

    例えば73種類のお弁当をリスト表示して、
    ひとつずつ1から順番に読み上げていきます。
    ウェブのフォームを音声ブラウザで操作する一般的なやり方としては、
    項目の移動はカーソルキーの上下で行います。
    それぞれの項目にチェックボックスがあります。
    画面を読み上げるときに
    「チェックボックス、チェックあり」のように読み上げます。
    キーボードのスペースキーなどでON/OFFの切り替えを行います。

    じゃあタイミングでユーザーは判断する、ということですね?

    タイミングというべきかどうかは分かりませんが、
    カーソルがその行にあり、その行が読み上げられたときに、
    チェックボックスのON/OFF操作ができる、ということです。

    詳細情報の聞き方

    お弁当の場合は、中身を知っているものと知らないものがあると思いますが、
    詳細な情報はどのように聞くことができるのでしょう?

    クリックすると詳細が出てきます。
    リンクがあるということは声の違いでわかります。
    ただし、ウェブブラウザのポップアップを使っているので、
    ユーザの好みや音声ブラウザの機能によって使い勝手は変わってきます。

    研究会を振り返って

    今回は
    podcastle
    (http://podcastle.jp/)
    のグループの発表が注目されましたが、
    実際に音声認識や音声対話のシステムを公開運用して改良を重ねる、
    というアプローチが増えてきました。
    それにつれて、
    「音声対話システムにはインタフェースやデザインの要素が大切」
    という認識も広まりつつあるように思います。

    音声の研究コミュニティがそんなふうになっているときに、
    今回私は「音声対話を分析することは有用だけど、
    その成果は音声対話以外のシステムに役に立つ」
    というような発表をしました。

    そういえば音声認識の高度なパターン認識アルゴリズムは、
    文字認識や画像認識や遺伝子解析などに使われつつあります。
    「音声認識の技術はとても役に立つ。ただし、音声認識以外への応用に」
    という皮肉も聞かれるくらいです。

    音声対話のデザインやパターンについても、
    似たようなことが起きるかも知れません。
    音声対話システムに対して悲観的なわけではありませんが、
    音声インタフェースの研究も、
    人間同士の音声対話を模倣するだけでは行き詰まりそうな気がします。

    一見、人間同士の会話と全然違うように行われるけれど、
    とても習熟しやすく効率的なインタフェースで、
    しかも「人間同士の音声対話の分析」から得られた原理が背後に隠れている、
    といったことがあるように思えてきました。

    そういうことを「自由ではないが自然」と呼んでいますが、
    もっとふさわしい言葉を見つけたいと思います。