在本文之前我們已經介紹了elmo和gpt的兩個成功的模型,今天給大家介紹google新發布的bert模型。bert來頭可不小,其效能超越許多使用任務特定架構的系統,重新整理了11項nlp任務的當前最優性能記錄。
bert模型的全稱是bidirectional encoder representations from transformers,它是一種新型的語言模型。之所以說是一種新型的語言模型,是因為它通過聯合調節所有層中的雙向transformer來訓練預訓練深度雙向表示。
想深入了解bert模型,首先應該理解語言模型。預訓練的語言模型對於眾多自然語言處理問題起到了重要作用,比如squad問答任務、命名實體識別以及情感識別。目前將預訓練的語言模型應用到nlp任務主要有兩種策略,一種是基於特徵的語言模型,如elmo模型;另一種是基於微調的語言模型,如openai gpt。這兩類語言模型各有其優缺點,而bert的出現,似乎融合了它們所有的優點,因此才可以在諸多後續特定任務上取得最優的效果。
bert是一種基於微調的多層雙向transformer編碼器,其中的transformer與原始的transformer是相同的,並且實現了兩個版本的bert模型,在兩個版本中前饋大小都設定為4層:
lbertbase:l=12,h=768,a=12,total parameters=110m
lbertlarge:l=24,h=1024,a=16,total parameters=340m
其中層數(即transformer blocks塊)表示為l,隱藏大小表示為h,自注意力的數量為a。
輸入表示可以在乙個詞序列中表示單個文字句或一對文字(例如,[問題,答案])。對於給定的詞,其輸入表示是可以通過三部分embedding求和組成。embedding的視覺化表示如下圖所示:
bert模型使用兩個新的無監督**任務對bert進行預訓練,分別是masked lm和next sentence prediction:
為了訓練深度雙向transformer表示,採用了一種簡單的方法:隨機掩蓋部分輸入詞,然後對那些被掩蓋的詞進行**,此方法被稱為「masked lm」(mlm)。預訓練的目標是構建語言模型,bert模型採用的是bidirectional transformer。那麼為什麼採用「bidirectional」的方式呢?因為在預訓練語言模型來處理下游任務時,我們需要的不僅僅是某個詞左側的語言資訊,還需要右側的語言資訊。
在訓練的過程中,隨機地掩蓋每個序列中15%的token,並不是像word2vec中的cbow那樣去對每乙個詞都進行**。mlm從輸入中隨機地掩蓋一些詞,其目標是基於其上下文來**被掩蓋單詞的原始詞彙。與從左到右的語言模型預訓練不同,mlm目標允許表示融合左右兩側的上下文,這使得可以預訓練深度雙向transformer。transformer編碼器不知道它將被要求**哪些單詞,或者哪些已經被隨機單詞替換,因此它必須對每個輸入詞保持分布式的上下文表示。此外,由於隨機替換在所有詞中只發生1.5%,所以並不會影響模型對於語言的理解。
很多句子級別的任務如自動問答(qa)和自然語言推理(nli)都需要理解兩個句子之間的關係,譬如上述masked lm任務中,經過第一步的處理,15%的詞彙被遮蓋。那麼在這一任務中我們需要隨機將資料劃分為等大小的兩部分,一部分資料中的兩個語句對是上下文連續的,另一部分資料中的兩個語句對是上下文不連續的。然後讓transformer模型來識別這些語句對中,哪些語句對是連續的,哪些對子不連續。
elmo、gpt、bert都是近幾年提出的模型,在各自提出的時候都取得了不錯的成績。並且相互之間也是相輔相成的關係。
3個模型比較如下:
再往前看,在nlp中有著舉足輕重地位的模型和思想還有word2vec、lstm等。
word2vec作為里程碑式的進步,對nlp的發展產生了巨大的影響,但word2vec本身是一種淺層結構,而且其訓練的詞向量所「學習」到的語義資訊受制於視窗大小,因此後續有學者提出利用可以獲取長距離依賴的lstm語言模型預訓練詞向量,而此種語言模型也有自身的缺陷,因為此種模型是根據句子的上文資訊來**下文的,或者根據下文來**上文,直觀上來說,我們理解語言都要考慮到左右兩側的上下文資訊,但傳統的lstm模型只學習到了單向的資訊。
語言模型的每一次進步都推動著nlp的發展,從word2vec到elmo,從openai gpt到bert。通過這些發展我們也可以洞悉到,未來表徵學習(deep learning is representation learning)將會越來越多的應用到nlp相關任務中,它們可以充分的利用目前海量的資料,然後結合各種任務場景,去訓練出更為先進的模型,從而促進ai專案的落地。
**:
模型 深度學習 BERT
pre training of deep bidirectional transformers for language understanding 官方 和預訓練模型 第三方 1.pytorch pretrained bert谷歌推薦pytorch版本 2.bert pytorchpytorch版...
Bert模型的學習之路
在bert模型的學習中,遇到了以下一些不錯的資料,雖然走了很多彎路,這裡總結一下比較好的學習歷程吧,需要花一點時間閱讀。首先是對nlp中語言模型的乙個發展歷程的乙個介紹 理論模型學習 1 從word embedding到bert模型 自然語言處理中的預訓練技術發展史 與之先關的該作者的另外兩篇文章 ...
瞎聊機器學習 K 近鄰(KNN)演算法
我們通常將機器學習演算法分為有監督學習和無監督學習兩類,通俗的說,我們會按照訓練樣本中是否含有標籤來區分這兩類,knn演算法便是一種適用於帶標籤的資料場景的演算法,我們可以將它歸類為一種有監督學習方法。knn演算法,我們給定乙個資料集,對於乙個新來到的樣本,我們在資料集中找到距離該樣本最近的k個樣本...