中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

房地產(chǎn)建筑公司網(wǎng)站百度查一下

房地產(chǎn)建筑公司網(wǎng)站,百度查一下,怎么做出有品牌感的網(wǎng)站,app網(wǎng)站建設(shè)多少錢微調(diào)BERT 微調(diào)(Fine-tuning)BERT是指在預(yù)訓(xùn)練的BERT模型基礎(chǔ)上,使用特定領(lǐng)域或任務(wù)相關(guān)的數(shù)據(jù)對(duì)其進(jìn)行進(jìn)一步訓(xùn)練以適應(yīng)具體任務(wù)的需求。BERT(Bidirectional Encoder Representations from Transformers)是一種基于Tr…

微調(diào)BERT

微調(diào)(Fine-tuning)BERT是指在預(yù)訓(xùn)練的BERT模型基礎(chǔ)上,使用特定領(lǐng)域或任務(wù)相關(guān)的數(shù)據(jù)對(duì)其進(jìn)行進(jìn)一步訓(xùn)練以適應(yīng)具體任務(wù)的需求。BERT(Bidirectional Encoder Representations from Transformers)是一種基于Transformer架構(gòu)的深度雙向預(yù)訓(xùn)練語言模型,通過在大規(guī)模無監(jiān)督數(shù)據(jù)上進(jìn)行預(yù)訓(xùn)練,學(xué)習(xí)到了豐富的語言表示。

微調(diào)BERT的過程可以分為以下步驟:

  1. 準(zhǔn)備數(shù)據(jù)集:根據(jù)任務(wù)或領(lǐng)域的需求,準(zhǔn)備標(biāo)注的訓(xùn)練數(shù)據(jù)集。數(shù)據(jù)集應(yīng)包含輸入文本以及相應(yīng)的標(biāo)簽或目標(biāo)。

  2. 加載預(yù)訓(xùn)練的BERT模型:從預(yù)訓(xùn)練的BERT模型中加載參數(shù)。這些參數(shù)包含了在大規(guī)模無監(jiān)督數(shù)據(jù)上學(xué)習(xí)到的豐富語言表示。

  3. 構(gòu)建模型結(jié)構(gòu):在加載預(yù)訓(xùn)練的BERT模型的基礎(chǔ)上,構(gòu)建任務(wù)特定的模型結(jié)構(gòu)。通常,這涉及添加一個(gè)適當(dāng)?shù)姆诸惼鲗?#xff0c;該層的輸出與任務(wù)的類別數(shù)相匹配。

  4. 輸入編碼:將訓(xùn)練數(shù)據(jù)轉(zhuǎn)換為BERT模型可以接受的輸入格式。這包括將文本分割為標(biāo)記、添加特殊標(biāo)記如[CLS]和[SEP],并將其轉(zhuǎn)換為對(duì)應(yīng)的標(biāo)記ID。

  5. 微調(diào)過程:使用準(zhǔn)備好的訓(xùn)練數(shù)據(jù)對(duì)模型進(jìn)行訓(xùn)練。通過將輸入數(shù)據(jù)提供給模型,計(jì)算損失函數(shù),并使用反向傳播算法更新模型參數(shù)。常用的優(yōu)化算法包括隨機(jī)梯度下降(SGD)和Adam。

  6. 超參數(shù)調(diào)優(yōu):在微調(diào)過程中,可以根據(jù)需要調(diào)整學(xué)習(xí)率、批大小、訓(xùn)練輪數(shù)等超參數(shù),以獲得更好的性能。

  7. 模型評(píng)估:使用驗(yàn)證集或交叉驗(yàn)證方法評(píng)估微調(diào)后的模型性能。可以使用常見的評(píng)估指標(biāo),如準(zhǔn)確率、精確度、召回率和F1分?jǐn)?shù)。

  8. 推斷和應(yīng)用:在微調(diào)完成后,可以使用微調(diào)后的BERT模型進(jìn)行推斷和應(yīng)用,輸入新的未見過的文本數(shù)據(jù),并生成相應(yīng)的預(yù)測(cè)結(jié)果。

