本節將說明幾種取得嵌入的方法,以及如何將靜態嵌入轉換成內容比對嵌入。
維度縮減技術
有很多數學技術可用於擷取高維度空間的重要結構,並轉換成低維度空間。理論上,這些技術都能用來建立適用於機器學習系統的嵌入。
舉例來說,您可以使用主成分分析 (PCA) 建立字詞嵌入。只要指定一組執行個體 (例如詞袋向量),PCA 就會嘗試找出可壓縮為單一維度的高度相關維度。
在類神經網路中訓練嵌入
您可在針對目標任務訓練類神經網路時建立嵌入,藉此取得適用於指定系統的嵌入,但所需時間可能會比另外訓練嵌入還要長。
一般情況下,您可以在類神經網路中建立尺寸為「d」的隱藏層,供系統指定為嵌入層,「d」代表隱藏層中的節點數量,以及嵌入空間中的維度數量。嵌入層可與任何其他特徵和隱藏層合併。在深層類神經網路中進行訓練時,系統會將參數最佳化,盡量減少網路輸出層損失的節點。
再以先前的食物建議範例為例,我們的目標是根據使用者目前喜歡的餐點,預測使用者會喜愛哪些新餐點。首先,我們可以針對使用者最喜歡的前五種餐點編譯其他資料。接著,我們可以將這項任務歸類為監督式學習問題。我們將前五種餐點中的四種設為特徵資料,並隨機選出第五項餐點設為陽性標籤,指定為模型預測目標,以便使用 softmax 損失最佳化模型的預測結果。
在訓練過程中,類神經網路模型會學習第一個隱藏層所含節點的最佳權重,該隱藏層可用做嵌入層。舉例來說,假如模型的第一個隱藏層包含三個節點,模型可能會判定與餐點最相關的三個維度為「三明治相符度」、「甜點相符度」和「液體相符度」。圖 12 顯示「熱狗」轉換成三維度向量後的 one-hot 編碼輸入值。
![圖 12. 熱狗 one-hot 編碼的類神經網路。第一層是有 5 個節點的輸入層,每個節點都標有所代表食物的圖示 (羅宋湯、熱狗、沙拉、...,以及沙威瑪)。這些節點的值分別是 [0、1、0、...、0],代表「熱狗」的 one-hot 編碼。輸入層已連結至有 3 個節點的嵌入層,這 3 個節點的值分別為 2.98、-0.75 和 0。嵌入層與有 5 個節點的隱藏層相連結,該隱藏層又已連結至有 5 個節點的輸出層。](https://developers.google.com/static/machine-learning/crash-course/embeddings/images/one_hot_hot_dog_embedding.png?authuser=19&hl=zh-tw)
hot dog
的 one-hot 編碼,當做深層類神經網路的輸入值使用。嵌入層會將 one-hot 編碼轉譯成三維度嵌入向量 [2.98, -0.75, 0]
。在訓練過程中,系統會將嵌入層的權重最佳化,以便讓相似樣本的嵌入向量更靠近彼此。如前所述,實際模型選擇用於嵌入的維度,可能不會像這個範例這麼直觀或容易理解。
內容比對嵌入
word2vec
靜態嵌入向量的其中一項限制,是字詞的意義會因情境不同而改變。「Yeah」(好) 單獨使用時所傳達的意義,和「Yeah, right」(好喔,你都對) 這個詞組的意義完全相反。「Post」可以表示「mail」(郵件)、「to put in the mail」(寄送郵件)、「earring backing」(耳環背扣)、「marker at the end of a horse race」(賽馬終點線的標誌桿柱)、「postproduction」(後期製作)、「pillar」(支柱)、「to put up a notice」(發布公告)、「to station a guard or soldier」(派出警衛或士兵) 或「after」(之後),以及其他可能的意義。
不過,在靜態嵌入中,即使字詞可能具有多種意義,每個字詞在向量空間中只會由一個點表示。在先前的練習中,您已理解「orange」這個字的靜態嵌入限制,這個字可以表示一種顏色或一種水果。如果只有一個靜態嵌入,在依據 word2vec
資料集進行訓練時,「orange」一律會與其他顏色比較近,與「juice」則相距較遠。
內容比對嵌入是為了解決這個限制而開發。內容比對嵌入可使用多個嵌入表示單一字詞,這些嵌入結合了周遭字詞與字詞本身的資訊。因此在資料集中,「orange」在每個包含此字詞的獨立語句中就會有不同的嵌入。
ELMo 等某些內容比對嵌入建立方法,會使用靜態嵌入做為範例 (例如語句所含字詞的 word2vec
向量),然後使用納入周遭字詞資訊的函式加以轉換,藉此產生內容比對嵌入。
按這裡可查看內容比對嵌入的詳細資訊
雖然上述模型為語言模型,但內容比對嵌入也適用於圖像等其他生成式任務。如果將馬匹相片中的像素 RGB 值嵌入,與表示每個像素的位置矩陣,以及鄰近像素的部分編碼組合,可建立內容比對嵌入,相較於單獨使用 RGB 值的原始靜態嵌入,這麼做可提供更多資訊給模型。