初めての音声対話システム構築~効率アップの開発術~ /

株式会社ヒムズのブログ

dialog-makerで作る対話シナリオ

dialog-makerでは対話シナリオを大きく3つの部分に分けて作ります。

一つ目は、対話システムを利用するユーザーからの入力を定義するSLU。

二つ目は、受け付けたユーザーからの入力に応じて返事を返したり、機器を制御したりするACTION。

三つめは、ACTIONを実行した後、次の入力待ちの状態などの状態とその遷移を定義するFST。

対話制御に必要な情報や処理を三つに分けて定義できるので、例えば入力語彙の調整などを行う際に、他の部分への影響を最小限に抑えながら対話シナリオが調整ができます。

SLUでは、対話システムが応答を返すべきキーワードを定義します。例えば、果物の名前と個数を受け付けたい場合は、果物名と個数がキーワードとなります。これらのキーワードをkeyword-classタグで囲みます。

<keyword-class label="FRUIT">
林檎 
バナナ 
</keyword-class>
<keyword-class label="NUMBER">
一 
二 
</keyword-class>

次に、定義したキーワードをどのような順番で入力された時に受理するかなどを、conceptタグで定義します。

下の例では、「果物名のみ」「個数のみ」「果物名と個数」「個数と果物名」が入力された時に、受理される設定となります。受理されるとACTIONが実行され次の状態に遷移します。例の中で(*)と書かれている部分はワイルドカードで、何が入力されても良いという意味になります。また、各行の前後は自動的にワイルドカードとして扱われます。

<concept label="c:fruit_number">
(FRUIT)
(NUMBER)
(FRUIT)(*)(NUMBER)
(NUMBER)(*)(FRUIT)
</concept>

具体的にはは、「えっと、林檎」「林檎一個」「林檎を二個」「バナナ三本」などが入力されると受理されます。

 

次に、入力が受理されたかどうかだけを返答させてみます。

concept の入力待ちを行う場所を「状態」と呼びます。状態は、FSTで定義します。一つの状態で複数conceptの入力を待ち、受理された concept に従い次の状態へと遷移します。

また、予め定義された特殊なconcept があります。<eps>は入力を待たずに次の状態に遷移し、<exception>は、入力待ちになっているconcept のいずれも受理されなかった場合に遷移します。

下のFSTでは、100番の状態で、fruit_number コンセプトが受理されるか、<exception>コンセプトでそれ以外の入力があった場合に状態が遷移します。状態が遷移する時に、Answerアクションまたは、Exceptionアクションが実行されます。

fruit_number コンセプトが受理された場合は、Answerアクションを実行した後、最終状態に遷移して対話が終了します。

Exception コンセプトが受理された場合は、Exception アクションを実行した後、100番の状態に遷移(元の状態に戻り)して、次の入力を待ちます。

 

AnswerアクションとException アクションでは、受理されたかどうかを出力させます。

Answer( ) {
return @SPEAK( "受理されました" ) ;
}

Exception( ) {
return @SPEAK( "受理されませんでした" ) ;
}

これで、入力が受理されたかどうかを判定する対話の完成です。

dialog-maker では、音声と文字の両方で対話をテストできます。

まずは、簡単な文字入力で作った対話を試します。文字入力のみで実行するには、dialog-makerで対話をビルドしてコンソール実行を行い、表示されるコンソールに文字を入力する事で対話を試します。

文字入力で正しく動作している事が確認できたので、次は音声で試してみます。
音声で試すには、音声認識サーバーと音声合成サーバーの接続先などを設定して、サーバー実行を行います。dialog-makerから音声を入力します。

dialog-makerを使えば、音声対話をとりあえず動かすまでに1時間もかからないと思いますが、もし、音声認識エンジンや音声合成エンジンの選定からスタートしたらどうでしょうか。

初めての音声対話が実行できるようになるまでに多くの時間がかかり、さらに、対話制御機能を作りこむ事を考えると、非常に多くの時間が必要になります。

ここで紹介した対話は非常に小さく単純なものですが、dialog-makerには他にも多くの機能があり、サンプルの対話シナリオも豊富に同梱されているので、複雑で高度な対話の制作も強力にサポートします。

対話シナリオをシステムに接続する方法

dialog-makerは、開発した対話シナリオをシステムに組み込むための仕組みも用意されています。利用できる言語は、Java、C++ です。Androidアプリに組み込む事も出来ます。これは嬉しい機能です。

Androidアプリへの組み込み以外では、対話シナリオはサーバー形式で起動され、付属の対話サーバーにアクセスするためのライブラリをリンクしたアプリケーションを開発します。

Javaで利用する場合、DmCliLib.jar をリンクするように設定して、 対話クライアントクラスDmCli、録音用クラスRecorder、再生用クラスPlayerを操作します。

また、対話の結果などは、ICli, IRecoder, IPlayer の3つのインターフェイスを実装して、イベントを受け取ります。

対話だけでなく、録音や再生の機能も入っているので、自分のプログラムに音声インターフェイスが簡単に追加できます。


 

dialog-makerについてご興味を持たれた方は、下記のフォームよりお気軽にお問合せください。

お預かりした個人情報につきましては、株式会社ヒムズの「個人情報保護方針」に従い厳重に取り扱います。

このブログ記事について

このページは、音声認識と音声合成を用いた自然な対話作成技術の株式会社ヒムズのブログです。

音声対話の開発ツールのdialog maker(ダイアログメーカー)と、それにかかわる音声認識・音声合成・対話システムの世界について掲載しています。