微調(diào)BERT的關(guān)鍵在于將預(yù)訓(xùn)練的語言模型參數(shù)與特定任務(wù)的數(shù)據(jù)進(jìn)行結(jié)合,通過在任務(wù)數(shù)據(jù)上的有監(jiān)督訓(xùn)練,使模型適應(yīng)特定任務(wù)的需求,并提升在該任務(wù)上的性能表現(xiàn)。同時(shí),由于BERT學(xué)習(xí)到了豐富的語言表示,在訓(xùn)練數(shù)據(jù)較少的情況下,微調(diào)BERT能夠起到遷移學(xué)習(xí)的作用,從而提升模型的泛化能力。

文章內(nèi)容來自李沐大神的《動(dòng)手學(xué)深度學(xué)習(xí)》并加以我的理解,感興趣可以去https://zh-v2.d2l.ai/查看完整書籍


文章目錄

  • 微調(diào)BERT
  • 針對(duì)序列級(jí)和詞元級(jí)應(yīng)用微調(diào)BERT
    • 單文本分類
    • 文本對(duì)分類或回歸
    • 文本標(biāo)注
    • 問答
  • 自然語言推斷:微調(diào)BERT
    • 加載BERT
    • 微調(diào)BERT的數(shù)據(jù)集
    • 微調(diào)BERT


針對(duì)序列級(jí)和詞元級(jí)應(yīng)用微調(diào)BERT

在本章的前幾節(jié)中,我們?yōu)樽匀徽Z言處理應(yīng)用設(shè)計(jì)了不同的模型,例如基于循環(huán)神經(jīng)網(wǎng)絡(luò)、卷積神經(jīng)網(wǎng)絡(luò)、注意力和多層感知機(jī)。這些模型在有空間或時(shí)間限制的情況下是有幫助的,但是,為每個(gè)自然語言處理任務(wù)精心設(shè)計(jì)一個(gè)特定的模型實(shí)際上是不可行的。我們介紹了一個(gè)名為BERT的預(yù)訓(xùn)練模型,該模型可以對(duì)廣泛的自然語言處理任務(wù)進(jìn)行最少的架構(gòu)更改。一方面,在提出時(shí),BERT改進(jìn)了各種自然語言處理任務(wù)的技術(shù)水平。另一方面,原始BERT模型的兩個(gè)版本分別帶有1.1億和3.4億個(gè)參數(shù)。因此,當(dāng)有足夠的計(jì)算資源時(shí),我們可以考慮為下游自然語言處理應(yīng)用微調(diào)BERT。

下面,我們將自然語言處理應(yīng)用的子集概括為序列級(jí)和詞元級(jí)。在序列層次上,介紹了在單文本分類任務(wù)和文本對(duì)分類(或回歸)任務(wù)中,如何將文本輸入的BERT表示轉(zhuǎn)換為輸出標(biāo)簽。在詞元級(jí)別,我們將簡(jiǎn)要介紹新的應(yīng)用,如文本標(biāo)注和問答,并說明BERT如何表示它們的輸入并轉(zhuǎn)換為輸出標(biāo)簽。在微調(diào)期間,不同應(yīng)用之間的BERT所需的“最小架構(gòu)更改”是額外的全連接層。在下游應(yīng)用的監(jiān)督學(xué)習(xí)期間,額外層的參數(shù)是從零開始學(xué)習(xí)的,而預(yù)訓(xùn)練BERT模型中的所有參數(shù)都是微調(diào)的。

單文本分類

單文本分類將單個(gè)文本序列作為輸入,并輸出其分類結(jié)果。 除了我們?cè)谶@一章中探討的情感分析之外,語言可接受性語料庫(Corpus of Linguistic Acceptability,COLA)也是一個(gè)單文本分類的數(shù)據(jù)集,它的要求判斷給定的句子在語法上是否可以接受。 (Warstadt et al., 2019)。例如,“I should study.”是可以接受的,但是“I should studying.”不是可以接受的。

