全文共5257字,預計學習時長11分鐘或更長算法
經過閱讀本篇文章,你將理解:微信
· NLP中的Transformer模型真正改變了處理文本數據的方式。網絡
· Transformer支持NLP的最新變化,包括谷歌的BERT。架構
· 瞭解Transformer的運做規律,如何進行語言建模、序列到序列建模以及如何構建Google的BERT模型。框架
下面,咱們開始學習吧!函數
圖片來源:pexels/Dominika Roseclay性能
當前,天然語言處理(NLP)的技術正之前所未有的速度發展。從超高效的ULMFiT框架到谷歌的BERT,NLP的確處於發展的黃金時代。學習
這場革命的核心就是Transformer概念,它改變了數據科學家使用文本數據的方式,下文將作具體介紹。編碼
要舉個例子證實Transformer的實用嗎?請看下一段:人工智能
突出顯示的詞語指的是同一我的——Grieamann,一名受歡迎的足球運動員。對人類而言,弄清楚文本中這些詞之間的關係並不困難。然而,對於一臺機器來講,這是一項艱鉅的任務。
機器要想理解天然語言,明確句子中的此類關係和詞語序列相當重要。而Transformer 概念會在其中發揮重要做用。
目錄
1. 序列到序列模型——背景
· 基於序列到序列模型的循環神經網絡
· 挑戰
2. NLP中的Transformer簡介
· 理解模型框架
· 得到自注意力
· 計算自注意力
· Transformer的侷限
3. 瞭解Transformer-XL
· 使用Transformer進行語言建模
· 使用Transformer-XL進行語言建模
4. NLP中的新嘗試:Google的BERT
· 模型框架
· BERT訓練前的任務
NLP中的序列到序列(seq2seq)模型用於將A類型的序列轉換爲B類型的序列。例如,把英語句子翻譯成德語句子就是序列到序列的任務。
自2014年引進以來,基於seq2seq模型的循環神經網絡(RNN)已經得到了不少關注。當前世界的大多數數據都是序列形式,包括數字序列、文本序列、視頻幀序列和音頻序列。
2015年,seq2seq模型增長了注意力機制,使性能獲得進一步提高。過去5年來NLP發展速度之快,簡直使人難以置信!
這些序列到序列模型用途很是普遍,適用於各類NLP任務,例如:
· 機器翻譯
· 文本摘要
· 語音識別
· 問答系統等
舉一個關於seq2seq模型的簡單例子。請看下圖:
上方的seq2seq模型正將德語短語轉換爲英語短語。下面進行分解:
· 編碼器和解碼器都是循環神經網絡。
· 在編碼器中的每一步,循環神經網絡會從輸入序列中獲取一個字向量(xi),並從上一個時間步驟中獲取一隱藏狀態(Hi)。
· 隱藏狀態會在每一個時間步驟更新。
· 最後一個單元的隱藏狀態稱爲上下文向量,包含有關輸入序列的信息。
· 將上下文向量傳給解碼器,生成目標序列(英語短語)。
· 若是使用注意力機制,則隱藏狀態的加權之和將做爲上下文向量傳給解碼器。
儘管seq-2-seq模型表現良好,但仍存在必定的侷限性:
· 處理長時依賴仍頗具挑戰性。
· 模型框架的順序阻止了並行化。而Google Brain的Transformer概念解決了這一挑戰。
NLP中的Transformer是全新的框架,旨在解決序列到序列的任務,同時輕鬆處理長時依賴。Transformer是由Attention Is All You Need這篇論文提出的。建議對NLP感興趣的人閱讀該論文。
論文傳送門:https://arxiv.org/abs/1706.03762
引自該論文:
Transformer是首個徹底依靠自注意力來計算其輸入和輸出表示,而不使用序列對齊的循環神經網絡或卷積的轉換模型。
此處,「轉換」是指將輸入序列轉換成輸出序列。Transformer的建立理念是經過注意和重複,完全處理輸入和輸出之間的依賴關係。
下面請看Transformer的框架。它可能看起來使人生畏,但不要擔憂,下面將進行分解,以便逐塊理解。
圖片來源: https://arxiv.org/abs/1706.03762
上圖是Transformer框架的精彩插圖。首先只需關注編碼器和解碼器的部分。
如今看看下圖。編碼器塊具備一多頭注意力層,而後另外一層是前饋神經網絡。而解碼器具備額外的遮擋式多頭注意力層。
編碼器和解碼器塊其實是由多個相同的編碼器和解碼器彼此堆疊而成的。編碼器堆棧和解碼器堆棧具備相同數量的單元。
編碼器和解碼器單元的數量是超參數的。在本文中,使用了6個編碼器和解碼器。
如何設置編碼器和解碼器堆棧:
· 將輸入序列的嵌入詞傳給第一個編碼器。
· 而後進行轉換並傳給下一個編碼器。
· 將編碼器堆棧中最後一個編碼器的輸出傳給解碼器堆棧中的全部解碼器,以下圖所示:
此處須要注意的重要事項——除了自注意力和前饋層外,解碼器還有一層編碼器——解碼器注意層。這有助於解碼器聚焦於輸入序列的適當部分。
你可能會想這個「自注意力」層究竟在Transformer中作了什麼?好問題!這能夠說是整個設置中最重要的組成部分,因此首先要理解這個概念。
根據該論文:
自注意力,有時稱爲內部注意力,是注意力機制,其關聯單個序列的不一樣位置以計算序列的表示。
請看上方圖片,你能弄清楚這句話中的「it」這個詞的意思嗎?
「it」指的是街道仍是動物?對人們來講,這是個簡單的問題。但對於算法而言,並不是如此。模型處理「它」一詞時,自注意力試圖將「它」與同一句子中的「animal」聯繫起來。
自注意力容許模型查看輸入序列中的其餘詞語,以更好地理解序列中的某個詞語。如今,請看如何計算自注意力。
爲便於理解,筆者將此節分爲如下步驟。
1. 首先,須要從編碼器的每一個輸入向量中建立三個向量:
· 查詢矢量
· 關鍵矢量
· 價值矢量
訓練過程當中會訓練和更新這些向量。看完本節後,將更加了解其做用。
2. 接下來,將計算輸入序列中每一個詞語的自注意力。
3. 以「Action gets results」這一短語爲例。爲計算第一個單詞「Action」的自注意力,將計算短語中與「Action」相關的全部單詞的分數。當對輸入序列中某個單詞編碼時,該分數將肯定其餘單詞的重要性。
第一個單詞的得分是經過將查詢向量(q1)的點積與全部單詞的關鍵矢量(k1,k2,k3)進行計算得出的:
而後,將這些得分除以8,即關鍵矢量維數的平方根:
接下來,使用softmax激活函數使這些分數標準化:
而後將這些標準化後的分數乘以價值向量(v1,v2,v3),並將其相加,獲得最終向量(z1)。這是自注意力層的輸出。而後將其做爲輸入傳給前饋網絡:
所以,z1是輸入序列「Action gets results」的首個單詞的自注意力向量。以相同的方式獲取輸入序列中其他單詞的向量:
在Transformer的框架中,屢次而非一次並行或獨立地計算自注意力。所以,自注意力被稱爲多頭注意力。輸出的鏈接與線性轉換以下圖所示:
根據論文:
多頭注意力容許模型共同關注來自不一樣位置的、不一樣子空間表示的信息。
Transformer無疑是對基於循環神經網絡的seq2seq模型的巨大改進。但其自己有一些侷限:
· 注意力只能處理固定長度的文本字符串。在做爲輸入進入饋入系統前,必須將文本分紅必定數量的段或塊。
· 這種文本分塊會致使上下文碎片化。例如,若是句子從中間分割,則會丟失大量上下文。換句話說,文本分塊時,未考慮句子或其餘語義邊界。
那麼如何處理這些很是重要的問題呢?這是與Transformer合做的人們提出的問題,在此基礎上產生了Transformer-XL。
Transformer 框架可習得長時依賴性。但因爲使用了固定長度的上下文(輸入文本段),框架沒法超出必定的水平。爲克服這一缺點,提出了一種新的框架——Transformer-XL:超出固定長度上下文的注意語言模型。
在該框架中,前段中得到的隱藏狀態被再次用做當前段的信息源。它能夠建模長時依賴性,由於信息可從一段流向下一段。
使用Transformer進行語言建模
將語言建模視爲在給定前一單詞後,估計下一單詞機率的過程。
Al-Rfou等人 (2018)提出了將Transformer模型應用於語言建模的想法。根據該論文,整個語料庫應依照可管理能力,劃分固定長度段。而後,在段上單獨訓練Transformer模型,忽略全部來自前段的上下文信息:
圖片來源:https://arxiv.org/abs/1901.02860
這種框架不會出現消失梯度的問題。但語境碎片限制了其習得長期依賴性。在評估階段,該段僅會向右移動一個位置。新段必須徹底從頭開始處理。遺憾的是,這種評估方法計算量很是大。
在Transformer-XL的訓練階段,以前狀態計算的隱藏狀態被用做當前段的附加上下文。Transformer-XL的這種重複機制解決了使用固定長度上下文的限制。
在評估階段,可重複使用前段的表示,而非從頭開始計算(如Transformer模型)。固然,這會提升計算速度。
衆所周知遷移學習在計算機視覺領域的重要性。例如,可針對ImageNet數據集上的新任務微調預訓練的深度學習模型,並仍然可在相對較小的標記數據集上獲得適當的結果。
一樣,語言模型預訓練可有效改進許多天然語言處理任務。
傳送門:https://paperswithcode.com/paper/transformer-xl-attentive-language-models
BERT框架是Google AI新的語言表示模型,可進行預訓練和微調,爲各類任務建立最早進的模型。這些任務包括問答系統、情感分析和語言推理。
BERT使用多層雙向Transformer編碼器。其自注意力層在兩個方向上都有自注意力。谷歌發佈了該模型的兩個變體:
1BERT Base:Transformers 層數 = 12, 總參數 = 110M
2BERT Large:Transformers 層數 = 24, 總參數 = 340M
BERT經過雙向性完成幾項任務的預訓練——遮擋式語言模型和下一句預測。下面將詳細討論這兩項任務。
使用如下兩個無人監督的預測任務對BERT進行預訓練。
1. 遮擋式語言模型(MLM)
根據該論文:
遮擋式語言模型隨機地從輸入中遮擋了一些標記,目的是僅根據其上下文,預測被遮擋單詞的原始詞彙。與從左到右的語言模型預訓練不一樣,MLM目標容許表示融合左右的上下文,這使咱們能夠對雙向Transformer進行深度預訓練。
Google AI研究人員隨機遮擋每一個序列中15%的單詞。任務是什麼呢?預測這些被遮擋的單詞。須要注意——遮擋的單詞並不是老是帶有遮擋的標記[MASK],由於在微調期間不會出現[MASK]標記。
所以,研究人員使用如下方法:
· 80%的單詞帶有被遮擋的標記[MASK]
· 10%的單詞被隨機單詞替換
· 10%的單詞保持不變
2. 下一句話預測
一般,語言模型不會理解連續句子間的關係。BERT也接受過這項任務的預訓練。
對於語言模型預訓練,BERT使用成對的句子做爲其訓練數據。每對句子的選擇很是有趣。舉個例子,以便更好地理解。
假設一個文本數據集有100,000個句子,想要使用這個數據集對BERT語言模型進行預訓練。所以,將有50,000個訓練樣例或50,000對句子做爲訓練數據。
· 50%的句對中,第二句其實是第一句的下一句。
· 其他50%的句對,第二句是來自語料庫的隨機句子。
· 第一種狀況的標籤將成爲第二種狀況的'IsNext'和'NotNext'。
像BERT這樣的框架代表,無人監督學習(預訓練和微調)將成爲許多語言理解系統的關鍵要素。低資源任務尤爲可從這些深度雙向框架中得到巨大收益。
下面是一些NLP任務的快照,BERT在其中扮演着重要角色:
圖片來源:https://arxiv.org/abs/1810.04805
咱們應該很慶幸,在本身身處的時代裏,NLP發展如此迅速,Transformers和BERT這樣的架構正在爲將來幾年更爲先進的突破鋪平道路。
更多課程傳送門:https://courses.analyticsvidhya.com/courses/natural-language-processing-nlp??utm_source=blog&utm_medium=understanding-transformers-nlp-state-of-the-art-models
留言 點贊 關注
咱們一塊兒分享AI學習與發展的乾貨
歡迎關注全平臺AI垂類自媒體 「讀芯術」
(添加小編微信:dxsxbb,加入讀者圈,一塊兒討論最新鮮的人工智能科技哦~)