【個人上課筆記】2026 TAICA 自然語言處理 - 第四周

Hello Guys I’m LukeTseng. 本篇筆記主要紀錄跟統整上課內容,性質屬於個人學習用途,敬請斟酌參考,謝謝。

清大 MOOCS 2026 TAICA 自然語言處理課程網址:https://mooc.nthu.edu.tw/course/info/470

N-gram 的限制與挑戰

這節的流程大致上如下所示:

  1. 語言模型。
  2. 替文字序列計算機率。
  3. 使用困惑度評估模型。
  4. 以 Bigram 簡化機率計算。
  5. 分析 N-gram 的限制。

延續前面 Word2Vec 與文字表示的內容,開始從語言模型(Language Model, LM)的角度理解文字,課堂中提到兩類語言模型:

  1. N-gram Language Model:利用統計與條件機率建模。
  2. Neural Language Model:利用神經網路預測文字序列的可能性。

Language Models:什麼是語言模型?

能夠替一連串文字指定機率的模型,稱為語言模型。假設有一段文字 W=w1,w2,,wNW = w_1, w_2, \dots, w_N,則語言模型要處理的問題是 P(W)=P(w1,w2,,wN)P(W) = P(w_1, w_2, \dots, w_N) ,也就是評估「這串文字出現的可能性有多高」。

例如:

  • 「我今天來學校上課」通常具有較高的機率。
  • 「我今天學校上課來」通常具有較低的機率。

語言模型不是單純判斷句子「對或錯」,而是替不同文字序列分配不同的機率,越符合模型學過的語言規律,通常會得到越高的機率。

1. N-gram Language Model

N-gram 語言模型是以統計方式建立的語言模型,它會從語料庫中統計字詞共同出現的次數,再利用條件機率預測下一個字。

例如,語料庫中經常出現「今天上課」、「今天下雨」、「今天吃飯」,模型便能根據這些出現次數,估計 P(上課今天)P(上課∣今天) 以及 P(下雨今天)P(下雨∣今天) 哪一個比較高。

這類模型本身沒有使用神經網路,主要依靠計數、統計與條件機率。

2. Neural Language Model

神經語言模型(Neural Language Model)則使用神經網路學習文字中的模式,並預測文字序列的可能性。

兩者的目標相同,都是預測文字:根據前面的文字,預測下一個字可能是什麼。而差異主要在方法:

  • N-gram:使用語料中的統計次數與條件機率。
  • Neural Language Model:使用神經網路學習參數。

接下來此節主要聚焦於 N-gram 語言模型。

LM Evaluation:困惑度 Perplexity

困惑度(Perplexity, PPL)是用來量化語言模型表現的指標,公式:$$\text{Perplexity}(W) = P(w_1 w_2 \cdots w_N)^{-\frac{1}{N}}$$

公式可以分成三個部分理解:

1. P(w1w2wN)P(w_1w_2\cdots w_N):整個序列的機率

模型會替一整段文字計算機率,例如:W=「我今天來上課」,模型會依序考慮:

  • 「我」出現的機率。
  • 已經看到「我」之後,「今天」出現的機率。
  • 已經看到「我今天」之後,「來」出現的機率。
  • 已經看到「我今天來」之後,「上課」出現的機率。

可寫成這樣的條件機率:$$P(W) = P(w_1)P(w_2 \mid w_1)P(w_3 \mid w_1, w_2) \cdots P(w_N \mid w_1, \ldots, w_{N-1})$$

如果模型對每個實際出現的字都給出較高機率,整個序列的機率也會較高。

2. 將機率取倒數

P(w1w2wN)1NP(w_1 w_2 \cdots w_N)^{-\frac{1}{N}},負指數包含「取倒數」的概念,因此:

  • 序列機率越高,困惑度越低。
  • 序列機率越低,困惑度越高。

3. 1N\frac{1}{N}:消除句子長度的影響

一段文字越長,需要相乘的機率越多,整個序列的機率通常會越小。

因此,公式使用 NN 次方根,將結果平均到每一個字上,這樣衡量的便不是單純的整句機率,而是模型在每個預測位置上的平均困惑程度。

為什麼困惑度越低越好?

The lower the value of perplexity, the better the language modeling capability of the model.

即 PPL 越低,模型越能預測這段文字。

假設每一步模型都替正確答案分配機率 0.50.5,則 P(W)=0.5NP(W)=0.5^N ,代入困惑度 PPL(W)=(0.5N)N1=2PPL(W)=(0.5^N)−N1=2

這可以理解成模型在每一個位置上,平均像是在兩個可能選項之間做選擇。

如果困惑度是 1010,則能概念性地理解為,模型平均面對約十個同樣可能的選項,因此比困惑度為 22 時更加不確定。

困惑度的四種意義

1. 不確定性的衡量

困惑度衡量模型預測時的「不確定程度」或「不可預測程度」,例如「我今天……」後面可以接很多內容,例如:

  • 我今天來上課。
  • 我今天去餐廳。
  • 我今天要回家。
  • 我今天要寫作業。

如果模型認為很多選項都差不多,它就不知道該選哪一個,困惑度較高。

假如前文非常明確,例如模型在訓練語料中經常看到某種固定模式,它便容易集中機率在少數幾個字上,困惑度較低。

2. 平均分支因子(Average Branching Factor)

「分支」可以想像成每次產生下一個字時,模型面前可能存在多少條路,例如:

1
2
3
4
5
我今天要
├── 上課
├── 吃飯
├── 回家
└── 考試

可能的下一個字越多,而且機率越平均,模型越難選擇,困惑度越高。

若模型非常確定:

1
2
透明到可以看見水底的__
└── 石頭

大部分機率集中在某個合理答案上,平均分支數較少,困惑度便較低。所以困惑度又可以理解成模型在每一步平均覺得有多少個合理選項。

3. 模型表現的量化

困惑度能夠用數值評估模型是否掌握語料中的語言模式,模型訓練完成後,我們會得到:模型的參數、字詞之間的條件機率、對不同文字序列的預測機率等等。

但只看到這些參數時,我們不容易直接判斷模型訓練得好不好,所以可以輸入一段文字,觀察模型給出的困惑度。

例如,以大量 C 語言程式碼訓練的模型,通常比較熟悉 printf("Hello World!");,但給他 Python 程式碼 print("Hello World!") 模型可能較不熟悉這種模式,給實際字詞的機率較低,困惑度也可能較高;這代表模型學到的主要是 C 語言語料中的模式,而不是 Python 的模式。

4. 壓縮效率指標

困惑度可視為一種壓縮效率指標。因為原始訓練語料可能非常龐大,但訓練完成後,語料中的部分模式會被保存在模型參數中,這部分可以表示成這樣:$$\text{大量訓練語料} \xrightarrow{\text{訓練}} \text{模型參數}$$

只要保留模型參數,模型就能根據這些參數產生或預測符合原始語料模式的文字。

