一個「靠近就代表相似」的空間
當每個 token 都是一串,比方說 4096 個數字,你可以把每個 token 想成 4096 維空間裡的一個點——也就是語意向量空間(semantic vector space)。我們無法想像 4096 維,但二維的直覺仍然成立:靠得近的點相似,離得遠的點無關。因為訓練會把用法相似的 token 推向相似的向量,這個空間自己就按語意整理好了。` cat`、` dog`、` hamster` 形成一小撮寵物聚落;` Paris`、` Tokyo`、` Berlin` 聚成首都群,離寵物老遠。
余弦相似度:词义的接近程度取决于两个向量之间的夹角,而非它们的原始长度。
king − man + woman 的把戲
「詞可以是有用的向量」這個想法,是由 2013 年的 word2vec 發揚光大的。它最驚豔的一點:不只相似的詞會靠近,連方向也帶有意義。拿 king 的向量,減去 man,加上 woman——結果最接近的 token 竟然是 queen。「男 → 女」的變化和「單數 → 複數」的變化,各自對應一個你可以加減的固定方向。語意,變成了算術。
vec("king") - vec("man") + vec("woman") ~= vec("queen")
vec("Paris") - vec("France") + vec("Japan") ~= vec("Tokyo")word2vec 类比示意图,展示 king 减 man 加 woman 约等于 queen。
這跟第 3 篇嵌入矩陣裡的嵌入(embedding)想法是同一類——只是單獨拿出來示範而已。語言模型的輸入層,確實就是這樣開始編碼語意的。
「一詞一向量」的致命缺陷
但有個問題就明擺在眼前。嵌入表給每個 token 恰好一個固定向量。這些叫做靜態嵌入(static embeddings):bank 永遠對應到同一個點,不管你指的是河岸,還是幫你保管錢的銀行。這個可憐的向量只好變成兩種意思的模糊平均。水果的 Apple 和公司的 Apple 也塌縮成同一個。對真實語言來說,詞義會隨脈絡漂移,「一個詞一個凍結的向量」根本不夠用。
脈絡嵌入:讓鄰居來投票
現代大型語言模型用脈絡嵌入(contextual embeddings)來修正這件事。表裡的靜態向量只是起點。當它往上穿過 Transformer 時,每個 token 的向量會不斷透過觀察句子裡的其他 token 而被更新——這個過程叫做脈絡混合(context mixing),由自注意力(self-attention)驅動。到了較高的層,「sat on the river bank」裡 bank 的向量,和「deposit at the bank」裡 bank 的向量,已經移動到空間中兩個完全不同的點。同一個起始 token,兩種不同的意思——終於做到了。
交互式自注意力组件,高亮显示被点击的词关注了哪些其他词。
所以你在第 3 篇認識的嵌入層,並不是語意的最終定論——它是種子。靜態嵌入把一個 token 放上地圖;脈絡嵌入則讓句子的其餘部分把它拖到剛剛好的位置。這個交棒,正是從本主題通往「Transformer 究竟如何運作」的橋樑。