本篇文章為大家展示了BERT中怎么實(shí)現(xiàn)嵌入層,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。
成都創(chuàng)新互聯(lián)是一家專業(yè)提供清鎮(zhèn)企業(yè)網(wǎng)站建設(shè),專注與成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)、HTML5、小程序制作等業(yè)務(wù)。10年已為清鎮(zhèn)眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)的建站公司優(yōu)惠進(jìn)行中。
Token嵌入
如前一節(jié)所述,token嵌入層的作用是將單詞轉(zhuǎn)換為固定維的向量表示形式。在BERT的例子中,每個(gè)單詞都表示為一個(gè)768維的向量。
假設(shè)輸入文本是“I like strawberries”。下圖描述了token嵌入層的作用:
在將輸入文本傳遞到token嵌入層之前,首先對(duì)其進(jìn)行token化。另外,在tokens的開(kāi)始([CLS])和結(jié)束([SEP])處添加額外的tokens。這些tokens的目的是作為分類任務(wù)的輸入表示,并分別分隔一對(duì)輸入文本(更多細(xì)節(jié)將在下一節(jié)中介紹)。
tokens化是使用一種叫做WordPiece token化的方法來(lái)完成的。這是一種數(shù)據(jù)驅(qū)動(dòng)的token化方法,旨在實(shí)現(xiàn)詞匯量和非詞匯量之間的平衡。這就是“strawberries”被分成“straw”和“berries”的方式。對(duì)這種方法的詳細(xì)描述超出了本文的范圍。感興趣的讀者可以參考Wu et al. (2016)和Schuster & Nakajima (2012)中的第4.1節(jié)。單詞token化的使用使得BERT只能在其詞匯表中存儲(chǔ)30522個(gè)“詞”,而且在對(duì)英語(yǔ)文本進(jìn)行token化時(shí),很少會(huì)遇到詞匯表以外的單詞。
token嵌入層將每個(gè)wordpiece token轉(zhuǎn)換為768維向量表示形式。這將使得我們的6個(gè)輸入token被轉(zhuǎn)換成一個(gè)形狀為(6,768)的矩陣,或者一個(gè)形狀為(1,6,768)的張量,如果我們包括批處理維度的話。
BERT能夠解決包含文本分類的NLP任務(wù)。這類問(wèn)題的一個(gè)例子是對(duì)兩個(gè)文本在語(yǔ)義上是否相似進(jìn)行分類。這對(duì)輸入文本被簡(jiǎn)單地連接并輸入到模型中。那么BERT是如何區(qū)分輸入的呢?答案是Segment嵌入。
假設(shè)我們的輸入文本對(duì)是(“I like cats”, “I like dogs”)。下面是Segment嵌入如何幫助BERT區(qū)分這個(gè)輸入對(duì)中的tokens :
Segment嵌入層只有兩個(gè)向量表示。第一個(gè)向量(索引0)分配給屬于輸入1的所有tokens,而最后一個(gè)向量(索引1)分配給屬于輸入2的所有tokens。如果一個(gè)輸入只有一個(gè)輸入語(yǔ)句,那么它的Segment嵌入就是對(duì)應(yīng)于Segment嵌入表的索引為0的向量。
BERT由一堆Transformers 組成的,廣義地說(shuō),Transformers不編碼其輸入的順序特征。在這個(gè)博客文章:https://medium.com/@init/how-self-attention-with-relatedposition-representations-works-28173b8c245a的動(dòng)機(jī)部分更詳細(xì)地解釋了我的意思??傊?,有Position嵌入將允許BERT理解給定的輸入文本,比如:
I think, therefore I am
第一個(gè)“I”不應(yīng)該與第二個(gè)“I”具有相同的向量表示。
BERT被設(shè)計(jì)用來(lái)處理長(zhǎng)度為512的輸入序列。作者通過(guò)讓BERT學(xué)習(xí)每個(gè)位置的向量表示來(lái)包含輸入序列的順序特征。這意味著Position嵌入層是一個(gè)大小為(512,768)的查找表,其中第一行是第一個(gè)位置上的任意單詞的向量表示,第二行是第二個(gè)位置上的任意單詞的向量表示,等等。因此,如果我們輸入“Hello world”和“Hi there”,“Hello”和“Hi”將具有相同的Position嵌入,因?yàn)樗鼈兪禽斎胄蛄兄械牡谝粋€(gè)單詞。同樣,“world”和“there”的Position嵌入是相同的。
我們已經(jīng)看到,長(zhǎng)度為n的token化輸入序列將有三種不同的表示,即:
對(duì)這些表示進(jìn)行元素求和,生成一個(gè)形狀為(1,n, 768)的單一表示。這是傳遞給BERT的編碼器層的輸入表示。
上述內(nèi)容就是BERT中怎么實(shí)現(xiàn)嵌入層,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。