Galatea Dialog Studio による実習

「音声認識・音声対話技術講習会」配付バージョンはこちら

since 2009-08

<html> <div class="amazlet-box" style="margin-bottom:0px;"><div class="amazlet-image" style="float:left;margin:0px 12px 1px 0px;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/462784901X/r4wh-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/51%2BSpx8VNIL._SL160_.jpg" alt="フリーソフトで学ぶセマンティックWebとインタラクション" style="border: none;" /></a></div><div class="amazlet-info" style="line-height:120%; margin-bottom: 10px"><div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/462784901X/r4wh-22/ref=nosim/" name="amazletlink" target="_blank">フリーソフトで学ぶセマンティックWebとインタラクション</a><div class="amazlet-powered-date" style="font-size:80%;margin-top:5px;line-height:120%">posted with <a href="http://www.amazlet.com/browse/ASIN/462784901X/r4wh-22/ref=nosim/" title="フリーソフトで学ぶセマンティックWebとインタラクション" target="_blank">amazlet</a> at 11.07.09</div></div><div class="amazlet-detail">荒木 雅弘 <br />森北出版 <br />売り上げランキング: 581513<br /></div><div class="amazlet-sub-info" style="float: left;"><div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/462784901X/r4wh-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jp で詳細を見る</a></div></div></div><div class="amazlet-footer" style="clear: left"></div></div> </html>

<html> <div class="amazlet-box" style="margin-bottom:0px;"><div class="amazlet-image" style="float:left;margin:0px 12px 1px 0px;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4627847114/r4wh-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/519Jh4Vxl9L._SL160_.jpg" alt="フリーソフトでつくる音声認識システム - パターン認識・機械学習の初歩から対話システムまで" style="border: none;" /></a></div><div class="amazlet-info" style="line-height:120%; margin-bottom: 10px"><div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4627847114/r4wh-22/ref=nosim/" name="amazletlink" target="_blank">フリーソフトでつくる音声認識システム - パターン認識・機械学習の初歩から対話システムまで</a><div class="amazlet-powered-date" style="font-size:80%;margin-top:5px;line-height:120%">posted with <a href="http://www.amazlet.com/browse/ASIN/4627847114/r4wh-22/ref=nosim/" title="フリーソフトでつくる音声認識システム - パターン認識・機械学習の初歩から対話システムまで" target="_blank">amazlet</a> at 11.07.09</div></div><div class="amazlet-detail">荒木 雅弘 <br />森北出版 <br />売り上げランキング: 11943<br /></div><div class="amazlet-sub-info" style="float: left;"><div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4627847114/r4wh-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jp で詳細を見る</a></div></div></div><div class="amazlet-footer" style="clear: left"></div></div> </html>

実習の記録

2009年版スライド(ppt) nishimoto2009istc08v1.ppt

2009年度の実習時に補足したこと、気づいたこと

  • いままでの実習=改変可能な個別のパーツとして、この実習=一つのまとまったシステムとして
  • native 要素の説明をするために Galatea プロトコルの説明が必要
  • サンプル中の grammar 要素の version 属性は不要なはず
  • slot 属性と fieid name 属性の対応
  • DialogStudio のログ画面の説明
  • gtalk の辞書で 席種=セキシュ を追加する必要があった
  • 演習3:どこに filled を書くべきか、分かりにくい
  • 実演した内容:Webアプリケーションとしての VXML, Rails との連携、タスク内制御はFIAで・タスク間制御は Controller で

2009年度の受講者に配付されたライブ環境に関するメモ

  • TODO: Ubuntu Linux ベースの Live DVD(または USB メモリ)環境で Galatea Dialog Studio を使用します。
  • TODO: ライブ環境を作るときに /usr/local/galatea-demo/ に form.vxml と ticket.vxml を置いておく
  • TODO: /usr/local/bin/galatea-killall を作る
  • TODO: wavesurfer を入れる
  • Ruby on Rails は入れないつもり

