嵌套(Embeddings)
2. 分類輸入數據 Categorical data
分類數據是指用于表示一組有限選項中的一個或多個離散項的輸入特征。例如,它可以是某用戶觀看過的一組影片,某文檔中使用的一系列單詞,或某人從事的職業。
分類數據的最高效表示方式是使用稀疏張量(sparse tensors)(一種含有極少非零元素的張量)。例如,如果要構建一個影片推薦模型,可以為每部可能的影片分別分配一個唯一的 ID,然后通過用戶已觀看影片的稀疏張量來表示每位用戶:
在圖 3 的矩陣中,每一行都是一個顯示用戶的影片觀看記錄的樣本,并以稀疏張量的形式表示,因為每個用戶只會觀看所有可能的影片中的一小部分。根據影片圖標上方所示的索引,最后一行對應于稀疏張量 [1, 3, 999999]。
類似地,我們還可將字詞、句子和文檔表示為稀疏矢量 - 在這種情況下,詞匯表內每個字詞所扮演的角色類似于推薦示例中的影片。
為了能夠在機器學習系統中使用這類表示法,我們需要將每個稀疏矢量表示為數字矢量,從而使語義上相似的項(影片或字詞)在矢量空間中具有相似的距離。但如何將字詞表示為數字矢量呢?
最簡單的方法是:定義一個巨型輸入層,并在其中為詞匯表內的每個字詞設定一個節點,或者至少為您數據中出現的每個字詞設定一個節點。如果您的數據中出現了 50 萬個獨一無二的單詞,您可以使用長度為 50 萬的矢量來表示每個單詞,并將每個字詞分配到相應矢量中對應的索引位置。
如果為“馬”分配的索引是 1247,那么為了將“馬”饋入到您的網絡中,可以將第 1247 個輸入節點設成 1,其余節點設成 0。這種表示法稱為獨熱編碼 (one-hot encoding),因為只有一個索引具有非零值。
更常見的是,使用一個包含各個單詞在大塊文本中出現次數的向量。這被稱為“詞袋”(bag of words) 表示法。在一個詞袋矢量中,50 萬個節點中的若干個節點將會具有非零值。
不過,無論您如何確定非零值,若將節點與字詞一一對應,您得到的輸入矢量就會比較稀疏 - 即:矢量很大,但非零值相對較少。稀疏表示法存在多項問題(如下所述),這些問題可能會致使模型很難高效地學習。
1)網絡的規模
巨型輸入矢量意味著神經網絡的對應權重數目會極其龐大。如果您的詞匯表內有 M 個字詞,而神經網絡輸入層上方的第一層內有 N 個節點,您便需要為該層訓練 MxN 個權重。權重數目過大會進一步引發以下問題
- 數據量:模型中的權重越多,高效訓練所需的數據就越多。
- 計算量:權重越多,訓練和使用模型所需的計算就越多。這很容易就會超出您硬件的能力范圍。
2)矢量之間缺乏有意義的聯系
如果您已將 RGB 通道的像素值饋入到圖片分類器中,分析“鄰近”值便行得通。不管是從語義上來看,還是從矢量之間的幾何距離來看,紅藍色與純藍色都是鄰近的。不過,對于在索引 1247 處設為 1 以表示“馬”的矢量而言,如果說它與在索引 238 處設為 1 以表示“電視機”的矢量不夠鄰近,那么它與在索引 50430 處設為 1 以表示“羚羊”的矢量亦然。(其實就是太多了,馬和羚羊本來應該距離很近但是變得不容易表示)
解決方案:嵌套
上述問題的解決方案就是使用嵌套,也就是將大型稀疏矢量映射到一個保留語義關系的低維空間。在此模塊的隨后幾個部分中,我們將從直觀角度、概念角度和編程角度來詳細探討嵌套。
嵌套 (Embeddings):轉換到低維度空間
要解決稀疏輸入數據的核心問題,您可以將高維度數據映射到低維度空間。
即便是小型多維空間,也能自由地將語義上相似的項歸到一起,并將相異項分開。矢量空間中的位置(距離和方向)可對良好的嵌套中的語義進行編碼。例如,下面的真實嵌套可視化圖所展示的幾何關系圖捕獲了國家與其首都之間的語義關系。
借助這種有意義的空間,機器學習系統能夠檢測出對學習任務可能有幫助的模式。
收縮網絡
嵌套是一個矩陣,每列表示您詞匯中的一項所對應的矢量。要獲得某個詞匯項的密集矢量,您可以檢索該項所對應的列。
但是,如何轉換字詞矢量的稀疏包呢?要獲得表示多個詞匯項(例如,一句或一段中的所有字詞)的稀疏矢量的密集矢量,您可以檢索各項的嵌套,然后將它們相加。
如果稀疏矢量包含詞匯項的計數,則您可以將每項嵌套與其對應項的計數相乘,然后再求和。
這些運算可能看起來很眼熟吧。
嵌套查詢充當矩陣乘法
我們剛剛闡述的查詢、乘法和加法程序等效于矩陣乘法。假設有一個 1 X N 的稀疏表示 S 和一個 N X M 的嵌套表 E,矩陣乘法 S X E 可以得出密集矢量 1 X M。
但首要問題是,如何獲取 E 呢?
- 標準降維技術:目前有很多在低維空間捕獲高維空間重要結構的數學技術。理論上,這些技術都可以用來創建用于機器學習系統的嵌套。例如,主成分分析 (PCA) 已用于創建字詞嵌套。在給定一組實例的情況下,例如字詞矢量包,PCA 會嘗試查找高度相關且可以合并的維度。
- Word2vec:Word2vec 是 Google 為了訓練字詞嵌套而研發的一種算法。Word2vec 基于分布假設,將語義上相似的字詞映射到在幾何圖形上鄰近的嵌套矢量。(分布假設指出經常具有相同相鄰字詞的字詞往往在語義上相似。“狗”和“貓”這兩個字詞經常靠近“獸醫”一詞出現,這就 可以說明這兩個字詞在語義上相似。)
- 將嵌套訓練為大型模型的一部分
總結
以上是生活随笔為你收集整理的嵌套(Embeddings)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于模糊聚类和协同过滤的混合推荐系统
- 下一篇: dashboard 镜像源_kubern