做網(wǎng)站必須得ipc百度熱搜榜今日頭條排名
預(yù)訓(xùn)練模型
- 1. 預(yù)訓(xùn)練模型介紹
- 1.1. ELMo
- 1.2. GPT
- 1.3. BERT
- 2. Seq2Seq
- 2.1. T5
- 2.2. BART
- 3. Tokenization
1. 預(yù)訓(xùn)練模型介紹
在預(yù)訓(xùn)練語(yǔ)言模型出現(xiàn)之前,統(tǒng)計(jì)語(yǔ)言模型(如N-gram模型)是主流方法。這些模型利用統(tǒng)計(jì)方法來(lái)預(yù)測(cè)文本中的下一個(gè)詞,但它們對(duì)長(zhǎng)距離依賴和上下文理解能力有限。
2013年,Google提出的Word2Vec模型利用神經(jīng)網(wǎng)絡(luò)來(lái)學(xué)習(xí)詞的分布式表示(詞向量),使得相似詞在向量空間中彼此接近。這是預(yù)訓(xùn)練詞嵌入技術(shù)的開(kāi)端。斯坦福大學(xué)提出的GloVe(Global Vectors for Word Representation)模型通過(guò)結(jié)合全局詞共現(xiàn)統(tǒng)計(jì)信息來(lái)生成詞向量,進(jìn)一步提升了詞表示的質(zhì)量。
2018年,ELMo(Embeddings from Language Models)由AllenNLP團(tuán)隊(duì)提出,它通過(guò)雙向LSTM來(lái)生成上下文感知的詞表示。這標(biāo)志著從靜態(tài)詞向量到動(dòng)態(tài)上下文詞向量的轉(zhuǎn)變。2017年,Google提出的Transformer模型引入了自注意力機(jī)制,極大地提升了處理長(zhǎng)距離依賴和并行計(jì)算的能力,為后續(xù)的大規(guī)模預(yù)訓(xùn)練模型奠定了基礎(chǔ)。2018年,Google提出BERT(Bidirectional Encoder Representations from Transformers),它是首個(gè)雙向Transformer模型,能夠利用句子中所有詞的上下文信息進(jìn)行預(yù)訓(xùn)練。BERT在多項(xiàng)NLP任務(wù)中取得了顯著的效果。2018年,OpenAI提出的GPT(Generative Pre-trained Transformer)采用了單向Transformer結(jié)構(gòu),通過(guò)生成式任務(wù)進(jìn)行預(yù)訓(xùn)練。GPT-2(2019)和GPT-3(2020)進(jìn)一步擴(kuò)大了模型規(guī)模,展示了預(yù)訓(xùn)練模型在生成任務(wù)中的強(qiáng)大能力。2019,Google提出的T5(Text-To-Text Transfer Transformer)將各種NLP任務(wù)統(tǒng)一為文本到文本的格式,展示了預(yù)訓(xùn)練模型在多任務(wù)學(xué)習(xí)中的潛力。
1.1. ELMo
- 相關(guān)論文
Deep contextualized word representations
ELMo(Embeddings from Language Models)是由AllenNLP團(tuán)隊(duì)在2018年提出的一種預(yù)訓(xùn)練語(yǔ)言模型。它是首個(gè)通過(guò)上下文感知的詞嵌入來(lái)顯著提升自然語(yǔ)言處理任務(wù)性能的模型之一。
ELMo的核心思想是生成上下文感知的詞表示,這意味著同一個(gè)詞在不同的上下文中會(huì)有不同的表示。傳統(tǒng)的詞嵌入方法(如Word2Vec和GloVe)生成的是固定的詞向量,而ELMo則通過(guò)考慮句子的上下文,使得詞表示更加動(dòng)態(tài)和靈活。
ELMo的訓(xùn)練過(guò)程包括以下步驟:
- 預(yù)訓(xùn)練:ELMo在大規(guī)模語(yǔ)料庫(kù)上預(yù)訓(xùn)練雙向語(yǔ)言模型,通過(guò)最大化前向和后向語(yǔ)言模型的對(duì)數(shù)似然估計(jì)來(lái)學(xué)習(xí)參數(shù)。ELMo使用雙向LSTM(Long Short-Term Memory)作為基礎(chǔ)結(jié)構(gòu),分別從前向和后向兩個(gè)方向處理句子。前向LSTM從句子的開(kāi)頭到結(jié)尾逐詞處理,后向LSTM則從句子的結(jié)尾到開(kāi)頭逐詞處理。通過(guò)雙向LSTM,ELMo生成了每個(gè)詞在不同上下文中的表示。每個(gè)詞的最終表示是由不同層的表示加權(quán)和得到的。
- 特征提取和微調(diào):在特定任務(wù)中,預(yù)訓(xùn)練的ELMo模型可以作為特征提取器使用,生成上下文感知的詞嵌入。可以進(jìn)一步對(duì)特定任務(wù)的訓(xùn)練數(shù)據(jù)進(jìn)行微調(diào),以提升性能。
雙向語(yǔ)言模型:
p ( t 1 , t 2 , ? , t N ) = ∑ k = 1 N p ( t k ∣ t 1 , t 2 , ? , t k ? 1 ) p ( t 1 , t 2 , ? , t N ) = ∑ k = 1 N p ( t k ∣ t k + 1 , t t + 2 , ? , t N ) \begin{aligned} p(t_1, t_2, \cdots, t_N) &= \sum_{k=1}^N p(t_k | t_1, t_2, \cdots, t_{k-1}) \\ p(t_1, t_2, \cdots, t_N) &= \sum_{k=1}^N p(t_k | t_{k+1}, t_{t+2}, \cdots, t_N) \\ \end{aligned} p(t1?,t2?,?,tN?)p(t1?,t2?,?,tN?)?=k=1∑N?p(tk?∣t1?,t2?,?,tk?1?)=k=1∑N?p(tk?∣tk+1?,tt+2?,?,tN?)?
目標(biāo)函數(shù):
∑ k = 1 N ( log ? p ( t k ∣ t 1 , ? , t k ? 1 ; Θ x , Θ → L S T M , Θ s ) + log ? p ( t k ∣ t k + 1 , ? , t N ; Θ x , Θ ← L S T M , Θ s ) ) \begin{aligned} \sum_{k=1}^N \left( \log p(t_k | t_1, \cdots, t_{k-1}; \Theta_x, \overrightarrow{\Theta}_{LSTM}, \Theta_s) + \log p(t_k | t_{k+1}, \cdots, t_{N}; \Theta_x, \overleftarrow{\Theta}_{LSTM}, \Theta_s)\right) \end{aligned} k=1∑N?(logp(tk?∣t1?,?,tk?1?;Θx?,ΘLSTM?,Θs?)+logp(tk?∣tk+1?,?,tN?;Θx?,ΘLSTM?,Θs?))?
ELMo 的計(jì)算流程:
R k = { x k L M , h → k j L M , h ← k j L M ∣ j = 1 , ? , L } = { h k , j L M ∣ j = 1 , ? , L } \begin{aligned} R_k &= \{ x_k^{LM}, \overrightarrow{h}_{kj}^{LM}, \overleftarrow{h}_{kj}^{LM} | j=1, \cdots, L \} \\ &= \{ h_{k,j}^{LM} | j=1, \cdots, L \} \\ \end{aligned} Rk??={xkLM?,hkjLM?,hkjLM?∣j=1,?,L}={hk,jLM?∣j=1,?,L}?
ELMo k t a s k = E ( R k ; Θ t a s k ) = γ t a s k ∑ j = 0 L s j t a s k h k , j L M \begin{aligned} \text{ELMo}_k^{task} &= E(R_k; \Theta^{task}) = \gamma^{task} \sum_{j=0}^L s_j^{task} h_{k,j}^{LM} \end{aligned} ELMoktask??=E(Rk?;Θtask)=γtaskj=0∑L?sjtask?hk,jLM??
ELMo的優(yōu)勢(shì):
- 上下文感知:ELMo生成的詞表示能夠捕捉詞在不同上下文中的意義變化,提高了對(duì)多義詞和同義詞的處理能力。
- 動(dòng)態(tài)表示:相比于靜態(tài)詞嵌入,ELMo的詞表示是動(dòng)態(tài)的,能夠更好地適應(yīng)復(fù)雜的語(yǔ)言現(xiàn)象。
1.2. GPT
- 相關(guān)論文
Improving Language Understanding by Generative Pre-Training
GPT(Generative Pre-trained Transformer)是由OpenAI提出的一系列預(yù)訓(xùn)練語(yǔ)言模型,這些模型在自然語(yǔ)言生成和理解任務(wù)中表現(xiàn)出了卓越的能力。GPT系列包括GPT、GPT-2、GPT-3和GPT-4,每一代都在規(guī)模和性能上有顯著提升。
GPT模型的核心架構(gòu)基于Transformer的解碼器部分,專(zhuān)注于生成式任務(wù)。與BERT不同,GPT采用單向的自回歸方法,即在生成當(dāng)前詞時(shí)僅依賴于左側(cè)的上下文。GPT的預(yù)訓(xùn)練任務(wù)是語(yǔ)言建模,即通過(guò)預(yù)測(cè)序列中的下一個(gè)詞來(lái)訓(xùn)練模型。這種自回歸的方法使得GPT能夠生成連貫和上下文相關(guān)的文本。
GPT的架構(gòu)特點(diǎn)如下:
- 單向自回歸:GPT是單向的,即在生成每個(gè)詞時(shí),僅考慮它之前的詞。這使得GPT特別適合生成任務(wù),如文本生成、對(duì)話生成等。
- Transformer解碼器:GPT使用多層的Transformer解碼器,每層包括多頭自注意力機(jī)制和前饋神經(jīng)網(wǎng)絡(luò)。
GPT的訓(xùn)練分為兩個(gè)階段:
- 預(yù)訓(xùn)練:GPT使用了BooksCorpus數(shù)據(jù)集進(jìn)行預(yù)訓(xùn)練。BooksCorpus包含了約7000本未標(biāo)注的英語(yǔ)書(shū)籍,總共約8億詞。預(yù)訓(xùn)練任務(wù)是語(yǔ)言建模,即通過(guò)預(yù)測(cè)序列中的下一個(gè)詞來(lái)訓(xùn)練模型。這種自回歸方法使得模型能夠生成連貫的文本。損失函數(shù)是標(biāo)準(zhǔn)的最大似然估計(jì)(Maximum Likelihood Estimation, MLE),即最大化訓(xùn)練數(shù)據(jù)的對(duì)數(shù)似然。
- 微調(diào):在微調(diào)階段,使用特定任務(wù)的數(shù)據(jù)集。例如,對(duì)于文本分類(lèi)任務(wù),使用標(biāo)注了類(lèi)別標(biāo)簽的數(shù)據(jù)集。將任務(wù)數(shù)據(jù)轉(zhuǎn)換為適合模型輸入的格式。例如,對(duì)于分類(lèi)任務(wù),輸入格式可能是“[CLS] 文本 [SEP]”,其中[CLS]表示分類(lèi)標(biāo)記,[SEP]表示分隔符。在預(yù)訓(xùn)練模型的頂部添加一個(gè)任務(wù)特定的輸出層。例如,對(duì)于分類(lèi)任務(wù),添加一個(gè)全連接層用于預(yù)測(cè)類(lèi)別標(biāo)簽。
預(yù)訓(xùn)練階段損失函數(shù):
L 1 ( U ) = ∑ i log ? P ( u i ∣ u i ? k , ? , u i ? 1 ; Θ ) L_1(\mathcal{U}) = \sum_i \log P(u_i | u_{i-k}, \cdots, u_{i-1}; \Theta) L1?(U)=i∑?logP(ui?∣ui?k?,?,ui?1?;Θ)
GPT的前向計(jì)算過(guò)程:
h 0 = U W e + W p h l = transformer_block ( h i ? 1 ) , ? i ∈ [ 1 , n ] P ( u ) = softmax ( h n W e T ) \begin{aligned} h_0 &= U W_e + W_p \\ h_l &= \text{transformer\_block}(h_{i-1}), \forall i \in [1,n] \\ P(u) &= \text{softmax}(h_n W_e^T) \end{aligned} h0?hl?P(u)?=UWe?+Wp?=transformer_block(hi?1?),?i∈[1,n]=softmax(hn?WeT?)?
GPT微調(diào)的前向計(jì)算,需要在最后一層隱藏層再額外增加一層線性層:
P ( y ∣ x 1 , ? , x m ) = softmax ( h l m W y ) P(y|x^1, \cdots, x^m) = \text{softmax}(h_l^m W_y) P(y∣x1,?,xm)=softmax(hlm?Wy?)
微調(diào)階段損失函數(shù):
L 2 ( C ) = ∑ ( x , y ) log ? P ( y ∣ x 1 , ? , x m ) L_2(\mathcal{C}) = \sum_{(x,y)} \log P(y|x^1, \cdots, x^m) L2?(C)=(x,y)∑?logP(y∣x1,?,xm)
實(shí)驗(yàn)發(fā)現(xiàn)將語(yǔ)言建模作為模型微調(diào)的輔助目標(biāo),可以改善監(jiān)督模型的泛化能力,即在未見(jiàn)過(guò)的數(shù)據(jù)上表現(xiàn)更好,并且可以加快模型的收斂速度。即新的目標(biāo)函數(shù)集合了預(yù)訓(xùn)練和微調(diào)兩個(gè)階段的損失函數(shù):
L 3 ( C ) = L 2 ( C ) + λ L 1 ( C ) L_3(\mathcal{C}) = L_2(\mathcal{C}) + \lambda L_1(\mathcal{C}) L3?(C)=L2?(C)+λL1?(C)
GPT的優(yōu)勢(shì):
- 生成能力強(qiáng):GPT在生成連貫、上下文相關(guān)的文本方面表現(xiàn)出色。
- 適應(yīng)性強(qiáng):通過(guò)微調(diào),GPT可以適應(yīng)多種NLP任務(wù)。
- 大規(guī)模預(yù)訓(xùn)練:利用大規(guī)模預(yù)訓(xùn)練數(shù)據(jù),GPT能夠捕捉豐富的語(yǔ)言特征和模式。
GPT的限制:
- 單向性:GPT的單向自回歸方法限制了其上下文理解能力,無(wú)法像雙向模型(如BERT)那樣同時(shí)考慮詞匯的前后文。
- 規(guī)模限制:相較于后續(xù)的GPT-2和GPT-3,GPT的模型參數(shù)量和預(yù)訓(xùn)練數(shù)據(jù)規(guī)模較小,性能和生成能力有限。
1.3. BERT
- 相關(guān)論文
BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
BERT(Bidirectional Encoder Representations from Transformers)是由Google在2018年提出的一種預(yù)訓(xùn)練語(yǔ)言模型,它在自然語(yǔ)言處理任務(wù)中引入了革命性的進(jìn)步。BERT的設(shè)計(jì)使得它能夠在多種NLP任務(wù)上實(shí)現(xiàn)顯著的性能提升。
BERT的核心創(chuàng)新是其雙向Transformer架構(gòu),這使得模型可以同時(shí)考慮上下文中的前后信息,從而生成更加準(zhǔn)確和豐富的詞表示。BERT的架構(gòu)基于Transformer的編碼器部分,具體特點(diǎn)如下:
- 雙向性:與之前的單向語(yǔ)言模型(如GPT)不同,BERT是雙向的,即它在預(yù)訓(xùn)練過(guò)程中同時(shí)從左到右和從右到左讀取文本。這種雙向性使得BERT能夠更好地理解單詞的上下文。
- Transformer編碼器:BERT使用多層的Transformer編碼器(通常有BERT-Base和BERT-Large兩種配置,分別有12層和24層編碼器)。每層包含多頭自注意力機(jī)制和前饋神經(jīng)網(wǎng)絡(luò)。
BERT通過(guò)兩個(gè)主要任務(wù)進(jìn)行預(yù)訓(xùn)練:
- Masked Language Model (MLM):在輸入文本中隨機(jī)掩蓋(mask)一些詞,模型的任務(wù)是預(yù)測(cè)這些被掩蓋的詞。這種方法允許模型在訓(xùn)練過(guò)程中利用雙向上下文信息。
- Next Sentence Prediction (NSP):給定兩個(gè)句子A和B,模型需要判斷B是否是A的下一個(gè)句子。這種任務(wù)幫助模型理解句子間的關(guān)系,有利于問(wèn)答和自然語(yǔ)言推理等任務(wù)。
BERT的訓(xùn)練分為兩個(gè)階段:
- 預(yù)訓(xùn)練:在大規(guī)模無(wú)標(biāo)注語(yǔ)料庫(kù)(如Wikipedia和BooksCorpus)上進(jìn)行預(yù)訓(xùn)練,通過(guò)MLM和NSP任務(wù)學(xué)習(xí)通用的語(yǔ)言表示。
- 微調(diào):在特定任務(wù)的數(shù)據(jù)集上進(jìn)行微調(diào),只需在預(yù)訓(xùn)練模型的基礎(chǔ)上添加一個(gè)簡(jiǎn)單的分類(lèi)層,并在該任務(wù)的數(shù)據(jù)上進(jìn)行進(jìn)一步訓(xùn)練即可。
BERT的優(yōu)勢(shì):
- 雙向上下文理解:BERT能夠同時(shí)考慮詞匯的前后文信息,生成更準(zhǔn)確的詞表示。
- 通用性強(qiáng):預(yù)訓(xùn)練后,BERT可以通過(guò)微調(diào),適用于各種NLP任務(wù),包括文本分類(lèi)、命名實(shí)體識(shí)別、問(wèn)答系統(tǒng)等。
- 性能優(yōu)秀:在多個(gè)基準(zhǔn)測(cè)試(如GLUE、SQuAD等)中,BERT都取得了領(lǐng)先的性能。
BERT的影響:
- 推動(dòng)了預(yù)訓(xùn)練模型的發(fā)展:BERT的成功激勵(lì)了大量后續(xù)工作,如RoBERTa、ALBERT、DistilBERT等,它們?cè)贐ERT的基礎(chǔ)上進(jìn)行了改進(jìn)和優(yōu)化。
- 標(biāo)準(zhǔn)化微調(diào)方法:BERT展示了預(yù)訓(xùn)練-微調(diào)范式的有效性,這一方法已成為NLP模型開(kāi)發(fā)的標(biāo)準(zhǔn)流程。
2. Seq2Seq
- 相關(guān)論文
Sequence to Sequence Learning with Neural Networks
Seq2Seq(Sequence to Sequence,序列到序列)模型是一類(lèi)用于處理序列數(shù)據(jù)的模型,特別適用于需要將一個(gè)序列轉(zhuǎn)換為另一個(gè)序列的任務(wù)。該模型最初由Ilya Sutskever等人在2014年提出,廣泛應(yīng)用于機(jī)器翻譯、文本摘要、對(duì)話系統(tǒng)等領(lǐng)域。
Seq2Seq模型主要由兩個(gè)部分組成:編碼器(Encoder)和解碼器(Decoder)。
編碼器的作用是將輸入序列編碼成一個(gè)固定長(zhǎng)度的上下文向量(context vector)。編碼器通常采用RNN如LSTM或GRU。其過(guò)程如下:
- 輸入序列依次輸入到編碼器的RNN單元中。
- 每個(gè)時(shí)間步都會(huì)更新隱藏狀態(tài)。
- 最終的隱藏狀態(tài)被視為整個(gè)輸入序列的上下文向量。
解碼器的任務(wù)是根據(jù)上下文向量生成目標(biāo)序列。解碼器同樣采用RNN結(jié)構(gòu),其過(guò)程如下:
- 初始化解碼器的隱藏狀態(tài)為上下文向量。
- 解碼器在每個(gè)時(shí)間步生成一個(gè)輸出,并將該輸出作為下一個(gè)時(shí)間步的輸入。
- 直到生成結(jié)束標(biāo)志或達(dá)到預(yù)定義的序列長(zhǎng)度。
早期的Seq2Seq模型存在一個(gè)問(wèn)題,即只能依賴固定長(zhǎng)度的上下文向量,這在處理長(zhǎng)序列時(shí)效果不佳。為了解決這個(gè)問(wèn)題,Bahdanau等人在2015年引入了注意力機(jī)制。注意力機(jī)制允許解碼器在生成每個(gè)輸出時(shí),動(dòng)態(tài)地關(guān)注輸入序列的不同部分。具體來(lái)說(shuō):對(duì)于解碼器的每個(gè)時(shí)間步,計(jì)算一組注意力權(quán)重,這些權(quán)重表示當(dāng)前時(shí)間步應(yīng)關(guān)注編碼器輸出的哪些部分。使用這些權(quán)重計(jì)算一個(gè)加權(quán)和,作為當(dāng)前時(shí)間步的上下文向量。
- seq2seq模型的 pytorch 實(shí)現(xiàn)
import torch
import torch.nn as nn
import torch.optim as optim
import numpy as npclass Seq2Seq(nn.Module):def __init__(self, input_dim, output_dim, hidden_dim, n_layers):super(Seq2Seq, self).__init__()self.encoder = nn.LSTM(input_dim, hidden_dim, n_layers, batch_first=True)self.decoder = nn.LSTM(output_dim, hidden_dim, n_layers, batch_first=True)self.fc = nn.Linear(hidden_dim, output_dim)def forward(self, src, tgt):# 編碼器_, (hidden, cell) = self.encoder(src)# 解碼器outputs, _ = self.decoder(tgt, (hidden, cell))# 全連接層predictions = self.fc(outputs)return predictions# 超參數(shù)
input_dim = 10 # 輸入的特征維度
output_dim = 10 # 輸出的特征維度
hidden_dim = 16 # 隱藏層維度
n_layers = 2 # LSTM層數(shù)
seq_len = 5 # 序列長(zhǎng)度
batch_size = 2 # 批次大小# 創(chuàng)建示例數(shù)據(jù)(隨機(jī)生成)
np.random.seed(0)
torch.manual_seed(0)src_data = torch.randn(batch_size, seq_len, input_dim) # 輸入序列
tgt_data = torch.randn(batch_size, seq_len, output_dim) # 目標(biāo)序列# 打印數(shù)據(jù)形狀
print("Source data shape:", src_data.shape)
print("Target data shape:", tgt_data.shape)# 初始化模型、損失函數(shù)和優(yōu)化器
model = Seq2Seq(input_dim, output_dim, hidden_dim, n_layers)
criterion = nn.MSELoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)# 訓(xùn)練模型
n_epochs = 100
for epoch in range(n_epochs):model.train()optimizer.zero_grad()output = model(src_data, tgt_data)loss = criterion(output, tgt_data)loss.backward()optimizer.step()if (epoch + 1) % 10 == 0:print(f'Epoch [{epoch + 1}/{n_epochs}], Loss: {loss.item():.4f}')
2.1. T5
- 相關(guān)論文
Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer
T5(Text-To-Text Transfer Transformer)是由Google Research提出的一種基于Transformer架構(gòu)的預(yù)訓(xùn)練模型,旨在統(tǒng)一處理各種自然語(yǔ)言處理(NLP)任務(wù)。T5的核心理念是將所有的NLP任務(wù)都視為一個(gè)文本到文本的轉(zhuǎn)換問(wèn)題,這樣可以使用同一個(gè)模型框架處理不同的任務(wù),比如機(jī)器翻譯、文本摘要、問(wèn)答系統(tǒng)等。
T5模型的一個(gè)重要特點(diǎn)是將所有任務(wù)都轉(zhuǎn)換為文本到文本的形式。例如:
- 機(jī)器翻譯:輸入為“translate English to German: The house is wonderful.”,輸出為“Das Haus ist wunderbar.”
- 文本摘要:輸入為“summarize: The quick brown fox jumps over the lazy dog.”,輸出為“quick fox jumps over lazy dog.”
- 問(wèn)答系統(tǒng):輸入為“question: What is the capital of France? context: France’s capital is Paris.”,輸出為“Paris.”
T5基于標(biāo)準(zhǔn)的Transformer模型,采用了全連接的自注意力機(jī)制,可以高效地處理序列數(shù)據(jù)。Transformer模型包括編碼器和解碼器兩個(gè)部分,T5使用的是完整的編碼器-解碼器架構(gòu)。T5在一個(gè)名為C4(Colossal Clean Crawled Corpus)的數(shù)據(jù)集上進(jìn)行了大規(guī)模的預(yù)訓(xùn)練。C4數(shù)據(jù)集包含了從互聯(lián)網(wǎng)收集的大量文本,經(jīng)過(guò)清洗和過(guò)濾后用于模型訓(xùn)練。T5的預(yù)訓(xùn)練任務(wù)是“填空”(fill-in-the-blank),即在輸入文本中隨機(jī)遮蔽部分單詞,并讓模型預(yù)測(cè)這些被遮蔽的單詞。在預(yù)訓(xùn)練之后,T5通過(guò)多任務(wù)學(xué)習(xí)對(duì)多個(gè)下游任務(wù)進(jìn)行微調(diào)。每個(gè)任務(wù)都被轉(zhuǎn)換為文本到文本的形式,并通過(guò)統(tǒng)一的損失函數(shù)進(jìn)行優(yōu)化。
- 基于 transformers 的 t5 使用
from transformers import T5Tokenizer, T5ForConditionalGeneration# 加載T5模型和分詞器
model_name = 't5-small'
tokenizer = T5Tokenizer.from_pretrained(model_name)
model = T5ForConditionalGeneration.from_pretrained(model_name)# 輸入文本
text = "It is reported that a major fire broke out in Victoria Harbor in Hong Kong on December 12, which injured 100 people and caused 10 billion yuan in damage"# 將任務(wù)和輸入文本結(jié)合
input_text = "summarize: " + text# 編碼輸入文本
input_ids = tokenizer.encode(input_text, return_tensors='pt')# 生成摘要
summary_ids = model.generate(input_ids, max_length=50, num_beams=2, early_stopping=True)# 解碼生成的摘要
summary = tokenizer.decode(summary_ids[0], skip_special_tokens=True)print("Summary:", summary)
2.2. BART
- 相關(guān)論文
BART: Denoising Sequence-to-Sequence Pre-training for Natural Language Generation, Translation, and Comprehension
BART(Bidirectional and Auto-Regressive Transformers)是由Facebook AI Research(FAIR)提出的一種序列到序列(Seq2Seq)模型。BART結(jié)合了BERT(Bidirectional Encoder Representations from Transformers)和GPT(Generative Pre-trained Transformer)的優(yōu)點(diǎn),通過(guò)雙向編碼器和自回歸解碼器進(jìn)行預(yù)訓(xùn)練和微調(diào)。BART在文本生成任務(wù)(如文本摘要、機(jī)器翻譯和文本生成)以及其他NLP任務(wù)上表現(xiàn)出色。
BART的架構(gòu)基于標(biāo)準(zhǔn)的Transformer編碼器-解碼器架構(gòu),但它在設(shè)計(jì)上具有一些獨(dú)特之處:
- 編碼器(Encoder):BART的編碼器類(lèi)似于BERT,使用雙向注意力機(jī)制來(lái)編碼輸入序列。這意味著編碼器可以同時(shí)考慮輸入序列中每個(gè)位置的上下文信息。
- 解碼器(Decoder):BART的解碼器類(lèi)似于GPT,使用自回歸的方式生成輸出序列。這意味著解碼器在生成每個(gè)標(biāo)記時(shí),只能訪問(wèn)之前生成的標(biāo)記。
BART的預(yù)訓(xùn)練任務(wù)旨在讓模型學(xué)習(xí)如何恢復(fù)被破壞的輸入序列。具體來(lái)說(shuō),BART采用了一種“去噪自編碼器”(Denoising Autoencoder)的預(yù)訓(xùn)練方法,模型需要從損壞的輸入中恢復(fù)原始文本。預(yù)訓(xùn)練任務(wù)包括:
- 文本填空(Token Masking):隨機(jī)遮蔽輸入序列中的部分標(biāo)記,模型需要預(yù)測(cè)這些被遮蔽的標(biāo)記。
- 文本刪除(Token Deletion):隨機(jī)刪除輸入序列中的部分標(biāo)記,模型需要恢復(fù)這些被刪除的標(biāo)記。
- 句子重排序(Sentence Permutation):隨機(jī)打亂輸入序列中的句子順序,模型需要恢復(fù)正確的句子順序。
- 文本旋轉(zhuǎn)(Document Rotation):將輸入序列隨機(jī)旋轉(zhuǎn)一個(gè)位置,模型需要恢復(fù)原始順序。
- 文本替換(Text Infilling):隨機(jī)選擇若干連續(xù)的標(biāo)記并將其替換為一個(gè)特殊標(biāo)記,模型需要恢復(fù)這些被替換的標(biāo)記。
3. Tokenization
- 相關(guān)論文
Neural Machine Translation of Rare Words with Subword Units
Byte Pair Encoding is Suboptimal for Language Model Pretraining
Tokenization(分詞)是將輸入文本轉(zhuǎn)換為模型可以處理的格式的關(guān)鍵步驟。Tokenization的好壞直接影響模型的性能和效果。
Tokenization是將輸入的自然語(yǔ)言文本拆分為更小的單位(token),這些單位可以是單詞、子詞或字符等。對(duì)于大多數(shù)現(xiàn)代大模型而言,tokenization過(guò)程包括以下步驟:
- 文本規(guī)范化:將輸入文本轉(zhuǎn)換為統(tǒng)一的格式,例如將所有字符轉(zhuǎn)換為小寫(xiě)、去除多余的空格等。
- 分詞:將規(guī)范化的文本切分為一個(gè)個(gè)token。
- 編碼:將token轉(zhuǎn)換為整數(shù)索引,以便模型能夠處理。
常見(jiàn)的Tokenization方法:
- Word-level Tokenization:這種方法將文本直接分成單詞。雖然簡(jiǎn)單,但對(duì)于處理未見(jiàn)過(guò)的單詞或罕見(jiàn)單詞時(shí)效果較差。
text = "The quick brown fox jumps over the lazy dog."
tokens = text.split()
# ['The', 'quick', 'brown', 'fox', 'jumps', 'over', 'the', 'lazy', 'dog']
- Character-level Tokenization:這種方法將文本分成單個(gè)字符。這種方法可以處理所有可能的輸入,但生成的序列可能會(huì)非常長(zhǎng)。
text = "hello"
tokens = list(text)
# ['h', 'e', 'l', 'l', 'o']
- Subword Tokenization:這種方法結(jié)合了word-level和character-level tokenization的優(yōu)點(diǎn),通過(guò)將單詞拆分為更小的子詞單元來(lái)處理未見(jiàn)過(guò)的單詞。常見(jiàn)的子詞分詞方法包括:Byte Pair Encoding,WordPiece,Unigram。
BPE(Byte Pair Encoding)是一種基于頻率的子詞分詞算法。BPE通過(guò)逐步合并出現(xiàn)頻率最高的字符對(duì)來(lái)創(chuàng)建子詞單元,從而生成子詞詞典。BPE將文本拆分為子詞單元,這些子詞單元可以是字符、部分單詞或整個(gè)單詞。這種方法可以有效地處理未見(jiàn)過(guò)的詞匯,提高模型的泛化能力。BPE通過(guò)逐步合并出現(xiàn)頻率最高的字符對(duì)來(lái)生成子詞單元。每次合并后,頻率最高的字符對(duì)變成一個(gè)新的子詞單元,直到達(dá)到預(yù)定的詞匯表大小。
BPE算法步驟:
- 準(zhǔn)備包含大量文本的語(yǔ)料庫(kù)。將每個(gè)單詞初始化為其字符序列。例如,單詞 hello 會(huì)被表示為 h e l l o。
- 統(tǒng)計(jì)頻率:統(tǒng)計(jì)所有字符對(duì)的出現(xiàn)頻率。
- 選擇最高頻:選擇頻率最高的字符對(duì)進(jìn)行合并。
- 更新詞典:將合并后的新子詞加入詞典,并更新文本中的出現(xiàn)。
- 重復(fù)步驟:重復(fù)上述過(guò)程,直到達(dá)到預(yù)定的詞匯表大小或不再有頻率高的字符對(duì)。
WordPiece和BPE的流程幾乎一致,主要的區(qū)別在于,BPE每次按照出現(xiàn)頻數(shù)最高這一原則來(lái)選取pair,而WordPiece則是按照能夠最大
限度提升語(yǔ)言模型概率這一原則來(lái)選取pair。
BPE和WordPiece都是從一個(gè)小的基礎(chǔ)詞表開(kāi)始不斷去擴(kuò)充這個(gè)詞表表,而Unigram則與之相反,Unigram會(huì)先初始化一個(gè)大的詞表,然后
不斷從中刪去子詞直至詞表達(dá)到指定的大小。Unigram初始化詞表的方式有很多種,例如我們可以在預(yù)分詞的結(jié)果上應(yīng)用BPE算法并設(shè)置較大的merges以獲得初始詞表,或者計(jì)算預(yù)分詞結(jié)果的所有嚴(yán)格子串并從中選取一些出現(xiàn)頻率最高的子串作為初始詞表。
SentencePiece是一個(gè)通用的文本分詞和子詞化庫(kù),它結(jié)合了BPE和WordPiece的優(yōu)點(diǎn),并支持多種分詞算法。SentencePiece可以根據(jù)任務(wù)需求選擇合適的分詞方法,包括BPE、Unigram等。它提供了一個(gè)統(tǒng)一的接口,使得使用不同的分詞方法變得更加方便和靈活。SentencePiece還支持自定義的標(biāo)記化規(guī)則和訓(xùn)練參數(shù),可以適應(yīng)各種語(yǔ)言和文本類(lèi)型的需求。
模型的tokenization過(guò)程通常包括一些特殊token,用于處理特定任務(wù)和文本邊界:
- [CLS]:用于表示整個(gè)序列的特殊標(biāo)記(例如在BERT中用于分類(lèi)任務(wù))。
- [SEP]:用于分隔兩個(gè)句子的特殊標(biāo)記(例如在BERT的下一句預(yù)測(cè)任務(wù)中)。
- [PAD]:用于填充短于最大長(zhǎng)度的序列,以保持批處理的一致性。
- [MASK]:用于掩蓋某些tokens以進(jìn)行掩碼語(yǔ)言模型訓(xùn)練(例如在BERT中)。
- 基于 transformers 實(shí)現(xiàn) BERT 的 tokenization 過(guò)程
from transformers import BertTokenizer# 加載BERT分詞器
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')# 輸入文本
text = "The quick brown fox jumps over the lazy dog."# 分詞
tokens = tokenizer.tokenize(text)
print(tokens)
# ['the', 'quick', 'brown', 'fox', 'jumps', 'over', 'the', 'lazy', 'dog', '.']# 編碼
input_ids = tokenizer.encode(text, add_special_tokens=True)
print(input_ids)
# [101, 1996, 4248, 2829, 4419, 2169, 2058, 1996, 13971, 3899, 1012, 102]