エイエイレトリック

なぐりがき

NLPにおけるQuestion Answeringについて、ざっくりまとめ

Kaggleで NLP のコンペ、TensorFlow 2.0 Question Answering がはじまりました。

Question Answering (質問応答) といえば、 IBMの開発したWatsonや、Siri・AlexaといったAIアシスタントなどで、みなさんにも馴染み深いタスクですね。

KaggleでQAが盛り上がることを予想して、 Speech and Language Processing (SLP) の Question Answering の章をざっくりまとめます。

ぶあー書いたので、誤字脱字・間違いがあればご指摘いただけると幸いです。

SLPについて

Speech and Language Processing (SLP) は Dan Jurafsky と James H. Martin による NLPの参考書です。現在 2nd editionが出版されています。

Speech and Language Processing: International Edition

Speech and Language Processing: International Edition

現在ウェブ上で無料公開されているSLPの3rd editionは、まだdraftではありますが、QAの章については、概要がまとまっていて良い参考資料であると感じます。(比較的最近執筆された章の様子)

2nd editionは、ニューラルが流行る前に発売された本なので、情報が古いですが、こちらは最新の情報 (BERTの手法) も述べられています。

今回は Question Answering、特に今回のKaggleコンペで扱うであろう IR-based な手法について簡単に紹介します。 詳しく知りたい場合は pdf を読んでください。

Introduction

Answer to Life.png

from File:Answer to Life.png - Wikimedia Commons *1

多くのQAシステムは factoid question (ファクトイド型質問) という、短いテキストから、簡単な事実を答えることが可能な質問にフォーカスしています。

例えば、以下のような、名前、数値、場所などを答える質問です。

(25.1) Who founded Virgin Airlines? (ヴァージン航空の創立者は誰?)

(25.2) What is the average age of the onset of autism? (自閉症発症の平均年齢は?)

(25.3) Where is Apple Computer based? (アップルコンピュータの本社はどこ?)

ファクトイド型質問への、質問応答システムの枠組みは大きく2つです。

  • information retrieval based (IR-based) : 情報検索ベース
  • knowledge based : 知識ベース

IR-basedの質問応答は、Web上のテキストや、PubMedのような膨大なテキスト情報を用いる方法。 これは、以下の流れで実行されます。

  • ユーザーから質問を受け取る
  • IRの技術で関連文書・パッセージ (一節) を探す
  • reading comprehension (読解)アルゴリズムで、探した関連文書・パッセージから、答えとなる テキストの span (スパン) を抽出

一方、knowledge-basedな質問応答は、与えられたクエリから semantic representation (意味表現) を構築するシステムです。

  • 例えば、 When was Ada Lovelace born? というクエリを birth-year (Ada Lovelace, ?x) という意味表現にマッピング
  • この意味表現をデータベースのクエリとして扱い、事実を抽出
  • このブログ記事では詳細まとめません

IR-based Factoid Question Answering

IR-basedな質問応答の目的は、Webや文書の集まりから短い部分テキストを探すことで、質問に答えることです。 大きく3つの段階があります。

  • Question Processing : 質問文に対する処理
  • Document and Passage Retrieval : 文書とパッセージ検索
  • Answer Extraction : 回答抽出

以降、詳しく解説します。

Question Processing (質問文に対する処理)

次の段階で、IRシステムが文書検索を行うため、IRシステムに渡すキーワード(クエリ)を抽出する。 要するに、システムが扱いやすいように質問文に対して前処理を行う段階です。

近年では End-to-End な手法が主流なので、あまり馴染みがないかもしれません。(自分はないです)

Query Formulation (クエリの定式化)

IRシステムに渡すクエリを作成する。

例えば、

  • TF-IDFで文書検索を行うのであれば、TF-IDF値
  • 同義語も検索に含んだり、スペルミスを修正する query expansion (クエリの拡張)
  • 質問文を平叙文に変換する、 query reformulation
    • where is the Valley of the Kingsthe Valley of the Kings is located in に変換する
    • 変換はパターンマッチでも扱える。詳しくは Li の論文を参照。

Answer Types (回答型)

質問を回答型で分類 (question classification) を行って、その情報をIRシステムに渡します。

回答型としては、 Named entity recognition (固有表現抽出) タスクで定義されている固有表現 (PERSON, LOCATION, etc.)、 もしくは独自に回答の種類の分類方法を定義し、利用することが考えられます。

例えば、Li and Rothの研究では、図のような、6つの粗い分類、50の細かいクラスを定義しています*2

f:id:sh111h:20191102155328p:plain

from https://web.stanford.edu/~jurafsky/slp3/25.pdf

  • 回答型の分類のための特徴量として用いられるのは、POS (品詞) 情報や単語埋め込みのほかに、 answer type word や question head wordがある
    • wh-word のあとに現れる名詞句
    • 例えば、 which city ~?citywhat is the state flower ?flower
  • 単語埋め込みを使わなくとも 疑問詞と question head wordで分類できそうですが、 REASONDESCRIPTION の分類は難しい

Document and Passage Retrieval (文書とパッセージ検索)

