【個人上課筆記】2026 TAICA 自然語言處理 - 第二周
【個人上課筆記】2026 TAICA 自然語言處理 - 第二周
Hello Guys I’m LukeTseng. 本篇筆記主要紀錄跟統整上課內容,性質屬於個人學習用途,敬請斟酌參考,謝謝。
清大 MOOCS 2026 TAICA 自然語言處理課程網址:https://mooc.nthu.edu.tw/course/info/470
Context Ambiguity(情境模糊性)
Context Ambiguity 指的是同一句話可能有不同的意思,電腦必須根據前後情境,判斷使用者真正想表達的目的。
例如,user 對手機說:「下午回臺南要不要帶傘?」
人類會直接理解成「想查臺南下午是否會下雨」,因此應該查詢天氣資訊;但對電腦來說,「帶傘」不一定只和天氣有關,也可能是要參加活動、遊行,或有其他用途,程式必須先理解使用者的意圖,才能決定要不要開啟天氣功能。
規則式系統的問題
早期的語音助理或聊天機器人(Chatbot),都是用 Rule-based System(規則式系統),也就是預先設定關鍵字與對應行為,例如:
- 看到「明天」,就查詢行事曆。
- 看到「生日」,就搜尋聯絡人。
- 看到「傘」,就查詢天氣。
這種方式在簡單的情況下可以運作,但很容易因為語句稍微改變而判斷錯誤。
例如如果 user 說:「明天學生的口試有點擔心。」
系統看到「明天」,可能就直接查詢行事曆,最後回答「沒有找到相關預約」,但使用者並不是要查行程,而是在表達對明天口試的擔心。
另一個例子是詢問:「耶穌基督的生日是哪一天?」
系統看到「生日」,可能會到聯絡人中搜尋「耶穌基督」,然後回答聯絡人中沒有這個人,這就表示系統只依照關鍵字執行規則,並沒有真正理解問題。
為什麼難以處理?
因為同一句話可能存在不同情境,例如「耶穌基督」可能是在詢問宗教人物,也可能真的有一位同學的綽號叫「耶穌基督」,系統得要綜合對話內容、常識與使用者目的,才能做出正確判斷。
因此,真正能與人自然對話的 Agent(智慧代理)或 Chatbot(聊天機器人),不能只依靠固定規則,還需要具備大量知識,以及理解上下文與使用者意圖的能力。現今的大型語言模型已經能較好地處理這類問題,但在過去,Context Ambiguity 是相當困難的自然語言處理問題。
AI-enhanced Natural Language Processing(AI 強化的自然語言處理)

Image Source:TAICA MOOCs | 自然語言處理 | 高宏宇老師 | 2-1 投影片
這張投影片將 NLP 的流程分成三個部分:$$\text{資料前處理}→\text{模型建立}→\text{實際應用}$$
Data Preprocessing(資料前處理)
在文字交給模型之前,必須先將文字整理成電腦可以處理的形式。
例如:
- 將文字轉換成數值或向量表示。
- 辨識人名、地名、組織名稱等 Named Entity(命名實體)。
- 對文字進行整理與標準化。
投影片中的 Word2Vec、GloVe、ELMo、BERT,都是用來學習文字表示的方法,它們的目的是把文字轉換成電腦能夠運算的向量。
Model Building(模型建立)
完成資料前處理後,就會選擇適合的模型,並用資料訓練模型。
實際寫程式時,所謂的「建模」為:
- 從套件中選擇一個模型。
- 將資料輸入模型。
- 呼叫 fit 進行訓練。
- 嘗試不同模型或調整參數。
因此,如果說一個人「很會建模」,也就代表著他能依據問題選擇適合的模型,並善於測試模型與調整參數,而非只是單純呼叫程式套件。
Applications(應用)
模型訓練完成後,就能應用在不同的自然語言處理問題,像是新聞或文件摘要、有害留言分類、謠言偵測、文字或報告生成、情感分析、對話系統等等這些諸多應用。
這部分也就是將前面處理好的資料與訓練完成的模型,拿來解決實際問題。
與 Information Retrieval 和 RAG 的關係
過去處理文字時,常會進行 Information Retrieval,簡稱 IR,也就是「資訊檢索」。
現在製作 RAG(Retrieval-Augmented Generation,檢索增強生成)系統時,也需要先從大量資料中找出相關內容,再把這些內容提供給 ChatGPT 等模型產生答案。
目前的檢索通常會將文字轉換成 Dense Vector(稠密向量),並在向量空間中尋找相似內容,雖然技術與以前不同,但大方向來說的話,跟以前是一樣的:先從資料中找出相關資訊,再利用這些資訊完成後續任務。
最後,這張投影片的重點是 NLP 會先整理文字資料,再用資料訓練模型,最後將模型應用在摘要、分類、生成或對話等工作上。
Information Retrieval(資訊檢索)
資訊檢索最主要的目標是根據使用者的 Query(查詢),從大量文件中找出最相關的文件。
例如,使用者搜尋「人工智慧教育」,系統就要從一個月的新聞中找出和人工智慧、教育相關的文章。
在進行搜尋前,系統需要先完成兩件事情:
- 分析與整理文章內容。
- 為文章建立 Index(索引)。
建立索引後,使用者輸入查詢時,系統就能快速找到相關文章,這與資料庫建立索引檔案的概念相似。
上課投影片也提到 Rank(排序),也就是找到多篇相關文章後,再依照相關性或重要程度排列搜尋結果。
Term、Token 與 Vocabulary
在文字處理中,一篇文章或一句話會被切成許多文字單位。
Term(詞項)
Term 是從文章中切出來的一個字、詞語或表達方式,也可以稱為 Lexical Item(詞彙項目)。
例如「人工智慧正在改變教育」這句話可能會被切成:人工智慧、正在、改變、教育。
這些文字單位都可以稱為 Term,但在現代深度學習中比較常使用 Token(詞元)這個名稱,概念上和以前的 Term 相近。
Vocabulary(詞彙表)
Vocabulary 是系統所處理的所有不同 Term 或 Token 的集合,而 Vocabulary Size(詞彙表大小)就是其中包含多少個不同詞彙。
例如,系統設定能處理三萬個中文詞彙,則 。
當模型進行文字生成時,每次都要從這三萬個候選詞彙中,預測下一個最適合的詞。
因此,從機器學習角度來看,這可能會是一個具有三萬個類別的分類問題,也表示 NLP 常會面對維度很高、類別數量很多的預測問題。
Indexing(建立索引)
建立索引的目的,是讓系統不需要每次都逐篇閱讀文件。
在上課投影片介紹的是 Inverted Index(倒排索引),適合用來處理大量文件。
Inverted Index 會記錄某個詞出現在哪些文件,以及出現在文件中的什麼位置。
例如有三篇新聞:
- 文件 1:討論電腦安全
- 文件 2:討論電腦與書籍
- 文件 3:討論資訊安全
建立索引後,可能會得到以下的資訊:
| 詞彙 | 出現位置 |
|---|---|
| computer | 文件 2,第 83 個位置;文件 3,第 79 個位置 |
| books | 文件 2,第 57 個位置;文件 2,第 245 個位置 |
| security | 文件 1,第 278 個位置;文件 1,第 319 個位置;文件 3,第 142 個位置 |
當使用者搜尋 security 時,系統可以直接查看索引,知道這個詞出現在文件 1 和文件 3,不需要重新搜尋全部文章。
Inverted Index(倒排索引)

