[自然語言處理](https://app.notion.com/p/3e6fc631b03081b4a9e8f91f3411f61f) › [W2(9/17)](https://app.notion.com/p/3e6fc631b03081a18b13fad72a8874fd) › 08|影片 [2:29:52–2:59:43](https://www.youtube.com/watch?v=MnA5KUETSg4&t=8992s)|投影片 W1_NLP_brief p.54–64|上一章 [07 課堂提問與 BM25(2:16–2:29)](https://app.notion.com/p/3e6fc631b030819ca51ee21869f5c86d)|下一章 無
## 重點
- 詞袋和 one-hot 都是一個字佔一維,不同的字互相垂直,所以「貓 vs 狗」和「貓 vs 卡車」的相似度都是 0。詞袋還不管字序,「錢,不是問題」和「不,錢是問題」會變成同一個向量;詞表外的字則完全比對不到。
- 解法是 word embedding(詞向量):用少數幾個維度的實數描述每個字,意思相近的字在空間裡靠近。老師說重點不在「稠密」,而在這些數字是「學出來的」,不是「數出來的」。
- 為什麼一定要走這一步:同義詞會拉低 recall,一詞多義會拉低 precision。只比對字面(term matching)遇到不同語言、領域用語、新詞就失敗。人工字典 WordNet 又是離散的,不看上下文,也要人維護。下週用 word2vec 學詞向量。
## Exam-ready
- **Bag of Words**: "錢, 不是問題" "不, 錢是問題"(W1_NLP_brief p.55;詞袋不管字序,兩句會變成同一個向量)
- **One-hot encoding**: "Vocabulary space" "Term vector" "= (1,1,1,1,0,0,0,0)"(W1_NLP_brief p.57;便宜、有名、讚、嫩四個字的 one-hot 向量 OR 起來)
- **Word embedding (dense space)**: "Concept space" "Term vector"(W1_NLP_brief p.58)【老師強調】(2:42:35)
- **Feature space**: "Feature space" "Data instance"(W1_NLP_brief p.59;三國志武將表,欄位是特徵,每一位武將是一個 instance)
- **Synonymy (同義詞)**: "the same concept can be expressed using different sets of terms" "e.g. bandit, brigand, thief" "negatively affects recall ?"(W1_NLP_brief p.60)
- **Polysemy (一詞多義)**: "identical terms can be used in very different semantic contexts" "e.g. bank" "repository where important material is saved" "the slope beside a body of water" "negatively affects precision ?" "Hybrid cases"(W1_NLP_brief p.60)
- **Concept matching v.s. term matching**: "A query may conceptually be very close to a given set of documents, but corresponding consine similarity is small, because … Using different language … Using different domain lexicons … A small fraction of the entire dictionary for present terms"(W1_NLP_brief p.61;consine 是投影片原文拼字,考試寫 cosine)
- **WordNet**: "Dictionary based solutions" "WordNet: a resource containing list of synonyms sets and hypernyms (“is a” relationships)"(W1_NLP_brief p.62)
- **Issues of WordNet**: "context is not considered" "New words missing" "Maintenance cost" "Hard to measure the similarity! -- one-hot vector -- every different words are orthogonal"(W1_NLP_brief p.63)
- **Continuous, Distributed Representations**: "By continuous we mean real-valued" "Distributed means a vector in a space, like" dog = [0.6, 0.4], cat = [0.5, 0.4](W1_NLP_brief p.54、p.64)
## [2:29:52](https://www.youtube.com/watch?v=MnA5KUETSg4&t=8992s) 稀疏向量的死穴
到上一章為止,一篇文章可以用 TF-IDF 變成向量。它的維度等於詞表大小(老師說約 3 萬維),大部分是 0,叫 sparse vector(稀疏向量)。問題是每個字各佔一維:貓一維、狗一維、卡車一維,不同的字互相垂直,所以貓跟狗、貓跟卡車的相似度都是 0。可是人會覺得貓跟狗比較像,至少都是活的。所以我們想要更聰明的 word representation(字的表示法):相似度可以是 0.6 這種連續的數字,而且所有字在空間裡要分散開,才分得出概念的差別。p.54 的標題 "Motivating Continuous, Distributed Representations" 講的就是這個動機,答案在 p.64。
[[IMG: C:\D槽\TAICA課程\_work\notes-v2\nlp-w2\img\nlp_w2_ch08_brief_p064.png | p.64:二維空間裡 cat 和 dog 幾乎同方向,truck 指向別處]]
要先懂什麼?cosine similarity 怎麼算?
cosine similarity(餘弦相似度)看兩個向量指的方向有多接近:cos(a, b) = a·b ÷ (|a| × |b|)。a·b 是對應位置相乘再相加,|a| 是向量長度(每個數平方、加總、開根號)。值在 −1 到 1 之間:1 是同方向,0 是垂直(毫不相干),−1 是完全相反。
- one-hot:cat = (1, 0, 0)、dog = (0, 1, 0)。cat·dog = 1×0 + 0×1 + 0×0 = 0,所以 cos = 0。換成卡車也一樣是 0。
- p.64 的實數向量:dog·cat = 0.6×0.5 + 0.4×0.4 = 0.46;|dog| = √0.52 = 0.721,|cat| = √0.41 = 0.640;cos = 0.46 ÷ (0.721 × 0.640) = 0.996,幾乎同方向。
- truck 從圖上估約 (0.1, 0.7):dog·truck = 0.06 + 0.28 = 0.34;|truck| = √0.50 = 0.707;cos = 0.34 ÷ (0.721 × 0.707) = 0.667,明顯比 0.996 低。
continuous 和 distributed 到底是什麼意思?
- 投影片的定義(考試寫這個):"By continuous we mean real-valued"(連續=每一維是實數,不是只有 0 或 1);"Distributed means a vector in a space"(分散式=每個字是空間裡的一個向量)。
- 老師口頭補充的重點:值要分散開。如果相似度的值域是 0 到 1,卻每一對都算出 0.6 到 0.7,就等於沒用,要能鑑別出概念的差別。
- 教科書常見的說法:一個字的意思分散寫在很多維度上,每一維也被很多字共用。one-hot 則是一維只代表一個字(local representation,局部表示)。
- 歷史:老師說源頭應該提 Bengio 的論文(2003,下週 p.65),但大家公認的里程碑是 word2vec(2013)那個年代。
老師原話是什麼?
「貓跟狗應該比較像啊,對,至少這是活的啊,卡車是死的」(2:30:31)
「能不能告訴我一個 0.6 的數字」(2:30:59)
「我給你的值就是 0 到 1,但是你怎麼算出來每次都是 0.6 到 0.7」(2:31:18)
## [2:32:04](https://www.youtube.com/watch?v=MnA5KUETSg4&t=9124s) 詞袋模型與斷詞提問
以前的做法雖然用了向量,本質上還是很暴力,叫 bag of words(詞袋:把文章的字全倒進一個袋子,只記每個字出現幾次,不管順序)。p.55 的圖把一段英文影評變成 ('the', 8)、('very', 4)、('good', 2)… 這種清單。向量雖然有第一維、第二維,但比對時只看同一維有沒有值,字怎麼排列完全沒被記下。所以「錢,不是問題」和「不,錢是問題」斷完詞是同一袋字,相似度是 1。接著老師回答同學問的斷詞(tokenization):英文以前直接用空白切;現在的 LLM 改用 BPE,先拆到字母再依頻率合併。中文沒有空白,常用「長詞優先」。
它到底怎麼運作?兩句話怎麼變成同一個向量?
兩句都斷成 錢/不/是/問題。詞表 = [錢, 不, 是, 問題]。
- 「錢,不是問題」= (1, 1, 1, 1)
- 「不,錢是問題」= (1, 1, 1, 1)
- cos = (1+1+1+1) ÷ (2 × 2) = 1,電腦認為兩句一模一樣。
老師也提到把「是」當停用詞拿掉,剩下三個 token 各出現一次,結果一樣是 1。意思完全相反的兩句話,在詞袋裡分不出來。
它到底怎麼運作?長詞優先怎麼斷中文?
長詞優先(longest match first,又叫最大匹配法):從左邊開始,先試字典裡最長的詞,組得出四個字就不看兩個字,都不行才一個字一個字退。
| 例子與字典 | 剩下的字 | 依序嘗試 | 切出 |
| 例一:字典有 自然、自然語言、語言、處理、很、有、有趣(最長 4 字) | 自然語言處理很有趣 | 自然語言 ✓ | 自然語言 |
| 處理很有趣 | 處理很有 ✗、處理很 ✗、處理 ✓ | 處理 |
| 很有趣 | 很有趣 ✗、很有 ✗、很 ✓ | 很 |
| 有趣 | 有趣 ✓ | 有趣 |
| 例二:字典有 研究、研究生、生命、命、起源(最長 3 字) | 研究生命起源 | 研究生 ✓ | 研究生 |
| 命起源 | 命起源 ✗、命起 ✗、命 ✓ | 命 |
| 起源 | 起源 ✓ | 起源 |
例一切得很好。例二切成「研究生/命/起源」,正確的是「研究/生命/起源」。這就是老師說的:不見得對,但成功機率非常高。實務上也常用機率模型來斷。
BPE 是什麼?為什麼 strawberry 會被拆開?
BPE(Byte Pair Encoding,位元組對編碼)是 LLM 建詞表的方法,老師說之後會細講。做法:先把字拆成一個一個字母,然後反覆把語料裡最常一起出現的相鄰兩塊合併成新的 token。常見的字最後會變成一整塊,罕見字或新字則拆成幾塊常見的片段,所以不會出現「完全不認得的字」。
berry 本身是常見字,所以 strawberry 可能被拆成兩個 token(例如 straw + berry),實際怎麼拆要看預訓練時的資料分布。
老師原話是什麼?
「比如說這句話錢不是問題,不錢是問題,當你斷完字之後,都是這三個 token 啊」(2:32:45)
「長詞優先就是他可以組出四個字的就不要去看他兩個字」(2:34:18)
「這個不見得對,但是基本上成功機率非常高的一種斷字方法」(2:34:24)
## [2:35:12](https://www.youtube.com/watch?v=MnA5KUETSg4&t=9312s) 從評論到 one-hot encoding
老師先說詞袋其實很好用,拿來做簡單應用通常差不了多少。p.56 是 opinion mining(意見探勘)的例子:從正面評論抽出 便宜、有名、讚、嫩,從負面評論抽出 老、難吃、太貴、差。把這 8 個字當詞表,就是 8 維的 vocabulary space(詞表空間)。one-hot encoding 是指每個字只有自己那一維是 1、其他都是 0(p.57)。一篇評論的向量,就是把它含有的字的 one-hot 向量 OR 起來。問題在 p.56 最下面那句「肉新鮮且價位低?」:「新鮮」「價位低」不在詞表裡,完全比對不到。老師真正想講的是:怎麼讓詞跟詞之間的相似度拉近,而不是完全一樣才 1 分、不一樣就 0 分。
它到底怎麼運作?手算三則評論的向量
詞表順序照 p.57:便宜、有名、讚、嫩、難吃、太貴、差、老。
| 評論 | 便宜 | 有名 | 讚 | 嫩 | 難吃 | 太貴 | 差 | 老 |
| 正面:今天的牛排很讚又便宜/前菜很有名/肉質很嫩 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 |
| 負面:牛小排煮的有點太老/難吃又貴/價格太貴服務又差 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 |
| 新評論:肉新鮮且價位低 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
- 正面 = (1,1,1,1,0,0,0,0),就是 p.57 右下角那個向量。
- 正面和負面沒有任何一維同時是 1,內積 = 0,cos = 0。
- 新評論是全 0 向量,長度是 0,cos 根本算不出來,系統沒辦法判斷它是好評。可是人一看就知道「價位低」約等於「便宜」、「新鮮」接近「嫩」。
用生活例子講,one-hot 是什麼?
老師用血型舉例。如果把血型寫成 A=1、B=2、O=3,模型會以為 O 比 A「大」、B 夾在中間,其實血型沒有大小。所以改成三個欄位「是不是 A 型」「是不是 B 型」「是不是 O 型」:A 型的人就是 (1, 0, 0)。只有一格是 1、其他都是 0,這就叫 one-hot。機器學習做特徵工程(feature engineering,把原始資料整理成模型吃得下的欄位)時很常用。
OR 起來和上一章的 TF 有什麼不同?
OR 只記「有沒有出現」,出現幾次都是 1。如果改成把 one-hot 向量相加,就會得到每個字出現幾次,也就是第 06 章的 TF。兩種做法都一樣,只認得詞表裡一模一樣的字。
老師原話是什麼?
「怎麼拉近詞跟詞之間的相似度,而不是說完全不一樣就是零分」(2:35:35)
「其實字沒有出現在這邊了就 hit 不到了」(2:38:09)
## [2:38:18](https://www.youtube.com/watch?v=MnA5KUETSg4&t=9498s) Word embedding:稠密的概念空間
換一種表示法:不再一個字一維,而是用固定幾個維度描述每個字,而且每一維都有值。這叫 dense space(稠密空間),投影片寫成 concept space(概念空間,p.58 也是 8 維 d1–d8)。每一維也許跟價格或食材有關,但叫什麼不重要,也不需要知道。維度要開多少,是預算問題:算力夠就從 8 加到 20,看能不能更有效地分辨所有字。直覺上壓縮會變差,其實不會,反而能把共通的概念聚在一起,讓「便宜」跟「讚」比「便宜」跟「差」更像。老師強調這個概念很重要,因為現在的 NLP 基本上都在 embedding 的層次上處理【老師強調】(2:42:35)。重點不在稠密,而在這些數字是用 unsupervised 或 supervised 的方式訓練出來的,不是從文章分布數出來的。中文叫「詞嵌入」:用一串壓縮的數字嵌在字上來代表它。
BERT 出現後,有人分析 token 向量每一維代表什麼,也找得到一些分布。老師覺得那比較像一廂情願的解讀,而且這件事不是重點。
**注意:p.58 表格裡的數字老師說是亂寫的。真的拿去算,cos(便宜, 讚) = −0.21、cos(便宜, 差) = −0.25,差距很小。要看效果請看下面自己設計的例子。**
它到底怎麼運作?手算一次:便宜跟誰比較像?
假設只用兩維:(價格划算的程度, 好吃的程度)。這些數字是示範用的。
| 字 | 向量 | 和「便宜」的 cosine |
| 便宜 | (0.9, 0.3) | 1 |
| 價位低 | (0.8, 0.1) | 0.98 |
| 讚 | (0.5, 0.9) | 0.74 |
| 差 | (−0.4, −0.8) | −0.71 |
| 太貴 | (−0.9, 0.0) | −0.95 |
算一格給你看:便宜·讚 = 0.9×0.5 + 0.3×0.9 = 0.72;|便宜| = √0.90 = 0.949;|讚| = √1.06 = 1.030;cos = 0.72 ÷ (0.949 × 1.030) = 0.74。
在 one-hot 裡,「價位低」跟「便宜」的相似度是 0。在這裡是 0.98,所以「肉新鮮且價位低」終於可以被判成好評。前提是「價位低」在訓練時出現過;完全沒見過的字,詞向量一樣沒辦法,這就是 BPE 這類拆字方法要解的問題。
要先懂什麼?數字「學出來」是怎麼學的?
老師的講法:先找人標註,例如「便宜跟太貴不像」「便宜跟讚比較像」。接著從頭訓練一個神經網路,去學每個字那 8 個數字,讓正面的字聚成一群,負面的字聚成另一群,而且兩群要分開。
「學」的短版流程:
1. 每個字先給隨機的數字。
2. 算「現在離目標差多少」,這個數叫 loss(損失),例如標成相似的兩個字,cosine 越低,loss 越大。
3. 用梯度下降(gradient descent:每個數字都往讓 loss 變小的方向挪一點)更新。
4. 重複很多次。
示意:便宜 = (0.9, 0.3),讚一開始是隨機的 (0.1, −0.5),cos = −0.12。把讚往便宜的方向挪一半,變成 (0.5, −0.1),cos 就升到 0.87。
老師原話是什麼?
「大家概念上就覺得你有壓縮應該會變差吧,但是其實上是不會,而且是能夠更 aggregate 共通的 concept 在裡面」(2:40:52)
「我這數字亂寫的」(2:41:15)
「這概念其實還蠻重要的,因為在現在 NLP 的處理的概念裡面,我們其實基本上都是在 embedding 的 level」(2:42:35)
「重點在於是說它這些字,它這些上面的 dimension 的數字是學出來的」(2:43:28)
## [2:43:54](https://www.youtube.com/watch?v=MnA5KUETSg4&t=9834s) 三國志比喻:特徵空間
p.59 是三國志遊戲的武將表。如果只看武力,呂布、張飛、關羽、趙雲都在 96 到 100 之間,幾乎分不出來。加上統率、智力、政治一起看,就能分辨他們,還能比較誰跟誰比較像,例如張飛跟呂布都很容易中計。這張表的欄位就是 feature space(特徵空間),每一位武將是一個 data instance(資料實例)。用固定長度、連續的數字統一描述每個個體,只要能連續、分散式地描述,又分得出差別,就是好的 representation(表示法)。如果用 one-hot,就只能說「這是呂布」,沒辦法回答呂布比較像張飛還是比較像趙雲。跟 word embedding 的差別只在這裡的欄位有名字,比較好解釋;詞向量的維度沒有名字。
| 兩位武將 | 只看武力:差幾分 | 統率、武力、智力、政治:歐氏距離 |
| 呂布 vs 張飛 | 2 | **10.1**(很像) |
| 關羽 vs 趙雲 | 1 | **5.5**(很像) |
| 張飛 vs 關羽 | 1 | 59.0 |
| 呂布 vs 關羽 | 3 | 68.1 |
| 呂布 vs 趙雲 | 4 | 71.6 |
它到底怎麼運作?歐氏距離怎麼算?
p.59 的數字(統率, 武力, 智力, 政治):呂布 (91, 100, 26, 13)、張飛 (90, 98, 30, 22)、關羽 (96, 97, 73, 62)、趙雲 (92, 96, 75, 65)。
歐氏距離(Euclidean distance)=對應欄位相減、平方、加總、開根號。
- 呂布 vs 張飛:差 (1, 2, −4, −9),平方和 1 + 4 + 16 + 81 = 102,√102 = 10.1。
- 關羽 vs 趙雲:差 (4, 1, −2, −3),平方和 16 + 1 + 4 + 9 = 30,√30 = 5.5。
只看武力的話,張飛跟關羽只差 1 分,看起來最像。四項一起看,張飛其實像呂布(有勇少謀),關羽像趙雲(智勇雙全)。維度選得好,才分得出真正的相似。
老師原話是什麼?
「只要這幾個屬性都能夠區分我這幾個角色的描述的時候,那他會比 one-hot 好很多啊」(2:45:07)
## [2:46:15](https://www.youtube.com/watch?v=MnA5KUETSg4&t=9975s) 第一個作業預告
這份投影片最後講到 word embedding,也會帶出第一個作業(W3 公布的作業一主題就是詞向量)。老師說作業應該下禮拜就出,今天就可以先到課程 GitHub 點回 2025 或 2024 年的版本看。作業內容不太改,但應同學要求,難度會稍微調高,因為現在 vibe coding(用 AI 直接生出程式)太容易,把作業餵進去就做出來了。老師自己也一直試著找 AI 做不出來的題目,都失敗。所以重點在於你能吸收 AI 給你的做法:用 AI 做作業不難,但你們務必要自己搞懂它在做什麼【老師強調】(2:47:26)。
老師原話是什麼?
「應該下禮拜就出了」(2:46:25)
「基於有同學要求難度,我們應該會稍微調高一點難度了」(2:46:39)
「重點還是在於你能夠吸收 AI 給你的做法」(2:47:09)
「你們務必要自己自己搞懂他在幹什麼」(2:47:26)
## [2:47:32](https://www.youtube.com/watch?v=MnA5KUETSg4&t=10052s) 同義詞、一詞多義與概念比對
為什麼要從 one-hot 走到稠密向量?因為兩個問題一直困擾 NLP,以前只能靠人工處理(p.60)。連續的向量可以讓同義詞的向量靠近;同一個字在不同句子裡拿到不同的 embedding,就能處理一詞多義。LLM 靠 attention(注意力機制,之後會教)做到後者:前文說「買一台 Mac」,Apple 的表示就偏向公司;前文談「營養成分」,Apple 就偏向水果。字的表示會隨著一層一層計算慢慢改變。一句話裡兩種問題都有時(p.60 的 hybrid cases),效果就不好。老師也提醒:把一整句轉成一個向量時,大家的向量都很接近,句子越長越接近,這是大語言模型的特性。
| Synonymy(同義詞) | Polysemy(一詞多義) |
| 是什麼 | 不同的字,同樣的意思 | 同一個字,不同的意思 |
| 例子 | bandit、brigand、thief(都是盜賊) | bank(銀行/河岸)、蘋果(公司/水果) |
| 字面比對會怎樣 | 用別的字寫的相關文件找不到 | 意思不對的文件也被找回來 |
| 傷到哪個指標 | **recall** 下降 | **precision** 下降 |
p.61 再往前推一步:查詢在概念上跟某些文件很接近,cosine 卻很小,因為電腦只做 term matching(字面比對),沒做到 concept matching(概念比對)。查詢通常很短,字面沒對到就沒中。三種典型情況:
- 用不同語言:計程車、出租车、的士。老師說光是把「出租车」改寫成繁體,字面就對不上了。
- 用不同領域的用語:智慧型行動運算裝置=手機、AI 伺服器 vs 運算伺服器、高效能溫度調節器=冰箱、互動多媒體視訊裝置=80 吋電視。
- 新詞、詞義隨時間改變:COVID-19、新冠病毒、SARS-CoV-2 病毒。很早以前訓練好的 embedding model 不一定符合現在的用法,要換新的,或用自己的語料再 tune 一次。
老師也提醒,換成 embedding 來比對,這些情況也不見得都 OK。
要先懂什麼?precision 和 recall 怎麼算?
- precision(精確率)=找回來的文件裡,真正相關的比例。
- recall(召回率)=所有相關的文件裡,被找回來的比例。
手算同義詞:有 4 篇講盜賊的文件,2 篇用 thief、1 篇用 bandit、1 篇用 brigand。查「thief」只比對字面,找回 2 篇,都相關。precision = 2/2 = 100%,recall = 2/4 = 50%。漏掉的那一半,就是同義詞害的。
手算一詞多義:想找銀行,查「bank」找回 5 篇,其中 3 篇講銀行、2 篇講河岸。precision = 3/5 = 60%,recall = 3/3 = 100%。混進來的河岸文件,就是一詞多義害的。
老師說 precision/recall 下次補充,並提到做資訊檢索時通常 recall 非常重要;一般機器學習比較常講 accuracy(準確率)。
用生活例子講 term matching 的問題?
老師舉研究計畫採購的例子:計畫書寫「手機」會被打回,說是民生用品;寫「智慧型行動運算裝置」就過了。計畫書寫「運算伺服器」,廠商發票寫「AI 伺服器」,學校說跟計畫寫的不一樣。冰箱寫成「高效能溫度調節器」、電視寫成「互動多媒體視訊裝置」也都過了(老師強調只是舉例)。審核的人只比對字面,就是 term matching;明明是同一個東西,概念比對才會認出來。
老師原話是什麼?
「所以 recall 就是說有些該找的找不到啊」(2:48:05)
「他要怎麼知道 Apple 在這句話的表示是不一樣」(2:49:45)
「尤其是越長的句子向量都會越接近」(2:51:02)
「你用 embedding 的角度他其實也不見得 OK 這樣子」(2:53:47)
## [2:54:53](https://www.youtube.com/watch?v=MnA5KUETSg4&t=10493s) WordNet 與貓狗卡車
以前比較人工的做法是 WordNet:人工建的字詞關係表,非常精準、非常乾淨,也有中文版。p.62 的定義是一份 synonym sets(synset,同義詞集)加上 hypernyms(上位詞,"is a" 關係)的資源,老師口頭又多提了反義詞(p.63 圖上也有 antonyms)。Python 可以用 nltk 直接查,例如 panda 的上位詞一路是 procyonid → carnivore → mammal → … → animal → … → entity。老師說現在直接問 LLM 就好,因為這些都在它的訓練資料裡。WordNet 的問題(p.63):不看上下文、缺新詞、要人維護。而且關係是離散的,有關就有關、反義就反義,本質上還是 one-hot,不同的字互相垂直,很難量出相似度有多少。
[[IMG: C:\D槽\TAICA課程\_work\notes-v2\nlp-w2\img\nlp_w2_ch08_brief_p063.png | p.63:WordNet 的同義詞集(Synset A、B、C),同一個字 honorable 出現在兩個 synset,C 和 B 是反義]]
所以目標是 p.64:就算只有兩個維度,也要讓貓跟狗近一點、卡車遠一點。三個字可以自己填數字,但有 100 個、甚至幾萬個字時,就得訓練:準備對比的訓練資料,用 contrastive learning(對比學習)學出每個字該用什麼數字,讓向量的遠近符合我們定義好的關係。這就是 word representation 在做的事,下週講 word2vec,說明為什麼神經網路能學出貓比較接近狗。**注意:老師說不會講 GloVe,只講 word2vec (2:58:06)。**最後有同學問 recall 是什麼,老師說下次補充,並說課程 GitHub 連結在投影片的 Live Announcement 上(NTU COOL 找不到)。
用生活例子講,synset 和 hypernym 是什麼?
synset 像同義詞典的一格:「好的、可敬的、體面的」放在同一格。同一個字可以出現在好幾格,因為它有好幾個意思,例如 p.63 的 honorable 同時在 Synset A 和 B。hypernym 像生物分類:熊貓是一種食肉目動物,食肉目是一種哺乳類,一路往上到「實體」。這些關係都是人一筆一筆填的,所以很準,但新詞進不來,也看不出「貓跟狗有多像」這種程度。
要先懂什麼?contrastive learning 在做什麼?
contrastive learning(對比學習):給模型成對的例子,告訴它哪些該像(正例,例如 cat 和 dog)、哪些不該像(負例,例如 cat 和 truck)。訓練時把正例的向量拉近、負例的向量推遠,也就是讓 cos(cat, dog) 往 1 走、cos(cat, truck) 往下走。學完的結果就像 p.64:cat 和 dog 的 cos 是 0.996,cat 和 truck 只有 0.73 左右。
別人怎麼教這個?
[Stanford CS224N(Winter 2021)Lecture 1 - Intro & Word Vectors](https://www.youtube.com/watch?v=rmVRLeJRkl4):p.62 就是引用這門課。這一講談 WordNet 的問題、one-hot 為什麼不行,一路講到 word2vec(英文授課)。
老師原話是什麼?
「他其實是人工建的,非常精準非常乾淨的一個所謂的字詞關係的一個對照表」(2:55:11)
「你自己就可以寫這個數字,但是如果現在有 100 個 instance」(2:57:17)
「不過我們不會提到 GloVe,大概是講 word2vec 而已」(2:58:06)
「尤其是在做資訊檢索的時候通常 recall 非常重要」(2:58:59)
## Self-check
Q1. Why can't one-hot (bag-of-words) vectors measure how similar two words are? Use cat, dog and truck, and explain why "錢,不是問題" and "不,錢是問題" get the same vector.
**Answer**: In one-hot encoding each word occupies its own dimension, so every two different words are orthogonal: cat·dog = cat·truck = 0 and the cosine similarity is 0 for any pair, although cat and dog are clearly closer in meaning. A bag of words only counts which terms occur and ignores word order, so both sentences contain the same tokens (錢, 不, 是, 問題) and get identical vectors (cosine = 1). Words outside the vocabulary cannot be matched at all.
中文重點:one-hot 裡不同的字互相垂直,相似度一律 0;詞袋不管字序,所以意思相反的兩句一模一樣。
Q2. Define synonymy and polysemy. Which retrieval measure does each one hurt, and why?
**Answer**: Synonymy: the same concept can be expressed using different sets of terms (bandit, brigand, thief). A term-matching search misses relevant documents that use other words, so it negatively affects recall. Polysemy: identical terms can be used in very different semantic contexts (bank = financial institution or river bank). The search returns documents with the wrong sense, so it negatively affects precision. Example: 4 relevant docs, only 2 use "thief", so recall = 2/4 = 50%.
中文重點:同義詞害 recall(該找的找不到),一詞多義害 precision(找回來的混了別的意思)。
Q3. What do "continuous" and "distributed" mean in "continuous, distributed representations"? How does a word embedding differ from a one-hot vector?
**Answer**: Continuous means real-valued; distributed means each word is a vector in a (dense) space. Compared with one-hot: (1) its dimension is small and fixed (e.g., a few hundred) instead of the vocabulary size, and every dimension is used; (2) the values are learned by training, not counted from document statistics; (3) similar words get similar vectors, e.g. dog = [0.6, 0.4], cat = [0.5, 0.4], cosine ≈ 0.996.
中文重點:連續=實數,分散式=空間中的向量;詞向量維度小、每維都有值、數字是學出來的,所以能量出相似度。
Q4. Give three reasons why a query can be conceptually close to a document but still have a small cosine similarity. Why is WordNet not a complete fix?
**Answer**: Term matching fails when (1) different languages or scripts are used (計程車 / 出租车 / 的士), (2) different domain lexicons are used (智慧型行動運算裝置 vs 手機), or (3) new terms appear that the dictionary does not cover (COVID-19, SARS-CoV-2). WordNet, a hand-built resource of synonym sets and hypernyms, does not consider context, misses new words, has a high maintenance cost, and its relations are discrete (one-hot-like, every different word orthogonal), so it cannot measure degrees of similarity.
中文重點:不同語言、不同領域用語、新詞都會讓字面比對失敗;WordNet 是人工、離散、不看上下文的,量不出「有多像」。