因此模型預測越準確,實際文字獲得的機率越高;模型的不確定性越低,困惑度越低。

這代表模型較有效率地將語料中的規律「壓縮」到參數中。

Bigram Language Model

完整的語言模型在預測第 nn 個字時,理論上會考慮前面所有文字:$$P(w_n∣w_1,w_2,…,w_{n−1})$$

例如,要預測句子中的下一個字 its water is so transparent that __,完整模型會考慮前面整段內容:P(theits water is so transparent that)P(\text{the}∣\text{its water is so transparent that}) ,但前面的內容可能非常長,機率計算會變得複雜。

Bigram 模型因此做了簡化:$$P(w_n \mid w_1, w_2, \ldots, w_{n-1}) \approx P(w_n \mid w_{n-1})$$

也就是預測下一個字時,只看前一個字。

在上面的例子可被簡化成 P(thethat)P(\text{the} ∣ \text{that}) 模型不再考慮 its water is so transparent,而只考慮最接近的前一個字 that

Markov Assumption:馬可夫假設

Bigram 模型背後使用的是馬可夫假設(Markov Assumption),在此馬可夫假設指的是:「預測下一個字時,只依賴最近的一個字,不考慮更早的文字。」,也就是未來的下一個字只由目前最近的字決定。

例如「我今天去學校上__」,Bigram 模型預測最後一個字時,只會用 P(wn)P(w_n ∣ \text{上}),不會用完整資訊 P(wn我今天去學校上)P(w_n ∣ \text{我今天去學校上})

這個假設並不代表自然語言真的只需要前一個字,而是為了讓模型可以用較簡單的方式計算。

人類理解文字時,顯然不可能永遠只看前一個字,所以 Bigram 是一個方便計算但非常簡化的假設。

Bigram 的機率如何從語料中取得?

拿到語料庫後,可以將文字切成兩兩相鄰的字詞。例如:我 今天 去 學校,可以切成:

  • 「我,今天」
  • 「今天,去」
  • 「去,學校」

接著計算每一組相鄰字詞出現的次數。

Bigram 條件機率可寫成:$$P(w_n \mid w_{n-1}) = \frac{\text{Count}(w_{n-1}, w_n)}{\text{Count}(w_{n-1})}$$

例如語料中:

  • 「今天上課」出現 5 次。
  • 「今天吃飯」出現 3 次。
  • 「今天下雨」出現 2 次。

「今天」總共出現於這些組合中 10 次,因此:$$P(\text{上課} \mid \text{今天}) = \frac{5}{10} = 0.5$$$$P(\text{吃飯} \mid \text{今天}) = \frac{3}{10} = 0.3$$$$P(\text{下雨} \mid \text{今天}) = \frac{2}{10} = 0.2$$

看到「今天」之後,模型會認為「上課」是三者中最可能出現的下一個詞。

N-gram 語言模型的缺點

1. 上下文範圍有限

Bigram 只看前一個字,Trigram 只看前兩個字,一般而言,N-gram 只會用最近的 N1N-1 個字,所以這讓它難以處理跨越較長距離的語言關係。

例如「我昨天在書店買了一本老師推薦、內容非常有趣的__。」這句,最後一個詞可能與很前面的「一本」或「書店」有關,但 Bigram 只看最後一個詞,可能無法掌握這種長距離關係。

所以 N 太小會導致可使用的上下文太短。

2. 資料稀疏與高時間、空間複雜度

為了解決上下文過短的問題,可以提高 NN,例如:

  • Bigram:看前 1 個字。
  • Trigram:看前 2 個字。
  • 4-gram:看前 3 個字。

NN 越大,可能出現的文字組合數量就會快速增加,假設詞彙表中有 VV 個詞,可能的 N-gram 組合數量在概念上可達 VNV^N,但會產生兩個問題:

  • 第一,許多可能的組合沒有在訓練語料中出現,無法取得可靠的統計次數,形成資料稀疏(Data Sparsity)。
  • 第二,需要記錄與計算的條件機率越來越多,時間與儲存空間的成本也越高。

因此這也形成一個矛盾:

  • N 太小會導致上下文不足。
  • N 太大又會讓資料稀疏、計算與儲存成本增加。

這是 N-gram 模型最核心的限制之一。

3. 忽略部分字序與上下文資訊

N-gram 並不是完全忽略字序,Bigram 仍然會區分:「我喜歡」、「喜歡我」,兩者的順序不同,會被當成不同的 Bigram。

這真正忽略的是,超出目前 N-gram 視窗之外的字序與上下文影響。

Bigram 假設 P(wnw1,,wn1)P(wnwn1)P(w_n \mid w_1, \ldots, w_{n-1}) \approx P(w_n \mid w_{n-1}),這等於假設只要知道前一個字,更早的字就不再影響下一個字,更精確的理解是:

  • 保留局部字序。
  • 忽略較遠距離的字序與上下文。
  • 將視窗之外的詞視為與目前預測無關。

4. 彈性較低

N-gram 模型是按照實際字詞組合進行統計,即使兩個詞意思相近,只要表面文字不同,就會被視為不同項目。

例如「開心」、「高興」兩者是近義詞,但傳統 N-gram 統計會把它們當成不同詞,不會自動認為兩者語意接近。

因此,當語句的表達方式改變,或者進入對話等變化較多的情境時,模型比較難靈活適應。

5. 罕見詞與未見詞

假設模型訓練時從來沒有看過某個詞,那麼傳統 N-gram 模型便沒有該詞的統計紀錄。例如訓練語料中從未出現「量子糾纏」這個字,則模型可能無法計算:P(糾纏量子)P(\text{糾纏} ∣ \text{量子}) ,因為這個組合的出現次數為零。

同樣的問題也可能出現在傳統 Word2Vec,若某個詞不在訓練時建立的詞彙表中,模型便沒有該詞對應的向量,也無法直接表示它。

因此,Rare/Unseen words 所問的是:當輸入中出現罕見詞,或模型訓練時完全沒有見過的詞,模型要如何處理?

就以這堂課而言,答案是:傳統 N-gram 與早期詞向量方法通常難以直接處理。

6. 新語境與新領域

同一個詞在不同領域中,可能具有不同的使用方式。例如 “mouse” 在一般生活語境指的是老鼠,而在電腦領域指的是滑鼠。

如果模型主要以動物相關文章訓練,它學到的「mouse」通常會與 cat, animal, cheese 等詞較相關。

但進入電腦領域後,「mouse」可能經常與 click, cursor, keyboard 一起出現。

此時,原本統計出的條件機率或詞語關係,未必適合新的領域。

7. N-gram 的預測結果是固定的

傳統 N-gram 模型建立完成後,條件機率是由訓練語料的計數決定的,例如:$$P(\text{上課} \mid \text{今天}) = \frac{\text{Count}(\text{今天}, \text{上課})}{\text{Count}(\text{今天})}$$

