課堂補充:老師上課強調、考試可能考的 12 個觀念

結論:作業只用到 Word2Vec 的「結果」(訓練好的字典),但老師上課講了它「怎麼來的」。閉書考試會考你能不能把作業跟上課內容串起來。

怎麼讀:12 點分成四組——A 怎麼學出來、B 怎麼用和評估、C 有什麼限制、D 前處理。每一點都附投影片頁碼或上課時間,可以回去對照。

A 組:詞向量怎麼學出來(5 點)

1. 為什麼不用 one-hot:因為所有字都一樣「不像」

one-hot 是每個字一個格子,cat=[1,0,0…]、dog=[0,1,0…]。任兩個不同的字,相似度都是 0:cat 跟 dog 和 cat 跟 truck 一樣不像。

詞向量(英文 dense vector,跟 one-hot 那種大多是 0 的向量相對)的數字是學出來的,不是數出來的,所以相近的字可以有相近的數字。個別的數字(例如第 37 個數字代表什麼)不需要、也很難解釋。

依據:W1 p57–58、p64;W2 02:38:30–02:43:47(數字是學出來的、個別維度不需要解釋);W3 00:03:20。

2. 分布假說:前後文相似 → 意思相似

「A word is characterized by the company it keeps」(Firth 1957)。注意定義是出現在相似的前後文,不是「兩個字常一起出現」:

依據:W1 p70、W2 p24。

3. Skip-gram 的訓練資料是「自己做出來的」

拿一句話,每個字輪流當中心字,跟它前後 window 範圍內的字配成一對:

句子:the cat licked its fur  window = 1
(the, cat)  (cat, the)  (cat, licked)  (licked, cat)  (licked, its)  (its, licked)  (its, fur)  (fur, its)

這樣沒有人標註的文章,也能變成「給輸入、猜輸出」的訓練資料。老師說這是「訓練上的一種巧思」,後來 BERT 的克漏字也是同一個想法。window 越大,配對越多。

依據:W1 p82;W3 01:13:00–01:16:05。

4. Word2Vec 的網路長什麼樣:詞向量就是第一層的權重

結論:網路的第一層是一張表(矩陣 V),每個字一列。訓練完,這張表的每一列就是那個字的詞向量。

手算一次「查表」(前提:字典只收 4 個字 the、cat、licked、fur;每個詞向量只有 2 個數字;V 的數字是我編的):

V 的第幾列字這一列的 2 個數字
1the(0.1, 0.3)
2cat(0.8, 0.5)
3licked(0.2, 0.9)
4fur(0.7, 0.4)

第 1 小步:中心字 cat 寫成 one-hot:[0, 1, 0, 0](第 2 格是 1,其他是 0)。

⟦IMG:toy_w2v⟧

第 2 小步:one-hot 乘 V,就是「每一列乘上對應的那一格,再加起來」:

0×(0.1, 0.3) + 1×(0.8, 0.5) + 0×(0.2, 0.9) + 0×(0.7, 0.4) = (0.8, 0.5)

乘 0 的列全部消失,只剩第 2 列。所以「one-hot 乘 V」其實就是把 V 的第 2 列拿出來——查表。

第 3 小步:網路拿 (0.8, 0.5) 去猜「cat 的前後文會出現哪些字」,猜錯就微調 V 的這一列。訓練完,V 的第 2 列就是 cat 的詞向量。

進階:第二層和怎麼學(softmax、cross-entropy)
步驟在做什麼
第二層(矩陣 U)拿查到的那一列,跟每個字的「輸出向量」做內積,得到每個字一個分數
softmax把分數變成機率(全部加起來是 1):每個字出現在中心字前後文的機率
cross-entropy看「真正出現的前後文字」被分到多少機率;機率越低,懲罰越大,就調整 V 和 U

依據:W1 p83–90、W2 p37;W3 01:17:01–01:27:48。

5. Negative sampling(負取樣):把「猜 30 萬選 1」改成「是不是真的前後文」

為什麼要它:第 4 點的 softmax 要對整本字典(30 萬字)每個字都算機率,非常慢。

手算例子(句子「the cat licked its fur」,中心字 cat):

  1. 正例:(cat, licked) 是真的出現在前後文 → 標「是」。
  2. 負例:照字頻隨機抽幾個字(作業設 5 個,這裡用 2 個好算),例如 (cat, piano)、(cat, river) → 標「不是」。
  3. 練習:電腦只練習判斷「這一對是不是真的前後文」(二元分類,叫 logistic regression)。每次只調 cat、licked、piano、river 這 4 個字的數字,不用碰其他 30 萬字,所以快很多。

