當前位置:成語大全網 - 漢語詞典 - 求解BERT模型結構的輸入輸出

求解BERT模型結構的輸入輸出

本文首先介紹了BERT模型應該做什麽,即模型的輸入輸出是什麽,模型的預訓練任務是什麽;然後,分析了模型的內部結構,說明了如何將模型的輸入逐步轉化為模型的輸出。最後,我們在幾個不同規模的中英文數據集上比較了BERT模型和現有方法的文本分類效果。

1.模型的輸入/輸出

BERT模型的全稱是:來自transformer的雙向編碼器表示。從名字就可以看出,BERT模型的目標是利用大規模無標簽語料庫訓練並獲得文本的表征,即文本的語義表征,然後在特定的NLP任務中對文本的語義表征進行微調,最後應用到NLP任務中。煮個栗子,用BERT模型訓練文本語義表征的過程就像高中學習語文、數學、英語、生物化學等基礎學科鞏固基礎知識壹樣;在壹個具體的NLP任務中對模型的參數進行微調,相當於在大學期間,在已有基礎知識的基礎上,進壹步強化所選專業,從而獲得可以應用於實際場景的專業技能。

在基於深度神經網絡的NLP方法中,文本中的單詞通常用壹維向量表示(俗稱“單詞向量”);在此基礎上,神經網絡會將文本中每個詞或詞的壹維詞向量作為輸入,經過壹系列復雜的變換後,輸出壹個壹維詞向量作為文本的語義表示。特別是我們通常希望語義相似的詞在特征向量空間中的距離也是接近的,這樣由詞/詞向量轉換而來的文本向量也可以包含更準確的語義信息。因此,BERT模型的主要輸入是文本中每個詞/詞的原始詞向量,可以隨機初始化,也可以用Word2Vector等算法進行預訓練作為初始值。輸出是融合了全文語義信息的文本中每個詞/詞的向量表示,如下圖所示(為方便描述和與當前中文版BERT模型保持壹致,本文使用詞向量作為輸入):

從上圖可以看出,BERT模型通過查詢詞向量表作為模型輸入,將文本中的每個詞轉換成壹維向量;該模型的輸出是對應於輸入單詞的全文語義信息的向量表示。此外,除了單詞vector之外,模型輸入還包含兩個其他部分:

1.文本向量:這個向量的值是在模型訓練過程中自動學習的,用來描述文本的全局語義信息,並與詞/詞的語義信息融合。

2.位置向量:由於文本不同位置的字/詞所承載的語義信息是不同的(如“我愛妳”、“妳愛我”),BERT模型對不同位置的字/詞附加不同的向量,以示區分。

最後,BERT模型以詞向量、文本向量和位置向量之和作為模型輸入。特別是在目前的BERT模型中,作者進壹步將英文單詞切割成更細粒度的單詞塊,如:將play分成play和# # # ing;另外,對於中文,目前作者並沒有對輸入的文本進行切分,而是直接將單個單詞作為文本的基本單位。

對於不同的NLP任務,模型輸入將被微調,並且模型輸出的使用將是不同的,例如:

根據不同的具體任務,可以在實際應用中打開思路,通過調整模型的輸入輸出,使模型適應真實的業務場景。

2.模型的預訓練任務

BERT實際上是壹個語言模型。語言模型通常使用與特定NLP任務無關的大規模文本語料庫進行訓練,目標是學習語言本身應該是什麽,就像我們學習漢語和英語等語言課程時,都需要學習如何選擇和組合我們掌握的單詞,以生成壹個流暢的文本。回到BERT模型,預訓練過程是逐步調整模型參數,使模型輸出的文本的語義表示能夠描述語言的本質,便於後續針對具體的NLP任務進行微調。為了達到這個目的,BERT文章的作者提出了兩個預訓練任務:Masked LM和Next情感預測。

2.1屏蔽LM

Masked LM的任務描述為:給定壹個句子,隨機擦除這個句子中的壹個或多個單詞,要求根據剩余詞匯預測被擦除的單詞是什麽,如下圖所示。

這不就是我們高中英語經常做的完形填空嗎?所以BERT模型的前期訓練過程其實就是在模仿學習語言的過程。具體來說,作者隨機選取壹句話中15%的詞進行預測。對於從原句中抹去的詞,80%情況下用特殊符號[MASK]替換,10%情況下用任意詞,其余10%情況下原詞不變。這樣做的主要原因是在後續的微調任務中,句子中不會有[MASK]標記,而這樣做的另壹個好處是,在預測壹個單詞時,模型並不知道在相應位置輸入的單詞是否是正確的單詞(10%概率),這就迫使模型更多地依賴上下文信息來預測這個單詞,並賦予模型壹定的糾錯能力。

2.2下壹句預測

下壹句預測的任務描述為:給定壹篇文章中的兩句話,判斷第二句話是否跟隨文中的第壹句話,如下圖所示。

在考四六級的時候,大家應該都做過段落重排,就是把壹篇文章的段落打亂,讓我們通過重排來還原原文,這實際上就要求我們對全文的大意有壹個全面準確的理解。下壹個句子預測任務實際上是段落重新排序的簡化版:只考慮兩個句子來判斷是否是文章前後的句子。在實際的預訓練過程中,作者從文本語料庫中隨機選取50%的正確句子對和50%的錯誤句子對進行訓練,結合掩蔽LM任務,使模型能夠更準確地描述句子乃至文本的語義信息。