在這里插入圖片描述
BERT輸入序列明確地表示單個(gè)文本和文本對(duì),其中特殊分類標(biāo)記“”用于序列分類,而特殊分類標(biāo)記“”標(biāo)記單個(gè)文本的結(jié)束或分隔成對(duì)文本。如圖所示,在單文本分類應(yīng)用中,特殊分類標(biāo)記“”的BERT表示對(duì)整個(gè)輸入文本序列的信息進(jìn)行編碼。作為輸入單個(gè)文本的表示,它將被送入到由全連接(稠密)層組成的小多層感知機(jī)中,以輸出所有離散標(biāo)簽值的分布。

文本對(duì)分類或回歸

在本章中,我們還研究了自然語言推斷。它屬于文本對(duì)分類,這是一種對(duì)文本進(jìn)行分類的應(yīng)用類型。

以一對(duì)文本作為輸入但輸出連續(xù)值,語義文本相似度是一個(gè)流行的“文本對(duì)回歸”任務(wù)。 這項(xiàng)任務(wù)評(píng)估句子的語義相似度。例如,在語義文本相似度基準(zhǔn)數(shù)據(jù)集(Semantic Textual Similarity Benchmark)中,句子對(duì)的相似度得分是從0(無語義重疊)到5(語義等價(jià))的分?jǐn)?shù)區(qū)間 (Cer et al., 2017)。我們的目標(biāo)是預(yù)測(cè)這些分?jǐn)?shù)。來自語義文本相似性基準(zhǔn)數(shù)據(jù)集的樣本包括(句子1,句子2,相似性得分):

“A plane is taking off.”(“一架飛機(jī)正在起飛?!?#xff09;,“An air plane is taking off.”(“一架飛機(jī)正在起飛?!?#xff09;,5.000分;

“A woman is eating something.”(“一個(gè)女人在吃東西?!?#xff09;,“A woman is eating meat.”(“一個(gè)女人在吃肉?!?#xff09;,3.000分;

“A woman is dancing.”(一個(gè)女人在跳舞。),“A man is talking.”(“一個(gè)人在說話。”),0.000分。

在這里插入圖片描述
圖中的文本對(duì)分類的BERT微調(diào)在輸入表示上有所不同。對(duì)于文本對(duì)回歸任務(wù)(如語義文本相似性),可以應(yīng)用細(xì)微的更改,例如輸出連續(xù)的標(biāo)簽值和使用均方損失:它們?cè)诨貧w中很常見。

文本標(biāo)注

現(xiàn)在讓我們考慮詞元級(jí)任務(wù),比如文本標(biāo)注(text tagging),其中每個(gè)詞元都被分配了一個(gè)標(biāo)簽。在文本標(biāo)注任務(wù)中,詞性標(biāo)注為每個(gè)單詞分配詞性標(biāo)記(例如,形容詞和限定詞)。 根據(jù)單詞在句子中的作用。如,在Penn樹庫II標(biāo)注集中,句子“John Smith‘s car is new”應(yīng)該被標(biāo)記為“NNP(名詞,專有單數(shù))NNP POS(所有格結(jié)尾)NN(名詞,單數(shù)或質(zhì)量)VB(動(dòng)詞,基本形式)JJ(形容詞)”。

在這里插入圖片描述
圖中說明了文本標(biāo)記應(yīng)用的BERT微調(diào)。唯一的區(qū)別在于,在文本標(biāo)注中,輸入文本的每個(gè)詞元的BERT表示被送到相同的額外全連接層中,以輸出詞元的標(biāo)簽,例如詞性標(biāo)簽。

問答

作為另一個(gè)詞元級(jí)應(yīng)用,問答反映閱讀理解能力。 例如,斯坦福問答數(shù)據(jù)集(Stanford Question Answering Dataset,SQuAD v1.1)由閱讀段落和問題組成,其中每個(gè)問題的答案只是段落中的一段文本(文本片段) (Rajpurkar et al., 2016)。舉個(gè)例子,考慮一段話:“Some experts report that a mask’s efficacy is inconclusive.However,mask makers insist that their products,such as N95 respirator masks,can guard against the virus.”(“一些專家報(bào)告說面罩的功效是不確定的。然而,口罩制造商堅(jiān)持他們的產(chǎn)品,如N95口罩,可以預(yù)防病毒。”)還有一個(gè)問題“Who say that N95 respirator masks can guard against the virus?”(“誰說N95口罩可以預(yù)防病毒?”)。答案應(yīng)該是文章中的文本片段“mask makers”(“口罩制造商”)。因此,SQuAD v1.1的目標(biāo)是在給定問題和段落的情況下預(yù)測(cè)段落中文本片段的開始和結(jié)束。
在這里插入圖片描述
為了微調(diào)BERT進(jìn)行問答,在BERT的輸入中,將問題和段落分別作為第一個(gè)和第二個(gè)文本序列。為了預(yù)測(cè)文本片段開始的位置,相同的額外的全連接層將把來自位置 i i i的任何詞元的BERT表示轉(zhuǎn)換成標(biāo)量分?jǐn)?shù) s i s_i si?。文章中所有詞元的分?jǐn)?shù)還通過softmax轉(zhuǎn)換成概率分布,從而為文章中的每個(gè)詞元位置 i i i分配作為文本片段開始的概率 p i p_i pi?。預(yù)測(cè)文本片段的結(jié)束與上面相同,只是其額外的全連接層中的參數(shù)與用于預(yù)測(cè)開始位置的參數(shù)無關(guān)。當(dāng)預(yù)測(cè)結(jié)束時(shí),位置 i i i的詞元由相同的全連接層變換成標(biāo)量分?jǐn)?shù) e i e_i ei?。 上圖描述了用于問答的微調(diào)BERT。

