LLM背后的基礎(chǔ)模型6:一文入門(mén)Embeddings 原創(chuàng)
Embeddings
Embeddings會(huì)分為兩個(gè)章節(jié),前部分主要還是放在常規(guī)方法總結(jié),后者主要放在神經(jīng)網(wǎng)絡(luò)技術(shù)。其實(shí)這個(gè)英文單詞不難理解,就是將對(duì)象用數(shù)字標(biāo)識(shí)描述。其實(shí)一直糾結(jié)是否要講述這個(gè)話(huà)題,因?yàn)榭缮羁蓽\。
若要用一句話(huà)概括,就是給輸入分配一個(gè)數(shù)字標(biāo)識(shí),可以是一個(gè)整數(shù)數(shù)值也可以是一個(gè)向量。不過(guò)最重要的目的是在模型訓(xùn)練的過(guò)程中能夠高效且有效的學(xué)習(xí)參數(shù)。
這里需要解釋下向量,例如apple可以使用三維的向量[0.95,0.23,-0.23]來(lái)表示,也可以使用四維的向量來(lái)表示[0.95,0.23,-0.23,0.12],請(qǐng)注意下圖中Embedding Dimensions這一列,不同模型的Embedding維度不一
1.one-hot encoding
這是一種最直觀,也是最不需要?jiǎng)幽X子的編碼模式。假如有10000個(gè)對(duì)象,那么每個(gè)對(duì)象就是一個(gè)10000維的向量,樸素也暴力。例如apple這個(gè)詞在第50個(gè),那么apple對(duì)應(yīng)的編碼就是:10000維的向量,這個(gè)向量除了第50個(gè)為1之外,其余的數(shù)值均為0。
#詞匯表
Vocabulary:
{'mat', 'the', 'bird', 'hat', 'on', 'in', 'cat', 'tree', 'dog'}
#詞匯表中詞匯和位置的映射
Word to Index Mapping:
{'mat': 0, 'the': 1, 'bird': 2, 'hat': 3, 'on': 4, ……}
#輸入一句話(huà)的編碼矩陣
One-Hot Encoded Matrix:
cat: [0, 0, 0, 0, 0, 0, 1, 0, 0]
in: [0, 0, 0, 0, 0, 1, 0, 0, 0]
the: [0, 1, 0, 0, 0, 0, 0, 0, 0]
hat: [0, 0, 0, 1, 0, 0, 0, 0, 0]
dog: [0, 0, 0, 0, 0, 0, 0, 0, 1]
on: [0, 0, 0, 0, 1, 0, 0, 0, 0]
the: [0, 1, 0, 0, 0, 0, 0, 0, 0]
mat: [1, 0, 0, 0, 0, 0, 0, 0, 0]
bird:[0, 0, 1, 0, 0, 0, 0, 0, 0]
in: [0, 0, 0, 0, 0, 1, 0, 0, 0]
the: [0, 1, 0, 0, 0, 0, 0, 0, 0]
tree:[0, 0, 0, 0, 0, 0, 0, 1, 0]
這種編碼方式的缺點(diǎn)顯而易見(jiàn),One-hot編碼會(huì)產(chǎn)生高維向量,使其計(jì)算成本高昂且占用大量?jī)?nèi)存,尤其是在詞匯量較大的情況下;它不捕捉單詞之間的語(yǔ)義關(guān)系;它僅限于訓(xùn)練期間看到的詞匯,因此不適合處理詞匯表之外的單詞。
2.Feature Vector
第二種編碼方式是基于特征,其實(shí)彩色圖片是一種很好的例子。做過(guò)視覺(jué)學(xué)習(xí)的都知道彩色圖片常見(jiàn)的有三種通道(三維向量),分別代表RGB(紅綠藍(lán))。三種顏色取不同的值就可以合成任意一個(gè)位置的色塊。舉個(gè)例子橘色其實(shí)就可以使用orange = [1, .5, 0]來(lái)表示。說(shuō)白了就是每個(gè)維度代表一種特征,然后組合起來(lái)就能代表一個(gè)輸入對(duì)象。
為了加深大家的理解,上圖這個(gè)例子更加直觀。假如約定的編碼只有4個(gè)維度,分別是“春夏秋冬”,那么上圖右側(cè)框框中的事物都可以使用下面的編碼來(lái)替代。具體的意思就是這個(gè)物體是不是在四季節(jié)出現(xiàn),當(dāng)然學(xué)過(guò)數(shù)學(xué)組合的都知道這種編碼方式只能將整個(gè)世界的對(duì)象分成16類(lèi)。但是它已經(jīng)開(kāi)始在編碼中存儲(chǔ)對(duì)象之間的某種關(guān)系。
emoji = [spring, summer, autumn, winter]
?? = [1, 1, 1, 0]
?? = [1, 0, 0, 0]
?? = [1, 0, 0, 0]
?? = [0, 1, 0, 0]
?? = [0, 0, 1, 1]
?? = [0, 0, 1, 1]
...etc
這種編碼模式更加符合人腦,人類(lèi)在記憶某種事物的時(shí)候其實(shí)也是某種編碼,例如看到筆,一般會(huì)浮現(xiàn)它的形狀,屬性和相關(guān)的事物,例如紙張。
3.Document Vector
換個(gè)思路,假如收集了大量的文章,然后將文章里面的字詞在文章中出現(xiàn)的次數(shù)做個(gè)標(biāo)記??梢缘玫饺缦碌木仃嚕好恳涣写碇恼戮幪?hào),每一行代表某個(gè)詞,通過(guò)觀察圖片你就會(huì)發(fā)現(xiàn)其實(shí)traffic和network是不是有點(diǎn)相似,按照這個(gè)編碼其實(shí)也是一種思路。
4.Co-occurrence Vector
順著剛才的思路,其實(shí)還有一種編碼的辦法:可以將文章按照特定的長(zhǎng)度進(jìn)行窗口的滑動(dòng),然后統(tǒng)計(jì)在這個(gè)窗口里面單詞之間的關(guān)聯(lián)次數(shù)。下圖給出例子,從其中可以發(fā)現(xiàn)其實(shí)data和mining還是挺相似的。這種編碼的好處在于這種類(lèi)型的embedding可以準(zhǔn)確地捕獲單詞的使用含義(畢竟單詞的含義會(huì)根據(jù)使用的時(shí)間、社區(qū)和上下文而變化)。
5.Neural Embedding
除了基于傳統(tǒng)的統(tǒng)計(jì)學(xué)方法,其實(shí)可以采用神經(jīng)網(wǎng)絡(luò)來(lái)幫助自動(dòng)化的抽取信息,方法很多。為了幫助大家更好的理解,這里先引入較早機(jī)器學(xué)習(xí)的一個(gè)術(shù)語(yǔ),自編碼器。其實(shí)它的歷史很悠久,只不過(guò)到近期才被發(fā)揚(yáng)光大而已。
如何理解自編碼器呢,請(qǐng)看下圖:
當(dāng)輸入一副圖、一段語(yǔ)音或者一段文字的時(shí)候,通過(guò)綠色部分的神經(jīng)網(wǎng)絡(luò),然后輸出一個(gè)向量,緊接著再將這個(gè)向量輸入紫色部分的神經(jīng)網(wǎng)絡(luò),紫色部分的輸出為重建之后的圖、語(yǔ)音或者文字。最后用輸出和真實(shí)值對(duì)比出差異反過(guò)來(lái)調(diào)整兩個(gè)神經(jīng)網(wǎng)絡(luò)的參數(shù)。如此循環(huán)!
聰明的你一定反應(yīng)過(guò)來(lái)了,要是重建之后的正確率很高的話(huà)。那么中間變量是不是經(jīng)過(guò)壓縮的向量,代表了原圖,原語(yǔ)音或者原文。對(duì)了!這個(gè)就是自編碼器。
那么中間的向量代表什么,其實(shí)是可以的解釋。以輸入“圖片”為例,中間的向量有些維度描述對(duì)象特征,有些描述了材質(zhì)。有人曾經(jīng)做過(guò)實(shí)驗(yàn),語(yǔ)音通過(guò)自編碼器之后,中間向量有一部分代表內(nèi)容,一部分代表音調(diào)。取一段中文和一段日文的語(yǔ)音輸入編碼器,然后將兩個(gè)向量拆分組合,是可以重建出日語(yǔ)說(shuō)中文。
如何用神經(jīng)網(wǎng)絡(luò)用于Embedding,下文會(huì)展開(kāi)詳細(xì)講解。整體的基本思路還是在于將單詞的上下文和情景信息,通過(guò)神經(jīng)網(wǎng)絡(luò)的參數(shù)訓(xùn)練進(jìn)行編碼。
本文轉(zhuǎn)載自 ??魯班模錘??,作者: 魯肅
