當前位置:首頁 >  站長 >  編程技術 >  正文

環(huán)信AI公開課:OpenAI通用語言模型GPT-2論文解析

 2019-03-12 16:53  來源: 互聯(lián)網   我來投稿 撤稿糾錯

  阿里云優(yōu)惠券 先領券再下單

OpenAI最近似乎搞了個大新聞,隨手一搜,”最大模型”、”15億參數”、”無需領域數據”等等躍然在目。當然現(xiàn)在是標題黨的年代,為了吸引眼球,外行媒體的夸張手法也能理解。當然最大的爭議還是他們在官網上解釋為什么只提供小模型的理由:為了防止大模型用于生成欺詐和有歧視性的文章,我們只發(fā)布小規(guī)模的模型(Due to concerns about large language models being used to generate deceptive, biased, or abusive language at scale, we are only releasing a much smaller version of GPT-2 along with sampling code)。這個當然引起了軒然大波,使得很多人在Reddit上吐槽。聽這語氣,人工智能已經實現(xiàn)了,為了保護人類,他們不能把這個惡魔放出來。實際情況怎么樣呢?別聽專家的,最好還是我們自己讀讀論文跑跑代碼吧。

目錄

背景簡介

BERT的缺陷

語言模型

Children’s Book

LAMBADA

Winograd Schema Challenge

Reading Comprehension

Summarization

機器翻譯

Question Answering

大翻盤

代碼

背景簡介

2018年深度學習在NLP領域取得了比較大的突破,最大的新聞當屬Google的BERT模型橫掃各大比賽的排行榜。作者認為,深度學習在NLP領域比較重點的三大突破為:Word Embedding、RNN/LSTM/GRU+Seq2Seq+Attention+Self-Attention機制和Contextual Word Embedding(Universal Sentence Embedding)。

Word Embedding解決了傳統(tǒng)機器學習方法的特征稀疏問題,它通過把一個詞映射到一個低維稠密的語義空間,從而使得相似的詞可以共享上下文信息,從而提升泛化能力。而且通過無監(jiān)督的訓練可以獲得高質量的詞向量(比如Word2vec和Glove等方法),從而把這些語義知識遷移到數據較少的具體任務上。但是Word Embedding學到的是一個詞的所有語義,比如bank可以是”銀行”也可以是”水邊。如果一定要用一個固定的向量來編碼其語義,那么我們只能把這兩個詞的語義都編碼進去,但是實際一個句子中只有一個語義是合理的,這顯然是有問題的。

這時我們可以通過RNN/LSTM/GRU來編碼上下文的語義,這樣它能學到如果周圍是money,那么bank更可能是”銀行”的語義。最原始的RNN由于梯度消失和梯度爆炸等問題很難訓練,后來引入了LSTM和GRU等模型來解決這個問題。最早的RNN只能用于分類、回歸和序列標注等任務,通過引入兩個RNN構成的Seq2Seq模型可以解決序列的變換問題。比如機器翻譯、摘要、問答和對話系統(tǒng)都可以使用這個模型。尤其機器翻譯這個任務的訓練數據比較大,使用深度學習的方法的效果已經超過傳統(tǒng)的機器學習方法,而且模型結構更加簡單。到了2017年,Google提出了Transformer模型,引入了Self-Attention。Self-Attention的初衷是為了用Attention替代LSTM,從而可以更好的并行(因為LSTM的時序依賴特效很難并行),從而可以處理更大規(guī)模的語料。Transformer出來之后被廣泛的用于以前被RNN/LSTM/GRU霸占的地盤,Google更是在Transformer的論文里使用”Attention is all you need”這樣霸氣的標題。現(xiàn)在Transformer已經成為Encoder/Decoder的霸主。

雖然RNN可以學到上下文的信息,但是這些上下文的語義是需要通過特定任務的標注數據使用來有監(jiān)督的學習。很多任務的訓練數據非常少并且獲取成本很高,因此在實際任務中RNN很難學到復雜的語義關系。當然通過Multi-Task Learning,我們可以利用其它相關任務的數據。比如我們要做文本分類,我們可以利用機器翻譯的訓練數據,通過同時優(yōu)化兩個(多個)目標,讓模型同時學到兩個任務上的語義信息,因為這兩個任務肯定是共享很多基礎語義信息的,所以它的效果要比單個任務好。但即使這樣,標注的數據量還是非常有限的。

