簡單介紹GPT-3背後的Transformer概念和NLP世界 - towardsdatascience
GPT-3是深度學習NLP模型家族的最新成員,並且可以說是功能最強大的成員,涵括NLP領域的發展成就:其中包括Transformer(2017),BERT(2018),GPT系列(2018、2019、2020)和T5(2019)。基於這些成就研究團體發展了更多變體和改進,在許多NLP基準任務上接近或超過了人類的表現。
NLP實現步驟
NLP的目標是構建用於理解語言並執行與語言相關的任務的系統(機器,演算法)。由於語言在我們的社會中起著至關重要的作用,因此NLP的應用領域似乎是無限的。從線上購物到報稅表,我們一直在閱讀文字並採取後續措施。完美的NLP機器人(我們稱其為Nate)將能夠理解並採取類似人類的行動。為實現這一目標,Nate需要具備以下能力:
- 知覺:這是Nate的耳朵和眼睛。它捕獲現實世界中的聲音或影像,並將其轉換為計算機的輸入訊號(文字)。語音識別和光學字元識別(OCR)方法通常用於此部分。
- 理解力:這是Nate的大腦。該元件負責提取資訊並形成知識。從單詞嵌入,LSTM到transformer,近年來已經開發了很多深度學習技術,以實現更高的理解水平。
- 執行力:這就是Nate可以根據自己的理解採取行動和交流的方式。執行可能像做出二進位制選擇一樣簡單,也可能像編寫文章一樣複雜。
由於感知與transformer系列無關,因此我們僅討論理解和執行元件。
理解和執行的複雜性將構成我們框架的兩個維度。此外,單詞,句子和文件將在兩個維度上代表3個級別的不斷增加的複雜性。
- NLP的用例場景
實現傳統語言任務包括情感分析,語音標記(POS),自然語言推理(NLI),識別文字蘊涵(RTE),問題和答案等。每個任務都有其自己的目標,基準資料集和評估指標(PapersWithCode具有一個很好的總結在這裡)。有時將任務彙總在一起以對模型進行總體評估。GLUE,BLEU,SQuAD和RACE是最受歡迎的工具,而新模型通常以打破一項或多項測試的記錄而自豪。
要為您的用例找到一個好的模型,檢查在最能反映您用例需求的任務(或標準化測試)中模型的效能是有幫助的。
- 增加約束
除了簡單的二維框架,我們不應該忘記現實世界中的約束。它們迫使我們透過淘汰來縮小小工具的選擇範圍。一些最常見的是:
- 延遲:系統是否需要與終端使用者快速反應?如果是這樣,則您處於低延遲狀態,這需要快速模型,並且可能排除了transformer系列中的一些笨拙的傢伙。
- 計算能力:計算能力的問題有時是預算問題,有時是設計選擇。但是無論如何,在iPhone和雲TPU上執行相同的模型可能不是一個好主意。
- 準確性:如果期望該模型能夠進行醫學診斷,則我們對錯誤的容忍度應非常低,而始終應首選效能較高的模型。另一方面,對於新聞推薦者,90%和92%的準確性之間的差異可能根本不是問題。
- 奧卡姆剃鬚刀
縱使如此,深度學習模型通常不是正確的解決方案。transformer系列非常適合句子和文件級別的理解。因此,如果您的用例只要求單詞級的理解和執行,則可能您不需要transformer的笨重裝置。
實際上,對於許多NLP用例,像TF-IDF這樣的老式特徵工程技術與隨機森林結合起來可能已經足夠了。儘管新技術可以帶來巨大的準確性改善,但實際價值影響可能不值得嘗試修改系統設計或擴大計算能力。
Transformer演算法
為了使本文的長度合理,我們將討論僅限於Huggingface.co 封裝的Transformer中提供的模型。Huggingface.co不僅提供了20多種體系結構的原始碼,還提供了90 種經過預訓練的模型,其中不包括社群的貢獻。他們還簡化了介面,因此您可以在幾行程式碼中試用GPT-2,或者使用簡短的指令碼微調T5。軟體包的穩定性尚待充分測試,但是它們無疑為使用不同的NLP模型和嘗試自己的想法提供了一個很好的起點。
- 通用概念
深度學習技術已經在NLP中使用了一段時間,但是直到transformer誕生之後,我們才看到了顯著的進步。Jay Alammar寫了一系列精彩的文章來說明這些模型是如何工作的。撇開技術細節,我們可以注意到一些共同的要素,這些要素可能導致它們取得成功:
- 注意頭Attention head:注意頭是transformer系列的主要特徵之一,自從第一篇《Transformer》論文首次提出(Vasvani 2017)以來就一直使用。預訓練和微調正規化允許知識在不同任務之間傳遞。它提供了一種高度靈活的方式來合併上下文資訊(即,單詞/標記如何與句子或文件中的其他單詞連結),從而取代了遞迴解決方案(如RNN和LSTM)。
- 翻譯學習Transfer learning:除翻譯外,只有少量標籤資料可用於指定的語言任務,而對於複雜的深度學習模型而言,這些資料還遠遠不夠。預訓練和微調範例透過允許不同任務之間的知識轉移克服了這個問題。例如,訓練前階段的一般任務利用了大量未標記的資料,而微調階段的特定任務則使用少量但有針對性和標記的資料。還探索了其他型別的知識翻譯(T5,GPT-3),並被證明是非常有益的。
- 中斷與重建策略:BERT具有巧妙的想法,可以使用空白練習對模型進行預訓練,其中,首先透過掩蓋幾個單詞(標記)中斷文字,然後由模型進行重建。此練習在所有語言任務上都帶來了顯著的改進(跳躍)。從那時起,遮蔽詞語的方法幾乎已成為一種標準的訓練前策略,從而帶來了幾種創新的變體(XLNet,RoBerta,BART)。
- 架構
在架構方面,Transformer模型非常相似。大多數模型都採用與此領域開創者中任一種的相同架構,即最初的transformer:BERT和GPT。它們代表三種基本體系結構:編碼器,解碼器和兩者。
- 編碼器(BERT):編碼器通常是注意層和前饋層的堆疊,它們將輸入文字序列編碼為上下文隱藏狀態。為了生成語言任務的不同輸出格式,通常在編碼器的頂部新增特定於任務的頭。例如,使用因果語言模型(CLM,或簡稱為LM)來預測下一個單詞,或者使用前饋(線性)層來生成分類標籤。
- 解碼器(GPT):在許多方面,具有CLM磁頭的編碼器可以視為解碼器。代替輸出隱藏狀態,連線解碼器以自動迴歸的方式生成序列,從而將先前生成的單詞用作輸入以生成下一個單詞。
- 兩者結合的Transformer:當編碼器和解碼器都以相同的結構存在時,就像在Transformer中一樣,它們之間的區別最有意義。在編碼器/解碼器結構中,輸入序列首先被“編碼”為隱藏狀態,然後被“解碼”以生成輸出序列。編碼器和解碼器甚至可以共享相同的權重,以提高訓練效率。
模型的體系結構通常會限制其可以執行的任務型別:編碼器(沒有任何特定於任務的頭)僅輸出隱藏狀態,這些狀態可以作為功能整合到其他模型中。建立用於文字生成的解碼器(或編碼器+解碼器),使其適合於機器翻譯,摘要和抽象性問題與回答之類的任務。特定於任務的頭在輸出格式上提供了額外的靈活性,從而使其可以微調與分類相關的任務。
發展趨勢
除了3種基本架構之外,還有一些創新的修改,我們將在稍後討論。但是,總的來說,我認為對Transformer的研究遵循了一些大趨勢。最有影響力的是:擴大規模。
深度學習模型變得越來越大,越來越消耗資料和計算能力。Transformer也不例外。由於BERT的不受監督的預訓練釋放了數千億線上資料的力量,因此有可能訓練更大的模型。最大的GPT-3具有1,750億個引數,是最大的BERT的500倍以上。實際上,除了功能強大的少數人之外,幾乎每個人都無法部署這樣一個巨大的模型。
資源
Huggingface.co提供的Transformer套件非常易於使用。
from transformers import pipeline classifier = pipeline('sentiment-analysis') classifier('We are very happy to show you the Transformers library.') |
您還可以找到有關預訓練或微調不同型號的更多notebook examples
除了Huggingface.co,我還在以下地方找到了非常有用的材料。
但公平地說,arXiv.org和Github可能仍然是最好的。
相關文章
- JavaScript 引擎和 Just-in-Time 編譯概念,Hot Function 的簡單介紹JavaScript編譯Function
- ARouter簡單入門和介紹
- AOP的簡單介紹
- Webpack 的簡單介紹Web
- form表單的簡單介紹ORM
- Flownet 介紹 及光流的簡單介紹
- Map簡單介紹
- SVG簡單介紹SVG
- Clickjacking簡單介紹
- 【Pandas】簡單介紹
- ActiveMQ簡單介紹MQ
- JSON簡單介紹JSON
- RPC簡單介紹RPC
- Python簡單介紹Python
- KVM簡單介紹
- RMI簡單介紹
- HTML簡單介紹HTML
- HTML 簡單介紹HTML
- JavaScript 簡單介紹JavaScript
- CSS 簡單介紹CSS
- ajax簡單介紹
- 函子的簡單介紹
- GPT-3,深度學習和NLP的巨大進步GPT深度學習
- 簡單的介紹伺服器和Ajax的應用伺服器
- 簡單介紹克隆 JavaScriptJavaScript
- 禪道簡單介紹
- Apache Curator簡單介紹Apache
- spark簡單介紹(一)Spark
- Flutter key簡單介紹Flutter
- Ansible(1)- 簡單介紹
- Git_簡單介紹Git
- jQuery Validate簡單介紹jQuery
- JSON物件簡單介紹JSON物件
- <svg>元素簡單介紹SVG
- 簡單介紹 ldd 命令
- 簡單介紹Rust中的workspaceRust
- Caffeine快取的簡單介紹快取
- java註解的簡單介紹Java