已複製到剪貼簿(若沒有,手動全選複製上面這段)→ 直接貼給我。
NLP 作業一|Word Analogy(詞類比)完整介紹
2026-09-28 整理|清大高宏宇老師《自然語言處理》115-1(TAICA)|資料來源:作業 PDF、程式模板、助教說明影片、W2/W3 上課逐字稿
一句話結論
讓電腦把英文單字變成一串數字,再考它「國王之於女王,等於男人之於__?」答不答得出來。 先用別人訓練好的數字考一次,再自己用維基百科訓練一份、再考一次,最後在同一份.ipynb裡寫報告。 約 10/15(四)交,今天起還有 17 天。
三個一定要記住的數字
| 項目 | 內容 | 為什麼重要 |
|---|---|---|
| 期限 | 約 2026-10-15(四)(9/24 公布+三週) | PDF 沒寫日期,老師口頭說「公布後三週」。幾點截止要去 NTU COOL 看。 |
| 配分 | 程式 55%+報告 45% | 報告幾乎佔一半,而且老師說考試會考「你做作業的過程和心得」。 |
| 最大的雷 | .ipynb 裡每一格的執行結果都要留著 | 沒留結果 → 跟實驗和圖有關的分數全部拿不到。 |
左邊點一節看一節。每節開頭第一句就是結論,趕時間只讀那一句就好。
第一次看,先讀 第 0 節(作業全貌):用比喻講清楚作業到底要做什麼、最後要交出什麼。
如果今天只有 5 分鐘:讀 第 5 節(說法打架的地方) 和 第 6 節(會踩的雷)。
要交之前:打開 第 10 節,一項一項按「OK」。
這份只講「要做什麼、怎麼交、哪裡會出事」,沒有替你寫作業程式。 因為老師明講考試會考作業的過程和心得(W3 01:47:43),自己動手做過才答得出來;而且兩份作業太像會雙方都 0 分。
0 作業全貌:到底要做什麼、為什麼要做
結論:整份作業就是「讓兩本字典去考同一張考卷,比成績,再解釋為什麼差這麼多」。 一本字典是別人做好的,一本是你自己用維基百科做的。 最後交出一個筆記本檔,裡面要有:5 次考試成績、2 張圖、6 題回答。
第一步:先把作業裡的東西換成比喻
| 作業裡叫什麼 | 把它想成 | 白話說明 |
|---|---|---|
| 詞向量(word embedding) | 一本字典 | 每個字後面寫的不是解釋,是一串 100 個數字。這串數字就像這個字在地圖上的「座標」。意思越像的字,座標越近。 |
| Google Word Analogy 資料集 | 一張考卷 | 19,544 題填空題,每題都長這樣:「king 之於 queen,等於 man 之於__」。答案是 woman。 |
| 用詞向量答題 | 拿字典寫考卷 | 查出題目三個字的座標,做加減,找離結果最近的字,當作答案。 |
| 正確率(accuracy) | 考卷分數 | 答對幾題 ÷ 總題數。改考卷的程式老師已經寫好,你不用寫、也不能改。 |
| 訓練詞向量 | 自己編一本字典 | 讓電腦讀一大堆文章,看「哪些字常常一起出現」,自己算出每個字的座標。讀的文章就叫「語料」(corpus)。 |
第二步:電腦怎麼「寫」一題(示意)
題目:king queen man __(正確答案 woman)
- 查字典:queen、king、man 各是一串 100 個數字。
例如 king → [0.50, 0.69, −0.60, …]。這些數字是我亂寫的示意,不是真的值。 - 做加減:queen − king + man,得到一串新的 100 個數字。
意思是:從 king 走到 queen 的那一步(男變女),套到 man 身上。 - 找最近的字:在整本字典裡,找座標離這串新數字最近的字(題目自己那三個字不算)。
- 對答案:最近的字如果是 woman,這題答對。
19,544 題全部這樣做一遍,再按 14 個小類各算一次分數,就是一次「考試」。
第三步:整份作業照順序要做的事
| # | 你要做什麼 | 做完畫面上會出現什麼 | 對應 | 配分 |
|---|---|---|---|---|
| 1 | 讀考卷:把題目檔整理成表格 | 一張表格的前 5 列(題目、大類、小類) | TODO1 | 5% |
| 2 | 借別人的字典考試:載入現成的 GloVe 詞向量,寫完 19,544 題 | 14 個小類各自的分數 | TODO2 | 10% |
| 3 | 畫圖:把「家人/性別」那一類的字畫成平面上的點 | 一張散佈圖(看 king/queen、boy/girl 有沒有排得很整齊) | TODO3 | 5% |
| 4 | 準備教材:維基百科有 560 萬篇以上的文章,隨機抽 20% | 一個新的文字檔 | TODO4 | 5% |
| 5 | 自己編字典:先整理文字(前處理),再用 Word2Vec 訓練 | 一本你自己的字典(訓練好的模型) | TODO5 | 10% |
| 6 | 用自己的字典考試:同第 2 步 | 14 個小類各自的分數 | TODO6 | 10% |
| 7 | 再畫圖:同第 3 步,換成自己的字典 | 第二張散佈圖 | TODO7 | 10% |
| 8 | 多做 3 個實驗+寫報告(見下一張表) | 6 題回答 | 報告 | 45% |
所以對你的影響是:第 1–7 步是「照著模板填空」,有標準做法。第 8 步才是真正要動腦的地方,而且佔將近一半的分數。
第四步:報告的 6 題,其實是叫你多做 3 個實驗
報告不是寫心得而已。每一題背後都要你真的去跑一次、拿到數字,再解釋。
| 題 | 要多做什麼 | 老師想讓你看懂什麼(這就是作業的目標) |
|---|---|---|
| 1 | 不用多做。說明你第 2、5 步用了什麼字典、怎麼整理文字、參數怎麼設。 | 你清楚自己每一個設定是什麼。 |
| 2 | 把第 4–6 步改成抽 5%、10% 各再跑一次(20% 已經跑過了)。 | 教材越多,字典越準嗎?準多少? |
| 3 | 自己上網找一份不是維基百科的文章集(例如新聞、小說、論文都可以,助教說什麼都行),第 5–6 步再跑一次。 | 教材的「種類」會改變字典學到什麼。例如小說讀得多,可能比較懂家人稱呼,比較不懂首都。 |
| 4 | 挑至少 5 個字,每個字找出字典裡最像的 5 個字。 | 字典說的「最像」,跟人想的「最像」不一樣。老師說你會發現「貓」的鄰居常常不是貓。 |
| 5 | 自由發揮,加做任何實驗或分析。 | 你自己發現的東西。 |
| 6 | 不用做實驗。寫有沒有用 AI、用在哪裡。 | — |
第 3 題的例子(小說比較懂家人稱呼)是我推想的,不是老師說的;實際會怎樣,要跑了才知道——這正是這題要你做的事。
算一算:總共要跑幾次
| 項目 | 次數 | 是哪幾次 |
|---|---|---|
| 自己訓練字典 | 4 次 | 維基 5%、維基 10%、維基 20%、另一份語料 |
| 考試(算分數) | 5 次 | GloVe 1 次+自己的 4 本字典各 1 次 |
| t-SNE 圖 | 2 張 | GloVe 1 張+維基 20% 1 張 |
最花時間的是「訓練字典」。所以建議先用 5% 試跑,確定程式沒問題,再跑 10%、20%。
這份作業的目標,一句話版
讓你親手確認三件事:
① 把字變成數字,真的能抓到字和字的關係(看第 2 步的分數和第 3 步的圖);
② 這本字典好不好,取決於讀了多少文章、讀了什麼種類的文章、文章怎麼整理(報告第 1–3 題);
③ 它也有很明顯的缺點(報告第 4 題)——這正是後面幾週要教 BERT 這類新方法的原因。
最後交出去的東西
NLP_HW1_學校_學號.zip
├─ NLP_HW1_學校_學號.ipynb ← 一個檔案裡全部都有:
│ 第 1–7 步的程式+執行結果(要是 20% 那一版)
│ 報告 6 題的回答
│ 第 3 題的程式+執行結果
└─ requirements.txt ← 用到哪些套件、什麼版本
1 這份作業在做什麼
結論:考電腦懂不懂「字和字之間的關係」。考法是給三個字,叫它猜第四個。
先講它在做什麼
電腦看不懂字,只看得懂數字。所以要先把每個英文單字變成一串數字(例如 100 個數字)。
這串數字就叫 詞向量(word embedding:把一個字變成一串數字,意思相近的字,數字也會相近)。
如果這串數字做得好,就能做「字的加減法」。例如:
queen − king + man ≈ woman
(女王 − 國王 + 男人 ≈ 女人)
意思是:「國王 → 女王」的變化,跟「男人 → 女人」的變化是一樣的。
這種「A 之於 B,等於 C 之於 D」的題目,就叫 詞類比(word analogy)。
PDF 寫
King + Queen − Man ≈ Woman,這是錯的。
正確是 Queen − King + Man ≈ Woman,也就是 B − A + C ≈ D。
程式模板裡的提示寫的才是對的:「word_b + word_c − word_a should be close to word_d」。
考卷長什麼樣:Google Word Analogy 資料集
一共 19,544 題。每題四個字,用空白隔開,第四個字就是答案。
題目分兩大類:
- Semantic(語意):意思上的關係,例如首都和國家、男和女。共 5 小類、8,869 題。
- Syntactic(語法):字形變化,例如加 -ly、加 -s、過去式。共 9 小類、10,675 題。
| 大類 | 小類(SubCategory) | 題數 | 第一題(最後一個字是答案) |
|---|---|---|---|
| 語意 | 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(-ing) | 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 |
題數是我直接數 questions-words.csv 算出來的,加起來 19,544。family 那一類會拿來畫圖(TODO3、TODO7)。
整份作業分兩半
| 半場 | 做什麼 | 白話 |
|---|---|---|
| 前半(TODO1–3) | 用別人訓練好的詞向量 | 借一本現成的「字→數字」字典來考試 |
| 後半(TODO4–7) | 自己用維基百科訓練詞向量 | 自己編一本字典,再考同一份考卷,比比看 |
所以對你的影響是:後半一定比較花時間(要下載、抽樣、訓練),時程要把後半排前面一點。
2 程式部分:七個 TODO(佔 55%)
結論:老師給了寫好一大半的程式模板,你只要在標了 TODO 的格子裡補程式。其他格子不准改(改了扣 5 分)。
工具:兩個名字先認識
- Google Colab:在瀏覽器裡寫 Python、跑 Python 的網站,免費,不用在電腦上裝東西。老師建議用這個。檔案格式是
.ipynb(筆記本檔:程式、執行結果、文字說明放在同一個檔案裡)。 - Gensim:一個 Python 套件,專門處理詞向量。下載現成詞向量、自己訓練 word2vec,都靠它。
七個 TODO 一覽
| # | 要做什麼 | 配分 | 白話+要注意 |
|---|---|---|---|
| TODO1 | 把考卷整理成表格(pd.DataFrame) | 5% | 把 questions-words.txt 讀進來,整理出三欄:題目、大類、小類。你要自己做出 questions、categories、sub_categories 三個清單,下一格才跑得動。提示:檔案裡用 : 開頭的那行是「小類的標題」,前 5 個是語意、後 9 個是語法。 |
| TODO2 | 用現成詞向量答題 | 10% | 模板預設用 glove-wiki-gigaword-100(史丹佛做的現成詞向量,每個字 100 個數字)。給前三個字,算出第四個字,把答案(preds)和標準答案(golds)存起來。之後的評分格子已經寫好,會自動算每一類的正確率。 |
| TODO3 | 畫 t-SNE 圖 | 5% | t-SNE(把 100 維的數字壓成 2 維,才能畫在紙上的一種方法)。把 family 類的字畫成散佈圖,看男/女的字有沒有排得很整齊。老師說想另外用別的降維方法比較也可以,但 t-SNE 一定要有。 |
| TODO4 | 從維基百科抽 20% 的文章 | 5% | 助教已經幫你把維基百科洗乾淨,分成 11 個 .gz 壓縮檔,每一行是一篇文章。以「篇」為單位抽樣。建議把「抽幾 %」寫成一個變數,因為報告還要跑 5%、10%。 |
| TODO5 | 用抽到的文章訓練自己的詞向量 | 10% | 用 Gensim 的 Word2Vec 訓練。前處理(訓練前先整理文字)算在這一項裡,怎麼做你自己決定,見下面。 |
| TODO6 | 用自己的詞向量答題 | 10% | 跟 TODO2 一樣,只是換成你自己訓練的那份。 |
| TODO7 | 再畫一次 t-SNE | 10% | 跟 TODO3 一樣,換成你自己的詞向量。 |
TODO5 的前處理:老師給的建議清單
前處理就是「訓練前先把文字整理乾淨」。老師建議可以試這幾種:
| 做法 | 白話 |
|---|---|
| 移除非英文字 | 把中文、符號、亂碼拿掉 |
| 移除停用詞(stop words) | 把 the、a、is 這種到處都有、沒什麼意思的字拿掉 |
| 詞形還原(lemmatization) | 把變化過的字改回原形,例如 rocks → rock |
| 比較好的斷詞 | 不要只用空白切字(例如 don't 怎麼切) |
| 只留常見字 | 出現太少次的字不放進字典 |
老師和助教都特別講了這句。舉例:如果你的「詞形還原」把 biggest 改回 big(要看工具怎麼設定), 那「最高級」那一類的題目就永遠答不對了,因為答案 biggest 已經不在字典裡。 所以每一種前處理都要想一下:它會不會把考卷上的答案弄不見?
3 報告部分:六題要回答(佔 45%)
結論:報告不用另外交 Word 檔,直接寫在 .ipynb 最下面那個文字格子裡。模板已經把六題的題目都放好了,你照順序填答案。
報告開頭還有兩行要先填:Running environment(在哪裡跑)和 Python version(Python 版本)。沒寫扣 5 分。
| 題 | 題目(白話) | 配分 | 要不要附程式 | 助教補充 |
|---|---|---|---|---|
| 1 | 你用哪個詞向量模型?做了哪些前處理?參數怎麼設? | 5% | 不用另外附 | 把 TODO2、TODO5 用的東西講清楚就好 |
| 2 | 維基百科抽 5%、10%、20%,成績差多少? | 10% (每個 3%) | 不用附 | 助教說只要列出分數、討論就好(影片 17:41)。但筆記本裡最後留著的執行結果要是 20% 那一版。 |
| 3 | 換一個不是維基百科的語料訓練,各類題目的成績如何? | 15% | 一定要附,沒附 0 分 | 程式寫在報告下面那格「Write your code here」。語料自己上網找,什麼都可以。 |
| 3.1 | ⤷ 列出結果 | 5% | ||
| 3.2 | ⤷ 介紹你選的語料,跟維基百科差在哪(資料量、主題、結構) | 5% | ||
| 3.3 | ⤷ 解釋成績為什麼變好或變差 | 5% | ||
| 4 | 挑至少 5 個字,每個字找出最像的 5 個字。你看到什麼? | 10% | — | 老師在課堂上暗示:你會發現「貓」旁邊的字常常不是貓(W3 00:25:54)。這就是要你觀察的東西。 |
| 5 | 任何能讓報告更好的東西 | 5% | — | 自由發揮:多做實驗、多做分析 |
| 6 | 生成式 AI 使用說明 | 必填 | — | 沒用也要寫「沒有使用」(影片 20:13)。沒寫扣 10 分。 |
老師說以前有同學把題目丟給 AI,AI 就寫出一份很漂亮的分析,但根本沒跑實驗(W3 01:58:12)。 所以今年規定:第 3 題的實驗程式碼一定要放在筆記本裡,看得到你真的有跑。 所以對你的影響是:第 3 題不能只寫文字,要真的找一份語料、真的訓練一次。
4 怎麼交、會被扣什麼
結論:把 .ipynb 和 requirements.txt 壓成一個 zip,檔名照規定取,上傳 NTU COOL。檔名錯一個字就扣 5 分。
要交的東西
| 檔案 | 檔名規則 | 你的檔名(學號要自己填) |
|---|---|---|
| 程式+報告 | NLP_HW1_school_student_ID.ipynb | NLP_HW1_CYUT_你的學號.ipynb(見下面警告) |
| 套件清單 | requirements.txt | requirements.txt(檔名固定) |
| 壓縮檔 | NLP_HW1_school_student_ID.zip | NLP_HW1_CYUT_你的學號.zip |
PDF 只給了清大的例子
NLP_HW1_NTHU_12345678。你是朝陽科大透過 TAICA 修課,我猜是 CYUT,但我沒有查到官方說法。
建議:去 NTU COOL 看有沒有公告,沒有的話寄信問助教 nthuikmlab@gmail.com。
requirements.txt 是什麼
一個純文字檔,列出你用了哪些套件、什麼版本,每行一個。例如:
gensim==4.3.3
pandas==2.2.2
scikit-learn==1.5.1
上面版本號只是示意。請在 Colab 裡跑 !pip freeze,照你實際用到的套件抄下來。
報告裡一定要寫的執行環境
| 你在哪裡跑 | Running environment 寫什麼 | Python version 寫什麼 |
|---|---|---|
| Colab | Colab | 例如 Colab Python 3.12.x(在 Colab 跑 !python --version 看實際版本) |
| 自己電腦 | 作業系統+CPU,例如 Windows 11, CPU: … | 例如 Python 3.11.9 |
用 AI 的規定
可以用,但兩個地方都要標:
- 程式註解:AI 產生的程式碼旁邊,加一行註解說「以下是 AI 生成的」。
- 報告第 6 題:寫清楚用了哪個 AI、生成了哪些部分。沒用也要寫「沒有使用」。
從網路上抄來參考的程式,也要附網址。
扣分表
| 違規 | 扣分 |
|---|---|
| 兩個人的程式或報告太像(不管誰抄誰,兩個都扣) | −100 |
| 報告沒寫生成式 AI 使用說明 | −10 |
程式檔名不對(只收 .ipynb) | −5 |
| zip 檔名不對 | −5 |
沒附 requirements.txt | −5 |
| 報告沒寫 Python 版本 | −5 |
| 改了模板裡不該改的程式(只准改「載入資料」的部分) | −5 |
老師說修課人數變多,有一部分會用 AI 先做初步檢查(W3 02:00:08)。 格式不對,機器可能直接判你沒分。所以對你的影響是:檔名、報告位置、執行結果這些「形式」要跟內容一樣認真對待。
5 說法互相打架的地方(照哪個做)
結論:PDF、程式模板、助教影片有 6 個地方講得不一樣。原因大多是今年 PDF 從去年版改過來,有些舊句子忘了刪。一律照「比較嚴格的那個」做,最安全。
我把 2025 年版和 2026 年版的 PDF 逐行比對過,所以能確定哪些是「去年留下來的舊句子」。
| # | A 說 | B 說 | 為什麼會這樣 | 建議照哪個做 |
|---|---|---|---|---|
| 1 | PDF 第 31 頁:第 3 題的額外實驗程式要放進筆記本,沒放 0 分 | PDF 第 33 頁:「額外實驗的程式不用上傳」 | 第 33 頁那句是 2025 年版留下來的,今年沒刪。助教影片(18:15)也確認要放。 | 放 |
| 2 | PDF 第 32 頁:只收 .ipynb | PDF 第 36 頁底:「Colab 用 File → Download → Download .py」 | 去年是交 .py,這句是舊的。助教影片(20:45)說下載 .ipynb。 | 交 .ipynb |
| 3 | PDF 扣分表:沒附 requirements.txt 扣 5 分 | 助教影片(21:14):用 Colab 跑的話這個檔案不必要 | 兩邊講法不一致,不確定助教改分時照哪個。 | 還是附上(多交一個小檔沒有壞處,少交可能扣 5 分) |
| 4 | PDF:挑至少 5 個字,每個字各找 5 個最像的 | 模板報告格第 4 題:「Select a few words」(挑幾個字) | 模板的題目是去年的寫法,PDF 今年改嚴了。 | 至少 5 個字 |
| 5 | PDF 第 2 頁:King + Queen − Man ≈ Woman | 模板提示:word_b + word_c − word_a ≈ word_d | PDF 打錯了。 | 照模板:B − A + C |
| 6 | 模板 README:一組備用下載連結(10 條+1 條) | 程式模板裡:另一組下載連結(11 條) | 我今天(9/28)一條一條測過:README 那組 11 條有 10 條已經壞了(404);模板裡那組 11 條全部正常。 | 用模板裡那組。都不行時用 README 最下面的整包備援連結(wiki_texts.zip,今天測過還在)。 |
PDF 沒講,助教影片(17:41)說不用,列出分數、討論就好。 但要注意:筆記本裡 TODO4–7 最後留下的執行結果,一定要是 20% 那一次跑的(PDF 第 31 頁、影片 16:27)。 所以對你的影響是:5% 和 10% 可以先跑、把分數抄下來,最後一次一定要用 20% 從頭跑完再存檔。
6 一定會踩的雷
結論:最致命的是「交出去的檔案沒有執行結果」和「Colab 記憶體爆掉」。其他幾個是模板本身的小毛病,知道了就不會卡。
雷 1:執行結果不見(最致命)
原文:如果沒附執行結果,所有跟實驗結果和圖有關的分數都拿不到。
會出事的情況:
- Colab 斷線或重開後,畫面上的輸出被清掉,你沒發現就下載了。
- 你用「編輯 → 清除所有輸出」讓檔案變小。
所以對你的影響是:下載後,用別的地方打開那個 .ipynb 確認一次(例如上傳到 Google Drive 預覽,或用 VS Code 打開),看得到數字和圖才算數。
雷 2:Colab 記憶體爆掉
老師在課堂上特別講(W3 01:55:40):作業設計成 Colab 免費額度跑得完。 以前有同學說記憶體不夠,通常是程式寫法有問題——把 100% 的維基百科全部讀進記憶體,再從裡面挑 20%。
正確的想法是:一行一行讀,讀到一行就決定要不要留,留的直接寫進新檔案。這樣記憶體裡永遠只有一行。
資料量參考:模板註解寫每個檔 562,365 篇文章(最後一個檔比較少),11 個檔加起來超過 560 萬篇。20% 大約 110 萬篇以上。
雷 3:大小寫對不上
考卷裡有大寫字(例如 Athens、Greece)。glove-wiki-gigaword-100 這份現成詞向量裡的字是全部小寫的。
直接拿 Athens 去查會找不到,程式會報錯。所以要先想好大小寫怎麼處理。
這類「字典裡沒有這個字」的狀況叫 OOV(out-of-vocabulary:字典外的字)。你自己訓練的詞向量一定也會遇到,要決定遇到時怎麼辦(跳過?算答錯?),並在報告裡說明。
雷 4:模板裡有一個沒定義的變數
TODO4 那格用到 output_path,但模板沒有定義它,直接跑會報錯 NameError。
你要自己給它一個檔名(例如 "wiki_texts_sampled.txt")。這屬於「載入資料」的部分,是規定允許改的。
雷 5:存下來的圖片是空白的(不影響分數)
TODO3、TODO7 那格的最後兩行是先 plt.show() 再 plt.savefig()。在 Colab 裡,show() 之後圖就被清掉了,所以存出來的 word_relationships.png 會是空白的。而且 TODO7 會蓋掉 TODO3 存的同名檔。
所以對你的影響是:不影響分數,因為助教看的是筆記本裡顯示的圖。只是如果你想拿那張 png 放報告,要自己另外存一次。這兩行是模板的一部分,不要去改。
雷 6:Gensim 安裝後匯入出錯(不確定會不會遇到)
Colab 預設沒裝 Gensim,要自己 !pip install gensim。老師在 W3 最後也提到 Gensim 更新比較慢(02:50:04)。
常見的狀況是:裝完後 import 出錯,原因通常是它跟 Colab 內建的 numpy 版本不合。這時通常要「執行階段 → 重新啟動工作階段」再跑一次。
這一條是我根據 Gensim 過去的常見問題推測的,今天沒有實際在 Colab 上試。遇到了再處理即可。
雷 7:題目的答案會不會「作弊」到自己
用 most_similar 找最像的字時,Gensim 會自動排除你丟進去的那三個字。如果你自己手算相似度、沒排除,答案常常會是題目裡的某個字(例如算出來最像的是 king 本身)。
所以對你的影響是:自己寫計算的話要記得排除;用 Gensim 內建函式就不用擔心。
7 老師在課堂上怎麼說這份作業
結論:老師講了很多,歸納起來只有三件事—— (一)這份作業會考;(二)作業跑出來的結果會怪怪的,那個「怪」才是重點;(三)可以用 AI,但你自己要懂、要真的跑過。
先補一個背景:為什麼老師說的話很重要
這門課的總成績是:四次作業 75%+一次考試 25%(助教在 Slido 上的回答)。
考試排在大約第 14 週(12 月初),是到教室寫紙本、不能看資料的那種。
所以老師說「考試考什麼」,會直接決定你這份作業該怎麼做。下面三件事都跟這個有關。
第一件事:考試會考「你做作業時發現了什麼」
老師說:不會叫你背公式。會考你做作業時自己看出來的道理。 (他用的英文字是 insight,意思就是「自己發現的道理」。)
為什麼:這門課沒有用課本,老師上課比較像在講故事,沒有一步一步的算式可以考。 能考的,就只剩「你實際動手做過,才會知道的事」。
舉個例子(這是我舉的,老師沒給考古題):考題可能長得像「你自己訓練的詞向量,為什麼分數比現成的低?」。 沒自己跑過的人,只能背 AI 給的答案;跑過的人會記得自己當時看到什麼。
所以你要做的:每跑完一個實驗,就用一句話寫下「我看到什麼、我覺得為什麼」。 這些句子之後可以直接放進報告,也是考前最好的複習資料。
第二件事:結果會怪怪的,老師就是要你看到這個「怪」
先講一個前提:詞向量把每個字放在一張「地圖」上,意思越像的字,應該放得越近。 「找最像的字」就是在地圖上找離它最近的鄰居。
老師說,你做下去會遇到兩種怪事:
| 怪事 | 你會看到什麼 | 跟作業哪裡有關 |
|---|---|---|
| 1. 鄰居不像它 | 找「cat(貓)」最近的鄰居,前幾名常常跟貓一點關係都沒有。老師說「不是一點問題,是非常多問題」。 | 報告第 4 題(找 5 個字的最像的字)就是要你親眼看到這件事,再想為什麼。 |
| 2. 答案差一點點 | 算 queen − king + man,正確答案 woman 不一定是第一名,可能排第二、第三。 | 作業只算「第一名有沒有猜中」,所以分數可能比你預期的低。這可以拿來寫報告第 5 題:如果「前 3 名有猜中就算對」,分數會變多少? |
為什麼會這樣:詞向量不是從「字的意思」學來的,是從「這個字常跟哪些字一起出現」學來的。 所以常常出現在一起、但意思不一樣的字,也會被放得很近。例如 hot(熱)和 cold(冷)的前後文很像,在地圖上就常常是鄰居。
所以你要做的:看到奇怪的結果,先確認不是程式寫錯。確認沒錯之後,那個怪結果就是你報告的材料,不用藏起來。 把它寫下來,再猜一個原因。這正是第一件事說的「考試會考的東西」。
第三件事:可以用 AI,但你要懂、要真的跑過
老師說:他自己試過,把作業丟給 AI,AI 都做得出來,擋也擋不住,所以允許用。
但是去年出過事:有人叫 AI 直接寫出很漂亮的分析和圖,老師根本看不出他到底有沒有跑實驗。
所以今年多了三條規定,都是為了確認「你真的有做」:
| 規定 | 為什麼這樣定 |
|---|---|
| 報告第 3 題的實驗程式碼,一定要放在筆記本裡 | 看得到程式和執行結果,才能證明實驗真的跑過。沒放,這題 0 分。 |
| 格式要完全照規定 | 修課人數變多,有一部分會先用 AI 檢查格式。格式不對,可能直接被判沒分。 |
| 兩份作業太像,抄的人和被抄的人都是 0 分 | 老師說這是故意的:讓你可以理直氣壯地跟同學說「不能借你,借了我也會 0 分」。 |
所以你要做的:AI 幫你寫的程式,每一段你都要說得出「它在做什麼」。 可以跟同學討論做法,但報告和心得要各自寫,也不要把自己的檔案傳給別人。
其他順口提到的小事
| 老師說 | 你要知道的 |
|---|---|
| Colab 免費的就跑得完 | 如果記憶體爆掉,通常是程式寫法的問題,不是電腦不夠力。怎麼避免見第 6 節雷 2。 |
| 三週時間很夠,但大家都拖到最後一週 | 最後一週才開始會很趕。要寫出好的報告,需要時間多跑幾次實驗。 |
| t-SNE 圖一定要有 | 想多用別的方法畫圖來比較也可以,但 t-SNE 那張不能少。 |
| 想做多深都可以 | 前處理、參數可以自己亂試。只要在報告裡寫清楚你做了什麼。 |
| Colab 大概要跑多久,會請助教公布 | 到 9/28 為止還沒公布,記得留意 NTU COOL 或 Slido。 |
想回去看影片的話,時間點在這裡(W3 = 9/24 那堂課): 考試考 insight → W3 01:47:43、02:48:36|鄰居不像它 → W3 00:04:34、00:25:54|答案不一定第一名 → W3 00:31:12| 允許用 AI → W2 02:46:46、W3 01:57:27|去年 AI 寫分析的事 → W3 01:58:00|先用 AI 檢查格式 → W3 02:00:08| 被抄也 0 分 → W3 02:01:03|Colab 跑得完 → W3 01:55:40|三週很夠 → W3 02:01:33|t-SNE → W3 01:54:00|跑多久 → W3 02:48:09。 總成績比例來自 W1 Slido 助教的回答。
8 附加文件地圖(每個東西在哪裡)
結論:作業相關的東西都收進 C:\D槽\TAICA課程\自然語言處理\HW1\ 了。投影片和上課逐字稿很大,沒有複製,直接連到原本的位置。
HW1 資料夾裡有什麼
自然語言處理\HW1\
├─ HW1_作業介紹.html ← 就是這份
├─ HW1_Word_Analogy_規定.md ← 給 AI 讀的規定摘要(從上一層搬進來,已補上今天的新發現)
├─ 原始檔_2026\ ← 從課程 GitHub 複製一份(原檔沒動)
│ ├─ NLP_HW1_word_emb.pdf 作業說明,37 頁
│ ├─ main.ipynb 程式模板(要交的就是這個檔改好的版本)
│ ├─ questions-words.csv 考卷,19,544 題
│ └─ README.md 維基百科資料的備用下載連結
└─ 助教說明影片\
├─ HW1_助教說明_自然語言處理.m4a 助教錄的作業說明,24 分鐘
└─ HW1_助教說明_自然語言處理.逐字稿.txt 逐字稿(361 行)
點了就能打開
下面的連結是相對路徑,這份 HTML 要放在 HW1\ 資料夾裡才點得開。PDF 會直接跳到指定頁。
| 東西 | 連結 | 什麼時候用 |
|---|---|---|
| 作業說明 PDF | 全份|p13 TODO 清單|p31 評分|p36 扣分 | 確認原文 |
| 程式模板 | main.ipynb | 上傳到 Colab 開始寫 |
| 助教說明逐字稿 | 逐字稿 | 查助教怎麼講某一題 |
| 助教說明影片(線上) | youtu.be/4nktsdfU24k | 想看畫面時 |
| 課程 GitHub(線上) | IKMLab/NTHU_Natural_Language_Processing | 檢查作業有沒有更新 |
| 投影片:word2vec 怎麼訓練 | W1_NLP_brief_v2 p81–84 | 寫 TODO5 前複習 CBOW、Skip-gram |
| 投影片:GloVe、FastText、該用哪種 | W1_NLP_brief_v2 p91–93 | 報告第 1 題解釋你選的模型 |
| 投影片:詞向量的特性(含類比) | W2_Word embeddings…_v2 p29–38 | p30 就是 analogy 的圖 |
| W3 上課逐字稿 | W3 逐字稿 | 作業介紹在 01:46:41–02:02:00;Q&A 在 02:48:09 之後 |
| 去年(2025)版作業 | 2025 版 PDF | 只用來比對,不要照它交 |
線上資源
| 東西 | 位置 |
|---|---|
| 交作業 | NTU COOL |
| 問問題 | Slido:app.sli.do/event/oBajtdC5ZobNokWieGtjAg |
| 助教信箱 | nthuikmlab@gmail.com |
| Gensim 說明文件 | radimrehurek.com/gensim/models/word2vec.html |
如果助教之後改了作業,GitHub 上的會變、這份不會變。 要檢查有沒有更新:在
C:\D槽\TAICA課程\自然語言處理\NTHU_Natural_Language_Processing\ 跑 git pull,再看 2026\Assignments\Assignment1\。今天(9/28)檢查過,還是 9/24 那一版。
9 建議時程與還沒確定的事
結論:還有 17 天。建議這週把前半做完、下載好維基百科;下週跑完所有實驗;最後一週只寫報告和檢查格式。
建議時程
| 時間 | 做什麼 | 為什麼排這裡 |
|---|---|---|
| 9/28–10/4 | TODO1–3(前半)+下載、解壓維基百科+先用 5% 試跑 TODO4–5 | 前半最簡單,先拿到分數。5% 試跑可以早點發現記憶體、安裝問題。 |
| 10/5–10/11 | 用 5%、10%、20% 各跑一次,抄下分數;找第 3 題的語料並訓練 | 最花時間的在這週。Colab 可能中途斷線,要留重跑的時間。 |
| 10/12–10/14 | 最後用 20% 從頭跑一次、寫六題報告、做第 10 節的檢查清單 | 最後留的執行結果必須是 20% 版。 |
| 10/15(四) | 上傳 NTU COOL | 幾點截止要先查好。 |
還沒確定的事(我查不到,要你去確認)
| 問題 | 目前知道的 | 去哪確認 |
|---|---|---|
| 確切截止時間(哪天幾點) | 老師說「公布後三週」→ 推算 10/15(四) | NTU COOL 作業頁 |
| 檔名的 school 填什麼 | 我猜 CYUT,沒有官方根據 | NTU COOL 公告,或寄信問助教 |
| 遲交怎麼算 | W1 Slido 有人問「遲交是不是直接 0 分」,我存下來的紀錄裡沒有看到回答 | Slido 或 NTU COOL |
| 能不能在期限內重複上傳 | W1 Slido 有人問,同樣沒看到回答 | Slido 或 NTU COOL |
| Colab 大概要跑多久 | 老師說會請助教提供以前的經驗,目前還沒公布 | NTU COOL、Slido |
10 繳交前檢查清單
結論:上傳前一項一項按「OK」。有問題的按「有問題」寫一句,最上面的按鈕可以把問題清單複製給我。
每一項都寫成「你應該看到什麼」。進度會存在這台電腦的瀏覽器裡,關掉再開還在。
檔案本身
- zip 檔名是
NLP_HW1_學校_學號.zip,學校代碼已確認過 - zip 裡面有
NLP_HW1_學校_學號.ipynb,副檔名是.ipynb不是.py - zip 裡面有
requirements.txt,每行一個套件+版本 - 用別的地方重新打開下載好的
.ipynb,每一格下面都看得到執行結果
程式部分
- TODO1 那格下面看得到
df.head()印出的表格(三欄:Question、Category、SubCategory) - TODO2 之後的評分格印出每個大類、小類的正確率
- TODO3 下面看得到 t-SNE 圖(family 類的字)
- TODO4–7 留下的執行結果是 20% 那一次
- TODO6 之後的評分格印出你自己詞向量的正確率
- TODO7 下面看得到第二張 t-SNE 圖
- 除了 TODO 格子和載入資料的地方,模板其他程式都跟原版一樣
- AI 產生的程式碼旁邊都有註解標明;網路上參考的程式有附網址
報告部分
- 報告開頭填了 Running environment
- 報告開頭填了 Python version(實際版本號,不是只寫 3)
- 第 1 題:寫了模型名稱、前處理步驟、超參數(例如向量長度、視窗大小、訓練幾輪)
- 第 2 題:5%、10%、20% 三個都有分數,也有比較和討論
- 第 3 題:報告下面的「Write your code here」格子裡有換語料的程式,而且有執行結果
- 第 3 題:3.1 結果、3.2 語料介紹與差異、3.3 原因分析,三小題都有答
- 第 4 題:至少 5 個字,每個字列出 5 個最像的字,並寫了觀察
- 第 5 題:有寫額外的分析或實驗(空著會少 5%)
- 第 6 題:寫了生成式 AI 使用說明(沒用也要寫「沒有使用」)
- 報告和心得是自己的話,沒有跟同學的長得一樣
上傳
- NTU COOL 作業頁顯示已上傳,檔名正確
- 上傳時間在截止時間之前
本報告的每一項判斷都來自實際查證(讀作業 PDF 全文、讀程式模板每一格、數考卷題數、逐條測試下載連結、比對 2025/2026 兩版 PDF、讀助教影片與 W2/W3 上課逐字稿),不是推測。唯二的推測已在文中標明:檔名的學校代碼(第 4 節)、Gensim 安裝問題(第 6 節雷 6)。