Image Source:TAICA MOOCs | 自然語言處理 | 高宏宇老師 | 2-1 投影片
Inverted Index 的內容通常包含兩種資訊。
Document Identifier,DID(文件識別碼)
DID 用來表示詞彙出現在哪一篇文件。
例如:
- DID 1:第一篇新聞。
- DID 2:第二篇新聞。
- DID 3:第三篇新聞。
Offset(出現位置)
Offset 表示這個詞出現在文件中的第幾個位置。
例如:computer → (2, 83),代表 computer 出現在第 2 篇文件的第 83 個位置。
如果同一個詞在同一篇文章中出現多次,就會記錄多個位置,系統讀完所有新聞後,便能產生一張完整的檢索表,之後就可以快速處理使用者的查詢。
文字處理中的問題
實際建立索引時,還會遇到文字形式不同的問題,例如:computer、computers,系統要決定要把它們視為兩個不同的索引項目,或經過處理後,視為同一個詞。
這屬於文字前處理與標準化的問題,不同系統可能採用不同做法。
大量資料的效率問題
如果只處理少量新聞,建立索引並不困難,但如果要處理一百萬篇新聞,索引表就會非常龐大。
假如每次新增一個詞,都使用 Sequential Search(循序搜尋)在三萬個詞彙中逐一尋找,對於前幾百篇文章可能處理得很快;但文章數量增加後,建立索引會越來越慢。
因此,大型文字檢索系統通常會使用 Hashing(雜湊)或其他較有效率的資料結構,加快詞彙查找與索引建立。
與現代 RAG 的關係
傳統資訊檢索會直接對文字或詞彙建立 Inverted Index,現在的 RAG(Retrieval-Augmented Generation,檢索增強生成)通常會將文字轉換成向量,再到向量空間中搜尋。
兩者儲存與搜尋的資料形式不同:
- 傳統檢索:搜尋文字或 Term。
- 現代 RAG:搜尋文字對應的向量。
但核心概念仍然相同:先整理資料並建立適合搜尋的結構,等使用者提出查詢後,再快速找出相關內容。
Lexical Processing(詞彙處理)
Lexical Processing 是在建立索引,或把文件轉換成向量之前,先對文字進行整理。
這個階段主要有這三個階段:$$\text{Tokenization}→\text{Stemming}→\text{移除 Stop Words}$$
目的是為了要讓文字格式較一致、減少詞彙數量,並方便後續建立索引或輸入模型。
Tokenization(斷詞)
Tokenization 是把一段文字切成許多可以處理的文字單位,這些單位稱為 Token(詞元)。
例如以下這一個英文句子 I like natural language processing.,可以依照空白切成:I、like、natural、language、processing。
英文通常有空白,所以相對容易切分;但中文句子沒有明確的空白,例如這一句「我喜歡自然語言處理」,系統判斷應切成:「我/喜歡/自然語言處理」,還是「我/喜歡/自然/語言/處理」。
因此,不同語言有不同的斷詞問題,像在德文也常出現許多複合字,不能單純依照空白處理。
以前的斷詞方法可能會用規則判斷、長詞優先、詞彙出現頻率、統計等等這些方法,但現在用深度學習模型時,模型通常就已經附帶 Tokenizer 了,user 只要把句子輸入,Tokenizer 就會自動完成切分。
Tokenization 前常見的文字整理
在切出文字前可能會先移除 HTML 標籤、移除部分標點符號與特殊字元、將英文字母統一轉為小寫。
例如這個 html code <p>Hello, World!</p> 經過整理後可能變成 hello world,這樣可以減少因格式不同而產生的不一致。
Stemming(詞幹還原)
Stemming 是把字詞的不同變化形式,簡化成相同或接近的詞幹。
例如 computer、computers 不進行處理的話,則可能會被當成兩個不同的詞,而經過 Stemming 後,可以把它們歸類在同一個索引項目中。
其他例子還可能有名詞的單數與複數、動詞的不同時態、形容詞加上 -ly 變成副詞、字詞加上 -ing、-ed 等字尾,等等的這些情況。
另外在上課投影片也提到 Porter Stemming Algorithm(Porter 詞幹演算法),它會依照預先設定的字尾規則修改單字,例如 BINARIZATION → BINARIZE,也就是根據字尾與前方字母的形式,將單字轉換成較基本的形式。
Stemming 的問題
Stemming 並非在每個情境都適用。
像是 fishing rod 的意思是「釣竿」,但如果把 fishing 還原成 fish,可能變成 fish rod,這樣可能破壞原本詞組的意思。
所以不能只看到 -ing 就直接刪除,還必須考慮這個字出現在什麼情境中,Stemming 雖然可以減少詞彙數量,但也可能讓原本的語意改變。
Stop Words(停用詞)
Stop Words 是文章中非常常見,但在某些檢索工作中資訊量較低的詞。
英文常見的 Stop Words 有這些:a、the、to、is、of、in、and 等等。
傳統做法會建立一份 Stop Word List(停用詞清單),再用字典比對的方式,把這些詞移除。
例如 How do I install a hard disk drive?,移除部分 Stop Words 後,就只保留 install hard disk drive 這些字。
留下的詞比較能代表使用者真正想搜尋的主題,移除停用詞也讓索引大小減少。
Stop Words 不是固定不變的
Stop Words 的清單會依照應用而不同。
有些詞在一般搜尋中不重要,但在特定句子中可能非常重要,例如 To be or not to be. 如果把 to、be、or、not 全部當作 Stop Words 移除,整句話幾乎會消失,而且原本的意思也被破壞。
尤其 not 具有否定作用,隨意移除可能使語意完全相反。
因此若要移除 Stop Words 時,就必須思考以下幾個問題:
- 目前的應用是什麼?
- 這個詞是否真的沒有資訊?
- 移除後會不會破壞原本語意?
不能只是從網路下載一份固定清單,然後無條件刪除所有符合的詞。
傳統方法與現代模型
Tokenization、Stemming 和 Stop Words 都是傳統文字處理中常見的方法,現在用 BERT 或大型語言模型時,通常就不需要手動完成所有步驟,因此現在一般流程就直接變成:
模型會將整句話轉換成適合後續任務的表示,因此現在不一定會手動進行 Stemming 或移除 Stop Words。
不過,傳統方法仍然需要去做理解,因為只有先了解早期方法如何處理文字,以及這些技術曾遇到過哪些問題,才能知道現代模型改進了什麼。
重點整理
Lexical Processing 是在建立索引或向量表示之前,先整理文字資料:
- Tokenization:把文字切成 Token。
- Stemming:將不同形式的字詞簡化成共同詞幹。
- Stop Words Removal:移除部分資訊量較低的常見詞。
Document Representation:Vector-space Model
前面介紹的是如何利用索引,根據使用者輸入的關鍵字尋找文章,而這節則進一步討論如何把一整篇文章轉換成電腦可以計算的形式?
傳統做法之一是 Vector-space Model(向量空間模型),也就是使用一個向量來表示一篇文章。
將每個詞彙視為一個維度
假設整個 Vocabulary(詞彙表)中有 30,000 個不同詞彙,那麼向量空間就有 30,000 個維度。()所以每一篇文件都可以表示成一個長度為 30,000 的向量:
向量中的每一個位置,分別對應詞彙表中的一個詞。
假設詞彙表只有這些詞:
接著文章裡面有出現「人工智慧」與「教育」這兩個詞,則可以表示成:
有出現的詞表示為 1,沒有出現的詞表示為 0。
這種表示方式,就是一種簡單的 One-hot Vector(獨熱向量)概念。
文件向量通常非常稀疏
實際上一篇文章可能只有一百或兩百個不同詞,但整個 Vocabulary(詞彙表)可能有三萬個詞。
因此,在一個長度為三萬的向量中,可能只有一百多個位置不是 0,其餘大部分都是 0。
在課堂的投影片也寫到 ,這個代表整個詞彙表的大小,遠大於單篇文章中實際出現的詞彙數量。
大部分位置都是 0 的向量,稱為 Sparse Vector(稀疏向量)。
雖然向量很長,但真正有資料的位置很少。
利用向量夾角比較文章相似度