只要語料庫與計數不變,這個機率就不會改變。所以即使模型被放到新的使用情境中,它也不會自動調整,要改變模型,只能加入新語料、重新計數、重新計算條件機率或重新訓練模型。

這種特性稱為較「固定」的問題,模型不會隨後續應用自動改變,除非重新更新訓練資料或統計結果。

文字表示的傳統方法

Sparse Vectors:稀疏向量

在說明 N-gram 的問題後,回到較早期的文字表示方式:稀疏向量(Sparse Vector),稀疏向量的特徵是:向量維度很高,但大多數位置的值都是 00

例如詞彙表有 10,000 個詞,一篇文章便可以被表示成 10,000 維向量:x=[x1,x2,,x10000]x = [x_1, x_2, \dots, x_{10000}],每個維度對應一個詞。

假設詞彙表為 [apple,banana,cat,dog,school][\text{apple},\text{banana},\text{cat},\text{dog},\text{school}] ,而文章只有 apple 跟 dog,則它的簡化向量可能為 [1,0,0,1,0][1,0,0,1,0]

如果詞彙表非常大,而文章只包含少數詞,多數位置就是 00,所以稱為稀疏向量。在上課投影片列出兩種可產生這類向量的方法:

  1. TF-IDF
  2. PPMI(Positive Pointwise Mutual Information)

TF-IDF 複習

TF-IDF 是兩個部分的乘積:$$\text{TF-IDF}{i,j} = \text{TF}{i,j} \times \text{IDF}_i$$

  • ii:第 ii 個詞。
  • jj:第 jj 篇文件。
  • ni,jn_{i,j}:詞 ii 在文件 jj 中出現的次數。
  • DD:整個文件集合。

1. TF:Term Frequency

TFi,j=ni,jknk,j\text{TF}_{i,j} = \frac{n_{i,j}}{\sum_{k} n_{k,j}}

  • 分子 ni,jn_{i,j} 表示詞 ii 在文件 jj 中出現幾次。
  • 分母:knk,j\sum_kn_{k,j} 表示文件 jj 中所有詞的總數。

TF 衡量的是某個詞在這一篇文章中出現得有多頻繁,例如一篇文章共有 100 個詞,“AI” 出現 5 次:TF(AI)=5100=0.05\text{TF}(\text{AI}) = \frac{5}{100} = 0.05

TF 越高,代表該詞在這篇文章中越常出現。

2. IDF:Inverse Document Frequency

IDFi=lgD{j:tidj}\text{IDF}_i = \lg \frac{\vert{}D\vert{}}{\vert{}\{j : t_i \in d_j\}\vert{}}

  • D|D|:資料集中所有文件的數量。
  • j:tidj|{j:t_i\in d_j}|:包含詞 tit_i 的文件數量。

IDF 衡量的是這個詞在整個文件集合中是否具有鑑別力。假如一個詞出現在幾乎所有文章中,例如:the、is、of 這些詞通常無法有效區分文章主題,因此 IDF 較低。

反之,如果一個詞只出現在少數文章中,例如:quantum、transformer、mitochondria,這類詞比較能代表特定文章的內容,因此 IDF 較高。

這是詞的「鑑別性」或「特殊性」,出現於越少文件則 IDF 越高。

所以 TF-IDF 同時考慮在本篇文章中常出現+在其他文章中不常出現的詞,符合這兩個條件的詞,通常會得到較高權重。

TF-IDF 如何形成稀疏向量?

例句:An apple a day, keeps the doctors away.

假設完整詞彙表中包含非常多詞,每個詞都對應向量的一個維度 [,fan,,fapple,,fa,,fday,][\dots, f_{\text{an}}, \dots, f_{\text{apple}}, \dots, f_{\text{a}}, \dots, f_{\text{day}}, \dots]

  • fapplef_{\text{apple}} 是 apple 的 TF-IDF 權重。
  • fdayf_{\text{day}} 是 day 的 TF-IDF 權重。
  • fdoctorsf_{\text{doctors}} 是 doctors 的 TF-IDF 權重。

沒有出現在這個句子中的詞,其 TF 值為 00,因此 TF-IDF 也是 00。所以整個向量可能呈現 [0,0.31,0,0,0.48,0,0.26,0,][0,0.31,0,0,0.48,0,0.26,0,…],只有少數與句子中詞語對應的位置不是 00,其餘大多數位置都是 00,因此形成稀疏向量。

與 One-hot Vector 的關係

TF-IDF 類似「加權後的 One-hot Vector」,One-hot Vector 只有 0 跟 1,TF-IDF 則不是單純標示詞是否出現,而是替詞加入權重。

兩者共同點:

  • 維度通常等於詞彙表大小。
  • 每個維度對應一個詞。
  • 大部分位置可能為 00

差異:

  • One-hot:只有存在或不存在。
  • TF-IDF:反映詞在文件中的重要程度。

這是早期向量空間模型(Vector Space Model)常見的做法。

TF-IDF 前的文字前處理

文字前處理是 optional,也就是可選的,不是所有情況都一定要進行,在此提到兩種方式:

  1. Stemming
  2. Feature Selection

1. Stemming:詞幹提取

詞幹提取(Stemming)的目的,是移除詞語的字尾變化,使不同形式回到共同的基礎形式,例如:cats、catlike、catty 經過處理後,可能都被歸到 cat,這樣做的目的不是進行精確的語言學分析,而是減少不同詞形所造成的維度數量。

假設不做 Stemming,模型可能把 play、plays、played、playing 視為四個不同特徵,做完 Stemming 後,會統一視為 play,這樣能減少詞彙表大小,使計算更簡單,也稍微減輕稀疏問題。

2. Feature Selection:特徵選擇

特徵選擇(Feature Selection)是從所有詞中,只保留較重要的部分,在這邊有兩種做法。

第一種是依詞性篩選,例如只保留名詞跟動詞,並移除部分較不重要的詞,例如介系詞以及部分功能詞。

第二種是依統計方法篩選,例如:

  • 保留 TF-IDF 較高的詞。
  • 移除出現次數太少的詞。
  • 移除幾乎每篇文章都會出現的詞。

其目的都是減少不必要的維度。

假設原本詞彙表大小為 50,000,經過 Stemming 與 Feature Selection 後,可能只保留 10,000 個較重要的詞。

這樣可使後續計算更容易,也能節省處理大量稀疏特徵的成本。

稀疏向量的限制與降維概念

TF-IDF 雖然比單純 One-hot 更能表示詞的重要程度,但它仍然是高維度向量。假設詞典中有 100,000 個詞,每一篇文章的 TF-IDF 向量就是 100,000 維,即使其中只有幾百個位置不是 00,向量的理論維度仍然很高。

因此可以用投影(Projection)或映射(Mapping)方法,把高維資料轉換到固定的低維空間。

