【個人上課筆記】2026 TAICA 自然語言處理 - 第四周
【個人上課筆記】2026 TAICA 自然語言處理 - 第四周
Hello Guys I’m LukeTseng. 本篇筆記主要紀錄跟統整上課內容,性質屬於個人學習用途,敬請斟酌參考,謝謝。
清大 MOOCS 2026 TAICA 自然語言處理課程網址:https://mooc.nthu.edu.tw/course/info/470
N-gram 的限制與挑戰
這節的流程大致上如下所示:
- 語言模型。
- 替文字序列計算機率。
- 使用困惑度評估模型。
- 以 Bigram 簡化機率計算。
- 分析 N-gram 的限制。
延續前面 Word2Vec 與文字表示的內容,開始從語言模型(Language Model, LM)的角度理解文字,課堂中提到兩類語言模型:
- N-gram Language Model:利用統計與條件機率建模。
- Neural Language Model:利用神經網路預測文字序列的可能性。
Language Models:什麼是語言模型?
能夠替一連串文字指定機率的模型,稱為語言模型。假設有一段文字 ,則語言模型要處理的問題是 ,也就是評估「這串文字出現的可能性有多高」。
例如:
- 「我今天來學校上課」通常具有較高的機率。
- 「我今天學校上課來」通常具有較低的機率。
語言模型不是單純判斷句子「對或錯」,而是替不同文字序列分配不同的機率,越符合模型學過的語言規律,通常會得到越高的機率。
1. N-gram Language Model
N-gram 語言模型是以統計方式建立的語言模型,它會從語料庫中統計字詞共同出現的次數,再利用條件機率預測下一個字。
例如,語料庫中經常出現「今天上課」、「今天下雨」、「今天吃飯」,模型便能根據這些出現次數,估計 以及 哪一個比較高。
這類模型本身沒有使用神經網路,主要依靠計數、統計與條件機率。
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. :整個序列的機率
模型會替一整段文字計算機率,例如: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. 將機率取倒數
,負指數包含「取倒數」的概念,因此:
- 序列機率越高,困惑度越低。
- 序列機率越低,困惑度越高。
3. :消除句子長度的影響
一段文字越長,需要相乘的機率越多,整個序列的機率通常會越小。
因此,公式使用 次方根,將結果平均到每一個字上,這樣衡量的便不是單純的整句機率,而是模型在每個預測位置上的平均困惑程度。
為什麼困惑度越低越好?
The lower the value of perplexity, the better the language modeling capability of the model.
即 PPL 越低,模型越能預測這段文字。
假設每一步模型都替正確答案分配機率 ,則 ,代入困惑度
這可以理解成模型在每一個位置上,平均像是在兩個可能選項之間做選擇。
如果困惑度是 ,則能概念性地理解為,模型平均面對約十個同樣可能的選項,因此比困惑度為 時更加不確定。
困惑度的四種意義
1. 不確定性的衡量
困惑度衡量模型預測時的「不確定程度」或「不可預測程度」,例如「我今天……」後面可以接很多內容,例如:
- 我今天來上課。
- 我今天去餐廳。
- 我今天要回家。
- 我今天要寫作業。
如果模型認為很多選項都差不多,它就不知道該選哪一個,困惑度較高。
假如前文非常明確,例如模型在訓練語料中經常看到某種固定模式,它便容易集中機率在少數幾個字上,困惑度較低。
2. 平均分支因子(Average Branching Factor)
「分支」可以想像成每次產生下一個字時,模型面前可能存在多少條路,例如:
1 | 我今天要 |
可能的下一個字越多,而且機率越平均,模型越難選擇,困惑度越高。
若模型非常確定:
1 | 透明到可以看見水底的__ |
大部分機率集中在某個合理答案上,平均分支數較少,困惑度便較低。所以困惑度又可以理解成模型在每一步平均覺得有多少個合理選項。
3. 模型表現的量化
困惑度能夠用數值評估模型是否掌握語料中的語言模式,模型訓練完成後,我們會得到:模型的參數、字詞之間的條件機率、對不同文字序列的預測機率等等。
但只看到這些參數時,我們不容易直接判斷模型訓練得好不好,所以可以輸入一段文字,觀察模型給出的困惑度。
例如,以大量 C 語言程式碼訓練的模型,通常比較熟悉 printf("Hello World!");,但給他 Python 程式碼 print("Hello World!") 模型可能較不熟悉這種模式,給實際字詞的機率較低,困惑度也可能較高;這代表模型學到的主要是 C 語言語料中的模式,而不是 Python 的模式。
4. 壓縮效率指標
困惑度可視為一種壓縮效率指標。因為原始訓練語料可能非常龐大,但訓練完成後,語料中的部分模式會被保存在模型參數中,這部分可以表示成這樣:$$\text{大量訓練語料} \xrightarrow{\text{訓練}} \text{模型參數}$$
只要保留模型參數,模型就能根據這些參數產生或預測符合原始語料模式的文字。
因此模型預測越準確,實際文字獲得的機率越高;模型的不確定性越低,困惑度越低。
這代表模型較有效率地將語料中的規律「壓縮」到參數中。
Bigram Language Model
完整的語言模型在預測第 個字時,理論上會考慮前面所有文字:$$P(w_n∣w_1,w_2,…,w_{n−1})$$
例如,要預測句子中的下一個字 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})$$
也就是預測下一個字時,只看前一個字。
在上面的例子可被簡化成 模型不再考慮 its water is so transparent,而只考慮最接近的前一個字 that。
Markov Assumption:馬可夫假設
Bigram 模型背後使用的是馬可夫假設(Markov Assumption),在此馬可夫假設指的是:「預測下一個字時,只依賴最近的一個字,不考慮更早的文字。」,也就是未來的下一個字只由目前最近的字決定。
例如「我今天去學校上__」,Bigram 模型預測最後一個字時,只會用 ,不會用完整資訊 。
這個假設並不代表自然語言真的只需要前一個字,而是為了讓模型可以用較簡單的方式計算。
人類理解文字時,顯然不可能永遠只看前一個字,所以 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 只會用最近的 個字,所以這讓它難以處理跨越較長距離的語言關係。
例如「我昨天在書店買了一本老師推薦、內容非常有趣的__。」這句,最後一個詞可能與很前面的「一本」或「書店」有關,但 Bigram 只看最後一個詞,可能無法掌握這種長距離關係。
所以 N 太小會導致可使用的上下文太短。
2. 資料稀疏與高時間、空間複雜度
為了解決上下文過短的問題,可以提高 ,例如:
- Bigram:看前 1 個字。
- Trigram:看前 2 個字。
- 4-gram:看前 3 個字。
但 越大,可能出現的文字組合數量就會快速增加,假設詞彙表中有 個詞,可能的 N-gram 組合數量在概念上可達 ,但會產生兩個問題:
- 第一,許多可能的組合沒有在訓練語料中出現,無法取得可靠的統計次數,形成資料稀疏(Data Sparsity)。
- 第二,需要記錄與計算的條件機率越來越多,時間與儲存空間的成本也越高。
因此這也形成一個矛盾:
- N 太小會導致上下文不足。
- N 太大又會讓資料稀疏、計算與儲存成本增加。
這是 N-gram 模型最核心的限制之一。
3. 忽略部分字序與上下文資訊
N-gram 並不是完全忽略字序,Bigram 仍然會區分:「我喜歡」、「喜歡我」,兩者的順序不同,會被當成不同的 Bigram。
這真正忽略的是,超出目前 N-gram 視窗之外的字序與上下文影響。
Bigram 假設 ,這等於假設只要知道前一個字,更早的字就不再影響下一個字,更精確的理解是:
- 保留局部字序。
- 忽略較遠距離的字序與上下文。
- 將視窗之外的詞視為與目前預測無關。
4. 彈性較低
N-gram 模型是按照實際字詞組合進行統計,即使兩個詞意思相近,只要表面文字不同,就會被視為不同項目。
例如「開心」、「高興」兩者是近義詞,但傳統 N-gram 統計會把它們當成不同詞,不會自動認為兩者語意接近。
因此,當語句的表達方式改變,或者進入對話等變化較多的情境時,模型比較難靈活適應。
5. 罕見詞與未見詞
假設模型訓練時從來沒有看過某個詞,那麼傳統 N-gram 模型便沒有該詞的統計紀錄。例如訓練語料中從未出現「量子糾纏」這個字,則模型可能無法計算: ,因為這個組合的出現次數為零。
同樣的問題也可能出現在傳統 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),稀疏向量的特徵是:向量維度很高,但大多數位置的值都是 。
例如詞彙表有 10,000 個詞,一篇文章便可以被表示成 10,000 維向量:,每個維度對應一個詞。
假設詞彙表為 ,而文章只有 apple 跟 dog,則它的簡化向量可能為 。
如果詞彙表非常大,而文章只包含少數詞,多數位置就是 ,所以稱為稀疏向量。在上課投影片列出兩種可產生這類向量的方法:
- TF-IDF
- PPMI(Positive Pointwise Mutual Information)
TF-IDF 複習
TF-IDF 是兩個部分的乘積:$$\text{TF-IDF}{i,j} = \text{TF}{i,j} \times \text{IDF}_i$$
- :第 個詞。
- :第 篇文件。
- :詞 在文件 中出現的次數。
- :整個文件集合。
1. TF:Term Frequency
- 分子 表示詞 在文件 中出現幾次。
- 分母: 表示文件 中所有詞的總數。
TF 衡量的是某個詞在這一篇文章中出現得有多頻繁,例如一篇文章共有 100 個詞,“AI” 出現 5 次:
TF 越高,代表該詞在這篇文章中越常出現。
2. IDF:Inverse Document Frequency
- :資料集中所有文件的數量。
- :包含詞 的文件數量。
IDF 衡量的是這個詞在整個文件集合中是否具有鑑別力。假如一個詞出現在幾乎所有文章中,例如:the、is、of 這些詞通常無法有效區分文章主題,因此 IDF 較低。
反之,如果一個詞只出現在少數文章中,例如:quantum、transformer、mitochondria,這類詞比較能代表特定文章的內容,因此 IDF 較高。
這是詞的「鑑別性」或「特殊性」,出現於越少文件則 IDF 越高。
所以 TF-IDF 同時考慮在本篇文章中常出現+在其他文章中不常出現的詞,符合這兩個條件的詞,通常會得到較高權重。
TF-IDF 如何形成稀疏向量?
例句:An apple a day, keeps the doctors away.
假設完整詞彙表中包含非常多詞,每個詞都對應向量的一個維度 。
- 是 apple 的 TF-IDF 權重。
- 是 day 的 TF-IDF 權重。
- 是 doctors 的 TF-IDF 權重。
沒有出現在這個句子中的詞,其 TF 值為 ,因此 TF-IDF 也是 。所以整個向量可能呈現 ,只有少數與句子中詞語對應的位置不是 ,其餘大多數位置都是 ,因此形成稀疏向量。
與 One-hot Vector 的關係
TF-IDF 類似「加權後的 One-hot Vector」,One-hot Vector 只有 0 跟 1,TF-IDF 則不是單純標示詞是否出現,而是替詞加入權重。
兩者共同點:
- 維度通常等於詞彙表大小。
- 每個維度對應一個詞。
- 大部分位置可能為 。
差異:
- One-hot:只有存在或不存在。
- TF-IDF:反映詞在文件中的重要程度。
這是早期向量空間模型(Vector Space Model)常見的做法。
TF-IDF 前的文字前處理
文字前處理是 optional,也就是可選的,不是所有情況都一定要進行,在此提到兩種方式:
- Stemming
- 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 維,即使其中只有幾百個位置不是 ,向量的理論維度仍然很高。
因此可以用投影(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 是衡量兩個事件 和 發生頻率的指標:$$I(x, y) = \log_2 \frac{P(x, y)}{P(x)P(y)}$$
- :事件 單獨發生的機率。
- :事件 單獨發生的機率。
- :事件 與 共同發生的機率。
- :假設 與 互相獨立時,兩者共同發生的預期機率。
這個公式比較的是:$$\frac{實際共同發生機率}{假設彼此無關時的共同發生機率}$$
透過「各自發生」與「共同發生」的機率,可以衡量兩個事件之間究竟有多強的關聯,若把事件換成詞語,就能衡量兩個詞是否經常一起出現。
三種結果的意義
- 若 表示兩者實際共同出現得比獨立情況更頻繁,因此 ,兩者具有正向關聯。
- 若 ,則 ,代表兩者的共同出現大致符合獨立狀態,沒有明顯關聯。
- 若 ,則 ,代表兩者共同出現得比預期更少,呈現負向關係。
例如「清華」與「大學」經常共同出現,因此這兩個詞的關聯值通常會較高。另外原始計算可能得到負值,後續 PPMI 會把負值處理掉。
PMI:特定詞與上下文的關聯
PMI 是逐點互資訊(Pointwise Mutual Information)。
當指定目標詞 ,即 Word,以及上下文詞 ,即 Context,便可以寫成:$$\text{PMI}(w, c) = \log_2 \frac{P(w, c)}{P(w)P©}$$
也可以寫成:$$\text{PMI}(w, c) = I(w,c)$$
PMI 要回答的是:詞 與上下文 的共同出現程度,是否高於它們在彼此獨立時的預期?
假設語料中 cherry 本身不算非常常見、pie 也不是每一句都出現,但 cherry 與 pie 經常一起出現。
那麼 ,相對於 會明顯偏高,所以 也會很高。
這表示 pie 是描述 cherry 時很有代表性的上下文。
PPMI:只保留正向關係
PPMI 是正向逐點互資訊(Positive Pointwise Mutual Information),公式為:$$\text{PPMI}(w, c) = \max (\text{PMI}(w, c), 0)$$
- PMI 為正數:保留原值。
- PMI 等於零:保留 。
- PMI 為負數:改成 。
例如 ,因為 PMI 正數,所以到了 PPMI 就不變。
但 由於原本 PMI 是負的,所以到了 PPMI 就會變成 0。
建立共現次數矩陣
有四個目標詞 cherry、strawberry、digital、information,並選擇五個上下文維度:computer、data、result、pie、sugar。
這裡的「維度」是事先選擇的上下文詞,如何選擇這些維度,會與實際應用及哪些詞較重要有關。這個詞—上下文矩陣不一定是對稱的:列是想表示的目標詞,欄則是自行定義的上下文空間。
原始共現矩陣如下:
| 目標詞 | computer | data | result | pie | sugar | 詞總次數 |
|---|---|---|---|---|---|---|
| cherry | 2 | 8 | 9 | 442 | 25 | 486 |
| strawberry | 0 | 0 | 1 | 60 | 19 | 80 |
| digital | 1670 | 1683 | 85 | 5 | 4 | 3447 |
| information | 3325 | 3972 | 378 | 5 | 13 | 7003 |
cherry 一共出現於 486 次共現紀錄中,其中有 442 次與 pie 共同出現。因此,單看次數就能初步看出:
- cherry 與 pie 關係很近。
- strawberry 與 pie、sugar 關係較近。
- digital 與 computer、data 關係較近。
- information 與 computer、data、result 關係較近。
這與前一段的分布假說相連,詞的意義可以透過它經常搭配的上下文來描述。
將次數轉為機率
所有共現次數總和為 11716,詞與上下文的聯合機率為 。
例如 cherry 與 pie 共同出現 442 次 。
目標詞本身的邊際機率為 ,所以 。
而上下文詞的邊際機率則為 ,因此 。
接著即可把三個機率代入 PMI。
計算 PPMI 矩陣
例一:cherry 與 pie,。
計算結果約為 4.38,因為是正數,所以 ,這表示 cherry 和 pie 的共同出現頻率,遠高於兩者在互相獨立情況下的預期值,因此關係很近。
例二:cherry 與 sugar,$$P(\text{cherry, sugar}) = 0.0021$$$$P(\text{cherry}) = 0.0415$$$$P(\text{sugar}) = 0.0052$$
代入 得到約 3.30,所以 。
例三:cherry 與 computer,雖然 cherry 與 computer 有共同出現 2 次,但 computer 本身非常常見。所以其實際共現機率並沒有高於獨立情況下的預期,PMI 會得到負數。
經過 PPMI 後:,這也是為什麼 PPMI 不是單純看共現次數,而是會考慮詞本身有多常見、上下文本身有多常見、它們共同出現是否真的「異常頻繁」等等。
PPMI 矩陣如何變成詞向量?
最後得到的矩陣為:
| 目標詞 | computer | data | result | pie | sugar |
|---|---|---|---|---|---|
| cherry | 0 | 0 | 0 | 4.38 | 3.30 |
| strawberry | 0 | 0 | 0 | 4.10 | 5.51 |
| digital | 0.18 | 0.01 | 0 | 0 | 0 |
| information | 0.02 | 0.09 | 0.28 | 0 | 0 |
每一列都可以直接當成一個詞向量。
例如 ,其五個維度依序代表 。
同樣地, ,可以發現 cherry 與 strawberry 的向量形狀很相似,兩者都在 pie 與 sugar 維度上有較高數值。
相對於 ,digital 主要落在 computer 和 data 相關的維度。
PPMI 利用共現關係,把每一個詞轉換成固定維度的數字表示,利用預先定義的維度空間,計算每個詞對各維度的關聯程度。
PPMI 向量為何仍是稀疏向量?
以 cherry 為例:,五個維度中有三個是 。
如果實際使用幾萬個上下文詞作為維度,絕大多數詞只會與少部分上下文有明顯正向關聯,因此向量中仍會有大量 ,所以 PPMI 產生的通常仍是稀疏向量(Sparse Vector)。
它比單純共現次數更能反映詞與上下文的關聯強度,但若上下文維度很大,仍會面臨維度很高、多數位置為 、儲存與計算成本較高等問題。
文字嵌入(Text Embedding)
稠密向量(Dense Vector)
稠密向量(Dense Vector)有:
- 較低且固定的維度。
- 多數位置都有數值。
- 數值可以是正數、負數或小數。
- 每個維度通常不是單一可直接解釋的詞。
例如:。
稠密詞嵌入把詞放在一個連續向量空間(Continuous Vector Space)中,語意相似的詞會在向量空間中較接近。
例如「便宜」與「廉價」可能較接近;「便宜」與「天文學」則可能距離較遠。
而稠密向量大致分成兩類:
- Word2Vec 類型的固定詞嵌入。
- 語境化嵌入(Contextualized Embeddings)。
Word2Vec:同一個詞使用固定向量
Word2Vec 訓練完成後,每個詞會得到一個固定向量。
例如: ,不論 apple 出現在 I ate an apple. 或 Apple released a new computer. 傳統 Word2Vec 中的 apple 都會使用同一個固定向量。
所以它無法根據句子判斷第一個 apple 是水果,而第二個 Apple 是公司,用同一組 300 維數字同時描述水果與公司,顯然會存在限制。
Contextualized Embeddings:根據上下文改變向量
語境化嵌入會根據詞的前後文,產生不同的向量,例如:
也就是說,同一個表面詞形會因所在句子不同,而得到不同表示,這條發展方向延伸到 BERT、大型語言模型(Large Language Models, LLMs)。
但在此只先建立「固定向量」與「依上下文改變的向量」之間的差別,尚未進一步解釋 BERT 的內部架構。
Embedding 的性質:類比與關係相似性

Image Source:TAICA MOOCs | 自然語言處理 | 高宏宇老師 | 4-3 投影片
當詞被轉換成向量後,就可以進行向量運算。
這裡有個例子:
這例子想表達的是:
- Washington 與 U.S. 的關係。
- London 與 U.K. 的關係。
兩者都是「國家與首都」的關係,移項後可寫成:。
從「美國」走到「華盛頓」的向量方向,與從「英國」走到「倫敦」的方向相近。這表示詞向量不只可能保存「哪些詞相似」,也可能保存詞與詞之間的關係。
實際結果不會完美地形成投影片中的平行四邊形,而是計算後得到的點大致落在附近,這代表向量關係是一種近似,而不是精確等式。
Embedding 的性質:歷史語意

Image Source:TAICA MOOCs | 自然語言處理 | 高宏宇老師 | 4-3 投影片
詞嵌入也可以用來研究語意如何隨時間改變,稱為歷史語意(Historical Semantics)。
做法有以下這些:
- 蒐集不同年代的語料。
- 分別訓練各年代的詞向量。
- 比較同一個詞在不同時期附近有哪些詞。
- 觀察詞向量位置如何改變。
例如投影片中的 broadcast:
- 1850 年代較接近 spread、sow、seed。
- 1900 年代逐漸接近 newspapers、television。
- 1990 年代則可能與 radio、BBC 等概念接近。
這表示 broadcast 的主要使用語境會隨時代改變。
另一個例子是 network:
- 1920 年代:較接近 electricity、telegraph、wires。
- 1960 年代:逐漸接近 communication、computer、data。
- 1990 年代:接近 internet、email、TCP/IP、website。
- 2020 年代:可能接近 social media、cloud computing、blockchain、IoT。
因此,Embedding 不只是靜態的文字表示,也能用來觀察詞義漂移(Semantic Drift)。
例如「武漢」一詞:在 COVID-19 之前主要是地名;疫情後,相關文章使它更常與醫療、疾病等詞共同出現。這不是在判斷詞本身好壞,而是表示其語料中的共現關係發生改變。
也可以比較某位作家在不同創作時期的詞彙使用方式,觀察同一個詞在前期與後期作品中分別靠近哪些概念。這些研究都建立在「不同時期的共現關係會形成不同向量」的基礎上。
Word2Vec 的實際訓練條件
雖然 Word2Vec 的網路結構不複雜,但要訓練出品質較好的詞向量,通常需要足夠大的語料庫。
實際訓練可能需要數 GB,甚至約 10~20 GB 的文字資料,主要的困難不一定是運算量,而是大型語料的儲存、上傳與處理,例如在 Google Colab 中可能不容易直接處理如此龐大的資料。除此之外,訓練時還需要處理 Negative Sampling 等實作技巧。
如果要做練習的話,可能會採取兩種方式:
- 使用小型語料,體驗從頭訓練 Word2Vec。
- 使用已經訓練完成的 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)用來替文字序列分配機率,衡量一段文字出現的可能性。
假設文字序列為 ,則:
語言模型不是判斷句子絕對正確或錯誤,而是:
- 越符合語言規律的序列,機率通常越高。
- 越不自然或少見的序列,機率通常越低。
主要可分為:
- N-gram Language Model:利用語料計數與條件機率建模。
- Neural Language Model:利用神經網路學習文字模式。
兩者的共同目標,都是根據前文預測下一個字詞。
文字序列的機率
根據機率的連鎖律(Chain Rule),完整序列機率為:
也就是每次預測下一個字時,理論上都需要考慮前面所有文字。
當模型對實際出現的字詞分配較高機率時,整個序列的機率也會較高。
困惑度
困惑度(Perplexity, PPL)是評估語言模型預測能力的指標:
其意義為:
- 序列機率越高,困惑度越低。
- 序列機率越低,困惑度越高。
- 使用 次方根,可降低句子長度對結果的影響。
因此,困惑度越低,通常代表模型越能預測該文字序列。
困惑度也可以理解為模型預測下一個字時,平均面對多少個合理選項。例如困惑度為 ,可概念性理解為每一步平均像是在兩個選項中選擇。
困惑度具有以下用途:
- 衡量模型預測時的不確定性。
- 表示平均分支因子(Average Branching Factor)。
- 量化模型對特定語料的掌握程度。
- 反映模型將語料規律壓縮至參數中的效率。
不同語料、詞彙表或斷詞方式下的困惑度不一定適合直接比較。
Bigram 模型
完整語言模型需要考慮所有前文:
Bigram 模型將其簡化為:
也就是預測下一個字時,只考慮前一個字。
此簡化建立在馬可夫假設(Markov Assumption)上:下一個狀態只依賴目前最近的狀態,而不考慮更早的歷史資訊。
這並不代表自然語言真的只受前一個字影響,而是為了降低計算複雜度所做的近似。
Bigram 機率計算
Bigram 條件機率可由語料中的出現次數計算:
例如「今天上課」出現 次,而「今天」作為前一詞共出現 次,則:
模型會根據各種相鄰詞組的統計結果,判斷下一個詞的可能性。
N-gram 的主要限制
上下文範圍有限
N-gram 只能使用最近的 個詞:
- Bigram:前一個詞。
- Trigram:前兩個詞。
- 4-gram:前三個詞。
因此不容易掌握長距離的語法或語意關係。
資料稀疏
若詞彙表大小為 ,可能的 N-gram 組合數量在概念上可達 。
當 增加時:
- 大量詞組未曾出現在訓練語料中。
- 未出現的組合會得到零次計數。
- 統計機率的可靠性下降。
因此形成兩難:
- 太小:上下文資訊不足。
- 太大:資料稀疏與計算成本增加。
時間與空間成本高
N-gram 必須儲存大量詞組及其條件機率。隨著詞彙表和 增大,所需的記憶體、儲存空間與查詢成本也會快速增加。
忽略遠距離字序
N-gram 並非完全忽略字序,而是:
- 保留局部詞序。
- 忽略視窗範圍以外的字序與上下文。
- 假設較早出現的文字不再影響目前預測。
缺乏語意彈性
傳統 N-gram 依照表面文字進行統計,不會自動理解近義詞。
例如「開心」與「高興」雖然語意接近,但仍會被視為完全不同的詞。
難以處理罕見詞與未見詞
若詞語或詞組未在訓練語料中出現,其出現次數為零,模型便難以計算可靠機率。
這類問題包含:
- Rare Words:出現次數很少的詞。
- Unseen Words:訓練期間完全沒見過的詞。
- Out-of-Vocabulary, OOV:不在模型詞彙表中的詞。
領域適應能力有限
相同詞語在不同領域可能具有不同用法。例如 mouse 在動物語料與電腦語料中具有不同含義。
若訓練語料與實際使用領域不同,原有的統計關係可能不再適用。
模型結果固定
N-gram 的條件機率由語料計數決定。只要語料與統計結果不變,預測機率就不會自動改變。
若要適應新資料,通常必須:
- 加入新語料。
- 重新統計次數。
- 更新條件機率。
- 重新訓練模型。
傳統文字表示方法
稀疏向量
稀疏向量(Sparse Vector)具有以下特徵:
- 維度通常等於詞彙表大小。
- 向量維度很高。
- 大多數位置為 。
- 每個維度通常對應一個明確詞語。
常見方法包括:
- One-hot Vector。
- TF-IDF。
- PPMI。
TF-IDF
TF-IDF 用來衡量一個詞在特定文件中的重要程度:
TF:詞頻
TF 衡量詞 在文件 中出現得有多頻繁。
IDF:逆文件頻率
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 較高的詞。
- 移除過於罕見的詞。
- 移除幾乎所有文件都會出現的詞。
這能降低向量維度與後續計算成本。
稀疏向量的限制
即使大部分位置為 ,稀疏向量的理論維度仍可能非常高,造成:
- 記憶體需求增加。
- 儲存成本提高。
- 相似度計算變慢。
- 難以直接表示詞語之間的語意關係。
因此可透過投影或映射,將高維資料轉換為較低且固定維度的向量空間。
分布假說
分布假說(Distributional Hypothesis)的核心概念是:
出現在相似上下文中的詞,通常具有相似的意義。
模型不需要先知道詞典定義,而是觀察詞語周圍經常出現哪些文字。
若 enjoy 和 like 經常出現在相似句型與上下文中,便可推測兩者語意接近。
詞語與上下文的關係可透過下列方式衡量:
- 共現次數。
- 條件機率。
- 互資訊。
- PMI。
- PPMI。
MI 與 PMI
互資訊(Mutual Information, MI)衡量兩個事件之間的關聯程度:
其中:
- :兩個事件實際共同發生的機率。
- :假設兩事件彼此獨立時的預期共同機率。
結果可分為:
- :共同出現高於預期,具有正向關聯。
- :大致互相獨立。
- :共同出現低於預期。
當事件指定為目標詞 與上下文詞 時,稱為逐點互資訊(Pointwise Mutual Information, PMI):
PMI 不只是計算兩個詞共同出現幾次,而是比較其實際共現頻率是否高於獨立情況下的預期。
PPMI
正向逐點互資訊(Positive Pointwise Mutual Information, PPMI)只保留正向關聯:
處理方式為:
- PMI 為正數:保留原值。
- PMI 為零:保留 。
- PMI 為負數:轉換為 。
PPMI 可降低負向關係的干擾,保留較有代表性的詞語與上下文關聯。
PPMI 詞向量
建立詞—上下文矩陣後:
- 每一列代表一個目標詞。
- 每一欄代表一個上下文詞。
- 每個元素代表該詞與上下文的 PPMI 值。
因此,每一列都可直接作為詞向量。
若兩個詞經常出現在相似上下文中,其 PPMI 向量也會具有相似形狀,符合分布假說。
不過,實際使用大量上下文詞時,多數關聯值仍會是 ,因此 PPMI 通常仍屬於高維度稀疏向量。
稠密向量
稠密向量(Dense Vector)通常具有:
- 較低且固定的維度。
- 大多數位置都有數值。
- 數值可以是正數、負數或小數。
- 單一維度通常沒有直接可解釋的詞義。
詞語會被放在連續向量空間(Continuous Vector Space)中,語意相近的詞,其向量距離通常較近。
固定詞嵌入與語境化嵌入
Word2Vec
Word2Vec 訓練完成後,每個詞只有一組固定向量。
例如 apple 無論代表水果或 Apple 公司,都會使用相同向量。因此,傳統 Word2Vec 難以處理多義詞。
語境化嵌入
語境化嵌入(Contextualized Embedding)會根據前後文動態產生向量:
因此,同一個詞在不同句子中可以獲得不同表示。BERT、GPT 與大型語言模型皆沿用此發展方向。
詞向量的關係表示
詞向量不只可以表示語意相似度,也可能保存詞與詞之間的關係。
例如:
兩組向量差都近似表示「國家到首都」的關係。
這些關係是統計上的近似,不是完全精確的數學等式。
歷史語意
詞嵌入也能用來研究詞義隨時間的變化,稱為歷史語意(Historical Semantics)或詞義漂移(Semantic Drift)。
基本流程為:
- 蒐集不同年代的語料。
- 分別訓練各年代的詞向量。
- 比較同一詞在不同年代附近的詞語。
- 觀察其主要使用語境如何變化。
例如 broadcast 可由早期的播撒種子,逐漸轉變為廣播、電視與媒體相關概念。
Word2Vec 的訓練特性
Word2Vec 的網路架構不複雜,但高品質詞向量通常需要大量語料。
實務上的主要成本包括:
- 大型語料的蒐集與儲存。
- 資料清理與前處理。
- 訓練資料的建立。
- Negative Sampling 等訓練技巧。
- 運算與記憶體資源。
練習時可以:
- 使用小型語料自行訓練。
- 使用已訓練完成的詞向量進行分析。
自我監督學習
Word2Vec 不需要人工逐筆標記資料。
模型可以利用滑動視窗(Sliding Window),直接從原始文字建立:
- 中心詞。
- 上下文詞。
- 模型輸入。
- 預測目標。
因此,Word2Vec 可視為自我監督學習(Self-supervised Learning):模型從資料本身產生訓練標籤。
詞向量維度
Word2Vec 常使用約 維的向量。
提高維度可能保留更多資訊,但也會增加:
- 模型參數量。
- 記憶體需求。
- 訓練與推論成本。
- 後續任務的運算量。
因此,向量維度並非越大越好,而是需要在表示能力與成本之間取得平衡。
不同文字表示方法的取捨
| 方法 | 表示方式 | 計算成本 | 主要限制 |
|---|---|---|---|
| One-hot/關鍵字比對 | 直接表示詞是否出現 | 低 | 無法表示語意相似性 |
| TF-IDF | 表示詞在文件中的重要程度 | 較低 | 高維且稀疏 |
| PPMI | 表示詞與上下文的正向關聯 | 中低 | 高維且稀疏 |
| Word2Vec | 每個詞使用固定稠密向量 | 中等 | 無法依語境處理多義詞 |
| Contextualized Embedding | 根據上下文動態產生向量 | 較高 | 計算與部署成本較高 |
方法越複雜,通常表示能力越強,但不代表適用於所有問題。
實務上應考量:
- 任務準確度需求。
- 可用資料量。
- 訓練與推論速度。
- 記憶體與儲存成本。
- 系統延遲。
- 維護難度。
簡單關鍵字比對或文件分類不一定需要大型語言模型;某些情況下 TF-IDF 已能提供足夠效果。
RAG 的實務成本
檢索增強生成(Retrieval-Augmented Generation, RAG)的語意檢索流程通常為:
- 將文件切片。
- 將文字轉換成句子嵌入(Sentence Embedding)。
- 將向量儲存至索引或向量資料庫。
- 計算查詢與文件向量的相似度。
- 取回相關內容交給生成模型。
相較於關鍵字比對,向量檢索能找到文字不同但語意相近的文件。
然而,當文件規模增加時,系統還必須處理:
- 大量嵌入向量的產生。
- 向量索引與儲存。
- 相似度搜尋效率。
- 查詢延遲。
- 資料更新。
- 系統維護成本。
當資料規模足夠大時,RAG 系統可能接近一套小型搜尋引擎。因此,設計 NLP 系統時不能只追求模型效果,也必須衡量整體工程成本。

