本文的標(biāo)題是《詞向量詳解:從word2vec、glove、ELMo到BERT》來(lái)源于:由作者:陳楚楚采編而成,主要講述了目前,詞向量(又叫詞嵌入)已經(jīng)成為NLP領(lǐng)域各種任務(wù)的必備一步,而且隨著bert
目前,詞向量(又叫詞嵌入)已經(jīng)成為NLP領(lǐng)域各種任務(wù)的必備一步,而且隨著bert elmo,gpt等預(yù)訓(xùn)練模型的發(fā)展,詞向量演變?yōu)橹R(shí)表示方法,但其本質(zhì)思想不變。學(xué)習(xí)各種詞向量訓(xùn)練原理可以很好地掌握NLP各種方法。生成詞向量的方法有很多種,本文重點(diǎn)介紹word2vec,glove和bert。
各種詞向量的特點(diǎn):
- One-hot:維度災(zāi)難 and 語(yǔ)義鴻溝
- 矩陣分解(LSA):利用全局語(yǔ)料特征,但SVD求解計(jì)算復(fù)雜度大
- 基于NNLM/RNNLM的詞向量:詞向量為副產(chǎn)物,存在效率不高等問(wèn)題
- word2vec、fastText:優(yōu)化效率高,但是基于局部語(yǔ)料
- glove:基于全局預(yù)料,結(jié)合了LSA和word2vec的優(yōu)點(diǎn)
- elmo、GPT、bert:動(dòng)態(tài)特征
從one-hot到word2vec到elmo,可以看到技術(shù)的演進(jìn)總是在現(xiàn)有基礎(chǔ)上解決之前的問(wèn)題,同時(shí)引出新的問(wèn)題。這里總結(jié)一下比較經(jīng)典的語(yǔ)言模型:word2vec、glove、ELMo、BERT。
word2vec
word2vec來(lái)源于2013年的論文《Efficient Estimation of Word Representation in Vector Space》,它的核心思想是利用神經(jīng)網(wǎng)絡(luò)對(duì)詞的上下文訓(xùn)練得到詞的向量化表示,訓(xùn)練方法:CBOW(通過(guò)附近詞預(yù)測(cè)中心詞)、Skip-gram(通過(guò)中心詞預(yù)測(cè)附近的詞):
CBOW與Skip-gram基本結(jié)構(gòu)
- CBOW :
NOTE:花括號(hào)內(nèi){}為解釋內(nèi)容.
1.輸入層:上下文單詞的onehot. {假設(shè)單詞向量空間dim為V,上下文單詞個(gè)數(shù)為C}
2.所有onehot分別乘以共享的輸入權(quán)重矩陣W. {V*N矩陣,N為自己設(shè)定的數(shù),初始化權(quán)重矩陣W}
3.所得的向量 {因?yàn)槭莖nehot所以為向量} 相加求平均作為隱層向量, size為1*N.
4.乘以輸出權(quán)重矩陣W’ {N*V}
5.得到向量 {1*V} 激活函數(shù)處理得到V-dim概率分布 {PS: 因?yàn)槭莖nehot嘛,其中的每一維斗代表著一個(gè)單詞},概率最大的index所指示的單詞為預(yù)測(cè)出的中間詞(target word)
6.與true label的onehot做比較,誤差越小越好
所以,需要定義loss function(一般為交叉熵代價(jià)函數(shù)),采用梯度下降算法更新W和W’。訓(xùn)練完畢后,輸入層的每個(gè)單詞與矩陣W相乘得到的向量的就是我們想要的詞向量(word embedding),這個(gè)矩陣(所有單詞的word embedding)也叫做look up table(其實(shí)聰明的你已經(jīng)看出來(lái)了,其實(shí)這個(gè)look up table就是矩陣W自身),也就是說(shuō),任何一個(gè)單詞的onehot乘以這個(gè)矩陣都將得到自己的詞向量。有了look up table就可以免去訓(xùn)練過(guò)程直接查表得到單詞的詞向量了。
- Skip-gram :
跟CBOW的原理相似,它的輸入是目標(biāo)詞,先是將目標(biāo)詞映射為一個(gè)隱藏層向量,根據(jù)這個(gè)向量預(yù)測(cè)目標(biāo)詞上下文兩個(gè)詞,因?yàn)樵~匯表大和樣本不均衡,同樣也會(huì)采用多層softmax或負(fù)采樣優(yōu)化。
- 分層softmax
一般神經(jīng)網(wǎng)絡(luò)語(yǔ)言模型在預(yù)測(cè)的時(shí)候,輸出的是預(yù)測(cè)目標(biāo)詞的概率,也就是說(shuō)我每一次預(yù)測(cè)都要基于全部的數(shù)據(jù)集進(jìn)行計(jì)算,這無(wú)疑會(huì)帶來(lái)很大的時(shí)間開(kāi)銷。不同于其他神經(jīng)網(wǎng)絡(luò),word2vec提出兩種加快訓(xùn)練速度的方式,一種是Hierarchical softmax,另一種是Negative Sampling。
原始神經(jīng)網(wǎng)絡(luò)模型的輸入輸出框架
word2vec hierarchical softmax結(jié)構(gòu)
和傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)輸出不同的是,word2vec的hierarchical softmax結(jié)構(gòu)是把輸出層改成了一顆哈夫曼樹(shù),其中圖中白色的葉子節(jié)點(diǎn)表示詞匯表中所有的|V|個(gè)詞,黑色節(jié)點(diǎn)表示非葉子節(jié)點(diǎn),每一個(gè)葉子節(jié)點(diǎn)也就是每一個(gè)單詞,都對(duì)應(yīng)唯一的一條從root節(jié)點(diǎn)出發(fā)的路徑。我們的目的是使得w=wO這條路徑的概率最大,即: P(w=wO|wI)最大,假設(shè)最后輸出的條件概率是W2最大,那么我只需要去更新從根結(jié)點(diǎn)到w2這一個(gè)葉子結(jié)點(diǎn)的路徑上面節(jié)點(diǎn)的向量即可,而不需要更新所有的詞的出現(xiàn)概率,這樣大大的縮小了模型訓(xùn)練更新的時(shí)間。
我們應(yīng)該如何得到某個(gè)葉子結(jié)點(diǎn)的概率呢?
假設(shè)我們要計(jì)算W2葉子節(jié)點(diǎn)的概率,我們需要從根節(jié)點(diǎn)到葉子結(jié)點(diǎn)計(jì)算概率的乘積。我們知道,本模型替代的只是原始模型的softmax層,因此,某個(gè)非葉子節(jié)點(diǎn)的值即隱藏層到輸出層的結(jié)果仍然是uj,我們對(duì)這個(gè)結(jié)果進(jìn)行sigmoid之后,得到節(jié)點(diǎn)往左子樹(shù)走的概率p,1-p則為往右子樹(shù)走的概率。關(guān)于這棵樹(shù)的訓(xùn)練方式比較復(fù)雜,但也是通過(guò)梯度下降等方法,這里不詳述,感興趣的可以閱讀論文word2vec Parameter Learning Explained。
~~~
(2)、Negative Sampling 負(fù)采樣
傳統(tǒng)神經(jīng)網(wǎng)絡(luò)在訓(xùn)練過(guò)程中的每一步,都需要計(jì)算詞庫(kù)中其他詞在當(dāng)前的上下文環(huán)境下出現(xiàn)的概率值,這導(dǎo)致計(jì)算量十分巨大。
然而,對(duì)于word2vec中的特征學(xué)習(xí),可以不需要一個(gè)完整的概率模型。CBOW和Skip-Gram模型在輸出端使用的是一個(gè)二分類器(即Logistic Regression),來(lái)區(qū)分目標(biāo)詞和詞庫(kù)中其他的 k個(gè)詞(也就是把目標(biāo)詞作為一類,其他詞作為另一類)。下面是一個(gè)CBOW模型的圖示,對(duì)于Skip-Gram模型輸入輸出是倒置的。
此時(shí),最大化的目標(biāo)函數(shù)如下:
其中,Qθ(D=1|w,h)為二元邏輯回歸的概率,具體為在數(shù)據(jù)集 D中、輸入的embedding vector θ、上下文為 h的情況下詞語(yǔ) w 出現(xiàn)的概率;公式后半部分為 k 個(gè)從 [噪聲數(shù)據(jù)集] 中隨機(jī)選擇 kk個(gè)對(duì)立的詞語(yǔ)出現(xiàn)概率(log形式)的期望值??梢钥闯觯繕?biāo)函數(shù)的意義是顯然的,即盡可能的 [分配(assign)] 高概率給真實(shí)的目標(biāo)詞,而低概率給其他 k 個(gè) [噪聲詞],這種技術(shù)稱為負(fù)采樣(Negative Sampling)。
這種想法來(lái)源于噪聲對(duì)比評(píng)估方法(NEC),大致思想是:假設(shè)X=(x1,x2,?,xTd)是從真實(shí)的數(shù)據(jù)(或語(yǔ)料庫(kù))中抽取樣本,但是樣本服從什么樣的分布我們不知道,那么先假設(shè)其中的每個(gè)xi服從一個(gè)未知的概率密度函數(shù)pd。這樣我們需要一個(gè)相對(duì)可參考的分布反過(guò)來(lái)去估計(jì)概率密度函數(shù)pd,這個(gè)可參考的分布或稱之為噪音分布應(yīng)該是我們知道的,比如高斯分布,均勻分布等。假設(shè)這個(gè)噪音分布的概率密度函數(shù)pn,從中抽取樣本數(shù)據(jù)為Y=(y1,y2,?,yTn)Y=(y1,y2,?,yTn),而這個(gè)數(shù)據(jù)稱之為噪聲樣本,我們的目的就是通過(guò)學(xué)習(xí)一個(gè)分類器把這兩類樣本區(qū)別開(kāi)來(lái),并能從模型中學(xué)到數(shù)據(jù)的屬性,噪音對(duì)比估計(jì)的思想就是“通過(guò)比較而學(xué)習(xí)”。
具體來(lái)說(shuō),word2vec里面的負(fù)采樣:將輸出層的V個(gè)樣本分為正例(Positive Sample)也就是目標(biāo)詞對(duì)應(yīng)的項(xiàng),以及剩余V?1個(gè)負(fù)例(Negative Samples)。舉個(gè)例子有個(gè)樣本phone
number,這樣wI=phone,wO=number, 正例就是number這個(gè)詞,負(fù)例就是不太可能與phone共同出現(xiàn)的詞。負(fù)采樣的思想是每次訓(xùn)練只隨機(jī)取一小部分的負(fù)例使他們的概率最小,以及對(duì)應(yīng)的正例概率最大。隨機(jī)采樣需要假定一個(gè)概率分布,word2vec中直接使用詞頻作為詞的分布,不同的是頻數(shù)上乘上0.75,相比于直接使用頻次作為權(quán)重,取0.75冪的好處可以減弱不同頻次差異過(guò)大帶來(lái)的影響,使得小頻次的單詞被采樣的概率變大。
采樣權(quán)重
負(fù)采樣定義的損失函數(shù)如下:
損失函數(shù),一部分是正樣本(期望輸出的詞),另一部分是負(fù)采樣隨機(jī)抽取出來(lái)的負(fù)樣本**,V’wo是輸出向量
如果大家理解的還不是很深的話,接下來(lái)將通過(guò)谷歌發(fā)布的tensorflow官方word2vec代碼解析加深理解。代碼鏈接:https://github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/tutorials/word2vec/word2vec_basic.py,之后我會(huì)對(duì)代碼進(jìn)行詳細(xì)剖析,歡迎跟蹤~謝謝
glove
word2vec只考慮到了詞的局部信息,沒(méi)有考慮到詞與局部窗口外詞的聯(lián)系,glove利用共現(xiàn)矩陣,同時(shí)考慮了局部信息和整體的信息。Count-based模型,如GloVe,本質(zhì)上是對(duì)共現(xiàn)矩陣進(jìn)行降維。首先,構(gòu)建一個(gè)詞匯的共現(xiàn)矩陣,每一行是一個(gè)word,每一列是context。共現(xiàn)矩陣就是計(jì)算每個(gè)word在每個(gè)context出現(xiàn)的頻率。由于context是多種詞匯的組合,其維度非常大,我們希望像network embedding一樣,在context的維度上降維,學(xué)習(xí)word的低維表示。這一過(guò)程可以視為共現(xiàn)矩陣的重構(gòu)問(wèn)題,即reconstruction loss。(這里再插一句,降維或者重構(gòu)的本質(zhì)是什么?我們選擇留下某個(gè)維度和丟掉某個(gè)維度的標(biāo)準(zhǔn)是什么?Find the lower-dimensional representations which can explain most of the variance in the high-dimensional data,這其實(shí)也是PCA的原理)。
來(lái)自論文《Glove: Global vectors for word representation》。Glove損失函數(shù)的確定
ELMO
之前介紹詞向量均是靜態(tài)的詞向量,無(wú)法解決一次多義等問(wèn)題。下面介紹三種elmo、GPT、bert詞向量,它們都是基于語(yǔ)言模型的動(dòng)態(tài)詞向量。下面從幾個(gè)方面對(duì)這三者進(jìn)行對(duì)比:
ELMO是“Embedding from Language Models”簡(jiǎn)稱。在此之前word embedding本質(zhì)是個(gè)靜態(tài)方式,靜態(tài)的意思就是說(shuō)單詞訓(xùn)練好之后就固定了,在以后使用時(shí),單詞不會(huì)跟著上下文場(chǎng)景變化而變化。如Jobs is the CEO of apple,he finally eat an apple.用word2vec “apple”的表示是一樣的向量,動(dòng)態(tài)模型可以解決此問(wèn)題。
ELMO的本質(zhì)思想是:事先用一個(gè)語(yǔ)言模型去學(xué)習(xí)單詞的word embedding, 當(dāng)在使用時(shí),單詞已經(jīng)具備了特定的上下文,這時(shí)候可以根據(jù)上下文的語(yǔ)義去調(diào)整單詞的word embedding, 這樣經(jīng)過(guò)調(diào)整的word embedding更能表達(dá)這個(gè)上下文中具體的含義,也就解決了一詞多義問(wèn)題,故ELMO本質(zhì)就是根據(jù)當(dāng)前上下文對(duì)Word Embedding進(jìn)行動(dòng)態(tài)調(diào)整的過(guò)程。
Elmo采用典型的兩階段過(guò)程:第一階段使用預(yù)訓(xùn)練語(yǔ)言模型進(jìn)行訓(xùn)練,第二階段當(dāng)做具體的下游任務(wù)時(shí),從預(yù)訓(xùn)練的網(wǎng)絡(luò)中提取對(duì)應(yīng)的詞的Word Embedding作為特征補(bǔ)充到下游任務(wù)中。
第一階段,預(yù)訓(xùn)練:采用雙層雙向LSTM對(duì)上下文進(jìn)行編碼,上下文使用靜態(tài)的word embedding, 對(duì)每層LSTM,將上文向量與下文向量進(jìn)行拼接作為當(dāng)前向量,利用大量的預(yù)料訓(xùn)練這個(gè)網(wǎng)絡(luò)。對(duì)于一個(gè)新的句子,可以有三種表示,最底層的word embedding, 第一層的雙向LSTM層的輸出,這一層能學(xué)習(xí)到更多句法特征,第二層的雙向LSTM的輸出,這一層能學(xué)習(xí)到更多詞義特征。經(jīng)過(guò)elmo訓(xùn)練,不僅能夠得到word embedding, 又能學(xué)習(xí)到一個(gè)雙層雙向的神經(jīng)網(wǎng)絡(luò)。
第二階段,下游任務(wù)使用:將一個(gè)新的句子作為elmo預(yù)訓(xùn)練網(wǎng)絡(luò)的輸入,這樣該句子在elmo網(wǎng)絡(luò)中能獲得三個(gè)embedding, 可以將三個(gè)embedding加權(quán)作為word embedding, 并將此作為下游任務(wù)的輸入,這被稱為“Feature-based Pre-Training”。
GPT
GPT是Generative Pre-Traxining的簡(jiǎn)稱。與ELMO相似,采用兩階段的模式:利用語(yǔ)言模型進(jìn)行預(yù)訓(xùn)練,通過(guò)fine-tuning模式應(yīng)用到下游任務(wù)。
利用語(yǔ)言模型進(jìn)行預(yù)訓(xùn)練:與elmo不同的是,GPT使用transformer進(jìn)行提取特征,并且是單向的transformer,只是根據(jù)上文來(lái)預(yù)測(cè)某個(gè)詞,Transformer模型主要是利用自注意力(self-attention)機(jī)制的模型。
fine-tuning: 與ELMo當(dāng)成特征的做法不同,OpenAI GPT不需要再重新對(duì)任務(wù)構(gòu)建新的模型結(jié)構(gòu),而是直接在transformer這個(gè)語(yǔ)言模型上的最后一層接上softmax作為任務(wù)輸出層,然后再對(duì)這整個(gè)模型進(jìn)行微調(diào)。
由于不同NLP任務(wù)的輸入有所不同,在transformer模型的輸入上針對(duì)不同NLP任務(wù)也有所不同。具體如下圖,對(duì)于分類任務(wù)直接講文本輸入即可;對(duì)于文本蘊(yùn)涵任務(wù),需要將前提和假設(shè)用一個(gè)Delim分割向量拼接后進(jìn)行輸入;對(duì)于文本相似度任務(wù),在兩個(gè)方向上都使用Delim拼接后,進(jìn)行輸入;對(duì)于像問(wèn)答多選擇的任務(wù),就是將每個(gè)**和上下文進(jìn)行拼接進(jìn)行輸入。
BERTx
BERT是“Bidirectional Encoder Representations from Transformers”的簡(jiǎn)稱。
同GPT采用兩階段模式:利用雙向transformer語(yǔ)言模型進(jìn)行預(yù)訓(xùn)練,通過(guò)fine-tuning模式解決下游任務(wù)。
BERT創(chuàng)新: Masked語(yǔ)言模型和Next Sentence Prediction。
BERT(Bidirectional Encoder Representations from Transformers)詳解(參考鏈接:https://plm**ile.github.io/2018/12/15/52-bert/
http://fancyerii.github.io/2019/03/09/bert-theory/#elmo):
1.總體框架:利用半監(jiān)督學(xué)習(xí)一個(gè)雙向語(yǔ)言模型,然后在下游任務(wù)中,經(jīng)過(guò)該語(yǔ)言模型后,接其他任務(wù)。
2. BERT輸入表示(如圖):
句子開(kāi)頭有一個(gè)特殊的Token [CLS]句子結(jié)束有一個(gè)特殊的Token [SEP]如果是兩個(gè)句子同時(shí)輸入,則只有開(kāi)頭有[CLS],后面那個(gè)句子沒(méi)有[CLS],只有[SEP]每個(gè)token有三個(gè)embedding,詞的Embedding;位置的Embedding和Segment的Embedding詞embedding不用多說(shuō),位置embedding是將位置用低維稠密向量表示,segment的embedding是為了將多個(gè)句子區(qū)分,第一個(gè)句子可能用0表示,第二個(gè)用1,只有一個(gè)句子的時(shí)候可能只用0第一個(gè)token很有用,可不能小瞧,因?yàn)樗旧頉](méi)有任何意義,在進(jìn)行self-attention時(shí),會(huì)獲取下文所有信息(編碼整個(gè)句子的語(yǔ)義),不像其他單詞,在self-attention時(shí)獲取最多的信息是來(lái)自于自己。注意這里的分詞會(huì)把”playing”分成”play”和”##ing”兩個(gè)Token,這種把詞分成更細(xì)粒度的Word Piece的方法是一種解決未登錄詞的常見(jiàn)辦法
3. BERT預(yù)訓(xùn)練(至關(guān)重要的兩點(diǎn)):
- Mask language model:遮掩語(yǔ)言模型Next Sentence Prediction:預(yù)測(cè)下一個(gè)句子(關(guān)系)
4. Mask language model(遮掩語(yǔ)言模型):在預(yù)訓(xùn)練的時(shí)候,隨機(jī)mask掉15%的單詞,讓語(yǔ)言模型去預(yù)測(cè)這個(gè)單詞,如圖(圖中512是padding,規(guī)定了句子的長(zhǎng)度):
這樣的話有兩個(gè)缺點(diǎn):
- 大量mask標(biāo)記,造成預(yù)訓(xùn)練和finetune時(shí)候的差距,因?yàn)閒inetune沒(méi)有mask,finetune的時(shí)候用的是自己的數(shù)據(jù)集收斂很慢,但是效果好(比單向語(yǔ)言模型慢)
關(guān)于第一條的解決方案:
- 80%的概率替換成[MASK],比如my dog is hairy → my dog is [MASK]10%的概率替換成隨機(jī)的一個(gè)詞,比如my dog is hairy → my dog is apple10%的概率替換成它本身,比如my dog is hairy → my dog is hairy這樣的好處在于:BERT并不知道[MASK]替換的是哪一個(gè)詞,而且任何一個(gè)詞都有可能是被替換掉的,比如它看到的apple可能是被替換的詞。這樣強(qiáng)迫模型在編碼當(dāng)前時(shí)刻的時(shí)候不能太依賴于當(dāng)前的詞,而要考慮它的上下文,甚至更加上下文進(jìn)行”糾錯(cuò)”。比如上面的例子模型在編碼apple是根據(jù)上下文my dog is應(yīng)該把a(bǔ)pple(部分)編碼成hairy的語(yǔ)義而不是apple的語(yǔ)義。
5. Next Sentence Prediction(預(yù)測(cè)下一個(gè)句子):對(duì)于像QA、NLI等需要理解多個(gè)句子之間關(guān)系的下游任務(wù),只靠語(yǔ)言模型是不夠的。還需要提前學(xué)習(xí)到句子之間的關(guān)系。是一個(gè)二分類任務(wù)。輸入是A和B兩個(gè)句子,標(biāo)記是IsNext或NotNext,用來(lái)判斷B是否是A后面的句子。這樣,就能從大規(guī)模預(yù)料中學(xué)習(xí)到一些句間關(guān)系。
- 對(duì)于這個(gè)任務(wù),BERT會(huì)以50%的概率抽取有關(guān)聯(lián)的句子(注意這里的句子實(shí)際只是聯(lián)系的Token序列,不是語(yǔ)言學(xué)意義上的句子),另外以50%的概率隨機(jī)抽取兩個(gè)無(wú)關(guān)的句子,然后讓BERT模型來(lái)判斷這兩個(gè)句子是否相關(guān)。
6. 下游特定任務(wù):
- 單句子分類(CLS+句子):
輸入是一個(gè)序列,所有的Token都是屬于同一個(gè)Segment(Id=0),我們用第一個(gè)特殊Token [CLS]的最后一層輸出接上softmax進(jìn)行分類,用分類的數(shù)據(jù)來(lái)進(jìn)行Fine-Tuning。利用CLS進(jìn)行分類。
- 多句子分類(CLS+句子A+SEP+句子B):
對(duì)于相似度計(jì)算等輸入為兩個(gè)序列的任務(wù),過(guò)程如圖左上所示。兩個(gè)序列的Token對(duì)應(yīng)不同的Segment(Id=0/1)。我們也是用第一個(gè)特殊Token [CLS]的最后一層輸出接上softmax進(jìn)行分類,然后用分類數(shù)據(jù)進(jìn)行Fine-Tuning。利用CLS分類。
- NER(CLS+句子):序列標(biāo)注,比如命名實(shí)體識(shí)別,輸入是一個(gè)句子(Token序列),除了[CLS]和[SEP]的每個(gè)時(shí)刻都會(huì)有輸出的Tag,然后用輸出的Tag來(lái)進(jìn)行Fine-Tuning利用句子單詞做標(biāo)記。QA:CLS+問(wèn)題+SEP+文章。比較麻煩,比如比如SQuAD v1.1數(shù)據(jù)集,輸入是一個(gè)問(wèn)題和一段很長(zhǎng)的包含**的文字(Paragraph),輸出在這段文字里找到問(wèn)題的**。
比如輸入的問(wèn)題是:
Where do water droplets collide with ice crystals to form precipitation?
包含**的文字是:
… Precipitation forms as **aller droplets coalesce via collision with other raindrops or ice crystals within a cloud. …
**是:
”within a cloud”
我們首先把問(wèn)題和Paragraph表示成一個(gè)長(zhǎng)的序列,中間用[SEP]分開(kāi),問(wèn)題對(duì)應(yīng)一個(gè)Segment(id=0),包含**的文字對(duì)于另一個(gè)Segment(id=1)。這里有一個(gè)假設(shè),那就是**是Paragraph里的一段連續(xù)的文字(Span)。BERT把尋找**的問(wèn)題轉(zhuǎn)化成尋找這個(gè)Span的開(kāi)始下標(biāo)和結(jié)束下標(biāo)的問(wèn)題。
對(duì)于Paragraph的第i個(gè)Token,BERT的最后一層把它編碼成Ti,然后我們用一個(gè)向量S(這是模型的參數(shù),需要根據(jù)訓(xùn)練數(shù)據(jù)調(diào)整)和它相乘(內(nèi)積)計(jì)算它是開(kāi)始位置的得分,因?yàn)镻aragraph的每一個(gè)Token(當(dāng)然WordPiece的中間,比如##ing是不可能是開(kāi)始的)都有可能是開(kāi)始可能,我們用softmax把它變成概率,然后選擇概率最大的作為**的開(kāi)始:
類似的有一個(gè)向量T,用于計(jì)算**結(jié)束的位置。
總結(jié)
word2vec: nlp中最早的預(yù)訓(xùn)練模型,缺點(diǎn)是無(wú)法解決一詞多義問(wèn)題.
ELMO:
優(yōu)點(diǎn): 根據(jù)上下文動(dòng)態(tài)調(diào)整word embedding,因?yàn)榭梢越鉀Q一詞多義問(wèn)題;
缺點(diǎn):1、使用LSTM特征抽取方式而不是transformer,2、使用向量拼接方式融合上下文特征融合能力較弱,偽雙向。
GPT:.
優(yōu)點(diǎn):使用transformer提取特征
缺點(diǎn):使用單項(xiàng)的語(yǔ)言模型,即單向transformer.
BERT: 優(yōu)點(diǎn):使用雙向語(yǔ)言模型,即使用雙向transformer;使用預(yù)測(cè)目標(biāo)詞和下一句這中多任務(wù)學(xué)習(xí)方式進(jìn)行訓(xùn)練。
缺點(diǎn):對(duì)文本字?jǐn)?shù)512限制,不利于文本生成。
參考:
https://zhuanlan.zhihu.com/p/35074402
https://www.zhihu.com/question/44832436/answer/266068967
https://zhuanlan.zhihu.com/p/53425736
https://www.cnblogs.com/robert-dlut/p/9824346.html
本文原作者為陳楚楚,轉(zhuǎn)載請(qǐng)注明:出處!如該文有不妥之處,請(qǐng)聯(lián)系站長(zhǎng)刪除,謝謝合作~
原創(chuàng)文章,作者:陳楚楚,如若轉(zhuǎn)載,請(qǐng)注明出處:http://m.uuuxu.com/20220512316510.html