国产微拍一区二区三区四区,亚洲欧美一区二区三区四区,黄色网址国产,动漫精品视频一区二区三区,免费人与牲口做爰视频,亚洲精品久久久久久一区,欧美槡BBBB槡BBB少妇,国产精品99,亚洲 日韩 国产 制服 在线

Internet Develppment
互聯(lián)網(wǎng)開發(fā)& 推廣服務(wù)提供商

我們擅長商業(yè)策略與用戶體驗的完美結(jié)合。

歡迎瀏覽我們的案例。

首頁 > 新聞中心 > 新聞動態(tài) > 正文

谷歌最強NLP模型BERT解讀

發(fā)布時間:2018-10-24 14:54:21來源:雷鋒網(wǎng)

  最近谷歌研究人員通過新的 BERT 模型在 11 項 NLP 任務(wù)中奪得 STOA 結(jié)果,這在自然語言處理學(xué)界以及工業(yè)界都引起了不小的熱議。作者通過在 33 億文本的語料上訓(xùn)練語言模型,再分別在不同的下游任務(wù)上微調(diào),這樣的模型在不同的任務(wù)均得到了目前為止最好的結(jié)果,并且有一些結(jié)果相比此前的最佳成績得到了幅度不小的提升。作者的這一研究其實是今年深度學(xué)習(xí)在自然語言處理中一個新熱點方向的延續(xù),故事還得從更早一點說起。

  BERT 的“前任”們

  早在 2015 年的時候,微軟研究院的何愷明和他的同事們發(fā)表了殘差網(wǎng)絡(luò)的論文,第一次通過殘差的方式將卷積神經(jīng)網(wǎng)絡(luò)推進到了 100 層以上,并在圖像識別的任務(wù)上刷新了當時的最高紀錄。自那以后起,隨著網(wǎng)絡(luò)不斷地加深,效果也在不斷提升。然而大量的數(shù)據(jù)訓(xùn)練出來的大型網(wǎng)絡(luò)雖然效果更好,但隨著網(wǎng)絡(luò)的加深以及數(shù)據(jù)集的不斷擴大,完全重新訓(xùn)練一個模型所需要的成本也在不斷地增加。

  因此在計算機視覺處理中,人們越來越多地采用預(yù)訓(xùn)練好的大型網(wǎng)絡(luò)來提取特征,然后再進行后續(xù)任務(wù)。目前這種處理方式已經(jīng)是圖像處理中很常見的做法了。

  相比之下,自然語言處理目前通常會使用預(yù)訓(xùn)練的詞向量來進行后續(xù)任務(wù)。但詞向量是通過淺層網(wǎng)絡(luò)進行無監(jiān)督訓(xùn)練,雖然在詞的級別上有著不錯的特性,但卻缺少對連續(xù)文本的內(nèi)在聯(lián)系和語言結(jié)構(gòu)的表達能力。因此大家也希望能像圖像領(lǐng)域那樣,通過大量數(shù)據(jù)來預(yù)訓(xùn)練一個大型的神經(jīng)網(wǎng)絡(luò),然后用它來對文本提取特征去做后續(xù)的任務(wù),以期望能得到更好的效果。其實這一方向的研究一直在持續(xù),直到今年的早些時候 AllenAI 提出的[ELMo](https://arxiv.org/pdf/1802.05365.pdf)由于其在后續(xù)任務(wù)上的優(yōu)異表現(xiàn)獲得了不小的關(guān)注。

  在 CMRC2018 閱讀理解比賽中,追一科技的參賽方案就運用了 ELMo 模型的預(yù)訓(xùn)練方式,并做了相應(yīng)的改進。因為原本的 ELMo 當中對英文進行了字符級別的編碼,但這對中文并不適用。我們在此基礎(chǔ)上改進為筆畫級別的編碼,同時結(jié)合原有的詞級別編碼一起通過雙層 LSTM 變換來進行語言模型預(yù)訓(xùn)練。經(jīng)過實驗驗證,最后選擇了 512 維的詞級別 ELMo 向量進行后續(xù)任務(wù)。

  在 ELMo 獲得成功以后不久 FastAI 就推出了[ULMFiT](https://arxiv.org/abs/1801.06146),其大體思路是在微調(diào)時對每一層設(shè)置不同的學(xué)習(xí)率。此后 OpenAI 又提出了[GPT](https://blog.openai.com/language-unsupervised/)。預(yù)訓(xùn)練的語言模型是在百度 15 億詞文本的語料上進行的,模型參數(shù)選擇了 12 層,12head 的 Transformer 結(jié)構(gòu)。然后采用此模型直接在子任務(wù)上微調(diào)來進行后續(xù)任務(wù)。

  從上面提及的這些論文的結(jié)果以及學(xué)界和工業(yè)界的反饋來看,這種使用大量的語料進行預(yù)訓(xùn)練,然后再在預(yù)訓(xùn)練好的模型上進行后續(xù)任務(wù)訓(xùn)練,雖然訓(xùn)練方式各有不同,但在后續(xù)任務(wù)都有不同程度的提高。

  而谷歌提出的 BERT 就是在 OpenAI 的 GPT 的基礎(chǔ)上對預(yù)訓(xùn)練的目標進行了修改,并用更大的模型以及更多的數(shù)據(jù)去進行預(yù)訓(xùn)練,從而得到了目前為止最好的效果。

  Trransformer 的編碼器結(jié)構(gòu)

  BERT 的主體結(jié)構(gòu)和創(chuàng)新點

  BERT 模型沿襲了 GPT 模型的結(jié)構(gòu),采用[Transfomer](https://arxiv.org/abs/1706.03762) 的編碼器作為主體模型結(jié)構(gòu)。Transformer 舍棄了 RNN 的循環(huán)式網(wǎng)絡(luò)結(jié)構(gòu),完全基于注意力機制來對一段文本進行建模。

  Transformer 所使用的注意力機制的核心思想是去計算一句話中的每個詞對于這句話中所有詞的相互關(guān)系,然后認為這些詞與詞之間的相互關(guān)系在一定程度上反應(yīng)了這句話中不同詞之間的關(guān)聯(lián)性以及重要程度。因此再利用這些相互關(guān)系來調(diào)整每個詞的重要性(權(quán)重)就可以獲得每個詞新的表達。這個新的表征不但蘊含了該詞本身,還蘊含了其他詞與這個詞的關(guān)系,因此和單純的詞向量相比是一個更加全局的表達。

  Transformer 通過對輸入的文本不斷進行這樣的注意力機制層和普通的非線性層交疊來得到最終的文本表達。

  Transformer 的注意力層得到的詞-詞之間關(guān)系

  GPT 則利用了 Transformer 的結(jié)構(gòu)來進行單向語言模型的訓(xùn)練。所謂的語言模型其實是自然語言處理中的一種基礎(chǔ)任務(wù),其目標是給定一個序列文本,預(yù)測下一個位置上會出現(xiàn)的詞。

  模型學(xué)習(xí)這樣的任務(wù)過程和我們?nèi)藢W(xué)習(xí)一門語言的過程有些類似。我們學(xué)習(xí)語言的時候會不斷地練習(xí)怎么選用合適的詞來造句,對于模型來說也這樣。例如:

  > 今天天氣不錯,我們?nèi)ス珗@玩吧。

  這句話,單向語言模型在學(xué)習(xí)的時候是從左向右進行學(xué)習(xí)的,先給模型看到“今天天氣”兩個詞,然后告訴模型下一個要填的詞是“不錯”。然而單向語言模型有一個欠缺,就是模型學(xué)習(xí)的時候總是按照句子的一個方向去學(xué)的,因此模型學(xué)習(xí)每個詞的時候只看到了上文,并沒有看到下文。更加合理的方式應(yīng)該是讓模型同時通過上下文去學(xué)習(xí),這個過程有點類似于完形填空題。例如:

  >今天天氣 { },我們?nèi)ス珗@玩吧。

  通過這樣的學(xué)習(xí),模型能夠更好地把握“不錯”這個詞所出現(xiàn)的上下文語境。

  而 BERT 對 GPT 的第一個改進就是引入了雙向的語言模型任務(wù)。

  此前其實也有一些研究在語言模型這個任務(wù)上使用了雙向的方法,例如在 ELMo 中是通過雙向的兩層 RNN 結(jié)構(gòu)對兩個方向進行建模,但兩個方向的 loss 計算相互獨立。追一科技在文本意圖模型中,也加入了通過上下文預(yù)測某個詞的輔助任務(wù),通過實驗發(fā)現(xiàn)在做意圖分類的同時加入這個輔助任務(wù)能夠讓編碼器盡可能的包含輸入文本的全局信息,從而提高意圖判斷的準確率。

  而 BERT 的作者指出這種兩個方向相互獨立或只有單層的雙向編碼可能沒有發(fā)揮最好的效果,我們可能不僅需要雙向編碼,還應(yīng)該要加深網(wǎng)絡(luò)的層數(shù)。但加深雙向編碼網(wǎng)絡(luò)卻會引入一個問題,導(dǎo)致模型最終可以間接地“窺探”到需要預(yù)測的詞。這個“窺探”的過程可以用下面的圖來表示:

  從圖中可以看到經(jīng)過兩層的雙向操作,每個位置上的輸出就已經(jīng)帶有了原本這個位置上的詞的信息了。這樣的“窺探”會導(dǎo)致模型預(yù)測詞的任務(wù)變得失去意義,因為模型已經(jīng)看到每個位置上是什么詞了。

  為了解決這個問題,我們可以從預(yù)訓(xùn)練的目標入手。我們想要的其實是讓模型學(xué)會某個詞適合出現(xiàn)在怎樣的上下文語境當中;反過來說,如果給定了某個上下文語境,我們希望模型能夠知道這個地方適合填入怎樣的詞。從這一點出發(fā),其實我們可以直接去掉這個詞,只讓模型看上下文,然后來預(yù)測這個詞。但這樣做會丟掉這個詞在文本中的位置信息,那么還有一種方式是在這個詞的位置上隨機地輸入某一個詞,但如果每次都隨機輸入可能會讓模型難以收斂。

  BERT 的作者提出了采用 MaskLM 的方式來訓(xùn)練語言模型

  通俗地說就是在輸入一句話的時候,隨機地選一些要預(yù)測的詞,然后用一個特殊的符號來代替它們。盡管模型最終還是會看到所有位置上的輸入信息,但由于需要預(yù)測的詞已經(jīng)被特殊符號代替,所以模型無法事先知道這些位置上是什么詞,這樣就可以讓模型根據(jù)所給的標簽去學(xué)習(xí)這些地方該填的詞了。

  然而這里還有一個問題,就是我們在預(yù)訓(xùn)練過程中所使用的這個特殊符號,在后續(xù)的任務(wù)中是不會出現(xiàn)的。

  因此,為了和后續(xù)任務(wù)保持一致,作者按一定的比例在需要預(yù)測的詞位置上輸入原詞或者輸入某個隨機的詞。當然,由于一次輸入的文本序列中只有部分的詞被用來進行訓(xùn)練,因此 BERT 在效率上會低于普通的語言模型,作者也指出 BERT 的收斂需要更多的訓(xùn)練步數(shù)。

  BERT 另外一個創(chuàng)新是在雙向語言模型的基礎(chǔ)上額外增加了一個句子級別的連續(xù)性預(yù)測任務(wù)。這個任務(wù)的目標也很簡單,就是預(yù)測輸入 BERT 的兩端文本是否為連續(xù)的文本,作者指出引入這個任務(wù)可以更好地讓模型學(xué)到連續(xù)的文本片段之間的關(guān)系。在訓(xùn)練的時候,輸入模型的第二個片段會以 50% 的概率從全部文本中隨機選取,剩下 50% 的概率選取第一個片段的后續(xù)的文本。

  除了模型結(jié)構(gòu),模型大小和數(shù)據(jù)量都很重要

  以上的描述涵蓋了 BERT 在模型結(jié)構(gòu)和訓(xùn)練目標上的主要創(chuàng)新點,而 BERT 的成功還有一個很大的原因來自于模型的體量以及訓(xùn)練的數(shù)據(jù)量。

  BERT 訓(xùn)練數(shù)據(jù)采用了英文的開源語料 BooksCropus 以及英文維基百科數(shù)據(jù),一共有 33 億個詞。同時 BERT 模型的標準版本有 1 億的參數(shù)量,與 GPT 持平,而 BERT 的大號版本有 3 億多參數(shù)量,這應(yīng)該是目前自然語言處理中最大的預(yù)訓(xùn)練模型了。

  當然,這么大的模型和這么多的數(shù)據(jù),訓(xùn)練的代價也是不菲的。谷歌用了 16 個自己的 TPU 集群(一共 64 塊 TPU)來訓(xùn)練大號版本的 BERT,一共花了 4 天的時間。對于是否可以復(fù)現(xiàn)預(yù)訓(xùn)練,作者在 [Reddit](https://www.reddit.com/r/MachineLearning/comments/9nfqxz/r_bert_pretraining_of_deep_bidirectional)上有一個大致的回復(fù),指出 OpenAI 當時訓(xùn)練 GPT 用了將近 1 個月的時間,而如果用同等的硬件條件來訓(xùn)練 BERT 估計需要 1 年的時間。不過他們會將已經(jīng)訓(xùn)練好的模型和代碼開源,方便大家訓(xùn)練好的模型上進行后續(xù)任務(wù)。

  雖然訓(xùn)練的代價很大,但是這個研究還是帶來了一些思考和啟發(fā)。例如雙向語言模型的運用,多任務(wù)對預(yù)訓(xùn)練的幫助以及模型深度帶來的收益。相信在未來的一段時間,自然語言處理中預(yù)訓(xùn)練的神經(jīng)網(wǎng)絡(luò)語言模型會得到更多的關(guān)注和運用。
 ?。?a href="http://www.nasamidwest.com">邯鄲小程序快速開發(fā))

最新資訊
? 2018 河北碼上網(wǎng)絡(luò)科技有限公司 版權(quán)所有 冀ICP備18021892號-1   
? 2018 河北碼上科技有限公司 版權(quán)所有.