真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

【使用BERT的問答系統(tǒng)】第4章:BERT算法詳解-創(chuàng)新互聯(lián)

🔎大家好,我是Sonhhxg_柒,希望你看完之后,能對你有所幫助,不足請指正!共同學習交流🔎

創(chuàng)新互聯(lián)專注于孝感企業(yè)網(wǎng)站建設,自適應網(wǎng)站建設,商城網(wǎng)站開發(fā)。孝感網(wǎng)站建設公司,為孝感等地區(qū)提供建站服務。全流程按需網(wǎng)站策劃,專業(yè)設計,全程項目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務

📝個人主頁-Sonhhxg_柒的博客_博客?📃

🎁歡迎各位→點贊👍 + 收藏?? + 留言📝?

📣系列專欄 - 機器學習【ML】?自然語言處理【NLP】? 深度學習【DL】

?

?🖍foreword

?說明?本人講解主要包括Python、機器學習(ML)、深度學習(DL)、自然語言處理(NLP)等內容。

如果你對這個系列感興趣的話,可以關注訂閱喲👋

文章目錄

BERT 是如何工作的?

文本處理

Masked Language Modeling

Next Sentence Prediction

使用 BERT 進行文本分類

BERT 模型的基準

GLUE?基準

SQuAD 數(shù)據(jù)集

IMDB 評論數(shù)據(jù)集

RACE基準

基于 BERT 的模型類型

ALBERT

RoBERTa

DistilBERT

StructBERT

Structural Pretraining in StructBERT

結論


本章深入探討用于句子嵌入的 BERT 算法以及各種訓練策略,包括 MLM 和 NSP。我們還將看到使用 BERT 的文本分類系統(tǒng)的實現(xiàn)。

BERT 是如何工作的?

BERT 使用轉換器來學習文本中單詞之間的上下文關系。Transformer 有兩種機制——編碼器和解碼器——但 BERT 只需要編碼器機制。BERT 使用雙向方法并按順序讀取文本輸入,這使模型可以根據(jù)單詞周圍的單詞來學習單詞的上下文。編碼器的輸入是嵌入到向量中的一系列標記。然后將向量傳遞到神經(jīng)網(wǎng)絡,然后生成對應于輸入的向量輸出序列。單詞的輸出向量取決于它出現(xiàn)的上下文。例如,“他喜歡打板球”這句話中“喜歡”這個詞的向量與“他的臉像西紅柿一樣紅了”這句話中同一個詞的向量是不同的。

此過程甚至在開始模型構建階段之前就涉及文本處理步驟。下一節(jié)將討論 BERT 中使用的文本處理步驟。

文本處理 有一組特定的規(guī)則來表示 BERT 模型的輸入文本。這也是模型更好運行的原因。如果我們查看嵌入,BERT 中的輸入嵌入是以下三種嵌入的組合。
  • Position embeddings?:位置嵌入用于學習嵌入中的順序信息。由于在變形金剛中丟失了與順序相關的信息,因此使用位置嵌入來恢復它。對于輸入序列中的每個位置,BERT 學習一個獨特的位置嵌入。在這些位置嵌入的幫助下,BERT 能夠在捕獲此序列或順序信息時表達單詞在句子中的位置。

  • Segment embeddings:?BERT 還學習了第一句和第二句的獨特嵌入,以幫助模型區(qū)分它們。它還可以將句子對作為問答等任務的輸入。

  • Token embeddings?:對于 WordPiece 令牌詞匯表中的每個令牌,學習令牌嵌入。WordPiece 標記詞匯表包含語料庫中單詞的子詞。例如,對于單詞“Question”,這個詞匯集將包括“Question”的所有可能的子詞,例如 [“Questio”、“Questi”…],等等。

圖4-1顯示了 BERT 中嵌入序列的示例。

?????????????????????????????????????????????????????圖 4-1?BERT嵌入

給定標記的輸入表示是通過對標記、段和位置嵌入求和來構建的。這使它成為一個全面的嵌入方案,其中包含許多對模型有用的信息。

對于任務是預測句子中下一個單詞的 NLP 任務,如果我們采用定向方法,它會有一些局限性。然而,BERT 提供了兩種學習上下文信息的策略:MLM 和 NSP。在 BERT 訓練期間,這兩項任務將一起訓練。當使用這兩種策略時,模型試圖達到最小化組合損失函數(shù)的目標。

Masked Language Modeling

BERT是一種深度雙向模型,比從左到右的模型或從左到右和從右到左的模型的淺層級聯(lián)更強大。BERT 網(wǎng)絡可以有效地從令牌的左右上下文中捕獲信息。這從第一層本身一直到最后一層。以前,語言模型是在從左到右的上下文中訓練的,這使得它們更不容易受到信息的影響。盡管 ELMo 模型使用兩個 LSTM 語言模型的淺層級聯(lián)大大改進了現(xiàn)有技術,但這還不夠。BERT 已被證明比 MLM 發(fā)揮關鍵作用的現(xiàn)有技術更重要。