這與前面提到的 Word2Vec 有相似目的:不再用與整個詞彙表同樣大小的向量,而是用較小、固定維度表示字詞。

在這邊的課程就沒有具體描述投影方法,僅帶到這邊。

Distributional Hypothesis:分布假說

分布假說(Distributional Hypothesis)的核心敘述是:「出現在相似上下文中的詞,通常具有相似的意義。」

英文原文為:

Words that occur in similar contexts tend to have similar meanings.

NLP 不一定先查字典理解一個詞,而是觀察這個詞周圍經常出現哪些文字,再從上下文關係推測其意義。

例如這邊有兩個例句:

I enjoy coding and I do it everyday!
I like coding and I do it everyday!

兩個句子的結構幾乎完全相同:I ____ coding and I do it everyday.,差別只有 enjoy 跟 like 兩個詞。由於 enjoy 和 like 經常出現在相似的位置,周圍也接近相同的詞,因此模型可以推測它們的語意相近。

這裡的重點不是模型真正閱讀字典定義,而是透過詞語在語料中的分布情形,判斷詞語之間的相似性。

Surrounding Text 的意義

建模一個詞時,會觀察它周圍的文字(Surrounding Text)。

例如:

  • enjoy coding
  • like coding
  • enjoy music
  • like music

如果 enjoy 與 like 經常出現在相似的上下文中,那麼兩者與周圍詞語的統計關係也會接近。

因此後續可以利用共現次數、機率、Mutual Information(互資訊)、PPMI 等來衡量詞語與上下文之間的關係。

MI(Mutual Information):衡量兩個事件之間的關係

MI 是衡量兩個事件 xxyy 發生頻率的指標:$$I(x, y) = \log_2 \frac{P(x, y)}{P(x)P(y)}$$

  • P(x)P(x):事件 xx 單獨發生的機率。
  • P(y)P(y):事件 yy 單獨發生的機率。
  • P(x,y)P(x,y):事件 xxyy 共同發生的機率。
  • P(x)P(y)P(x)P(y):假設 xxyy 互相獨立時,兩者共同發生的預期機率。

這個公式比較的是:$$\frac{實際共同發生機率}{假設彼此無關時的共同發生機率}$$

透過「各自發生」與「共同發生」的機率,可以衡量兩個事件之間究竟有多強的關聯,若把事件換成詞語,就能衡量兩個詞是否經常一起出現。

三種結果的意義

  • P(x,y)>P(x)P(y)P(x, y) > P(x)P(y) 表示兩者實際共同出現得比獨立情況更頻繁,因此 I(x,y)>0I(x, y) > 0,兩者具有正向關聯。
  • P(x,y)=P(x)P(y)P(x, y) = P(x)P(y),則 I(x,y)=0I(x, y) = 0,代表兩者的共同出現大致符合獨立狀態,沒有明顯關聯。
  • P(x,y)<P(x)P(y)P(x, y) < P(x)P(y),則 I(x,y)<0I(x, y) < 0,代表兩者共同出現得比預期更少,呈現負向關係。

例如「清華」與「大學」經常共同出現,因此這兩個詞的關聯值通常會較高。另外原始計算可能得到負值,後續 PPMI 會把負值處理掉。

PMI:特定詞與上下文的關聯

PMI 是逐點互資訊(Pointwise Mutual Information)。

當指定目標詞 ww,即 Word,以及上下文詞 cc,即 Context,便可以寫成:$$\text{PMI}(w, c) = \log_2 \frac{P(w, c)}{P(w)P©}$$

也可以寫成:$$\text{PMI}(w, c) = I(w,c)$$

PMI 要回答的是:詞 ww 與上下文 cc 的共同出現程度,是否高於它們在彼此獨立時的預期?

假設語料中 cherry 本身不算非常常見、pie 也不是每一句都出現,但 cherry 與 pie 經常一起出現。

那麼 P(cherry,pie)P(\text{cherry}, \text{pie}),相對於 P(cherry)P(pie)P(\text{cherry})P(\text{pie}) 會明顯偏高,所以 PMI(cherry,pie)\text{PMI}(\text{cherry}, \text{pie}) 也會很高。

這表示 pie 是描述 cherry 時很有代表性的上下文。

PPMI:只保留正向關係

PPMI 是正向逐點互資訊(Positive Pointwise Mutual Information),公式為:$$\text{PPMI}(w, c) = \max (\text{PMI}(w, c), 0)$$

  • PMI 為正數:保留原值。
  • PMI 等於零:保留 00
  • PMI 為負數:改成 00

例如 PMI(w,c)=4.38PPMI(w,c)=4.38\text{PMI}(w, c) = 4.38 \Rightarrow \text{PPMI}(w, c) = 4.38,因為 PMI 正數,所以到了 PPMI 就不變。

PMI(w,c)=2.6PPMI(w,c)=0\text{PMI}(w, c) = -2.6 \Rightarrow \text{PPMI}(w, c) = 0 由於原本 PMI 是負的,所以到了 PPMI 就會變成 0。

建立共現次數矩陣

有四個目標詞 cherry、strawberry、digital、information,並選擇五個上下文維度:computer、data、result、pie、sugar。

這裡的「維度」是事先選擇的上下文詞,如何選擇這些維度,會與實際應用及哪些詞較重要有關。這個詞—上下文矩陣不一定是對稱的:列是想表示的目標詞,欄則是自行定義的上下文空間。

原始共現矩陣如下:

目標詞computerdataresultpiesugar詞總次數
cherry28944225486
strawberry001601980
digital1670168385543447
information332539723785137003

cherry 一共出現於 486 次共現紀錄中,其中有 442 次與 pie 共同出現。因此,單看次數就能初步看出:

  • cherry 與 pie 關係很近。
  • strawberry 與 pie、sugar 關係較近。
  • digital 與 computer、data 關係較近。
  • information 與 computer、data、result 關係較近。

這與前一段的分布假說相連,詞的意義可以透過它經常搭配的上下文來描述。

將次數轉為機率

所有共現次數總和為 11716,詞與上下文的聯合機率為 P(w,c)=Count(w,c)11716P(w, c) = \frac{\text{Count}(w, c)}{11716}

例如 cherry 與 pie 共同出現 442 次 P(cherry, pie)=442117160.0377P(\text{cherry, pie}) = \frac{442}{11716} \approx 0.0377

目標詞本身的邊際機率為 P(w)=Count(w)11716P(w) = \frac{\text{Count}(w)}{11716} ,所以 P(cherry)=486117160.0415P(\text{cherry}) = \frac{486}{11716} \approx 0.0415

而上下文詞的邊際機率則為 P(c)=Count(c)11716P(c) = \frac{\text{Count}(c)}{11716},因此 P(pie)=512117160.0437P(\text{pie}) = \frac{512}{11716} \approx 0.0437

接著即可把三個機率代入 PMI。

