[自然語言處理](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 一個字佔一維,不同的字互相垂直,貓狗、貓卡車的相似度都是 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)
- 中文:在詞表空間(vocabulary space)裡每個字只有自己那一維是 1;便宜、有名、讚、嫩 OR 起來就是這則評論的向量。
- **Word embedding (dense space)**: "Concept space" "Term vector"(W1_NLP_brief p.58)【老師強調】(2:42:35)
- 中文:詞向量用幾維的概念空間(concept space)描述每個字,每一維都有值。白話:用幾個學出來的分數描述一個字。
- **Feature space**: "Feature space" "Data instance"(W1_NLP_brief p.59)
- 中文:特徵空間=表格的欄位(統率、武力⋯);資料實例(data 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)
- 中文:同一個概念可用不同的字表達(都是盜賊);字面比對會漏掉別的字寫的文件,傷害 recall(召回率:該找的有沒有找到)。
- **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)
- 中文:同一個字在不同語境意思不同:bank 是存放重要東西的地方(銀行),也是水邊的斜坡(河岸);會找回意思錯的文件,傷害 precision(精確率:找回來的有多少是對的)。hybrid cases=兩種問題並存。
- **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)
- 中文:查詢和文件概念上很近,cosine 卻很小,因為用了不同語言、不同領域詞彙(domain lexicons),或是字典沒收的新詞。consine 是投影片拼錯,考試寫 cosine。
- **WordNet**: "Dictionary based solutions" "WordNet: a resource containing list of synonyms sets and hypernyms (“is a” relationships)"(W1_NLP_brief p.62)
- 中文:用字典解決:WordNet 是人工建的同義詞集(synset)加上位詞(hypernym,「A 是一種 B」)資源。
- **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)
- 中文:不看上下文、缺新詞、要人維護;本質還是 one-hot,不同的字互相垂直(orthogonal),量不出有多像。
- **Continuous, Distributed Representations**(dog = [0.6, 0.4],cat = [0.5, 0.4]): "By continuous we mean real-valued" "Distributed means a vector in a space, like"(W1_NLP_brief p.54、p.64)
- 中文:連續=每一維是實數,不是只有 0 或 1;分散式=每個字是空間裡的一個向量。dog 和 cat 很接近,量得出很像。
## [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)。老師說源頭是 Bengio 的論文,公認的里程碑是 word2vec(我補充:約 2003、2013 年)。
要先懂什麼?向量、維度、垂直、TF-IDF、cosine
- 向量(vector):一串排好順序的數字,例如 (0.6, 0.4)。可以想成從原點出發的一支箭頭,數字決定箭頭往哪裡指。
- 維度(dimension):這串數字有幾格。one-hot 一個字佔一格,詞表有 3 萬個字,向量就有 3 萬格。
- 垂直(orthogonal):兩支箭頭成 90 度,代表完全沒有共同方向,相似度算出來是 0。
- TF-IDF(本週第 06 章學過:用「這個字在這篇出現幾次」乘上「這個字有多稀有」,幫每個字打分數,整篇文章就變成一串分數)。[06 向量空間模型與 TF-IDF](https://app.notion.com/p/3e6fc631b0308121891cc1705fe5be4a)
- cosine 相似度(本週第 06 章學過:看兩支箭頭的方向有多接近,同方向是 1、垂直是 0)。
生活比喻:one-hot 像只用身分證字號認人,不同人就是不同,沒辦法說兄弟比陌生人像。
考試可能怎麼問:Why is the cosine similarity between two different one-hot word vectors always 0?(為什麼兩個不同字的 one-hot 向量相似度永遠是 0?)
p.64 是我們想要的樣子,每個字是一支箭頭:
[[IMG: C:\D槽\TAICA課程\_work\notes-v2\nlp-w2\img\nlp_w2_ch08_brief_p064.png | p.64:二維空間裡 cat 和 dog 幾乎同方向,truck 指向別處]]
圖上重點:標題「Solution: Continuous, Distributed Representations」=解法:連續、分散式的表示法。「By continuous we mean real-valued」=連續的意思是每一格可以是任何實數(像 0.6),不是只有 0 或 1。「Distributed means a vector in a space」=分散式的意思是每個字是空間裡的一支箭頭。圖中 dog、cat 兩支箭頭幾乎同方向,truck 指向別處。這張圖在說:我們想要的表示法,要讓意思相近的字靠在一起。
cat 和 dog 幾乎重疊(很像),truck 偏向另一邊(不像),相似度不再只有 0 或 1。
下面第一個摺疊在算「兩支箭頭方向有多接近」,這個分數叫 cosine 相似度:同方向是 1、垂直是 0。用 p.64 的數字算,dog 跟 cat 是 0.996(幾乎一樣),dog 跟 truck 只有約 0.67,所以這種表示法真的量得出「貓狗比較像」。
cosine 怎麼算?(進階,可跳過)
cos(a, b) = a·b ÷ (|a| × |b|)(第 06 章)。1 同方向,0 垂直;one-hot 兩兩內積為 0,所以 cos = 0。
- p.64:dog·cat = 0.6×0.5 + 0.4×0.4 = 0.46,|dog| = 0.721,|cat| = 0.640,cos = 0.996。truck 從圖上估約 (0.1, 0.7),cos(dog, truck) = 0.667,明顯較低。
老師原話是什麼?
「貓跟狗應該比較像啊,對,至少這是活的啊,卡車是死的」(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)… 這種清單,字的排列沒記下。所以「錢,不是問題」和「不,錢是問題」斷完詞是同一袋字(老師把「是」拿掉,剩三個 token),相似度是 1。
token(詞元)是電腦切字之後的每一小塊,可能是一個字、一個詞或半個詞。下面的 LLM(大型語言模型)是像 ChatGPT 這種讀過大量文字、會接話的模型。
生活比喻:詞袋像把字卡全倒進袋子搖一搖,只知道有哪些卡、各幾張,不知道原本的順序。
考試可能怎麼問:What information does a bag-of-words model throw away? Give an example.(詞袋丟掉了什麼資訊?舉例。)
同學問斷詞(tokenization)。英文以前用空白切,現在的 LLM 改用 BPE(見下方摺疊)。中文沒有空白,常用「長詞優先」(最大匹配法),步驟如下:
```mermaid
flowchart TD
A["從句子最左邊開始"] --> B["取字典裡最長詞那麼長的一串字"]
B --> C{"這串字在字典裡嗎?"}
C -->|在| D["切出這個詞,從下一個字繼續"]
C -->|不在| E["去掉最後一個字再試(剩一個字就直接切)"]
E --> C
D -->|還有字| B
```
也就是能組出四個字的詞,就不去看兩個字的。老師說它不見得對,但成功機率非常高;實務上也常用機率模型來斷。
下面第一個摺疊用「研究生命起源」示範長詞優先怎麼切錯:它先抓最長的「研究生」,結果切成「研究生/命/起源」,意思就跑掉了。
長詞優先會切錯嗎?(進階,可跳過)
「研究生命起源」(字典有 研究、研究生、生命、命、起源)→ 先切出最長的「研究生」,得到 研究生/命/起源,正確是 研究/生命/起源。這就是「不見得對」。
BPE 是什麼?為什麼 strawberry 會被拆開?
BPE(Byte Pair Encoding)是 LLM 建詞表的方法,之後會細講:先拆成字母,再反覆把最常一起出現的相鄰兩塊合併成新 token。常見字變成一整塊,罕見字拆成幾塊常見片段。berry 本身常見,所以 strawberry 可能拆成 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(p.57);一篇評論的向量,就是把它含有的字 OR 起來。問題在 p.56 最下面的「肉新鮮且價位低?」:「新鮮」「價位低」不在詞表裡,完全比對不到。老師想講的是:要讓相近的詞相似度拉近,不是一樣才 1 分、不一樣就 0 分。
OR(「或」運算):只要評論裡出現這個字,那一格就填 1,沒出現就填 0。所以評論向量就像一張「提到了哪些字」的勾選表。
生活比喻:老師用血型舉例。寫成 A=1、B=2、O=3,模型會以為 O 比 A「大」;改成「是不是 A 型/B 型/O 型」三個欄位,A 型就是 (1, 0, 0)。
考試可能怎麼問:Represent a review with one-hot vectors and explain why "價位低" cannot be matched.(用 one-hot 表示評論,說明「價位低」為何比對不到。)
下面第一個摺疊把好評、負評真的寫成 8 格的 0/1 向量。結果:好評和負評沒有任何一格同時是 1,相似度是 0;「肉新鮮且價位低」整串都是 0,系統完全判斷不了它是好評還是負評。
它到底怎麼運作?手算三則評論(進階,可跳過)
詞表順序(p.57):便宜、有名、讚、嫩、難吃、太貴、差、老。
- 三則正面評論合起來 = (1,1,1,1,0,0,0,0),就是 p.57 右下角那個向量。
- 三則負面評論 = (0,0,0,0,1,1,1,1)。兩者沒有一維同時是 1,cos = 0。
- 新評論「肉新鮮且價位低」= 全 0,cos 算不出來,系統判斷不了,雖然人知道「價位低」約等於「便宜」。
- OR 只記有沒有出現;改成相加就得到出現次數,也就是第 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 是 d1–d8)。每一維也許跟價格或食材有關,但不需要知道;維度開多少是預算問題,算力夠就從 8 加到 20。直覺上壓縮會變差,其實不會,反而能聚合共通概念,讓「便宜」跟「讚」比跟「差」更像。
老師強調這概念很重要,因為現在的 NLP 基本上都在 embedding 的層次處理【老師強調】(2:42:35)。重點不在稠密,而在這些數字是用 unsupervised 或 supervised 方式訓練出來的,不是從文章分布數出來的。中文叫「詞嵌入」。
supervised(監督式學習)是有人先標好正確答案,讓模型照著學;unsupervised(非監督式學習)是沒人標答案,模型自己從大量文章裡找規律。
注意:老師說這例子不太好:one-hot 真正的維度是詞表大小(可到幾萬),這裡剛好也 8 維;p.58 的數字也是亂寫的。BERT 之後有人分析每一維的意義,老師覺得那比較像一廂情願。
BERT 是 2018 年 Google 推出的語言模型,會依前後文給每個字不同的向量,之後的課會教。
生活比喻:one-hot 像每道菜一個專屬置物櫃;詞向量像用幾項共同指標(價格、口感、服務)幫每道菜打分,分數接近的就是同一類。
考試可能怎麼問:How does a word embedding differ from a one-hot vector, and where do its values come from?(詞向量和 one-hot 差在哪?數字從哪裡來?)
數字怎麼「學出來」?照老師的講法:
```mermaid
flowchart LR
A["找人標註:便宜跟讚像、便宜跟太貴不像"] --> B["每個字先給隨機的數字"]
B --> C["算現在離目標差多少(loss)"]
C --> D["把數字往讓 loss 變小的方向挪一點"]
D --> E{"夠好了嗎?"}
E -->|還沒| C
E -->|夠了| F["正面字聚一群,負面字聚另一群"]
```
老師只說標註後在神經網路裡從頭學;loss 和「挪一點」是我補充的一般做法。
loss(損失)是一個分數,表示模型現在的答案離目標還差多少,越小越好。神經網路是由很多層簡單計算串起來的模型,裡面的數字可以照 loss 自動調整。「往 loss 變小的方向挪一點」跟人工智慧導論的梯度上升是同一個想法(AI 第 3 週學過:沿著分數變化最快的方向一小步一小步走;這裡是讓 loss 往下走)。[AI W3 04 連續空間的梯度上升](https://app.notion.com/p/3e6fc631b030812a99d4eb793b437690)
下面第一個摺疊用兩格的示範數字算相似度:換成詞向量後,「價位低」跟「便宜」從 0 變成 0.98,「差」「太貴」是負的(意思相反);最後一步示範「學」就是把數字挪一挪,讓該像的字越來越像。
它到底怎麼運作?便宜跟誰比較像?(進階,可跳過)
假設只用兩維(划算程度, 好吃程度),數字是示範用:便宜 (0.9, 0.3)、價位低 (0.8, 0.1)、讚 (0.5, 0.9)、差 (−0.4, −0.8)、太貴 (−0.9, 0.0)。
- 和「便宜」的 cosine:價位低 0.98、讚 0.74、差 −0.71、太貴 −0.95。例:便宜·讚 = 0.45 + 0.27 = 0.72,÷ (0.949 × 1.030) = 0.74。
- one-hot 裡「價位低」跟「便宜」是 0,這裡是 0.98,「肉新鮮且價位低」終於能判成好評(前提是訓練時見過「價位低」)。
- 學的一步:讚一開始隨機是 (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,分不出來;加上統率、智力、政治,就能分辨他們,還能比較誰像誰,例如張飛跟呂布都很容易中計。
[[IMG: C:\D槽\TAICA課程\_work\notes-v2\nlp-w2\img\nlp_w2_ch08_brief_p059.png | p.59:上方括住的欄位是 feature space,左邊每一列武將是 data instance]]
圖上重點:上方括號「Feature space」=特徵空間,指統率、武力、智力、政治、槍、騎、弓、戰法這些欄位。左邊括號「Data instance」=資料實例,指項籍、呂布、張飛、關羽等每一列武將。武力欄被反白,表示照武力排序,前幾名都在 96 到 100,只看這一欄分不出誰是誰。這張圖在說:用一組固定欄位描述每個個體,就能互相比較,詞向量也是這樣描述每個字。
欄位就是 feature space(特徵空間),每位武將是一個 data instance(資料實例)。用固定長度、連續的數字統一描述每個個體,又分得出差別,就是好的 representation(表示法)。one-hot 只能說「這是呂布」,比不出他像張飛還是趙雲。跟詞向量的差別只在這裡的欄位有名字。
生活比喻:詞向量就像每個字都有一張遊戲能力卡,數值接近的字,意思也接近。
考試可能怎麼問:What is a feature space, and why is it better than one-hot for comparing instances?(什麼是特徵空間?為何比 one-hot 更能比較個體?)
下面第一個摺疊用四項數值算兩位武將的「距離」(數字差越少,距離越小,就越像)。結果:張飛離呂布只有 10.1、關羽離趙雲只有 5.5,只看武力根本分不出來。
它到底怎麼運作?歐氏距離怎麼算?(進階,可跳過)
(統率, 武力, 智力, 政治):呂布 (91, 100, 26, 13)、張飛 (90, 98, 30, 22)、關羽 (96, 97, 73, 62)、趙雲 (92, 96, 75, 65)。歐氏距離=對應欄位相減、平方、加總、開根號。
- 呂布 vs 張飛:差 (1, 2, −4, −9),平方和 102,√102 = 10.1。
- 關羽 vs 趙雲:差 (4, 1, −2, −3),平方和 30,√30 = 5.5。
只看武力,張飛跟關羽只差 1 分,四項距離卻是 59.0;四項一起看,張飛像呂布(有勇少謀),關羽像趙雲(智勇雙全)。
老師原話是什麼?
「只要這幾個屬性都能夠區分我這幾個角色的描述的時候,那他會比 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)。
生活比喻:AI 像幫你寫作業的家教,考試時家教不在場。
考試可能怎麼問:這段是作業說明,本身沒有考點。
老師原話是什麼?
「應該下禮拜就出了」(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) 同義詞、一詞多義與概念比對
為什麼要走到稠密向量?因為兩個問題一直困擾 NLP,以前只能靠人工(p.60):
| Synonymy(同義詞) | Polysemy(一詞多義) |
| 是什麼 | 不同的字,同樣的意思 | 同一個字,不同的意思 |
| 例子 | bandit、brigand、thief | bank(銀行/河岸)、蘋果(公司/水果) |
| 字面比對會怎樣 | 別的字寫的相關文件找不到 | 意思不對的文件也被找回來 |
| 傷到哪個指標 | **recall** 下降 | **precision** 下降 |
recall=相關文件找回了多少;precision=找回的有多少真相關。連續向量能讓同義詞靠近;同一個字在不同句子拿到不同的 embedding,就能處理一詞多義。LLM 靠 attention(注意力機制,之後會教)做到:前文說「買一台 Mac」,Apple 偏向公司;前文談「營養成分」就偏向水果。兩種問題混在一句(hybrid cases)效果就不好。老師也提醒:整句轉成一個向量時大家都很接近,越長越接近,這是大語言模型的特性。
p.61:查詢概念上很接近文件,cosine 卻很小,因為只做 term matching(字面比對),不是 concept matching(概念比對);查詢很短,沒對到就沒中:
- 不同語言:計程車、出租车、的士。光是把「出租车」改寫成繁體,字面就對不上了。
- 不同領域用語:老師舉計畫採購的例子:「手機」被打回,「智慧型行動運算裝置」就過;計畫寫「運算伺服器」、發票寫「AI 伺服器」學校不准;「高效能溫度調節器」(冰箱)、「互動多媒體視訊裝置」(電視)都過了。
- 新詞、詞義隨時間改變:COVID-19、新冠病毒、SARS-CoV-2 病毒。舊的 embedding model 不一定合用,要換新的或用自己的語料再 tune。
embedding model 是把文字轉成詞向量的模型;語料是拿來訓練的大量文字;tune(微調)是用自己的資料再訓練一下,讓模型認得新詞。
老師也說,換成 embedding 比對也不見得都 OK。
生活比喻:term matching 像上面只核對品名的會計,換個名字就認不得。
考試可能怎麼問:Which measure does synonymy hurt, and which does polysemy hurt? Why?(同義詞和一詞多義各傷哪個指標?為什麼?)
下面第一個摺疊用兩個小例子算指標。結果:同義詞讓 recall 掉到 50%(一半該找的沒找到),一詞多義讓 precision 掉到 60%(找回來的有四成是錯的)。
precision 和 recall 怎麼算?(進階,可跳過)
- 同義詞:4 篇講盜賊的文件,2 篇用 thief。查「thief」找回 2 篇,precision = 2/2 = 100%,recall = 2/4 = 50%。
- 一詞多義:查「bank」想找銀行,找回 5 篇,3 篇銀行、2 篇河岸。precision = 3/5 = 60%,recall = 3/3 = 100%。
老師原話是什麼?
「所以 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" 關係)的資源,Python 可用 nltk 查;老師口頭又提了反義詞。現在直接問 LLM 就好(都在它的訓練資料裡)。WordNet 長這樣(p.63):
[[IMG: C:\D槽\TAICA課程\_work\notes-v2\nlp-w2\img\nlp_w2_ch08_brief_p063.png | p.63:WordNet 的同義詞集,honorable 出現在兩個 synset,C 和 B 是反義]]
圖上重點:「Synset A/B/C」是三個同義詞集。A 是 honorable、estimable、respectable、good(可敬的);B 是 moral、honourable、ethical、honorable(有道德的);C 是 dishonorable、inglorious、shameful、disgraceful(可恥的)。「The same string with different sense」=同一個字串、不同意思(honorable 同時在 A 和 B)。「Synonyms」=同義,「Antonyms」=反義(C 和 B 意思相反)。「Issues: context is not considered/New words missing/Maintenance cost」=問題:不看上下文、缺新詞、維護成本高。「Hard to measure the similarity! one-hot vector, every different words are orthogonal」=很難量相似度,因為本質是 one-hot,不同的字互相垂直。這張圖在說:人工字典只能說「同義或不同義」,說不出「有幾分像」。
每個圈是一個 synset,圈內互為同義;honorable 在兩個圈,代表有兩種意思。問題:不看上下文、缺新詞、要人維護;關係又是離散的(有關就有關),本質還是 one-hot,量不出有多像。
nltk 是 Python 的一個自然語言處理工具包,裝好就能用幾行程式查 WordNet。離散的意思是只有「有關/無關」兩種答案,沒有中間值。
所以目標回到 p.64:就算只有兩維,也要讓貓跟狗近、卡車遠。三個字可以自己填,有 100 個、幾萬個字就得訓練:用 contrastive learning(對比學習:把該像的一對拉近、不該像的推遠)學出每個字的數字,讓遠近符合定義的關係。注意:下週只講 word2vec,老師說不會講 GloVe (2:58:06)。最後同學問 recall 是什麼,老師說下次補充,只先說做資訊檢索時通常 recall 非常重要(一般機器學習較常講 accuracy);課程 GitHub 連結在投影片的 Live Announcement 上(NTU COOL 找不到)。
GloVe 是另一種有名的詞向量學法,老師說不講,知道名字就好。
生活比喻:WordNet 像紙本同義詞典,查得到「好=可敬」,查不到「貓和狗有幾分像」,也沒有今年的新詞。
考試可能怎麼問:What are the limitations of WordNet for representing word meaning?(用 WordNet 表示字義有哪些限制?)
這段最後一個摺疊(recall、precision、accuracy)有算式,它在回答老師留下的問題:三個評分指標差在哪。結論:recall 看「該找的找到幾成」,precision 看「找回來的對了幾成」,accuracy 看「全部判對幾成」;資訊檢索時幾乎所有文件都不相關,accuracy 永遠很高,所以看前兩個。
用生活例子講,synset 和 hypernym 是什麼?
synset 像同義詞典的一格:「好的、可敬的、體面的」放同一格;字有幾個意思就出現在幾格,p.62 查 good 列出十幾個 synset。hypernym 像生物分類:p.62 查 panda,上位詞一路是 procyonid → carnivore → placental → mammal → … → entity。都是人一筆筆填的,很準,但新詞進不來。
老師原話是什麼?
「他其實是人工建的,非常精準非常乾淨的一個所謂的字詞關係的一個對照表」(2:55:11)
「你自己就可以寫這個數字,但是如果現在有 100 個 instance」(2:57:17)
「不過我們不會提到 GloVe,大概是講 word2vec 而已」(2:58:06)
「尤其是在做資訊檢索的時候通常 recall 非常重要」(2:58:59)
對比學習(contrastive learning)怎麼學出每個字的數字?
老師最後的問題:三個字可以自己填數字,有 100 個 instance 怎麼辦?他的答案是準備「誰跟誰像、誰跟誰不像」的對比資料當訓練資料,「訓練出每一個字詞該用什麼樣的數字來表示」(2:57:42),「使得這些表示在你的映射的空間裡面能夠滿足你當初定義好的關聯」(2:57:47)。
一般的做法(我補充):
1. 每次拿三個字:基準(貓)、正例(狗,該像的)、負例(卡車,不該像的)。
2. 算現在貓跟狗、貓跟卡車各距離多遠。
3. 把數字挪一點,讓貓狗更近、貓卡車更遠。
4. 重複幾百萬組,每個字就自己排好位置。
關鍵在:沒有人知道「貓」的正確向量是多少,但「誰比較像誰」很容易回答,所以只教相對關係。生活比喻:排婚宴座位,沒人告訴你誰坐哪桌,只知道「A 跟 B 很熟、A 跟 C 不合」,靠這些就排得出來。
下週的 word2vec 也是這個精神(我補充):拿一個字前後的字當正例、隨機抽的字當負例,連人工標註都不用。
老師說 recall 下次補充:recall、precision、accuracy 差在哪?
三個都在比「系統找回來的」和「真正相關的」,差在除以什麼(定義和例子是我補充的)。例子:1,000 篇文件裡有 10 篇真的相關,系統找回 20 篇,其中 8 篇相關。
- **Recall(召回率)**:該找的找到幾成?8 ÷ 10 = 80%。
- **Precision(精確率)**:找回來的有幾成是對的?8 ÷ 20 = 40%。
- **Accuracy(正確率)**:全部文件判對幾成?「沒找回、本來就不相關」也算對,(8 + 978) ÷ 1,000 = 98.6%。
**注意:老師口頭說一般機器學習講的 accuracy 跟 precision、recall「基本上是接近的東西」(2:59:07),其實三者不一樣,考試要分開寫。** 檢索時絕大多數文件本來就不相關,一篇都不找回的系統 accuracy 也有 99%(990 ÷ 1,000),所以資訊檢索看 recall 和 precision。老師也說「尤其是在做資訊檢索的時候通常Recall非常重要」(2:58:59)。
對回 p.60:同義詞讓該找的找不到,recall 下降 (2:48:05);一詞多義讓意思不對的文件被找回來。老師開玩笑說,查新竹哪裡買蘋果,系統回一家小吃部的賣蘋果店,「這樣你的準確度就下降」(2:48:54),這裡的「準確度」指的就是 precision。他也觀察到:越常見(common)的字,用在越多地方,意思越分歧 (2:48:33)。
## 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.(中文:為什麼 one-hot/詞袋量不出字有多像?用貓狗卡車說明,並解釋這兩句為何向量相同。)
**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 每個字各佔一維,不同的字互相垂直,cosine 都是 0,看不出貓狗比較像。詞袋只數有哪些字、各幾次,不管順序;兩句斷完都是「錢、不、是、問題」,向量相同、cosine = 1,意思相反卻分不出來。詞表外的字則完全比對不到。
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(該找的有沒有找到)下降。一詞多義=同一個字意思不同(bank 是銀行也是河岸);意思不對的文件也被找回來,precision(找回來的有多少是對的)下降。例:4 篇相關文件只有 2 篇用 thief,recall = 50%。
Q3. What do "continuous" and "distributed" mean in "continuous, distributed representations"? How does a word embedding differ from a one-hot vector?(中文:連續和分散式各是什麼意思?詞向量跟 one-hot 有什麼不同?)
**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.
中文:連續=每一維是實數;分散式=每個字是空間裡的一個向量。跟 one-hot 不同:一,維度小而固定(例如幾百維),每一維都有值;二,數字是訓練學出來的,不是數出來的(老師強調的重點);三,相近的字向量相近,例如 dog 和 cat 的 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?(中文:概念很接近、cosine 卻很小的三個原因?WordNet 為何不能完全解決?)
**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.
中文:字面比對在三種情況失敗:不同語言或字體(計程車/出租车/的士)、不同領域用語(智慧型行動運算裝置=手機)、字典沒收的新詞(COVID-19)。WordNet 是人工建的同義詞集和上位詞表,但不看上下文、缺新詞、要人維護,關係又離散、像 one-hot 互相垂直,量不出「有多像」。
這週讀完了。下一週第一章:[01 詞向量的起源與類比(0:02–0:36)](https://app.notion.com/p/3e6fc631b0308169a5ebc6aa047ff58d)|回到週頁:[W2(9/17)](https://app.notion.com/p/3e6fc631b03081a18b13fad72a8874fd)