BERT是怎樣煉成的 詞向量發展史

2021-09-05 12:04:35 字數 2442 閱讀 9554

預訓練詞向量對於很多計算機語言模型至關重要。如何得到優質的詞向量是非常熱門的研究主題。

什麼是好的詞向量?

有序詞典v,包括n個單詞。

每乙個單詞用長度為n的向量表示。這個向量僅於單詞在v詞典中索引序號位置為1,其餘位置為0。這是一種非常稀疏的向量。

缺點:

1.維度非常高。

2.這種向量無法表示詞與詞之間的關係,無法衡量相似度。

用低維度密集向量表示單詞,通常維數為100-300。

在訓練過程中,要求計算機學習根據當前單詞**其周圍單詞。或根據周圍單詞**當前單詞。

模型收斂後,得到單詞與向量對映表。

優點:

1.相比one hot維度變低,利於計算。

2.詞向量可以表達詞語關係:相同上下文環境的詞,會具有相似的向量值。

3.無需人工標註,可以利用豐富的語料庫自動抽取特徵。

缺點:

1.無法區分近義詞與反義詞,它們會具有相似的向量。

2.單詞和向量是一一對應關係,而實際上單詞在不同文字環境下,會具有不同的含義,向量無法適應上下文而變換。如下兩句,詞朝陽會被用相同的向量表達。

我在朝陽上班。

這是個朝陽行業。

**點我

動態詞向量技術,詞向量不再用固定的對映表來表達。

elmo訓練出乙個神經網路模型,它接受輸入乙個句子,輸出句子中每個單詞的向量序列。

網路結構:

訓練過程:輸入句子 - embedding層(512) - 雙向lstm層(2*512) - 雙向lstm層(2*512) - softmax層(vocab_size)

**過程:輸入句子 - embedding層(512) - 雙向lstm層(2*512) - 雙向lstm層(2*512) - 拼接前三層各自的輸出(3*1024)

訓練任務:

分別從句子的正反兩個方向encode,**下乙個單詞。

我愛北京天安門。

正向:輸入 我 愛 北京 天安門

** 愛 北京 天安門 。

反向:輸入 。 天安門 北京 愛

** 天安門 北京 愛 我

優點:

1.繼承了word2vec的所有優點

2.動態詞向量,解決了不同上下文環境下向量不可變的問題。

缺點:

1.用兩個單向模型(雙向lstm)表示雙向語言模型。每乙個單向模型只能注意到它前面的所有詞語,而無法接觸到它後面的詞語。
**點我

為了彌補elmo的不足,bert真正實現了雙向語言模型。

此外,bert還增加了乙個特性,使神經網路學習句子之間是否連貫的關係,最終能在智慧型問答等領域得到最佳結果。

網路結構:

訓練過程:輸入句子 - embedding層(768) - position_embedding層(768) - transformer層(768) * 12 - masked_lm層 - next_sentence層

**過程:輸入句子 - embedding層(768) - position_embedding層(768) - transformer層(768) * 12

訓練任務:

1.遮蔽單詞**(masked lm)

在原句中隨機選擇單詞做遮蔽處理。

由於訓練過程,語料含有遮蔽的詞,而訓練後將模型應用於實際任務時,語料沒有遮蔽詞。這種不匹配問題,用下面的方式來解決:

挑選15%的詞。這些被選中的詞中,80%直接替換成[mask],10%被隨機替換成另乙個語料中的詞,10%不做任何處理。

transformer編碼器不知道最終要**哪個詞,更不知道輸入句子對里哪個詞是被隨機替換成其他詞了,所以它必須保留每個詞語的語境表達分布資訊。此外,這種隨機替換的概率只有15%*10%=1.5%,因此它不會嚴重破壞語言模型的理解能力。

由於task1中只對15%的遮蔽詞做**,這樣的任務需要更多的訓練步驟才能達到收斂。但它對模型精度提公升的收益遠大於訓練時間成本。

2.句子對[a, b]關係**(next_sentence)

許多重要的下游任務,如問答(qa)和自然語言推理(nli)都是基於理解兩個句子之間的關係。通過上述語言模型,無法直接獲得這種資訊。

為了訓練乙個理解句子關係的模型,解決方法為:訓練乙個二分類任務,判斷句子對[a,b]是否連貫的上下文。

生成句子對[a,b]時,50%概率是連貫的上下句,50%概率是隨機摘取的不相關句子。

優點:

1.在nlp領域各項任務中取得突破性成績。

2.訓練完畢後,稍加調整即可用於具體任務。

缺點:

1.訓練過程非常耗時,谷歌公布的訓練時間是在4-16個tpu集群上訓練了4天,如果用gpu訓練可能需要一周以上。

好在谷歌開源了訓練好的中文模型。

2.模型參數量大,約為110m,需占用11g視訊記憶體(一整張顯示卡)。

敏捷是怎樣煉成的

很早之前,就有了寫 的衝動,寫一本給程式設計師看的 寫一本能夠反映中國程式設計師生活的 曾幾何時,沉默寡言 喜歡獨自思考 甚至 木吶 成為了程式設計師的標籤。其實在每個程式設計師心中,除了對技術的痴迷,他們也熱愛生活。他們改變著技術,也同時被技術改變著。他們是一群普通的人,也是自己心中的英雄。之所以...

ThreadLocal是怎樣煉成的

好久沒更新部落格了,一直都有學習新知識,但是沒時間總結,主要因為顧著去發展模型興趣去了哈 難得靜下來寫一篇部落格 閒話不多說,直接進入主題 threadlocal是解決執行緒安全問題乙個很好的思路,threadlocal類中有乙個map,用於儲存每乙個執行緒的變數副本,map中元素的鍵為執行緒物件,...

精英是怎樣煉成的?

精英總是少數 細節決定成就 素質決定高度。一 細節 我們都知道一句話叫細節決定成敗,這不是乙個口號,也不是心靈雞湯,這是真真正正很有用的一句話。大家認為細節是什麼 細節是小事 什麼小事 是起關鍵作用的小事 禮記 君子慎始 失之毫釐,謬以千里。咱們不說航母上的一顆鉚釘製造的標準有多嚴格,也不說火車鋼軌...