9本目!If I Hear You Correctly: Building and Evaluating Interview Chatbots with Active Listening Skills

ではでは、Active Listening(日本では傾聴って呼ばれているやつ)を搭載した Chatbot について、調べていきたいと思います。

この子は今まで見てきたような、Open-DomainのChatbotではなく、InterviewというTask-orientedなChatbotですです。

なんで、Active Listeningかって言うと、共感のskillをガッツリ使う技術の一つが傾聴だからだね。あと、なんか Chatbot と話しているときに、頓珍漢な回答されるくらいなら、質問された方が嬉しいしね。

では行きましょう!

Active Listeningは Chatbot の課題のひとつである、ユーザーのテキトーな回答を質の高い回答にすることができるらしい。やったね!

答えのない質問。「あなたの今直面している問題はなんですか?」みたいな Open-Question かつ抽象的な topic を用意した場合。「今日の夕飯は何にするの?」みたいな質問に比べて、NLPを利用したユーザーの意図理解と、それに応じた応答の回答は作るのがむずいし、わからないし、そもそもデータを作るのがクソむずいらしい。

なんという三重苦(笑)

Related Work

Chatbotについてのいろいろな種類について、調べてくれているので見てみましょう。

情報の引き出し方 * Survey bots : 選択肢で質問するやつ。Amazon の HelpとかのChatbotやね。 * AI-powered chatbots : 自由形式で質問して、ルールベースで処理するやつ。 * embodied AI interviewers : 内部処理にルールベース以外に強化学習とか深層学習とか入れているやつ。

目的 * Task-oriented : 目的を持ってやるやつ。企業が取り入れているChatbot。 * Social Conversational : 雑談とかをやるやつ。会話を楽しむためのChatbot

Prototype Overview

このChatbotはルールベースと neural networkを使ったモデルの組み合わせでできているみたい。

f:id:kaya-takashiro:20210903195904p:plain
activelisteningChatbot

こんな感じで、JujiっていうChatbotと拡張機能の組み合わせで、できているみたい。

ってか、Jujiって何者?

juji.io

こいつのことで、なんかREP languageっていう独自の言語で Dialogを管理できるみたい。

Language - Juji Documentation

あー、だから図にはConversation Agendaとかあるんだ。各会話について、Scriptでかければ制御しやすいし。

っていうか、Interviewデータとか自分たちでLabelingしてるんだ。 Interview Resultsっていうraw dataをIntent Discoverっていうモデルと、Sentece Rankerっていうモデルでラベリング下みたい。

んで、できたTraining DataをSentence encoderってやつで、文章をVector表現にencodeして、topic分類のモデルにぶち込んで訓練したみたい。

このtopic分類のモデルを使って、ユーザーの入力から、topicを取り出して、Chatbotの制御をおこなっているみたい。

Prototype design and key components

アクティブリスニングは、言い換え、感情の言語化、要約とかのいろんな手法があるらしい。

詳しくはこちらっ!listening-skillsとかActive-Listening-Handout

実装している手段については口語的手段だけで、言い換え、感情の言語化、要約、励ましの4つがあるらしい。まあ、非口語的手段は3Dアバターとか用意しないと、無理だしね。

Prototype Design Criteria

Jujiについて、いろいろと書いている。

Task志向型のChatbotについて、ストーリを予め定義して、会話するんだけど、ユーザーが関係ない話(サイドトークというらしい)を初めたらどうすんだろうと、疑問だだったんだけど、Jujiはそれを認識して、話をメインの流れに戻すらしい。

すげーな。Dialogflowにはあんのかな? >> 「わかりません。」とか返すらしい(笑)。まあ、そうだろうな。

あと、フィラーとかも処理できるAdd-onとかもあるらしい。

The Extensions: Data-Driven User Input Prediction

ここでは、このSystemでのユーザーの意図理解をどうやって行っているのか説明されている。

  1. Prepare Trainging Data
  2. Encoding Training Data
  3. Training Text Classification

Prepare Training Data

まず、データの収集の目的を確認してみましょう。今回ではユーザーの入力から、意図を引き出す。つまり、Topic Analysisというタスクになっています。

つまり、データの準備としては、ラベル付きの教師データを用意することから始まります。

んで、今回は最初に教師なし学習であるLDAをつかって、文章を分類したみたい。LDAのライブラリはgensimでここっ

次にLDAの結果のRankingづけを各Topicにおいて行ったみたい。こうすることで、LDAの結果の信頼性を高めたらしい。やり方としては、各Topicにおいて、文章のクラスタを作ったあとで、LexRankってやつを使ったらしい。 なんぞこれ?

Lexical Centrality as Salience in Text Summarizationの略で、自動文章要約アルゴリズムの略らしい。ページランクの仕組みの拡張で、各文をvector化したあとで、コサイン類維持度をそれぞれの文で計算し、類似度の一定値より大きい組み合わせもつ文章を抜き出して、要約するらしい。

ラベルづけした文をどうやってEncodeするかっていうと、Universal Sentence Encoderっていうのを使ったらしい。さすがGoogle様。文のVector化って、そこにしびれる、憧れる!

まあ、文章をEncoder化けるしたら、なんでもモデルに突っ込めるしいいのか。

Enabling Active Listning

入力にもっとも近い文をもつ文章から、Active Listeningに基づいた応答だけを抜き出して、 ランク付けして応答するらしい。

Evaluation

Precision、Recall、F1、Accuracyの4つでScoreを見たみたい。