對(duì)于問答,監(jiān)督學(xué)習(xí)的訓(xùn)練目標(biāo)就像最大化真實(shí)值的開始和結(jié)束位置的對(duì)數(shù)似然一樣簡(jiǎn)單。當(dāng)預(yù)測(cè)片段時(shí),我們可以計(jì)算從位置 i i i到位置 j j j的有效片段的分?jǐn)?shù) s i + e j s_i+e_j si?+ej? i < = j i<=j i<=j),并輸出分?jǐn)?shù)最高的跨度。

下面我們舉一個(gè)例子微調(diào)BERT

自然語言推斷:微調(diào)BERT

在本章的前面幾節(jié)中,我們已經(jīng)為SNLI數(shù)據(jù)集上的自然語言推斷任務(wù)設(shè)計(jì)了一個(gè)基于注意力的結(jié)構(gòu)?,F(xiàn)在,我們通過微調(diào)BERT來重新審視這項(xiàng)任務(wù)。自然語言推斷是一個(gè)序列級(jí)別的文本對(duì)分類問題,而微調(diào)BERT只需要一個(gè)額外的基于多層感知機(jī)的架構(gòu),如圖中所示。在這里插入圖片描述
本節(jié)將下載一個(gè)預(yù)訓(xùn)練好的小版本的BERT,然后對(duì)其進(jìn)行微調(diào),以便在SNLI數(shù)據(jù)集上進(jìn)行自然語言推斷。

加載BERT

原始的BERT模型有數(shù)以億計(jì)的參數(shù)。在下面,我們提供了兩個(gè)版本的預(yù)訓(xùn)練的BERT:“bert.base”與原始的BERT基礎(chǔ)模型一樣大,需要大量的計(jì)算資源才能進(jìn)行微調(diào),而“bert.small”是一個(gè)小版本,以便于演示。

import json
import multiprocessing
import os
import torch
from torch import nn
from d2l import torch as d2l
d2l.DATA_HUB['bert.base'] = (d2l.DATA_URL + 'bert.base.torch.zip','225d66f04cae318b841a13d32af3acc165f253ac')
d2l.DATA_HUB['bert.small'] = (d2l.DATA_URL + 'bert.small.torch.zip','c72329e68a732bef0452e4b96a1c341c8910f81f')

兩個(gè)預(yù)訓(xùn)練好的BERT模型都包含一個(gè)定義詞表的“vocab.json”文件和一個(gè)預(yù)訓(xùn)練參數(shù)的“pretrained.params”文件。我們實(shí)現(xiàn)了以下load_pretrained_model函數(shù)來加載預(yù)先訓(xùn)練好的BERT參數(shù)。

