kun432's blog

Alexaなどスマートスピーカーの話題中心に、Voiceflowの日本語情報を発信してます。たまにAWSやkubernetesなど。

〜スマートスピーカーやVoiceflowの記事は右メニューのカテゴリからどうぞ。〜

Voiceflowでやってみるシチュエーショナルデザイン ④自然な会話にする

f:id:kun432:20200724183351j:plain

Voiceflowでやってみるシチュエーショナルデザインの最終回です。今回は「自然な会話にする: 一方的なコミュニケーションではなく、会話ができること」がテーマです。

Alexa道場のシチュエーショナルデザインの回はこちら。

シチュエーショナルデザインの日本語ドキュメントは以下にあります。

ちなみに、今回も英文の「シチュエーショナルデザイン」のホワイトペーパーの方をベースに説明します。ホワイトペーパーは以下でダウンロード可能です。

この記事は「Voiceflowでやってみるシチュエーショナルデザイン」シリーズの第4回の記事です。他の記事は以下にあります。よろしければあわせて読んでみてください。

第1回 第2回 第3回 Part1 第3回 Part2

ユーザの言い回しに対応する

ユーザは様々な発話のバリエーションで話しかけてきます。第1回では、インテントにおけるサンプル発話のバリエーションや、ダイアログモデルを使ってスロット値を柔軟に収集するのを試しました。今回はスロットそのもののバリエーションです。

例えば、「コーヒー」ひとつにしても言い方はいろいろあります。

  • コーヒー
  • アメリカン
  • ブレンド
  • ホットコーヒー
  • アイスコーヒー
  • 冷コー(多分関西だけですね)
  • ホット

総じてこれらは「コーヒー」なわけですね。もちろん、場合によってはこの違いを意識しないといけない場合もあります。例えば、カフェの注文だと、アイスコーヒーとホットコーヒーは違いますよね。でも、単に「コーヒー」であることがわかればいいだけの場合はどうでしょうか?

ということで以下のサンプルを用意しました。好きな飲物であなたの性格が占えるというものです。

f:id:kun432:20200724170049p:plain

占いの結果は適当なので気にしないでください。まず、drink_name_intentのChoice Blockでユーザから飲み物名を取得、drink_nameスロットに飲み物名が入ります。

f:id:kun432:20200724171112p:plain

f:id:kun432:20200724165812p:plain

drink_nameスロットはカスタムスロットタイプを選択して、コーヒー、紅茶、オレンジジュースを候補値として入れてます。

f:id:kun432:20200724165826p:plain

drink_nameスロットで受け取った値をもとにCondition Blockで分岐をします。条件として用意していない飲み物名が発話された場合はElseで対応していないことを伝えてもう一度別の名前で発話を促します。

f:id:kun432:20200724170911p:plain

f:id:kun432:20200724170930p:plain

ではテストしてみます。

f:id:kun432:20200724172034p:plain

ちゃんと動いてます。次は、用意していない飲み物名を言った場合です。

f:id:kun432:20200724172218p:plain

はい、想定通りではあるのですが、この占いではアイスコーヒーもざっくり「コーヒー」として扱いたいですね。ということで、アイスコーヒーにも対応してみます。まずは今のやり方をそのまま踏襲してやってみましょう。

カスタムスロットのスロット値を追加します。

f:id:kun432:20200724173429p:plain

Condtion Blockの条件を追加します。

f:id:kun432:20200724173530p:plain

Condtion Blockから「コーヒー」のSpeak Blockにつなげます。

f:id:kun432:20200724173651p:plain

テストしてみます。

f:id:kun432:20200724173952p:plain

はい、一応想定通りに動いていますね。じゃあこれを繰り返せばよい・・・のですが、追加したいスロット値がたくさんあった場合はどうなるでしょう?

カスタムスロットのスロット値を追加して・・・

f:id:kun432:20200724174618p:plain

Condtion Blockの条件を追加して・・・

f:id:kun432:20200724174700p:plain

うぅ、めんどくさいし、ちょっと見にくくなってきました。しかも、紅茶とオレンジジュースも対応するとなるとゾッとしますね・・・

シノニムを使おう

そこで「シノニム」の出番です。日本語でいう「同意語」「類義語」のことですね。シノニムを使うと、同じ意味・似た意味だけど発話が違う表現を、ひとまとめにして同じものとして扱ってくれます。早速やってみましょう。

スロットの設定画面を開いて、同じように扱いたいスロット値を右側の入力欄に追加します。複数ある場合はカンマ区切りで入力してください。せっかくなので、紅茶とオレンジジュースにもシノニムを設定してみました。

f:id:kun432:20200724175611p:plain

やることはこれだけです。

テストしてみます。

f:id:kun432:20200724175955p:plain

はい、ちゃんとシノニムを発話した場合でもそれぞれ「コーヒー」「オレンジジュース」というふうに認識されていますね。

少しフローを少しシンプルにしてどういうことなのか確かめてみます。単純に受け取ったスロット値を言い返すだけのSpeak Blockにつなげてみます。テスト用にちょっとメッセージも最低限に。

f:id:kun432:20200724181014p:plain

テストです。

f:id:kun432:20200724181156p:plain

つまり、ユーザの発話がシノニムとして登録してある内容と一致した場合、常にその代表となるカスタムスロット値として値として渡されるということです。これにより、シノニムを増やしていくだけで、いろんな言い方に対応できますし、分岐や処理の方はいじらなくていいのでとても楽ちんです。

f:id:kun432:20200724181542p:plain


シチュエーショナルデザインの最終回「4. 自然な会話にする: 一方的なコミュニケーションではなく、会話ができること」でした。シノニムを使うことで、ユーザのいろんな発話バリエーションに対応できるだけでなく、効率的なスキル開発ができますので、積極的に使っていきましょう。

デザインガイドには上記でご紹介した以外にも、会話を自然にするためのテクニックが紹介されていますので、ぜひ一度ご一読ください。