嵌入:類別輸入資料

類別資料是指代表有限選擇組合中的一或多個獨立項目的輸入特徵。舉例來說,可以是使用者看過的系列電影、文件中的字詞組合,或某人的職業。

類別資料可透過稀疏張量 (代表只有極少數非零元素的張量) 最有效率地呈現。舉例來說,如果我們正在建構電影推薦模型,我們可以為每個可能的電影指派專屬 ID,然後透過每位使用者的已觀看電影的稀疏張量來表示,如圖 3 所示。

電影推薦問題的範例輸入資料。

圖 3. 電影推薦問題的資料。

圖 3 中每一列的矩陣就是擷取使用者電影檢視記錄的範例,並呈現稀疏張量,因為每位使用者只會觀看一小部分所有可能的電影。最後一列對應於電影張量 [1, 3, 999999],並使用電影圖示上方的詞彙索引。

同樣地,使用者可以將字詞、句子和文件視為稀疏的向量,而詞彙中的每個字詞都會扮演一個角色,而跟推薦推薦影片中的電影類似。

如要在機器學習系統中使用這類表示法,我們必須設法將每個稀疏向量表示為數字向量,讓語意相似的項目 (電影或字詞) 在向量空間中擁有相似的距離。不過,如何將字詞表示為數字向量?

最簡單的方法就是定義大型輸入層,每個詞彙中每個字詞都有一個節點,或至少定義一個字詞,以納入資料中的每個字詞。如果資料中出現 500,000 個不重複字詞,您可以代表長度為 500,000 個向量的字詞,並將每個字詞指派給向量中的運算單元。

如果您指定「索引」為索引 1247,然後為「馬」建立索引,則可將 1 複製到第 1247 個輸入節點,將 0 複製到其餘的所有節點。這類表示法稱為「單一熱編碼」,因為只有一個索引的值不是零值。

一般而言,您的向量可能包含較大文字中的字詞計數。這就是所謂的「袋子」表示法。在字詞袋中,500,000 個節點中有些有非零值。

不過,您必須決定非零值,每個字詞使用一個節點可提供非常「稀疏」的輸入向量,也就是大型向量,其非零值相對較少。稀疏表示法表示存在幾個問題,導致模型無法有效學習。

網路大小

大型輸入向量代表類神經網路的超量權重。如果您的詞彙中有 M 個字,以及輸入項目網路第一層中的 N 個節點,您會有 MxN 個權重進行訓練。大量權重會導致更多問題:

  • 資料量。在模型中權重越多,訓練所需的資料就越多。

  • 運算金額。權重越多,訓練和使用模型所需的運算量就越大。很容易超出硬體的功能。

向量之間有意義的意義關係

如果將 RGB 頻道的像素值提供給圖片分類器,那麼呼叫「close」的值會是合理做法。紅藍色接近純藍色,在語意上和向量之間幾何圖形的距離一樣。但「傳播者」的索引為 1247 的向量,其中「1」代表索引為 50,430 的向量,且不代表「索引」為 238 的向量為 1 的向量。

解決方案:嵌入

這些問題的解決方法是使用嵌入功能,將大型稀疏向量轉譯為較小尺寸的空間,以維持語意關係。在這個單元的後續章節中,我們會以直覺、概念性和程式輔助的方式探索嵌入項目。