外部知識に基づく応答生成に関するサーベイ発表

大日方孝輝氏:これから「外部知識に基づく応答生成に関するサーベイ発表」ということで、自分と、坂田さんと中西さんの3人で発表をさせていただきます。

自己紹介です。

自分は大日方と申します。東大の修士2年です。カラクリ株式会社というところで自然言語処理関係の研究をやっています。名字だけでも覚えてください。こちらにいる坂田さんが、後半の発表をさせていただきます。

ということで、まずは自動応答システムについてです。

身の回りにユーザーの発言に応答するシステムはたくさん増えてきていると思います。これは一例でお出ししていますが、機械による自動応答は自然言語処理の1つ大きな目標だと感じるところがみなさんあるかなと思います。

そこをもう少し自然言語処理に焦点を絞ると、例えば質問応答ですとか、あとconversation、対話応答みたいなものが挙げられるかなと思います。今出しているのは、かなり広範囲な質問に答えられるものですが、日常的な雑談や、多様な会話を行えるようなものができてきています。

本サーベイの発表では、まずはこういった題目で発表していきます。

1つ目に、応答システムの基本的なモデルやタスクの紹介をします。次に、外部知識を使うとはどういうことなのかについて説明して、その後にデータセットやベンチマークタスクがどのようになっているのかを紹介し、最後に研究紹介をさせていただきたいと思います。

応答システムの事例

では、まず応答システムです。「外部知識を用いた応答システム」というタイトルで発表しているのですが、それではイメージしづらい方も多いかと思いますので、まずは外部知識には焦点を当てずに、応答生成について説明していきたいと思います。

まずは質問応答の例ですね。

こちらSQuADという例なんですけど、自然言語処理の研究や勉強をされている方は目にしたことがあるタスクだと思いますが、パラグラフと質問がセットで与えられて解くというタスクになっています。

今映しているのは、酸素に関するWikipediaの記事が与えられていて、それについて、酸素の原子番号や、その他もろもろのクエスチョンに答えるタスクになっています。バージョン2.0からNo Answerが入ってきたり、いろいろなタスクのアップデートもなされています。

もう1つ紹介したいのが、bAbI(ベイビー、もしくはバビー)というものです。

こちらも、パッセージが与えられて、そちらに対する複数文に基づく推論が必要な質問ですとか、一文のものもあるんですけれども、そういうタスクですね。こちらも1つQAとして紹介しました。

今回のサーベイの外部知識を用いた応答生成と関連するのは、今紹介したような解答抽出型のQAがとくに関係してきます。

それらに対するアプローチとしては、SQuADは、BERTですとかXLNetでは言語モデルの性能を示すものとして使われたり、いろいろな言語モデルの性能比較でも使われるようになっています。

bAbIは、Memory NetworkやEnd to Endの話でけっこう出てきたのでご存じの方も多いと思いますが、明示的に記憶を持つモデルでアプローチが取れたりとかします。

次にQAの課題です。

先ほどパラグラフと質問がセットで与えられていたんですけれども、現実的にそういうことってほぼないじゃないですか。なので、そういうときには推論時に外部の知識にアクセスして答えるモデルが必要です。

いくらすごく大きなモデルでパラメータを増やしたりMemoryNetを使っても、この世の中の知識を全部パラメータに落とし込むのは難しいので、外部知識に効率的にアクセスをして答えようというのがQAモデルの課題です。

Conversationについて

次にConversationの例に移ります。ニューラルで対話モデルというと、挙げている2015年のNeural Conversation Modelの論文が有名だと思います。

左が日常会話で「hello!」とか「how are you?」とか、そういった会話です。

右が一般的なQ&Aで、例えば「is sky blue or black?」「blue.」みたいな簡単な質問や、学習した対話データセットに入っていそうなものについては答えられるようになっています。

ただ、見られる傾向として、短文になりがちですとか、当然ながら学習内容に入っていないものは生成できなかったり、著しく外れたものは生成できなかったり、文が決まった文法に縛られてしまったりということがあります。

ざっくりConversationのアプローチとしては、この図のように入力、ユーザーの発話が入ってきて、それをエンコードして、それをDecoderに渡して発話します。

これはすごくざっくりとした流れになりますが、ここは機械翻訳ととてもパラレルに考えられていて、言語Aから言語Bだと思えばそのまま持ってこられるので、先ほどの中西さんの発表でもありましたが、Seq2Seqがあったり、最近ではTransformerベースが使えるのかなと思います。

Conversationモデルの課題です。

こちらは先ほど中西さんの発表でも出てきたので思い当たるかと思いますが、対話の記憶を保持しておかなければ一貫した発話ができません。

チャットボットとかでチャットをしていても、最初に「専攻はどちらですか?」「心理学です」と言ったあとに、「大学で何をしてますか?」と言ったら「英文学です」と。「ちょっとお前、心理学はどうした?」みたいなところがあるので、そういう「さっきと違うじゃん」みたいなところはなくしていきたいです。常識的な部分、学習で扱いきれないところや語義の多義性など、そういうところもカバーしていきたいと考えています。

ほかには情報量や多様性です。

ニューラルの対話モデルを作ると、「I don’t know.」とか「OK.」とか「Yes.」とか、なんとなく正しい発言が増えてきてしまいます。ただ、それらはあまり有効な発話・対話ではないので、そこを改善していきたいというのが課題の1つです。

結果として、構文が同じだったり発話内容が同じなので、多様性がなくなってしまいます。これらを外部知識で解決するのが今回のサーベイの流れです。

