思ってることってこんなもんだよ
DialogflowのTraining機能は僕の日課になった

今週、Googleアシスタント向けアプリに新しいアプリを公開しました。その名も、「勉強会検索」です。

training_1.png

このアプリは、connpass API を使って、ユーザが指定した条件にマッチする勉強会を探して答えてくれる、 という機能を提供します。以下のような感じです。

training_2.png

当初考えていた条件指定

このアプリのWelcomeメッセージは、以下にしています。

「こんにちは。各地で開催される予定の勉強会について、日付や都道府県名、キーワードによってお探しいたします。条件をどうぞ。」

結構漠然とした問いかけです。これに対してユーザが何て言ってくるのか、正直自分でもわからない状態でしたが、最初は以下のような “User says” を登録しておきました。

  • 明日東京でrubyに関する勉強会
  • 明日東京でruby関係
  • 明日東京でruby関連
  • 東京で明日ruby関連
  • 東京で明日ruby関係
  • 東京で明日rubyに関する勉強会
  • 東京で明日
  • 明日東京
  • 東京で今日JavaScript関連の勉強会
  • 明日rubyに関する勉強会
  • 明日東京で開催されるrubyに関する勉強会を教えて
  • 明日東京で開催されるrubyに関する勉強会
  • 明日東京で開催されるruby関連の勉強会を教えて
  • 東京で明日開催されるruby関連の勉強会を教えて
  • 明日開催されるrubyに関する勉強会を教えて
  • 明日開催されるruby関連の勉強会を教えて
  • 明日開催されるruby関連の勉強会
  • 明日開催されるrubyに関する勉強会
  • 東京で明日開催されるruby関連の勉強会
  • 東京で明日開催されるrubyに関する勉強会
  • 明日東京で開催される勉強会
  • 今日
  • 明日

エンティティは、以下のように割り振っています。

  • 「今日、明日」は @sys.date
  • 「東京」は自作した都道府県のEntityである @prefecture
  • 「ruby、JavaScript」は任意のキーワードになるので @sys.any
  • 「勉強会」は「イベント」と言うこともあるだろうな、と思って自作した @event

まー、だいたいこれらのどれかだろうな、と思っていました。

Training機能が教えてくれたこと

公開後数日が経ちました。アプリの説明文に「今日東京で開催されるJavaScriptに関する勉強会を教えて」や「福岡で今日開催されるRuby関連の勉強会を教えて」を例文として書いてあるので、ほとんどのユーザはこれをそのまま言ってきています。が、予想を遙かに超えた言い方をユーザがして来たこともわかってきました。

Dialogflowには、「Training」という機能があります。これは、ユーザが言ってきたフレーズをDialogflowがどのように認識したか、を見ることができます。つまり、僕の期待とユーザが言ってきたことがどれだけかけ離れているかを知ることができるのです。さらに、Training機能では、誤認識されているフレーズについて、正しくはこう認識して欲しい、という設定をして、各インテントの “User says” に追加して再学習させる、という嬉しい機能も提供されています。

例えば、「勉強会」という言い方を「イベント」と表現する人もいるかなー、と思っていましたが、「セミナー」と表現する人もいることがわかりました。

training_3.png

あとは、「明日ハンズオン」といった、「日付 + キーワード」の組み合わせを言ってくるパターンもありました。

training_4.png

Training機能を使って補正をかける

上記のケースでは、以下のように認識されて欲しかったわけです。

  • 「セミナー」も「勉強会」と同じ意味と認識して欲しい。
  • 「日付 + キーワード」についても @sys.date + @sys.any:keyword として認識して欲しい。

まず、「セミナー」については、 @event エンティティに「セミナー」をシノニムとして追加します。これはTraining機能ではなく、普通にEntityの編集画面から追加します。

training_5.png

次に「明日ハンズオン」については、Training機能でエンティティの正しい割り当てを行って、 input.condition インテント(条件指定を受け付けるインテント)の “User says” に追加します。

training_6.png

APPROVE ボタンを押すと、自動的に “User says” にフレーズが追加され、それと同時に学習が走ります。

training_7.png

実際にAction Simulatorで試してみます。

training_8.png

「セミナー」と言ってもちゃんと条件指定できるようになりましたし、

training_9.png

「明日ハンズオン」と言っても、ちゃんと認識して結果を返してくるようになりました。

良い感じになりました。少し賢くなった、と言えますし、ユーザが結果を得ることができる確率が上がったと言って良いでしょう。

Training機能を毎日使うようになった

ユーザがどんなフレーズでアプリを使おうとしてくれているのか、毎日頻繁にTraining機能で確認して、”User says” として追加した方が良さそうなものを見つけて追加登録していくってことをするようになりました。まさに「日課」となってしまいました。いろんな発見もあり、残念ながら認識しなかったフレーズを使ったユーザには悪いなと思いつつ、次からはちゃんと結果を返すべく認識精度を上げていくために、Training機能は本当に重要かつ「楽しい」機能だなと思います。

VUIのアプリを育てることは、まさにTraining機能が提供してくれる日々の改善のことなのかな、と。本当にとても楽しいことなので、ぜひ皆さんもアプリを作って審査を通し、多くのユーザから集まってくるフレーズをTraining機能で「価値あるフレーズ」にしていって欲しいなって思います。