# NLP 作業一:Word Analogy(詞類比) > 來源:課程 GitHub `2026/Assignments/Assignment1/NLP_HW1_word_emb.pdf`(37 頁),2026-09-24 隨 W3 公布。 > **期限:老師寫「You will have three weeks to finish this assignment」。9/24 公布 → 約 10/15(四)到期。** > ⚠️ 確切日期要去 NTU COOL 上看,PDF 沒寫死日期。 > > **給人看的完整版**:同資料夾 `HW1_作業介紹.html`(2026-09-28 整理,含說法衝突、雷區、檢查清單)。 > 本檔是給 AI 讀的摘要;兩份有出入時以 HTML 為準(它比較新)。 ## 2026-09-28 補充(讀完助教影片、逐條測過連結後的新發現) **PDF/模板/助教影片說法不一致,一律照較嚴格的做:** | # | 衝突 | 原因 | 照哪個 | |---|---|---|---| | 1 | PDF p31「第 3 題實驗程式沒放 0 分」vs p33「額外實驗程式不用上傳」 | p33 是 2025 版殘留(已逐行 diff 確認) | 放 | | 2 | PDF p32 只收 .ipynb vs p36「Download .py」 | p36 是 2025 版殘留 | 交 .ipynb | | 3 | PDF 沒附 requirements.txt −5 vs 助教影片 21:14「用 Colab 就不必要」 | 兩邊不一致 | 還是附 | | 4 | PDF「至少 5 個字」vs 模板報告格「a few words」 | 模板題目沒跟著改 | 至少 5 個 | | 5 | PDF p2 寫 `King + Queen − Man ≈ Woman` | PDF 打錯 | B − A + C(模板提示是對的) | | 6 | README.md 的備用 gdown 連結 | 2026-09-28 實測 11 條有 10 條 404 | 用 main.ipynb 裡那組(11 條全 200);整包備援 `wiki_texts.zip` 還在 | **助教影片補充(`助教說明影片/…逐字稿.txt`):** - 報告第 2 題(5/10/20%)**不用附程式**,列分數討論即可(17:41);但筆記本留下的結果必須是 20% 版(16:27) - 生成式 AI 使用說明**沒用也要寫「沒有使用」**(20:13) - 抽樣以「篇」為單位,每行一篇(13:26) **模板本身的毛病:** - TODO4 格用了 `output_path` 但沒定義 → 要自己給檔名(屬於資料載入,允許改) - TODO3/TODO7 格先 `plt.show()` 再 `plt.savefig()` → 存出的 png 是空白,且 TODO7 蓋掉 TODO3 的檔。不影響分數(看的是 notebook 輸出),模板不要改 - `glove-wiki-gigaword-100` 全小寫,考卷有大寫字(Athens)→ 要處理大小寫/OOV **還沒確定:** 截止幾點、檔名 school 填什麼(猜 CYUT,無官方根據)、遲交規定、可否重複上傳、Colab 跑多久(老師說助教會提供)。 ## 這個作業在做什麼 **Word Analogy(詞類比)**:測試詞向量模型有沒有抓到字與字之間的語意與語法關係。 經典句型:**A is to B as C is to D** - 例:`King is to Queen as Man is to Woman` - 寫成算式:`King - Queen + Man ≈ Woman` **資料集**:Google Word Analogy(Mikolov et al., 2013) - **19,544 筆** - 語意關係 5 個子類別、語法關係 9 個子類別 - 每筆四個字,用空白隔開。**第四個字(D)就是答案** | 類別 | 子類別 | 例子(紅字是答案) | |---|---|---| | Semantic | family | king queen man **woman** | | Syntactic | gram1-adjective-to-adverb | infrequent infrequently cheerful **cheerfully** | ## 要交什麼:七個 TODO(佔 55%) 作業分兩半:**先用現成的詞向量,再自己訓練一份**。 ### 第一半:用預訓練的詞向量 | # | 要做什麼 | 配分 | |---|---|---| | TODO1 | 把 analogy 資料轉成 `pd.DataFrame` | 5% | | TODO2 | 用預訓練詞向量做 analogy 預測 | 10% | | TODO3 | 畫 t-SNE,看 `family` 子類別裡的字詞關係 | 5% | ### 第二半:自己訓練詞向量 | # | 要做什麼 | 配分 | |---|---|---| | TODO4 | 抽樣 **20%** 的 Wikipedia 文章 | 5% | | TODO5 | 用抽樣的文章訓練自己的詞向量 | 10% | | TODO6 | 用自己訓練的詞向量做 analogy 預測 | 10% | | TODO7 | 畫 t-SNE(同 TODO3,但用自己的向量) | 10% | **工具**: - **Gensim**(Python 的詞向量套件)——載入預訓練模型、訓練 word2vec - **Google Colab**(老師建議的環境,有免費 GPU) - 助教**已經幫你清洗好 Wikipedia 資料**,分成 11 個 `.gz` 檔(README.md 裡有 gdown 連結) **老師建議的前處理**(但註明「不是每個技巧都會更好,你要自己試」): - 移除非英文字 - 移除停用詞(stop words) - 詞形還原(Lemmatization,例:rocks → rock) - 比「用空白切」更好的斷詞方式 - 只保留最高頻的字進字典 ## 報告(佔 45%)—— 寫在同一份 .ipynb 裡 | 要寫什麼 | 配分 | |---|---| | 你用哪個 embedding model?前處理步驟?超參數設定? | 5% | | **抽樣 5%、10%、20% 的 wiki 文字,效能差多少?** | 10%(各 3%) | | **換一個 wiki 以外的語料**,不同類別/子類別的效能如何? | **15%** | | ⤷ 呈現結果 | 5% | | ⤷ 介紹你選的語料,跟 Wikipedia 差在哪(資料量、主題、結構) | 5% | | ⤷ 解釋為什麼效能上升或下降 | 5% | | 挑至少五個字,各找出五個最相似的字。你觀察到什麼? | 10% | | 任何能加強報告的東西 | 5% | | **Generative AI 使用說明** | (必填,見下方懲罰) | ⚠️ **那個 15% 的額外實驗,程式碼要放在報告區塊下面**。老師明寫:**沒放就 0 分**。 ## 繳交規定 | 項目 | 規定 | |---|---| | 程式 | **只能是 `.ipynb`**(Colab 下載)。其他格式一律不收 | | 套件清單 | `requirements.txt`(例:`gensim==4.3.3`) | | 打包 | 兩個檔**壓成 zip** 再上傳 | | 上傳到 | **NTU COOL** | **檔名規則**: | 檔案 | 格式 | 範例 | |---|---|---| | 程式 | `NLP_HW1_school_student_ID.ipynb` | `NLP_HW1_NTHU_12345678.ipynb` | | 壓縮檔 | `NLP_HW1_school_student_ID.zip` | `NLP_HW1_NTHU_12345678.zip` | > 你是朝陽科大,所以應該是 `NLP_HW1_CYUT_學號.ipynb`。**school 那格怎麼寫要確認**,PDF 只給了 NTHU 的範例。 **報告裡一定要寫執行環境**: | 環境 | 要寫什麼 | |---|---| | Colab / Kaggle | 寫「Colab」+ Python 版本 | | 本機 | 系統(例:Ubuntu 22.04)、CPU(例:Ryzen 7-7800X3D)、Python 版本 | ## 🚨 扣分表(老師列得很清楚) | 違規 | 扣分 | |---|---| | 程式檔名不對(只收 .ipynb) | **−5** | | 壓縮檔檔名不對 | **−5** | | 沒附 `requirements.txt` | **−5** | | **報告裡沒寫生成式 AI 的使用情形** | **−10** | | 報告裡沒寫 Python 版本 | **−5** | | 改動程式模板(只允許改資料載入的部分) | **−5** | | **跟其他同學的程式或報告高度相似** | **−100,雙方都扣** | ## 最重要的一條:執行結果一定要留著 > 原文:「The .ipynb file must include **both your code and its execution outputs**(20% version of wiki). > **If the execution results are not included, no points can be awarded for any parts related to experimental results or plots.**」 **白話:交出去的 .ipynb 裡,每個 cell 的輸出都要在。** 只有程式碼沒有結果,所有跟實驗結果與圖表有關的分數**全部拿不到**。 ## 關於用 AI 老師明寫**可以用,但一定要標**: - **程式的註解裡**要標 - **報告裡**也要標 - 從網路上抄的程式要附連結 - 沒標會扣分(見上表 −10) ## 檔案位置 | 東西 | 路徑 | |---|---| | 作業說明 PDF | `自然語言處理\NTHU_Natural_Language_Processing\2026\Assignments\Assignment1\NLP_HW1_word_emb.pdf` | | 程式模板 | 同資料夾 `main.ipynb` | | 測試資料 | 同資料夾 `questions-words.csv`(19,545 行) | | Wiki 語料下載連結 | 同資料夾 `README.md` |