Image Source:TAICA MOOCs | 自然語言處理 | 高宏宇老師 | 2-2 投影片
當每篇文章都轉換成向量後,就可以比較兩個文件向量之間的夾角。
在投影片中的兩個向量:
- :文件 的向量。
- :文件 的向量。
兩個向量之間的夾角是 ,這個夾角代表的意義如下:
- 夾角越小,代表兩篇文章包含的詞彙越相似。
- 夾角越大,代表兩篇文章的內容差異越大。
例如,兩篇文章都大量出現「人工智慧、模型、資料」等詞,它們的向量方向就會比較接近,因此夾角較小。
反之,如果一篇文章討論人工智慧,另一篇文章討論天氣,兩個向量的方向就可能差很多。
因此,向量之間的夾角可以用來表示文件之間的相關性。
在資訊檢索中的用途
當使用者輸入一個查詢時,也可以把這個查詢轉換成向量。
例如使用者搜尋「人工智慧教育」,系統會把查詢轉換成一個向量,再與資料庫中的每一篇文章向量比較,夾角較小的文章,就會被判斷為與查詢較相關。
這正是 NLP 跟資訊檢索中在探討的重要問題:如何計算查詢、詞彙或文件之間的相似度?
傳統向量空間模型的限制
這種做法雖然簡單,但表示方式非常稀疏,而且主要根據文章中是否出現相同詞彙進行比較。例如兩篇文章意思相近,但用不同詞彙時,傳統模型不一定能正確判斷它們很相似。
現在通常會用 BERT 等模型產生 Dense Vector(稠密向量),這類向量的維度較小、資訊較集中,也比較能表示文字的語意。
TF-IDF 與文件相似度
前面的 Vector-space Model(向量空間模型)只會記錄詞彙是否出現,這種表示方式沒有考慮每個詞的重要程度。TF-IDF 則進一步為每個詞設定權重,讓文件向量更能反映文章內容。
TF:Term Frequency(詞頻)
TF 用來表示某個詞在一篇文件中出現的頻率,公式:$$TF_{ij} = \frac{n_{ij}}{\vert{}d_i\vert{}}$$
- :詞彙 在文件 中出現的次數。
- :文件 的總詞數。
TF 的核心想法是:一個詞在某篇文章中出現越多次,就代表這個詞對這篇文章越重要。
例如一篇文章共有 100 個詞,而「人工智慧」出現 5 次,則計算出來的 。
TF 不再只是用 0 或 1 表示詞彙,而是利用出現次數或正規化後的數值表示權重。
IDF:Inverse Document Frequency(逆文件頻率)
IDF 用來衡量某個詞在整個文件集合中的鑑別能力,公式為: $$IDF_j = \log{\frac{n}{n_j}}$$
- :文件集合中的文件總數。
- :包含詞彙 的文件數量。
IDF 的核心想法是出現在少數文件中的詞,更能區分文件,而出現在大部分文件中的詞,鑑別能力較低。
像在體育新聞資料集中,「運動」和「運動員」可能幾乎每篇文章都有,因此這些詞很難判斷某篇新聞真正討論的主題,其 IDF 會比較低。
反之,「世界盃」、「羽球」或某位選手的名字,只出現在部分新聞中,因此更具有鑑別能力,IDF 會比較高。
而從公式也可以看出:
- 越大,代表這個詞出現在越多文件中,IDF 越小。
- 越小,代表這個詞比較少見,IDF 越大。
TF-IDF 權重
TF-IDF 是將 TF 與 IDF 相乘,如下:$$TF-IDF_{ij} = TF_{ij} \times IDF_j$$
TF-IDF 同時考慮兩件事:
- 這個詞在目前文章中是否常出現。
- 這個詞在全部文章中是否具有鑑別能力。
所以一個詞要得到較高的 TF-IDF,需要達成以下條件:
- 在目前這篇文章中出現多次。
- 但不能在所有文章中都經常出現。
例如在某篇籃球新聞中,「籃球」在文章內出現很多次,TF 高;「籃球」並非所有體育新聞都會出現,IDF 也具有一定數值。
所以「籃球」可能得到較高的 TF-IDF,成為代表這篇文章的重要詞。
One-hot Vector 與 TF-IDF Vector
原本的文件向量可能是 ,只表示哪些詞出現過,改用 TF-IDF 後,向量可能變成: 此時每個位置不再只是 0 或 1,而是該詞在這篇文章中的重要程度。
因此,TF-IDF 向量比單純的 One-hot Vector 包含更多資訊。
Document Similarity(文件相似度)
得到文件的 TF-IDF 向量後,就可以比較文件與查詢之間的相似程度,其中常用的方法是 Cosine Similarity(餘弦相似度): $$\cos(x,x’)=\frac{x^T x’}{|x||x’|}$$
- :第一篇文件或查詢的向量。
- :另一篇文件的向量。
- :兩個向量的內積。
- 及 :兩個向量的長度。
此方法比較的是兩個向量方向是否接近:
- 餘弦相似度越高,代表文件越相似。
- 餘弦相似度越低,代表文件差異越大。
在搜尋系統中,可以把使用者的查詢也轉成 TF-IDF 向量,再與所有文件計算相似度,最後依照相似度由高到低排列搜尋結果。
TF-IDF 有許多變形
TF、IDF 與正規化方法都有不同版本,例如,TF 可以用以下這些來做:
- 原始出現次數。
- 是否出現的 0、1 表示。
- 對出現次數取對數。
- 其他正規化方式。
IDF 也可以使用不同公式,最後還可以對整個文件向量進行正規化。
這些方法大多是依照實際效果調整的經驗法則,不同文件集合與不同任務,適合不同的計算方式。
BM25
BM25 是一種用於資訊檢索的文件排序方法,可將其理解為 TF-IDF 的改良版本,它會根據使用者輸入的查詢,計算每篇文件與查詢的相關程度,再依照分數高低排列搜尋結果。
與 TF-IDF 的關係
TF-IDF 主要考慮兩件事:
- 詞彙在目前文件中出現多少次。
- 詞彙在整個文件集合中是否具有鑑別能力。
BM25 延續了這兩個概念,但計算方式更複雜,另外加入一些可調整的參數,使文件排序更加合理。
主要公式為:$$\text{score}(D, Q) = \sum_{i=1}^{n} IDF(q_i) \cdot \frac{f(q_i, D)(k_1 + 1)}{f(q_i, D) + k_1 \left(1 - b + b\frac{\vert{}D\vert{}}{avgdl}\right)}$$
BM25 會綜合考慮:
- 查詢詞在文件中的出現頻率。
- 查詢詞在全部文件中的稀有程度。
- 文件本身的長度。
- 可調整的參數。
BM25 不只是單純地認為「某個詞出現越多次就一定越重要」,也會對詞頻和文件長度進行調整。
BM25 的用途
BM25 主要用於搜尋引擎中的文件排序,例如使用者輸入一個查詢後,系統可以用 BM25 計算每篇文章的相關分數,分數越高就代表文件與查詢越相關。
最後,系統會將分數較高的文件排在搜尋結果前面。
在現代研究中的角色
BM25 是相當早期的資訊檢索方法,但現在的論文中仍然經常看到它。
目前常被當成 Baseline,也就是研究者提出新方法後,會拿新方法與 BM25 比較,以確認新方法是否真的有進步。
Bag of Words(詞袋模型)
Bag of Words,簡稱 BoW,是一種早期常見的文字表示方法,它會把一篇文章拆成一個個詞,再記錄每個詞是否出現、出現幾次,或使用 TF-IDF 計算詞的權重。
之所以叫「詞袋」,是因為它就像把文章中的所有詞丟進一個袋子裡,只關心袋子裡有哪些詞,以及每個詞有多少個,不再保留原本的排列順序。
例如一篇文章經過處理後,電腦可能儲存成:
the:8 次very:4 次good:2 次drama:1 次
所以 Bag of Words 在電腦中儲存的是詞彙與出現次數所形成的向量或資料結構。
Bag of Words 的表示方式
最簡單的方式是用 One-hot Vector(獨熱向量)的概念,詞彙有出現就記為 1;詞彙沒出現就記為 0。
也可以使用詞頻,出現 1 次就記為 1、出現 3 次就記為 3。
或使用前面提到的 TF-IDF,替不同詞彙加入不同的重要性權重。
Bag of Words 的重點不是一定只能使用 0 和 1,而是使用詞彙出現情況來表示文章。
最大的問題是失去詞彙順序
Bag of Words 最大的限制,是它不會保留詞彙在原句中的順序,也不會保留句子結構和完整語意。
例如「錢不是問題」,以及「不,錢是問題」這兩句,經過斷詞後,兩句話可能都有「錢」、「不」、「是」、「問題」。
如果只使用 Bag of Words 表示,兩句話會得到相同的詞彙向量,可是這兩句真正表達的意思並不相同,甚至相反。
這表示 Bag of Words 只知道「有哪些詞」,但不知道詞彙出現的先後順序,以及哪些詞互相組成一句話、否定詞修飾哪個部分、句子真正表達的語意等等。
為什麼早期還要繼續用?
因為保留順序會大幅增加需要儲存與索引的內容,對早期儲存空間稀缺的電腦來講是個問題。
如果只記錄單一詞彙,也就是 Unigram(一元詞組),需要處理的項目較少。
如果改成記錄連續兩個詞,也就是 Bigram(二元詞組),或使用更長的 Sliding Window(滑動視窗)保留更多上下文,可能產生大量不同組合,使資料庫和索引變得非常龐大。
因此,早期搜尋系統為了兼顧效率,通常會採用較簡單的方式,例如:Unigram、Bigram、詞頻統計、TF-IDF 權重等等。
這些資料再被存入資料庫,用來完成關鍵字搜尋和文件比對。
Opinion Mining(意見探勘)
接著進到 Opinion Mining(意見探勘)或 Sentiment Analysis(情緒分析)的部分。
情緒分析的目的,是判斷一段評論屬於正向還是負向。
例如,正面評論中可能出現便宜、有名、讚、嫩等字眼;而在負面評論中可能出現老、難吃、太貴、差等字眼。
傳統方法可以整理一份正面詞與負面詞的字典,再根據評論出現哪些詞進行分類。
但如果一個新的評論寫「肉新鮮且價位低」,其中的「新鮮」和「價位低」可能沒有出現在原本字典中,若系統只會比對既有關鍵字,就不容易判斷這句話其實是正面評價。
One-hot Encoding(獨熱編碼)
假設目前的 Vocabulary(詞彙表)只有八個詞 ,由於詞彙表有八個詞,每個詞會被表示成一個八維向量。
例如 。
每個向量只有代表自己的位置是 1,其餘位置都是 0,因此稱為 One-hot Encoding。
如果一篇正面評論出現「便宜、有名、讚、嫩」,把這些詞合併後,可以得到文件向量 ,這就代表前四個詞有出現,後四個詞沒有出現。
One-hot Encoding 的用途
ne-hot Encoding 並不只用在文字處理,也是機器學習中常見的資料編碼方式。
像是常見的血型有 A 型、B 型、O 型等等,若某人的血型是 A 型,可以表示為: ,而 B 型可以表示成 等等。
這種方法適合表示彼此獨立的類別,在文字處理中,則是把詞彙表中的每一個詞視為一個類別。
One-hot Encoding 的問題
- 必須完全符合詞彙:One-hot Encoding 依賴 Exact Match(完全比對),遇到新詞、罕用詞或不同表達方式時,傳統方法的彈性不足。
- 向量非常長:如果詞彙表包含三萬個詞,每個詞就需要一個三萬維向量,但一篇文章可能只出現一百或兩百個詞,所以向量中大部分位置都是 0。
- 無法表示語意關係:One-hot 向量中的不同詞彼此完全獨立。
Word Embedding(詞嵌入)
為了解決高維度、稀疏和無法表達語意等問題,後來發展出 Word Embedding。
Word Embedding 的概念是將每個詞表示成一個較短、具有連續數值的向量。
One-hot Encoding 的空間稱為 Vocabulary Space(詞彙空間),其維度通常等於詞彙表大小。
Word Embedding 則將詞彙放入較小的 Concept Space(概念空間)或 Dense Space(稠密空間)中。
從此一個詞就不會再是 這種稀疏向量了,轉而改成 這種向量表示。
因此,Word Embedding 是一種 Dense Vector(稠密向量)表示。
Word Embedding 的好處
- 向量較短:Word Embedding 不需要讓向量長度等於完整詞彙表大小,可以把大量詞彙壓縮到固定且較小的維度中,比三萬維的 One-hot 向量更容易儲存與計算。
- 可以計算詞彙的語意相似度:每個詞都具有一組連續數值,因此可以透過向量運算比較兩個詞是否接近。延續先前 Opinion Mining 例子,透過向量內積或其他相似度計算,正面詞與正面詞之間的分數可能較高,而正面詞與負面詞之間的分數可能較低。
Synonymy and Polysemy(同義詞與一詞多義)
文字檢索不能只依靠 Exact Match(完全相同的字詞比對),因為「字詞相同」不一定代表意思相同,「字詞不同」也不一定代表意思不同。
Synonymy(同義詞)
同義詞是指使用不同的字詞,表達相同或相近的概念。
例如英文中的:bandit、brigand、thief,這些字都表示「盜賊」。
如果搜尋系統只進行完全比對,使用者搜尋 thief 時,就可能找不到只寫著 bandit 的相關文章。
因此,同義詞問題通常會降低 Recall(召回率),而所謂 Recall 是指在所有真正相關的資料中,系統成功找回多少。
同義詞會使部分相關文件因為用字不同而被漏掉。
Polysemy(一詞多義)
一詞多義是指同一個字詞,在不同情境中具有不同意思。
例如用 bank 作為例子,有兩重意思:
- 銀行
- 河岸
另一個常見例子是 Apple:
- 蘋果公司
- 水果蘋果
如果使用者搜尋「Apple 手機」,系統應該理解是在尋找蘋果公司的產品,而不是水果。
如果系統只看到相同字詞就認為內容相關,便可能找回意思完全不同的文章,所以一詞多義會降低 Precision(精確率),而 Precision 是指系統找回的資料中,有多少是真的相關。
一詞多義會讓系統找回不相關的結果。
Hybrid Cases(混合情況)
大部分實際的句子不會只包含單純的同義詞或一詞多義,而是多種語言現象混合出現。系統必須根據句子的前後文、使用領域、詞彙搭配、使用者的查詢目的來判斷每個字在目前情境下的真正意思,這也會產生前面提到的語意模糊問題。
Concept Matching 與 Term Matching
Term Matching(字詞比對)
Term Matching 是直接比較查詢與文件是否包含相同的字。
例如使用者搜尋:「計程車」,如果文件中只有「出租車」或「的士」,完全比對就可能搜尋不到。因為「計程車」、「出租車」、「的士」這些字詞不同,但概念都是 Taxi(計程車)。
Concept Matching(概念比對)
Concept Matching 希望判斷兩個詞是否表達相同或相近的概念。
即使查詢與文件沒有相同的字,只要意思相近,系統仍應該判定它們具有相關性。
這就是為什麼只使用 One-hot Vector、TF-IDF 或完全比對時,計算出的 Cosine Similarity(餘弦相似度)可能很低,但查詢與文件在概念上其實非常接近。
造成字詞不同但概念相近的情況
- 使用不同語言或地區用語:例如前面的「計程車」、「出租車」、「的士」三者指的是同一種交通工具,但字詞完全不同。簡體中文與繁體中文之間,也可能使用不同的詞描述同一件事。
- 使用不同領域的詞彙:不同領域的人可能用不同方式描述相同物品。例如:手機、智慧型行動運算裝置;以及冰箱、高效能溫度調節器等等。雖然後面的說法較專業或刻意複雜,但可能仍在描述相同的東西。這種情況在跨領域合作時很常見,因為不同領域重視的特徵不同,所以使用的詞彙也不同。
- 新詞與專有名詞:有些概念可能存在多種名稱,例如 COVID-19、新冠病毒、SARS-CoV-2 病毒,這些詞彼此有關,但系統若只做完全比對,可能把它們當成不同概念。另一個例子是:清華大學、清大,我們知道這兩個詞可能指向同一所學校,但電腦需要經過額外處理,才能把這些不同名稱連結在一起。這類工作可以視為 Named Entity Normalization(命名實體正規化),也就是把同一個實體的不同名稱對應到統一的表示。
如何表示一個詞的意思?
課堂上介紹了早期常見的方法,利用 Dictionary-based Solution(字典式方法)表示詞彙之間的語意關係。
WordNet
WordNet 是一個由人工建立的英文詞彙資料庫,也可以把它理解成一種簡單的 Knowledge Graph(知識圖譜)。
它不只儲存單字本身,還會記錄詞彙之間的關係,例如:Synonym(同義詞)、Antonym(反義詞)、Hypernym(上位詞)、不同詞義之間的關係等等。
使用 Python 的 NLTK 套件,就可以查詢 WordNet 中的資料。
Synset(同義詞集合)
WordNet 會將意思相近的詞放在同一個 Synset(同義詞集合)中。
例如 good 在不同情況下可能對應:estimable、honorable、respectable、beneficial、upright 等詞,這些詞在某些語意下與 good 相近。
但 good 本身也有不同詞性與不同意思,例如:
- 形容詞:好的、優良的。
- 副詞:很好地。
- 名詞:好處、商品。
所以同一個單字可能出現在不同的 Synset 中。
Hypernym(上位詞)
Hypernym 表示一種 “is-a” 關係,也就是「某個東西是一種什麼」。
例如以 panda 為例,可以往上找到:$$panda→carnivore→mammal→vertebrate→animal$$
意思是:熊貓是一種食肉目動物,食肉目動物是一種哺乳類,哺乳類是一種脊椎動物,脊椎動物是一種動物。
透過這種關係,可以建立詞彙之間的概念階層。
WordNet 的優點
WordNet 是人工整理的資料,因此通常具有以下特點:
- 資料比較乾淨
- 詞彙關係較精確
- 適合查詢同義詞、反義詞與上下位關係
- 可以用來進行簡單的語意延伸
例如搜尋 good 時,可以利用 WordNet 加入它的部分同義詞,讓系統不只搜尋完全相同的字。
WordNet 的問題
- 沒有充分考慮 Context(上下文):同一個詞可能有多種意思,但 WordNet 本身列出的是可能的詞義與關係,不一定知道目前句子中使用的是哪一個意思。
- 例如 honorable 可能出現在不同 Synset 中,代表不同的語意用法,若缺乏上下文,系統仍然不容易判斷應該選擇哪一個詞義。
- 新詞可能不存在:WordNet 依靠人工建立,因此新詞、網路流行語、專有名詞或罕見詞,可能還沒有被加入資料庫。語言會持續變化,所以人工詞典很難完整涵蓋所有詞彙。
- 維護成本高:建立與更新 WordNet 需要大量人工整理與檢查,雖然人工建立的知識通常很精確,但詞彙、詞義與關係不斷增加,因此很難全部建完,也需要長期維護。
- 不容易直接計算相似度:WordNet 可以告訴我們哪些詞是同義詞、反義詞或上下位關係,但它不容易直接提供一個連續的相似程度。
- 例如:good 與 respectable 有多相似?good 與 moral 有多相似?good 與 shameful 的距離是多少?等等,這些關係很難只靠字典直接轉換成精確數值。
Continuous, Distributed Representations

