目次
Dialog Studio
IPSJ-SLP / IPA / ISTC の活動として開発した Galatea Project の対話統合システム。
- Mercurial (since 2010-05)
Install
- Ubuntu 10.04 では libstdc++5 は存在しない。rhino を入れる必要がある。
TODO
- 報告されている問題点 <submit>タグでPOSTメソッドを使って、変数を2個送ると、そこでno dialogとなり対話が止まってしまう。(変数1個送るだけならば問題なし)
- galatea-generate が作る script/runner の shebang を /usr/bin/env ruby にするなど
リリース候補パッケージ
http://en.nishimotz.com/galatea_dialog_studio 最新情報
galatea-dialog_20100828-1_i386.deb
- Modules の AM-MCL.rb などの require の使い方が ruby-1.9.2 非互換であることを解決
galatea-dialog の更新手順
dialog-studio-script
Mercurialで作業する
# まず作業コピーを作る hg clone ssh://nishimoto@hg.sourceforge.jp//hgroot/galatea/dialog-studio-script cd dialog-studio-script # ファイルを編集する # コミットする hg commit -m "message" # コミットを送信する hg push ssh://nishimoto@hg.sourceforge.jp//hgroot/galatea/dialog-studio-script # パッケージを作り直す cd .. mkdir galatea-dialog-201008xx cd galatea-dialog-201008xx sudo checkinstall ruby ../dialog-studio-script/misc/setup_dialog.rb
dialog-studio-java
- 上記と同様に hg clone … dialog-studio-java する
- cd src; ant jar で ../bin/gdm.jar ができる
- これを dialog-studio-script/jar/gdm.jar として上書き
Vine Linux 5 への対応
2009-09-03 現在の状況。
Vine 5 の 64bit 版では動作に成功していない。 Vine 5 の 32bit 版をインストールする。
配布サイト
http://hil.t.u-tokyo.ac.jp/~nishi/galatea/work/temp.cgi
(パスワードは nishimotz atmark gmail.com にお問い合わせください)
から、以下をダウンロードする。
* galatea-dialog-20090831-3.i386.rpm
* galatea-engine-20090604-2.i386.rpm
* galatea-ja-chaone-1.3.2-2.i386.rpm
* galatea-ja-unidic-20090604-2.i386.rpm
galatea-ja-chasen は動かないので、apt-get 版を使う。
以下 Vine の「デスクトップ環境」でインストールした環境に対する具体的な手順。
$ su # apt-get install java-1.6.0-sun chasen # rpm -i galatea-ja-chaone-1.3.2-2.i386.rpm # rpm -i galatea-ja-unidic-20090604-2.i386.rpm # rpm -i galatea-dialog-20090831-3.i386.rpm # rpm -i --nodeps galatea-engine-20090604-2.i386.rpm
galate-engine は rpm パッケージに不具合があるので、 「破損パッケージ」扱いになってしまうが、以下の手順で動作する。
まずプロジェクトを作る。
$ galatea-generate app $ cd app
いくつか設定を上書き変更する。
# config/runner.yml ssm: gtalk: chasen_dir: /usr javascript: jar: /usr/local/galatea-engine/DM1/lib/js.jar
julius は oss で動かす設定になっているが、 conf を修正して、デフォルトに戻す。 また、使用するハードウェア・デバイスの音声入力レベルにあわせて、 音声区間検出のしきい値も適当に変更する。
# skel/julius.conf.txt (一部) -input mic -lv 500
app の中で実行してみる。
$ ./script/runner
これでgalateaが起動し、「こんにちは」「さようなら」などの音声に反応すれば、動いている。
app の中で行った修正を、下記のファイルに反映させれば、/usr/local/bin/galatea-runner も動くはず。
- config/runner.yml → /usr/local/galatea-dialog/files/runner.yml
- skel/julius.conf.txt → /usr/local/galatea-dialog/files/skel/julius.conf.txt
なお、runner.yml で行った /usr/local/galatea-engine/DM1/lib/js.jar の設定は、本来は Mozilla が公開している最新の rhino エンジンに差し替えておく方がよい。
Java環境
Galatea Dialog Manager 2.1 までは Java 1.4 系を対象にしていたが、 Galatea Dialog Studio 2.2 からは Java 6 以降を対象に jar ファイルを構築している。 これは java.net.CookieManager を使用するためである。 また今後 ECMAScript エンジンを同梱の Mozilla Rhino (js.jar) から Java 6 の javax.script に移行する予定である。
Java環境は Sun JDK と OpenJDK の両方で動作が確認されている。
GrammarMaker
julius に依存したパッケージとして実装されたDialogStudio のクラスである。 内部的にも使用されているが、単体でも利用できるようにしている。 以下は、簡単な孤立単語文法を、テキストファイルの語彙データから作成する例。
- 入力ファイルは UTF-8 で作成し、出力は UTF-8 になる。(galatea-dialog-20100530)
$ rake version java -cp /path/to/gdm.jar galatea.io.julius.GrammarMaker (c)2003-2009 Takuya NISHIMOTO (nishimoto [atmark] m.ieice.org) Galatea Dialog Studio 2.2.4b4 (090309) GrammarMaker for Julius/Julian Usage : java -cp gdm.jar galatea.io.julius.GrammarMaker [opt] gram dest gram : xml grammar file dest : target path + file_name without extentions [opt] -d dir : location of mkdfa.pl / mkfa etc. -e enc : encoding for output default linux:euc-jp / windows:shift_jis
[gram.txt]
やすだこうどうわどこですか 安田講堂はどこですか さんしろういけわどこですか 三四郎池はどこですか あかもんわどこですか 赤門はどこですか
$ rake (in /data/workdir) java -cp /usr/local/galatea-dialog/bin/gdm.jar galatea.io.julius.GrammarMaker -d /usr/local/galatea-engine/SRM/bin -e shift_jis /data/workdir/_gram.xml /data/workdir/gram/gram ok $ ls gram/ gram.dfa gram.dict gram.grammar gram.term gram.voca
[rakefile.rb]
#!/usr/bin/ruby -Ku # rakefile.rb # updated for galatea-dialog-20100530 # rake (ruby 1.8 or 1.9) required require "fileutils" GDM_JAR = "/usr/local/galatea-dialog/jar/gdm.jar" SRM_BIN = "/usr/local/galatea-engine/SRM/bin" task :version do sh "java -cp #{GDM_JAR} galatea.io.julius.GrammarMaker" end task :default do opt = "-d #{SRM_BIN} -e utf-8" gram = "_gram.xml" dest = "gram/gram" # FileUtils.mkdir_p("gram") File.open(gram, "w") do |f| f.puts <<-EOF <?xml version="1.0" encoding="utf-8"?> <grammar root="#all"> <rule id="all"> <one-of> EOF File.open("gram.txt").each do |s| s.chomp! a, b = s.split(/ /) if a != nil f.puts "<item> <token sym=\"#{a}\">#{b}</token> </item>" end end f.puts <<-EOF </one-of> </rule> </grammar> EOF end sh "java -cp #{GDM_JAR} galatea.io.julius.GrammarMaker #{opt} #{Dir.pwd}/#{gram} #{Dir.pwd}/#{dest}" end
julius を差し替える
galatea-dialog_20100529-1_i386.deb に関する情報。
julius を /usr/local にインストールしてあるとして、実行バイナリを差し替える。
galatea-generate して
# ./config/runner.yml srm: julius: engine_dir: /usr/local
# ./skel/julius.conf.txt <% gram_dir = '/usr/local/galatea-engine/SRM/GramJulian' am_dir = '/usr/local/galatea-engine/SRM/AcousticModel' %>
すればよい。 (なんとなく綺麗じゃないので仕様を見直すつもり)