概要

  • 2005年頃 ISTC で行った Galatea Toolkit 講習会の内容(「音声対話」PowerPointファイル)をツールの更新にあわせて見直し中。
  • 2009年度および2010年度の実習環境は EUC-JP ベースの Redhat Enterprise Linux
    • 下記の手順 Ubuntu 9.04 (GNOME) に基づいて改定?
    • UTF-8 に統一?

用意するファイル

  • galatea-vxml-100826.zip の中の form.vxml および ticket.vxml (いずれもEUC-JPで保存されている)

演習課題(抜粋)

  1. 駅名、枚数などを変更して動作を確認して下さい。どのような単語が入力可能なのかは、リスト1 のgrammar 要素を見て下さい。また、誤認識が起こったときに、(goto 要素などがないにも関わらず)なぜ対話の最初に戻るのか考えてみてください。
  2. リスト 1 のticket.vxml に、席種をたずねる対話を追加してください。席種はグリーン・指定席・自由席があるものとします。また、席種の確認も行うように確認の対話も変更してください。
  3. 出発駅と到着駅が同じであるかどうかをチェックし、同じであれば「不適切な入力です。」と応答して、対話を最初からやりなおすようにリスト1 のticket.vxml を変更してください。

リスト1

<?xml version="1.0" encoding="utf-8" ?>
<vxml version="2.0" xml:lang="ja">
<form id="form1">
<block>
<native>to @AM-MCL set AutoEmotionSpeak = 1</native>
<native>to @AM-MCL set AutoMove = 1</native>
<native>to @AM-MCL set AutoGaze = 1</native>
<native>to @FS-MCL set Background = woman01 bg1</native>
<native>to @AM-MCL set Mask = woman01 HAPPY 100 0 0 0</native>
</block>
<field name="source">
 <prompt>
 こちらは特急券販売システムです。出発駅をどうぞ。
 </prompt>
 <grammar root="#station1">
  <rule id="station1">
   <one-of>
    <item> <token sym="まいくてすと"> マイクテスト </token> </item>
    <item> <token sym="とうきょう" slot="source"> 東京 </token> </item>
    <item> <token sym="しながわ" slot="source"> 品川 </token> </item>
    <item> <token sym="なごや" slot="source"> 名古屋 </token> </item>
    <item> <token sym="きょうと" slot="source"> 京都 </token> </item>
    <item> <token sym="しんおおさか" slot="source"> 新大阪 </token> </item>
   </one-of>
  </rule>
 </grammar>
</field>
<field name="dest">
 <prompt>
 到着駅をどうぞ。
 </prompt>
 <grammar root="#station1">
  <rule id="station1">
   <one-of>
    <item> <token sym="まいくてすと"> マイクテスト </token> </item>
    <item> <token sym="とうきょう" slot="dest"> 東京 </token> </item>
    <item> <token sym="しながわ" slot="dest"> 品川 </token> </item>
    <item> <token sym="なごや" slot="dest"> 名古屋 </token> </item>
    <item> <token sym="きょうと" slot="dest"> 京都 </token> </item>
    <item> <token sym="しんおおさか" slot="dest"> 新大阪 </token> </item>
   </one-of>
  </rule>
 </grammar>
</field>
<field name="num">
 <prompt>
 枚数をどうぞ
 </prompt>
 <grammar version="1.0" root="#maisuu">
  <rule id="maisuu">
    <ruleref uri="#digit"/>
    <ruleref uri="#mai"/>
  </rule>
  <rule id="digit">
   <one-of>
    <item> <token sym="いち" slot="num"></token> </item>
    <item> <token sym="に" slot="num"></token> </item>
    <item> <token sym="さん" slot="num"></token> </item>
   </one-of>
  </rule>
  <rule id="mai">
    <item> <token sym="まい"></token> </item>
  </rule>
 </grammar>