在掩碼語言任務中,文本中的某些單詞被隨機掩碼。[MASK] 標記周圍的上下文詞用于預測 [MASK] 詞。當將單詞序列輸入 BERT 時,每個序列中 15% 的單詞將替換為 [MASK] 標記。這 15% 的單詞是隨機選擇的。其中,80% 被屏蔽,10% 被隨機詞替換,10% 被保留。這樣做是因為如果使用了 100% 的屏蔽詞,那么模型不一定會為非屏蔽詞生成良好的標記表示。模型性能得到改善,因為過多地關注特定位置或令牌已被阻止?;谛蛄兄蟹茄诖a詞提供的上下文,模型嘗試預測掩碼詞的原始值。

使用 BERT 生成詞嵌入需要遵循這些過程:
  • 在編碼器輸出之上添加分類層。

  • 將輸出向量乘以嵌入矩陣,從而將它們轉換為詞匯維度。

  • 用softmax計算詞匯表中每個詞的概率。

BERT中的損失函數(shù)只考慮masked值的預測;忽略未屏蔽詞的預測。這使得模型比定向模型收斂得更慢。例如,對于句子“The birds are flying in the clear blue sky”,如果我們正在訓練雙向模型而不是預測序列中的下一個詞,則可以構建一個模型來預測序列中缺失的詞本身?,F(xiàn)在,考慮一個標記“飛行”并掩蓋它,這樣它就可以被認為是丟失了?,F(xiàn)在需要對模型進行訓練,使其能夠預測句子“The birds are [MASK] in the clear blue sky”中這個缺失或屏蔽標記的值。這就是 MLM 的本質,它使模型能夠理解句子中單詞之間的關系?。

Next Sentence Prediction

國家安全政策?任務類似于句子中的下一個單詞預測。NSP 預測文檔中的下一個句子,而后者用于預測句子中缺失的單詞。BERT 也接受了 NSP 任務的訓練。這是必需的,以便我們的模型能夠理解文本語料庫中的不同句子是如何相互關聯(lián)的。在 BERT 模型的訓練過程中,將句子對作為輸入。然后它預測這對中的第二個句子是否是原始文檔中的后續(xù)句子。為實現(xiàn)這一點,采用 50% 的輸入,使得第二句是原始文檔中的后續(xù)句子,而另外 50% 包含第二句從文檔中隨機選擇的對。假設隨機的第二個句子與第一個句子斷開連接。

例如,考慮句子 A 和句子 B 的兩個不同訓練數(shù)據(jù)實例:

Instance 1

Sentence A – I saw a bird flying in the sky.

Sentence B?– It was a blue sparrow.

Label?– IsNextSentence

Instance 2

Sentence A – I saw a bird flying in the sky.

Sentence B?– The dog is barking.

Label?– NotNextSentence

正如我們所看到的,對于實例 1,句子 B 在邏輯上是在句子 A 之后,但對于實例 2 則不同,這分別從標簽IsNextSentence和NotNextSentence中可以清楚地看出。

這些輸入甚至在訓練過程開始區(qū)分兩個句子之前就已經(jīng)被處理了。此處概述了該過程?。
  1. 兩個標記被插入到一個句子對中。其中一個標記 [CLS] 被插入到第一個句子的開頭,另一個標記 [SEP] 被插入到每個句子的末尾。這兩個句子都被標記化并通過分隔標記相互分開,然后作為單個輸入序列輸入到模型中。 ?
  2. 對于每個 token 句子,添加表示它是句子 A 還是句子 B 的嵌入。這些句子嵌入在概念上與詞匯量為 2 的 token 嵌入基本相似。 ?
  3. 除了句子嵌入之外,位置嵌入也被添加到每個標記中,這有助于指示標記在序列中的位置。 ?
現(xiàn)在,執(zhí)行以下步驟來預測第二個句子是否真的與第一個句子相連。
  1. 整個輸入序列通過轉換器模型傳遞。 ?
  2. 在簡單分類層的幫助下,[CLS] 標記的輸出被轉換為 2X1 形狀的向量。 ?
  3. 因此,IsNextSentence的概率是在 softmax 的幫助下計算的。 ?

眾所周知,?BERT?用于各種 NLP 任務,例如文檔摘要、問答系統(tǒng)、文檔或句子分類等?,F(xiàn)在,讓我們看看 BERT 如何用于句子分類。

使用 BERT 進行文本分類 BERT可用于多種語言任務。添加到核心模型的一個小層允許使用 BERT 執(zhí)行分類、問答、命名實體識別等任務。BERT 模型為此目的進行了微調。對于分類任務,分類層被添加到 [CLS] 令牌的轉換器輸出之上,類似于 NSP。大多數(shù)超參數(shù)與 BERT 訓練中的相同,但其中一些需要調整以實現(xiàn)文本分類任務的最先進結果。圖4-2給出了確定給定推文是否為仇恨言論的示例。

?????????????????????????????圖 4-2?使用 BERT 進行分類的示例

