はじめに

Dialogflow CXではインテントやデータストアを設定してユーザーのメッセージに柔軟に対応することができます。
インテントを設定してエージェントを作成しているある日、期待しないインテントが起動してしまう事象がありました。
この記事ではそのような場合の対応方法についてまとめた記事になります。

前提

問題が発生したページの状態

初期インテントのDefault Welcome Intentに加え、パスワード変更インテント(Change Password Start Intent)とData Storesの設定を行なっています。
データストアには「awsの事例について」という質問に対応できるデータを格納している状態です。

パスワード変更インテント(Change Password Start Intent)のトレーニングフレーズの設定

以下の設定されたフレーズと類似しているとDialogflow CXが認識したメッセージがユーザーから送信されるとパスワード変更インテントが起動します。

発生した事象

「awsの事例について」と質問するとデータストアが起動してawsの事例を紹介してくれることが期待する動作です。
しかし質問するとパスワード変更インテントが起動して「新しいパスワードを入力してください」と回答されてしまいました。

原因

結論としてはDialogflow CXが「awsの事例について」のメッセージをパスワード変更インテントと類似していると認識してしまったことが原因でした。

Test Agentの画面で以下のボタンを押すとOriginal Responseを確認することができます。
Original Responseにはユーザーからの送信メッセージや起動したインテントなどの情報が記述されており、その中にintentDetectionConfidenceというパラメータが存在します。
このパラメータはインテント検出信頼度(信頼度スコア)と呼ばれるもので、Dialogflow CXは「ユーザーからの送信メッセージと対象インテントがどれくらいマッチしているのか」を0.0(完全に不確実)~1.0(完全に確実)で判定しています。
今回は「awsの事例について」というメッセージのパスワード変更インテントとのインテント検出信頼度が0.44475865と判定されていました。

またAgent settingsのML>Classification Thresholdの値を確認すると0.3(デフォルト値)に設定されています。
Classification Thresholdはメッセージがインテントと合致するか判定する閾値で、Dialogflow CXはこの値よりもインテント検出信頼度が高い場合に該当インテントとマッチしたと判定してそのインテントが起動します。

今回のケースでは「awsの事例について」のメッセージのインテント検出信頼度が0.44475865でClassification Thresholdの0.3よりも高かったため、Dialogflow CXは「awsの事例について」のメッセージがパスワード変更インテントと合致していると認識してしまいました。
その結果データストアではなくパスワード変更インテントが起動するようになってしまいました。

解決方法

以下の2つを実行することで解決を図ることができます。
①Classification Thresholdの値を調整する
②ベストプラクティスに則り対象インテントのトレーニングフレーズを追加する

①Classification Thresholdの値を調整する

今回パスワード変更に全く関係のない「awsの事例について」というメッセージのインテント検出信頼度が0.44475865でした。
また「パスワード変更を実施したい」というパスワード変更に関するメッセージを送信すると、インテント検出信頼度は0.87041086と処理されました。
この結果からClassification Thresholdの値を0.8に設定すると「awsの事例について」のメッセージの場合でも閾値以下と判定されてパスワード変更インテントが起動しないようになります。

(注)このClassification Thresholdの値は設定されているインテントのインテント検出信頼度を見ながら調整する必要があります。
下記のトレーニングフレーズの追加も行って調整を行なって頂ければと思います。

②ベストプラクティスに則り対象インテントのトレーニングフレーズを追加する

トレーニングフレーズにサンプルフレーズを設定することでエージェントがユーザーのメッセージがインテントと合致するか判断するようになります。
このサンプルフレーズが少ない場合はエージェントがメッセージを認識することができないため、ある程度の数のフレーズを設定する必要があります。

Dialogflow CXのベストプラクティスではトレーニングフレーズの数について以下のように推奨されています。

20 個以上のトレーニング フレーズを定義する

インテントごとに 20 個以上のトレーニング フレーズが必要です。この状態にしないと、NLU モデルには、インテントに適切にマッチングするのに十分な情報を確保できない可能性があります。これは必要最小限のガイドラインです。理想的には、より多くのエージェントを定義する必要があります。特に、大規模なエージェントの主なインテントについては、約 50 個が望ましい数です。

修正後の結果確認

「awsの事例について」と質問すると期待通りにawsの事例を回答してくれるようになったことを確認しました!

まとめ

この記事では期待しないインテントが起動してしまう場合の対応方法について説明しました。
インテントを作成する際にトレーニングフレーズをとりあえず数個だけ設定した後そのまま作業を進めていざ確認すると上手く動かない、ということは結構ありがちなミスなのではと思います。
そのような際にはこの記事が解決の一助になれば幸いです。