</field>
<field name="confirm">
 <prompt>
  <value expr="source"/>駅から
  <value expr="dest"/>駅まで
  <value expr="num"/>枚ですね。
  よろしいですか
 </prompt>
 <grammar root="#yes_no">
  <rule id="yes_no">
   <one-of>
    <item> <token sym="はい" slot="confirm" value="y"> はい </token> </item>
    <item> <token sym="よろしいです" slot="confirm" value="y"> よろしいです </token> </item>
    <item> <token sym="いいえ" slot="confirm" value="n"> いいえ </token> </item> 
   </one-of>
  </rule>
 </grammar>
 <filled>
   <if cond="confirm == 'y'">
     御購入ありがとうございました。
     <goto next="#form1"/>
   <else/>
     もうしわけありません。最初からやりなおして下さい。
     <clear/>
   </if>
 </filled>
</field>
</form>
</vxml>

演習の流れ

Ubuntu 9.04 + Intel Video Driver では顔画像表示モジュール(FSM)は3Dデスクトップ効果と互換性がありません(画面が乱れます). あらかじめ以下を設定してください.

システム → 設定 → 外観の設定 → 視覚効果 → 効果なし(N) を選択
  • 音声入出力に関する準備
    • ヘッドセットマイク
  • 対話マネージャの基本操作
    • サンプル対話の実行
  • 対話シナリオの変更・拡張
    • VXML ファイルのコピー・編集・実行

* 片付け(必須) * 一時ファイルの消去

ヘッドセットの準備

  • ヘッドセットマイクの接続
  • 音量の設定
    • スピーカーのアイコン - [音量調整ツール]
  • 音声の取り込みテスト
$ wavesurfer

実習:手順1

  • Galatea Dialog Studioの実行
$ cp /usr/local/galatea-dialog/files/tests/vxml/form.vxml .
$ galatea-runner form.vxml

* FIXME: 上記の form.vxml は EUC-JP

  • 対話例は後述(マイクOFFのまま)
  • 終了(メニューからは終了できない)
    • ターミナルにフォーカス指定して Ctrl+C
  • FIXME: 実習環境で ticket.vxml を提供しておく必要あり

Dialog Studioの操作

  • アドレスボックス / [Go]
    • 実行中のファイル名または URL を表示
    • ファイル名などを入力して [Go] を押すと、指定された対話を開始
    • 実行中の対話があれば終了して実行
  • [Validate]
    • ファイル内容の文法などをチェック
    • ただし実行時エラーはチェックできない
    • 実行中の対話に影響を与えない
  • [Run]
    • Pauseで中断中の対話の再開
  • [Pause]
    • 実行中の対話を一時中断・再開
    • 発話中の場合は、現在出力中の音声などを出力し終えてから待機
    • 注意:すぐに止まらないことがある
  • [File] - [Open Local File…]
    • ダイアログからファイルを指定して実行
  • [Face] - [AgentEnable]/[AgentDisable]
    • エージェントを一時的に表示・非表示
  • [Face] - [Texture]/[Wireframe]/…
    • エージェントの表示方法を切替
  • [Mask]
    • 顔と声を同時に切替える
    • 制約:組み合わせは固定
  • [Auto] - [AutoMove ON/OFF]
    • 顔の制御を実行・停止
  • [Auto] - [AutoGaze ON/OFF]
    • 視線の制御を実行・停止
  • [Auto] - [EmotionSpeak ON/OFF]
    • 感情切替による声の制御を有効化・無効化
  • [Expression]
    • 感情を切替(AutoMove ON にて有効)
  • [Demo] - [Nod]/[Say Hello]
    • うなずく動作や音声合成のデモ
  • [Demo] - [Demo1]/[Demo2]/[Demo3]
    • 定義済み対話デモ
    • 実行中に内容を閲覧するには、Source タブを使う。

実習:手順2

  • マイクをONにする
  • アドレスボックスを確認 : form.vxml
  • [Go] を押して対話

実習:手順3

  • 対話例(form.vxml)
    • ガラティアカフェにようこそ
    • テイクアウトですか?
    • 「はい」「いいえ」
  • お飲み物は何になさいますか?
    • 「コーヒー」「紅茶」
    • 参考:「コーヒーのホット」なども受理可能
  • ホットとアイスのどちらがいいですか?
    • 「ホット」「アイス」