Image Source:TAICA MOOCs | 自然語言處理 | 高宏宇老師 | 2-4 投影片
前面介紹的 One-hot Encoding(獨熱編碼)只能使用 0 和 1 表示詞彙,而且不同詞彙之間彼此獨立,無法呈現語意上的相似程度。
因此,自然語言處理希望改用 Continuous, Distributed Representations(連續且分散式表示),也就是用一組實數向量來表示每個詞。
Continuous(連續)
Continuous 指的是可以使用連續的實數來表示字詞,例如:$$\text{dog} = \begin{bmatrix} 0.6 \ 0.4 \end{bmatrix}$$$$\text{cat} = \begin{bmatrix} 0.5 \ 0.4 \end{bmatrix}$$
由於 dog 和 cat 的向量數值接近,因此它們在向量空間中的位置也會比較接近。
相較之下,truck 的向量方向可能與它們差異較大,所以會位於較遠的位置。
這樣就能表達對於人類而言直覺上的關係:貓與狗較相似,貓與卡車較不相似。
Distributed Representation(分散式表示)
Distributed Representation 是指一個詞的意思分散在整個向量的多個維度中。
在 One-hot Vector 中,每個維度直接代表一個特定詞彙,例如「貓」與「狗」分別位於不同維度,彼此沒有關聯。
但在分散式表示中,每個詞都會由多個數值共同描述:$$\text{word} \rightarrow (x_1, x_2, \dots, x_m)$$
這些數值共同形成詞的表示,使不同詞之間可以透過距離或相似度進行比較。
將詞彙放入向量空間
在投影片中用二維空間說明概念,但實際的 Word2Vec(詞向量模型)通常會使用更高維度的空間,例如 300 維,代表每個英文單字都可以對應到一個長度為 300 的向量:$$\text{word} \rightarrow (x_1, x_2, \dots, x_{300})$$
所有詞彙都會被 Mapping(映射)到同一個向量空間中。
在這個空間裡,可以進一步計算詞彙之間的距離、詞彙相似度、同義詞關係、其他語意上的延伸關係等等,語意相近的詞,其向量通常也會比較接近。
需要注意的是,每個維度不一定能直接解釋成「動物」、「大小」或「正負面」等具體意義,而需要模型從資料中學習出來的數值表示。
Bengio 2003:Neural Probabilistic Language Model
paper 連結:A Neural Probabilistic Language Model
這篇 paper 的最重要的概念就是用 Neural Network(類神經網路)建立 Language Model(語言模型),並在訓練過程中學習詞彙向量。
另外這篇可以分成三個大部分來做理解:
- 為每個詞建立實數向量:詞彙表中的每個詞,都會對應到一個 Distributed Word Feature Vector(分散式詞彙特徵向量)。(基本上就是前面講的詞彙會 mapping 到同一個向量空間裡面)
- 使用詞彙向量預測語言機率:模型會根據一段詞彙序列,預測接下來可能出現哪一個詞,以及它出現的機率。
- 傳統語言模型常需要計算大量的條件機率,但可能遇到資料組合過多、機率難以完整估計的問題。
- Bengio 的做法是改用類神經網路,讓模型從資料中學習並預測這些機率。
- 同時學習詞向量與模型參數:在模型訓練時,不只是調整預測機率所需的參數,也會同時學習每個詞的向量,所以詞向量是透過大量資料與預測任務自動學習出來的。當兩個詞經常出現在相似的語言環境中,它們最後學到的向量也可能比較接近。
語言模型(Language Model)
語言模型的基本概念,可以理解成「文字接龍」,根據前面已經出現的文字,預測下一個最可能出現的字或詞。
例如:「我今天去學校上……」,模型可能判斷下一個詞是「課」的機率最高。
因此,ChatGPT 等大型語言模型確實具有預測下一個詞的性質,但如果直接說它「只是在接龍,完全不知道詞的關係」,也不完全正確,因為模型在大量文字中,會學習詞彙的使用方式、排列規律,以及詞與詞之間的關係。
序列資料中存在規律

