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を使ったモデルの組み合わせでできているみたい。
こんな感じで、JujiっていうChatbotと拡張機能の組み合わせで、できているみたい。
ってか、Jujiって何者?
こいつのことで、なんかREP languageっていう独自の言語で Dialogを管理できるみたい。
あー、だから図には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でのユーザーの意図理解をどうやって行っているのか説明されている。
- Prepare Trainging Data
- Encoding Training Data
- 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を見たみたい。