結論:作業只用到 Word2Vec 的「結果」,但老師上課講了它「怎麼來的」。閉書考試會考你能不能把作業跟上課內容串起來。下面每一點都附投影片頁碼或上課時間,可以回去對照。
one-hot 是每個字一個格子,cat=[1,0,0…]、dog=[0,1,0…]。任兩個不同的字,相似度都是 0:cat 跟 dog 和 cat 跟 truck 一樣不像。
詞向量(dense vector)的數字是學出來的,不是數出來的,所以相近的字可以有相近的數字。個別的維度(第 37 個數字代表什麼)不需要、也很難解釋。
依據:W1 p57–58、p64;W2 02:38:30–02:43:47(數字是學出來的、個別維度不需要解釋);W3 00:03:20。
「A word is characterized by the company it keeps」(Firth 1957)。注意定義是出現在相似的前後文,不是「兩個字常一起出現」:
依據:W1 p70、W2 p24。
拿一句話,每個字輪流當中心字,跟它前後 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。
| 步驟 | 在做什麼 |
|---|---|
| 輸入 | 中心字的 one-hot(30 萬格裡只有一格是 1) |
| 第一層(矩陣 V) | 乘上 one-hot 其實就是「查表」,取出這個字那一列(例如 100 個數字) |
| 隱藏層 | 只有一層,大小就是向量長度 |
| 第二層(矩陣 U) | 跟每個字的「輸出向量」做內積,再用 softmax 變成機率:每個字當鄰居的機率 |
| 學習 | 用 cross-entropy 跟正確鄰居比,調整 V 和 U |
訓練完拿來用的詞向量,就是 V(第一層權重)的每一列。
依據:W1 p83–90、W2 p37;W3 01:17:01–01:27:48。
第 4 點最後一步要對整本字典(30 萬字)算機率,非常慢。negative sampling 改成:每一組真的(中心字, 鄰居)當正例,再照字頻隨機抽 5 個字當負例,訓練一個「是不是真鄰居」的二元分類器(logistic regression)。每次只更新這幾個字,所以快很多。
依據:W2 p33、p38。作業設定 negative=5 就是這個。
老師原話:「我們看的並不是字的向量的絕對的向量的東西,而是一種對比的關係」。man→woman 和 king→queen 那條線「方向斜率」很一致,但不是完全一樣。
所以會同時出現兩件事:類比題答得不錯(相對關係很好),但某個字附近的鄰居常常怪怪的(絕對位置不可靠,例如 cat 的鄰居是卡通角色名)。這正是老師說「做完作業你會發現有點問題」的意思。
依據:W3 00:27:56–00:29:34、00:04:34–00:05:43、00:25:54。
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。
bank(銀行/河岸)是老師投影片的例子。Word2Vec、GloVe 一個字只有一個向量,叫靜態詞向量;BERT、GPT 會看整句話給不同的向量,叫上下文詞向量。
依據:W1 p60、W2 p39–40。
老師原話:以前移除停用詞「很重要,但是現在一點都不重要也不會去做」(老師是在講搜尋引擎建索引時說的;本作業的停用詞實驗也支持同樣的結論)。以前是為了省 20~30% 的索引空間,而且「搞不好有一些很重要的東西被拿掉」。投影片也寫:「When to remove stop words? Avoid to broke the semantics.」
這是報告第 1 題「為什麼不刪停用詞」最好的課程依據。
依據:W2 01:39:50–01:40:54;W1 p47。
投影片 W1 p94 列了兩句很適合拿來解釋作業的話:
依據:W1 p94。
投影片 W2 p31 用 broadcast、network 舉例:同一個字在不同年代的鄰居不一樣(network 從電報、電線,變成網路、社群媒體)。所以用很久以前的資料訓練的詞向量(GloVe 是 2014 年的資料),不一定符合現在的用法。(推論)我們自己訓練的 Wiki 20% 裡,apple 的鄰居有 iphone、tvos,反映這份維基資料的年代。
依據:W2 p31。