計算 PPMI 矩陣

例一:cherry 與 pie,PMI(cherry, pie)=log20.03770.0415×0.0437\text{PMI}(\text{cherry, pie}) = \log_2 \frac{0.0377}{0.0415 \times 0.0437}

計算結果約為 4.38,因為是正數,所以 PPMI(cherry,pie)=4.38\text{PPMI}(\text{cherry},\text{pie})=4.38,這表示 cherry 和 pie 的共同出現頻率,遠高於兩者在互相獨立情況下的預期值,因此關係很近。

例二:cherry 與 sugar,$$P(\text{cherry, sugar}) = 0.0021$$$$P(\text{cherry}) = 0.0415$$$$P(\text{sugar}) = 0.0052$$

代入 PMI(cherry, sugar)=log20.00210.0415×0.0052\text{PMI}(\text{cherry, sugar}) = \log_2 \frac{0.0021}{0.0415 \times 0.0052} 得到約 3.30,所以 PPMI(cherry,sugar)=3.30\text{PPMI}(\text{cherry},\text{sugar})=3.30

例三:cherry 與 computer,雖然 cherry 與 computer 有共同出現 2 次,但 computer 本身非常常見。所以其實際共現機率並沒有高於獨立情況下的預期,PMI 會得到負數。

經過 PPMI 後:PPMI(cherry,computer)=0\text{PPMI}(\text{cherry},\text{computer})=0,這也是為什麼 PPMI 不是單純看共現次數,而是會考慮詞本身有多常見、上下文本身有多常見、它們共同出現是否真的「異常頻繁」等等。

PPMI 矩陣如何變成詞向量?

最後得到的矩陣為:

目標詞computerdataresultpiesugar
cherry0004.383.30
strawberry0004.105.51
digital0.180.01000
information0.020.090.2800

每一列都可以直接當成一個詞向量。

例如 vcherry=(0,0,0,4.38,3.30)\mathbf{v}_{\text{cherry}} = (0, 0, 0, 4.38, 3.30),其五個維度依序代表 (computer,data,result,pie,sugar)(\text{computer}, \text{data}, \text{result}, \text{pie}, \text{sugar})

同樣地,vstrawberry=(0,0,0,4.10,5.51)\mathbf{v}_{\text{strawberry}} = (0, 0, 0, 4.10, 5.51) ,可以發現 cherry 與 strawberry 的向量形狀很相似,兩者都在 pie 與 sugar 維度上有較高數值。

相對於 vdigital=(0.18,0.01,0,0,0)\mathbf{v}_{\text{digital}} = (0.18, 0.01, 0, 0, 0) ,digital 主要落在 computer 和 data 相關的維度。

PPMI 利用共現關係,把每一個詞轉換成固定維度的數字表示,利用預先定義的維度空間,計算每個詞對各維度的關聯程度。

PPMI 向量為何仍是稀疏向量?

以 cherry 為例:(0,0,0,4.38,3.30)(0,0,0,4.38,3.30),五個維度中有三個是 00

如果實際使用幾萬個上下文詞作為維度,絕大多數詞只會與少部分上下文有明顯正向關聯,因此向量中仍會有大量 00,所以 PPMI 產生的通常仍是稀疏向量(Sparse Vector)。

它比單純共現次數更能反映詞與上下文的關聯強度,但若上下文維度很大,仍會面臨維度很高、多數位置為 00、儲存與計算成本較高等問題。

文字嵌入(Text Embedding)

稠密向量(Dense Vector)

稠密向量(Dense Vector)有:

  • 較低且固定的維度。
  • 多數位置都有數值。
  • 數值可以是正數、負數或小數。
  • 每個維度通常不是單一可直接解釋的詞。

例如:(0.21,0.47,0.83,0.16,)(0.21,−0.47,0.83,0.16,…)

稠密詞嵌入把詞放在一個連續向量空間(Continuous Vector Space)中,語意相似的詞會在向量空間中較接近。

例如「便宜」與「廉價」可能較接近;「便宜」與「天文學」則可能距離較遠。

而稠密向量大致分成兩類:

  1. Word2Vec 類型的固定詞嵌入。
  2. 語境化嵌入(Contextualized Embeddings)。

Word2Vec:同一個詞使用固定向量

Word2Vec 訓練完成後,每個詞會得到一個固定向量。

例如:vappleR300\mathbf{v}_\text{apple} \in \mathbb{R}^{300} ,不論 apple 出現在 I ate an apple.Apple released a new computer. 傳統 Word2Vec 中的 apple 都會使用同一個固定向量。

所以它無法根據句子判斷第一個 apple 是水果,而第二個 Apple 是公司,用同一組 300 維數字同時描述水果與公司,顯然會存在限制。

Contextualized Embeddings:根據上下文改變向量

語境化嵌入會根據詞的前後文,產生不同的向量,例如:vapple(水果語境)vApple(公司語境)\mathbf{v}_{\text{apple}}^{(\text{水果語境})} \neq \mathbf{v}_{\text{Apple}}^{(\text{公司語境})}

也就是說,同一個表面詞形會因所在句子不同,而得到不同表示,這條發展方向延伸到 BERT、大型語言模型(Large Language Models, LLMs)。

但在此只先建立「固定向量」與「依上下文改變的向量」之間的差別,尚未進一步解釋 BERT 的內部架構。

Embedding 的性質:類比與關係相似性

【個人上課筆記】2026 TAICA 自然語言處理 - 第四周 - Embedding 的性質:類比與關係相似性

Image Source:TAICA MOOCs | 自然語言處理 | 高宏宇老師 | 4-3 投影片

當詞被轉換成向量後,就可以進行向量運算。

這裡有個例子:vWashingtonvU.S.vLondonvU.K.\mathbf{v}_{\text{Washington}} - \mathbf{v}_{\text{U.S.}} \approx \mathbf{v}_{\text{London}} - \mathbf{v}_{\text{U.K.}}

這例子想表達的是:

  • Washington 與 U.S. 的關係。
  • London 與 U.K. 的關係。

兩者都是「國家與首都」的關係,移項後可寫成:vWashingtonvU.S.+vU.K.vLondon\mathbf{v}_{\text{Washington}} - \mathbf{v}_{\text{U.S.}} + \mathbf{v}_{\text{U.K.}} \approx \mathbf{v}_{\text{London}}

從「美國」走到「華盛頓」的向量方向,與從「英國」走到「倫敦」的方向相近。這表示詞向量不只可能保存「哪些詞相似」,也可能保存詞與詞之間的關係。

實際結果不會完美地形成投影片中的平行四邊形,而是計算後得到的點大致落在附近,這代表向量關係是一種近似,而不是精確等式。

Embedding 的性質:歷史語意

【個人上課筆記】2026 TAICA 自然語言處理 - 第四周 - Embedding 的性質:歷史語意