Image Source:TAICA MOOCs | 自然語言處理 | 高宏宇老師 | 2-5 投影片
投影片提到 Markov 與 Shannon,主要是說明語言模型的想法很早以前就已經存在。
語言是一種 Sequential Data(序列資料),字詞並不是毫無規律地隨機排列,而是存在某些 Pattern(模式)。
例如看到:「今天天氣很……」,後面接「好」、「冷」或「熱」都比接「桌子」合理。
因此可以利用機率、模型或其他架構,描述文字序列中的規律,不同研究者的出發點可能不同,但核心想法都是前面的內容會影響後面可能出現的內容。
從文字轉成稠密向量
傳統 One-hot Vector(獨熱向量)非常長,而且大部分位置都是 0,也不容易表示詞彙之間的語意關係。
語言模型則可以把詞、句子或文章轉換成比較短的 Dense Vector(稠密向量)。
將文字映射到向量空間後,就可以計算詞與詞之間的相似度、句子與句子之間的相似度、查詢與文件之間的相關程度等等,而不需要處理與詞彙表一樣大的超長稀疏向量。
為什麼這種方法有效?
- 相似詞會有相似的向量:如果兩個詞經常出現在相似的語言環境中,它們學到的向量也可能比較接近。
- 向量空間是連續的:Dense Vector 使用的是連續數值,當向量中的數值只發生小幅變化時,模型計算出的機率也會小幅改變,這稱為 Smooth Function(平滑函數)的概念。簡單來說,意思相近的詞,其向量不會突然跳到完全無關的位置,所以模型可以將已經學過的規律延伸到相似的詞或句子。
- 可以處理未看過的句子假設模型在訓練中看過「我喜歡這隻可愛的狗。」這句話,即使它沒有看過「我喜歡這隻可愛的貓。」,由於「狗」與「貓」的向量接近,模型仍可能判斷第二句是合理的。也就是說,模型不需要記住每一個可能的句子,而是透過相似詞彙與連續向量空間,將學過的知識延伸到尚未出現過的句子。
與 RAG 和資訊檢索的關係
這種把文字轉成向量的概念,也會應用在 RAG(Retrieval-Augmented Generation,檢索增強生成)中。
例如,可以用 Sentence-BERT 將以下內容轉換成向量:
- 使用者的問題
- 資料庫中的句子
- 文件段落或 Chunk(文字區塊)等等。
接著比較這些向量的相似度,相似度越高,表示文件內容可能越符合使用者的問題。
Learning Vector Representation of Words
Word Embedding(詞嵌入)學到的詞向量,不只能表示詞彙相似度,還可能保留詞彙之間的關係。例如 GloVe 或 Word2Vec 會把每個詞映射到向量空間中。意思相近或使用情境相似的詞,通常會位在較接近的位置。

