[自然語言處理](https://app.notion.com/p/3e6fc631b03081b4a9e8f91f3411f61f) › [W4(10/1)](https://app.notion.com/p/3ecfc631b03081b8aa2cf4a97467ed41) › 03|影片 [0:30:19–0:49:29](https://www.youtube.com/watch?v=7kgOuhuIjvY&t=1819s)|投影片 W2_Word p.29–38|上一章 [02 稀疏向量與 PPMI(0:14–0:30)](https://app.notion.com/p/3ecfc631b03081daa362fba68ecb5a0c)|下一章 [04 上下文相關的詞向量(0:49–1:03)](https://app.notion.com/p/3ecfc631b030814cb876f1cf87428b37) ## 重點 - 稀疏向量(大部分是 0 的超長向量)又大又難算,也抓不太到語意,所以改用稠密向量(dense vector,每一格都有數字的短向量),也就是 embedding。300 或 768 個數字就夠表示一個字。 - Embedding 有兩個好玩的性質:可以做類比(Washington − U.S. + U.K. = London),也可以看出字義隨年代漂移;但「靠共現學意思」也能被人操弄,例如 Google Bomb。 - Word2vec 是兩層的小神經網路:用 sliding window 切出正樣本,再抽負樣本,訓練完拿第一層權重當 embedding。負樣本怎麼選非常重要,老師講了兩次。 ## Exam-ready - **Dense vectors**: "Dense vector embeddings represent words in a continuous vector space"(W2_Word p.29) - 中文:稠密向量 embedding 把每個字放進一個連續的向量空間裡。白話:每個字變成一串「每格都有數字」的座標,意思相近的字會靠得比較近。難字:dense(稠密)、continuous(連續的)、vector space(向量空間)。 - **Embeddings**: "Vectors for representing words are called embeddings"(W2_Word p.30) - 中文:用來表示字的向量就叫做 embedding。白話:embedding 就是「字的數字身分證」。難字:represent(表示)。 - **Analogy / Relational Similarity**: "Washinton - U.S. + U.K. = London"(W2_Word p.30) - 中文:華盛頓減掉美國、加上英國,會得到倫敦(投影片把 Washington 拼成 Washinton)。白話:「首都」這層關係變成向量裡一個固定方向,可以拿來加減。難字:analogy(類比)、relational similarity(關係上的相似)。 - **Historical Semantics**: "Embeddings can also be a useful tool for studying how meaning changes over time"(W2_Word p.31) - 中文:embedding 也可以拿來研究字的意思怎麼隨時間改變。白話:把不同年代的文章分開訓練,比較同一個字的位置有沒有移動。難字:historical semantics(歷史語意)、meaning(意思)。 - **Skip-gram**: "Use words to predict their contexts."(W2_Word p.32) - 中文:用一個字去預測它周圍的字。白話:給你中間的字,猜旁邊會出現誰。難字:predict(預測)、context(上下文)。 - **CBOW**: "Use the context to predict the target word."(W2_Word p.32) - 中文:用周圍的字去預測中間那個目標字。白話:像克漏字,看前後文填中間的空格。難字:target word(目標字)。 - **Negative samples**: "Randomly sample other words in the lexicon to get negative samples."(W2_Word p.33)【老師強調】(0:42:00) - 中文:從字典裡隨機抽其他字,當作負樣本。白話:除了「真的一起出現」的字對,還要準備「沒有一起出現」的字對,模型才學得會分辨。難字:sample(抽樣)、lexicon(詞彙表、字典)、negative samples(負樣本)。 - **Learned weights**: "Use the learned weights as the embeddings."(W2_Word p.33) - 中文:把學到的權重拿來當 embedding。白話:模型本身不是重點,訓練過程中學到的那張權重表才是我們要的東西。難字:weights(權重)。 - **Skip-gram probability P(c|w) = exp(u_c · v_w) / Σ_t exp(u_t · v_w)**: "Assume c is the word id in the context, w is the center word, u and v are vectors of c and w."(W2_Word p.35) - 中文:c 是上下文中的字,w 是中間的字,u 和 v 分別是 c 和 w 的向量。白話:兩個向量內積越大,c 出現在 w 旁邊的機率越高;分母把所有字加總,讓機率總和變成 1。難字:center word(中心字)、word id(字的編號)。 - **Target word embeddings**: "Input to hidden layer matrix has our target word embeddings"(W2_Word p.37) - 中文:輸入層到隱藏層的那個矩陣,裡面裝的就是目標字的 embedding。白話:第一層權重的每一列,就是一個字的向量。難字:hidden layer(隱藏層)、matrix(矩陣)。 ## [0:30:19](https://www.youtube.com/watch?v=7kgOuhuIjvY&t=1819s) 從稀疏到稠密向量 上一章的 PPMI 向量很長(字典有多大就有多長),又大多是 0,計算量高,而且抓不太到真正的語意相似度。所以改用稠密向量:把稀疏性打破,讓每個字落在一個連續的空間裡。老師問大家:一個字只用 768 個數字,夠描述人類所有的語言嗎?以前做機器學習的人會覺得至少要一萬維,但後來發現,對 static embedding 來說 700 多維就蠻夠了。 要先懂的詞:向量(vector)就是一串排好順序的數字,可以想成一個點的座標;「維度」就是這串數字有幾格。PPMI 稀疏向量是上一章 [02 稀疏向量與 PPMI](https://app.notion.com/p/3ecfc631b03081daa362fba68ecb5a0c) 講的:有多少種鄰居字就開多少格,格子裡填「兩個字一起出現的次數比碰巧高多少」。用向量表示字、讓意思近的字靠得近,這個想法前兩週已經鋪過(第 2 週學過:每個字只占一格的詞袋向量看不出貓和狗很像,所以需要詞向量,[08 從詞袋到詞向量](https://app.notion.com/p/3e6fc631b03081b1aab8f5c4fc716850))。 生活比喻:稀疏向量像一張一萬題的是非題考卷,只勾了十題;稠密向量像一份 300 項的體檢報告,每一項都有數值。 考試可能怎麼問:Why do we prefer dense vectors over sparse vectors? | 比較 | 稀疏向量(PPMI) | 稠密向量(embedding) | |---|---|---| | 長度 | 等於字典大小(上萬) | 幾百(300、768) | | 內容 | 大部分是 0 | 每格都有數字 | | 每一維的意思 | 一維對應一個上下文字 | 沒有人指定,是學出來的壓縮概念 | | 語意相似度 | 抓得比較差 | 意思相近的字靠得近 |
為什麼 768 個數字就夠? 因為每一維不是「一個字」,而是一種被壓縮過的概念,而且多個維度可以組合。這就像只用紅、綠、藍三個數字就能調出幾百萬種顏色。老師也提醒:稀疏向量不是做不到,只是沒那麼好(0:32:22)。
## [0:31:43](https://www.youtube.com/watch?v=7kgOuhuIjvY&t=1903s) Static 與 Contextual、embedding 這個詞 稠密向量分兩種。第一種是 word2vec 這類 static embedding(靜態詞向量:一個字永遠只有一個向量)。第二種是 BERT、大型語言模型用的 contextual embedding(上下文詞向量:同一個字在不同句子裡向量不同),下一章會講。老師說 2000 年代做搜尋引擎時,embedding 這個詞還很少人用,word2vec 出來之後才流行,意思是「用一個壓縮後的小空間,去描述很大的語意空間」。 BERT 和大型語言模型(LLM,像 ChatGPT 這類模型)是之後幾週才教的;現在只要知道:它們會先讀整個句子,再決定每個字的向量,所以同一個字在不同句子裡會不一樣。 生活比喻:static embedding 像一個人的身分證,到哪裡都一樣;contextual embedding 像這個人在不同場合的角色,在家是爸爸、在公司是主管。 考試可能怎麼問:What is the difference between static and contextual embeddings?
static embedding 的缺點是什麼? 一字多義時會出問題。例如 bank 可以是「銀行」也可以是「河岸」,static embedding 只能給它一個向量,等於把兩個意思混在一起(我補充)。這就是後來要發展 contextual embedding 的原因。
## [0:33:08](https://www.youtube.com/watch?v=7kgOuhuIjvY&t=1988s) 類比與語意漂移 Embedding 可以做類比:Washington − U.S. + U.K. = London,這是作業一會做的部分。另一個有趣的性質是語意漂移(semantic drift,字的意思隨年代改變)。Broadcast 在 1850 年代旁邊是 sow、seed(撒種子),1900 年代變成 newspapers,1990 年代變成 television、radio。做法很簡單:把一百年的語料每 10 年切一組,把每個年代的 Broadcast 當成不同的字(Broadcast1、Broadcast2……)分別訓練,就能看出它們的向量不一樣。 為什麼字可以加減?因為每個字都是一串數字,兩個字相減,得到的是「從一個字走到另一個字的方向」。Washington − U.S. 留下的是「首都」這個方向,把它加到 U.K. 上,就走到倫敦附近(第 3 週學過:詞向量可以做類比,作業一 Word Analogy 就是在做這個,[01 詞向量的起源與類比](https://app.notion.com/p/3e6fc631b0308169a5ebc6aa047ff58d))。 [[IMG: C:\D槽\TAICA課程\_work\notes-v2\nlp-w4\img\w2_word_embeddings_and_language_modeling_rnn_p031.png | W2_Word p.31:Broadcast 與 Network 在不同年代的鄰居字,箭頭是向量隨時間移動的方向]] 圖上重點: - 標題 Properties of Embeddings(embedding 的性質)、Historical Semantics(歷史語意);上方那句是「embedding 也可以拿來研究字義怎麼隨時間改變」。 - 左半 Broadcast:從 1850s 到 1990s,旁邊的字從 sow、seed、scatter(撒種、播種),變成 newspapers、circulated(報紙、流通),再變成 television、radio、bbc(電視、廣播)。 - 右半 Network:1920s 旁邊是 Telegraph、Wires、Electricity(電報、電線、電力),1960s 是 Computer、Data(電腦、資料),1990s 是 Internet、Website、Email(網際網路、網站、電子郵件),2020s 是 Social Media、AI、Cloud Computing、IoT(社群媒體、人工智慧、雲端運算、物聯網)。 - 箭頭:同一個字的向量從一個年代移到下一個年代。 - 右上橘框:Google Bomb、Data Poisoning(資料下毒),是下一段要講的「被人操弄」的反例。 這張圖在講:字沒變,但它的鄰居字一直換,所以向量的位置跟著移動。 這張圖左邊看 Broadcast,右邊看 Network:每個粗體字旁邊的灰字,就是那個年代最常跟它一起出現的字。Network 這種越廣泛的詞,本來涵蓋的概念就多,每個年代的重點不同,所以特別容易漂移。 考試可能怎麼問:How can word embeddings be used to study semantic change over time?
用生活例子講,語意漂移是什麼? 「網路」這個詞,爺爺那一代想到的是電線和電報,你想到的是 IG 和 AI。字沒變,但常跟它一起出現的字變了,所以它的向量位置也變了。
## [0:35:14](https://www.youtube.com/watch?v=7kgOuhuIjvY&t=2114s) Google Bomb:用共現來操弄 老師提醒,「靠共現學意思」看起來很正面,其實有很大的問題:只要能大量製造共現,就能改變一個字或網頁被貼上的意思。2000 年代 Google 很看重 anchor text(超連結上的文字)。原本這是好事:你在個人網頁放一個連到 Stanford 的連結,寫「我心目中最好的大學」,Google 就知道 Stanford 跟「好大學」有關。後來有人反過來利用,做大量假網頁,用負面字眼連到某個網頁,Google 爬回去一算,那個網頁就帶上負面標籤,這就叫 Google Bomb。投影片上把這件事和 Data Poisoning(資料下毒)放在一起。 要先懂的詞:共現(co-occurrence)就是兩個字常在同一小段文字裡一起出現。「靠共現學意思」的根據是分布假說(第 3 週學過:一個字的意思,由它常跟哪些字一起出現來決定,[02 分布假說與 LSA/LSI](https://app.notion.com/p/3e6fc631b030815a90adc80645bf2668))。反過來說,誰能控制「哪些字一起出現」,誰就能左右電腦學到的意思。 ```mermaid flowchart LR A["做一大堆假網頁"] --> B["連結文字寫負面字眼"] B --> C["連到目標網頁"] C --> D["搜尋引擎爬回來計算共現"] D --> E["目標被貼上負面標籤"] ``` 這張圖是 Google Bomb 的流程:因為網頁、連結、連結文字全都是自己做的,自動化工具一出來就能大量造假。同樣的手法還在用:政治人物不斷用負面形容詞稱呼對手(例如川普叫拜登 sleepy Joe),搜尋時對手就容易跟負面概念綁在一起;SEO 公司做內容農場把流量導到客戶網站,也是同一招。 考試可能怎麼問:Explain why co-occurrence-based methods are vulnerable to manipulation, using Google Bomb as an example.
這跟 word2vec 有什麼關係? Word2vec 也是靠「誰跟誰一起出現」學字義。如果有人在訓練語料裡大量塞「某人+負面字」的句子,學出來的 embedding 就會把這個人放到負面字附近。這就是 data poisoning:改的不是模型,而是餵給模型的資料(我補充)。老師形容這是「道高一尺,魔高一丈」。
## [0:40:08](https://www.youtube.com/watch?v=7kgOuhuIjvY&t=2408s) CBOW 與 Skip-gram Word2vec 有兩種訓練方向。CBOW 用上下文去猜中間的字,像克漏字,也很像之後會講的 masked language model。Skip-gram 反過來,用中間的字去猜周圍的字。老師覺得 skip-gram 在準備訓練資料時比較直覺:抓一個中間字,再列出它旁邊的字就好;但兩者差別其實不大。 masked language model(遮字語言模型:把句子裡的字遮住讓模型猜,BERT 就是這樣練的)之後才會教。CBOW 和 skip-gram 第 3 週已經介紹過(第 3 週學過:word2vec 不是直接教電腦字義,而是出「猜鄰居字」的練習題,練完順便得到詞向量,[03 word2vec 的訓練方式](https://app.notion.com/p/3e6fc631b03081f1b4bfe71efbd2cd7a))。 ```mermaid flowchart LR subgraph CBOW A1["前後文:I、to、eat"] --> B1["猜中間:like"] end subgraph SkipGram["Skip-gram"] A2["中間:like"] --> B2["猜旁邊:I、to、eat"] end ``` 這張圖用同一句話「I like to eat」對照兩種方向:箭頭左邊是輸入,右邊是要猜的答案。 生活比喻:CBOW 像看到「我今天__便當」猜中間是「吃」;skip-gram 像看到「吃」,猜旁邊可能出現「便當、午餐、飯」。 考試可能怎麼問:Compare CBOW and skip-gram. ## [0:41:04](https://www.youtube.com/watch?v=7kgOuhuIjvY&t=2464s) 正負樣本與 negative sampling Word2vec 是一個兩層的神經網路,訓練要有標準答案。正樣本用 sliding window(滑動視窗)在語料上切出「真的一起出現」的字對;但機器學習還需要負樣本,模型才知道什麼是 yes、什麼是 no。老師強調負樣本的選法很重要:要數量平衡,而且要跟正樣本夠接近,模型才會去學細節;但太難也可能過擬合(overfitting,只背熟訓練資料)。老師說之後講 Transformer 預訓練的 NSP(next sentence prediction)時,也會遇到負樣本選不好的問題。假設字典有一萬個字,每個字頂多跟十個字一起出現,不可能把其他九千九百多個字都當負樣本:第一太不平衡,第二全部算一遍成本太高。所以照訓練資料的比例抽一部分來算 loss。 要先懂的詞:神經網路(neural network,NN)是一層一層「把輸入乘上一組數字再加總」的計算,那組數字叫權重(weight),訓練就是不斷調整權重。正樣本和負樣本,就是答案為「是」和「不是」的練習題。loss(損失)是模型答錯程度的分數,訓練的目標就是把它壓低。老師說這門課不教神經網路基礎,要自己補(第 3 週提過:NN、反向傳播要自己補,W1_NLP_brief p.83 有 McCormick 的 word2vec 教學連結)。 注意:投影片 p.33 寫的是「隨機抽」負樣本;「負樣本要接近正樣本」是老師講的一般機器學習原則。另外投影片 p.34 先用視窗大小 2 從語料算出共現矩陣(每格是兩個字在視窗內一起出現幾次),老師這次沒有特別講。 用文字說出 word2vec 的步驟(投影片 p.33): ```mermaid flowchart TD A["1. 中心字與鄰近字 → 正樣本"] --> B["2. 從字典隨機抽其他字 → 負樣本"] B --> C["3. 用 logistic regression 訓練分類器分辨兩者"] C --> D["4. 把學到的權重當 embedding"] ``` 這張圖就是 word2vec 的四個步驟:先有正樣本,再補負樣本,訓練一個「是不是真的鄰居」的分類器,最後拿權重。 第 3 步的 logistic regression(邏輯迴歸)是一種很簡單的分類方法:看一組數字,輸出「是」的機率(0 到 1 之間)。這裡它要回答的問題是「這兩個字是不是真的鄰居」。 生活比喻:負樣本像考卷上的錯誤選項。選項太明顯(問「蘋果是什麼」,選項有「一台卡車」),學生不用懂也能答對;選項太刁鑽,學生可能只會背題目。 考試可能怎麼問:Why is negative sampling needed in word2vec, and what makes a good negative sample? 下面的進階摺疊用一句短句實際切出正樣本和負樣本,想解決的問題是「負樣本要抽多少才對」;看完會懂:負樣本太多時,模型一直回答「不是」也能拿高分,所以要平衡。
它到底怎麼運作?(進階,可跳過) 句子「I like to eat apple」,視窗大小 1,中心字 like: - 正樣本:(like, I)、(like, to) - 負樣本:從字典抽,例如 (like, Tuesday)、(like, carbon) 如果正負比例差太多(例如 1 個正、999 個負),模型全部回答「不是鄰居」就能拿 99.9% 正確率,什麼都沒學到。這就是老師說的「要 balance」。 老師也提到另一種省計算的做法:用 Huffman 編碼把字典排成一棵樹(我補充:這叫 hierarchical softmax),每次只算樹上一條路徑。
老師原話是什麼? - 「而且 negative sample 選擇相當重要」(0:42:00) - 「如果隨便選模型很聰明,他知道說原來這次考試這麼簡單」(0:42:06) - 「你也希望能夠讓這個 negative 越接近 positive 越好」(0:43:10) - 「不過在做 word2vec 的時候 negative 選擇非常重要」(0:43:54)
## [0:45:12](https://www.youtube.com/watch?v=7kgOuhuIjvY&t=2712s) 第一層權重就是 embedding 訓練好的模型本身只會做一件事:給一個字,預測其他字出現在它旁邊的機率。但這個輸出不是我們要的,我們要的是第一層的權重:它把一個字從 one-hot(只有一格是 1 的超長向量)轉成 300 個數字,這就是那個字的 embedding。第二層權重負責把 embedding 組合起來,預測每個字跟它共同出現的機率。老師也說,用 logistic regression 的角度看(投影片 p.33 第 3 步),跟前面講的簡單 NN 做的是同一件事。 要先懂的詞:矩陣(matrix)就是一張數字表格。第一層權重是一張「一萬列 × 300 欄」的表格,每一列對應字典裡的一個字。隱藏層(hidden layer)是夾在輸入和輸出中間的那一層,這裡就是那 300 個數字。所以「拿第一層權重當 embedding」,意思就是把表格裡每個字的那一列抄出來用(第 3 週學過:word2vec 是一個只有一層隱藏層的小神經網路,[03 word2vec 的訓練方式](https://app.notion.com/p/3e6fc631b03081f1b4bfe71efbd2cd7a))。 注意:老師口頭說的是 perplexity,這裡指的是機率(probability),不是困惑度。老師說「兩層的 NN」,投影片 p.37 寫的是 "word2vec uses a single hidden layer feedforward neural network",兩者一致:一層隱藏層,前後共兩個權重矩陣。 [[IMG: C:\D槽\TAICA課程\_work\notes-v2\nlp-w4\img\w2_word_embeddings_and_language_modeling_rnn_p037.png | W2_Word p.37:word2vec 的兩層網路,第一層矩陣是 target embeddings v,第二層是 output embeddings u]] 圖上重點: - 標題 Model Parameters(模型參數);上方那句:word2vec 用的是「只有一層隱藏層的前饋神經網路」(feedforward:資料只從左往右傳,不繞回來)。 - 左邊 Input Vector(輸入向量):10,000 positions(一萬格),旁邊小字說「ants 這個字的位置是 1」。 - 中間 Hidden Layer, Linear Neurons(隱藏層、線性神經元):300 neurons(300 個);Σ 是「加總」的符號。 - 右邊 Output Layer, Softmax Classifier(輸出層、softmax 分類器):10,000 neurons,每個輸出是「在 ants 附近隨機挑一個位置,那個字剛好是 abandon、ability、able……zone 的機率」。 - 最右兩段:輸入到隱藏層的矩陣裝著目標字的 embedding v;隱藏到輸出層的矩陣是另一組 embedding,叫 output embeddings u。 這張圖在講:word2vec 整個網路長什麼樣,以及 embedding 藏在哪一個矩陣裡。 這張圖從左到右看:左邊是一萬格的 one-hot 輸入(只有 ants 那格是 1),中間是 300 個神經元的隱藏層,右邊是一萬個輸出,每個代表「某個字出現在旁邊的機率」。因為輸入只有一格是 1,乘上第一層矩陣等於直接取出那一列,所以那一列就是這個字的向量。 生活比喻:就像為了學會做菜去上烹飪課,期末那道菜(預測機率)不重要,真正帶走的是你學到的刀工(第一層權重)。 考試可能怎麼問:In word2vec, where do the word embeddings come from after training? ## [0:47:21](https://www.youtube.com/watch?v=7kgOuhuIjvY&t=2841s) softmax 計算小例子 老師用一個中心字 w 和 A、B、C 三個候選字示範:把 w 的 embedding 跟第二層權重相乘(內積),再做 softmax(把一組分數轉成加總為 1 的機率)。內積越大的字,機率越高,但因為有指數和正規化,不是線性的比例。如果字典只有三個字,這樣算很快;但真實字典有一萬個字,每次都要把一萬個都算一遍,代價太高,這就是要用 negative sampling 的原因。投影片 p.38 補充另一個省力的地方(老師這次沒展開):用隨機梯度下降(SGD)時 "only update word vectors in context window",視窗大小 m 時一次只動到 2m+1 個字,所以每次更新是稀疏的。 要先懂的詞:內積(dot product)是把兩串數字對應的格子相乘再全部加起來;兩個向量方向越像,內積越大,所以內積可以當「有多相關」的分數(第 2 週學過:cosine 相似度就是把長度扣掉之後的內積,[06 向量空間模型與 TF-IDF](https://app.notion.com/p/3e6fc631b0308121891cc1705fe5be4a))。「取指數」是把分數都變成正數,而且讓大的分數變得更突出。隨機梯度下降(SGD)是訓練時調權重的方法:每次只看一小批資料,把權重往「讓錯誤變小」的方向挪一點。 生活比喻:softmax 像算各候選人的得票率,要先知道所有人的票數才能算百分比;字典一大,開票就很慢。 考試可能怎麼問:Why is computing the full softmax expensive in word2vec, and how does negative sampling help? 下面的進階摺疊用三個字實際算一次 softmax,想解決的問題是「分數怎麼變成機率」;算出來的百分比,就代表每個字出現在中心字旁邊的可能性。看完也會懂:字典只有三個字時算三次就好,一萬個字就要算一萬次,所以才需要 negative sampling。
它到底怎麼運作?(進階,可跳過) 投影片 p.36 的數字:中心字 w 跟三個字的內積是 A = 2、B = 0、C = −1。 | 字 | 內積 | 取指數 | 除以總和 8.757 | |---|---|---|---| | A | 2 | 7.389 | 約 84.4% | | B | 0 | 1 | 約 11.4% | | C | −1 | 0.368 | 約 4.2% | 內積 2 和 0 只差 2,機率卻差了 7 倍多,這就是「不是線性」的意思。注意 u 不是 A、B、C 的 embedding,而是第二層學到的 output 權重。 接上一段的例子:如果 A 是真的鄰居(正樣本),negative sampling 只會抽幾個字(例如 C)來對照,不必算完一萬個字的分母。
## Self-check
Q1. Why is the choice of negative samples important when training word2vec?(中文:訓練 word2vec 時,為什麼負樣本怎麼選很重要?) **Answer**: Negative samples teach the model what is not a real context word. If they are too easy or far outnumber the positives, the model can score well by always answering "no" without learning anything. In general, good negatives should be balanced in number and reasonably close to the positives so the model learns fine-grained differences, though making them too hard can cause overfitting. In word2vec, a word co-occurs with only a tiny fraction of the vocabulary, so treating all other words as negatives would be extremely unbalanced and too costly; instead it randomly samples a few negatives per positive pair. 中文:負樣本告訴模型「什麼不是真的鄰居」。如果負樣本太簡單、或數量遠多於正樣本,模型只要一律回答「不是」就能拿高分,卻什麼都沒學到。一般原則是負樣本數量要平衡、也要跟正樣本夠接近,模型才會去學細微差別;但太難也可能過擬合。在 word2vec 裡,一個字只跟字典裡極少數的字一起出現,把其他字全部當負樣本會極度不平衡、計算也太貴,所以每個正樣本只隨機抽幾個負樣本。
Q2. Compare skip-gram and CBOW.(中文:比較 skip-gram 和 CBOW。) **Answer**: Both are word2vec training methods. Skip-gram uses the center word to predict its surrounding context words, while CBOW uses the context words to predict the center (target) word, similar to a fill-in-the-blank or masked language model task. 中文:兩者都是 word2vec 的訓練方式。Skip-gram 用中間的字去預測周圍的字;CBOW 反過來,用周圍的字去預測中間的目標字,像克漏字,也像 masked language model。
Q3. After training word2vec, which part of the model is used as the word embeddings, and why?(中文:word2vec 訓練完後,模型的哪個部分被拿來當詞向量?為什麼?) **Answer**: The input-to-hidden weight matrix. The trained model can only predict context-word probabilities, which is not what we want. Since the input is a one-hot vector, multiplying it by the first-layer matrix simply selects one row, so each row is a learned dense vector for one word. 中文:用輸入層到隱藏層的權重矩陣。訓練好的模型只會預測上下文字的機率,那不是我們要的。因為輸入是 one-hot 向量,乘上第一層矩陣等於取出其中一列,所以每一列就是一個字學到的稠密向量。
Q4. Explain how embeddings can reveal semantic drift, and give one risk of learning meaning from co-occurrence.(中文:說明 embedding 怎麼看出語意漂移,並舉出「靠共現學字義」的一個風險。) **Answer**: Split a long-period corpus into decades, treat the word in each decade as a different token, and train embeddings; comparing the vectors shows how the meaning shifts (e.g., broadcast moves from "sow, seed" to "television, radio"). A risk is manipulation: because meaning comes from co-occurrence, people can fake co-occurrences, as in Google Bomb, where many fake pages linked negative anchor text to a target page. 中文:把很長年代的語料按每 10 年切開,把每個年代的同一個字當成不同的字分別訓練,比較向量就能看到意思怎麼移動(例如 broadcast 從「撒種子」變成「電視、廣播」)。風險是可以被操弄:因為字義來自共現,有人就能偽造共現,例如 Google Bomb 用大量假網頁把負面連結文字指向目標網頁。
讀完了嗎?下一章:[04 上下文相關的詞向量(0:49–1:03)](https://app.notion.com/p/3ecfc631b030814cb876f1cf87428b37)|回到週頁:[W4(10/1)](https://app.notion.com/p/3ecfc631b03081b8aa2cf4a97467ed41)