Image Source:TAICA MOOCs | 自然語言處理 | 高宏宇老師 | 4-3 投影片

詞嵌入也可以用來研究語意如何隨時間改變,稱為歷史語意(Historical Semantics)。

做法有以下這些:

  1. 蒐集不同年代的語料。
  2. 分別訓練各年代的詞向量。
  3. 比較同一個詞在不同時期附近有哪些詞。
  4. 觀察詞向量位置如何改變。

例如投影片中的 broadcast:

  1. 1850 年代較接近 spread、sow、seed。
  2. 1900 年代逐漸接近 newspapers、television。
  3. 1990 年代則可能與 radio、BBC 等概念接近。

這表示 broadcast 的主要使用語境會隨時代改變。

另一個例子是 network:

  1. 1920 年代:較接近 electricity、telegraph、wires。
  2. 1960 年代:逐漸接近 communication、computer、data。
  3. 1990 年代:接近 internet、email、TCP/IP、website。
  4. 2020 年代:可能接近 social media、cloud computing、blockchain、IoT。

因此,Embedding 不只是靜態的文字表示,也能用來觀察詞義漂移(Semantic Drift)。

例如「武漢」一詞:在 COVID-19 之前主要是地名;疫情後,相關文章使它更常與醫療、疾病等詞共同出現。這不是在判斷詞本身好壞,而是表示其語料中的共現關係發生改變。

也可以比較某位作家在不同創作時期的詞彙使用方式,觀察同一個詞在前期與後期作品中分別靠近哪些概念。這些研究都建立在「不同時期的共現關係會形成不同向量」的基礎上。

Word2Vec 的實際訓練條件

雖然 Word2Vec 的網路結構不複雜,但要訓練出品質較好的詞向量,通常需要足夠大的語料庫。

實際訓練可能需要數 GB,甚至約 10~20 GB 的文字資料,主要的困難不一定是運算量,而是大型語料的儲存、上傳與處理,例如在 Google Colab 中可能不容易直接處理如此龐大的資料。除此之外,訓練時還需要處理 Negative Sampling 等實作技巧。

如果要做練習的話,可能會採取兩種方式:

  1. 使用小型語料,體驗從頭訓練 Word2Vec。
  2. 使用已經訓練完成的 Word2Vec,進行詞向量分析。

重點不是一定要自行訓練大型模型,而是理解語料如何轉換成訓練資料,以及訓練完成後如何取得詞向量。

Word2Vec 是自我監督學習

Word2Vec 可以直接從原始語料中建立訓練資料,不需要人工逐筆標記答案,因為模型會利用滑動視窗(Sliding Window)切出中心詞、上下文詞、對應的輸入與輸出等等。

例如一句文字經過視窗切割後,語料本身便能提供中心詞與上下文之間的配對,因此 Word2Vec 可視為一種自我監督學習(Self-supervised Learning)。

也就是資料沒有由人類標記,但模型能從文字本身製造訓練標籤,訓練完成後,神經網路中間的權重矩陣便成為詞嵌入。

詞向量維度的取捨

Word2Vec 常使用約 300 維的詞向量。

增加維度通常可能讓模型保留更多資訊,實驗結果也可能稍微改善,但維度越大會帶來更高成本,如:

  • 模型參數增加。
  • 記憶體需求增加。
  • 訓練與推論計算增加。
  • 後續所有使用詞向量的任務都會變得更重。

維度並不是越大越好,而是需要衡量效果提升是否值得額外成本。一般情況下 300 維通常已經足夠使用。

從固定詞向量到動態文字表示

Word2Vec 的主要限制,是訓練完成後每個詞只有一組固定向量,即使同一個詞在不同句子中具有不同意思,其向量仍然不變。

這也是後來發展語境化嵌入(Contextualized Embeddings)的原因,語境化方法不只表示單一詞,而是根據整個句子或前後文,動態計算該詞目前的表示。

BERT、GPT 等模型便採用依上下文產生表示的方向。

表示能力與計算成本的取捨

語境化嵌入通常比固定詞向量更能處理多義詞與複雜語境,但每次遇到新的句子,都需要重新根據上下文計算向量。

方法表示方式成本
One-hot/關鍵字比對直接比對詞彙
TF-IDF統計詞的重要性較低
Word2Vec每個詞一個固定向量中等
Contextualized Embedding根據上下文動態產生向量較高

不是所有 NLP 任務都需要用大型語言模型,有些任務只需要比對固定詞彙,One-hot 或關鍵字方法即可;有些文件分類與檢索任務,TF-IDF 已能取得良好結果。

模型越複雜,通常表示能力越強,但不代表在所有問題上都最合適,應該要根據準確度、資料量、速度與成本選擇方法。

RAG 中的實務取捨

以檢索增強生成(Retrieval-Augmented Generation, RAG)為例,較完整的語意檢索通常會做:文件切片→轉換成 Sentence Embedding→儲存向量→進行相似度檢索。

這比單純關鍵字比對更能找出語意相近的文件,但如果文件庫很大,就需要處理大量文件向量的計算、向量索引與儲存、查詢時的相似度搜尋、系統延遲與維護成本等等。

當資料規模持續增加時,整套系統可能接近一個小型搜尋引擎,因此不能只考慮模型效果,也要考慮工程成本。

總整理

語言模型的概念

語言模型(Language Model, LM)用來替文字序列分配機率,衡量一段文字出現的可能性。

假設文字序列為 W=w1,w2,,wNW=w_1,w_2,\dots,w_N,則:

P(W)=P(w1,w2,,wN)P(W)=P(w_1,w_2,\dots,w_N)

語言模型不是判斷句子絕對正確或錯誤,而是:

  • 越符合語言規律的序列,機率通常越高。
  • 越不自然或少見的序列,機率通常越低。

主要可分為:

  • N-gram Language Model:利用語料計數與條件機率建模。
  • Neural Language Model:利用神經網路學習文字模式。

兩者的共同目標,都是根據前文預測下一個字詞。

文字序列的機率

根據機率的連鎖律(Chain Rule),完整序列機率為:

P(W)=P(w1)P(w2w1)P(wNw1,,wN1)P(W)=P(w_1)P(w_2\mid w_1)\cdots P(w_N\mid w_1,\dots,w_{N-1})

也就是每次預測下一個字時,理論上都需要考慮前面所有文字。

當模型對實際出現的字詞分配較高機率時,整個序列的機率也會較高。

困惑度

困惑度(Perplexity, PPL)是評估語言模型預測能力的指標:

PPL(W)=P(w1w2wN)1N\text{PPL}(W)=P(w_1w_2\cdots w_N)^{-\frac{1}{N}}

其意義為:

  • 序列機率越高,困惑度越低。
  • 序列機率越低,困惑度越高。
  • 使用 NN 次方根,可降低句子長度對結果的影響。

因此,困惑度越低,通常代表模型越能預測該文字序列

