Reading Wikipedia to Answer Open Domain Questions (2017)
April 26, 2025Reading Wikipedia to Answer Open Domain Questionsで提案されたDrQAは、ドメインを問わない事実を問う質問に対して、Wikipediaの文書のある文字列区間を解答とみなして出力する。 DrQAは質問に関係する文書を収集するDocument RetrieverとDocument Readerから構成される。 Document Retrieverは、バイグラムのTF-IDFで質問と類似するWikipediaを検索し、上位5位の文書をDocument Readerに渡す。 Document Readerは、Document Retrieverから渡された質問と応答を別の方法で分散表現に変換する。 最後に質問と応答の分散表現を比較し、応答の解答と推定した区間を出力する。
Document Retrieverは段落単位で文書を分散表現に変換する。 まず、単語\(p_i\)を分散表現\(\tilde{{\rm \boldsymbol{p}}_i}\)に変換し、\(\tilde{{\rm \boldsymbol{p}}_i}\)を含む\(m\)個の単語からなる段落\(\{\tilde{{\rm \boldsymbol{p}}}_1,\dots \tilde{{\rm \boldsymbol{p}}}_m\}\)を双方向LSTMに入力する。 そして、各層の隠れ状態を結合したベクトルを単語\(p_i\)の最終的な分散表現としてあつかう。
LSTMの入力になる\(\tilde{{p}}_i\)は、Gloveによる分散表現\(\mathbf{E}(p_i)\), 質問文に含まれるかを示す真偽値、品詞、固有表現、正規化されたTerm frequency, aligned question embedding \(f_{\textit{align}}(p_i)\)から構成される。 最後のalign question embeddingは\(\alpha(\cdot)\)を全結合層とReLU, \(q\)を質問とすると以下の式に対応する。 $$ f_{\textit{align}}(p_i)=\sum_j \frac{\exp(\alpha(\mathbf{E}(p_i))\cdot \alpha (\mathbf{E}(q_j)))}{\sum_{j’}\exp \left(\alpha (\mathbf{E}(p_i))\cdot \alpha (\mathbf{E}(q_{j’}))\right)} \mathbf{E}(q_j) $$
質問は、段落よりも単純な方法で分散表現に変換される。 トークン数\(l\)の質問の単語\(q_j\)の分散表現をRNNに入力する。 そして、RNNの隠れ状態\(\mathbf{q}_i\)から質問の分散表現\(\mathbf{q]}\)を\(\mathbf{w}\)を重みとして以下の式で求める。 $$ \mathbf{q}=\sum_j\frac{\exp(\mathbf{w}\cdot \mathbf{q}_j)}{\sum_{j’}\exp(\mathbf{w}\cdot\mathbf{q}_{j’})}\mathbf{q}_j $$
段落\(\{\mathbf{p}_1,\dots \mathbf{p}_m\}\)と質問\(\mathbf{q}\)の分散表現から、解答の開始と終了の区間を別々のモデルで推定する。 \(\mathbf{W}_s, \mathbf{W}_e\)を重みとして、\(i\le i’\le i+15\)のうち\(P_{\text{start}}(i)\times P_{\text{end}}(i’)\)を最大化する区間を解答とみなす。
$$ \begin{align*} P_{\text{start}}(i)&\propto \exp(\mathbf{p}_i\mathbf{W}_s\mathbf{q})\\ P_{\text{end}}(i)&\propto \exp(\mathbf{p}_i\mathbf{W}_e\mathbf{q}) \end{align*} $$