最後にまとめますと、QAとConversation、QAは正解が限られるので、評価がまだしやすいです。ただ、発話のほうは、YesでもNoでも合っていることがあるので、評価がしづらい側面があります。

これは休憩というか横道なんですが、Visual QA、Visual Dialog。

先ほどのSQuADを思い浮かべると、なにかコンテクストが与えらえてQAやDialogがなされる点は似ている。あとはCV/NLPのチャレンジで1つのいい例なのかなと思います。

あとは僕がたまたまググっていたらcvpaper challengeから2本ワークショップに通っているのを見たりして、さすがだなという感じです。

こういうところも分野横断的にアイデアが結びついてくると活かせるのかなと思ったりします。

外部知識の活用

「外部知識の活用」からメインの話に移ります。

先ほどの応答生成やQA・Conversationなど、それぞれ挙げた課題を解決するために外部知識を用いるというのはどういうことかといいますと、具体的には、データを全モデルに詰め込むのは無理な話なので、外部知識からうまく情報を拾って質問に答えたり対話に活かしたり。もしくは対話での一貫性を保つときに、対話の履歴やプロフィールですね。「出身は、長野県なんですけど」と言ったあとに、「どこの国の生まれですか?」と聞いて出身と違う「アメリカです」と言ったらトンチンカンなことになってしまうので、プロフィール的にも一致してほしいとか、そういう外部データを持っていてほしいわけです。

では、そういうところをどうモデルや発話や対話に入れ込んでいくかが、サーベイの目的です。

ざっくり言うとこんな感じです。

入力が入ってきて、そこからまず情報検索が入ります。ここにIRのサーベイをしなくてはいけないところもあるのですが、今回はそんなにはできていません。そこから関連知識を取ってこられて、言語モデルになんらかのかたちでエンコードされ、そこから最後アウトプットが出される。

ここも応答文をDecoderで出してもいいですし、もしくは対話ログがあるのでしたら、過去の対話ログで適切なものをピックアップして、そのまま持ってきてもいい。応答内容の抽出や検索結果のリランクで出してあげてもよかったりします。

データ管理についても、Wikipediaのように文書でバンとあるだけでなく、なにか整理されたかたちで、tripletsですとか、Knowledge Graphで整理されたかたちであったりすると、より使いやすかったりします。

ということで、分野や基本的な技術がまたがっているので、いろんな分野の人が入ってきてくれるとうれしいです。

時系列的に、特徴として言いたいところとしては、Knowledge-GroundedやKnowledge Baseなど、知識ベースというところが新しく出てきている印象です。あとはCommonsenseなどですね。

トレンドは、ここ数年なのであれですが、論文の傾向的には増えてきていると思います。

あとはACLやAAAIのワークショップでCommonsenseやKnowledge Baseの対話が取り上げられてきているので、徐々に注目が集まってきています。

ベースとなるモデルです。

ザッと書きましたが、自然言語処理をやっていらっしゃる方はだいたいなんとなくわかると思います。Seq2Seq、MemoryNet、Transformer、強いモデルがどんどん使われている感じです。それぞれ、元々の論文と対話への応用例を入れておきました。後半の論文紹介で一部紹介できるかなと思います。

データセット・ベンチマークタスク

データセットとベンチマークのタスクについて話していきたいと思います。SOTAを名乗ったりしたいときには、そもそもタスクがなかったりタスクの評価指標がきっちりしていないとSOTAとはなにか言いづらいので、そういうところについて説明したいと思います。

まず、用いられるデータセットですね。主にオープンなデータとプライベートデータは研究でも使われていたりします。

プライベートなほうは企業のデータですね。対話ログですとか、店舗状況とか。もし予約状況に関する対話ボットを作りたかったら、店舗の情報を知らなければ対話を生成できないところもあったりします。

オープンのほうは構造化が入っているものと非構造化のデータがあります。構造化のほうは、DBPediaとか、Wikipediaのデータを整理したもの。一方、非構造化のほうがもっと多くて、WikipediaやTwitter、あとはReddit,英語版の掲示板があったりします。

それらをもとに、ベンチマークタスクとして、先ほどのQAのほうのオープンドメイン版のOpen Domain QAなどはいくつかあります。今年、一般常識を反映したCommonsenseQAもあったりしています。

ただ、Conversationのほうはタスクがまだ定まっていない感じがしていまして、今もデータセットが提案されている途中でしたり、ワークショップがAAAIで開かれているので、ここから始まるのかなというところです。

評価指標なのですが、これが一番難しいところです。

もともと翻訳からモデルが取られたりというところもあったりして、ほかの翻訳や要約から取ってきた評価指標が使われることが多いです。あとは言語モデルに特有なところとして、PerplexityやEntropyもあったりもします。

ただ、問題として、人手や評価との相関や人間との認識があまり一致していないところがあります。

人手の評価は文が多様だとか、文脈が合っているかという評価は納得がいく、評価としてはリソースさえあればできるのですが、それとBLEU Scoreの相関を調べたものを見ますと、右上の図は一様分布みたいになってしまっていて、なんかわからない。

いくらBLEU Scoreが高くてもHuman Scoreが高くなるとは限りません。

わかりやすい例ですと、下に挙げている例として、何か聞いて「答えてくれてありがとう」みたいな感じのことを両方言っている。なので、人手の評価は高くなるんですが、単語がまったく一致していないとなるとスコアは落ちてしまうので、逆もしかりなんですが、自動評価が必ずしも人手の評価と一致しないので、タスクとして提案モデルをきちんと評価するのが難しいというところがあります。

ここからは研究紹介で、坂田さんに移ります。