def load_pretrained_model(pretrained_model, num_hiddens, ffn_num_hiddens,num_heads, num_layers, dropout, max_len, devices):data_dir = d2l.download_extract(pretrained_model)# 定義空詞表以加載預(yù)定義詞表vocab = d2l.Vocab()vocab.idx_to_token = json.load(open(os.path.join(data_dir,'vocab.json')))vocab.token_to_idx = {token: idx for idx, token in enumerate(vocab.idx_to_token)}bert = d2l.BERTModel(len(vocab), num_hiddens, norm_shape=[256],ffn_num_input=256, ffn_num_hiddens=ffn_num_hiddens,num_heads=4, num_layers=2, dropout=0.2,max_len=max_len, key_size=256, query_size=256,value_size=256, hid_in_features=256,mlm_in_features=256, nsp_in_features=256)# 加載預(yù)訓(xùn)練BERT參數(shù)bert.load_state_dict(torch.load(os.path.join(data_dir,'pretrained.params')))return bert, vocab

為了便于在大多數(shù)機(jī)器上演示,我們將在本節(jié)中加載和微調(diào)經(jīng)過預(yù)訓(xùn)練BERT的小版本(“bert.small”)。在練習(xí)中,我們將展示如何微調(diào)大得多的“bert.base”以顯著提高測(cè)試精度。

微調(diào)BERT的數(shù)據(jù)集

對(duì)于SNLI數(shù)據(jù)集的下游任務(wù)自然語言推斷,我們定義了一個(gè)定制的數(shù)據(jù)集類SNLIBERTDataset。在每個(gè)樣本中,前提和假設(shè)形成一對(duì)文本序列,并被打包成一個(gè)BERT輸入序列,片段索引用于區(qū)分BERT輸入序列中的前提和假設(shè)。利用預(yù)定義的BERT輸入序列的最大長度(max_len),持續(xù)移除輸入文本對(duì)中較長文本的最后一個(gè)標(biāo)記,直到滿足max_len。為了加速生成用于微調(diào)BERT的SNLI數(shù)據(jù)集,我們使用4個(gè)工作進(jìn)程并行生成訓(xùn)練或測(cè)試樣本。

class SNLIBERTDataset(torch.utils.data.Dataset):def __init__(self, dataset, max_len, vocab=None):all_premise_hypothesis_tokens = [[p_tokens, h_tokens] for p_tokens, h_tokens in zip(*[d2l.tokenize([s.lower() for s in sentences])for sentences in dataset[:2]])]self.labels = torch.tensor(dataset[2])self.vocab = vocabself.max_len = max_len(self.all_token_ids, self.all_segments,self.valid_lens) = self._preprocess(all_premise_hypothesis_tokens)print('read ' + str(len(self.all_token_ids)) + ' examples')def _preprocess(self, all_premise_hypothesis_tokens):pool = multiprocessing.Pool(4)  # 使用4個(gè)進(jìn)程out = pool.map(self._mp_worker, all_premise_hypothesis_tokens)all_token_ids = [token_ids for token_ids, segments, valid_len in out]all_segments = [segments for token_ids, segments, valid_len in out]valid_lens = [valid_len for token_ids, segments, valid_len in out]return (torch.tensor(all_token_ids, dtype=torch.long),torch.tensor(all_segments, dtype=torch.long),torch.tensor(valid_lens))def _mp_worker(self, premise_hypothesis_tokens):p_tokens, h_tokens = premise_hypothesis_tokensself._truncate_pair_of_tokens(p_tokens, h_tokens)tokens, segments = d2l.get_tokens_and_segments(p_tokens, h_tokens)token_ids = self.vocab[tokens] + [self.vocab['<pad>']] \* (self.max_len - len(tokens))segments = segments + [0] * (self.max_len - len(segments))valid_len = len(tokens)return token_ids, segments, valid_lendef _truncate_pair_of_tokens(self, p_tokens, h_tokens):# 為BERT輸入中的'<CLS>'、'<SEP>'和'<SEP>'詞元保留位置while len(p_tokens) + len(h_tokens) > self.max_len - 3:if len(p_tokens) > len(h_tokens):p_tokens.pop()else:h_tokens.pop()def __getitem__(self, idx):return (self.all_token_ids[idx], self.all_segments[idx],self.valid_lens[idx]), self.labels[idx]def __len__(self):return len(self.all_token_ids)

