---
# System prepended metadata

title: 詞向量（Word Embedding）-2
tags: [NLP]

---

## 介紹詞向量（Word Embedding）
在自然語言處理（NLP）中，電腦無法直接理解人類語言，而是需要將文本轉換為數值表示，這就是詞向量（Word Embedding）的概念。

詞向量的目的是讓模型能夠處理和理解語言的語義與結構，進而應用於機器學習和深度學習模型中。隨著 NLP 的發展，出現了不同的詞向量表示方法，包括 One-Hot Encoding、詞袋模型（Bag of Words, BOW）、TF-IDF（詞頻 - 逆文件頻率） 和 Word2Vec。每種方法都有其特定的應用場景和優缺點，下面將對這些方法進行詳細解析。
![image](https://hackmd.io/_uploads/ryAPJ4d91x.png)


## One-Hot Encoding：最基礎的詞向量表示
One-Hot Encoding 是 NLP 中最基本的詞表示方式，它的核心思想是，對於一個詞彙表（Vocabulary）中的每個單詞，使用一個與詞彙表大小相同的二進位向量來表示，只有對應單詞的位置為 1，其他位置全部為 0。

舉例來說，假設我們的詞彙表包含三個詞："apple"、"banana"、"cherry"，那麼它們的 One-Hot Encoding 如下：
![image](https://hackmd.io/_uploads/ByKh-mu9ke.png)

### 優點
* 簡單易懂：直接將單詞轉換為唯一的向量，直觀且易於實作。
* 無語義偏差：所有單詞的向量權重相同，沒有語義上的先驗假設。
### 缺點
* 高維度與稀疏性問題：詞彙表的大小會影響向量的維度，對於大型語料（數十萬個單詞）來說，One-Hot Encoding 會產生高維稀疏矩陣，增加計算成本。
* 無語義信息：不同單詞的向量之間沒有任何關聯性，無法捕捉語義相似性，例如 "apple" 和 "banana" 在語義上相關，但其 One-Hot 向量完全不同。
* 無法處理新詞或未見詞（OOV, Out-of-Vocabulary）

## 詞袋模型（Bag of Words, BOW）：基於詞頻的統計方法
詞袋模型（BOW）是一種統計詞頻的方法，它會忽略單詞的出現順序，只關心單詞的出現次數，即每個文檔的向量由詞彙表中的詞頻構成。透過詞頻統計可以得出某些詞的頻率較高，這些詞可能比只出現一次的詞更能代表文本的主題，在新聞分析、社交媒體趨勢分析等領域，這種排序方式可以幫助提取關鍵資訊，提高文本處理的效率。

假設我們有以下兩個句子：

1. "I love apples and bananas."
2. "Bananas are delicious."

並且詞彙表為 ["I", "love", "apples", "and", "bananas", "are", "delicious"]，則這兩個句子的 BOW 向量為：
![image](https://hackmd.io/_uploads/B1x9QXuqJl.png)

### 優點
* 簡單且易於計算：只需計算詞頻，無需額外的訓練或詞向量學習。
* 適用於文本分類：如垃圾郵件分類、情感分析等，BOW 可以幫助識別文本中特定詞的頻率特徵。
### 缺點
* 忽略單詞順序：無法區分「I love apples」與「Apples love I」，它們的向量表示是一樣的，這會影響語意理解。
* 無語義信息：不同的單詞之間沒有關聯性，例如 "apple" 和 "banana" 可能是同類詞，但 BOW 不會反映它們的關聯性。
* 高維度與稀疏性問題：與 One-Hot Encoding 相同，詞彙表的大小會影響向量維度，對大規模語料處理不友好。
* 無法處理新詞或未見詞（OOV, Out-of-Vocabulary）

## TF-IDF：衡量單詞重要性的加權方法
TF-IDF（Term Frequency-Inverse Document Frequency） 是對 BOW 的改進方法，它不僅考慮單詞在單一文件中的頻率（Term Frequency, TF），還考慮該單詞在整個語料庫中的重要性（Inverse Document Frequency, IDF）。

在大多數文本中，一些詞（如 "the"、"is"、"and"）幾乎出現在所有文件中。如果僅依賴詞頻（TF）來衡量詞彙的重要性，這些高頻詞將主導計算結果，導致無法有效識別文件的核心內容。例如，在一份關於 AI 技術的文章中，"artificial intelligence" 這個詞組比 "is" 或 "the" 更具代表性，透過 IDF 降低這些常見詞的影響，使真正能夠代表文章主題的詞獲得更高的權重。
![image](https://hackmd.io/_uploads/SyM1UmuqJg.png)

TF：表示某個詞在特定文檔中的出現頻率。
IDF：衡量某個詞在整個語料庫中的重要性，例如某個詞在多數文件中都出現，則它的 IDF 會較低。

### 案例說明
假設我們有以下三個文件：

文件 1（d₁）："I love apples and bananas."
文件 2（d₂）："Bananas are delicious and I love them."
文件 3（d₃）："Apples and oranges are tasty."

Step 1：計算 TF， 'apples' 在文件 1（d₁）出現一次。

$TF('apples', d1​) = 1/5 = 0.2$

Step 2：計算 IDF， 'apples' 只在文件 1（d₁）和文件 3（d₃）中出現。

$IDF('apples', D) = log_e​(3/2) ​= 0.405$

Step3: 計算 TF-IDF

$TF-IDF('apples', d, D)=0.2×0.405=0.081$

### 優點
* 減少常見詞的影響：可有效降低像 "the"、"is" 這類高頻但無用詞的影響。
* 提升關鍵詞影響力：TF-IDF 使得較少出現但重要的詞更具影響力，適合資訊檢索與文本分類。
### 缺點
* 仍然忽略詞序：如 "not happy" 和 "happy" 可能具有完全不同的語意，但 TF-IDF 會給它們類似的權重。
* 無法捕捉語義關聯：如 "apple" 和 "banana" 仍然無法建立語義上的聯繫。
* 無法處理新詞或未見詞（OOV, Out-of-Vocabulary）

## Word2Vec：語意關聯的詞向量學習方法
Word2Vec 是 Google 在 2013 年提出的一種詞向量學習方法，與傳統的詞袋模型（BOW）和 TF-IDF 不同，Word2Vec 能夠捕捉單詞之間的語義關係，並將單詞映射到一個低維度、密集的連續向量空間。這使得語義相似的單詞在向量空間中距離更近，例如 "king" 和 "queen" 會具有相似的向量表示，而 "apple" 和 "banana" 也會靠近彼此。

Word2Vec 的主要目標是學習一個能夠將單詞轉換為向量的數學模型，使得這些向量能夠反映語義和詞的關係，例如 vector("king") − vector("man") + vector("woman") ≈ vector("queen")。
![image](https://hackmd.io/_uploads/SJTGRXO5yl.png)


Word2Vec 通常使用神經網絡模型來學習詞向量，並且主要有兩種訓練方法：

![image](https://hackmd.io/_uploads/rJJPxNOq1e.png)

### CBOW（Continuous Bag of Words）
CBOW 的基本思想是：根據上下文來預測中心詞。給定一個句子，CBOW 會使用周圍的單詞作為輸入，來預測中心詞。

例如，在以下句子中： "I love eating delicious apples in the morning." 如果選擇 "apples" 為目標詞（中心詞），則 CBOW 可能會使用它的上下文詞 "eating"、"delicious"、"in"、"the" 來進行預測： 

P("apples"∣"eating", "delicious", "in", "the") 

#### 優點
* 適合小型數據集：CBOW 模型透過上下文來預測單詞，這使得它在較小的數據集上比 Skip-Gram 更穩定。
* 訓練速度較快：由於 CBOW 使用多個上下文詞來預測中心詞，因此在相同的計算資源下，CBOW 模型通常比 Skip-Gram 訓練得更快。
#### 缺點
* 對低頻詞的學習效果較差：由於 CBOW 是基於上下文詞的平均值來學習中心詞的表示，它對於低頻詞的學習能力較弱。
* 可能會模糊多義詞的語境：例如 "bank" 可能表示 "銀行" 或 "河岸"，但 CBOW 可能無法區分這些不同的語境。

### Skip-Gram
Skip-Gram 與 CBOW 的主要區別在於 Skip-Gram 是根據中心詞來預測上下文詞，而 CBOW 則是根據上下文詞來預測中心詞。 

舉例來說，對於以下句子： "I love eating delicious apples in the morning." 如果選擇 "apples" 作為中心詞，Skip-Gram 會學習預測它的周圍詞 "eating"、"delicious"、"in"、"the"，即： 

P("eating"∣"apples"), P("delicious"∣"apples"), P("in"∣"apples")
#### 優點
* 適合大型數據集：Skip-Gram 在處理大規模語料時效果更好，特別是當語料庫包含許多罕見詞時。
* 對低頻詞的學習效果較佳：由於 Skip-Gram 會學習單詞與多個上下文詞之間的關係，因此它能夠更好地學習低頻詞的語義資訊。
* 對多義詞的學習能力更強：如果 "bank" 在不同的上下文中出現，Skip-Gram 會根據不同的上下文學習不同的詞向量，使其在語境理解方面更靈活。
#### 缺點
* 訓練速度較慢：由於 Skip-Gram 需要學習中心詞與每個上下文詞之間的關係，因此它的訓練時間比 CBOW 更長。
* 計算量較大：對於大規模語料庫，Skip-Gram 的計算開銷較大，可能需要更強的計算資源。
* 難以處理未見詞：如果測試語料中出現未見詞，則無法生成對應的向量。

:::info
雖然 Word2Vec 能夠為單詞學習高質量的詞向量，但在許多 NLP 應用中，我們需要處理的是整個句子、段落或文檔，而不是單獨的詞。而 AVG Word2Vec 能夠將任意長度的文本轉換為固定長度的向量，使其能夠更方便地應用於文本分類、資訊檢索、情感分析等任務。
:::
## Avg Word2Vec

AVG Word2Vec（Average Word2Vec）是一種將文本轉換為固定維度向量的技術，它基於 Word2Vec 訓練出的詞嵌入（Word Embedding），透過計算文本中所有詞向量的平均值，來獲得整個文本的語義表示，這種方法能夠將不同長度的文本轉換為固定大小的向量，並保持詞與詞之間的語意關係。

### 案例說明
假設我們有一個句子："I love natural language processing"，並且我們有一個 3 維的 Word2Vec 詞向量（實際應用中通常是 100 維、300 維或更高維度）：

![image](https://hackmd.io/_uploads/ByT5E4O9Jg.png)

:::info
Word2Vec 與 AVG Word2Vec 的比較
![image](https://hackmd.io/_uploads/SJZMrVu51g.png)
:::

---
:::info
以上就是這篇文章「詞向量（Word Embedding）」的所有內容，第一次看的人會花比較多時間消化吸收，這是很正常的事情，若有任何問題，歡迎在下方與我聯繫、討論，接下來也會繼續分享相關文章，敬請期待。