BERT模型通過掩蔽LM任務和下壹句預測任務的聯合訓練,使模型輸出的每個詞的向量表示盡可能全面、準確地描述輸入文本(單句或句對)的全部信息,為後續的微調任務提供更好的模型參數初始值。

3.模型結構

了解了BERT模型的輸入/輸出和預訓練過程之後,我們再來看看BERT模型的內部結構。如前所述,BERT模型的全稱是:來自transformer的雙向編碼器表示法,即Transformer是BERT的核心模塊,註意力機制是Transformer最關鍵的部分。所以我們先從註意機制入手,介紹壹下如何利用註意機制來構建Transformer模塊。在此基礎上,我們用多層變壓器組裝了BERT模型。

3.1註意機制

* * * *註意:* *註意註意機制的中文名稱為“註意機制”。顧名思義,它的主要作用是讓神經網絡把“註意力”放在壹部分輸入上,即區分輸入的不同部分對輸出的影響。這裏,我們從增強詞的語義表征的角度來理解註意機制。

我們知道,壹個詞在文本中的意義通常與其上下文有關。比如,單看“陰險”這個詞,我們可能會覺得陌生(連讀音都記不清是什麽了),但看到它的語境“壹只天鵝的野心”後,我們馬上就熟悉了。因此,單詞的上下文信息有助於增強其語義表示。同時,語境中不同的詞在增強語義表征上往往起著不同的作用。比如上面的例子,在理解“胡”字時,“洪”字的作用最大,而“之”字的作用相對較小。為了通過不同地使用上層和下層文本信息來增強目標詞的語義表示,可以使用註意機制。

註意機制主要涉及三個概念:查詢、鍵和值。在上述增強詞的語義表示的應用場景中,目標詞及其上下文中的詞都有自己的原始值。註意機制以目標詞為查詢,以其上下文中的每個詞為關鍵字,以查詢與每個關鍵字的相似度為權重,將上下文中每個詞的值整合為目標詞的原始值。如下圖所示,註意力機制將目標單詞和上下文中每個單詞的語義向量表示作為輸入。它首先通過線性變換獲得目標詞的查詢向量表示、上下文中每個詞的關鍵向量表示以及目標詞和上下文中每個詞的原始值表示,然後計算查詢向量和每個關鍵向量的相似度作為權重,將目標詞的值向量和每個上下詞的值向量加權融合作為關註度的輸出,即目標詞的增強語義向量表示。

自我關註:對於輸入文本,我們需要增強每個詞的語義向量表示。所以我們以每個詞為查詢,通過權重融合文本中所有詞的語義信息,得到每個詞的增強語義向量,如下圖所示。在這種情況下,查詢、鍵和值的向量表示都來自同壹個輸入文本,因此註意機制也稱為自我註意。

多頭自關註:為了增強關註的多樣性,作者進壹步利用不同的自關註模塊,獲取文本中每個詞在不同語義空間的增強語義向量,並對每個詞的多個增強語義向量進行線性組合,得到壹個與原詞向量長度相同的最終增強語義向量,如下圖所示。

這裏再舉壹個例子來幫助理解多頭自我關註(註意:這個例子只是用來幫助理解,不嚴格正確)。看下面這句話:“南京長江大橋”,在不同的語義場景下可以有不同的理解:“南京/長江大橋”或者“南京市長/江大橋”。對於本句中的“龍”字,需要與前壹語義場景中的“將”字組合,形成正確的語義單位;在後壹個語義場景中,需要和“城”字結合起來,形成正確的語義單位。正如我們前面提到的,自我註意旨在用文本中的其他詞來增強目標詞的語義表征。在不同的語義場景下,註意力要集中在不同的詞上。因此,多頭自我關註可以理解為在各種語義場景下,考慮目標詞與文本中其他詞的語義向量的不同融合方式。可見,多頭自我關註的輸入和輸出在形式上是壹模壹樣的。輸入是文本中每個詞的原始向量表示,輸出是每個詞的帶有全文語義信息的增強向量表示。因此,多頭自我關註可以看作是壹個黑盒,以增強文本中每個詞的語義向量表示。

3.2變壓器編碼器

在多頭自關註的基礎上加上壹些“佐料”,就構成了著名的變壓器編碼器。實際上,Transformer模型中還包含了壹個用於生成文本的解碼器模塊,但由於在BERT模型中沒有使用解碼器模塊,所以這裏就不詳細介紹了。下圖顯示了變壓器編碼器的內部結構。如您所見,Transformer Encoder在多頭自關註上增加了三個關鍵操作:

可以看出,變壓器編碼器的輸入和輸出在形式上還是完全壹樣的。因此,Transformer Encoder也可以表示為壹個黑盒,它將輸入文本中每個單詞的語義向量轉換為相同長度的增強語義向量。

3.3伯特模型

組裝好TransformerEncoder之後,壹層壹層的堆疊幾個Transformer編碼器,BERT模型就完成了!

本文作者用12層和24層的變壓器編碼器組裝了兩套BERT模型,兩個模型的總參數分別為110M和340M。

原始參考:

/開發者/文章/1389555