這是一個(gè)用于加載和預(yù)處理SNLI數(shù)據(jù)集的SNLIBERTDataset類,用于將數(shù)據(jù)集轉(zhuǎn)換為適合BERT模型微調(diào)的格式。以下是該類的主要功能和方法:

  • __init__(self, dataset, max_len, vocab=None): 類的初始化方法,接受數(shù)據(jù)集、最大長度和詞匯表作為參數(shù),并進(jìn)行預(yù)處理操作,包括分詞、截?cái)?、轉(zhuǎn)換為ID等。初始化時(shí)會(huì)打印讀取的示例數(shù)量。

  • _preprocess(self, all_premise_hypothesis_tokens): 內(nèi)部方法,用于多進(jìn)程處理數(shù)據(jù)集中的所有前提和假設(shè)對(duì)。它調(diào)用_mp_worker方法處理每個(gè)前提和假設(shè)對(duì),并返回轉(zhuǎn)換后的token ID、segments和有效長度。

  • _mp_worker(self, premise_hypothesis_tokens): 內(nèi)部方法,用于處理單個(gè)前提和假設(shè)對(duì)的token化、截?cái)嗪娃D(zhuǎn)換為ID等操作。返回處理后的token ID、segments和有效長度。

  • _truncate_pair_of_tokens(self, p_tokens, h_tokens): 內(nèi)部方法,用于根據(jù)最大長度對(duì)前提和假設(shè)對(duì)進(jìn)行截?cái)?#xff0c;以便適應(yīng)BERT模型的輸入格式。

  • __getitem__(self, idx): 用于獲取數(shù)據(jù)集中特定索引處的樣本和標(biāo)簽。返回的是模型所需的輸入張量和相應(yīng)的標(biāo)簽。

  • __len__(self): 返回?cái)?shù)據(jù)集的樣本數(shù)量。

all_premise_hypothesis_tokens是一個(gè)列表,其中包含了前提和假設(shè)對(duì)的tokenized表示。

具體地,all_premise_hypothesis_tokens列表是通過列表推導(dǎo)式生成的。每個(gè)列表元素都是一個(gè)包含兩個(gè)子列表的元組,分別表示一個(gè)前提句子和一個(gè)假設(shè)句子的tokenized表示。這些tokenized表示是通過對(duì)輸入的前提和假設(shè)對(duì)進(jìn)行小寫轉(zhuǎn)換和分詞操作生成的。

例如,假設(shè)輸入的前提和假設(shè)對(duì)是:

dataset = [["The cat is on the mat.", "The cat is lying on the mat."],["She is reading a book.", "The girl is studying."],
]

經(jīng)過處理后,all_premise_hypothesis_tokens的值將是:

[(["the", "cat", "is", "on", "the", "mat", "."], ["the", "cat", "is", "lying", "on", "the", "mat", "."]),(["she", "is", "reading", "a", "book", "."], ["the", "girl", "is", "studying", "."])
]

將所有句子詞元化后,使用多線程的方法,調(diào)用_mp_worker方法對(duì)每個(gè)假設(shè)和前提進(jìn)行處理和轉(zhuǎn)換

具體而言,_mp_worker方法執(zhí)行以下操作:

  1. 解包傳入的premise_hypothesis_tokens元組,將前提和假設(shè)的tokenized表示分配給p_tokens和h_tokens變量。

  2. 調(diào)用_truncate_pair_of_tokens方法,根據(jù)設(shè)定的最大長度截?cái)嗲疤岷图僭O(shè)的tokenized表示,以確保其長度不超過最大長度限制。

  3. 調(diào)用d2l.get_tokens_and_segments函數(shù),將截?cái)嗪蟮那疤岷图僭O(shè)的tokenized表示作為參數(shù),獲取它們的tokens和segments。tokens表示整個(gè)句子的token序列,segments表示句子的分段標(biāo)識(shí)。

  4. 將tokens轉(zhuǎn)換為對(duì)應(yīng)的token ID,并使用詞匯表進(jìn)行查找。如果tokens的長度小于最大長度(self.max_len),則在末尾添加的ID,以使token_ids的長度與最大長度相同。

  5. 將segments的長度擴(kuò)展到與最大長度相同,如果segments的長度小于最大長度,則在末尾添加0。

  6. 計(jì)算tokens的有效長度,即沒有被截?cái)嗟拈L度。

  7. 返回處理后的結(jié)果,即包含了token ID表示、segments表示和有效長度的元組(token_ids, segments, valid_len)。

