2014年4月30日水曜日

音声入力を用いたカクテル自動注文システムの作成

バーの注文は複雑で、カクテルの数も多い。
また、雰囲気を壊すため、パッドによる注文は違和感を感じることが考えられる。
そのため、現在居酒屋で導入されているような注文の自動化は簡単にはできない。
従ってWebページからのデータベース作成を行い、音声認識システム「Julius」を用いた自動注文システムの作成を行った。
システム用途
音声入力
注文
例:「~を下さい」「~を一つ」
質問
例:「~って何ですか」
  「~ベースは何がありますか」
会計
例:「お会計で」
  「チェックをお願いします」
バーテンダー側
 注文→カクテル情報の提示
 レシピを忘れても大丈夫
 レシピを調べる手間が省ける
注文→伝票の自動計算/会計→伝票の表示
 伝票を付けていなくても良い
お客様側
注文→カクテル情報の表示
 操作なしでカクテルの詳細な情報が見られる
質問→カクテルリストの表示
 リストを見ながら注文ができる
注文→伝票の自動計算/会計→伝票の表示
 伝票のチェックが可能
システム詳細
検索可能なカクテルの数 427
学習テキスト 16730
単語数 606単語
システム構成
MCL.py
50音順のカクテル一覧 ─wikipedia
wgethtmlファイルとしてリンクの深さ1階層までをあらかじめ取得しておく。
MCL.pyはこの50音順のカクテル一覧htmlファイルからカクテルの名前,それぞれのカクテルの説明ページURL,カクテルベースを文字列処理により取得し、「学習テキスト(train.txt)」と「データベース」を自動作成する。
作成するデータベースは一行を「カクテル名->URL->ベース\n」とするテキストファイル。
作成する学習テキストの文の種類は以下の通り。
注文
”カクテルの名前”。
”カクテルの名前”をください。
”カクテルの名前”をいただけますか。
”カクテルの名前”を”個数”つ。
”カクテルの名前”を”個数”つください。
”カクテルの名前”を”個数”ついただけますか。
”カクテルの名前”を”個数”個。
”カクテルの名前”を”個数”個ください。
”カクテルの名前”を”個数”個いただけますか。
質問
”カクテルの名前”って何ですか。
”カクテルの名前”ってどんなのですか。
”カクテルの名前”ってどんなの。
”カクテルの名前”って何が入ってますか。
”カクテルの名前”って何なの。
”カクテルの名前”ってどんな味ですか。
”ベース名”で何か作れる。
”ベース名”で何か作れますか。
”ベース名”で何か。
”ベース名”ベースで何がありますか。
”ベース名”ベースで何か。
”ベース名”ベース。
”ベース名”ベースで何か作れますか
会計
チェックをお願いします。
チェックお願いします。
チェックで。
お会計お願いします。
お会計で。
言語モデル・発音辞書作成
茶釜によるテキストの形態素解析を行う
txt2dat.sh train.txt
語彙ファイルを作る
text2wfreq < train.dat > train.wf
wfreq2vocab -gt 0 < train.wf > train.vocab
テキストの語順をひっくりかえす
reverse.pl < train.dat > train.rev.dat
順向き2-gram
text2idngram -vocab train.vocab -n 2 < train.dat > train.id2gram
idngram2lm -vocab train.vocab -idngram train.id2gram -n 2 -cutoffs 0 -arpa train.bi.arpa
逆向き3-gram
text2idngram -vocab train.vocab -n 3 < train.rev.dat > train.rev.id3gram
idngram2lm -vocab train.vocab -idngram train.rev.id3gram -n 3 -cutoffs 0 0 -arpa train.rev.arpa
辞書ファイルを作る
vocab2htkdic.pl -u keitaiso -k -o train.dic -e train.dicerr train.vocab
cat sp.dic train.dic > train.htkdic
Julius用に2つのARPAファイルをまとめてバイナリ化する
mkbingram -nlr train.bi.arpa -nrl train.rev.arpa train.bingram
Controller.py
Juliusを外部プロセスで実行
(julius -C ../dictation-kit-v4.1/fast.jconf -d train.bingram -v train.htkdic -silhead '#0' -siltail '#1' -charconv EUC-JP UTF-8)し、その出力文を入力として、入力の種類に応じたタスクを実行する。
  • 注文・カクテルに対する質問
    カクテル名でデータベースを検索し、対応するURLを取得、URLからhtmlファイルをブラウザに出力する。
    注文の場合は注文されたカクテルの単価*個数を合計金額にプラスし、「注文したカクテル名 個数 単価」の文字列を伝票テキストファイルに書き込む
  • ベースでの検索
    ベース名でデータベースを検索し、対応するそれぞれのカクテル名とURLを取得し、
    それぞれのカクテル名に対応するURLへのリンクを張った
    <a href="URL">カクテル名</a><br>
    をファイルに書き込み、htmlファイルを自動作成し、そのベースのカクテルのリストとしてブラウザに出力する。
  • 会計
    伝票テキストファイルに合計金額を書き込み、伝票テキストファイルをブラウザに出力する。

データベース
MCL.py
Controller.py
※ 言語モデル・発音辞書作成には諸々のツールのインストールが必要です

0 件のコメント:

コメントを投稿