質問文に対する処理を行ったあとのクエリを利用して、IRシステムが文書検索を行う段階です。

  • まず、IRシステムは、クエリに関連する順に文書をランクづけし、文書セットを結果として返す
  • 次に、システムは、セクションや段落や数文のような小さなパッセージに分ける
    • 多くのAnswer Extraction (回答抽出) の手法は、段落のような小さい範囲を入力として与える設計のため
    • 簡単なpassage retrieval (パッセージ検索) は分けたパッセージをそのまま次の段階に渡す
    • より洗練された方法の場合、固有名詞や回答の種類を含んでいるかでフィルターをかけた結果を渡す

と、ここまで書きましたが、

最近では Googleのスニペット機能 があるので、 この周辺の技術はあまり注目されていない様子。

例えば、最初に例として出した以下の質問文

(25.2) What is the average age of the onset of autism?

は、Googleで検索すると答えとなるスニペット(=パッセージ)を抜き出して表示してくれます。

f:id:sh111h:20191102162400p:plain

(もしかしたら上記画像から表示が変わるかもしれませんが、検索結果のリンク https://www.google.com/search?&q=What+is+the+average+age+of+the+onset+of+autism%3F)

Answer Extraction (回答抽出)

パッセージから特定の質問への回答を抽出する段階です。 このタスクは一般的に Span Labeling (スパンラベリング) としてモデリングされます。

※ここで言う スパン とは、テキストの範囲を意味します。(文字単位・単語単位で範囲・インデックスを指定)

Feature-based Answer Extraction, N-gram Tiling Answer Extraction (ニューラルではない手法)

単純なベースラインとして、固有表現抽出で候補となるパッセージから回答の種類である固有名詞を抽出するモデルが考えられます。 しかし、定義を答える問題であったり、特定の固有名詞でない場合は想定されていないので、工夫が必要です。

Neural Answer Extraction (ニューラルを用いた回答抽出)

ニューラルネットワークを利用した回答抽出の手法は、ある適切な方法において、質問とその回答は意味的に近い という直感に基づいています。

つまり、質問文とパッセージの埋め込み表現を計算し、質問の埋め込み表現と、最も近い、パッセージのスパンを回答として選択する手法です。

また、ニューラルネットワークを用いた回答抽出は、Reading Comprehension (読解) タスクの文脈で語られることが多いです。 これは、子供の読解テストを利用して、テキスト理解アルゴリズムの評価を行う Deep Read の研究に由来します。

つまり、QAタスクの中の読解タスクは、Natural Language Understanding(NLU, 自然言語理解)の精度を図る側面もあるということです。

Reading Comprehension Datasets (読解タスクのデータセット)

読解データセットとして有名なのは SQuAD です。 質問文とWikipediaのテキストを入力として、質問の回答となるスパンをWikipediaのテキストで指定します。

実際にどんな問題があるかは Explore SQuAD の例を見た方が早いかと思います。 SQuADの特徴として、与えられたWikipediaのテキストでは答えられない、<No Answer> という回答が存在します。

モデルはExact Match(完全一致)とF1 scoreで評価されます*3

Reading Comprehension Algorithm (読解タスクのアルゴリズム)

読解タスクのモデルもデータセットと同様、本当に色々増えています。

SLPでは DrQABERT が紹介されていますが、 今現在 SQuAD のリーダーボードをみると、 ALBERT がトップになっており、この研究領域のスピード感を感じます。

(BiDAFがすごい下の方にあるので驚きました)

そんなわけで、モデルの解説については省略します。 気になるモデルについて、個々人で調べてください(度々はしょってすいません)。

簡単にまとめるために再掲しますと、 ニューラルネットワークを用いた回答抽出モデルの、基本的なアルゴリズムは、最初に述べた「質問文とパッセージの埋め込み表現を計算し、質問の埋め込み表現と、最も近い、パッセージのスパンを回答として選択」 *4 です。

また、「質問文」と「回答を含む(可能性がある)パッセージ」という 2つ の入力があることが、文書分類や翻訳などの系列ラベリングとは大きく異なる点だと言えます。 DrQAだと質問文と回答文を別々に扱っていますが、BERTの場合 [SEP] を挟んで同じ系列の入力として対応しているようです。

おわりに

ざっくりまとめるつもりが少し長くなりました。

Kaggleのコンペで使われるデータセット (Google's Natural Questions) はSQuADと同じWikipediaをベースとしていますが、 質問に対してlong answer, short answer, yes/no それぞれの回答が必要であったり、html情報があったりするので、 単純に既存のモデルでは精度が出ないという難しさがある雰囲気がします。

Starter NotebookでBERTが提供されていて恐ろしいなと思うのですが、このベースラインから、最終的どこまで精度が上がるのか楽しみです。

自分はこれからTensorflow 2.0 を勉強します。

*1:生命、宇宙、そして万物についての究極の疑問の答え - Wikipedia

*2:コードとデータは公開されています https://cogcomp.seas.upenn.edu/Data/QA/QC/

*3:F値に関しては、評価方法が 回答の a, an, the を取り除き、normalizeした上で、bags of tokensとしたときのオーバーラップを利用しているお気持ちがわからないので、知っている方がいれば、だれか教えてください

*4:念のため原文を引用すると computing an embedding for the question and an embedding for each token of the passage, and then selecting passage spans whose embeddings are closest to the question embedding