リクルートテクノロジーズ メンバーズブログ  ゼクシィ恋結びに実装 検索基盤と機械学習を併用した自動応答システムの紹介

ゼクシィ恋結びに実装 検索基盤と機械学習を併用した自動応答システムの紹介

みなさま、こんにちは。APプロダクト開発Gの木本です。

この記事では、私のチームが開発しているチャットボット基盤「BAZZ」について、概要と特徴について紹介します。

 

チャットボット基盤「BAZZ」は、自動応答機能を提供するAPI基盤で、私達APプロダクト開発GとDataTechnologyLabo(DTL)の共同開発で行われているプロジェクトです。

仕組みの概略としては、入力された内容について裏にいるエンジンに対して問い合わせを行い、その確からしさを判断してレスポンスを返します。

現在は、カスタマーからのお問合わせに対して回答を返す、お問合わせ対応チャットボットとしてサービスに導入されています。ゼクシィ恋結びではFAQページに導入され、問い合わせ件数の約30%削減を実現しています。また、他サービスでも問い合わせ件数の削減を実現し、さらにオペレータが不在になる夜間でも即時応答が出来るため、問題解決までの時間短縮を実現し、顧客満足度の貢献に寄与しています。

 

本サービスのアーキテクチャ図を以下に記載します。

BAZZ自体は中継ぎのような立ち位置とし、接続先のエンジンをサービス毎、用途毎に変更することで、同一基盤で様々な種類の自動応答APIを提供することを可能にしています。特に、カスタマーからのお問合わせに対する自動応答Botでは、検索基盤としてElasticsearch、そして機械学習のモデルを併用してシステムを構成しています。

本記事では機械学習のモデルのロジック詳細ではなく、アーキテクチャ全体の話をしていきます。特に、Elasticsearchと機械学習2つのモデルを併用している理由について紹介します。

 

一般的に、機械学習においてはコールドスタート問題が常について回ることになります。つまり、「教師データを十分量用意できていないと機械学習モデルの応答精度が十分担保されない」ということです。私達も自動応答システムを構築する、ということを考えるにあたってこの問題が大きく立ちはだかりました。

問い合わせへの自動応答という文脈において、入力に対する回答を返すには、下記の2パターンが大きく求められます。

  1. 入力された質問文の内容を解釈し、それに対応する応答文を生成して返却する(マスタなし)
  2. 予め用意された質問文のマスタと入力された質問文を比較し、最も近い質問文のマスタを探し当て、それに対応する回答文を返却する

今回は、私達のチームメンバーに検索のスペシャリストがいること、DTLに分類モデル作成の実績があることを考慮し、2番目の方法で開発を進めることにしました。

機械学習だけで自動応答システムを実現しようとした場合、チャットボットの利用履歴は当然ありませんから、教師データがありません。過去のメールや電話の問い合わせから教師データを作ろうとした場合も、マスタとのヒモ付に膨大な労力がかかるだけでなく、チャットボットへの入力とメールや電話の入力では入力長や入力の仕方が大きく異なり、有用な教師データを作ることは困難です。

そこで検索エンジンのElasticsearchが登場します。私たちはElasticsearch上で入力された文字列をKuromojiで分解し、さらにN-gramモデルに基づく類似度計算を行い、マスタとのヒモ付を行います。Elasticsearch上での検索は機械学習モデルと異なり、不変的なアルゴリズムによる計算なので、教師データなしに一定の応答精度を出し続けることが出来ます。

これにより、リリース直後からある程度の応答精度を担保し、まず使ってもらえる物を提供することが出来ます。更に、使ってもらえることで実際にカスタマーがチャットボットに対してどういった入力をするのか、よりチャットボットにマッチしたデータを得られるようになり、これが機械学習を成長させる良い教師データとなって蓄積され、機械学習モデルの成長を加速させます。

最終的には、Elasticsearchよりもより多種多様な質問に回答できるような機械学習モデルが出来上がり、基盤側の設定一つでElasticsearchから機械学習モデルへ返答の主体をスイッチしていく、という仕組みまで実現できています。

このように私たちは、利用者に機械学習の持つコールドスタート問題を意識させずに、安心してカスタマーがチャットボットを利用し始められる、そして今後のチャットボットを成長させられるような仕組みを開発しました。

実際のリリースにあたってはマスタを作成する、という側面についても非常にコストが大きいのですが、その改善手法についてはまた別の機会に紹介させていただければと思います。

 

今後は、裏で繋いでいくAPI群を増やし、問い合わせだけでなく、対話しながら今行きたい旅行先を提案したり、利用シーンに合わせた車選びのサポートといったような、各サービスのコンシェルジュのような機能を提供し、よりカスタマーの皆様の使いやすいサービス作りに貢献できるように進化できればと思っています。