🐒

Stanford NLP with Deep Learning Lecture11のまとめ

2023/07/18に公開

1.はじめに

今回も引き続きStanford大学がYoutubeで公開しているMOOC[NLP with DeepLearning]の11回についてまとめていきます。
今回の内容はQAタスクに特化した内容になっており、現在プリンストン大学で助教授をしているDanqi Chenさんによる講義でした。
いつもより生徒さんの質問が活発だったりといい講義でした。

2.QAタスクについて

今回の講義の中心であるQAタスクについてまず述べていきます。

2-1:QA(質疑応答)タスク

:自然言語を用いて、人間によって投げかけられた質問に対して自動的に答えを返すタスク

QAタスクとひとえに言っても、

  • 答えを出すための情報源
  • 質問の種類
  • 解答の方法
    これらの違いによって複数のタイプがあります。

そのなかでも前半部分はReading Comprehension(文章読解)タスクに沿って各種モデルの説明をしていきます。

Reading Comprehension(文章読解)

:元となる文章を理解し、その文脈に応じた質問に対する解答を文章中から見つけ出し返すタスクのこと

このタスクを理解することで他のタスクと置き換えたり、モデルが自然言語(人間の言葉)をどのくらい理解しているか評価したい時に役に立ちます。

2-2:SQuADについて

QAタスクを行うさいによく用いられるデータセットしてSQuAD(Stanford Question Answering Dataset)があります。
これはStanford大学が提供する文章読解に特化したデータセットで100kに及ぶアノテーション済みのトリプレット(テキスト, 質問, 答え)が含まれています。

SQuADにおけるタスクとしては以下のようになっています。
Input)

  • 元となる文章(context) C = (c_1, c_2, \cdots, c_N)
  • 質問(question) Q = (q_1, q_2, \cdots, q_M)

Output)

  • 1 \leqq start:end \leqq N

start, endはcontext内における回答に該当する箇所の開始地点と終了地点を意味します。

3.BiDAF

QAタスクについて述べたので次はそのタスクを実施するためのモデルについて述べていきます。
QAタスクはTransformerが登場するまではLSTMモデルがかなりいい精度を誇っていました。
そのLSTMベースの中でもQAタスクに強かったBiDAF(Bidirectional Attention Flow model)について説明していきます。
まずBiDAFとは図1のように複数の層を組み合わせて構成されているLSTMモデルとなっています。
図1)BiDAFのモデルアーキテクチャ図([1]より引用)
このモデルについて役割ごとで分割しながら各層について述べていきます。

3-1:Encoder部分

まずは入力をベクトル化してLSTMに入れる準備をするEncoder部分についてです。
BiDAFのEncoder部分は以下の三つの層で構成されています。(図2参照)

  • Character Embed Layer
  • Word EMbed Layer
  • Phrase Embed Layer

これらについて順を追って見ていきます。

図2)BiDAFのEncoder部分([2]より引用)

<\Charactor Embed Layer>

この層は各単語における構成要素である文字レベルのベクトルをCNNとMaxPoolingを介して得ることを目的としています。(図3参照)
この層によって未知語に対する汎化性能を得ることができます。
図3)Character-level CNNのモデル図([3]より引用)

<\Word EMbed Layer>

この層は文脈を考慮しない単語レベルのベクトル埋め込みを行う層です。
ベクトル化にはGLoVeモデルを採用しています。
このモデルはWord2Vecの後発モデルでwindowを用いて局所的に単語埋め込みを学習していくWord2Vecに加えて、共分散行列も加味して単語ベクトルを得るモデルです。
これによって大域的にも局所的にも考慮された単語ベクトルを得ることができます。

<\Phrase Embed Layer>

この層ではCharacter Embed Layerの出力とWord Embed Layerの出力をもとに双方向LSTM(図4参照)を用いて文脈に沿った単語ベクトルの獲得を目的としています。
図4)双方向LSTMのモデルアーキテクチャ図([4]より引用)

