本節將介紹取得嵌入資料的幾種方式,以及如何將靜態嵌入資料轉換為情境嵌入資料。
降低維度的技巧
許多數學技巧可在低維度空間中擷取高維度空間的重要結構。理論上,這些技術都可以用來為機器學習系統建立嵌入資料。
舉例來說,主成分分析 (PCA) 已用於建立字詞嵌入。在提供一組例項 (例如字袋向量) 的情況下,主成分分析會嘗試找出高度相關的維度,並將這些維度折疊成單一維度。
訓練嵌入值,做為神經網路的一部分
您可以在為目標工作訓練神經網路時,建立嵌入項目。這種做法可讓您取得專為特定系統量身打造的嵌入資料,但訓練時間可能會比單獨訓練嵌入資料還要長。
一般來說,您可以在神經網路中建立大小為 d 的隱藏層,並指定為嵌入層,其中 d 代表隱藏層中的節點數量,以及嵌入空間中的維度數量。這個嵌入層可與任何其他特徵和隱藏層結合。如同任何深層類神經網路,參數會在訓練期間進行最佳化,以便將網路輸出層中節點的損失降到最低。
回到食物推薦範例,我們的目標是根據使用者目前喜愛的餐點,預測他們會喜歡的新餐點。首先,我們可以針對使用者最愛的五種食物,編譯其他資料。接著,我們可以將這項工作模擬為監督式學習問題。我們將這五種食物中的四種設為特徵資料,然後隨機將第五種食物設為模型要預測的正向標籤,並使用 softmax 損失函式最佳化模型的預測結果。
在訓練期間,類神經網路模型會學習第一個隱藏層中節點的最佳權重,這個層會做為嵌入層。舉例來說,如果模型在第一個隱藏層中包含三個節點,可能會判斷食物項目最相關的三個維度是三明治、甜點和液體。圖 12 顯示「熱狗」的 one-hot 編碼輸入值,已轉換為三維向量。
![圖 12.用於熱狗 one-hot 編碼的神經網路。第一層是包含 5 個節點的輸入層,每個節點都標示代表的食物圖示 (borscht、熱狗、沙拉、shawarma)。這些節點分別具有值 [0, 1, 0, ..., 0],代表「熱狗」的 one-hot 編碼。輸入層會連結至 3 個節點的嵌入層,這些節點的值分別為 2.98、-0.75 和 0。嵌入層會連結至 5 個節點的隱藏層,而隱藏層則會連結至 5 個節點的輸出層。](https://developers.google.cn/static/machine-learning/crash-course/embeddings/images/one_hot_hot_dog_embedding.png?hl=zh-tw)
hot dog
的 one-hot 編碼,用於提供深層類神經網路的輸入內容。嵌入層會將 one-hot 編碼轉譯為三維嵌入向量 [2.98, -0.75, 0]
。在訓練過程中,系統會調整嵌入層的權重,讓類似範例的嵌入向量彼此更接近。如先前所述,實際模型為其嵌入資料選擇的維度,不太可能像本範例中那樣直觀或易於理解。
內容相關嵌入
word2vec
靜態嵌入向量的一個限制是,字詞在不同情境中可能有不同的涵義。「Yeah」本身的意思是「是」,但在「Yeah, right」這個詞組中,意思則相反。「Post」可指「郵件」、「郵寄」、「耳環背面」、「賽馬結束的標記」、「後製」、「支柱」、「張貼公告」、「派駐警衛或士兵」,或「後」等。
不過,在使用靜態嵌入功能時,每個字詞都會以向量空間中的單一點表示,即使這些字詞可能具有多種意義。在上一個練習中,您發現了靜態嵌入字詞 orange 的限制,這個字詞可以代表顏色或一種水果。在只使用一個靜態嵌入值的情況下,如果在 word2vec
資料集上訓練,橘色一律會比果汁更接近其他顏色。
內容比對功能的開發目的,就是為了克服這項限制。有了情境嵌入功能,單一字詞就能透過多個嵌入表示,將周圍字詞和字詞本身的資訊納入考量。Orange 會為資料集中每個含有該字詞的獨特句子提供不同的嵌入值。
ELMo 等部分建立內容嵌入的方法會採用範例的靜態嵌入,例如句子中字詞的 word2vec
向量,並透過整合周圍字詞資訊的函式進行轉換。這會產生內容嵌入。
雖然上述模型是語言模型,但情境嵌入資料在其他生成作業 (例如圖片) 中也相當實用。馬匹相片中像素 RGB 值的嵌入資料,如果與代表每個像素的位置矩陣和鄰近像素的部分編碼結合,就能為模型提供更多資訊,並產生情境嵌入資料,而非僅使用 RGB 值的原始靜態嵌入資料。