最近,我在史丹福大學(Stanford)通過深度學習(CS224N)完成了一門關於NLP的課程,我非常喜歡這段經歷。學了一大堆新東西。在我的期末項目中,我研究了一個基於史丹福問答數據集(SQuAD)的問答模型。在這篇文章中,我將介紹問答模型的主要組成部分。
你可以在我的Github repo上找到完整的代碼:
https://github.com/priya-dwivedi/cs224n-Squad-Project
我最近還為這個模型添加了一個web演示,您可以在其中放入任何段落並詢問與之相關的問題。點擊連結查看:
https://deeplearninganalytics.org/demos/
SQuAD 數據集
史丹福問答數據集(Stanford Question answer Dataset, SQuAD)是一個新的閱讀理解數據集,由一組維基百科文章上的眾包工作者提出的問題組成,其中每個問題的答案都是從相應的閱讀文章的一段文字,或跨度。在500多篇文章中有超過10萬個問題-答案對,這個小組比以前的閱讀理解數據集要大得多。
在這個數據集上有一個快速的進展,一些最新的模型在回答問題的任務中達到了人類水平的準確性!
舉一個帶有原文,問題以及回答的例子:
【原文】阿波羅號從1961年到1972年運行,並由1962年到1966年與之同時運行的雙子星計劃支持。雙子座任務發展了一些太空旅行技術,這對阿波羅任務的成功是必要的。阿波羅使用土星家族火箭作為運載火箭。阿波羅/土星運載工具也被用於阿波羅應用計劃,其中包括天空實驗室,一個在1973-74年支持三次載人任務的空間站,以及阿波羅-聯盟測試項目,一個在1975年與蘇聯聯合的地球軌道任務。
【問題】1973-1974年間,哪個空間站支持了三次載人飛行任務?
【答案】——太空實驗室
主要特點:
- 它是一個封閉的數據集,這意味著一個問題的答案總是上下文的一部分,也是上下文的連續範圍
- 因此,找到答案的問題可以簡化為找到與答案相對應的上下文的開始索引和結束索引
- 75%的答案不超過四個單詞長度
機器理解模型-關鍵組件
嵌入層 (Embedding Layer)
該模型的訓練數據集由上下文和相應的問題組成。這兩個詞都可以被分解成單獨的單詞,然後這些單詞可以被轉換成單詞嵌入,使用的是預先訓練好的向量,比如GloVe向量。詞嵌入比為每個詞使用一個熱向量更好地捕獲詞周圍的上下文。對於這個問題,我使用了100維度GloVe詞嵌入,我們沒有調整他們在培訓過程中,因為我們沒有足夠的數據。
編碼器層 (Encoder Layer)
RNN編碼器我們在模型中添加的下一層是基於RNN的編碼器層。我們希望上下文中的每個單詞都能意識到它之前和之後的單詞。一個雙向的GRU/LSTM可以幫助實現這一點。RNN的輸出是一系列前向和後向的隱藏向量,我們將它們串聯起來。類似地,我們可以使用相同的RNN編碼器來創建問題隱藏向量。
注意力層 (Attention Layer)
到目前為止,我們已經有了上下文的隱藏向量和問題的隱藏向量。為了找出答案,我們需要把這兩個放在一起看。這就是注意力的用武之地。它是答疑係統的關鍵部分,因為它幫助我們決定,給定的問題,我應該「注意」上下文中的哪些詞。
輸出層 (Output Layer)
模型的最後一層是softmax輸出層,它幫助我們決定答案範圍的開始和結束索引。我們的損失函數是開始和結束位置的交叉熵損失的和。並使用Adam優化器最小化。
大家如果感興趣,可以跟隨Github連結去跑一下程序。
參考:
https://towardsdatascience.com/nlp-building-a-question-answering-model-ed0529a68c54
文章來源: https://twgreatdaily.com/pQWsmHABgx9BqZZIWHfN.html