下載完SNLI數(shù)據(jù)集后,我們通過實(shí)例化SNLIBERTDataset類來生成訓(xùn)練和測(cè)試樣本。這些樣本將在自然語言推斷的訓(xùn)練和測(cè)試期間進(jìn)行小批量讀取。

# 如果出現(xiàn)顯存不足錯(cuò)誤,請(qǐng)減少“batch_size”。在原始的BERT模型中,max_len=512
batch_size, max_len, num_workers = 512, 128, d2l.get_dataloader_workers()
data_dir = d2l.download_extract('SNLI')
train_set = SNLIBERTDataset(d2l.read_snli(data_dir, True), max_len, vocab)
test_set = SNLIBERTDataset(d2l.read_snli(data_dir, False), max_len, vocab)
train_iter = torch.utils.data.DataLoader(train_set, batch_size, shuffle=True,num_workers=num_workers)
test_iter = torch.utils.data.DataLoader(test_set, batch_size,num_workers=num_workers)

這個(gè)地方可能會(huì)卡在train_set = SNLIBERTDataset(d2l.read_snli(data_dir, True), max_len, vocab)這一行,具體原因不知,可以嘗試減少batch_size

微調(diào)BERT

用于自然語言推斷的微調(diào)BERT只需要一個(gè)額外的多層感知機(jī),該多層感知機(jī)由兩個(gè)全連接層組成(請(qǐng)參見下面BERTClassifier類中的self.hidden和self.output)。這個(gè)多層感知機(jī)將特殊的“”詞元的BERT表示進(jìn)行了轉(zhuǎn)換,該詞元同時(shí)編碼前提和假設(shè)的信息為自然語言推斷的三個(gè)輸出:蘊(yùn)涵、矛盾和中性。

class BERTClassifier(nn.Module):def __init__(self, bert):super(BERTClassifier, self).__init__()self.encoder = bert.encoderself.hidden = bert.hiddenself.output = nn.Linear(256, 3)def forward(self, inputs):tokens_X, segments_X, valid_lens_x = inputsencoded_X = self.encoder(tokens_X, segments_X, valid_lens_x)return self.output(self.hidden(encoded_X[:, 0, :]))

在下文中,預(yù)訓(xùn)練的BERT模型bert被送到用于下游應(yīng)用的BERTClassifier實(shí)例net中。在BERT微調(diào)的常見實(shí)現(xiàn)中,只有額外的多層感知機(jī)(net.output)的輸出層的參數(shù)將從零開始學(xué)習(xí)。預(yù)訓(xùn)練BERT編碼器(net.encoder)和額外的多層感知機(jī)的隱藏層(net.hidden)的所有參數(shù)都將進(jìn)行微調(diào)。

net = BERTClassifier(bert)

MaskLM類和NextSentencePred類在其使用的多層感知機(jī)中都有一些參數(shù)。這些參數(shù)是預(yù)訓(xùn)練BERT模型bert中參數(shù)的一部分,因此是net中的參數(shù)的一部分。然而,這些參數(shù)僅用于計(jì)算預(yù)訓(xùn)練過程中的遮蔽語言模型損失和下一句預(yù)測(cè)損失。這兩個(gè)損失函數(shù)與微調(diào)下游應(yīng)用無關(guān),因此當(dāng)BERT微調(diào)時(shí),MaskLM和NextSentencePred中采用的多層感知機(jī)的參數(shù)不會(huì)更新(陳舊的,staled)。

