LLM背后的基礎模型6:一文入門Embeddings 原創
Embeddings
Embeddings會分為兩個章節,前部分主要還是放在常規方法總結,后者主要放在神經網絡技術。其實這個英文單詞不難理解,就是將對象用數字標識描述。其實一直糾結是否要講述這個話題,因為可深可淺。
若要用一句話概括,就是給輸入分配一個數字標識,可以是一個整數數值也可以是一個向量。不過最重要的目的是在模型訓練的過程中能夠高效且有效的學習參數。
這里需要解釋下向量,例如apple可以使用三維的向量[0.95,0.23,-0.23]來表示,也可以使用四維的向量來表示[0.95,0.23,-0.23,0.12],請注意下圖中Embedding Dimensions這一列,不同模型的Embedding維度不一

1.one-hot encoding
這是一種最直觀,也是最不需要動腦子的編碼模式。假如有10000個對象,那么每個對象就是一個10000維的向量,樸素也暴力。例如apple這個詞在第50個,那么apple對應的編碼就是:10000維的向量,這個向量除了第50個為1之外,其余的數值均為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, ……}
#輸入一句話的編碼矩陣
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]這種編碼方式的缺點顯而易見,One-hot編碼會產生高維向量,使其計算成本高昂且占用大量內存,尤其是在詞匯量較大的情況下;它不捕捉單詞之間的語義關系;它僅限于訓練期間看到的詞匯,因此不適合處理詞匯表之外的單詞。
2.Feature Vector
第二種編碼方式是基于特征,其實彩色圖片是一種很好的例子。做過視覺學習的都知道彩色圖片常見的有三種通道(三維向量),分別代表RGB(紅綠藍)。三種顏色取不同的值就可以合成任意一個位置的色塊。舉個例子橘色其實就可以使用orange = [1, .5, 0]來表示。說白了就是每個維度代表一種特征,然后組合起來就能代表一個輸入對象。

為了加深大家的理解,上圖這個例子更加直觀。假如約定的編碼只有4個維度,分別是“春夏秋冬”,那么上圖右側框框中的事物都可以使用下面的編碼來替代。具體的意思就是這個物體是不是在四季節出現,當然學過數學組合的都知道這種編碼方式只能將整個世界的對象分成16類。但是它已經開始在編碼中存儲對象之間的某種關系。
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這種編碼模式更加符合人腦,人類在記憶某種事物的時候其實也是某種編碼,例如看到筆,一般會浮現它的形狀,屬性和相關的事物,例如紙張。
3.Document Vector
換個思路,假如收集了大量的文章,然后將文章里面的字詞在文章中出現的次數做個標記。可以得到如下的矩陣:每一列代表著文章編號,每一行代表某個詞,通過觀察圖片你就會發現其實traffic和network是不是有點相似,按照這個編碼其實也是一種思路。

4.Co-occurrence Vector
順著剛才的思路,其實還有一種編碼的辦法:可以將文章按照特定的長度進行窗口的滑動,然后統計在這個窗口里面單詞之間的關聯次數。下圖給出例子,從其中可以發現其實data和mining還是挺相似的。這種編碼的好處在于這種類型的embedding可以準確地捕獲單詞的使用含義(畢竟單詞的含義會根據使用的時間、社區和上下文而變化)。

5.Neural Embedding
除了基于傳統的統計學方法,其實可以采用神經網絡來幫助自動化的抽取信息,方法很多。為了幫助大家更好的理解,這里先引入較早機器學習的一個術語,自編碼器。其實它的歷史很悠久,只不過到近期才被發揚光大而已。

如何理解自編碼器呢,請看下圖:

當輸入一副圖、一段語音或者一段文字的時候,通過綠色部分的神經網絡,然后輸出一個向量,緊接著再將這個向量輸入紫色部分的神經網絡,紫色部分的輸出為重建之后的圖、語音或者文字。最后用輸出和真實值對比出差異反過來調整兩個神經網絡的參數。如此循環!
聰明的你一定反應過來了,要是重建之后的正確率很高的話。那么中間變量是不是經過壓縮的向量,代表了原圖,原語音或者原文。對了!這個就是自編碼器。
那么中間的向量代表什么,其實是可以的解釋。以輸入“圖片”為例,中間的向量有些維度描述對象特征,有些描述了材質。有人曾經做過實驗,語音通過自編碼器之后,中間向量有一部分代表內容,一部分代表音調。取一段中文和一段日文的語音輸入編碼器,然后將兩個向量拆分組合,是可以重建出日語說中文。
如何用神經網絡用于Embedding,下文會展開詳細講解。整體的基本思路還是在于將單詞的上下文和情景信息,通過神經網絡的參數訓練進行編碼。
本文轉載自 ??魯班模錘??,作者: 魯肅

