また、この層は図2を見てわかるとおり、context部分とquestion部分で異なる双方向LSTMを用いています。

Encoder部分の数式的理解

これらをまとめると以下のようになります。

  1. contextとquery(質問)の各単語においてCharacter Embed LayerとWord Embed Layerを用いて各層の出力を結合し、単語表現ベクトルを獲得する
\begin{align} &e(c_i) = f([GLoVe(c_i);charEmb(c_i)]) \\ &e(q_i) = f([GLoVe(q_i);charEmb(q_i)]) \end{align}
  1. contextとqueryそれぞれで双方向LSTMを用いて文脈を考慮した単語表現ベクトルを獲得する

図5)2に該当する部分の数式([1]より引用)
双方向のベクトル表記をmarkdownで書く方法がわからなかったので講義からの引用ですみません。
(左側がcontext, 右側がquery部分に該当します。)

3-2:Attention部分

Encoder部分で文脈を考慮した単語表現ベクトルを獲得したので、次はその出力をもとにcontextとquery部分の関係を見る部分であるAttention部分について述べていきます。
BiDAFでは以下の2種類のAttentionが採用されています。

  • Context-to-query Attention
    context内の各単語において、query内の単語と最も関係性の高い単語を選ぶというAttention

  • Query-to-context Attention
    Query内の一つの単語と関係性の高い単語をcontext内の単語から選ぶ(複数可)というAttention

それぞれのAttentionにおける手順としては以下のようになっています。

  1. context内単語ベクトル\mathbf{c}とquery内単語ベクトル\mathbf{q}のペア全ての類似度スコアを重みベクトル\mathbf{w}_{sum}を用いて算出する。
S_{i,j} = \mathbf{w}_{sum}^T[\mathbf{c}_i;\mathbf{q}_j;\mathbf{c}_i \odot \mathbf{q}_j] \in \mathbb{R} \\ [\mathbf{w}_{sum} \in \mathbb{R}^{6H}]
  1. それぞれのAttentionの計算を行う
  • Context-to-query Attention
  1. Softmax関数を用いて、Attention weightの算出を行う
\alpha_{i,j} = Softmax(S_{i,j}) \in \mathbb{R}
  1. Attention scoreの算出
\mathbf{a}_i = \sum_{j=1}^M \alpha_{i,j}\mathbf{q}_j \in \mathbb{R}^{2H}
  • Query-to-context Attention
  1. Softmax関数を用いて、Attention weightの算出を行う
\beta_{i} = Softmax(\max_{j=1}^M (S_{i,j})) \in \mathbb{R}^N
  1. Attention scoreの算出
\mathbf{b}_i = \sum_{i=1}^N \beta_{i}\mathbf{q}_i \in \mathbb{R}^{2H}
  1. Attentionの最終出力
    各Attentionの出力を結合して、最終出力とします。
\mathbf{g}_i = [\mathbf{c}_i;\mathbf{a}_i, \mathbf{c}_i \odot \mathbf{a}_i, \mathbf{c}_i \odot \mathbf{b}_i] \in \mathbb{R}^{8H}

3-3:Output部分

Attention部分によってcontextとqueryの関係性を内包したベクトルを獲得できました。
最後のOutput部分ではModel LayerとOutput Layerの二層で構成されています。
モデル層では解答のstartとendを見つけるためのそれぞれ異なる2種類の双方向LSTMが採用されています。

\mathbf{m}_i = BiLSTM(\mathbf{g}_i) \in \mathbb{R}^{2H}

出力層では、解答のstart,endそれぞれに該当するであろう単語の確率分布をSoftmax関数を用いて得ることを目的としています。

\begin{align} &P_{start} = Softmax(\mathbf{w}_{start}^T[\mathbf{g}_i;\mathbf{m}_i]) \\ &P_{end} = Softmax(\mathbf{w}_{end}^T[\mathbf{g}_i;\mathbf{m^{\prime}}_i]) \\ &[\mathbf{w}_{start}, \mathbf{w}_{start} \in \mathbb{R}^{10H}, \mathbf{m^{\prime}}_i:\mathbf{m}_iとは異なるLSTMの出力] \end{align}