類似類型的任務,例如文檔分類、情感分析等,也可以使用 BERT 來實現(xiàn)。

接下來,我們將了解如何在您的系統(tǒng)中配置預訓練的文本分類模型。按照此處列出的步驟配置或安裝必要的先決條件。 1.確保您的系統(tǒng)上安裝了 Python。打開命令提示符,運行以下命令,判斷是否安裝了Python,如圖4-3所示。

Python

?????????????????????????????????????圖 4-3?Python控制臺

這將在命令提示符下啟動 Python 控制臺。如果您的系統(tǒng)上未安裝 Python,請使用此鏈接根據(jù)您的操作系統(tǒng)下載并安裝 Python:https ://www.python.org/downloads/

? 2.接下來,安裝 Jupyter Notebook。打開命令提示符并運行以下命令。 ?
pip install notebook
3. 打開命令提示符并運行以下命令以運行 Jupyter Notebook。 jupyter筆記本 notebook 將在您的默認瀏覽器中啟動,主機地址為 localhost,端口號為 8888,以及一個唯一的令牌 ID,如圖4-4所示。

?????????????????????圖 4-4? Jupyter Notebook 控制臺 ? 4. 您也可以出于相同目的使用 Google Colab Notebook。它提供了一個快速且免費的環(huán)境來運行您的 Python 代碼,以防您的系統(tǒng)沒有足夠的可用資源。您還可以在 Google Colab 中免費使用圖形處理單元 (GPU) 和張量處理單元 (TPU),但限時(12 小時)。您只需要一個 Google 帳戶即可登錄 Google Colab Notebook。對于本書,我們將使用 Google Colab Notebook 來演示使用 BERT 進行文本分類。登錄到您的 Google 帳戶并單擊https://colab.research.google.com。您將看到如圖4-5所示的屏幕。 ? ?????????????圖 4-5?用于創(chuàng)建或導入筆記本的 Google Colab 界面 5. 要創(chuàng)建新的 Colab notebook,請點擊右下角的 New Notebook,如圖4-5所示。 ? 6. 安裝張量流。在 Jupyter Notebook 或 Colab Notebook 中運行以下命令。 ?
pip install tensorflow

我們現(xiàn)在已經(jīng)安裝了本練習的所有先決條件。請按照下面列出的步驟使用 BERT 配置用于文本分類的預訓練模型。

1. 可以從 GitHub 存儲庫下載 BERT 模型文件和所需代碼。打開命令提示符并通過鍵入以下命令將 GitHub 存儲庫(即https:?/github.com/google-research/bert.git )克隆到系統(tǒng)中: ?
git clone https://github.com/google-research/bert.git

2.下載的模型文件包含權重和其他必要的 BERT 文件。根據(jù)您的要求,需要從此列表中選擇 BERT 預訓練模型。

  • BERT Base, Uncased

  • BERT Large, Uncased

  • BERT Base, Cased

  • BERT Large, Cased

? 3. 如果您可以訪問云 TPU,則可以使用 BERT Large;否則,應使用 BERT Base 模型??梢詮挠袣ず蜔o殼型號中進行進一步選擇。 ? 4. 用于微調 BERT 模型的數(shù)據(jù)應采用 BERT 能夠理解的格式。數(shù)據(jù)必須分為三部分:訓練、開發(fā)和測試。根據(jù)經(jīng)驗,train 應包含 80% 的數(shù)據(jù),其余 20% 將分為開發(fā)和測試。您需要創(chuàng)建一個包含三個獨立文件的文件夾:train.tsv、dev.tsv和test.tsv。train.tsv文件將用于訓練模型,dev.tsv將用于開發(fā)系統(tǒng),test.csv將用于評估模型在未見數(shù)據(jù)上的性能。train.tsv和dev.tsv都不應該有標題,并且應該有四列,如下所示。

1      1     a   text example belonging to class 1

2      1     a    text example belonging to class 1

3      2     a    text example belonging to class 2

4      0     a    text example belonging to class 0

?以下是所用色譜柱的詳細信息。 a. 第一列:代表樣品的 ID。 ? b. 第二列:示例對應的分類標簽。 ? c. 第三列:一次性列。 ? d. 第四列:這代表需要分類的實際文本句子。 ? 5. test.tsv文件應該有一個標題行,這與其他兩個文件不同,并且應該如下所示。

id sentence

1. first test example

2. second test example

3. third test example

? 6.要訓??練模型,您需要導航到模型已克隆到的目錄。之后,在命令提示符下輸入以下命令:
python bert/run_classifier.py \
--task_name=cola \
--do_train=true \
--do_eval=true \
--data_dir=./data \
--vocab_file=$BERT_BASE_DIR/vocab.txt \
--bert_config_file=$BERT_BASE_DIR/bert_config.json \
--init_checkpoint=$BERT_BASE_DIR/bert_model.ckpt \
--max_seq_length=128 \
--train_batch_size=32 \
--learning_rate=2e-5 \
--num_train_epochs=3.0 \
--output_dir=./bert_output/

