# 05e 第二輪規則合規審查:NLP HW1(Word Analogy) - 審查日期:2026-10-05 - 審查對象:`HW1\示範實作\NLP_HW1_submission_draft.ipynb`(55 格,下稱 N[x],從 0 起算)、`HW1\示範實作\requirements.txt` - 依據:作業 PDF(下稱 P.x)、官方模板 `main.ipynb`(下稱 T[x])、助教影片逐字稿(TA [mm:ss])、第三週上課逐字稿(Lec [hh:mm:ss]) - 已知待辦,不算新發現:檔名/學校代碼/學號還沒定;Q6 最後一行還是佔位符 ⟦WHAT_I_DID⟧。 - 我確認過:整份檔案只有這一個佔位符(`⟦` 出現 1 次)。「示範」「DEMO」都是 0 次。 ## 一句話結論 > 第一輪的問題幾乎全部修好了:整份重跑(執行序號 1–43 連號)、Hints 放回去、AI 標註補齊、找不到出處的數字都刪掉或補了程式。 > 剩下會扣分的,除了已知的檔名和 Q6 佔位符之外,主要有兩類: > 1. **報告裡的〔cell N〕編號,助教在 Jupyter/Colab 上對不到。** 那是「從 0 起算的格子位置」,畫面上看到的卻是 `In [n]` 執行序號,兩者不一樣。例如〔cell 38〕在畫面上是 `In [31]`,而畫面上的 `In [38]` 其實是錯題分析。 > 2. **有 4 處說法比輸出講得更滿:** CBOW「全面較好」、PCA「大致區分男女」、sourpuss「是卡通角色」、論壇「2,118,254 則貼文」。 > > 這些都只要改報告文字(N[29]),不用重跑。 查證範圍: - 報告裡大約 150 個數字,逐一對過輸出。除了下面列出的幾處,全部一致(含四捨五入和簡單減法)。 - 報告引用的上課時間點和投影片頁碼,全部對得上原文。 - 報告寫的硬體規格,在這台電腦上查過,正確。 - 執行完之後,只有報告格 N[29] 被改過。其他 54 格的程式、輸出、執行序號,和執行當下的備份 `NLP_HW1_submission_executed_1005_backup.ipynb` 完全一樣。 --- ## (a) 第一輪問題逐條驗證(對照 05a,並附 05c 評分者提過的重點) | 05a 編號 | 第一輪問題 | 現況(證據) | 判定 | |---|---|---|---| | 1 | .ipynb 檔名(−5) | 還叫 `NLP_HW1_submission_draft.ipynb` | 未修(已知待辦) | | 2 | .zip 檔名(−5) | 還沒打包 | 未修(已知待辦) | | 3 | 壓縮檔只能放 .ipynb+requirements.txt(P.32) | 資料夾裡還有 .model、.npy、.txt、.py、.md、備份 .ipynb 等。還沒打包,不算錯 | 待辦,打包時注意 | | 4 | requirements.txt(−5) | 10 個套件。版本和 `.venv` 的 `pip freeze` 逐一相符,也和 N[54] 印出的 gensim/numpy/pandas/sklearn 版本一致 | ✅ 維持 | | 5 | 要有輸出,而且是 20% 的結果(P.31) | N[24] 印出 `sampled 1,124,733 (20.00%)`。N[25] 用 `wiki_sampled_20_clean.txt` 訓練。TODO6(N[27])用 `my_model`,TODO7(N[28])用 `my_wv`。43 個程式格都有執行序號,沒有任何 error。7 個沒有輸出的格(N[1,3,6,8,10,11,26])都是模板原本就不會印東西的格子 | ✅ | | 6 | t-SNE 圖要顯示 | N[15]、N[28] 都有圖。我把 N[28] 解出來看過,49 個字都有標籤 | ✅(建議加的 TODO7 文字標示沒加,不影響規則) | | 7 | 不能改模板,Hints 要放回去(−5) | N[13]、N[27] 的 `""" Hints … """` 已經**一字不差**放回去(程式比對:模板的行,一行都沒少)。N[31] 第一行已補回 `# Write your code here`。完整差異見下方「模板逐格比對」 | ✅ 已修 | | 8 | 報告寫在模板最後的文字格 | 在 N[29],就是 T[29] 的位置 | ✅ | | 9 | 報告開頭要寫環境和 Python 版本(−5) | N[29] 第一行是 `Running environment: Local — Windows 11 (10.0.26200), CPU: Intel Core i7-11800H (8 cores / 16 threads), RAM 16 GB`,第二行是 `Python version: 3.12.3`。示範提示框已經刪掉。CPU 型號、8 核 16 執行緒、RAM 15.7 GB 都在本機查過,屬實 | ✅ 已修 | | 10 | Q1「非英文字約 0.4%」沒有出處 | 改成 0.72%(4,828,696 / 670,881,822),和 N[25] 的輸出一致 | ✅ 已修 | | 11 | Q2 重跑分數 48.21/45.95 沒有出處 | 已刪掉。改成在 N[43] 用 4 個亂數種子量雜訊,Q2 表格的「雜訊範圍」欄全部出自 N[43] | ✅ 已修 | | 12 | Q3 結果 | 3.1 現在列出完整 14 個小類,另外加了「只算兩邊字典都有的 15,684 題」的比較(N[34])。數字全部一致 | ✅(比第一輪更好) | | 13 | Q3 程式要放在報告下面(否則 0 分) | 在 N[31]–N[36],都在 N[29] 下面 | ✅ | | 14 | Q4 sourpuss 回查語料沒有程式 | N[41] 第 (4) 段真的去讀語料,並印出 5 處上下文 | ✅ 已修(但說法要再收斂,見新發現 N4) | | 15 | Q5 (g) 的 0.08/8.9 沒有出處;程式和報告編號對不起來 | 0.08/8.9 已刪。程式註解 (a)–(h) 在 N[43]–N[50],和報告的 (a)–(h) 一一對應 | ✅ 已修 | | 16 | Q6 AI 聲明是示範版寫法(−10) | 已改寫:使用 Claude(Claude Code,在自己電腦上)、全部程式、執行、全部報告文字。只剩「What I did」是佔位符 | ✅ 大致修好(剩已知待辦) | | 17 | AI 程式要有註解標示(P.35;TA [22:32]–[22:41]) | 32 個程式格有 `# [Generative AI] The code in this cell was generated by Claude (Anthropic).`。原本漏標的 N[2]、N[18]–N[22] 都補了。沒標的 11 格(N[1,3,4,6,7,8,10,11,12,14,26])和模板完全相同,不是 AI 寫的,不標是對的。N[38] 已改成「附上供參考」 | ✅ 已修 | | 18 | 網路來源要附連結 | gensim-data、SemEval-2016 Task 3 的網址在 N[32] 和報告 3.2;NLTK 的網址在 N[44];3CosMul 論文(ACL Anthology)在 N[48] 和報告 (f) | ✅ 已修(還有兩處小的沒附,見新發現 N8) | | 19 | 相似度(兩人都 −100/0 分) | 檔案本身改不了這個風險 | ⚠️ 風險還在:不要給別人看 | | 20 | 執行序號不連號 | 整份重跑,序號 1–43 連號、沒有跳號。執行完之後只改過報告格(和執行當下的備份逐格比對過) | ✅ 已修 | | 21 | 只交 .ipynb | — | ✅ | | 22 | 預訓練模型用 glove-wiki-gigaword-100 | N[12] 沒動 | ✅ | | 23 | tqdm 進度條碎片很多 | N[13] 有 1,310 段、N[27] 有 1,012 段、N[24] 有 13 段。在 Jupyter/Colab 上會合併成一條進度條 | ⚠️ 低風險,維持現狀 | | 24 | 報告用中文 | 還是中文,題目保留英文 | ✅(不確定助教偏好;規則沒有限制語言) | | 7c | N[24] TODO4 拿掉外層的 `with open(wiki_txt_path…)` | 還是一樣(改成依序讀 11 個 .gz)。屬於資料載入,有 `[Data loading changed]` 註解說明 | ⚠️ 偏合規,維持 | 05c(評分者觀點)提過的內容問題: - apple 的 raspberry 是 Raspberry Pi:已修正。 - GloVe 相似度比較高那句:已刪,改成「兩個模型的分數尺度不同,不互相比」。 - Q3.1 挑列:已改成完整 14 列。 - Q3.3 排除 OOV(字典裡沒有的字):已補。 - Q3.2 語料出處:已補。 - PCA 的例外:只**部分**修正,見新發現 N3。 - Q4 的 taiwan、computer 沒寫觀察:**沒修**,見新發現 N11。 - Q3.2 的主題差異沒有量化:**沒修**,屬於選做。 --- ## 模板逐格比對(T[0]–T[31] 對 N[0]–N[31]) 有 18 格和模板不一樣。下面分類說明。 | 格 | 類別 | 模板原本的行有沒有保留 | 判定 | |---|---|---|---| | N[5] TODO1 | TODO 格 | 全部保留,只在 TODO 註解下面加程式 | ✅ | | N[13] TODO2 | TODO 格 | 全部保留,Hints docstring 一字不差 | ✅ | | N[15] TODO3 | TODO 格 | 全部保留,`plt.title/show/savefig` 原樣 | ✅ | | N[24] TODO4 | TODO 格+資料載入 | 少了 2 行:`with open(wiki_txt_path, "r", encoding="utf-8") as f:`,以及 `with open(output_path, "w", encoding="utf-8") as output_file:`(第二行改成加了 `newline="\n"` 的版本)。TODO4 的兩行註解都還在 | ⚠️ 偏合規(讀檔方式屬於資料載入) | | N[25] TODO5 | TODO 格 | 全部保留(Hint 和連結都在) | ✅ | | N[27] TODO6 | TODO 格 | 全部保留,Hints 一字不差。尾巴加了印正確率的程式 | ✅ | | N[28] TODO7 | TODO 格 | 全部保留 | ✅ | | N[29] 報告 | 報告格 | 題目原文全部保留。`Running environment:`/`Python version:` 後面接了內容。`Answer: ` 尾巴的空白被去掉,不影響 | ✅ | | N[31] 第 3 題自由區 | 自由區 | `# Write your code here` 保留在第一行 | ✅ | | N[2]、N[18]–N[22] | 資料載入 | `!wget`、`!gdown`、`!gunzip`、`!cat`、`!head` 改成 Python 寫法。**模板的說明註解也一起被刪了**(例如 `# Download the Google Analogy dataset`、`# Extract the downloaded wiki_texts_parts files.`、`# Combine…`、`# Check the first ten lines…`) | ✅ 規則允許改資料載入(P.36)。想更保險,可以把這幾行說明註解放回去(見新發現 N16) | 其他 14 格(T[0,1,3,4,6–12,14,16,17,23,26,30])**完全相同**。評分格 T[14]「You do not need to modify this block!!」沒動。 --- ## (b) 新發現 | 編號 | 規定(出處) | 現況(證據) | 判定 | 怎麼改 | |---|---|---|---|---| | N1 | 報告的結果要能在 notebook 裡找到(P.31「沒有執行結果就不給分」;Lec [01:58:08]–[01:58:15]「我根本不知道他有沒有做這個實驗」) | 報告開頭寫「括號內標出是哪一格(例如〔cell 27〕)」。這些號碼是**從 0 起算的格子位置**,但 Jupyter/Colab 畫面上不會顯示格子位置,只會顯示 `In [n]` 執行序號,而且兩者不一樣。例如〔cell 38〕(Q2)在畫面上是 `In [31]`;畫面上的 `In [38]` 卻是錯題分析。〔cell 41〕(sourpuss 證據)在畫面上是 `In [33]`;`In [41]` 是覆蓋率表。助教照著號碼找,會找到錯的格子,看起來就像「報告說的東西找不到」 | ❌ | 把報告裡的〔cell N〕全部改成畫面上看得到的 `In [n]`。對照表:24→`In [20]`、25→`In [21]`、27→`In [23]`、33→`In [27]`、34→`In [28]`、35→`In [29]`、36→`In [30]`、38→`In [31]`、40→`In [32]`、41→`In [33]`、43→`In [34]`、44→`In [35]`、45→`In [36]`、46→`In [37]`、47→`In [38]`、48→`In [39]`、49→`In [40]`、50→`In [41]`。開頭那句說明也要一起改。只改 markdown,不用重跑 | | N2 | Q5 的說法要和輸出一致 | (c) 寫「本設定 CBOW 全面較好」。可是 N[45] 的輸出顯示,CBOW 在 3 個小類比較差:capital-common-countries −2.37、gram2-opposite −0.37、gram6-nationality-adjective −1.81。最後一項 `beyond noise? = True`,也就是超過雜訊,是真的比較差 | ⚠️ | 改成:「Overall、Semantic、Syntactic 都較好;14 個小類裡 11 類較好,但 nationality-adjective 低 1.81(超過雜訊)」 | | N3 | Q5 的說法要和圖一致 | (g) 寫「PCA 的縱軸大致區分男女…但並不乾淨(she, her, woman 也在上半)」。我解出 N[49] 的圖來看:queen(約 1.0)、princess(約 0.13)也在上半;dad(約 −0.67)、grandpa(約 −0.60)、husband(約 −0.40)、policeman(約 −0.33)、stepfather(約 −0.28)在下半;woman 只有約 0.04,幾乎就在中線上。例外比報告列的多很多,「大致區分男女」講得太滿(05c 第一輪也提過,只修了一半) | ⚠️ | 改成:「PCA 的縱軸只有微弱的性別傾向:he/his/king 在最上、mom/grandma/aunt 在下,但 queen、she 在上半,dad、grandpa、husband 在下半,分不乾淨。」t-SNE 那半句是對的(boy/girl、bride/groom、dad/mom、king/queen 確實貼在一起) | | N4 | Q4 的說法要和輸出一致 | 觀察 4 寫「sourpuss,回查訓練語料發現是卡通角色」。N[41] 印出的 5 處上下文裡,只有 2 處是卡通角色名單(第 1、2 處)。另外 3 處是英文字源說明(「puss as in sourpuss comes from irish」)、劇集名(sourpuss sal)、樂團名(her first band sourpuss)。只講卡通角色,會被看成挑對自己有利的 | ⚠️ | 改成:「前 5 處上下文有 2 處是卡通角色名單("toon characters including … sourpuss …"),其餘是字源、劇集名、樂團名。它出現次數少(64 次),又常和動物角色並列,所以被拉到 cat 旁邊」。64 次這個數字出自 N[41] 第 (1) 段的輸出 | | N5 | Q3.2 的說法要和程式一致 | 報告寫「共 189,941 個討論串、2,118,254 則貼文」。可是 N[33] 的程式是把「標題、內文、每一則留言」各算一段,而且**少於 3 個字的段落會被丟掉**(`if len(toks) >= 3`)。所以 2,118,254 是「保留下來的文字段數」,不是貼文數。報告 3.2 的前處理說明也沒提到「少於 3 個字就丟掉」這一步 | ⚠️ | 改成:「2,118,254 段文字(標題、內文、每則留言各算一段;少於 3 個字的段落刪掉)」 | | N6 | 數字描述要精確 | Q5 (a) 寫「小類範圍 1.50~4.74(family 與 comparative 最大)」。N[43] 的輸出是 family 4.74、comparative 4.73、**present-participle 也是 4.73**,漏了一個 | ⚠️(小) | 改成「family、comparative、present-participle 最大(約 4.7)」 | | N7 | 報告的數字要出自輸出 | Q2 寫「capital-common-countries 只有 506 題」。整份 notebook 的輸出都沒有印出 506(只能從正確率反推)。這是真的,但沒有出處 | ⚠️(小) | 刪掉「506 題」,改成「這一類題數較少」;不然就在 N[52] 之類的格子補印各小類的題數(要重跑那一格,不建議) | | N8 | 引用網路來源要附連結(P.35 (2)) | (1) Q1 的 GloVe「約 60 億字訓練,40 萬字」沒有附出處。(2) Q5 (c)「原論文也是 Skip-gram 語意類較好」沒有附論文。這兩句都是外部事實,不是程式輸出 | ⚠️(小) | 補上 `https://nlp.stanford.edu/projects/glove/`,以及 Mikolov et al. (2013) `https://arxiv.org/abs/1301.3781` | | N9 | AI 聲明要準確(P.35;TA [20:19]–[20:24]「在什麼地方用什麼 AI、生成了哪一個部分」) | Q6 寫「Every AI-generated cell **starts with** a `# [Generative AI]` comment」。但 N[31] 的第一行是模板的 `# Write your code here`,標註在第二行。另外,報告下面的 5 個 markdown 標題格(N[37,39,42,51,53])也是 Claude 寫的,聲明沒提到。實驗設計(選論壇語料、做同字數對照組、量雜訊)也是 Claude 提的,聲明只寫了「code」「report」 | ⚠️(小) | 把 "starts with" 改成 "has … at the top"。在 Code 那條補 "and the section headings below the report"。如果實驗設計確實是 Claude 提的,補一條 "**Experiment design**: the choice of the forum corpus, the same-size Wiki control and the extra experiments were proposed by Claude."(只寫屬實的) | | N10 | AI 要「消化」,不能只交 AI 的分析(Lec [01:57:25]–[01:57:40]「你一定要消化你這個 AI 做了哪些事情」;期末閉書考試考作業的 insight,Lec [01:47:41]–[01:48:10]、[02:48:55]–[02:49:07]) | Q6 的「What I did」是佔位符(已知待辦)。這一行是整份報告裡唯一能說明「學生自己做了什麼」的地方 | ⚠️(已知待辦,但要強調) | 只能寫真的做過的事。如果真的讀過、對過數字,就寫出來。不要誇大,也不要留白或留著佔位符交出去 | | N11 | Q4「What do you observe?」(P.31,10%) | 列了 7 個字,但 taiwan、computer 沒有任何一句觀察(05c 第一輪也提過,沒修) | ⚠️(評分風險,不是規則) | 補一句就好,例如:taiwan 的鄰居在兩個模型都是中國的地名與省份(taipei、china、guangdong、fujian),反映語料的地理脈絡;computer 的鄰居兩邊都是同類詞(computers、software、hardware),是最「乖」的一組。這些字都已經在 N[40] 的輸出裡 | | N12 | 引用老師上課內容要正確 | 逐一查過:W2 01:39:50 停用詞(逐字稿是「以前有個步驟很重要,但是現在一點都不重要也不會去做」);W3 01:12:12 Skip-gram;W3 01:22:17「設一萬…效果不會比較好」;queen「可能在前三名」(W3 00:31:24);「貓附近的向量其實不是貓」(W3 00:05:21–00:05:27);2026 投影片 W1 p47 "Avoid to broke the semantics"、p60 用 bank 舉一詞多義、p93 "It depends."、p94 "Vector search is not robust to typos";W2 p39 Contextualized Embeddings | ✅ | — | | N13 | 執行完不能再改程式(避免輸出和程式對不上) | 和 `NLP_HW1_submission_executed_1005_backup.ipynb` 逐格比對:只有 N[29] 的文字不同,其他 54 格的程式、輸出、執行序號完全相同 | ✅ | 之後如果要改程式格的註解(N9、N16),輸出不受影響,但**不要改任何會執行的程式碼** | | N14 | 個資外洩 | 輸出裡沒有 `C:\Users\...` 路徑、使用者名稱或 email | ✅ | — | | N15 | requirements.txt 要列出跑這份程式需要的套件(P.32;TA [21:04]–[21:08]) | 10 個套件,版本都對。notebook 有用到 `display()`,那需要 Jupyter/ipykernel,但 requirements 沒列 | ⚠️(低) | 可以選擇補上 `ipykernel==7.4.0`、`jupyter==1.1.1`(`.venv` 裡實際裝的版本)。不補也不違規 | | N16 | 不能改模板(P.36,−5) | 資料載入格 N[2]、N[18]–N[22] 刪掉了模板原本的說明註解(例如 `# Download the Google Analogy dataset`)。規則允許改資料載入,所以不算違規 | ⚠️(極低) | 想更保險,可以把那幾行說明註解放回各格第一行。只加註解,輸出不受影響,不用重跑 | | N17 | 報告長度(沒有明文規定) | 報告很長(6 題,加上大約 10 張表)。老師提過「幫你把要餵給 AI 的 prompt 都寫好了…寫了一個 100 頁的報告」(Lec [01:57:13]–[01:58:58]),語氣是調侃,不是規定 | ✅(不扣分,只是提醒) | 不用改。重點是 N10:要讀得懂自己交的東西 | --- ## (c) 繳交前一定要做的(依可能扣的分數排序) 1. **相似度(兩人都 −100/0 分;P.36、TA [23:33]–[23:42]、Lec [02:01:06]–[02:01:21])** 這份 notebook 和報告文字不要給任何人看。這個風險檔案本身沒辦法消除。 2. **檔名與打包(.ipynb −5、.zip −5、只能放兩個檔;P.32、P.33、P.36)** - 改成 `NLP_HW1_<學校縮寫>_<學號>.ipynb`,壓成同名的 `.zip`。 - 壓縮檔裡**只放**這個 .ipynb 和 `requirements.txt`。不要放資料夾,也不要放備份、模型或語料。 3. **Q6「What I did」(佔位符留著交出去,就等於聲明沒寫完;P.35「沒有說明」會扣分)** 照實填。不能寫沒做過的事。順手修 N9 的三個小地方。 4. **〔cell N〕改成 `In [n]`(N1;影響 Q2–Q5 的 40%:助教對不到格子,就驗證不了你的數字)** 照上面的對照表,在 N[29] 裡全部換掉。只改 markdown,不用重跑。 5. **四處講得太滿的地方(N2–N5;各可能扣 0.5 左右,分別在 Q5、Q4、Q3.2)** CBOW「全面較好」、PCA「大致區分男女」、sourpuss「是卡通角色」、「2,118,254 則貼文」。都照上表改寫。 6. **小地方(N6、N7、N8、N11;累計可能扣 0.5–1)** 補 present-participle、拿掉 506、補 GloVe 和 Mikolov 的連結、補 taiwan/computer 的觀察。 7. **選做(N15、N16)** requirements 補 ipykernel/jupyter;資料載入格補回模板的說明註解。 不要動的: - 所有程式碼和輸出。 - 執行序號(**不要**為了任何理由手動改)。 - TODO1–7 的實作。 - 評分格 T[14]。 上面第 3–6 項都只改 N[29] 的 markdown(N9、N16 是加註解),**不用重跑**。 --- 本報告的每一項判斷都來自實際查證:用 pymupdf 讀 PDF 全文;用 nbformat 逐格比對模板、繳交版和執行當下的備份;逐一對過報告數字和 notebook 輸出;解出 3 張圖來看;用 grep 查兩份上課逐字稿、助教逐字稿和 2026 投影片;用 pip freeze 和 Win32_Processor 查環境。 以下是推測,不是查證: - 各項「可能扣幾分」是估計。 - 「中文報告不影響」沒辦法確定。