文章目錄
- 深入理解
- 簡單案例
- 結論
- 詞向量(Word Embedding)簡介
- 詞向量如何解決相似性問題?
- 簡單案例:基于上下文的詞向量訓練
- 總結
- 對于獨熱表示的向量,如果采用余弦相似度計算向量間的相似度,可以明顯的發現任意兩者向量的相似度結果都為 0,即任意二者都不關,也就是說獨熱表示無法解決詞之間的相似性問題。
深入理解
- 獨熱編碼(One-Hot Encoding)是一種將類別型變量轉換為二進制向量的方法。對于一個有NNN 個不同類別的特征,獨熱編碼會創建一個長度為NNN的向量,其中只有一個元素為 1(表示當前類別),其余元素為 0。例如,對于三個類別 “貓”、“狗”、“鳥”,其獨熱編碼可能分別為 [1,0,0][1, 0, 0][1,0,0]、[0,1,0][0, 1, 0][0,1,0] 和[0,0,1][0, 0, 1][0,0,1]。
- 余弦相似度用于衡量兩個向量在方向上的相似性,其中 A?BA \cdot BA?B 是向量的點積,∣A∣|A|∣A∣ 和∣B∣|B|∣B∣ 是向量的模(歐幾里得范數)。計算公式為:
余弦相似度=A?B∥A∥?∥B∥\text{余弦相似度} = \frac{A \cdot B}{\|A\| \cdot \|B\|} 余弦相似度=∥A∥?∥B∥A?B?
對于任意兩個不同的獨熱向量:
- 點積A?B=0A \cdot B = 0A?B=0(因為獨熱向量只有一個 1,且不同向量的 1 位置不同)。
- 每個向量的模 ∣A∣=∣B∣=1|A| = |B| = 1∣A∣=∣B∣=1(因為只有一個 1,其余為 0)。
因此,余弦相似度為:
余弦相似度=01?1=0\text{余弦相似度} = \frac{0}{1 \cdot 1} = 0 余弦相似度=1?10?=0
- 這表明任意兩個不同的獨熱向量是完全不相關的(相似度為 0),無法反映它們之間可能存在的語義或實際關系。
簡單案例
假設我們有以下三個詞的獨熱編碼:
- “貓”:[1,0,0][1, 0, 0][1,0,0]
- “狗”:[0,1,0][0, 1, 0][0,1,0]
- “鳥”:[0,0,1][0, 0, 1][0,0,1]
計算 “貓” 和 “狗” 的余弦相似度:
- 點積:
[1,0,0]?[0,1,0]=(1?0)+(0?1)+(0?0)=0[1, 0, 0] \cdot [0, 1, 0] = (1 \cdot 0) + (0 \cdot 1) + (0 \cdot 0) = 0 [1,0,0]?[0,1,0]=(1?0)+(0?1)+(0?0)=0 - 模:
∥[1,0,0]∥=12+02+02=1∥[0,1,0]∥=02+12+02=1\|[1, 0, 0]\| = \sqrt{1^2 + 0^2 + 0^2} = 1 \\ \|[0, 1, 0]\| = \sqrt{0^2 + 1^2 + 0^2} = 1 ∥[1,0,0]∥=12+02+02?=1∥[0,1,0]∥=02+12+02?=1 - 余弦相似度:
01?1=0\frac{0}{1 \cdot 1} = 0 1?10?=0
計算 “貓” 和 “鳥” 的余弦相似度:
- 點積:
[1,0,0]?[0,0,1]=(1?0)+(0?0)+(0?1)=0[1, 0, 0] \cdot [0, 0, 1] = (1 \cdot 0) + (0 \cdot 0) + (0 \cdot 1) = 0 [1,0,0]?[0,0,1]=(1?0)+(0?0)+(0?1)=0 - 模:
∥[1,0,0]∥=1∥[0,0,1]∥=1\|[1, 0, 0]\| = 1 \\ \|[0, 0, 1]\| = 1 ∥[1,0,0]∥=1∥[0,0,1]∥=1 - 余弦相似度:
01?1=0\frac{0}{1 \cdot 1} = 0 1?10?=0
計算 “狗” 和 “鳥” 的余弦相似度:
- 點積:
[0,1,0]?[0,0,1]=(0?0)+(1?0)+(0?1)=0[0, 1, 0] \cdot [0, 0, 1] = (0 \cdot 0) + (1 \cdot 0) + (0 \cdot 1) = 0 [0,1,0]?[0,0,1]=(0?0)+(1?0)+(0?1)=0 - 模:
∥[0,1,0]∥=1∥[0,0,1]∥=1\|[0, 1, 0]\| = 1 \\ \|[0, 0, 1]\| = 1 ∥[0,1,0]∥=1∥[0,0,1]∥=1 - 余弦相似度:
01?1=0\frac{0}{1 \cdot 1} = 0 1?10?=0
結論
- 通過計算可以發現,任意兩個不同詞的獨熱編碼的余弦相似度均為 0。表明獨熱編碼無法捕捉詞與詞之間的相似性(例如 “貓” 和 “狗” 都是動物,但相似度為 0)。
- 這是獨熱編碼的局限性之一,因此在實際 NLP 任務中通常會使用更高級的詞表示方法(如詞嵌入 Word2Vec、GloVe 等)來解決這一問題。
詞向量(Word Embedding)簡介
- 詞向量(Word Embedding)是一種將詞語映射到低維連續向量空間的技術,其核心思想是讓語義或用法相似的詞在向量空間中距離更近。與獨熱編碼不同,詞向量是稠密向量(非稀疏),每個維度表示詞的某種潛在語義或語法特征(如“性別”、“動作”、“情感”等)。
關鍵特點:
- 低維稠密:通常維度為 50-300(遠小于獨熱編碼的維度)。
- 語義可計算:通過向量運算可以捕捉詞的關系(如“國王 - 男 + 女 ≈ 女王”)。
- 相似性量化:余弦相似度可以反映詞之間的語義相關性。
詞向量如何解決相似性問題?
獨熱編碼的相似度恒為 0,而詞向量通過以下方式解決:
- 相似詞向量接近:通過訓練(如預測上下文),模型會使得“貓”和“狗”的向量方向接近。
- 連續空間表示:向量的每一維對應某種潛在特征,例如:
- 維度1:動物性(貓=0.9,狗=0.8,汽車=0.1)
- 維度2:家用性(貓=0.7,狗=0.6,汽車=0.3)
簡單案例:基于上下文的詞向量訓練
- 假設有一個小型語料庫和簡化的詞向量(維度=2):句子:
"貓 吃 魚"
,"狗 吃 肉"
- 初始隨機向量(訓練前):
- 貓: [0.2, 0.4]
- 狗: [0.3, 0.1]
- 吃: [0.5, 0.5]
- 魚: [0.1, 0.6]
- 肉: [0.2, 0.2]
- 目標:通過訓練(如Skip-gram模型),調整向量使得共享上下文的詞(如“貓”和“狗”都鄰近“吃”)在向量空間中接近。
訓練步驟(簡化):
- 輸入“吃”,預測上下文“貓”或“狗”。
- 計算“吃”的向量與“貓”的向量點積,通過Softmax得到概率。
- 根據預測誤差反向傳播,更新“吃”、“貓”、“狗”的向量。
訓練后可能結果(假設):
- 貓: [0.8, 0.5]
- 狗: [0.7, 0.4]
- 吃: [0.6, 0.6]
此時,“貓”和“狗”的向量更接近。
計算相似度(訓練后)
余弦相似度公式:
相似度=A?B∥A∥?∥B∥\text{相似度} = \frac{A \cdot B}{\|A\| \cdot \|B\|} 相似度=∥A∥?∥B∥A?B?
- 貓 vs 狗:
- 點積:0.8×0.7+0.5×0.4=0.56+0.20=0.760.8 \times 0.7 + 0.5 \times 0.4 = 0.56 + 0.20 = 0.760.8×0.7+0.5×0.4=0.56+0.20=0.76
- 模:∣A∣=0.82+0.52≈0.94|A| = \sqrt{0.8^2 + 0.5^2} \approx 0.94∣A∣=0.82+0.52?≈0.94,∣B∣≈0.81|B| \approx 0.81∣B∣≈0.81
- 相似度:0.760.94×0.81≈0.99\frac{0.76}{0.94 \times 0.81} \approx 0.990.94×0.810.76?≈0.99
- 貓 vs 肉(無關詞):
- 假設“肉”向量為 [0.2, 0.2]
- 點積:0.8×0.2+0.5×0.2=0.260.8 \times 0.2 + 0.5 \times 0.2 = 0.260.8×0.2+0.5×0.2=0.26
- 相似度:0.260.94×0.28≈0.99\frac{0.26}{0.94 \times 0.28} \approx 0.990.94×0.280.26?≈0.99
詞向量的典型應用
- 詞類比任務: 國王?男+女≈女王\text{國王} - \text{男} + \text{女} \approx \text{女王}國王?男+女≈女王
- 文本分類:將詞向量求和/平均作為句子表示。
- 語義搜索:用向量相似度匹配查詢詞和相關文檔。
總結
詞向量通過將詞映射到連續空間,使得:
- 語義相似的詞向量距離接近。
- 支持向量運算捕捉復雜關系(如類比關系)。
- 解決了獨熱編碼無法表示相似性的缺陷。
實際中,Word2Vec、GloVe等模型通過大規模語料訓練,自動學習這種分布式表示。