目次
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 のgrammar 要素を見て下さい。また、誤認識が起こったときに、(goto 要素などがないにも関わらず)なぜ対話の最初に戻るのか考えてみてください。
- リスト 1 のticket.vxml に、席種をたずねる対話を追加してください。席種はグリーン・指定席・自由席があるものとします。また、席種の確認も行うように確認の対話も変更してください。
- 出発駅と到着駅が同じであるかどうかをチェックし、同じであれば「不適切な入力です。」と応答して、対話を最初からやりなおすようにリスト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"> 1 </token> </item> <item> <token sym="に" slot="num"> 2 </token> </item> <item> <token sym="さん" slot="num"> 3 </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
* : 上記の form.vxml は EUC-JP
- 対話例は後述(マイクOFFのまま)
- 終了(メニューからは終了できない)
- ターミナルにフォーカス指定して Ctrl+C
- : 実習環境で 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 が 不正終了したら
- 不要プロセスが残る場合がある
- : 不要プロセスの消去: $ 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(最後)
- ログアウトする前に実行してください
- : プロセスの終了
$ galatea-killall
一時ファイルの消去
$ ./deltmp
- シャットダウンしてください
- ヘッドセットを回収します