困惑度也可以理解為模型預測下一個字時,平均面對多少個合理選項。例如困惑度為 22,可概念性理解為每一步平均像是在兩個選項中選擇。

困惑度具有以下用途:

  1. 衡量模型預測時的不確定性。
  2. 表示平均分支因子(Average Branching Factor)。
  3. 量化模型對特定語料的掌握程度。
  4. 反映模型將語料規律壓縮至參數中的效率。

不同語料、詞彙表或斷詞方式下的困惑度不一定適合直接比較。

Bigram 模型

完整語言模型需要考慮所有前文:

P(wnw1,w2,,wn1)P(w_n\mid w_1,w_2,\dots,w_{n-1})

Bigram 模型將其簡化為:

P(wnw1,w2,,wn1)P(wnwn1)P(w_n\mid w_1,w_2,\dots,w_{n-1}) \approx P(w_n\mid w_{n-1})

也就是預測下一個字時,只考慮前一個字。

此簡化建立在馬可夫假設(Markov Assumption)上:下一個狀態只依賴目前最近的狀態,而不考慮更早的歷史資訊。

這並不代表自然語言真的只受前一個字影響,而是為了降低計算複雜度所做的近似。

Bigram 機率計算

Bigram 條件機率可由語料中的出現次數計算:

P(wnwn1)=Count(wn1,wn)Count(wn1)P(w_n\mid w_{n-1})=\frac{\text{Count}(w_{n-1},w_n)} {\text{Count}(w_{n-1})}

例如「今天上課」出現 55 次,而「今天」作為前一詞共出現 1010 次,則:

P(上課今天)=510=0.5P(\text{上課}\mid\text{今天})=\frac{5}{10}=0.5

模型會根據各種相鄰詞組的統計結果,判斷下一個詞的可能性。

N-gram 的主要限制

上下文範圍有限

N-gram 只能使用最近的 N1N-1 個詞:

  • Bigram:前一個詞。
  • Trigram:前兩個詞。
  • 4-gram:前三個詞。

因此不容易掌握長距離的語法或語意關係。

資料稀疏

若詞彙表大小為 VV,可能的 N-gram 組合數量在概念上可達 VNV^N

NN 增加時:

  • 大量詞組未曾出現在訓練語料中。
  • 未出現的組合會得到零次計數。
  • 統計機率的可靠性下降。

因此形成兩難:

  • NN 太小:上下文資訊不足。
  • NN 太大:資料稀疏與計算成本增加。

時間與空間成本高

N-gram 必須儲存大量詞組及其條件機率。隨著詞彙表和 NN 增大,所需的記憶體、儲存空間與查詢成本也會快速增加。

忽略遠距離字序

N-gram 並非完全忽略字序,而是:

  • 保留局部詞序。
  • 忽略視窗範圍以外的字序與上下文。
  • 假設較早出現的文字不再影響目前預測。

缺乏語意彈性

傳統 N-gram 依照表面文字進行統計,不會自動理解近義詞。

例如「開心」與「高興」雖然語意接近,但仍會被視為完全不同的詞。

難以處理罕見詞與未見詞

若詞語或詞組未在訓練語料中出現,其出現次數為零,模型便難以計算可靠機率。

這類問題包含:

  • Rare Words:出現次數很少的詞。
  • Unseen Words:訓練期間完全沒見過的詞。
  • Out-of-Vocabulary, OOV:不在模型詞彙表中的詞。

領域適應能力有限

相同詞語在不同領域可能具有不同用法。例如 mouse 在動物語料與電腦語料中具有不同含義。

若訓練語料與實際使用領域不同,原有的統計關係可能不再適用。

模型結果固定

N-gram 的條件機率由語料計數決定。只要語料與統計結果不變,預測機率就不會自動改變。

若要適應新資料,通常必須:

  • 加入新語料。
  • 重新統計次數。
  • 更新條件機率。
  • 重新訓練模型。

傳統文字表示方法

稀疏向量

稀疏向量(Sparse Vector)具有以下特徵:

  • 維度通常等於詞彙表大小。
  • 向量維度很高。
  • 大多數位置為 00
  • 每個維度通常對應一個明確詞語。

常見方法包括:

  • One-hot Vector。
  • TF-IDF。
  • PPMI。

TF-IDF

TF-IDF 用來衡量一個詞在特定文件中的重要程度:

TF-IDFi,j=TFi,j×IDFi\text{TF-IDF}_{i,j}=\text{TF}_{i,j}\times\text{IDF}_i

TF:詞頻

TFi,j=ni,jknk,j\text{TF}_{i,j}=\frac{n_{i,j}}{\sum_k n_{k,j}}

TF 衡量詞 ii 在文件 jj 中出現得有多頻繁。

IDF:逆文件頻率

IDFi=logDj:tidj\text{IDF}_i=\log\frac{|D|} {|{j:t_i\in d_j}|}

IDF 衡量詞語在整個文件集合中的鑑別能力:

  • 出現在大量文件中的詞,IDF 較低。
  • 只出現在少數文件中的詞,IDF 較高。

因此,TF-IDF 權重較高的詞通常同時符合:

  • 在目前文件中經常出現。
  • 在其他文件中相對少見。

TF-IDF 可視為加權後的 One-hot Vector:

  • One-hot:只表示詞是否存在。
  • TF-IDF:進一步表示詞的重要程度。

文字前處理

TF-IDF 前可選擇進行文字前處理。

詞幹提取

詞幹提取(Stemming)將不同詞形簡化為共同詞幹,例如:

  • play
  • plays
  • played
  • playing

可能統一表示為 play

其目的主要是縮小詞彙表並降低資料稀疏程度,不一定符合精確的語言學詞形。

特徵選擇

特徵選擇(Feature Selection)只保留較重要的詞,例如:

  • 保留特定詞性的詞。
  • 保留 TF-IDF 較高的詞。
  • 移除過於罕見的詞。
  • 移除幾乎所有文件都會出現的詞。

這能降低向量維度與後續計算成本。

稀疏向量的限制

即使大部分位置為 00,稀疏向量的理論維度仍可能非常高,造成:

  • 記憶體需求增加。
  • 儲存成本提高。
  • 相似度計算變慢。
  • 難以直接表示詞語之間的語意關係。

因此可透過投影或映射,將高維資料轉換為較低且固定維度的向量空間。

分布假說

分布假說(Distributional Hypothesis)的核心概念是:

出現在相似上下文中的詞,通常具有相似的意義。

模型不需要先知道詞典定義,而是觀察詞語周圍經常出現哪些文字。

enjoylike 經常出現在相似句型與上下文中,便可推測兩者語意接近。

詞語與上下文的關係可透過下列方式衡量:

  • 共現次數。
  • 條件機率。
  • 互資訊。
  • PMI。
  • PPMI。

MI 與 PMI

互資訊(Mutual Information, MI)衡量兩個事件之間的關聯程度:

