本節將著重介紹兩種常見的嵌入技術:
- 降低維度
- 從較大的類神經網路模型中擷取嵌入
降低維度的技巧
有許多數學技巧可用於在低維度空間中擷取高維度空間的重要結構。理論上,這些技術都可以用來為機器學習系統建立嵌入資料。
舉例來說,主成分分析 (PCA) 已用於建立字詞嵌入。在提供一組例項 (例如 字袋向量) 的情況下,主成分分析會嘗試找出高度相關的維度,並將這些維度折疊為單一維度。
訓練嵌入值,做為神經網路的一部分
您可以在為目標工作訓練神經網路時,建立嵌入項目。這種做法可讓您取得專為特定系統量身打造的嵌入資料,但可能需要比單獨訓練嵌入資料更長的時間。
一般來說,您可以在神經網路中建立大小為 d 的隱藏層,並指定為嵌入層,其中 d 代表隱藏層中的節點數量,以及嵌入空間中的維度數量。這個嵌入層可與任何其他特徵和隱藏層結合。就像在任何深層類神經網路中一樣,系統會在訓練期間對參數進行最佳化處理,盡可能減少網路輸出層中的節點損失。
回到食物推薦範例,我們的目標是根據使用者目前喜愛的飲食預測新飲食內容。首先,我們可以針對使用者最喜歡的五項美食彙整其他資料。接著,我們可以將這項工作模擬為監督式學習問題。我們將這五種食物中的四種設為特徵資料,然後隨機將第五種食物設為模型要預測的正向標籤,並使用 softmax 損失函式最佳化模型的預測結果。
在訓練期間,類神經網路模型會學習第一個隱藏層中節點的最佳權重,這個層會做為嵌入層。舉例來說,如果模型在第一個隱藏層中包含三個節點,可能會判斷食物項目最相關的三個維度是三明治、甜點和液體。圖 12 顯示「hot dog」的 one-hot 編碼輸入值轉換為 3D 向量。
在訓練過程中,系統會調整嵌入層的權重,讓相似範例的嵌入向量彼此更接近。嵌入層的個別維度 (嵌入層中每個節點代表的內容) 很少像「dessertness」或「liquidness」那樣容易理解。有時可以推測這些字詞的「意思」,但不一定總是如此。
嵌入通常專屬於工作,當工作不同時,嵌入則有所不同。舉例來說,素食與非素食分類模型產生的嵌入資料可能有兩個維度:肉類內容和乳製品內容。同時,由早餐和美式料理分類器產生的嵌入項目在維度方面可能略有不同:卡路里內容、穀物內容和肉品內容。「穀片」和「蛋和培根三明治」在早餐與晚餐分類器的嵌入空間中可能相距不遠,但在素食與非素食分類器的嵌入空間中則相距甚遠。
訓練字詞嵌入
在上一節中,您已瞭解如何在 word2vec 嵌入空間中,以視覺化方式呈現語意關係。
Word2vec 是用於訓練字詞嵌入的眾多演算法之一。它會依據分布假說,將語意相似的字詞對應至幾何學上相近的嵌入向量。分布假說指出,經常與相同鄰近字詞搭配的字詞,在語意上通常相似。「狗」和「貓」經常出現在「獸醫」一詞附近,這也反映了兩者的語意相似度。正如語言學家 John Firth 在 1957 年所說:「您可以透過詞彙的用法來認識這個詞彙。」
以下影片說明另一種建立字詞嵌入的方法,在訓練神經網路的過程中使用較簡單的模型:
靜態與內容嵌入
如上方影片所述,字詞嵌入的限制之一是它們是靜態的。每個字詞都會以向量空間中的單一點表示,但視字詞在句子中使用的用法而定,可能會有各種不同的意思。在上一個練習中,您發現要為「orange」這個字詞建立語意相似度對應的難度,因為這個字詞可以代表顏色或一種水果。
內容比對技術的開發目的,就是為瞭解決這些缺點。使用情境嵌入法,可讓同一個字詞有多種表示方式,每種表示方式都會納入該字詞所處情境的相關資訊。在情境嵌入中,字詞「orange」可能會有兩種不同的表示法:一種是擷取字詞的「顏色」用法,例如「My favorite sweater has orange stripes」(我最喜歡的毛衣有橘色條紋);另一種是擷取字詞的「水果」用法,例如「The orange was plucked from the tree before it had fully ripened」(橘子在完全成熟前就從樹上摘下)。