Image Source:https://nlp.stanford.edu/projects/glove/
例如這個青蛙的例子表示與 frog 相關的詞、學名或其他蛙類名稱,在向量空間中可能彼此接近。
詞向量可以進行運算

Image Source:https://nlp.stanford.edu/projects/glove/
Word2Vec 有名的例子是
這並非直接對文字進行加減運算,而是對每個詞所對應的向量進行運算。
計算完成後,再從詞彙表中尋找與結果向量最接近的詞,便可能得到 queen,所以詞向量不只表示「兩個詞有多相似」,也可能保存某些詞彙之間的關係方向。
向量關係的其他例子

Image Source:TAICA MOOCs | 自然語言處理 | 高宏宇老師 | 2-5 投影片
國家與首都
- Paris 與 France 具有首都和國家的關係。
- 將這個關係套用到 Italy,便可能得到 Rome。
比較級關係
模型可能從資料中學到 ,以及 具有相似的變化方向。
公司與產品
意思是 Windows 與 Microsoft 的關係,可能類似 Android 與 Google 的關係,這些結果只是「最接近」,不代表運算後的向量與答案完全相同。
相似詞會位於附近嗎?
將一個詞轉成向量後,可以搜尋它附近最接近的其他詞。
例如取得「國立清華大學」的向量後,可以觀察附近出現的可能是:
- 其他大學名稱
- 北京清華大學
- 臺灣的大學
- 其他在相似語境中出現的詞等等。
但距離最近的詞不一定是人類認為最直接相關的詞,因為模型學習的是詞在語料中的使用情境,而不是人工整理好的字典關係。
例如 pig 附近的向量,不一定全部都是其他動物,也可能是經常與 pig 出現在相似句型或情境中的詞。
詞向量中的偏見
詞向量是從大量文章與語料中學習的,因此也可能把資料中的偏見一起學進去。像前面的 可以表現性別關係,但同樣的向量運算若套用在職業上,可能產生男性對應醫生、女性對應護士這樣的關係。
這並不是模型自己產生的觀念,而是因為訓練資料中,某些性別與職業經常被一起描述。
模型會學習資料中的規律,也可能學到資料中的刻板印象與偏見,這就是 Data Bias(資料偏誤)的問題。
每個維度代表什麼?
Word2Vec 常用數百維向量,例如 300 維,而這自然而然會產生一個問題:第 1 維、第 2 維或第 300 維各自代表什麼?
一般而言,單一維度通常沒有明確、固定且容易解釋的意義,詞義是分散在整個向量中的,而不是某一維專門代表「動物」、另一維代表「性別」。
有些研究會嘗試分析特定維度或模型層所學到的特徵,例如:
- 前面的層可能較偏向語法。
- 後面的層可能較偏向語意。
但通常只能看出某些趨勢,很難明確證明每一個維度或每一層只負責某一種功能。
這也是類神經網路與深度學習較難解釋的地方,傳統的 Tree(樹狀結構)或 Graph(圖形結構)可以直接看見關係,但神經網路內部學到的表示比較難讓人類理解。
詞向量與翻譯

