結論:報告每一題都照「數字 → 觀察 → 原因」三步寫。第 1 題要交代三件事:用了哪本字典、做了哪些前處理(和刻意沒做的)、參數怎麼設。
為什麼要照這三步:助教說明報告時,要求先「展示結果」,再「解釋、分析為什麼會有效能上的差別」(助教影片 00:18:56–00:19:16,以第 3 題為例)。
| 步驟 | 寫什麼 | 例子 |
|---|---|---|
| 1. 數字 | 貼表格或寫出成績 | 「論壇的語意類 12.84%,維基對照組 45.77%」 |
| 2. 觀察 | 用一句話說你看到什麼 | 「論壇在語意類大輸,但比較級反而贏」 |
| 3. 原因 | 解釋為什麼,最好有證據 | 「better 在論壇出現的次數是維基的 8.5 倍」 |
只有數字沒有解釋,就沒有回答「為什麼」;只有解釋沒有數字,就沒辦法證明你的說法(推論)。
| 要交代的 | 我的示範 |
|---|---|
| Part II 用的模型(=本文的 GloVe 字典) | glove-wiki-gigaword-100:史丹佛 GloVe,用維基百科+Gigaword 新聞約 60 億字訓練,40 萬字、每字 100 維、全部小寫(外部知識:GloVe 官方說明)。 |
| Part III 用的模型(=本文的 Wiki 20% 字典) | Gensim Word2Vec,Skip-gram。 |
| 做了的前處理 | 只留 a~z 組成的字(教材已經是小寫、去標點);字典只留最常見的 30 萬字。 |
| 刻意沒做的前處理(加分重點) | 沒移除停用詞:考卷有 he/she/his/her、won(韓圜)等答案;沒做詞形還原:語法類就是考字形變化。第 12 節有實驗數據證明。 |
| 超參數 | vector_size=100(跟 GloVe 一樣,公平比較)、window=5、sg=1、negative=5、sample=1e-3、min_count=5(gensim 因 max_final_vocab 自動調成 30)、max_final_vocab=300,000、epochs=5、seed=42。每一個都寫一句「為什麼」(見第 6 節的表)。 |
| 抽樣方式 | 以文章為單位、random.seed(42)、5%⊂10%⊂20%(同一個亂數)。 |
| 答題方式 | 3CosAdd(b − a + c,Gensim most_similar),題目先轉小寫,查不到的字算答錯。 |
結論:老師說考試「可能會有很大部分是從作業你做的過程跟你的 insight」,「不太會去考叫你算 BM25」(W3 02:48:36–02:49:09)。下面是從這份作業整理出來的題目,每一題都附「答案要點」。先自己想答案,再打開看。
這些是我根據老師上課說的方向和作業內容推測的,不是考古題。
「a 之於 b,等於 c 之於 d」的題目。用 b − a + c 算出一個點,在字典裡找相似度最高的字(排除 a、b、c)當答案。例:queen − king + man ≈ woman。
訓練目標是「用一個字預測它的前後文」。king 和 queen 前後文的差別(例如 he/his 換成 she/her,推論),跟 man 和 woman 前後文的差別很像,所以兩組「差向量」的方向接近。這只是近似:老師說「不是這麼 exactly 一樣,但趨勢很接近」,所以答題要排除 a、b、c,正確答案也常排第 2~3 名。
Skip-gram:用中心字猜前後文;CBOW:用前後文猜中心字(像克漏字)。老師上課說 CBOW 訓練比較不直覺,「我們會做 Skip-gram」(W3 01:12:12)。我的實驗(5% 維基、單次):⟦R:exam_cbow⟧ 這是「本設定」的結果,換資料或題型可能不同。
①一個字只有一個詞向量,bank(銀行/河岸)分不開;作業裡 apple 的鄰居全是公司或科技產品、bank 前 5 名全是金融義 → 這是上下文詞向量(BERT、GPT)要解決的。②學的是「前後文相似」不是「意思」:反義詞(good/bad)會很近;論壇的錯字(slary)會變成 salary 最像的字。③沒看過的字(OOV)、字首字尾、錯字 → FastText 用字元片段拼出詞向量(老師說「這也會在 Assignment 1 討論」)。
Word2Vec 一次看一小段文字(視窗)來學;GloVe 先統計整份教材「哪兩個字一起出現幾次」,再用這張統計表來學。名稱裡的 Global 就是對比 word2vec 的 Local(W3 01:28:57);老師說「一般來講我們會覺得 GloVe 比 word2vec 好」(W3 01:32:25),細節請看論文(W3 01:29:33)。
(the, cat)、(cat, the)、(cat, licked)、(licked, cat)、(licked, its)、(its, licked)、(its, fur)、(fur, its)。每個字當中心字,跟前後 1 個字配對。這樣不用人工標註就能做出「給輸入、猜輸出」的訓練資料(W1 p82、W3 01:13:00)。
第一層的權重矩陣 V(輸入 one-hot 乘上 V 就是查表取出一列)。網路只有一層隱藏層,大小就是詞向量的數字個數(W1 p83–90)。課堂補充第 4 點有手算。
原本每次要對整本字典(例如 30 萬字)算 softmax 機率。改成:真的(中心字, 前後文的字)當正例,照字頻隨機抽幾個字當負例,訓練「是不是真的前後文」的二元分類(logistic regression),每次只更新少數幾個字(W2 p33、p38)。
GloVe 字典和助教清好的維基教材都是小寫。考卷有大寫字(Athens),不轉會查不到(OOV),整題算答錯。
一行一行讀(串流),每讀一篇就擲亂數決定留不留,留的直接寫到檔案。不要整份讀進來再挑。
沒有。①考卷有 ⟦R:n_stop_q⟧ 題含停用詞(he、she、his、her、won…),移除後這些題目必錯;②老師上課說停用詞「以前很重要,但是現在一點都不重要也不會去做」(老師是在講搜尋引擎建索引時說的;本作業的停用詞實驗也支持同樣的結論),以前是為了省索引空間,而且可能刪掉重要的東西(W2 01:39:50);③投影片 W1 p47:「Avoid to broke the semantics」。我實際試過:⟦R:exam_stop⟧
⟦R:exam_q2⟧
一樣大小下,論壇語意類大輸(capital 只有維基的 0.27 倍、illinois 0.01 倍);國名→國籍也大輸(但 brazilian 有 0.79 倍,不只是頻率問題);語法類加總略低 1.34,只比雜訊大一點,其中比較級、最高級、-ing 還贏(網友常說 better、cheapest、looking)。教材的主題和文體決定字典學到什麼。
為了控制變因:讓兩份教材只差在種類、不差在字數,才能說差異主要是「種類」造成的(兩本字典收的字數不同,這點沒有完全排除)。
①字很少見(kwanza、dram),詞向量學不準;②有些字平常有別的意思(won、real);③(只在小教材時)字根本不在字典裡,例如論壇的貨幣覆蓋率只有 39%。GloVe 和 Wiki 20% 的貨幣覆蓋率都是 100%,所以它們錯在 ① ②。
很嚴格。我算過:⟦R:exam_topk⟧。正確答案排第二、第三的題目不少:Wiki 20% 字典的前 3 名正確率比第 1 名多 13.14 個百分點。
看「誰跟誰是一群」:男女配對黏在一起、按角色分群。注意:群與群之間的距離沒有意義,每次跑圖形可能不同;PCA 是線性投影,保留整體方向(原本平行的差向量,例如 man→woman、king→queen,投影後仍然平行),但比較擠;t-SNE 是非線性的,保留局部鄰居。
window:看前後幾個字當前後文;vector_size:每個字用幾個數字表示。我的實驗:⟦R:exam_hparams⟧