bert中的sep 語言模型 BERT

2021-10-14 00:01:15 字數 3091 閱讀 2290

今天我們想到 nlp 就會想到 bert,在 nlp 領域中 bert 到處屠榜。bert 主要應用於自然語言處理中的預訓練。這裡想說一件有趣的事,就是當下比較火的自然語言處理模型如 elmo 和 bert 都是動畫片芝麻街中角色。

那麼什麼是 bert 呢? 我們先從字面上解釋一下什麼是 bert。

我們先用一句話來概括一下bertbert做的事情就是接受乙個句子,會輸出乙個詞的表示,這就是 bert所做的事情。

bert = 就是 transformer 的編碼器(encoder)部分。

bert 只是 transformer 一部分,他優勢在於無需收集帶有標籤的資料集我們就可以訓練乙個bert

其實我們應該先介紹一下 elmo ,因為我們只要將 elmo 中的 lstm 替換為 transformer 就是 bert。說以我們應該先介紹一下 elmo。

上面圖是 bert 輸入,bert 輸入分為 3 個部分

表示詞(token)在輸入的位置

訓練 bert 方法有兩種方式,也就是兩種任務來進行 bert 的訓練

類似完形填空,我們在輸入句子的 15% 詞用 [mask] 來替換掉,然後 bert 如何填補,通過對比填補內容是否正確作為目標。在 15% 詞替換又分為以下 3 種情況

在值得注意時候在計算損失時候我們只針對[mask]進行計算。

把[mask]輸入到乙個線性多分類器(linear multi-class classifier) 能力很弱,如果成功**出詞彙,就說明 bert 抽取很好詞表示的向量。

在這個任務只要是判斷前後兩個句子是否有關聯性。

給 bert 輸入兩個句子,讓 bert 判斷這兩個句子是否有前後關聯關係。這裡需要引入[sep] 詞表示兩個句子的分界線,[cls] 通常放在輸入序列第乙個位置,[cls]的輸出給二分類的分類器(linear binary classifier),這個線性分類器會給出分數。,大家可能認為 [cls] 應該放在句尾,這裡解釋一下為什麼放置序列首位,而不是其他位置。這是因為 bert 內部使用 transformer ,transformer 中每乙個位置都是均等的,給輸入順序無關,所以 [cls] 可以放在任意位置。無論[cls]放在句子開頭還是放在結尾都是沒有差別。

我們知道 bert ,接下來看一看 bert 應用。最簡單應用就是根據我們任務讓 bert 作為提取特徵工具提供一些詞向量來作為使用。但是 ***** 中還給出不止這些 bert 應用。還有讓 bert 和你的模型一起訓練

輸入乙個句子,然後對這個句子進行分類。可以文字進行分類,例如對文章進行分類,按一些主題進行分類,如這是娛樂新聞,這是體育新聞等等。

具體怎麼做呢,就是在你要輸入序列最前面新增 [cls] 然後這個表示分類輸出給線性分類器(class label)進行分類即可。這裡分類器(class label)引數是可以隨機初始化,而且 bert 也可以作為 fine-tune 一起學習。

輸入乙個句子,對句子中每乙個詞進行分類,確定詞彙輸入那個一分類,而不是對句子進行分類。輸出我們可以對每乙個詞進行輸出其分類。在訂票系統我們可以給每乙個詞加上標籤,例如那些詞表示地點,那些詞表示時間,那些是出發時間,那個詞是你的目的地

輸入兩個句子,輸入乙個分類,常見任務有推理任務。例如給機器乙個輸入前提,然後機器判斷根據這個前提作為假設後一句是否成立。

我們給bert 輸入文章

和問題

這些資料都是用token 序列表示。將 d 和 q 輸入 qa 模型會得到兩個整數 s(start) 和 e(end) 這兩個整數表示你的答案位於文章第 s 詞彙到第 e 詞彙之間。

我們用乙個向量 (維度和bert輸出詞向量維度相同)與文章中每乙個詞彙做點積後得到乙個標量,然後文章**現詞彙和這個向量作為點積後標量輸入到乙個 softmax 會得到乙個概率分布。然後看那個分數最高 s = 等於這個詞彙位置。這樣就計算出開始位置,同理可以計算出結束的位置(e)。

上圖中是乙個基礎bert,這裡只有 12 層,我們看一看這些層都做了哪些事情

我們來 bert 模型中層,每乙個層具體做了哪些事情。bert 舉例有 24 層,bert 每一層就好像是在作為 nlp 任務。例如我們在 nlp 首選會 pos 來判斷每乙個詞的詞性,接下來分析句子的文法,當我們知道句子的文法後,就可以進行進一步分析,確定指代關係,詞彙關係分析,都是從比較簡單到比較複雜。bert 同樣也是按這流程來安排他的每一層的工作,也是從簡單到複雜。

那麼 bert 有 24 層,我們回憶一下 elmo 模型就是將模型每一層的輸出抽取通過加權求和來得到最終輸出。而且這些權重是根據任務模型一起學出來,通過權重我們就可以知道那些層與那些任務關係更緊密。

我們用同樣方法來檢查一下 bert 每一層與那些任務相關。圖中深藍色表示任務對某一層的權重。圖中每一行代表了乙個 nlp 的任務。在每乙個 nlp 任務對於某一層權重越大就說明這個 nlp 任務越需要 bert 某一層。

bert中的sep 詳解BERT閱讀理解

bert的簡單回顧 google發布的 pre training of deep bidirectional transformers for language understanding 提到的bert模型重新整理了自然語言處理的11項記錄。算是nlp的里程碑事件,也開始了大公司之間的資料和算力的...

Bert演算法 語言模型 BERT詳細介紹

本文的目的是向nlp愛好者們詳細解析乙個著名的語言模型 bert。全文將分4個部分由淺入深的依次講解。1.bert簡介 bert是2018年10月由google ai研究院提出的一種預訓練模型。bert的全稱是bidirectional encoder representation from tra...

BERT模型的輸出

想要獲取獲取bert模型的輸出非常簡單,使用 model.get sequence output 和model.get pooled output 兩個方法,但這兩種方法針對nlp的任務需要進行乙個選擇 這個獲取每個token的output 輸出 batch size,seq length,embe...