[自然語言處理](https://app.notion.com/p/3e6fc631b03081b4a9e8f91f3411f61f) › [W3(9/24)](https://app.notion.com/p/3e6fc631b03081ff9776f36fab3e6e50) › 05|影片 [1:46:39–2:02:06](https://www.youtube.com/watch?v=g0QE6O17BWE&t=6399s)|投影片 HW1 p.1–37(NLP_HW1_word_emb.pdf)|上一章 [04 GloVe、FastText 與向量檢索(1:28–1:46)](https://app.notion.com/p/3e6fc631b03081c5b27ce6cbad0d3d3a)|下一章 [06 N-gram 語言模型(2:12–2:33)](https://app.notion.com/p/3e6fc631b03081588140d7f6a95e5bb4)
## 重點
- 作業一叫 Word Analogy(詞類比):給 A、B、C 三個字,用詞向量算 B − A + C,猜第四個字 D。先用現成的 GloVe 向量做一次,再用 20% 的 Wikipedia 自己訓練 word2vec 做一次,兩邊比較。
- 程式 55%(7 個 TODO)加報告 45%,都寫在同一份 .ipynb,執行結果要留著。9/24 公布,三週後交(約 10/15,以 NTU COOL 為準)。
- 今年有實體閉書考試。不考背公式,考你做作業、聽課時抓到的 insight【老師說會考】(1:47:57)。所以做作業時要把觀察記下來。
## Exam-ready
- **Analogy**: "…helps to assess how well the word embedding model captures semantic and syntactic relationships between words."(HW1 p.2)
- **Analogy task**: "A is to B as C is to D. (e.g. King is to Queen as Man is to Woman.)"(HW1 p.2)
- **Vector arithmetic**: "word_b + word_c - word_a should be close to word_d"(HW1 程式模板 TODO2 提示)
- **Google Word Analogy (Mikolov et al., 2013)**: "19,544 entries … 5 sub-categories for semantic relationships … 9 sub-categories for syntactic relationships"(HW1 p.3)
- **t-SNE**: "Plot t-SNE to see word relationships in the sub-category of `family`"(HW1 p.13)
- **Gensim**: "A popular Python package for embeddings"(HW1 p.15)
- **Pre-processing**: "Remove stop words … Lemmatization (e.g., rocks -> rock) … Note that not every tricks yield better performance. You should try on your own."(HW1 p.28)
## [1:46:39](https://www.youtube.com/watch?v=g0QE6O17BWE&t=6399s) 作業變難,今年有閉書考試
作業一的主題跟去年一樣,只是要求變多:老師說修課人數增加,TAICA 辦公室大概希望他嚴格把關【老師強調】(1:47:17)。
更重要的是今年有**實體閉書考試**。考試不會叫你寫出 BM25 公式這種題目【老師說不考】(1:47:47)。它考的是你做作業、聽課時抓到什麼 insight(洞見:自己觀察到、而且說得出原因的現象),而且要寫得出來【老師說會考】(1:47:57)。
**注意:下課前 (2:48:36–2:49:28) 老師補充:考試著重作業和上課內容,大約排在第 14 週,老師說兩週內確認。見第 07 章。**
考試考 insight,要怎麼準備?
做作業時開一份觀察筆記,每條寫現象、原因、證據(數字或圖),直接用英文句子寫,考前就是現成答案。題材見本章 1:56:53 那一段。
老師原話是什麼?
「對這個可能要再強調一下」(1:47:17)
「這門課的作業難度會稍微比以前稍微再多加一點東西」(1:47:32)
「然後重點是我們今年的課會有一個實體的closed-book考試」(1:47:41)
「叫你寫出BM25的公式,不會這麼低級的題目」(1:47:51)
「你在聽這些內容你到底有catch到什麼樣的insight,我覺得那個是要能夠寫出來的」(1:48:02)
## [1:48:10](https://www.youtube.com/watch?v=g0QE6O17BWE&t=6490s) 作業在做什麼:類比資料集
作業就是第 01 章 man、woman、king、queen 那個概念:我們看不懂詞向量的絕對位置(每一維代表什麼),但看得懂相對關係,也就是兩個向量相減得到的方向。
資料集是 Google Word Analogy(Mikolov et al., 2013),共 19,544 題。每題四個字 A B C D,給 A、B、C,猜 D。前 5 個子類別是語意(semantic)共 8,869 題,後 9 個 gram 開頭的是語法(syntactic)共 10,675 題。
**注意:HW1 p.2 的算式印成 King + Queen − Man ≈ Woman,這是打錯。照同頁的箭頭和程式模板的提示,正確是 Queen − King + Man ≈ Woman,也就是 D ≈ B − A + C。**
| 子類別 | 題數 | 第一題(A B C D) |
| capital-common-countries | 506 | Athens Greece Baghdad Iraq |
| capital-world | 4,524 | Abuja Nigeria Accra Ghana |
| currency | 866 | Algeria dinar Angola kwanza |
| city-in-state | 2,467 | Chicago Illinois Houston Texas |
| family | 506 | boy girl brother sister |
| gram1-adjective-to-adverb | 992 | amazing amazingly apparent apparently |
| gram2-opposite | 812 | acceptable unacceptable aware unaware |
| gram3-comparative | 1,332 | bad worse big bigger |
| gram4-superlative | 1,122 | bad worst big biggest |
| gram5-present-participle | 1,056 | code coding dance dancing |
| gram6-nationality-adjective | 1,599 | Albania Albanian Argentina Argentinean |
| gram7-past-tense | 1,560 | dancing danced decreasing decreased |
| gram8-plural | 1,332 | banana bananas bird birds |
| gram9-plural-verbs | 870 | decrease decreases describe describes |
用生活例子講,類比題在考什麼?
像國中英文填空:big 之於 bigger,就像 small 之於什麼?或 Athens 之於 Greece,就像 Tokyo 之於什麼?人答得出來,是因為看懂了關係。
詞向量如果學到這種關係,Greece − Athens 這個方向(首都→國家)就會跟 Japan − Tokyo 差不多。從 Tokyo 出發加上這個方向,就會落在 Japan 附近。
它到底怎麼運作?手算一次 king : queen :: man : ?
假設向量只有 3 維,分別代表皇室感、男性感、人類感(真的向量沒辦法這樣解釋,只為了好算):
- 題目:king (0.9, 0.8, 0.7)、queen (0.9, 0.2, 0.7)、man (0.1, 0.8, 0.9)
- 其他字:woman (0.2, 0.2, 0.8)、boy (0.1, 0.7, 0.5)、apple (0.1, 0.1, 0.0)
步驟 1,目標向量 queen − king + man = (0.1, 0.2, 0.9),長度 √0.86 ≈ 0.927。
步驟 2,跟每個字算 cosine。以 woman 為例:內積 0.1×0.2 + 0.2×0.2 + 0.9×0.8 = 0.78,woman 長度 √0.72 ≈ 0.849,cos = 0.78 ÷ (0.927 × 0.849) ≈ 0.991。
步驟 3,排序:woman 0.991、man 0.875、boy 0.747、queen 0.708、king 0.681、apple 0.229。
步驟 4,拿掉題目本身的 king、queen、man,第一名 woman 就是預測。答對。
兩個觀察:
- man 排第二。真實向量裡,B − A + C 最近的字常常就是 B 或 C 自己,所以 Gensim 的 most_similar 會自動排除輸入的字。
- man 的內積 0.98 比 woman 的 0.78 大,只因為 man 的向量比較長。cosine 除掉了長度,才不會被長短騙。
要先懂什麼?cosine similarity
cosine similarity(餘弦相似度)= 兩個向量的內積 ÷ 兩者長度相乘。它只看兩個方向夾多大的角,不看長短:1 是方向完全一樣,0 是互相垂直。投影片原句:「In a vector-space representation the cosine coefficient of two document vectors is a measure of similarity」(brief p.51)。
所以對這份作業的影響是:預測 D,就是在整個字典裡找跟 B − A + C 夾角最小的字。
老師原話是什麼?
「沒辦法知道這種絕對的向量表示,至少我們可以知道相對的向量的概念」(1:48:35)
## [1:49:50](https://www.youtube.com/watch?v=g0QE6O17BWE&t=6590s) 程式模板、Colab、助教影片
老師坦白說,把投影片丟給 GPT 就寫得出整份作業,但還是給程式模板(template)當規範。有模板一樣可以 vibe coding(用口語描述,讓 AI 寫程式)。程式碼在課程 GitHub,在 Google Colab 上跑,下載資料的步驟都寫好了,更細的操作有助教錄的影片。
**注意:老師口頭說「你要自己重寫也可以」(1:50:19),但 HW1 p.36 寫「Do not modify the code template (only changes to data loading are allowed).」,違反扣 5 分。照 PDF:只在 TODO 格子裡寫。**
要先懂什麼?Colab 和 .ipynb 是什麼?
Colab 是 Google 的線上 Python 環境,不用安裝,還能免費用 GPU(HW1 p.7)。檔案格式是 Jupyter notebook(.ipynb):一格一格的程式和文字,跑完的輸出(數字、表格、圖)會存在檔案裡。所以交出去之前每格都要跑過,輸出要留著。
老師原話是什麼?
「雖然有Template你一樣也是可以Vibe Coding」(1:50:15)
「我們會有另外一段錄影是助教錄的會比較細一點」(1:50:32)
## [1:51:30](https://www.youtube.com/watch?v=g0QE6O17BWE&t=6690s) 評分:程式 TODO 加報告
程式 55%(七個 TODO)加報告 45%。評分像聯考作文,都寫了不代表滿分。老師要大家不要計較一兩分:你被扣分,就代表有人做得比你好。
PDF 還有一條硬規定:.ipynb 要留著 20% wiki 版本的執行結果,沒留的話,所有跟實驗結果和圖有關的分數都拿不到(HW1 p.31)。
| TODO | 要做什麼 | 配分 |
| 1 | 把類比資料轉成 pandas DataFrame | 5% |
| 2 | 用預訓練向量(GloVe)做類比預測 | 10% |
| 3 | 畫 family 子類別的 t-SNE 圖 | 5% |
| 4 | 抽樣 20% 的 Wikipedia 文章 | 5% |
| 5 | 用抽出的文章訓練自己的詞向量 | 10% |
| 6 | 用自己的向量做類比預測 | 10% |
| 7 | 畫 family 子類別的 t-SNE 圖 | 10% |
預測做完,分數怎麼算?手算一次
模板已寫好評分程式:準確率 = 預測跟標準答案完全一樣的題數 ÷ 總題數,大類、子類別各算一次。假設 family 只有 4 題,用自己訓練的向量:
- boy girl brother → sister(答案 sister,對)
- king queen man → woman(答案 woman,對)
- father mother son → daughters(答案 daughter,錯:多一個 s 也算錯)
- he she his → 沒有預測(前處理把 he、she、his 當停用詞刪了,查不到,錯)
準確率 = 2 ÷ 4 = 50%。差一點的錯(第 3 題)和查不到字的錯(第 4 題)原因完全不同,報告要分開講。
老師原話是什麼?
「不要去計較說這個分數為什麼你被扣了一分兩分這樣子」(1:52:17)
「你被扣了一分一定是有人有做然後比你好然後拿到滿分」(1:52:24)
## [1:52:32](https://www.youtube.com/watch?v=g0QE6O17BWE&t=6752s) TODO 內容:現成向量與 wiki 自己訓練
前三個 TODO 用現成向量:模板預設 glove-wiki-gigaword-100,也就是 GloVe、100 維、用 Wikipedia 加 Gigaword 新聞共 60 億個 token 訓練、全部小寫。後四個用 Wikipedia dump(維基百科全站文字備份)自己訓練,再做一樣的事。工具是 Gensim(Python 的詞向量套件)。
TODO3、TODO7 一定要畫 t-SNE(把高維向量壓成 2 維來畫圖的方法);想加畫別的降維方法比較也可以,因為降維本身有誤差。
Wiki 資料助教已清好(11 個 .gz 檔),只要抽 20%,個人 Colab 額度跑得完;記憶體爆掉通常是寫法問題,不要全部載進來再抽。
[[IMG: C:\D槽\TAICA課程\_work\notes-v2\nlp-w3\img\nlp_hw1_p020.png | HW1 p.20:family 子類別 46 個字用 t-SNE 壓成 2 維]]
用生活例子講,t-SNE 在做什麼?這張圖怎麼看?
t-SNE(t-distributed Stochastic Neighbor Embedding)像把地球儀攤成平面地圖:鄰國是誰大致保留,但面積和遠距離會變形(格陵蘭看起來跟非洲差不多大)。
上圖裡 king 和 prince、queen 和 princess、mom 和 dad、bride 和 groom 都兩兩黏在一起;father、son、brother、uncle 大多偏右,mother、sister、daughter、aunt 大多偏左。
讀圖要小心:群的大小、群間距離不一定有意義,參數 perplexity 一改圖就變。t-SNE 也不保留方向,king→queen 和 man→woman 不一定畫成平行箭頭。PCA 這類線性投影會保留兩段位移相等的關係,可以拿來對照。
延伸閱讀:[How to Use t-SNE Effectively(Distill)](https://distill.pub/2016/misread-tsne/)
它到底怎麼運作?TODO2 的預測要處理哪些細節?
- 每題拆成 A、B、C、D,D 存成標準答案(gold)。
- 用 Gensim 的 most_similar:positive 放 B 和 C,negative 放 A,取第一名當預測。它會自動排除 A、B、C,也會先把每個向量長度調成 1 再加減。
- 大小寫:9,962 題(約一半)有大寫字,例如 Athens。但這份 GloVe 和助教清好的 wiki 都是小寫,不先轉小寫就全部查不到。
- OOV(字典裡沒有的字):Gensim 查不到字會報錯(KeyError),要自己接住,記成答錯。自己訓練的模型字典小,OOV 會明顯變多,這就是第 04 章講的 OOV 問題。
每個前處理都會讓分數變好嗎?
不會,HW1 p.28 自己寫了 not every tricks yield better performance。用這份資料集算給你看:
- 刪停用詞(the、he、his 這類常見但意思少的字):family 類 506 題裡有 86 題(17%)用到 he、she、his、her,常見停用詞表會把它們刪掉,這 86 題全部查不到。
- 詞形還原(lemmatization,rocks 變 rock):present-participle、past-tense、plural、plural-verbs 共 4,818 題(約 25%),考的正是 dancing 和 danced、bird 和 birds 的差別,還原掉就學不到。
- 只留高頻字:少見的國家名、貨幣名(例如 kwanza)可能被丟掉。
所以前處理要一次改一項、各跑一次準確率。
TODO4、TODO5 要注意什麼?
TODO4:每個檔約 56 萬篇文章(一行一篇),11 個檔將近 600 萬篇。正確的想法是一行一行讀,每行擲一次骰子,20% 機率中獎就寫進輸出檔,記憶體裡永遠只放一行。
TODO5:Gensim Word2Vec 官方預設是 vector_size=100(維度)、window=5(左右各看幾個字)、min_count=5(出現不到 5 次的字丟掉)、sg=0(CBOW;1 是 skip-gram)、negative=5、epochs=5。報告第 1 題要寫超參數,要記下來。
**注意:第 03、04 章老師口頭說詞向量預設「700 多維」;Gensim 官方文件寫的預設是 100 維,模板的 GloVe 也是 100 維。報告照你實際設定的數字寫。**
老師原話是什麼?
「如果你用c的想法來想python一開始會很不習慣」(1:53:42)
「因為降維的東西本身就會有點誤差」(1:54:22)
「我們的作業的設計都是在你個人的Colab的運算的quota可以跑得完的」(1:55:40)
「你不要把百分之百的wikidump都載入」(1:55:59)
## [1:56:53](https://www.youtube.com/watch?v=g0QE6O17BWE&t=7013s) 報告 45%:可以用 AI,但要附實驗
報告題目列得很細是為了給方向,那是最低要求,等於把要餵給 AI 的 prompt 寫好了。可以用 AI 輔助,但一定要消化 AI 做了哪些事、分析在講什麼。
今年多一條:額外實驗的程式要附上,因為以前有人叫 AI 生出漂亮的分析圖,卻沒真的做實驗。老師希望你動手試:換參數、語料給少一點、看 OOV 問題。作業可以做得很深(老師想到漫畫《天才兒童》:小學生運動會的最後一關是寫博士論文),甚至可以拿第 04 章的 MTEB 資料集來跑。
**注意:老師口頭說額外實驗附 notebook 連結 (1:57:50);HW1 p.31 寫的是把額外實驗的程式放在同一份 notebook 的報告區塊下面,沒放該題 0 分。照 PDF 做。**
| 報告題目(HW1 p.31) | 配分 |
| 1. 用了哪個模型、哪些前處理、哪些超參數 | 5% |
| 2. 抽樣 5%、10%、20% 的 wiki,效能如何 | 10%(每種 3%) |
| 3. 換一份 wiki 以外的語料,各類別效能如何:呈現結果、介紹語料跟 wiki 的差別、解釋為什麼變好或變差 | 15%(各 5%) |
| 4. 挑至少 5 個字,各找 5 個最相似的字,寫觀察 | 10% |
| 5. 任何能加強報告的東西 | 5% |
| 6. Generative AI Usage | 必寫,沒寫扣 10 分 |
報告要怎麼寫出 insight?
每題都寫現象、原因、證據。幾個方向:
- 抽樣 5%、10%、20%:也記 OOV 題數。準確率上升,有多少是因為字終於查得到,有多少是向量變準?
- 換語料(例如新聞或小說):capital-world、currency 需要國際知識,語料少提國家就會掉;gram 類只要字形變化,大部分語料都有。用子類別準確率驗證你的猜測。
- 最相似的五個字:反義詞常排很前面,因為上下文很像(I feel good、I feel bad)。這呼應第 02 章的分布假說:上下文相似不等於意思相同。
老師原話是什麼?
「但是你一定要消化你這個AI做了哪些事情」(1:57:32)
「但是我根本不知道他有沒有做這個實驗」(1:58:12)
「我給他的不同的參數不同的想法或是甚至語料我給他少一點」(1:58:37)
「在這個作業其實也可以很深入」(1:59:38)
## [2:00:00](https://www.youtube.com/watch?v=g0QE6O17BWE&t=7200s) 格式、抄襲與期限
人數多,格式一定要照規定;有一部分會先用 AI 審查,不符合規格很容易沒分。可以跟同學討論,但要分開寫,prompt、報告、心得都不能一樣。兩份一樣,雙方都 0 分,被抄的人也一樣【老師強調】(2:01:09),這條讓你有理由拒絕借人抄。9/24 公布,三週後交;最後一週才開始寫會趕。
| 規定(HW1 p.32–36) | 違反扣分 |
| 程式檔名 NLP_HW1_school_student_ID.ipynb,只收 .ipynb | −5 |
| 壓縮檔名 NLP_HW1_school_student_ID.zip(.ipynb 加 requirements.txt) | −5 |
| 附 requirements.txt(例:gensim==4.3.3) | −5 |
| 報告寫出生成式 AI 使用情形 | −10 |
| 報告寫出執行環境和 Python 版本 | −5 |
| 程式模板只能改資料載入的部分 | −5 |
| 程式或報告跟別人高度相似 | 雙方各 −100 |
用了 AI 或網路上的程式,要怎麼標?
HW1 p.35:用了生成式 AI,程式註解和報告兩處都要寫明;參考網路程式要附連結。檔名的 school 欄位 PDF 只給 NTHU 範例,交之前先問助教。下課回來 (2:12:43) 老師說繳交格式的問題由助教回覆。
老師原話是什麼?
「所以你如果不符合這個規格其實很容易就沒有分數」(2:00:14)
「討論總要寫的時候要分開寫」(2:00:33)
「給他一個條件是你被抄你一樣是0分」(2:01:09)
「兩份一樣全都是0分」(2:01:19)
## Self-check
Q1. In the word analogy task "king : queen :: man : ?", how does a word embedding model predict the answer, and why are the input words excluded?
**Answer**: It computes v(queen) − v(king) + v(man) (B − A + C) and returns the word with the highest cosine similarity to this vector, ideally "woman". The input words are excluded because the target vector usually stays closest to B or C themselves.
中文重點:D ≈ B − A + C,用 cosine 找最近的字,並排除 A、B、C。
Q2. Give one example each of how stop-word removal and lemmatization can hurt analogy accuracy.
**Answer**: Stop-word removal deletes pronouns (he, she, his, her), so family questions using them become out-of-vocabulary. Lemmatization maps birds → bird and danced → dance, erasing the differences tested by the plural and past-tense sub-categories.
中文重點:前處理可能刪掉考題需要的字或字形,要一項一項測。
Q3. What does t-SNE do, and what should you NOT conclude from a t-SNE plot of word embeddings?
**Answer**: t-SNE is a nonlinear dimensionality reduction method that maps vectors into 2D while keeping nearby points near each other. Cluster sizes and distances between clusters are not reliable, and directions are not preserved, so analogy offsets need not look parallel.
中文重點:t-SNE 保留鄰居關係,不保留大小、遠距離和方向。
Q4. Why might embeddings trained on a 20% Wikipedia sample score lower on the analogy test than pre-trained GloVe vectors? Give two reasons.
**Answer**: (1) Less data: glove-wiki-gigaword-100 was trained on about 6 billion tokens. (2) More out-of-vocabulary words: a smaller corpus, min_count filtering and pre-processing drop rare words, and questions containing them count as wrong.
中文重點:資料少、OOV 多,是自己訓練的向量分數較低的兩大原因。