因此2018年的研究熱點就變成了怎么利用無監(jiān)督的數據學習Contextual Word Embedding(也叫做Universal Sentence Embedding),也就是通過無監(jiān)督的方法,讓模型能夠學到一個詞在不同上下文的不同語義表示方法。當然這個想法很早就有了,比如2015年的Skip Thought Vector,但是它只使用了BookCorpus,這只有一萬多本書,七千多萬個句子,因此效果并沒有太明顯的提升。

在BERT之前比較大的進展是ELMo、ULMFiT和OpenAI GPT。尤其是OpenAI GPT,它在BERT出現(xiàn)之前已經橫掃過各大排行榜一次了,當然Google的BERT又橫掃了一次,并且PR效果更加明顯。所以OpenAI看風頭都被Google強勁,自然有些羨慕嫉妒恨,也就有了今天我們要討論的OpenAI GPT-2。

UMLFiT比較復雜,而且效果也不是特別好,我們暫且不提。ELMo和OpenAI GPT的思想其實非常非常簡單,就是用海量的無標注數據學習語言模型,在學習語言模型的過程中自然而然的就學到了上下文的語義關系。它們倆都是使用Transformer來學習語言模型,但是在進行下游任務處理的時候就有所不同,ELMo是把它當成特征。拿分類任務來說,輸入一個句子,用ELMo把它掃一次,這樣就可以得到每個詞的表示,這個表示是考慮上下文的,因此”He deposited his money in this bank”和”His soldiers were arrayed along the river bank”中的兩個bank的向量是不同的。下游任務用這些向量來做分類,它會增加一些網絡層,但是ELMo語言模型的參數是固定的。而OpenAI GPT不同,它直接用特定任務來Fine-Tuning Transformer的參數。因為用特定任務的數據來調整Transformer的參數,這樣它更可能學習到與這個任務特定的上下文語義關系,因此效果也更好。

而BERT和OpenAI GPT的方法類似,也是Fine-Tuning的思路,但是它解決了OpenAI GPT(包括ELMo)單向信息流的問題,同時它的模型和語料庫也更大。依賴Google強大的計算能力和工程能力,BERT橫掃了OpenAI GPT,在后者霸主寶座屁股還沒坐熱的時候就把它趕下臺。成王敗寇,再加上Google的PR能力,很少還有人記得OpenAI GPT的貢獻了。要說BERT的學術貢獻,最多是利用了Mask LM(這個模型在上世紀就存在了)和Predicting Next Sentence這個Multi-task Learning而已,其余的方法都是完全follow OpenAI GPT的。因此OpenAI心情郁悶也就可以理解了,這次搞出個GPT-2也是想出來露個臉,刷一下存在感。

更多技術細節(jié),有興趣的讀者可以參考詳解谷歌最強NLP模型BERT或者參與作者的BERT課程。地址:http://fancyerii.github.io/2019/03/05/bert-prerequisites/

BERT的缺陷

如果你是OpenAI GPT的科學家,你會怎么辦呢?當然如果能提出一個更加突破性的模型,然后在各大比賽上橫掃BERT,這自然是最理想的。但是學術研究又不能像媒體宣傳的那樣天天突破(作者訂閱的各種公眾號倒是每天都能看到突破,因此經常被震驚),要拼資源和算力那顯然拼不過Google。其實除了OpenAI,其它公司也想搞點新聞,比如Microsoft最近搞了個MT-DNN,據說效果要比BERT好(一點),但是由于好的有限,而且有沒有源代碼甚至模型,誰知道是不是用tricky的方法過擬合這些數據集呢?

我們回到OpenAI,顯然短期類無法超過BERT,Google開源的BERT模型橫掃了其它更多榜單,仿佛挑釁般的對其他對手說:不服你跑個分啊。被當面打臉,顯然很郁悶。那怎么辦呢?OpenAI的科學家突然找到了BERT模型的一個弱點——它不是”正常的”語言模型,因此不能生成句子。BERT的Mask LM只能用來做完形填空題,也就是用手遮住一個句子的某個單詞,然后讓它猜哪個詞更可能,但是普通的語言模型是可以生成句子的。抓住這個點之后,OpenAI大作文章。它使用Common Crawl的8百萬文章(共40GB,不知道是否壓縮過)訓練了一個15億(1542M)參數的”最大模型”,不過參數雖然很多,但是訓練數據確實有點少。作者訓練個中文詞向量還得搞個幾千萬的百科文章,Google的數據那得用TB來做單位吧。因此作者在文中強調模型是underfit的(All models still underfit Web-Text and held-out perplexity has as of yet improved givenmore training time.),參數多,數據少,那自然不能訓練太久,否則過擬合后效果更差(但是生成句子過擬合無所謂,直接把莎士比亞全集的句子背出來肯定能震驚很多人)。訓練了這個模型用來刷榜?我猜測作者嘗試過,結果呢?那自然就不用說了,否則我們看到的就不是現(xiàn)在的這個新聞了。