如果訓練數(shù)據(jù)文本的長度超過 128 個單詞,則max_seq_length的值可以增加到 512。如果您在 CPU 系統(tǒng)上訓練模型,則可以減少訓練大小以避免內存不足錯誤.

訓練完成后,報告將存儲在bert_output目錄中。

7.這個經(jīng)過訓練的 BERT 模型現(xiàn)在可以用于預測目的了。如果我們必須對新數(shù)據(jù)進行預測,那么數(shù)據(jù)需要存儲在test.tsv中。轉到存儲訓練模型文件的目錄。請參考bert_output目錄中看到的最高編號(最新模型文件)?model.ckpt文件。這些文件包含訓練模型的權重?,F(xiàn)在在命令提示符下運行以下命令以獲得分類結果,該結果將存儲在bert_output目錄位置的test_results.tsv中。
python bert/run_classifier.py \
--task_name=cola \
--do_train=true \
--do_eval=true \
--data_dir=./data \
--vocab_file=$BERT_BASE_DIR/vocab.txt \
--bert_config_file=$BERT_BASE_DIR/bert_config.json \
--init_checkpoint=$BERT_BASE_DIR/bert_model.ckpt \
--max_seq_length=128 \
--train_batch_size=32 \
--learning_rate=2e-5 \
--num_train_epochs=3.0 \
--output_dir=./bert_output/

請注意,max_seq_length參數(shù)的值應與訓練過程中使用的值相同。

?

對于此,我們將演示問題分類數(shù)據(jù)集的實現(xiàn),其中問題將被分類到各自的類別中。主要有兩種類型的問題,事實性(非描述性)和非事實性問題。例如,“德里的溫度是多少?”?是一個事實型問題,因為它正在尋找基于某些事實的答案?!笆裁词菧囟??”?是一個非事實型問題,因為它正在尋找有關溫度的文本片段。對于此實現(xiàn),請參閱Learning Question Classifiers上的數(shù)據(jù)集。

現(xiàn)在我們將看到如何使用 BERT 實現(xiàn)問題分類系統(tǒng)。 1. 對于此實現(xiàn),我們將如前所述從 GitHub 下載 BERT base-cased 模型。 ? 2.問題分類數(shù)據(jù)集已經(jīng)是訓練 BERT 模型所需的格式。數(shù)據(jù)分為train.tsv、dev.tsv和test.tsv集。在train.tsv和dev.tsv中,我們沒有任何標題。以下是文件中各列的說明。
  • 第一列:數(shù)據(jù)點索引。

  • 第二列:分類標簽(即,事實或非事實)。在這個數(shù)據(jù)集中,factoid 由 0 和 1 代表非 factoid。

  • 第三列:值為 a 的一次性列。

  • 第四列:實際問題文本。

然后我們創(chuàng)建數(shù)據(jù)文件夾并將這些文件保存在文件夾中。請參考圖4-6到4-8中的一些訓練文件示例。 ?????????????????????????????????????????????圖 4-6? Dev.tsv的快照

?????????????????????????????????????????????圖 4-7? train.tsv的快照

?????????????????????????????????????????????圖 4-8?test.tsv的快照

? 3. 現(xiàn)在,導航到下載的 BERT 模型所在的目錄。 ? 4.如前所述,在命令提示符下執(zhí)行訓練命令。訓練完成后的模型輸出將存儲在bert_output參數(shù)下定義的位置,如圖 4-9所示。
python run_classifier.py --task_name=cola --do_train=true --do_eval=true --data_dir=$BERT_BASE_DIR/data --vocab_file=$BERT_BASE_DIR/bert_output/cased_L-12_H-768_A-12/vocab.txt --bert_config_file=$BERT_BASE_DIR/bert_output/ cased_L-12_H-768_A-12/bert_config.json --init_checkpoint=$BERT_BASE_DIR/bert_output/ model.ckpt-2023 --max_seq_length=128 --train_batch_size=32 --learning_rate=2e-5 --num_train_epochs=3.0 --output_dir=$BERT_BASE_DIR/bert_output/

$BERT_BASE_DIR是您必須從 GitHub 下載代碼的目錄。

?????????????????????圖 4-9?訓練 BERT 模型的命令

? 5.訓練完成后,我們可以使用訓練好的模型對測試數(shù)據(jù)進行分類。在命令提示符處運行以下命令,以預測test.tsv文件中存在的問題,如圖 4-10所示。
python bert/run_classifier.py --task_name=cola --do_predict=true --data_dir=$BERT_BASE_DIR/data vocab_file=$BERT_BASE_DIR/bert_output/cased_L-12_H-768_A-12/vocab.txt --bert_config_file=$BERT_BASE_DIR/bert_output/ cased_L-12_H-768_A-12/bert_config.json --init_checkpoint=$TRAINED_CLASSIFIER --max_seq_length=128 --output_dir=$BERT_BASE_DIR/bert_output/