Image Source:《Exploiting Similarities among Languages for Machine Translation》
不同語言的詞向量空間可能具有相似的結構。
例如,英文動物詞彙在空間中的相對位置是:
- horse
- cow
- pig
- dog
- cat
西班牙文中對應的詞:
- caballo
- vaca
- cerdo
- perro
- gato
也可能形成相似的排列關係。
如果能找出兩種語言向量空間之間的對應方式,就可以把一種語言中的向量映射到另一種語言,進而找出翻譯結果。
這表示模型不一定需要先理解所有語法規則,也可以利用詞彙在兩個空間中的相對關係進行翻譯。
Distributional Hypothesis(分布假說)
Distributional Hypothesis 的核心概念是一個詞的意思,可以從它附近經常出現的詞來判斷。簡單來說,相似的詞,通常會出現在相似的上下文中。
例如:
- The cat licked its fur.
- The dog licked its fur.
cat 和 dog 都經常與 lick、fur 等詞一起出現,也可能同時出現在 eat、run、bite 等動作附近。
反之,truck 不會跟 lick、fur 一起出現,即使沒有人直接告訴電腦「貓和狗都是動物」,電腦仍可以根據詞彙出現的環境,推測 cat 與 dog 較相似,truck 與它們較不相似。
這也是 LLM 能透過 Self-supervised Learning(自我監督學習)從大量文章中學習語言關係的基本原因之一,模型自己會從大量詞彙共同出現的規律中學習。
Co-occurrence(共同出現)
Co-occurrence 指的是兩個詞在一定範圍內共同出現的次數。
例如有三個句子:
- I like deep learning.
- I like NLP.
- I enjoy programming.
從這三句話中可以觀察到:
- I 和 like 共同出現兩次。
- I 和 enjoy 共同出現一次。
- like 和 deep 共同出現一次。
- like 和 NLP 共同出現一次。
- enjoy 和 programming 共同出現一次。
把所有詞之間共同出現的次數整理起來,就可以建立 Co-occurrence Matrix(共現矩陣),如下:
| 詞彙 | I | like | enjoy | deep | learning | NLP | programming |
|---|---|---|---|---|---|---|---|
| I | 0 | 2 | 1 | 0 | 0 | 0 | 0 |
| like | 2 | 0 | 0 | 1 | 0 | 1 | 0 |
| enjoy | 1 | 0 | 0 | 0 | 0 | 0 | 1 |
| deep | 0 | 1 | 0 | 0 | 1 | 0 | 0 |
| learning | 0 | 0 | 0 | 1 | 0 | 0 | 0 |
| NLP | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
| programming | 0 | 0 | 1 | 0 | 0 | 0 | 0 |
這個矩陣是對稱的,因為 I 和 like 共同出現兩次,也代表 like 和 I 共同出現兩次。
Latent Semantic Analysis(潛在語意分析)
Latent Semantic Analysis,簡稱 LSA,是一種早期的文字語意分析方法。
它的概念不是只看兩個詞是否完全相同,而是分析它們與其他詞共同出現的模式,從中找出隱藏的語意關係。
大致上的流程為:
例如,在前面的句子中,deep 出現在 like 後面;NLP 也出現在 like 後面。
系統可能會推測 deep 與 NLP 的使用環境相似,進而將它們放到較接近的位置。
同樣,learning 和 programming 都可能代表學習或技術相關內容,它們降維後也可能靠得比較近。
使用 SVD 進行降維
建立共現矩陣後,可用 SVD(Singular Value Decomposition,奇異值分解)將矩陣拆解。
SVD 主要會從大型矩陣中保留較重要的資訊,並將詞彙表示成較低維度的向量。
例如,原本每個詞可能要用七個維度表示,經過 SVD 後,可以只保留兩個最重要的部分,把每個詞放到二維空間中。
降維後可能會看到:
- deep 和 NLP 靠得較近。
- learning 和 programming 靠得較近。
- like 和 enjoy 也可能具有一定關聯。
這表示系統只利用三個句子,就能初步發現詞彙之間的關係。
為什麼需要大量語料?
只用三個句子時,得到的結論不一定可靠。
若只根據這三句話,可能會認為所有出現在 like 後面的詞都很相似,這顯然過於簡單。
但如果輸入上萬句甚至更多的文章,詞彙共同出現的規律會逐漸穩定,例如:
- cat 與 dog 都經常出現在 eat、run、fur 附近。
- truck 則會較常出現在 road、drive、wheel 附近。
所以語料越多,系統越有機會從統計規律中找出合理的語意關係。
總整理
Context Ambiguity(情境模糊性)
同一句話可能因前後文、使用目的與常識而具有不同意思,系統必須判斷使用者的真正意圖。
例如:「下午回臺南要不要帶傘?」人類通常會理解為查詢天氣,但「帶傘」也可能與活動或其他情境有關。
早期的 Rule-based System(規則式系統)只依賴關鍵字觸發功能:
- 「明天」→ 查行事曆。
- 「生日」→ 查聯絡人。
- 「傘」→ 查天氣。
問題是系統只看到字面關鍵字,無法理解完整語意。例如「明天學生口試有點擔心」並不是要查行事曆;「耶穌基督的生日」也不是要搜尋聯絡人。
真正的 Agent(智慧代理)須結合上下文、常識、知識與使用者意圖,而不能只依賴固定規則。
AI-enhanced NLP(AI 強化的自然語言處理)
自然語言處理的流程為:
Data Preprocessing(資料前處理)
將文字整理成電腦可以處理的形式,例如:
- 文字標準化與清理。
- 辨識 Named Entity(命名實體),如人名、地名與組織。
- 將文字轉換成數值或向量。
Word2Vec、GloVe、ELMo、BERT 等方法,都是為了學習文字的向量表示。
Model Building(模型建立)
建模不只是呼叫 fit,還包括:
- 選擇適合的模型。
- 將資料輸入模型。
- 訓練模型。
- 測試不同模型、參數與設定。
Applications(應用)
模型可應用於:
- 文件摘要。
- 文字分類。
- 情緒分析。
- 謠言與有害留言偵測。
- 文字生成。
- 對話系統。
現代 RAG(Retrieval-Augmented Generation,檢索增強生成)也遵循「先找到相關資訊,再利用資訊產生答案」的基本思路。
Information Retrieval(資訊檢索)
資訊檢索的目標,是根據使用者的 Query(查詢),從大量文件中找到最相關的內容,並依相關程度進行 Rank(排序)。
流程:
重要名詞
- Term(詞項):從文字中切出的字詞或表達。
- Token(詞元):現代 NLP 常用的文字處理單位。
- Vocabulary(詞彙表):系統可處理的所有不同 Token 集合。
- Vocabulary Size:詞彙表中的詞彙數量。
若詞彙表大小為 30,000,模型預測下一個 Token 時,可以視為在 30,000 個類別中進行分類。
Inverted Index(倒排索引)
倒排索引記錄:
- DID(Document Identifier,文件識別碼):詞出現在哪篇文件。
- Offset(位置):詞出現在文件中的哪個位置。
例如 computer → (2, 83) 表示 computer 出現在第 2 篇文件的第 83 個位置。
大型系統通常使用 Hashing(雜湊)等資料結構提升索引建立與查詢效率。
傳統資訊檢索搜尋的是 Term;現代 RAG 則常將文字轉成向量後進行 Vector Search(向量搜尋),但兩者核心都是先建立可快速搜尋的資料結構。
Lexical Processing(詞彙處理)
傳統詞彙處理流程:
Tokenization(斷詞)
將文字切成 Token,英文可利用空白切分;中文沒有明確空白,因此可能存在不同切法。例如「我喜歡自然語言處理」可能切成:
- 我/喜歡/自然語言處理
- 我/喜歡/自然/語言/處理
斷詞前也常進行:
- 移除 HTML 標籤。
- 移除部分標點與特殊字元。
- 將英文字母統一為小寫。
Stemming(詞幹還原)
將不同變化形式簡化成共同詞幹,例如將 computer 與 computers 視為相同概念。
缺點是可能破壞原意,例如 fishing rod 若直接將 fishing 改成 fish,可能形成不自然的 fish rod。
Stop Words(停用詞)
移除常見但資訊量較低的詞,例如 a、the、is、of。
但停用詞必須依任務決定,不能無條件刪除。例如 not 具有否定意義,移除後可能使語意相反。
現代 BERT 或大型語言模型通常直接採用:
因此不一定需要手動進行 Stemming 或移除 Stop Words。
Vector-space Model(向量空間模型)
向量空間模型將一篇文件表示為向量,每個詞彙對應一個維度。
假設:
若文件只出現「人工智慧」與「教育」,可表示為:
這種向量通常是 Sparse Vector(稀疏向量),因為詞彙表可能有數萬個詞,但單篇文章只使用其中少數詞彙。
文件與查詢都轉成向量後,可利用向量方向比較相似度:
- 夾角越小:內容越相似。
- 夾角越大:內容差異越大。
限制是這種方法主要依賴相同詞彙,無法充分判斷「用詞不同但意思相近」的文件。
TF-IDF 與文件相似度
TF(Term Frequency,詞頻)
表示詞彙在目前文件中的出現頻率:
其中:
- :詞彙 在文件 中出現的次數。
- :文件的總詞數。
詞在文件中出現越多次,TF 通常越高。
IDF(Inverse Document Frequency,逆文件頻率)
衡量詞彙在整個文件集合中的鑑別能力:
其中:
- :文件總數。
- :包含詞彙 的文件數。
詞出現在越多文件中,IDF 越低;越罕見的詞,IDF 越高。
TF-IDF
高 TF-IDF 的詞必須:
- 在目前文件中經常出現。
- 但不能在所有文件中都很常見。
Cosine Similarity(餘弦相似度)
- 數值越高:向量方向越接近,文件越相似。
- 數值越低:文件內容差異越大。
TF-IDF 比單純的 0、1 向量更能表示各詞在文件中的重要程度。
BM25 與 Bag of Words
BM25
BM25 可視為 TF-IDF 的改良文件排序方法,會考慮:
- 查詢詞在文件中的頻率。
- 查詢詞在整體文件中的稀有程度。
- 文件長度。
- 詞頻飽和效果。
- 可調整參數 與 。
BM25 至今仍常被當作資訊檢索研究的 Baseline(基準方法)。
Bag of Words(詞袋模型,BoW)
BoW 只記錄:
- 文章有哪些詞。
- 每個詞出現幾次。
- 或每個詞的 TF-IDF 權重。
它不保留詞序,因此「錢不是問題」與「不,錢是問題」可能形成相同表示,但語意實際上不同。
使用 Bigram(二元詞組)或更大的 Sliding Window(滑動視窗)可以保留部分順序,但會產生大量詞彙組合,增加儲存與計算成本。
Opinion Mining 與文字語意問題
Opinion Mining(意見探勘)或 Sentiment Analysis(情緒分析)的目標,是判斷評論屬於正向或負向。
早期方法會建立正面詞與負面詞字典,但只能處理已知詞彙,難以辨識新的表達方式。
One-hot Encoding(獨熱編碼)
每個詞被視為獨立類別。例如詞彙表有八個詞:
主要問題:
- 必須進行 Exact Match(完全比對)。
- 維度等於詞彙表大小,向量非常長。
- 大部分元素為 0,形成稀疏向量。
- 不同詞之間無法表示語意關係。
Word Embedding(詞嵌入)
Word Embedding 將詞表示為較短的 Dense Vector(稠密向量),可減少維度並計算語意相似度。
語意或使用環境相近的詞,其向量通常也較接近。
Synonymy、Polysemy 與概念比對
Synonymy(同義詞)
不同詞彙可表達相近概念,例如:
bandit、brigand、thief
若只搜尋完全相同的詞,可能漏掉相關文件,因此同義詞問題通常降低 Recall(召回率)。
Polysemy(一詞多義)
同一個詞在不同情境中具有不同意思,例如:
bank:銀行/河岸。Apple:蘋果公司/水果。
一詞多義可能使系統找回不相關文件,因此通常降低 Precision(精確率)。
Term Matching 與 Concept Matching
- Term Matching(字詞比對):比較是否包含相同文字。
- Concept Matching(概念比對):判斷不同文字是否表達相同概念。
例如「計程車」、「出租車」與「的士」字詞不同,但概念相同。
產生不同名稱的原因包括:
- 不同語言或地區用語。
- 不同專業領域的描述方式。
- 縮寫、別名與專有名詞。
- 同一實體的不同名稱。
因此需要 Named Entity Normalization(命名實體正規化)或語意向量進行統一表示。
WordNet 與分散式表示
WordNet
WordNet 是人工建立的英文詞彙資料庫,可視為一種 Knowledge Graph(知識圖譜),記錄:
- Synonym(同義詞)。
- Antonym(反義詞)。
- Hypernym(上位詞)。
- 不同詞義與詞彙關係。
WordNet 使用 Synset(同義詞集合)組織相近詞義,並利用 Hypernym 表示「is-a」關係:
優點是資料乾淨、關係明確;缺點包括:
- 缺乏上下文判斷。
- 新詞與流行語不足。
- 人工維護成本高。
- 不容易計算連續的相似程度。
Continuous, Distributed Representation
現代方法使用連續實數向量表示詞彙:
- Continuous(連續):向量元素是連續實數。
- Distributed(分散式):詞義分散在多個維度,而非由單一維度決定。
各維度通常沒有清楚、固定的人類語意,但整體向量可以表示詞彙關係。
Language Model 與詞向量
Language Model(語言模型)的基本任務,是根據前面的文字預測下一個 Token:
例如:「我今天去學校上……」,模型可能預測下一個詞是「課」。
Bengio 2003 的 Neural Probabilistic Language Model(神經機率語言模型)提出:
- 為每個詞建立實數向量。
- 使用詞向量預測下一個詞的機率。
- 同時學習模型參數與詞向量。
這種方法有效的原因:
- 相似詞會學到相似向量。
- 連續向量空間具有平滑性。
- 模型能將已學規律推廣到未見過的句子。
例如模型看過「可愛的狗」,由於「狗」與「貓」的向量相近,也可能理解「可愛的貓」是合理句子。
詞向量的能力與限制
詞向量可能保留語意關係方向,例如:
其他例子:
詞向量也可應用於跨語言映射。若不同語言的向量空間具有類似結構,就可能將一種語言的詞向量映射到另一種語言,協助完成翻譯。
但詞向量仍有以下問題:
- 鄰近詞不一定符合人工字典中的關係。
- 訓練語料中的偏見可能被模型學習。
- 單一向量維度通常難以解釋。
- 向量運算結果只是近似關係,不是絕對規則。
Distributional Hypothesis(分布假說)
核心概念:一個詞的意思,可以從它經常出現的上下文判斷。
例如:
cat與dog都常和lick、fur、eat、run一起出現。truck則常與road、drive、wheel一起出現。
因此,即使沒有人直接告訴模型「貓和狗相似」,模型仍可根據上下文分布推測兩者關係。
這也是 Self-supervised Learning(自我監督學習)能從大量文字中學習語言規律的重要基礎。
Co-occurrence(共同出現)
統計兩個詞在一定範圍內共同出現的次數,可建立 Co-occurrence Matrix(共現矩陣)。
矩陣中的每一列,可視為一個詞與其他詞共同出現情況的向量。使用環境相似的詞,其共現向量也可能相似。
Latent Semantic Analysis(潛在語意分析,LSA)
基本流程:
LSA 可使用 SVD(Singular Value Decomposition,奇異值分解)保留矩陣中的主要資訊,將高維共現向量壓縮成低維向量。
語料越多,共同出現的統計規律通常越穩定,越有機會學到可靠的語意關係。
整體技術演進
| 階段 | 主要判斷依據 | 主要限制 |
|---|---|---|
| 規則式系統 | 關鍵字與人工規則 | 無法理解上下文 |
| 倒排索引 | 詞是否出現在文件 | 依賴完全比對 |
| BoW/TF-IDF | 詞頻與詞的重要性 | 忽略詞序與深層語意 |
| BM25 | 詞頻、稀有度與文件長度 | 仍以字詞匹配為主 |
| WordNet | 人工建立的詞彙關係 | 更新慢、缺乏情境 |
| LSA/共現模型 | 詞彙共同出現模式 | 依賴大量語料與統計 |
| Word Embedding | 稠密向量與語意距離 | 可解釋性低、可能帶有偏見 |
| 現代語言模型 | 上下文、序列規律與自我監督學習 | 計算成本高,仍可能誤判或產生偏誤 |
最重要的觀念是:NLP 已由「比較字是否相同」,逐漸發展為「根據上下文與向量空間理解概念是否相近」。