為了允許具有陳舊梯度的參數(shù),標(biāo)志ignore_stale_grad=True在step函數(shù)d2l.train_batch_ch13中被設(shè)置。我們通過該函數(shù)使用SNLI的訓(xùn)練集(train_iter)和測(cè)試集(test_iter)對(duì)net模型進(jìn)行訓(xùn)練和評(píng)估。由于計(jì)算資源有限,訓(xùn)練和測(cè)試精度可以進(jìn)一步提高:我們把對(duì)它的討論留在練習(xí)中。

雖然書中這么寫,但是我并沒有找到哪里設(shè)置了ignore_stale_grad,這里應(yīng)該仍然微調(diào)了所有的參數(shù)

lr, num_epochs = 1e-4, 5
trainer = torch.optim.Adam(net.parameters(), lr=lr)
loss = nn.CrossEntropyLoss(reduction='none')
d2l.train_ch13(net, train_iter, test_iter, loss, trainer, num_epochs,devices)

在這里插入圖片描述

http://www.risenshineclean.com/news/1738.html

相關(guān)文章:

  • 上海網(wǎng)站se0優(yōu)化公司宣傳推廣方案范文
  • 網(wǎng)站建設(shè)和網(wǎng)絡(luò)推廣外包服務(wù)商seo超級(jí)外鏈發(fā)布
  • 奇米網(wǎng)怎么做網(wǎng)站百度鏈接提交收錄入口
  • 施工企業(yè)負(fù)責(zé)人帶班檢查計(jì)劃汕頭百度seo公司
  • 佛山網(wǎng)站建設(shè)公司點(diǎn)精小胡seo軟文代寫
  • 航空網(wǎng)站建設(shè)微信管理系統(tǒng)登錄
  • 如何管理好一個(gè)團(tuán)隊(duì)百度移動(dòng)端關(guān)鍵詞優(yōu)化
  • android studio模擬器運(yùn)行不出來吉林seo網(wǎng)絡(luò)推廣
  • 想做一個(gè)網(wǎng)站怎么做的上海牛巨微seo
  • 大型網(wǎng)站建設(shè)費(fèi)用整合營銷策略有哪些
  • 南寧建網(wǎng)站必薦云尚網(wǎng)絡(luò)文大俠seo博客
  • 企業(yè)站seo點(diǎn)擊軟件太原網(wǎng)絡(luò)推廣價(jià)格
  • 凡科建站免費(fèi)版可以做什么常見的網(wǎng)絡(luò)營銷方式有哪些
  • 織夢(mèng)做網(wǎng)站需要錢嗎互聯(lián)網(wǎng)推廣平臺(tái)有哪些公司
  • 佛山購物網(wǎng)站建設(shè)北京優(yōu)化網(wǎng)站建設(shè)
  • wordpress如何寫網(wǎng)站關(guān)鍵詞搜索次數(shù)查詢
  • 江油市建設(shè)局網(wǎng)站網(wǎng)頁設(shè)計(jì)模板圖片
  • 同wordpressseo怎么優(yōu)化排名
  • 網(wǎng)站建設(shè)和微站建設(shè)的區(qū)別網(wǎng)絡(luò)推廣外包哪個(gè)公司做的比較好
  • 免費(fèi)下載高清圖片素材的網(wǎng)站360營銷平臺(tái)
  • 政府網(wǎng)站建設(shè)經(jīng)驗(yàn)材料范文軟文推廣去哪個(gè)平臺(tái)好
  • 怎么做銷售網(wǎng)站周口網(wǎng)絡(luò)推廣哪家好
  • 佛山新網(wǎng)站制作市場(chǎng)網(wǎng)絡(luò)熱詞有哪些
  • 用cms做網(wǎng)站怎么樣關(guān)鍵詞優(yōu)化seo
  • .net可以做網(wǎng)站做游戲 博客園廣州線上教學(xué)
  • 手機(jī)wap網(wǎng)頁游戲廣州網(wǎng)站建設(shè)方案優(yōu)化
  • 電話銷售做網(wǎng)站推銷seo網(wǎng)站優(yōu)化軟件
  • wordpress美化文章標(biāo)題seo排名點(diǎn)擊軟件
  • win本地網(wǎng)站建設(shè)網(wǎng)絡(luò)優(yōu)化軟件
  • 做網(wǎng)站要收訂金嗎百度seo快速見效方法