# 05a 規則合規審查:NLP HW1(Word Analogy) - 審查日期:2026-10-04 - 審查對象:`HW1\示範實作\NLP_HW1_DEMO_示範.ipynb`(53 格)、`HW1\示範實作\requirements.txt` - 依據(只用這四份): - 作業 PDF `原始檔_2026\NLP_HW1_word_emb.pdf`(37 頁,下稱 P.x) - 官方模板 `原始檔_2026\main.ipynb`(32 格,下稱 T[x]) - 助教影片逐字稿(下稱 TA [mm:ss]) - 第三週上課逐字稿(下稱 Lec [hh:mm:ss]) - 筆記本的格子編號下稱 N[x](從 0 起算)。N[0]–N[31] 對應 T[0]–T[31],N[32]–N[52] 是加在後面的。 ## 一句話結論 > 程式與輸出本身大致合規:七個 TODO 都有輸出,用的是 20% 維基,第 3 題程式也放在報告下面。 > 真正會扣分的是**繳交前的收尾**: > 1. AI 使用聲明還是「示範版」的寫法,而且有 6 格 AI 寫的程式沒有標註。 > 2. 報告裡有 5 處數字或說法,在筆記本輸出裡找不到出處。 > 3. 檔名要改。 > 4. 模板裡的 Hints 註解被刪掉了,要放回去。 --- ## 審查總表 | 編號 | 規定(出處) | 現況(證據) | 判定 | 要怎麼改 | |---|---|---|---|---| | 1 | 程式檔命名 `NLP_HW1_school_student_ID.ipynb`,只收 .ipynb,錯了扣 5(P.33、P.36;TA [21:43]) | 目前叫 `NLP_HW1_DEMO_示範.ipynb` | ❌(目前是暫用檔名) | 改成 `NLP_HW1_<學校縮寫>_<學號>.ipynb`,照範例 `NLP_HW1_NTHU_12345678.ipynb` 的格式:學校縮寫用大寫英文,不要有中文、空格或「DEMO」 | | 2 | 壓縮檔命名 `NLP_HW1_school_student_ID.zip`,錯了扣 5(P.33、P.36) | 還沒有壓縮檔 | ❌(還沒做) | 壓成 `NLP_HW1_<學校縮寫>_<學號>.zip`,和 .ipynb 用同一組學校縮寫與學號 | | 3 | 壓縮檔裡只能有 .ipynb 和 requirements.txt,「No other formats are allowed」(P.32) | 資料夾裡還有 .png、.model、.npy、.txt 語料、.py、`_接手卡.md` 等檔案 | ⚠️(還沒打包) | 壓縮檔裡**只放兩個檔**:改好名的 .ipynb,以及 `requirements.txt`。不要放子資料夾 | | 4 | 要附 requirements.txt,沒附扣 5(P.32、P.36)。助教說在本機跑就必須附(TA [20:51]–[21:14]) | 檔案存在,共 10 個套件,版本和 .venv 的 `pip freeze` 逐一相符:gdown 6.4.1、gensim 4.4.0、matplotlib 3.11.2、nltk 3.10.3、numpy 2.5.3、pandas 3.0.6、scikit-learn 1.9.1、scipy 1.18.1、smart_open 8.0.2、tqdm 4.70.1 | ✅ | 檔名保持 `requirements.txt`。想更完整可以補 `ipykernel`/`jupyter`(打開 .ipynb 要用到),但這不是規定 | | 5 | .ipynb 要同時有程式碼和執行輸出,而且是 20% 維基的結果;沒有輸出的話,跟結果或圖有關的部分一律 0 分(P.31;TA [16:15]–[16:36] 講了三次) | 41 格程式全都有執行紀錄,沒有任何 error。N[24] 的輸出是 `sampled 1,124,733 (20.00%)`。N[25] 用 `wiki_sampled_20_clean.txt` 訓練。N[27](TODO6)印出完整的類別與子類別正確率。N[28](TODO7)有 t-SNE 圖 | ✅ | 繳交前**不要清除輸出**。不要用只抽 5% 的版本覆蓋掉這份 | | 6 | TODO3、TODO7 的 t-SNE 圖要顯示在輸出裡(TA [10:06]–[10:12]) | N[15]、N[28] 都有圖(已解出確認:49 個 family 字都有標籤,標題也在) | ✅ | 小建議:兩張圖的標題一樣(標題是模板寫死的,不能改)。可以在 TODO 區塊裡加一行 `print("TODO7: Word2Vec trained on 20% Wiki")` 方便助教分辨。這是 TODO 區,改它不算違規 | | 7 | 不能改模板,只有資料載入的部分可以改,違反扣 5(P.36;TA [09:15]–[09:29]、[23:27]) | 和模板逐格比對:T[0,1,3,4,6–12,14,16,17,23,26,30] **完全相同**,評分格 T[14]「You do not need to modify this block!!」也沒動。有差異的格子見下方「模板逐格判定」 | ⚠️ | 把 N[13]、N[27] 被刪掉的 `""" Hints ... """` 原樣放回去(細節見 7c) | | 8 | 報告寫在 .ipynb 裡、模板最後面那個文字格(P.31;TA [16:45]–[16:57]) | 報告在 N[29],就是模板 T[29] 的位置 | ✅ | — | | 9 | 報告**開頭**要寫 Running environment 和 Python version,沒寫 Python 版本扣 5(P.34、P.36;TA [22:02]–[22:15]、[23:17]–[23:23]) | N[29] 第 3 行寫「Local — Windows 11 (10.0.26200), CPU: Intel Core i7-11800H…」,第 5 行寫「Python version: 3.12.3」。N[52] 的輸出 `Python 3.12.3 … Windows-11-10.0.26200` 可以佐證。**但是**最上面第 1 行是「示範版報告…不是要繳交的版本」的提示框 | ⚠️ | 刪掉第 1 行的提示框,讓 Running environment 成為報告第一行 | | 10 | Q1:用哪個模型、前處理步驟、超參數(5%)(P.31) | N[29] Q1 三項都有寫:GloVe-100+Word2Vec Skip-gram;只留 `[a-z]+`、max_final_vocab,並說明為什麼不去停用詞、不做詞形還原;完整超參數 | ⚠️ | 「非英文字只占約 0.4%」這句在筆記本任何輸出裡都找不到出處(只出現在 N[29] 原始碼)。補一格算出這個數字的程式,不然就刪掉這句 | | 11 | Q2:抽 5%、10%、20% 的表現(10%,每個 3%)(P.31)。助教說這題不用附程式,只要列分數加討論(TA [17:41]–[17:51]) | 表格三欄都有,數字和 N[38] 的輸出一致(45.22/46.87/48.29) | ⚠️ | 第 4 點寫「同設定重跑 20% 兩次,整體 48.21 vs 48.29,comparative 45.95 vs 54.88」,但 **48.21 和 45.95 在整份筆記本的輸出裡都沒有**(只出現在 N[29] 原始碼)。要嘛補一格重訓的程式和輸出,要嘛刪掉這句 | | 12 | Q3:用維基以外的語料訓練,各類別/子類別的表現(15% = 結果 5%+語料介紹與差異 5%+原因 5%)(P.31) | 用 SemEval 2016/2017 Task 3 的 Qatar Living 論壇(不是維基)。另外切了一份同樣字數的維基當對照組。3.1、3.2、3.3 都有回答,數字和 N[34]、N[36] 的輸出一致 | ✅ | 小地方:模板標題少了 PDF 有的「(except wiki)」。報告保留模板原本的標題是對的,不要動 | | 13 | Q3 的程式要放在筆記本裡、報告下面,否則這題 0 分(P.31;TA [18:13]–[18:49]) | 程式在 N[31](模板指定的「Write your code here」格)到 N[36],都在報告 N[29] 下面 | ✅ | 不要把這些格子搬到報告上面 | | 14 | Q4:**至少五個字**,每個字找出最像的五個字,並說明觀察(10%)(P.31 原文是 at least five)。模板的標題寫「Select a few words」,助教也說「至少選擇五個單字」(TA [19:28]) | 選了 7 個字(king、cat、apple、bank、good、taiwan、computer),GloVe 和 Wiki 20% 各列前 5 名。N[40] 的輸出和報告表格一致 | ⚠️ | 字數符合要求。「cat 的鄰居 sourpuss,回查語料發現是卡通貓角色(『sourpuss cranky cat who hates mondays』)」這段回查,在筆記本裡**沒有程式也沒有輸出**。補一格 grep 語料的程式,不然就刪掉 | | 15 | Q5:任何能強化報告的內容(5%)(P.31) | (a)–(f) 都有對應的程式輸出(N[42]–N[47]) | ⚠️ | (1) (g)「同設定兩次訓練,整體差 0.08,comparative 差 8.9」和 (b)「隨機波動(整體約 0.1 點)」在輸出裡都找不到(N[48] 標的 (g) 其實是答案覆蓋率)。補程式或刪掉。(2) 程式註解的編號和報告對不起來:程式 (a)=top-k、(b)=錯題、(c)=停用詞、(d)=超參數;報告 (a)=停用詞、(b)=超參數、(c)=top-k、(d)=錯題。把程式註解改成和報告一致 | | 16 | Generative AI Usage:報告最後一節要寫,而且「不管有沒有用都要寫」,沒寫扣 10(P.31、P.35、P.36;TA [20:03]–[20:24]、[22:42]–[22:52]、[23:13]) | N[29] 第 6 節有寫,但內容是:「本**示範**筆記本的程式(標有 `# [Generative AI]` 的每一格)與本報告,皆由 Claude(Anthropic)產生…這份是學習用示範,實際繳交時應由學生自行重做並如實說明 AI 的使用範圍。」 | ❌ | 照實際情況整段重寫(範本見下方「AI 聲明要怎麼寫」)。重點有三個:(1) 拿掉「示範」「應由學生自行重做」;(2) 範圍要寫成**全部程式+全部報告文字**,不能只說「標記的格子」;(3) 寫清楚你自己做了什麼(例如:在自己電腦上執行) | | 17 | AI 產生的程式,旁邊的註解要寫明是 AI 生成(P.35;TA [22:32]–[22:41])。「用了生成式 AI 卻沒有註明」會扣分(P.35 (1)) | N[5,13,15,24,25,27,28,31–36,38,40,42–48,50,52] 第一行都是 `# [Generative AI] 本格程式由 Claude(Anthropic)產生,作為示範;不是要繳交的版本。`(共 25 處「示範」)。**N[2]、N[18]–N[22] 只有 `# [Data loading changed]`,沒有 AI 標註**,可是這 6 格也是 Claude 寫的 | ❌ | (1) 所有標註改成例如 `# [Generative AI] The code in this cell was generated by Claude (Anthropic).`,拿掉「作為示範;不是要繳交的版本」。(2) N[2]、N[18]–N[22] 也加上同一行(保留原本的 Data loading changed 說明)。(3) N[38] 的「這裡附上是為了示範」改成「附上供參考」 | | 18 | 參考網路上的程式要附連結;網路來源沒註明會扣分(P.35 (2)) | 模板原有的連結都還在。論壇語料只寫了 gensim-data 的資料集名稱 `semeval-2016-2017-task3-subtaskA-unannotated`,沒有附網址。NLTK 停用詞清單、Levy & Goldberg 2014(3CosMul)也沒有連結 | ⚠️ | 在 N[32] 的註解和報告 3.2 補上 gensim-data 的網址(`https://github.com/RaRe-Technologies/gensim-data`)和 SemEval-2016 Task 3 的出處。3CosMul 補上論文出處。程式本身不是從網路抄的,所以不用再加其他連結 | | 19 | 程式或報告不能和其他同學高度相似,否則兩人都 -100(P.36)。助教說兩人都 0 分(TA [23:33]–[23:42])。老師也強調「被抄一樣 0 分」(Lec [02:01:06]–[02:01:21]) | 程式和報告全都是 AI 產生的「示範版」 | ⚠️(風險不在檔案本身,在於有沒有流出去) | 這份檔案和報告文字**絕對不要給別人**。如果這份示範曾經給過其他人,就要大幅改寫報告文字。這一項是全份作業風險最大的一項 | | 20 | 執行輸出要像是真的一路跑下來的。老師說過去有人只放 AI 的分析、沒做實驗(Lec [01:57:41]–[01:58:15]) | 執行順序 1→40 是連續的,**只有 N[36] 是 `execution_count=1`**,註解寫「這一格是事後補跑的」 | ⚠️ | 最穩的做法是整份 Restart & Run All,但重跑要好幾個小時。退一步的做法是保留現狀,因為註解已經老實說明了。**不要手動改 execution_count**,那等於造假 | | 21 | 用 Colab 時要「Download .py」(P.36 底部那行字),但同一頁又說「only .ipynb is acceptable」 | 交 .ipynb | ✅ | 照「只交 .ipynb」,不要交 .py | | 22 | 預訓練模型用模板給的 `glove-wiki-gigaword-100`(TA [08:02]–[08:10];P.16 說也可以試其他模型) | T[12]/N[12] 沒有改 | ✅ | — | | 23 | 輸出不要長到看不完(不是明文規定) | N[13] 有 1,526 筆、N[27] 有 1,031 筆 tqdm 進度條碎片,所以檔案有 910 KB。Jupyter 和 Colab 顯示時會合併成一條進度條 | ⚠️(低風險) | 可以不處理。不要為了這個去清輸出 | | 24 | 報告語言(沒有規定) | 報告用中文寫,題目維持英文 | ✅(不確定助教偏好) | PDF、模板、影片都沒有規定語言。老師說會用 AI 輔助檢查格式(Lec [02:00:08]–[02:00:17]),中文應該不影響 | --- ## 模板逐格判定(第 7 項的細節) 模板 32 格裡,有 15 格和原本不一樣。逐格判定如下。 ### 7a. TODO 格(允許修改):7 格 | 格 | 改了什麼 | 判定 | |---|---|---| | N[5] TODO1 | 在 TODO 註解下面寫程式,前面加了 AI 標註行 | ✅ | | N[15] TODO3 | 在 TODO 和模板原有的 `plt.title/show/savefig` 之間寫程式;那三行原樣保留 | ✅ | | N[24] TODO4 | 在 TODO 下面寫抽樣程式;另外補上模板缺的 `output_path`(模板引用了它卻沒定義) | ✅ | | N[25] TODO5 | 在 TODO 和 Hint 下面寫程式 | ✅ | | N[28] TODO7 | 同 N[15] | ✅ | | N[31] 第 3 題自由區 | 模板只有 `# Write your code here` 一行,被整段換掉 | ✅(PDF 和助教都說這裡可以自由寫,TA [18:43]–[18:49])。保險起見,可以把 `# Write your code here` 放回第一行 | | N[29] 報告格 | 填寫答案 | ✅(見第 9–16 項) | ### 7b. 資料載入格(允許修改):6 格,但要補 AI 標註 | 格 | 改了什麼 | 判定 | |---|---|---| | N[2] | `!wget` 改成 `urllib.request.urlretrieve`,網址相同 | ✅ | | N[18] | 5 行 `!gdown` 改成 Python 迴圈,一次下載全部 11 個檔,檔案 ID 和模板相同 | ✅ | | N[19] | 原本 6 行 `!gdown` 改成只 `print("all parts downloaded")`(已經併到 N[18]) | ✅(屬於資料載入) | | N[20] | `!gunzip -k` 改成列出 .gz 清單,不解壓縮 | ✅(屬於資料載入) | | N[21] | `!cat … > combined` 改成印出總大小,不合併 | ✅(屬於資料載入) | | N[22] | `!head -n 10` 改成用 gzip 讀前 10 行,每行只印前 200 字 | ✅(屬於資料載入,輸出內容也等同原本) | 這 6 格本身都合規,但**都沒有 AI 標註**(見第 17 項)。 ### 7c. 灰色地帶:要修 | 格 | 改了什麼 | 判定 | 怎麼修 | |---|---|---|---| | N[13] TODO2 | 模板 for 迴圈裡的 `""" Hints … """` 整段(6 行,含 gensim 原始碼連結和 Mikolov 2013 的例子)**被刪掉**,換成實作 | ⚠️ | 刪的雖然在 TODO 格裡,但刪掉的是模板文字。嚴格的助教可能認定為改模板(-5)。把這段 docstring 原樣放回迴圈第一個敘述,實作接在下面。執行結果不會變,放回去也不用重跑 | | N[27] TODO6 | 同 N[13]:Hints 被刪。另外在 TODO 格尾巴加了印正確率的程式(模板在 TODO6 後面沒有評分格) | ⚠️ | 把 Hints 放回去。印正確率的部分寫在 TODO 格內,可以保留 | | N[24] TODO4 | 模板的 `with open(wiki_txt_path, "r") as f:` 外層被刪掉,改成依序讀 11 個 .gz;`wiki_txt_path` 變數還在但沒用到 | ⚠️(偏合規) | 屬於資料載入,規定允許。註解 `[Data loading changed]` 已經說明了,維持現狀即可 | ### 7d. 加在後面的格子(不屬於模板) N[32]–N[52](含標題格 N[37,39,41,49,51])都在報告下面,屬於「additional code below the report block」。✅ --- ## PDF、助教、老師三方說法互相衝突的地方 | 衝突點 | 說法 A | 說法 B | 筆記本照哪一邊 | |---|---|---|---| | 額外實驗的程式要不要附 | P.33:「You do not need to upload the code for your additional experiments」 | P.31:第 3 題的程式要放在報告下面,否則 0 分;TA [18:15] 和 Lec [01:57:41] 也這樣說 | 照比較嚴的 B:全部附上 ✅ | | 繳交格式 | P.36 表格:「only .ipynb is acceptable」 | P.36 底部那行字:Colab 使用者要「Download .py」 | 交 .ipynb ✅ | | requirements.txt | P.36:一律要附,沒附 -5 | TA [21:14]:用 Colab 就不需要 | 在本機跑,兩種說法都要求附 ✅ | | 抄襲罰則 | P.36:兩人都 -100 | TA [23:39]、Lec [02:01:19]:兩人都 0 分 | 不影響。結論都是不能相似 | | 能不能改模板 | P.36:只能改資料載入,否則 -5 | Lec [01:50:19]:「你要自己重寫也可以」 | 照比較嚴的 P.36(見 7c) | | Q4 字數 | P.31:at least five words,每個字找 5 個 | 模板 T[29]:「Select a few words」 | 選了 7 個,兩邊都滿足 ✅ | | Q3 標題 | P.31:「(except wiki)」 | 模板 T[29] 沒有這幾個字 | 保留模板標題,語料用非維基 ✅ | | Running environment 的位置 | P.34:寫在報告裡 | TA [22:02]:寫在報告**開頭** | 目前排第二,前面還有示範提示框 ⚠️(見第 9 項) | --- ## AI 聲明要怎麼寫(第 16、17 項的範本) 下面是依照你給的事實寫的:全部程式與報告文字由 Claude 產生,在學生電腦上執行。 「我自己做了什麼」那一段,**只能寫你真的做過的事**。 > **6. Generative AI Usage** > > I used Claude (Anthropic) for this assignment. > - **Code**: All code in this notebook was generated by Claude. This includes TODO1–TODO7, the data-loading changes (cells marked `[Data loading changed]`), the code for Question 3, and all extra experiments below the report. Every AI-generated cell starts with a `# [Generative AI]` comment. > - **Report**: The report text, including the analysis and the tables, was written by Claude based on the outputs of this notebook. > - **What I did**: I ran the whole notebook on my own computer (environment above). All numbers and figures come from the outputs in this notebook. (如果你還有讀過、檢查過或改寫過哪些部分,照實補在這裡。) 如果知道當時用的是 Claude 的哪個介面或型號,也一併寫上。不知道就不要猜。 --- ## 繳交前一定要改的(依可能扣分高低排序) 1. **相似度(兩人都 -100/0 分)**:不要把這份筆記本或報告文字給任何人。如果示範版曾經流出去,報告文字要改寫成你自己的版本。(第 19 項) 2. **AI 使用聲明(沒寫扣 10,加上「有用 AI 沒註明」另外扣分)**: - 第 6 節照上面範本重寫。 - 25 處「作為示範;不是要繳交的版本」全部改掉。 - N[2]、N[18]–N[22] 補上 AI 標註。 - 刪掉 N[29] 第 1 行的示範提示框。(第 16、17、9 項) 3. **找不到出處的結果(有扣掉 Q2 的 10% 與 Q5 的 5% 一部分的風險)**:下面 5 處要嘛補程式和輸出,要嘛刪掉。(第 10、11、14、15 項) - Q2 的 48.21/45.95(重跑比較) - Q5(g) 的 0.08/8.9 - Q5(b) 的「隨機波動約 0.1 點」 - Q1 的「非英文字約 0.4%」 - Q4 的 sourpuss 語料回查 4. **檔名(.ipynb 和 .zip 各扣 5)**:改成 `NLP_HW1_<學校縮寫>_<學號>.ipynb`/`.zip`。壓縮檔裡只放 .ipynb 和 `requirements.txt`。(第 1–3 項) 5. **改模板(扣 5)**:把 N[13]、N[27] 的 `""" Hints … """` 原樣放回去。N[31] 可以補回 `# Write your code here`。(第 7 項) 6. **附上來源連結(扣分多少未定)**:補上 gensim-data 和 SemEval 論壇語料、NLTK 停用詞、3CosMul 論文的出處。(第 18 項) 7. **對齊編號(不影響規則,影響閱讀)**:Q5 程式註解的 (a)–(g) 改成和報告一致。(第 15 項) 不用動的: - 七個 TODO 的實作與輸出 - 評分格 T[14] - 20% 抽樣的結果 - requirements.txt 的版本 - 報告第 1–4 題的主要結構 改註解和 markdown 都**不需要重跑**,請直接編輯 cell 的 source,保留輸出。 --- 本報告的每一項判斷都來自實際查證(逐頁讀 PDF、逐格比對模板和筆記本、讀輸出、讀兩份逐字稿),不是推測。 例外:第 24 項「中文報告應該不影響」,以及第 19 項的風險高低,是推測。