不過沒關系,他們的目標是BERT的軟肋——不能生成句子(段落和篇章當然就更不行了)。我們來看看論文的實驗是怎么設計的:

語言模型

BERT不是普通的語言模型吧,好,那咱們來PK一下(你是零分啊)。但是用Transformer去跑語言模型這樣的灌水文章別人早發(fā)過了,沒啥意思。因此要搞出一個Zero-shot的概念:你們在一個很小的語料庫訓練一個語言模型然后大家比賽,俺不這么跟你玩。俺用很大的語料訓練一個模型,然后不用你的數據,效果還能超過你們在小數據上的效果。

當然這個概念還是不錯的,結果如下圖所示。

圖:不同數據集上語言模型的PPL,越小越好

我們看到,除了最后一個1BW的很大的語料庫,OpenAI都超過了它們。其實這也說明了,如果有很多的領域數據,還是領域數據好使,這在機器翻譯系統(tǒng)里也得到了驗證。如果訓練數據較少,我們通常使用預訓練的詞向量作為模型詞向量的初始值。如果訓練數據非常少,我們通常固定預訓練的詞向量;如果訓練數據還可以,那么就Fine-Tuning一下。如果訓練數據很多,比如在機器翻譯任務里,預訓練的詞向量和隨機初始化的效果沒什么區(qū)別(開始的時候好一點,因為比較是相對較好的初始值)。

Children’s Book

類似于完型填空,其實BERT是可以搞的。但是NLP的比賽那么多,Google總不能都做完吧。國內很多AI公司天天發(fā)PR稿:我們又獲得了一個世界第一。其實很多外行的讀者并不知道這個比賽只有5個參數選手,可能其中2個還是某個在校學生擠出周末打游戲的時間去做的。

圖:Children’s Book任務

效果似乎還不錯,離人類的水平相差不遠。

LAMBADA

PPL從99.8降到8.6,測試的準確率從19%提高到52.66%。作者不了解這個比賽,不做點評。

Winograd Schema Challenge

63%到70.7%,似乎還不錯。作者也不了解這個比賽,不做點評。

Reading Comprehension

這是最近很火的比賽類型,有很多數據集,這里使用的是CoQA,BERT的baseline是89的F1得分(越大越好),GPT-2的得分是55。這似乎差得太遠啊,但是作者有高大上的解釋:BERT是用來監(jiān)督數據的,俺們不用訓練數據。有點像考試不及格的學渣對學霸說,雖然你得了89分,但是你天天熬夜背題,俺天天翹課也差點及格了,說明俺比你有天賦。學霸說:那你也天天熬夜背題啊,看看能不能跑分跑過我?學渣說:俺們是搞素質教育的,不搞題海戰(zhàn)術。

Summarization

摘要任務,分越高越好,成績單如下:

圖:Children’s Book任務

機器翻譯

SOTA的BLEU分(越高越好)33.5,俺不學習也得了11.5。

Question Answering

無監(jiān)督的效果慘不忍睹。

大翻盤

這是最終大殺器,咱們來PK生成文章了。論文附錄挑選了許多生成的”故事”,作者英語比較差,看不出好壞來。學術界最近對產生式(Generative)模型非常感興趣,尤其是在圖像和視覺領域。不過作者對此并不感興趣,作者是實用主義者,生成花里胡哨的東西并不能解決實際的問題。大家上網隨便一搜,都能找到各種作詩機器人、對聯(lián)機器人或者生成某些名人風格的文字??雌饋砀衤蓢乐攲φ坦ふ?,其實都是毫無意義。當然,也不是說生成的模型完全無用,比如Gmail用模型自動生成郵件的回復,作者試了一下還不錯。不管怎么說,OpenAI是扳回一城了,因此也就有了鋪天蓋地的新聞出來。

代碼

因為沒有中文模型,只能跑英文,所以作者這三腳貓的英語水平還是藏拙的好,就不做點評了。讀者可以自己試試。

git clone https://github.com/openai/gpt-2.git && cd gpt-2

