NLP閱讀理解之Stochastic Answer Network (SAN)

今天終於開始技術博客的第一章,從閱讀理解的非預訓練model開始,第一篇SAN for SQUAD 2.0windows

閱讀理解系列之Stochastic Answer Network (SAN)

1、摘要

SAN for SQUAD 2.0 主要包含兩個組件:
a span detector and a binary classifier for judging whether the question is unanswerable,and both components are jointly optimized.
也就是一個跨度檢測器和一個線性分類器,其中線性分類器用來判斷當前問題是否有答案(畢竟這是SQUAD2.0相比於 1.1的最大改變之處,也爲閱讀理解提供了難度),跨度檢測器用來檢測答案的span。整個模型能夠看做,總體包含五(四)層。網絡

2、 模型架構

如下是模型的總體架構圖
模型總體架構圖
模型分爲兩部分:左邊的上半部分也就是剛纔所寫的跨度檢測器(a span detector),也就是SAN Answer Module,右邊的上半部分也就是線性分類器(a binary classifier),並且模型包括兩種不一樣的layers。
幾個關鍵點:架構

  • 共享層(不侷限於某個特定的下游任務)包括:
    a lexicon encoding layer, contextual encoding layer and memory generation layer
  • 特定下游任務層:包括 SAN ANswer Module 和 a binary classfier
  • 整個模型是共同窗習的

下面詳細介紹整個模型的各個層級函數

1.lexicon encoding layer(也就是詞典編碼層)

事先將question劃分位Q={q_0,q_1,q_2,..,q_m-1} ,passage/paragraph劃分爲P={p_0,p_1,p_2,...,p_m-1},answer 計算爲 A={abegin , aend},A也就是P中的一個字串,當問題沒法回答時,A指向段落的最後一個標記。學習

  • 第一步,將Q and P映射到歐氏空間(全部model的第一步都大差不差),這裏採用的是300-dim的glove word emdedding、16-dim part-of-speech(POS) tagging embeddings, 8-dim named-entity embeddings and 4-dim hard-rule features
  • 最後就是經過兩層的position-wise Feed- Forward Networks (FFN)將questrion and passager映射到同一緯度。最後分別將Q和P轉換爲矩陣:Eq=R d*m

Eq=Rd*m編碼

2.Contextual Encoding Layer(上下文編碼層)

使用兩層的BiLSTM做爲上下文信息編碼層spa

  • 爲了不過擬合將600-dimensional CoVe vectors和lexicon embeddings進行concat 做爲contextual encoding layer的最後輸入,
  • 而後將600-dimensional CoVe vectors與第一層的輸出進行concat做爲第二層的輸入。

最後經過兩層的BiLSTM的輸出獲得最終的Hq∈ R4d×mfor questions and Hp∈ R4d×nfor passages.code

3.Memory Generation Layer

本層的主要做用的是將前面獲得的Hq、 Hp進行融合從而產生一個 working memory,在此層中使用attenion機制來計算qustion and passage之間的類似度:
截屏2020-02-13下午7.39.44.png
先獲得question-aware passage representation:
Up= concat(Hp, HqC)
而後對passage進行self-attention:
截屏2020-02-13下午7.43.00.png
本層的數學公示建議去看論文。😂
最後也是經過一層BiLSTM造成了最後的M = BiLSTM([Up];ˆUp]).component

4.Span detector

這一層對於有答案的文章來講其實也就是最後一層,該層輸出最後答案的span。
本文中使用的是multi-turn answer module 來進行 span detector
輸入初始狀態s0(s0是Q每一個token的加權之和),最後經過一個線性函數來找begin and end point of answer spans at each reasoning step t ∈ {0, 1, . . . , T − 1}
截屏2020-02-13下午7.16.33.pngblog

  • 須要注意的是最後的預測span是每一個時間步驟t的平均和;
  • 論文中採用了隨機的dropout機制
5.Unanswerable classifier

針對SQUAD 2.0中的不可回答問題,特有的一個機制。
論文中僅僅採用了一層的神經網絡來做爲線性分類器。公式以下:
Pu= sigmoid([s0; m0]W4)
Pu也就是最後判斷問題是否可回答的機率值。

6.Objective
  • 目標函數包括兩部分:
    Ljoint= Lspan+ λLclassifier
  • span loss function:

截屏2020-02-13下午7.26.36.png

  • 線性分類器的目標函數:

截屏2020-02-13下午7.26.42.png
y=1時表示問題不可回答,y=0時表示問題可回答

3、實驗

截屏2020-02-13下午7.29.29.png
從實驗結果來看,SAN在2.0上的確取得了當今非預訓練模型幾乎最好的成績,至於實驗細節,論文寫的仍是很詳細的。

實驗細節

分詞: spaCy
word embedding: GloVe 300-D
character encoding: 利用CNN訓練, embedding size設爲20. windows設爲1,3,5 hidden size設爲{50, 100, 150}
word embedding和character embedding拼接, 最終的lexicon embedding就是600維.
LSTM hidden size: 128
注意力層的projection size: 256
dropout: 0.2
batch size: 32
optimizer: Adamax
learning rate: 0.002

但本身在對於代碼的復現中並無在2.0上取得像論文同樣的實驗效果,(可能哪兒參數不對?歡迎你們給我留言討論😁)

4、我的感悟

就整篇文章看完,我的以爲 SAN的模型其實十分簡單,並且整個的訓練時間也不長.實力點贊!!
SAN與其餘模型主要的區別在於,它的預測輸出結果,並非最後直接輸出,而是每一個時間步驟迭代的結果,最後取平均獲得最後輸出,這點的確很特別。。。
下期預告:QANET

相關文章
相關標籤/搜索