ParlAIと対話(dialog)における具体的な応用タスク|言語処理へのDeepLearningの導入の研究トレンドを俯瞰する #2

f:id:lib-arts:20190501155826p:plain

近年猛威を振るっているDeepLearningの言語処理への応用についてまとめていければと思います。
#1では最近のトレンドに入っていく前に概論について抑えようということで、2015年〜2016年頃までのトレンドを概論とともにまとめた「深層学習による自然言語処理」の内容を要約を行いました。

前提知識は抑えられたので、#2では対話(dialog)問題を取り扱う統合的なフレームワーク(unified framework)であるParlAIと具体的な応用タスクについてご紹介できればと思います。
以下目次になります。

1. 前提の整理
2. ParlAIとは
3. 具体的なタスクのご紹介(bAbI、SQuAD、aqua)
4. まとめ

 

1. 前提の整理
まずは前提の整理を行います。今回ご紹介するParlAIは対話(dialog)に関する話題です。
#1では対話の話題を省きましたが、#2で対話について取り扱うにあたって前提を整理するにあたって、「深層学習による自然言語処理」の5.3節と5.4節から話を進めたいと思います。以下5.3節の対話と5.4節の質問応答の要約です。
======
・対話(5.3)
対話システム(dialog system)は、人がコンピュータと会話を行うことを目的としたシステムです。対話システムが主に目指すところは、「会話」を人間とコンピュータのユーザインターフェース(UI)として用いることです。対話モデルの研究で主に取り組まれているタスクは、対話文脈を参照して適切な応答を予測するタスクです。
とはいえ、機械翻訳において大きな成果を出した系列変換モデルを用いた対話モデルでは様々な課題があり、具体的には「はい」「ありがとう」「わかりません」などの多くのシンプルな応答を出してしまう課題があります。これらのシンプルな応答が対話データの中で高頻度に現れることから、機械学習モデルがシンプルな応答をよく選んでしまう1つの要因と言われています。
上記のように対話システム機械学習を用いて構築するための大きな課題として自動評価の難しさがあります。機械学習を用いたシステムではハイパーパラメータの選択などで何度も学習結果を評価する必要があるため、人手の評価を代替する自動評価手法が特に重要になってきます。が、対話は翻訳と異なり入力に対する妥当な出力の多様性が非常に多く、自然な対話データから大規模な評価データセットを作ることが難しいという課題が生じてしまいます。
この自動評価の難しさから、応答性性を直接行わず複数の応答候補群から正しい参照応答を選択する応答選択タスクによる評価法も提案されています。

・質問応答(5.4)
質問応答(QA; question answering)とは、自然言語で与えられた質問に対して自然言語で回答を行うタスクのことです。質問も様々な種類があり、"Who"や"Why"や"When"のように回答が具体的な名詞となる事実型質問応答(factoid QA)や、"Why"や"How"などのように回答が理由や方法などのfactを答えるものでない非事実型質問応答(non-factoid QA)などの分け方があります。
また、特定の分野に限った質問としてクローズドドメイン質問応答(closed-domain question answering)や分野を限定しないオープンドメイン質問応答(open-domain question answering)の分け方や、画像に対しての質問応答である、画像質問応答(VQA; Visual Question Answering)や文書の内容を理解して質問に答える文書読解(reading comprehension)のような新しいタスクも出現してきています。
======


2. ParlAIとは
下記がParlAIの公式のGitHubなので、こちらを元に2節はまとめていきます。

GitHub - facebookresearch/ParlAI: A framework for training and evaluating AI models on a variety of openly available dialogue datasets.

f:id:lib-arts:20190501170317p:plain
上記は概要部分をキャプチャしたものです。上記によると、ParlAIはPythonで実装された対話AIの研究のためのフレームワークです。目標として、研究者に対話モデルの学習/検証環境や多くの有名なデータセット、学習済みモデルなどを研究者に提供することを挙げています。
また、サポートされているタスクとして、多くの人気なデータセットを含んでいます。具体的にはSQuAD、bAbIタスク、WikiQAなど様々なタスクのデータセットを用いることができます。これらのタスクの詳細については3節でご紹介します。
3節で具体的にタスクについて見ていく前に、2節ではParlAIのインストールについて取り扱っておきます。

f:id:lib-arts:20190501171746p:plain
上記にインストールの手順がまとまっているので、上記に従ってインストールを行うことができます(公式のREADMEのキャプチャに過ぎないので、詳細は公式を参照してください)。


3. 具体的なタスクのご紹介(bAbI、SQuAD、aqua)
2節でインストールについて取り扱ったので、3節では具体的なタスクについてご紹介していきます。具体的なタスクについてはREADMEの"Basic Examples"を実行してみることでインストールや中身の確認を行うことができます。

f:id:lib-arts:20190501172508p:plain
上記のようにREADMEに手順がまとまっているので、

$ python examples/display_data.py -t babi:task1k:1

を早速実行してみましょう。これを実行することにより、bAbIタスクのデータセットのダウンロードと中身を確認することができます。実行結果としては下記のようなものが出力されます。

f:id:lib-arts:20190501172545p:plain

上記を確認することでbAbIタスクの大枠について確認できます。bAbIタスクでは簡単な文章読解問題で、読んだ文章に関する質問について回答を行います。
bAbIタスクについて確認できたので、次はSQuAD(Stanford Question Answering Dataset)タスクについて確認してみましょう。

$ python examples/display_data.py -t squad

上記を実行すると下記のようなものが出力されます。

f:id:lib-arts:20190504183024p:plain

これを確認するとSQuADタスクの詳細について理解することができます。SQuADタスクもbAbIと同様に文書読解(reading comprehension)タスクとなっています。
最後にAQuA(Algebra Question Answering)タスクについてご紹介します。

$ python examples/display_data.py -t aqua

上記を実行すると下記のようなものが出力されます。

f:id:lib-arts:20190501174642p:plain
上記を確認するとAQuAタスクは簡単な数学の文章題を解くタスクであることがわかります。

4. まとめ
#2では対話タスクに関する開発プラットフォームのParlAIとサポートされている対話や質問応答などの具体的なタスク例についてご紹介しました。
#3ではこれらのタスクに関しての事前学習のモデルとして2018年に話題になったBERTについてご紹介できればと思います。