I(x,y)=log2P(x,y)P(x)P(y)I(x,y)=\log_2\frac{P(x,y)}{P(x)P(y)}

其中:

  • P(x,y)P(x,y):兩個事件實際共同發生的機率。
  • P(x)P(y)P(x)P(y):假設兩事件彼此獨立時的預期共同機率。

結果可分為:

  • I(x,y)>0I(x,y)>0:共同出現高於預期,具有正向關聯。
  • I(x,y)=0I(x,y)=0:大致互相獨立。
  • I(x,y)<0I(x,y)<0:共同出現低於預期。

當事件指定為目標詞 ww 與上下文詞 cc 時,稱為逐點互資訊(Pointwise Mutual Information, PMI):

PMI(w,c)=log2P(w,c)P(w)P(c)\text{PMI}(w,c)=\log_2\frac{P(w,c)}{P(w)P(c)}

PMI 不只是計算兩個詞共同出現幾次,而是比較其實際共現頻率是否高於獨立情況下的預期。

PPMI

正向逐點互資訊(Positive Pointwise Mutual Information, PPMI)只保留正向關聯:

PPMI(w,c)=max(PMI(w,c),0)\text{PPMI}(w,c)=\max(\text{PMI}(w,c),0)

處理方式為:

  • PMI 為正數:保留原值。
  • PMI 為零:保留 00
  • PMI 為負數:轉換為 00

PPMI 可降低負向關係的干擾,保留較有代表性的詞語與上下文關聯。

PPMI 詞向量

建立詞—上下文矩陣後:

  • 每一列代表一個目標詞。
  • 每一欄代表一個上下文詞。
  • 每個元素代表該詞與上下文的 PPMI 值。

因此,每一列都可直接作為詞向量。

若兩個詞經常出現在相似上下文中,其 PPMI 向量也會具有相似形狀,符合分布假說。

不過,實際使用大量上下文詞時,多數關聯值仍會是 00,因此 PPMI 通常仍屬於高維度稀疏向量。

稠密向量

稠密向量(Dense Vector)通常具有:

  • 較低且固定的維度。
  • 大多數位置都有數值。
  • 數值可以是正數、負數或小數。
  • 單一維度通常沒有直接可解釋的詞義。

詞語會被放在連續向量空間(Continuous Vector Space)中,語意相近的詞,其向量距離通常較近。

固定詞嵌入與語境化嵌入

Word2Vec

Word2Vec 訓練完成後,每個詞只有一組固定向量。

例如 apple 無論代表水果或 Apple 公司,都會使用相同向量。因此,傳統 Word2Vec 難以處理多義詞。

語境化嵌入

語境化嵌入(Contextualized Embedding)會根據前後文動態產生向量:

vapple(水果語境)vApple(公司語境)\mathbf{v}*{\text{apple}}^{(\text{水果語境})} \neq \mathbf{v}*{\text{Apple}}^{(\text{公司語境})}

因此,同一個詞在不同句子中可以獲得不同表示。BERT、GPT 與大型語言模型皆沿用此發展方向。

詞向量的關係表示

詞向量不只可以表示語意相似度,也可能保存詞與詞之間的關係。

例如:

vWashingtonvU.S.+vU.K.vLondon\mathbf{v}_{\text{Washington}} - \mathbf{v}_{\text{U.S.}} + \mathbf{v}_{\text{U.K.}} \approx \mathbf{v}_{\text{London}}

兩組向量差都近似表示「國家到首都」的關係。

這些關係是統計上的近似,不是完全精確的數學等式。

歷史語意

詞嵌入也能用來研究詞義隨時間的變化,稱為歷史語意(Historical Semantics)或詞義漂移(Semantic Drift)。

基本流程為:

  1. 蒐集不同年代的語料。
  2. 分別訓練各年代的詞向量。
  3. 比較同一詞在不同年代附近的詞語。
  4. 觀察其主要使用語境如何變化。

例如 broadcast 可由早期的播撒種子,逐漸轉變為廣播、電視與媒體相關概念。

Word2Vec 的訓練特性

Word2Vec 的網路架構不複雜,但高品質詞向量通常需要大量語料。

實務上的主要成本包括:

  • 大型語料的蒐集與儲存。
  • 資料清理與前處理。
  • 訓練資料的建立。
  • Negative Sampling 等訓練技巧。
  • 運算與記憶體資源。

練習時可以:

  • 使用小型語料自行訓練。
  • 使用已訓練完成的詞向量進行分析。

自我監督學習

Word2Vec 不需要人工逐筆標記資料。

模型可以利用滑動視窗(Sliding Window),直接從原始文字建立:

  • 中心詞。
  • 上下文詞。
  • 模型輸入。
  • 預測目標。

因此,Word2Vec 可視為自我監督學習(Self-supervised Learning):模型從資料本身產生訓練標籤。

詞向量維度

Word2Vec 常使用約 300300 維的向量。

提高維度可能保留更多資訊,但也會增加:

  • 模型參數量。
  • 記憶體需求。
  • 訓練與推論成本。
  • 後續任務的運算量。

因此,向量維度並非越大越好,而是需要在表示能力與成本之間取得平衡。

不同文字表示方法的取捨

方法表示方式計算成本主要限制
One-hot/關鍵字比對直接表示詞是否出現無法表示語意相似性
TF-IDF表示詞在文件中的重要程度較低高維且稀疏
PPMI表示詞與上下文的正向關聯中低高維且稀疏
Word2Vec每個詞使用固定稠密向量中等無法依語境處理多義詞
Contextualized Embedding根據上下文動態產生向量較高計算與部署成本較高

方法越複雜,通常表示能力越強,但不代表適用於所有問題。

實務上應考量:

  • 任務準確度需求。
  • 可用資料量。
  • 訓練與推論速度。
  • 記憶體與儲存成本。
  • 系統延遲。
  • 維護難度。

簡單關鍵字比對或文件分類不一定需要大型語言模型;某些情況下 TF-IDF 已能提供足夠效果。

RAG 的實務成本

檢索增強生成(Retrieval-Augmented Generation, RAG)的語意檢索流程通常為:

  1. 將文件切片。
  2. 將文字轉換成句子嵌入(Sentence Embedding)。
  3. 將向量儲存至索引或向量資料庫。
  4. 計算查詢與文件向量的相似度。
  5. 取回相關內容交給生成模型。

相較於關鍵字比對,向量檢索能找到文字不同但語意相近的文件。

然而,當文件規模增加時,系統還必須處理:

  • 大量嵌入向量的產生。
  • 向量索引與儲存。
  • 相似度搜尋效率。
  • 查詢延遲。
  • 資料更新。
  • 系統維護成本。

當資料規模足夠大時,RAG 系統可能接近一套小型搜尋引擎。因此,設計 NLP 系統時不能只追求模型效果,也必須衡量整體工程成本。