実習:手順4

  • ファイルの実行(演習課題1)
$ galatea-runner ticket.vxml
  • 修正するための準備(演習課題2・3)
$ cp ticket.vxml ticket2.vxml
$ cp ticket.vxml ticket3.vxml

実習:手順5

  • 演習課題1=ticket.vxml(元ファイル)
    • 動作確認(さまざまな駅名や枚数で)
    • grammar要素の確認
  • 演習課題2=ticket2.vxml (コピー)
    • 席種を尋ねる対話とその確認対話を追加
    • グリーン車、指定席、自由席
  • 演習課題3=ticket3.vxml (コピー)
    • 出発駅と到着駅が同じでないようにチェック

実習:手順6

  • ticket2.vxmlの編集(3も同様)
[アプリケーション] - [アクセサリ] - [テキスト・エディタ]
あるいは
$ gedit

修正したファイルの実行

$ galatea-runner ticket2.vxml

注意事項

  • 日本語入力
    • 日本語キーボードの「半角/全角」で切替
  • XML の規則(HTML より厳しい)
    • タグの入れ子構造
    • 大文字小文字、全角半角の区別
    • 属性の値は"" で囲む
    • [Validate] で確認できる
  • XMLを読みやすくするために
    • <!– と –> ではさまれた部分はコメント
      • ただし入れ子にはできない
    • 改行や空行・字下げは自由に行ってよい
  • Dialog Studio が 不正終了したら
    • 不要プロセスが残る場合がある
    • FIXME: 不要プロセスの消去: $ galatea-killall

ヒント

  • field要素のname属性と一致させるもの
    • token要素のslot属性(grammar)
    • value要素のexpr属性(prompt)
  • 出力の<prompt> 要素を省略できない場合
    • <field> の中で用いる場合
    • 属性指定:<prompt bargein="false"> など
    • 読み上げ方を指定する要素を含む場合
      • GalateaTalk(JEIDA) およびW3C に準拠

演習課題2の回答例

席種を「セキシュ」と強制的に読ませるためにPRONを使ってみる:

<!-- 演習2:field "num" の後に追加 -->
<field name="type">
 <prompt><PRON SYM="セキシュ">席種</PRON>をどうぞ</prompt>
 <grammar version="1.0" root="#seat">
  <rule id="seat">
   <one-of>
    <item> <token sym="ぐりーんしゃ" slot="type"> グリーン車 </token> </item>
    <item> <token sym="していせき" slot="type"> 指定席 </token> </item>
    <item> <token sym="じゆうせき" slot="type"> 自由席 </token> </item>
   </one-of>
  </rule>
 </grammar>
</field>
<field name="confirm">
 <prompt>
  <value expr="source"/>駅から
  <value expr="dest"/>駅まで
  <value expr="type"/><!-- 演習2:この行を追加 -->
  <value expr="num"/>枚ですね。
  よろしいですか
 </prompt>

演習課題3の回答例

<!-- 演習3:field confirm の後の filled を修正 -->
<filled>
   <if cond="source == dest">
     不適切な入力です。
     <goto next="#form1"/>
   <elseif cond="confirm == 'y'"/>
     御購入ありがとうございました。
     <goto next="#form1"/>
   <else/>
     もうしわけありません。最初からやりなおして下さい。
     <clear/>
   </if>
</filled>

この例は枚数を確認して「よろしいですか」の確認の後でチェックをするので、 不親切である。

すべての field は filled を持ちうるので、field dest の grammar の後に下記のように記述することもできる。

 <filled>
   <if cond="source == dest">
     不適切な入力です。
     <clear namelist="source dest"/>
   </if>
 </filled>

実習:手順7(最後)

  • ログアウトする前に実行してください
  • FIXME: プロセスの終了
$ galatea-killall

一時ファイルの消去 $ ./deltmp

  • シャットダウンしてください
  • ヘッドセットを回収します
dialogstudio_exercise.txt · 最終更新: 2011/07/09 14:52 by Takuya Nishimoto
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0