またこのモデルにおける最終的な損失は以下のように定義されています。

L = -log P_{start}(s^{\ast}) - log P_{end}(e^{\ast}) \\ [s^{\ast}:start地点の予測値, e^{\ast}:end地点の予測値]

4.BERT

BiDAFに続いてTransformerの事前学習モデルであるBERTをReading Comprehension(文章読解)タスクに用いた時について述べていきます。
BERTのモデル詳細については前の投稿で述べているのでそこを見ていただけたら幸いです。

今回のタスクに対して、BERTの事前学習の工夫のうち'Next Sentence Prediction'を活用しており、入力と出力は以下のようになっています。

[Input]

  • SegmentA ☞ Question
  • SegmentB ☞ Context

[Output]
Answer:SegmentBから"start","end"の2箇所を予測

\begin{align} &P_{start}(i) = Softmax_i(\mathbf{w}_{start}^T\mathbf{h}_i) &P_{end}(i) = Softmax_i(\mathbf{w}_{end}^T\mathbf{h}_i) &[\mathbf{h}_i:BERTにおける\mathbf{c}_iの隠れ層ベクトル] \end{align}

損失はBiDAFと同様に以下の損失を用いています。
この損失を用いてモデル内の全パラメータの学習を行います。

L = -log P_{start}(s^{\ast}) - log P_{end}(e^{\ast})

<\SpanBERT>

BERTのうち、文章読解を得意とするモデルとしてSpanBERTがあります。(図6参照)
このモデルは他のモデルとは出力が異なっており、解答のSpan(startからendまで)を予測することをタスクとしています。
図6)SpanBERTのアーキテクチャ図([5]より引用)

このモデルは以下の二つのアイデアをもとに作成されました。

  • 全体の15%のうち継続的なスパンをもつ単語に対して、マスク処理を行う
  • エンドポイント内(startからendまで)のマスクされた単語を予測するためにその前後の単語情報と位置情報を用いて予測する(以下式参照)
y_i = f(x_{s-1}, x_{e+1}, \mathbf{P}_{i_s+1}) \\ [s:startのエンドポイント, e:endのエンドポイント, \mathbf{P}:位置ベクトル]

5.BERTとBiDAF

5-1:BERTとBiDAFの比較

各モデルの内部について触れたのでそれぞれの比較を次は行っていきます。

<パラメータ数>

  • BERT
    110M(baseモデル), 330M(largeモデル)
  • BiDAF
    多くても2.5M程度

<モデルの特徴>

  • BERT
    Transformer由来なので再帰モデルを採用しておらず、並列処理が容易
  • BiDAF
    双方向LSTMをベースとしている(図1参照)

<事前学習>

  • BERT
    事前学習によってモデル内全てのパラメータの調整を行っている
  • BiDAF
    事前学習したGLoVeによって得られたベクトルをもとにモデルが学習しているため、事前学習で学習できる部分は限られている。

5-2:BERTとBiDAFの共通点

比較を通して二つのモデルの違いについて述べてきましたが、大元は同じです!
というのもQAタスクにおいて両モデルともQuestionとcontext間の関係をモデリングすることを目的としているためです。
このモデリングの際にAttentionを用いるか否かでここまで差ができるのを見るといかにAttentionの影響力がすごいものかわかりますね、、、
実際のところBiDAF内にAttentionを大きく精度が向上したらしいのでAttentionは偉大ですね
(ちなみにBiDAFのLSTMをTransformerに置き換えたモデルをQANetといいます)

6.Open-domain QAタスク

これまではReading Comprehension(文章読解)に焦点を合わせてQAタスクについて述べてきました。
つづいて別のQAタスクとしてOpen-domain Question Answeringについて述べていきます。
このタスクと文章読解タスクの異なる点としてはContextのような存在(Questionに結びつきのあるのある文章群)が存在せず、Wikipediaをはじめとする膨大なドキュメントをもとにQAタスクを行うことです。

