天天看點

用BERT建構最先進語言模型

用BERT建構最先進語言模型

2018年,在引入了遷移學習之後,自然語言處理(NLP,Natural Language Processing)領域發生了革命性的變化。BERT(Bidirectional Encoder Representations from Transformers)是谷歌人工智能團隊在2018年推出的一個典型的遷移學習案例,它在各種NLP任務中展現出的最先進成果震撼了整個NLP領域。

由于BERT高度實用的方法和具有更高效的性能,它被用于各種NLP任務,在語言模型中取得了最先進的成果。本文将通過一些重要的背景細節對BERT的體系結構進行廣泛的說明。我們還将通過實際操作,使用PyTorch庫對讨論關于如何使用該模型獲得最先進成果進行測試。

有一種非常有效的方法可以進行預訓練神經網絡,并建立一個預訓練的

語言模型

,這被稱為語言模組化(LM)。

一些關于BERT的說明:

• 與那些使用之前的标記(token)來預測下一個标記的傳統語言模型不同,BERT同時使用下一個标記和之前的标記進行預測;

• BERT還專門為下一個句子進行預測,這使得它成為問答類或句子比較類預測任務的一個合适選擇;

• BERT使用了編碼語句的編碼器和解碼器的Transformer架構,參數的變化很大,即使在小資料集上,其性能也非常顯著;

BERT遷移學習

用BERT建構最先進語言模型

在深入研究BERT之前,讓我們首先了解一下BERT使用的遷移學習的概念。

傳統的NLP模型僅限于單詞嵌入,如

GloVe

word2vec

這兩個模型,其中每個單詞都被連結到了一個向量,該向量用于表示它的某些含義特征。之後,這些單詞嵌入在一個巨大的未标記過的語料庫上進行訓練,然後使用該語料庫對已标記的資料進行訓練,為不同的任務如文本分類和情感分析,建立特定的模型。這些模型從大資料集中獲得語言方面的知識。在這種情況下,單詞嵌入在幾乎所有的NLP任務中都很有用。但所有這些都是有成本的,我們将在下文中進一步讨論。

Word2vec或GloVe模型通常在一些簡單語言模組化應用上進行訓練,這使得很難擷取所有的含義,尤其是當上下文發生變化的時候。在像

LSTM

這樣非常複雜的神經網絡中,基于Word2vec建立的語言模型并沒有擷取到句子的細微差别和含義。這就造成了使用Word2vec或GloVe模型的單詞嵌入對于語言模組化過程沒有什麼效果。

為了證明這一點,讓我們以兩個句子為例進行說明。第一句話是“The cottage needs a good cleaning”,第二句話是“He clean forgot about dropping the letters in the post box”。在這兩個句子中,clean有着不同的含義,在第一個例子中,clean是一個名詞,而在第二個例子中,clean是一個副詞。

基于單詞嵌入建立的模型通常不考慮任何上下文的因素。以前,每個單詞都被傳統的單詞嵌入方法配置設定一個向量,這就迫使模型必須得考慮單詞的含義。

這些缺點使得像

這樣的深度神經網絡解決了使用遷移學習的問題,與單詞嵌入不同的是,将每個單詞映射到了一個向量上,它們訓練了一個深度神經網絡,該網絡将一個向量映射到完全基于語句裡的每個單詞上。

核心思想

語言模型的基本任務是在空白處預測單詞,或者預測一個單詞在特定上下文中出現的機率。我們再看一個例子:

“FC Barcelona is a _ club”

在這裡,語言模型可以以80%的機率将空白處的單詞預測為“足球”,并且20%的機率可以預測為闆球。

通常來說,一個語言模型是從“左到右”進行訓練的,是以設計用來預測下一個單詞。請看下面的例子,

“Tallest mountain is”

這裡,用一個通用語言模型來預測下一個單詞。當我們想要生成一些新的句子時,這是一個定義好的方法,即一個語言模型可以預測下一個單詞。增加了句子之後,繼續預測,并且增加更多的句子。但這是訓練語言模型的唯一方法嗎?更重要的是,這是使用深度學習進行語言模組化最有效的方法嗎?

BERT駁斥了這種語言模型的原始創造性,即它們必須被設計成從左到右的方式進行預測。這試圖說明了,如果我們不想生成新的句子,就不需要從左到右的方式來訓練語言模型。

這就是BERT的關鍵之處,它的作用是随機地屏蔽特定上下文中的單詞,然後來預測它們。

用BERT建構最先進語言模型
使用遷移學習的典型模型的體系結構

這種方法迫使模型學習使用整個句子中的相關資訊,并找到有效使用這種方法的屏蔽詞。

用BERT建構最先進語言模型

向前, 向後和屏蔽的LM(Masked Language Model)

有一些常用的方法,如語言模型(

ELMo

)和

ULMFiT

嵌入,它們使用并內建了著名的

Bi-LSTM

模型。讓我們先了解一下什麼是Bi-LSTM,并且它有哪些不完美的地方,然後再了解一下如何使用BERT解決問題。雙向LSTM是通過從左到右訓練的方式來預測下一個單詞,而從右到左訓練的方式來預測前一個單詞,這就意味着有兩個LSTM分别用于向前和向後預測。但它們都沒有同時觀察這兩種方式。在BERT中,這個模型是利用句子中所有位置的單詞來進行學習的,就是指整個句子。此外,谷歌還使用了Transformer,這使得模型會更加準确。從本質上來講,這從所有其它基于Bi-LSTM的模型中區分出了BERT。