$BERT_BASE_DIR是您必須從 GitHub 下載代碼的目錄。

?????????????????????????????????????????????圖 4-10? 預測命令 6. 分類結果存儲在已定義為test_results.tsv文件中bert_output參數(shù)值的位置。正如我們在圖4-11中看到的,分類的結果是一個問題到兩個類別的概率分布。得分較高的班級將被視為相關班級。 ?

?????????????????????????????????????圖 4-11?預測結果快照

第一列對應于標簽 0(事實型),第二列對應于標簽 1(非事實型)。從這個生成的.csv文件中,我們可以看到測試數(shù)據(jù)中的問題是事實性問題還是非事實性問題。

這種問題類型分類系統(tǒng)在會話系統(tǒng)中非常有用,在該系統(tǒng)中,最終用戶輸入的查詢或問題需要分類以檢索相關結果。

BERT 模型的基準

BERT 嵌入模型的性能和準確性已經(jīng)針對各種 NLP 任務在不同類型的數(shù)據(jù)集上進行了持續(xù)評估。這樣做是為了檢查 BERT 是否能夠通過其他一些方法達到已經(jīng)為這些數(shù)據(jù)集設置的基準值。這些基準是評估模型特定方面工作的數(shù)據(jù)集。存在許多這樣的基準,接下來將討論其中的一些。

GLUE?基準 通用語言理解評估 (GLUE)是一組可用于訓練、評估和分析 NLP 模型的數(shù)據(jù)集。這些不同的模型在 GLUE 數(shù)據(jù)集上相互比較。為了測試模型的語言理解能力,GLUE 基準測試包括九個不同的任務數(shù)據(jù)集。要評估模型,首先要在 GLUE 提供的數(shù)據(jù)集上對其進行訓練,然后對所有九項任務進行評分。最終的表現(xiàn)得分是所有九項任務的平均值。

模型需要更改其輸入和輸出的表示以適應任務。例如,在 BERT 的預訓練期間,當輸入句子時,很少有單詞被屏蔽。由于 BERT 中的輸入表示層容納了所有的 GLUE 任務,因此無需更改該層。但是,必須刪除預訓練分類層。該層被替換為容納每個 GLUE 任務輸出的層。BERT 模型在 GLUE 基準測試中取得了最先進的結果,得分為 80.5%。

SQuAD 數(shù)據(jù)集 斯坦福問答數(shù)據(jù)集 (SQuAD)是一個閱讀理解數(shù)據(jù)集,由在一組維基百科文章中提出的問題組成。每個問題的答案分別是文本片段或段落的跨度。SQuAD 數(shù)據(jù)集有兩個版本。
  • SQuAD 1.1

  • SQuAD 2.0

除了 SQuAD 1.1 之外,SQuAD2.0 還有 100,000 個問題,其中包含 50,000 個未回答的問題,但與可回答的問題相似。這樣做是為了讓 SQuAD2.0 在問題段落不支持問題答案的情況下也能表現(xiàn)出色。

BERT 能夠通過微小的修改在 SQuAD 數(shù)據(jù)集上獲得最先進的結果。它需要對數(shù)據(jù)進行半復雜的預處理和后處理,以處理 SQuAD 上下文段落的可變長度特性和用于 SQuAD 訓練的字符級答案注釋。BERT 模型能夠在 SQuAD 1.0 和 SQuAD v2.0 測試數(shù)據(jù)集上分別獲得 93.2 和 83.1 的 F1 分數(shù)。

IMDB 評論數(shù)據(jù)集

IMDB 數(shù)據(jù)集是一個廣泛的?電影評論數(shù)據(jù)集,已用于對觀眾對電影的情緒進行分類。該數(shù)據(jù)集包含 25,000 條用于訓練的極地電影評論和 25,000 條用于測試的評論。除了訓練和測試數(shù)據(jù)之外,還有額外的未標記數(shù)據(jù)。該數(shù)據(jù)集還用于在情感分類任務中評估 BERT。

RACE基準

RACE是一個來自考試的大規(guī)模閱讀理解數(shù)據(jù)集。RACE 數(shù)據(jù)集用于評估閱讀理解任務的模型。該數(shù)據(jù)集是從中國學生的英語考試中收集的。它由人類專家生成的近 28,000 篇文章和 100,000 個問題組成。與其他基準數(shù)據(jù)集相比,RACE 中的問題數(shù)量要多得多。BERT 大型模型在 RACE 基準數(shù)據(jù)集上取得了 73.8% 的分數(shù)。

基于 BERT 的模型類型 BERT 是一種突破性的自然語言模型,它在 ML 世界中的引入導致了基于它的各種模型的開發(fā)。已經(jīng)開發(fā)了 BERT 模型的變體以滿足不同類型的基于 NLP 的系統(tǒng)。以下是 BERT 的一些主要變體:
  • ALBERT

  • RoBERTa

  • DistilBERT

  • StructBERT

  • BERTjoint?for Natural Questions

ALBERT

