嵌入:取得嵌入

本節將介紹取得嵌入資料的幾種方式,以及如何將靜態嵌入資料轉換為情境嵌入資料。

降低維度的技巧

許多數學技巧可在低維度空間中擷取高維度空間的重要結構。理論上,這些技術都可以用來為機器學習系統建立嵌入資料。

舉例來說,主成分分析 (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 個節點的輸出層。
圖 12。 hot dog 的 one-hot 編碼,用於提供深層類神經網路的輸入內容。嵌入層會將 one-hot 編碼轉譯為三維嵌入向量 [2.98, -0.75, 0]

在訓練過程中,系統會調整嵌入層的權重,讓類似範例的嵌入向量彼此更接近。如先前所述,實際模型為其嵌入資料選擇的維度,不太可能像本範例中那樣直觀或易於理解。

內容相關嵌入

word2vec 靜態嵌入向量的一個限制是,字詞在不同情境中可能有不同的涵義。「Yeah」本身的意思是「是」,但在「Yeah, right」這個詞組中,意思則相反。「Post」可指「郵件」、「郵寄」、「耳環背面」、「賽馬結束的標記」、「後製」、「支柱」、「張貼公告」、「派駐警衛或士兵」,或「後」等。

不過,在使用靜態嵌入功能時,每個字詞都會以向量空間中的單一點表示,即使這些字詞可能具有多種意義。在上一個練習中,您發現了靜態嵌入字詞 orange 的限制,這個字詞可以代表顏色或一種水果。在只使用一個靜態嵌入值的情況下,如果在 word2vec 資料集上訓練,橘色一律會比果汁更接近其他顏色。

內容比對功能的開發目的,就是為了克服這項限制。有了情境嵌入功能,單一字詞就能透過多個嵌入表示,將周圍字詞和字詞本身的資訊納入考量。Orange 會為資料集中每個含有該字詞的獨特句子提供不同的嵌入值。

ELMo 等部分建立內容嵌入的方法會採用範例的靜態嵌入,例如句子中字詞的 word2vec 向量,並透過整合周圍字詞資訊的函式進行轉換。這會產生內容嵌入。

  • 特別針對 ELMo 模型,靜態嵌入會與從其他層擷取的嵌入資料匯總,以便對句子進行從前往後和從後往前的讀取。
  • BERT 模型會遮蓋模型用來做為輸入內容的部分序列。
  • Transformer 模型會使用自注意層,為序列中其他字詞與每個字詞的關聯性評分。並將位置嵌入矩陣 (請參閱位置編碼) 中的相關欄,逐一加入先前學習到的每個符記嵌入,產生輸入嵌入,再將其提供給模型的其他部分進行推論。這個輸入嵌入值是每個獨特文字序列的專屬值,也是一種情境嵌入值。

雖然上述模型是語言模型,但情境嵌入資料在其他生成作業 (例如圖片) 中也相當實用。馬匹相片中像素 RGB 值的嵌入資料,如果與代表每個像素的位置矩陣和鄰近像素的部分編碼結合,就能為模型提供更多資訊,並產生情境嵌入資料,而非僅使用 RGB 值的原始靜態嵌入資料。