需要安裝Tensorflow 1.12.0(作者試了1.11也是可以的,因為BERT的官方實現(xiàn)要求1.11+):

pip3 install tensorflow==1.12.0

安裝其它依賴:

pip3 install -r requirements.txt

下載模型:

python3 download_model.py 117M

因為模型放在storage.googleapis.com,所以需要科學上網,可以這樣修改代碼,請把”127.0.0.1:1080”改成你自己的代理:

$ git diffdiff --git a/download_model.py b/download_model.pyindex 2a38294..83d6fb8 100644--- a/download_model.py+++ b/download_model.py@@ -15,7 +15,11 @@ if not os.path.exists(subdir):  for filename in ['checkpoint','encoder.json','hparams.json','model.ckpt.data-00000-of-00001', 'model.ckpt.index', 'model.ckpt.meta', 'vocab.bpe']: -    r = requests.get("https://storage.googleapis.com/gpt-2/" + subdir + "/" + filename, stream=True)+    proxies = {+      'http': 'http://127.0.0.1:1080',+      'https': 'http://127.0.0.1:1080',+    }+    r = requests.get("https://storage.googleapis.com/gpt-2/" + subdir + "/" + filename, stream=True, proxies=proxies)      with open(os.path.join(subdir, filename), 'wb') as f:

使用前需要設置編碼:

export PYTHONIOENCODING=UTF-8

申請創(chuàng)業(yè)報道,分享創(chuàng)業(yè)好點子。點擊此處,共同探討創(chuàng)業(yè)新機遇!

相關標簽
ai技術

相關文章

  • 甌江論道:AI賦能綠色發(fā)展

    2025年10月25日,2025世界青年科學家峰會之人工智能(AI)融合創(chuàng)新發(fā)展論壇在浙江溫州成功舉辦。本次論壇由國際院士科創(chuàng)中心主辦,中國投資協(xié)會能源投資專業(yè)委員會、溫港院士科創(chuàng)中心承辦,中國電工技術學會、中科先進技術溫州研究院與溫州市電力工程學會提供支持,以“甌江論道-AI賦能綠色發(fā)展”為主題,

    標簽:
    ai技術
  • 王通:未來個人創(chuàng)業(yè)的十個機會

    個人創(chuàng)業(yè)需要啟動成本低、無需龐大團隊、可快速驗證、能利用個人技能或資源。這里分享適合個人創(chuàng)業(yè)的十個機會一.AI內容優(yōu)化與本地化服務·做什么:幫助企業(yè)或個人利用AI工具(如GPT-4,Midjourney)優(yōu)化內容生產流程。例如,為跨境電商撰寫多語言產品描述,為小紅書博主生成爆款文案,為小公司制作營銷

  • 百度智能云PaddleOCR 3.1正式發(fā)布:關鍵能力支持MCP

    百度AI團隊今日正式推出PaddleOCR3.1版本,以突破性的多語言組合識別(MultilingualCompositionPerception,MCP)技術為核心,徹底重構復雜文檔處理邊界。此次升級標志著OCR領域首次實現(xiàn)對同一文檔內任意混合語言文本的精準識別,為全球化企業(yè)、跨境業(yè)務及多元文化場

    標簽:
    ai智能
    ai技術
  • AI工具導航網站,未來的發(fā)展前景怎么樣?

    導航網站的崛起:從信息過載到精準觸達隨著全球AI工具數量爆發(fā)式增長(2025年已超數萬款),用戶面臨前所未有的選擇困境。傳統(tǒng)搜索引擎的“關鍵詞-鏈接”模式難以應對工具篩選的場景需求,垂直化、場景化的AI導航網站應運而生。這類平臺通過聚合、評測、分類與推薦四重機制,將分散的工具資源整合為結構化入口。例

  • 微信AI搜索被指“強行開盒”:名字成了數據入口,騰訊回應“僅用公開信息”

    當微信公眾號文章中出現(xiàn)一個人的名字,它會自動變成藍色鏈接,點擊即可查看AI生成的“個人簡歷”——這一微信新功能讓不少用戶感到被“扒光”在互聯(lián)網上。近日,微信新上線的“AI搜索”功能陷入隱私泄露爭議漩渦。多位網友在社交平臺反映,當微信公眾號推文中出現(xiàn)本人姓名時,名字會自動變?yōu)樗{色超鏈接,點擊即可瀏覽由

    標簽:
    ai技術
    ai搜索

熱門排行

信息推薦