ALBERT?是 BERT 的更小版本,由 Google Research 和 Toyota Technological Institute 聯(lián)合推出。它是一種更智能、“精簡”的 BERT,也被認為是 BERT 的天然繼承者。它還可以用于實現(xiàn)最先進的 NLP 任務。與 BERT 相比,這一切都可以用更少的計算能力實現(xiàn),但你需要在準確性上做出一點妥協(xié)。ALBERT 的創(chuàng)建基本上是為了改進架構和訓練方法,以便以更少的計算資源提供更好的結果。

ALBERT 具有類似 BERT 的核心架構。它有transformer encoder架構和30,000個單詞的詞匯量,這和BERT是一樣的。但是,為了有效地使用參數(shù),ALBERT 中有大量的架構改進。 1. 分解嵌入?yún)?shù)化?:在 BERT 的情況下,WordPiece 嵌入大小 (E) 直接與隱藏層大小 (H) 相關聯(lián)。據(jù)觀察,WordPiece 嵌入旨在學習與上下文無關的表示,而隱藏層嵌入旨在學習與上下文相關的表示。在 BERT 中,我們嘗試僅通過隱藏層學習上下文相關的表示。

當 H 和 E 結合在一起時,我們最終得到一個包含數(shù)十億參數(shù)的模型,這些參數(shù)在訓練中很少更新。這是因為嵌入矩陣 V*E,其中 V 是大詞匯表,必須隨 H(隱藏層)縮放。這實際上會導致參數(shù)效率低下,因為這兩項用于不同的目的。

在 ALBERT 中,為了提高效率,我們解開兩個參數(shù)并將嵌入?yún)?shù)拆分為兩個較小的矩陣?,F(xiàn)在 one-hot 向量不直接投影到 H 中;相反,它們被投射到一個更小、維度更低的矩陣 E 中,然后 E 被投射到隱藏層中。因此,參數(shù)從 O (V*H) 減少到 Θ(V*E+E*H)。

? 2. 跨層參數(shù)共享?:與 BERT 相比,ALBERT 在層與層之間的過渡更平滑,并且通過跨層共享所有參數(shù)提高了參數(shù)效率。前饋和注意力參數(shù)都是共享的。這種權重共享有助于穩(wěn)定網(wǎng)絡參數(shù)?。 ? 3. 訓練變化: 句序預測:與BERT類似,ALBERT也使用了MLM但沒有使用NSP。ALBERT 沒有使用 NSP,而是使用自己新開發(fā)的稱為句序預測 (SOP)的訓練方法。

BERT中使用的NSP loss在后續(xù)研究中并沒有被發(fā)現(xiàn)是一種非常有效的訓練機制。因此,由于 NSP 不可靠,它被用來開發(fā) SOP。

在 ALBERT SOP 中,損失用于對句間連貫性建模。SOP 的創(chuàng)建主要是為了關注句間連貫性損失而不是主題預測,而 BERT 將主題預測與連貫性預測相結合。因此,ALBERT 能夠通過避免主題預測問題來學習更細粒度的句間銜接。

?ALBERT,盡管它的參數(shù)比 BERT 少,但得到結果的時間更短。在語言基準測試 SQuAD1.1、SQuAD2.0、MNLI SST-2 和 RACE 中,ALBERT 的表現(xiàn)明顯優(yōu)于 BERT,我們可以在表 4-1的對比中看到。 表 4-1BERT 和 ALBERT 模型之間的比較
ModelParameters

SQuAD1.1

SQuAD2.0

MNLI

SST-2

RACEAvgSpeedup
BERT base

108M

90.5/83.3

80.3/77.3

84.1

91.7

68.3

82.1

17.7倍

BERT large

334M

92.4/85.8

83.9/80.8

85.8

92.2

73.8

85.1

3.8倍

BERT xlarge

1270M

86.3/77.9

73.8/70.5

80.5

87.8

39.7

76.7

1.0

ALBERT base

12M

89.3/82.1

79.1/76.1

81.9

89.4

63.5

80.1

21.1倍

ALBERT large

18M

90.9/84.1

82.1/79.0

83.8

90.6

68.4

82.4

6.5倍

ALBERT xlarge

59M

93.0/86.5

85.9/83.1

85.4

91.9

73.9

85.5

2.4倍

ALBERT xxlarge

233M

94.1/88.3

88.1/85.1

88.0

95.2

82.3

88.7

1.2倍

RoBERTa

RoBERTa?是一種用于預訓練 NLP 系統(tǒng)的優(yōu)化方法。RoBERTa(Robustly optimized BERT)由 Facebook AI 團隊開發(fā),基于 Google 的 BERT 模型。RoBERTa 通過額外的預訓練改進重新實現(xiàn)了 BERT 的神經(jīng)網(wǎng)絡架構,在多個基準測試中取得了最先進的結果。