6-1:Retriver-reader framework

Open-domain QA では以下の二つの要素を組み合わせてタスクを行っていきます。(図7参照)

  1. Retriver
    ⇒Questionをもとに大量のドキュメントから関係のあるものを選ぶモデル
  2. Reader(実質文章読解タスク)
    ⇒Retriverの出力である選ばれたドキュメントからQuestionの解答を見つけ出すモデル

図7) Open-domain QAにおける入出力

6-2:Retriverの学習について

Readerの学習については文章読解と同じようにすると事前学習できますが、Retriverの事前学習には一工夫必要です。次はその事前学習の工夫について述べていきたいと思います。

1. RetriverとReaderを共に学習させる

この手法はベクトル化の段階で複数のBERTを用いて、最終出力をもとに学習させる方法です。(図8参照
)
この手法はシンプルでわかりやすい反面各ドキュメントに対するベクトル化(D_{nvect}の算出)に膨大な計算コストが必要であるという弱点があります。

図8)RetriverとReaderを共に学習させる場合

2. Dense Passage Retrieval(DPR)

この手法は事前に手元にあるQAのペアを用いてモデルを学習させるという手法になっています。
具体的にはBERTを用いて得られたQuestionの埋め込みベクトルとDocumentから選ばれたPassageのうちAnswerに該当する部分の埋め込みベクトルとの類似度が高くなるように、そして反対に関係のないPassageの埋め込みベクトルとの類似度は低くなるように損失を定義し、モデルに学習させていく手法です。(図9参照)

図9) DPRにおける損失関数([6]より引用)

  • 図9内におけるp^+は正しいQとAに該当するPのペアを表している

DPRを紹介するにあたって1.の方法であるInverse Close Task(ICT)をもっときちんと説明する必要があるとDPRの論文であったり複数に記事を読んで思いましたね、、すみません。

6-3:Readerは必要ないのでは??

講義の最後にReaderの必要性について語られていました。
内容としては
事前に全てのドキュメントをエンコードし、近傍検索の手法を用いることでReader部分のBERTが不要であり精度も担保されているとのことでした

これについては、自分の理解不足と論文をきちんと読んでから記事にちゃんと記入していきたいと思っているので今のところは講義の内容紹介に留めておきます。

7.まとめ

今回の講義は他の講義と比較して事前知識であったり、講義外で調べなければいけない内容がかなり多い講義でした。
ただ自分としてもNLPについてまだまだ面白く知らない技術がこんなにもあるんだ!!と再確認できた講義でもあったのでQAまわりの論文をしっかり読んでいきたいと思います。

それなら記事作成するなよ!!って声も聞こえなくはないですが、あくまで目的は講義の翻訳まとめなので知識の詳細部分より講義の内容を忘れないうちにまとめることを優先しました。ご了承ください。
忘れていなければ、また近いうちに内容の編集を行う予定です。

8.参考資料

[1]Stanford CS224N NLP with Deep Learning | Winter 2021 | Lecture 11 - Question Answering
[2]Minjoon Seo, Aniruddha Kembhavi, Ali Farhadi1, Hananneh Hajishirzi, "BI-DIRECTIONAL ATTENTION FLOW FOR MACHINE COMPREHENSION", ICLR, 2017
[3]Xiang Zhang, Junbo Zhao, Yann LeCun, "Character-level Convolutional Networks for Text Classification", NIPS, 2015
[4]paper with code Bidirectional LSTM
[5]Mandar Joshi, Danqi Chen, Yinhan Liu, Daniel S. Weld†, Luke Zettlemoyer†, Omer Levy, "SpanBERT: Improving Pre-training by Representing and Predicting Spans" TACL 2019
[6]Vladimir Karpukhin, Barlas Oğuz, Sewon Min, Patrick Lewis, Ledell Wu, Sergey Edunov, Danqi Chen, Wen-tau Yih, "Dense Passage Retrieval for Open-Domain Question Answering", EMNLP, 2020

Discussion