1. 程式人生 > 實用技巧 >BERT的快速入門|視覺化介紹-清晰明瞭

BERT的快速入門|視覺化介紹-清晰明瞭

首次使用BERT的視覺指南

引用自:http://jalammar.github.io/a-visual-guide-to-using-bert-for-the-first-time/

在過去的幾年中,用於處理語言的機器學習模型正在迅速加速發展。這一進展已經離開了研究實驗室,並開始為一些領先的數字產品提供動力。一個很好的例子就是最近宣佈的BERT模型如何成為Google搜尋背後的主要力量Google相信這一步驟(或在搜尋中應用自然語言理解的進步)代表著“過去五年中最大的飛躍,也是搜尋歷史上最大的飛躍之一”。

這篇文章是有關如何使用BERT的變體對句子進行分類的簡單教程。

這是一個足夠基本的示例,作為第一個介紹,但足夠先進,足以展示其中涉及的一些關鍵概念。

除了這篇文章,我還準備了一個筆記本。您可以在筆記本上看到它在colab上執行它

資料集:SST2

在此示例中我們將使用的資料集為SST2,其中包含電影評論中的句子,每個句子都標記為正(值為1)或負(值為0):

句子標籤
一部激動人心,有趣而又最終傳達出對美與野獸和1930年代恐怖電影的想象 1個
顯然是從任何給定的日間肥皂的切割室地板重新組裝的 0
他們認為聽眾不會坐以待so 0
這是關於愛情,記憶,歷史以及藝術與商業之間戰爭的視覺上驚人的反省 1個
喬納森·帕克(Jonathan Parker)的劇作應該是所有現代辦公室失範電影的結尾
1個

型號:句子情感分類

我們的目標是建立一個接受句子的模型(就像資料集中的句子一樣),併產生1(指示句子帶有正面情緒)或0(指示句子帶有負面情緒)。我們可以認為它看起來像這樣:

在引擎蓋下,模型實際上由兩個模型組成。

  • DistilBERT處理該句子,並將從中提取的一些資訊傳遞給下一個模型。DistilBERT是由HuggingFace團隊開發和開源的BERT的較小版本它是BERT的一個更輕,更快的版本,與它的效能大致相當。
  • 下一個模型是scikit learning的基本Logistic迴歸模型,它將吸收DistilBERT的處理結果,並將句子分類為正數或負數(分別為1或0)。

我們在兩個模型之間傳遞的資料是大小為768的向量。我們可以將此向量視為對可用於分類的句子的嵌入。

如果您已閱讀我的上一篇文章Illustrated BERT,則此向量是第一個位置的結果(該位置接收[CLS]令牌作為輸入)。

模型訓練

雖然我們將使用兩個模型,但我們只會訓練邏輯迴歸模型。對於DistillBERT,我們將使用已經預先訓練並掌握英語的模型。但是,這種模型都沒有經過訓練,沒有經過微調來進行句子分類。但是,我們從訓練BERT的總體目標中獲得了一些句子分類功能。對於第一個位置的BERT輸出(與[CLS]令牌相關聯),情況尤其如此。我認為這是由於BERT的第二個訓練物件–下一個句子的分類。這個目標似乎訓練模型將句子範圍的意義封裝到第一位置的輸出。變壓器庫為我們提供了DistilBERT的實施以及模型的預訓練版本。

教程概述

所以這是本教程的遊戲計劃。我們將首先使用經過訓練的distilBERT生成2,000個句子的句子嵌入。

此步驟之後,我們將不再觸控distilBERT。這就是Scikit Learn的全部內容。我們在此資料集上進行常規的訓練/測試拆分:


針對distilBert(模型1)的輸出進行訓練/測試拆分,將建立我們將訓練並評估(模型2)的邏輯迴歸的資料集。請注意,實際上,sklearn的訓練/測試拆分在進行拆分之前會先對示例進行混洗,而不僅僅是將示例的前75%出現在資料集中。

然後我們在訓練集上訓練邏輯迴歸模型:

如何計算單個預測

在深入研究程式碼並解釋如何訓練模型之前,我們先來看一個訓練後的模型如何計算其預測。

讓我們嘗試對句子“對愛的視覺上驚人的反省”進行分類。第一步是使用BERT令牌生成器首先將單詞拆分為令牌。然後,我們新增句子分類所需的特殊標記(這些標記位於第一個位置的[CLS],位於句子結尾的[SEP])。

令牌化程式執行的第三步是用嵌入表中的令牌替換每個令牌,這是我們通過訓練模型獲得的元件。閱讀說明的Word2vec,瞭解有關單詞嵌入的背景。

請注意,令牌生成器在一行程式碼中完成所有這些步驟:

tokenizer.encode("a visually stunning rumination on love", add_special_tokens=True)

現在,我們的輸入句子是傳遞給DistilBERT的適當形狀。

如果您已閱讀Illustrated BERT,則此步驟也可以通過以下方式視覺化:

流經DistilBERT

像BERT一樣,通過DistilBERT傳遞輸入向量輸出將是每個輸入令牌的向量。每個向量由768個數字(浮點數)組成。

因為這是一個句子分類任務,所以我們將忽略除第一個向量(與[CLS]令牌相關聯的向量)以外的所有內容。我們傳遞的一個向量作為邏輯迴歸模型的輸入。

從這裡開始,邏輯迴歸模型的工作就是根據從訓練階段中學到的向量對該向量進行分類。我們可以認為預測計算如下所示:

我們將在下一部分中討論培訓內容以及整個過程的程式碼。

程式碼