體系結構

BERT在其體系結構中加入了強大的Transformer,它在輸入語句上使用了

attention

機制。Transformer由許多

塊組成,其中每個塊使用線性層轉換輸入序列,并應用了

機制。它基本上彙聚了映射

seq2seq

的層。

在這個情況中需要注意的一點是,BERT使用了WordPiece tokenizer,這大大減少了單詞量。例如,running → run + ##ing。

BERT體系結構

Transformer有一個缺點,就是它們不像RNN(Recurrent Neural Network,循環神經網絡)那樣确認輸入單詞的順序。比如說,如果前面的單詞和最後的單詞相同,那麼它們将被完全視為相似的标記。BERT用位置嵌入法解決了這個問題,它能告知語句中單詞的位置。在給向前網絡提供輸入标記之前,這些标記會被輸入到标記嵌入當中。

用BERT建構最先進語言模型

輸入模式總結

對于諸如自然語言推理和問答之類的任務,BERT訓練成對的句子,這有助于為區分兩個句子開發一個唯一的嵌入,這種嵌入被稱為片段嵌入(segment embedding)。

語言模型訓練

對于BERT的屏蔽語言模型(masked LM)訓練,需要遵循幾個步驟。

訓練一個屏蔽語言模型的一種非常傳統的方法是,用[MASK]标記随機替換某些單詞。BERT執行過這樣的訓練,比如,對于每一個例子,BERT随機地屏蔽了15%的标記。

但是這種方法有一個缺陷,即隻有模型存在屏蔽标記時才進行預測。在簡單的單詞中,如果在輸入标記中不做屏蔽,那麼模型可能就會忽略過去了。我們對模型的期望隻是給出正确的預測,而不管我們傳遞哪些輸入的标記。是以,讓我們了解一下谷歌是如何解決這個問題的。

從句子中随機地抽取一組單詞,然後再用另外一些随機的單詞來代替。這一步必須非常地謹慎,因為在替換這些原始單詞的同時,添加随機單詞會增加噪聲級别,也會導緻較差的結果。是以,BERT隻交換了10%到15%的被選擇用于屏蔽的标記,大約占整個标記數量的1%,另外的10%既沒有被交換也沒有被屏蔽,剩下的80%則被[MASK]标記屏蔽了。

用BERT預測下一個句子

為了在諸如問答和自然語言推理這樣的任務中表現出色,BERT使用了下一句預測的方法。

用BERT建構最先進語言模型

下一個輸入預測的例子

當用兩個句子作為輸入時,BERT使用了一個[SEP] 标記來分隔句子中的單詞。在語言模型的預訓練期間,給BERT輸入的兩個句子中,第二個句子先于第一個句子的時間占50%,而一個完全随機句子出現的時間占50%。此時,模型的任務是預測第二個句子是否真的是下一句話。

微調語言模型

BERT編碼器給出了一系列的隐藏狀态。比如說,對于一些分類任務,我們隻需要一個預測向量,是以序列需要被截取後放入一個向量。要做到這一點,這裡有兩種方法。第一種方法是通過

max or mean pooling

,第二種方法是借助attention的功能。然而,最簡單的方法是采用第一個标記對應的隐藏狀态。

用BERT建構最先進語言模型

BERT的工作

問題是,這個池機制是如何工作的呢?

BERT還有一個特殊的标記,名為Classification,它表示為[CLS]。模型需要在句首考慮這個[CLS] 标記。

1.模型的大小。BERT_large是同類模型中最大的一個,它有3.45億個參數,與BERT_base相比,BERT_large在小資料集上表現出卓越的性能, 而Bert_Base則有1.1億個參數;

2.更多的訓練步驟等于更高的準确性(如果保證有足夠多的訓練資料)。在

MNLI task

上可以進行簡單的證明,相同批量的訓練中,100萬級别的訓練,BERT的準确度要比在50萬級别提高了1%;

  1. BERT的Masked LM要比自左向右的LM訓練方法收斂得慢一些。這是因為每批預測的單詞隻有15%。但Masked LM訓練在經過了幾次訓練前的步驟後仍然戰勝了從左到右的LM訓練;
用BERT建構最先進語言模型

來源:

BERT

[Devlin等, 2018]

結論

是以,我們看到了BERT是如何在NLP領域獲得了重大的突破,以及它如何在不同的LM任務上取得了最先進的成果。

僅僅因為masked LM方法,它與其它的遷移學習方法如ELMo或者ULMFiT相比,帶來了巨大的差異,并且很好地繼承了它們的性能。

是以,在總結中,我嘗試着解釋BERT背後的核心思想,并且為了更深入地探索,你必須嘗試着讀一下BERT的那些令人驚歎的論文。至于源代碼,你可以在Git存儲庫裡查找。

本文由阿裡雲開發者社群組織翻譯。

文章原标題《Building State-of-the-Art Language Models with BERT》

作者:Ankit Singh

譯者:Mags

文章為簡譯,更為詳細的内容,請

檢視原文

繼續閱讀