RoBERTa 和 BERT 共享多個配置,但有一些模型設置可以區(qū)分這兩個模型。
  • Reserved token?:?BERT 使用 [CLS] 和 [SEP] 分別作為起始標記和分隔符,而 RoBERTa 使用來轉換句子。

  • 子詞大小?:?BERT 有大約 30,000 個子詞,而 RoBERTa 有大約 50,000 個子詞。

此外,還有一些特定的修改和調整可以幫助 RoBERTa 比 BERT 表現(xiàn)更好。
  • 更多訓練數(shù)據(jù):在 BERT 的重新實現(xiàn)過程中,對 BERT 模型的超參數(shù)進行了一些更改,并且使用更高數(shù)量級的數(shù)據(jù)進行了更多迭代的訓練。RoBERTa 使用更多的訓練數(shù)據(jù)。它使用 BookCorpus (16G)、CC-NEWS (76G)、OpenWebText (38G) 和 Stories (31G) 數(shù)據(jù),而 BERT 僅使用 BookCorpus 作為訓練數(shù)據(jù)。

  • 動態(tài)掩碼?:在移植 BERT 以創(chuàng)建 RoBERTa 時,創(chuàng)建者修改了單詞掩碼策略。BERT 主要使用靜態(tài)掩碼,即在預處理過程中將單詞從句子中屏蔽掉。RoBERTa 使用動態(tài)掩蔽。在這里,每當將一個句子輸入訓練時,就會生成一個新的掩碼模式。RoBERTa 將訓練數(shù)據(jù)復制 10 次并以不同方式屏蔽這些數(shù)據(jù)。實驗觀察到動態(tài)掩蔽提高了性能并給出了比靜態(tài)掩蔽更好的結果。

  • 不同的訓練目標:?BERT 通過在 NSP 上訓練來捕捉句子之間的關系。一些沒有應用 NSP 的訓練方法提供了更好的結果,證明了 NSP 的無效性。進行了實驗以比較使用帶有 NSP 的段對、帶有 NSP 的句子對、沒有 NSP 的完整句子和沒有 NSP 的文檔句子訓練的模型。沒有使用 NSP 訓練的模型在 SQuAD1.1/2.0、MNLI-m、SST-2 和 RACE 上表現(xiàn)更好。

  • 在更長的序列上進行訓練:當模型在更長的序列上進行訓練時,可以獲得更好的結果。BERT base 通過 100 萬步以 256 個序列的批次大小進行訓練,但對 2,000 個序列和 31,000 步的訓練顯示性能有所提高。

隨著設計變更的實施,RoBERTa 模型在 MNLI、QNLI、RTE 和 RACE 任務上提供了最先進的性能。它還在 GLUE 基準測試中實現(xiàn)了可觀的性能提升,得分為 88.5。

RoBERTa 證明,調整 BERT 訓練過程可以提高各種 NLP 任務的性能。這凸顯了在 BERT 訓練中探索設計選擇以獲得更好的性能輸出?的重要性。

DistilBERT

DistilBERT被引入用于知識蒸餾。需要這種知識蒸餾來解決計算大量參數(shù)的缺點。最近開發(fā)的 NLP 模型參數(shù)數(shù)量增加,現(xiàn)在參數(shù)數(shù)量高達數(shù)百億。盡管更高的參數(shù)數(shù)量可確保最佳性能,但它會在計算資源有限時阻止模型訓練和服務。

知識蒸餾圍繞這樣一個想法,即較大的模型充當較小模型的老師,較小模型試圖復制其輸出和子層激活對于給定的一組輸入。這有時也稱為師生學習.?這是一種壓縮技術,其中較大模型的行為由較小模型再現(xiàn)。教師的輸出分布可用于所有可能的目標,這有助于培養(yǎng)具有泛化能力的學生。例如,在“The sky is [mask]”這句話中,老師可能會為“多云”和“晴朗”等詞指定高概率。也有可能將高概率分配給“藍色”一詞。這對學生模型很有幫助,因此它能夠概括而不是只學習正確的目標。此信息是通過用于訓練學生的損失函數(shù)捕獲的。該損失函數(shù)包含三個因素的線性組合。

Distillation Loss

蒸餾損失?考慮了?teacher(t) 和?student (s) 的輸出概率的組合,如下式所示。

L?ce?= ∑?i?t?i?log(s?i?)

Distillation Loss

t?i?= exp(z?i?/T)/ ∑?j?exp(z?j?/T)

Temperature Softmax

teacher 概率是通過 temperature softmax 計算的。這基本上是對 softmax 的修改,以便從教師模型輸出分布中獲得更多粒度。這給出了更平滑的輸出分布,因為較大概率的大小減小而較小概率增加。這有助于大限度地減少蒸餾損失。

Cosine Embedding Loss

余弦嵌入損失?是教師和學生的隱藏表示之間的距離度量。這有助于創(chuàng)建更好的模型,因為它使學生不僅可以在輸出層而且可以在其他層模仿老師。

Masked Language Modeling Loss

這與訓練 BERT 模型時使用的損失相同,以預測序列中屏蔽標記的正確標記值。

Architectural Modifications

