久久ER99热精品一区二区-久久精品99国产精品日本-久久精品免费一区二区三区-久久综合九色综合欧美狠狠

專欄中心

EEPW首頁 > 專欄 > 使用“BERT”作為編碼器和****(BERT2BERT)來改進Seq2Seq文本摘要模型

使用“BERT”作為編碼器和****(BERT2BERT)來改進Seq2Seq文本摘要模型

發布人:數據派THU 時間:2022-07-23 來源:工程師 發布文章

來源:Deephub Imba

BERT是一個著名的、強大的預先訓練的“編碼器”模型。讓我們看看如何使用它作為“****”來形成編碼器-****架構。


Transformer 架構由兩個主要構建塊組成——編碼器和****——我們將它們堆疊在一起形成一個 seq2seq 模型。從頭開始訓練基于Transformer 的模型通常很困難,因為它需要大型數據集和高 GPU 內存。我們可以使用許多具有不同目標的預訓練模型。
首先,編碼器模型(例如,BERT、RoBERTa、FNet 等)學習如何從他們閱讀的文本中創建固定大小的特征表示。這種表示可用于訓練網絡進行分類、翻譯、摘要等。具有生成能力的基于****的模型(如 GPT 系列)。可以通過在頂部添加一個線性層(也稱為“語言模型頭”)來預測下一個標記。編碼器-****模型(BART、Pegasus、MASS、...)能夠根據編碼器的表示來調節****的輸出。它可用于摘要和翻譯等任務。它是通過從編碼器到****的交叉注意力連接來完成的。