依據:W2 p33、p38。作業設定 negative=5 就是這個。piano、river 是我舉的例子。

A 組考試可能問
「Word2Vec 訓練完,詞向量在網路的哪裡?」→ 第一層權重 V 的每一列(第 4 點的查表;第 14 節 Q7)。
「negative sampling 在解決什麼問題?」→ softmax 要算 30 萬個字太慢;改成每次只判斷 1 個正例+幾個負例(第 14 節 Q8)。

B 組:怎麼用、怎麼評估(3 點)

6. 類比看的是「相對關係」,不是「絕對位置」

老師原話:「我們看的並不是字的向量的絕對的向量的東西,而是一種對比的關係」。man→woman 和 king→queen 那條線「方向斜率」很一致,但不是完全一樣。

所以可能同時出現兩件事:類比題答得不錯(相對關係很好),但某個字的鄰居不是你想的(絕對位置不可靠)。老師說做完作業會發現「你所熟知的字」附近的向量不是你想的(W3 00:04:34–00:05:43)。

這次的結果:Wiki 20% 字典的 cat 前 5 名有 4 個是動物(rabbit、dog、mouse、pet),只有 sourpuss 一個怪字(推論:它是冷門字,見第 11 節觀察 ①、④)。所以這個現象在 cat 身上不明顯,在 king、bank 身上比較明顯(第 11 節)。

依據:W3 00:27:56–00:29:34、00:04:34–00:05:43、00:25:54;In [32]。

7. 維度、模型怎麼選:It depends

8. 相似不等於相關;領域外不等於字典外

投影片 W1 p94 列了兩句很適合拿來解釋作業的話:

依據:W1 p94。

B 組考試可能問
「類比題答得好,為什麼某些字的鄰居還是怪怪的?」→ 類比看相對關係(兩個詞向量的差),鄰居看絕對位置;前者可以好、後者不一定好。

C 組:限制與後來的解法(3 點)

9. 字典裡沒有的字(OOV)、字首字尾、錯字 → FastText

Word2Vec、GloVe 每個字一個詞向量,沒看過的字就沒有。FastText 把字拆成字元片段(例如 un-、-ly、-ness),沒看過的字也能用片段拼出詞向量。老師說「這也會在 Assignment 1 討論」。

剛好對上作業:表現最差的小類裡(最差的是貨幣),有兩個就是反義字首(un-)和形容詞→副詞(-ly),論壇字典的鄰居也常常是錯字(slary)——這些都是看拼法可能幫得上忙的情況(推論:本作業沒有實際跑 FastText)。

依據:W1 p92、p94(Vector search is not robust to typos);W3 01:29:49–01:32:55。

10. 一字多義 → 上下文詞向量(BERT、GPT)

bank(銀行/河岸)是老師投影片的例子。Word2Vec、GloVe 一個字只有一個詞向量,叫靜態詞向量;BERT、GPT 會看整句話給不同的詞向量,叫上下文詞向量。

依據:W1 p60、W2 p39–40。

11. 字的意思會隨時間改變

投影片 W2 p31 用 broadcast、network 舉例:同一個字在不同年代的鄰居不一樣(network 從電報、電線,變成網路、社群媒體)。所以用很久以前的教材訓練的字典(GloVe 是 2014 年的資料,外部知識),不一定符合現在的用法。我們自己訓練的 Wiki 20% 字典裡,apple 的鄰居有 iphone、tvos,反映這份維基教材的年代(推論)。

依據:W2 p31。

C 組考試可能問
「靜態詞向量有哪些限制?後來怎麼解決?」→ 沒看過的字沒有詞向量(FastText 用字元片段);一字多義只有一個詞向量(BERT 看整句);意思會隨時間變。

D 組:前處理(1 點)

12. 停用詞:老師說「現在一點都不重要,也不會去做」

老師原話:以前移除停用詞「很重要,但是現在一點都不重要也不會去做」(老師是在講搜尋引擎建索引時說的;本作業的停用詞實驗也支持同樣的結論)。以前是為了省 20~30% 的索引空間,而且「搞不好有一些很重要的東西被拿掉」。投影片也寫:「When to remove stop words? Avoid to broke the semantics.」

這是報告第 1 題「為什麼不刪停用詞」最好的課程依據。

依據:W2 01:39:50–01:40:54;W1 p47。

所以對你的影響是:作業只用到訓練好的字典,但考試會問它「怎麼來的」——A 組 5 點(尤其第 4、5 點的手算例子)一定要能自己講出來。B、C 組是寫報告第 4、5 題時解釋原因用的。