DistilBERT 網(wǎng)絡架構也是一個類似于 BERT base 的 transformer encoder 模型,但是它的層數(shù)減少了一半。但是,隱藏的表示保持不變。這會影響參數(shù)數(shù)量,在 DistilBERT 中有 6600 萬個參數(shù),而在教師模型中有 1.1 億個參數(shù)。通過層數(shù)減少模型大小有助于實現(xiàn)計算復雜性的大幅降??低。向量大小或隱藏狀態(tài)表示的減少也減少了模型大小。

經(jīng)過知識蒸餾后,DistilBERT 能夠在 GLUE 基準測試中達到 BERT base 分數(shù)的 97%。這種知識提煉有助于將較大的模型或模型集合壓縮到較小的學生網(wǎng)絡中。事實證明,這在計算環(huán)境受限的情況下很有用。

StructBERT

StructBERT是一種基于 BERT 的模型,將語言結構融入到 BERT 預訓練中。這兩種線性化策略有助于將語言結構納入 BERT。詞級排序和句子級排序是 StructBERT 中利用的兩個結構信息集。由于結合了這種結構預訓練,StructBERT 實現(xiàn)了更好的泛化性和適應性。單詞和句子之間的依賴關系被編碼在 StructBERT 中。

StructBERT 中的結構預訓練

與所有其他基于 BERT 的模型類似,StructBERT 也建立在 BERT 架構之上。原始的 BERT 執(zhí)行兩個無監(jiān)督的預訓練任務,MLM 和 NSP。StructBERT 能夠增加 MLM 任務的能力。它在屏蔽單詞后打亂一定數(shù)量的標記并預測正確的順序。StructBERT 還能夠更好地理解句子之間的關系。這是通過隨機交換句子順序來實現(xiàn)的。這種新的基于 BERT 的模型捕獲每個句子中的細粒度單詞結構。

在對 StructBERT 進行預訓練之后,它可以針對特定任務的數(shù)據(jù)進行微調,以用于廣泛的下游任務,例如文檔摘要。

預訓練目標

StructBERT 擴展了原始 BERT 的預訓練目標,以充分利用語言中豐富的內句和句間結構。這是通過兩種方式完成的。
  1. 詞結構目標?:?BERT 模型無法明確地對自然語言中的順序和高階詞依賴進行建模。一個好的語言模型應該能夠從一個隨機排列的單詞的給定句子中重建一個句子。StructBERT 能夠通過用新的詞結構目標補充 BERT 的訓練目標來實現(xiàn)這一想法。這個新的模型目標使模型能夠重組句子以正確排序隨機打亂的單詞標記。該目標與 BERT 的 MLM 目標一起訓練。 ?
  2. 句子結構目標?:?NSP 的原始 BERT 模型目標在 StructBERT 中得到擴展,既可以預測下一個句子,也可以預測上一個句子。這使得預訓練模型以雙向方式學習句子的順序。 ?

這兩個輔助目標與原始 MLM 目標一起進行預訓練,以利用固有的語言結構。

Structural Pretraining in StructBERT

BERT聯(lián)合?是一種基于 BERT 的自然問題模型。BERT聯(lián)合模型僅在單個模型中預測短答案和長答案,而不是流水線方法。在這個模型中,每個文檔在重疊標記窗口的幫助下被分成多個訓練實例。這種方法用于創(chuàng)建平衡的訓練集,隨后是沒有答案的下采樣實例(空實例)。[CLS] 標記在訓練期間用于預測空實例,推理時的跨度根據(jù)跨度分數(shù)和 [CLS] 分數(shù)之間的差異進行排名。

該模型使用 Natural Questions (NQ) 數(shù)據(jù)集,該數(shù)據(jù)集是一個包含 307,373 個訓練示例、7,830 個開發(fā)示例和 7,842 個測試示例的問答數(shù)據(jù)集。對于每個示例,用戶通過 Google 搜索引擎和包含答案的相應維基百科頁面輸入查詢。維基百科頁面被注釋為問題的答案。

BERT聯(lián)合模型是從在 SQuAD 1.1 數(shù)據(jù)集上訓練的原始 BERT 模型初始化的。之后,該模型在 Natural Questions 訓練實例上進行了微調。它使用 Adam 優(yōu)化器來最小化損失。自然問題的 BERT聯(lián)合模型提供了比基線 NQ 系統(tǒng)更好的結果。BERT 的這種變體提供了一種設計問答系統(tǒng)的新方法。

結論

本章深入探討了 BERT 及其兩種算法,MLM 和 NSP。我們還討論了使用 BERT 開發(fā)的示例文本分類模型。我們還檢查了 BERT 在不同基準數(shù)據(jù)集上的行為,以及 BERT 的多種變體。在下一章中,我們將討論使用 BERT 設計問答系統(tǒng)。

你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧


文章名稱:【使用BERT的問答系統(tǒng)】第4章:BERT算法詳解-創(chuàng)新互聯(lián)
網(wǎng)址分享:http://weahome.cn/article/jijhi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部