在本文中,想展示如何使用僅編碼器模型的預訓練權重來為我們的微調提供一個良好的開始。我們將使用 BERT 作為編碼器和****來訓練一個摘要模型。
Huggingface 新的 API可以混合和匹配不同的預訓練模型。這讓我們的工作變得超級簡單!但在我們在進入代碼之前先看看這個概念。應該怎么做才能使 BERT(編碼器模型)在 seq2seq 中工作?
圖片
為簡單起見,我們刪除了圖 中網絡的其他元素!為了進行簡單的比較,僅編碼器模型(左)的每個塊(層)都由一個自注意力和一個線性層組成。同時,encoder-decoder 網絡(右)在每一層也有一個 cross-attention 連接。交叉注意力層使模型能夠根據輸入來調節預測。
將 BERT 模型直接用作****是不可能的,因為構建塊是不一樣,但是利用BERT的權值可以很容易地添加額外的連接并構建****部分。在構建完成后就需要微調模型來訓練這些連接和語言模型的頭部權重。(注意:語言模型的頭部位置在輸出和最后一個線性層之間——它不包括在上圖中)
我們可以使用 Huggingface 的 EncoderDecoderModel 對象來混合和匹配不同的預訓練模型。它將通過調用 .from_encoder_decoder_pretrained() 方法指定編碼器/****模型來處理添加所需的連接和權重。在下面的示例中,我們使用 BERT base 作為編碼器和****。

from transformers import EncoderDecoderModel

bert2bert = EncoderDecoderModel.from_encoder_decoder_pretrained("bert-base-uncased",
                                                              "bert-base-uncased")


由于 BERT 模型不是為文本生成而設計的,所以我們需要做一些額外的配置。下一步是設置標記器并指定句首和句尾標記。

from transformers import BertTokenizerFast

# Set tokenizer
tokenizer = BertTokenizerFast.from_pretrained("bert-base-uncased")
tokenizer.bos_token = tokenizer.cls_token
tokenizer.eos_token = tokenizer.sep_token

# Set model's config
bert2bert.config.decoder_start_token_id = tokenizer.bos_token_id
bert2bert.config.eos_token_id = tokenizer.eos_token_id
bert2bert.config.pad_token_id = tokenizer.pad_token_id


現在我們可以使用 Huggingface 的 Seq2Seq Trainer 對象的Seq2SeqTrainingArguments() 參數微調模型。這里可以更改和嘗試許多配置,獲得適合模型的參數組合。注意以下數值并非最優選擇,僅用于測試!如果顯存不夠的話,則 fp16 值是非常重要的。它將使用半精度減少顯存使用。要研究的其他有用變量是 learning_rate 、 batch_size 等。

from transformers import Seq2SeqTrainingArguments, Seq2SeqTrainer

training_args = Seq2SeqTrainingArguments(
  output_dir="./",
  learning_rate=5e-5,
  evaluation_strategy="steps",
  per_device_train_batch_size=4,
  per_device_eval_batch_size=8,
  predict_with_generate=True,
  overwrite_output_dir=True,
  save_total_limit=3,
  fp16=True,
)

trainer = Seq2SeqTrainer(
  model=bert2bert,
  tokenizer=tokenizer,
  args=training_args,
  compute_metrics=compute_metrics,
  train_dataset=train_data,
  eval_dataset=val_data,
)

trainer.train()


訓練的結果如下:
在 CNN/DM 數據集上微調的 BERT-to-BERT 模型性能。我使用 Beam Search 解碼方法。使用 ROUGE 評分指標計算結果。
圖片
BART 模型是文本摘要中的 SOTA 模型,BERT seq2seq 的表現也很不錯!只有 1% 的差異通常不會轉化為句子質量的巨大變化。這里我們也沒有做任何的超參數調整,如果調整優化后會變得更好。
混合搭配方法可以讓我們進行更多的實驗。例如可以將 BERT 連接到 GPT-2 以利用 BERT 的來創建強大的文本表示以及 GPT 生成高質量句子的能力。在為所有問題選擇 SOTA 模型之前,為自定義數據集使用不同的網絡是一種很好的做法。使用 BERT(與 BART 相比)的主要區別在于 512 個令牌輸入序列長度限制(與 1024 相比)。因此,如果數據集的輸入序列較小,它使 BERT-to-BERT 模型會是一個不錯的選擇。它訓練較小的模型會更有效,并且需要更少的資源,例如數據和 GPU 內存。

本文的代碼在這里可以找到:

https://github.com/NLPiation/tutorial_notebooks/blob/main/summarization/hf_BERT-BERT_training.ipynb




*博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。

關鍵詞: AI

相關推薦

CSR8670CSR8675智能語音Alexa藍牙方案開發

資源下載 2017-12-14

芯片互連初創企業Kandou AI完成2.25億美元融資

英偉達 Groq 3:AI 推理時代已至

電子元件培訓教材

EEPW2018年3月刊(工業物聯網)

基于Microchip MCU的AI/ML培訓教程2

視頻 2025-11-12

邊緣 AI 加速的 Arm? Cortex??M0+ MCU 如何為電子產品注入更強智能

嵌入式系統 2026-03-25

AI正在成為美國軍事系統核心

2026-03-24

TI 攜手 NVIDIA 推出面向下一代 AI 數據中心的完整 800 VDC 電源架構

PowiGaN for AI Data Centers: Unmatched Power Density and Reliability

視頻 2025-12-19

AI狂潮 半導體通膨壓力重重

智能計算 2026-03-23

賦能AI與新能源時代的高動態MW級負載平臺

尼吉康的事業介紹

視頻 2025-07-25

EEPW2018年6月刊(5G)

資源下載 2018-06-11

基于Microchip MCU的AI/ML培訓教程3

視頻 2025-11-12

Gartner發布三大AI價值實現路徑

盡管與亞馬遜達成芯片合作,英偉達股價仍下跌 3%,油價與加息擔憂沖擊 AI 交易

在工業自動化和智能家用電器設計中實現支持邊緣 AI 的電機控制

基于Microchip MCU的AI/ML培訓教程1

視頻 2025-11-12
更多 培訓課堂
更多 焦點
更多 視頻

技術專區