こんにちは。
AIチームの戸田です。
本日開催されました言語処理学会第26回年次大会でポスター発表をさせていただきました。今回はオンライン発表ということもあり、普段の学会とはちょっと違った雰囲気でした。本記事では発表内容の紹介とオンライン発表の感想を書きたいと思います。
発表内容
私達の運用するチャットボット、AI Messengerでは、ユーザーとの対話をログとしてためており、定期的にチャットボットの回答候補を追加するための分析を行っています。現在この作業は半自動化されており、今回の発表ではこの自動化手法について紹介させていただきました。
不足している回答候補を抽出するために2段階の処理を行います。以下より各段階の処理とそれによる利点を紹介します。
- 問い合わせのクラスタリング
チャットボットが回答できていない対話ログのクラスタリングを行い、類似する問い合わせをまとめます。クラスタリングの特徴量は選択することができますが、今回はTF-IDFを使用しました。これにより意味的に似ている文章のまとまりを作ることができます。またクラスタサイズからそのクラスタに類する問い合わせの頻度を推測することができるため、頻度の高いものから回答候補作成に取り組めます。 - 重要度スコア計算
クラスタ内の文章に対してそのクラスタ内での重要度スコアを計算し、まとめられた問い合わせの中で代表的なものを抽出します。重要度スコアとして、クラスタリングにも用いたTF-IDFは一つの指標となりますが、レアワードに対して重要度スコアが高くなる特徴があるため、これに出現率の逆数のペナルティを与える重要度スコア計算を考えました。
これにより抽出された問い合わせを代表文として表示することでクラスタの一覧性が向上し、作業の手間が大幅に減ることが期待できます。
評価
予め代表文がアノテーションされたEC、ゲーム、社内手続きの3つのドメインの対応ログに対して我々の手法を適用し、もっともらしい代表文が抽出できているかMRR・MAPの2つの指標で評価しました。
ドメイン | 評価指標 | TF-IDF max | EmbedRank | 提案手法 |
EC | MRR | 0.9236 | 0.8356 | 0.9236 |
EC | MAP | 0.9064 | 0.7657 | 0.9141 |
ゲーム | MRR | 0.8148 | 0.7359 | 0.8259 |
ゲーム | MAP | 0.8100 | 0.7079 | 0.8225 |
社内手続き | MRR | 0.7149 | 0.7215 | 0.8026 |
社内手続き | MAP | 0.7202 | 0.7231 | 0.8035 |
比較手法として、シンプルにTF-IDFの最大値をとる手法とBERTで出力した文書ベクトルを 利用したEmbedRankを用いましたが、我々の手法が最も優れた評価値であることが確認できました。
オンラインでの発表について
はじめての体験となるオンライン発表で不安なことも多々ありましたが、とても充実したものとなりました。我々AIチームは交代で、合計5週説明をさせていただきました。以下より良かった点、残念だった点について書きます。
良かった点
- 一度に多くの人へ説明できる
- 通常のポスターセッションだと、(会場の広さにもよりますが)一度に説明できる人数は5人程が限界ですが、今回は約20人へ同時に説明することができました。
- 落ち着いた環境で発表できる
- 周囲がざわついていて声を張らなければならない、といったことが一切なく、ストレスなく発表することができました。
- どんな人が聞いてるか一覧できる
- 説明しながら聞き手の名札をすべて確認するのは困難ですが、今回はチャットの参加者を確認するだけで一覧でき、どういった方が興味を持ってくれたのかわかりやすかったです。
- メモを取りやすい
- 対面だとちょっと気を使ってしまいがちな議論中のメモが取りやすかったです。相手の方が関連論文をチャットにURLを貼り付けてくれたりしたのも良かったです。
残念だった点
- 相手の反応が見えない
- 聞き手の表情が全く見えないので、相手の反応に合わせて説明を変える、といったことができませんでした。
- 最初に戻って説明しなおすタイミングが取りづらい
- 最後まで説明し終えた後、質問を受け付けるのですが、このときに変な沈黙が流れることが多かったです。
質疑まとめ
頂いた質疑についてここにまとめさせていただきます
- EmbedRankは比較手法としてあまり適切ではなかったのでは?
- おっしゃるとおりです。文書ベクトルを用いた手軽な手法だったので試しましたが、お教えいただいたLexRankやCEDRなどを用いて再度評価してみたいと思います。
- クラスタリングのしきい値はどのように決めているのか
- ドメインによって適宜設定しています。現状職人芸です・・・
- 1つの対話に複数の問い合わせ内容が含まれている場合はどうしているか?
- 発話ごとにクラスタリングをかけており、また句読点や改行で対象文章を分けているのでそれぞれ分離してクラスタがつくられています。一文に複数の問い合わせが含まれている場合に関しては対応できていません。
- 「ありがとうございます」などの問い合わせと関係ないカスタマーの発話はどう扱っている?
- 現状はルールベースで問い合わせと関係ない発話は除外するようにしているが、今後、問い合わせ判定のようなことにも挑戦したいです。
- ID1,3はほぼ同じ内容なのにスコアに差が出る事についての考察は?
- "お願いします"がレアワードとなり、ペナルティによって減衰したのではないかと考えています。
- 1クラスタあたり何問い合わせくらい?
- 10件無いくらいを目安にしきい値を決めています。
- BERTはfine-tuningしている?
- していないです。
- TF-IDFとBERTの実装は?
- TF-IDFはscikit-learn、BERTはpytorch(京都大 黒橋・河原研究室の公開モデルを利用)
- 単純に文長が短いものを選ぶだけでよいのでは?
- 試しましたが、主語が無いなど、情報が不足している文章が選ばれがちでした。
たくさんの議論ができ、非常に有意義な時間を過ごすことができました。
参加していただいた皆様、ありがとうございました。
おわりに
本記事では言語処理学会第26回年次大会での発表内容の紹介とオンライン発表の感想を書かせていただきました。
発表した問い合わせ抽出手法は、今後、回答が含まれているデータ(例えばメールや有人対応など)から、問い合わせだけでなく、それに対する回答の抽出にも取り組むことでさらなる効率化を目指したいと考えています。
今回の提案手法を実際に使用したプロダクトのデモを、6月に熊本で行われます人工知能学会全国大会で行う予定ですので、こちらにも来ていただけると嬉しいです。
最後までお読みいただきありがとうございました