# 章節包:自然語言處理(NLP)W4(10/1)第 03 章「稠密向量與 Word2Vec」
影片 0:30:19–0:49:29,YouTube ID 7kgOuhuIjvY,逐字稿 C:\D槽\TAICA課程\自然語言處理\第四周1151001\W4_自然語言處理_高宏宇.逐字稿.txt。Notion 章節頁 https://app.notion.com/p/3ecfc631b030819f9a0df026aac33ae7(頁 ID 3ecfc631b030819f9a0df026aac33ae7),頁面標題「03 稠密向量與 Word2Vec(0:30–0:49)」。
## 1. 第一行(直接照抄,不要改)
[自然語言處理](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)
## 1b. 最後一行(直接照抄,放在 Self-check 後面,當全頁最後一行)
讀完了嗎?下一章:[04 上下文相關的詞向量(0:49–1:03)](https://app.notion.com/p/3ecfc631b030814cb876f1cf87428b37)|回到週頁:[W4(10/1)](https://app.notion.com/p/3ecfc631b03081b8aa2cf4a97467ed41)
## 2. 各段標題(照順序;每段一個 ## 標題,直接照抄連結)
- `## [0:30:19](https://www.youtube.com/watch?v=7kgOuhuIjvY&t=1819s) 從稀疏到稠密向量` 老師講什麼:稀疏向量太大、計算量高,也抓不到語意相似度,所以改用連續的稠密向量(dense vector)。老師要大家想想:一個字只用 768 個數字表示夠不夠?後來發現對 static embedding 來說是夠的。
- `## [0:31:43](https://www.youtube.com/watch?v=7kgOuhuIjvY&t=1903s) Static 與 Contextual、embedding 這個詞` 老師講什麼:稠密向量分兩種:word2vec 這類 static embedding,和 BERT 這類 contextual embedding。2000 年代做搜尋時還很少用 embedding 這個詞,word2vec 出來才流行,意思是用壓縮過的空間描述語意。
- `## [0:33:08](https://www.youtube.com/watch?v=7kgOuhuIjvY&t=1988s) 類比與語意漂移` 老師講什麼:類比(Washington − U.S. + U.K. = London)是作業一會做的部分。語意漂移(semantic drift):Broadcast、Network 的意思會隨年代改變,把語料按每 10 年切開分別訓練,就看得出向量在變。
- `## [0:35:14](https://www.youtube.com/watch?v=7kgOuhuIjvY&t=2114s) Google Bomb:用共現來操弄` 老師講什麼:早期 Google 很看重 anchor text,有人做大量假網頁,用負面字眼連到某個網頁,讓它被貼上負面標籤,這就叫 Google Bomb。政治人物不斷用負面形容詞稱呼對手(如 sleepy Joe)、SEO 內容農場,也是同一種手法。
- `## [0:40:08](https://www.youtube.com/watch?v=7kgOuhuIjvY&t=2408s) CBOW 與 Skip-gram` 老師講什麼:CBOW 用上下文猜中間的字,有點像克漏字,也像之後的 masked language model;skip-gram 用中間的字猜周圍的字,老師覺得在準備訓練資料時比較直覺。
- `## [0:41:04](https://www.youtube.com/watch?v=7kgOuhuIjvY&t=2464s) 正負樣本與 negative sampling` 老師講什麼:word2vec 是兩層的 NN:用 sliding window 切出正樣本,還需要負樣本。負樣本要平衡數量、難度要接近正樣本,模型才學得到細節,但也要小心過擬合。字典有一萬個字,不可能把其他九千多個全當負樣本,所以照比例抽樣。
- `## [0:45:12](https://www.youtube.com/watch?v=7kgOuhuIjvY&t=2712s) 第一層權重就是 embedding` 老師講什麼:訓練好的模型本身只會預測上下文出現的機率,但我們真正要的是第一層的權重,它就是每個字的 embedding;第二層權重負責把 embedding 組合起來預測共現。
- `## [0:47:21](https://www.youtube.com/watch?v=7kgOuhuIjvY&t=2841s) softmax 計算小例子` 老師講什麼:用目標字和 A、B、C 三個字示範:乘上第二層權重,再做 softmax 得到共現機率。字典很大時全部算一遍太貴,這就是要用 negative sampling 的原因。
## 3. 老師強調/會考/不考的地方(原句已驗證;寫進筆記時 ASR 錯字要改正)
- (0:42:00) [強調] 「而且negative sample選擇相當重要」 → 機器學習中負樣本的選法很重要:要平衡、要接近正樣本
- (0:43:54) [強調] 「不過在做Wall-to-Vector的時候negative選擇非常重要」 → word2vec 的 negative sampling(同一件事第二次強調)
## 3b. 數學段候選(程式抓的,只是提示;寫「跳過提示」行用)
0 段候選(門檻 3.0 字/30 秒)
## 4. 這章摘要與重要度
從稀疏向量走向稠密向量,介紹 embedding 的類比與語意漂移性質、Google Bomb 的反例,再回顧 word2vec 的訓練方式與 negative sampling。(核心)
## 5. 整堂課的提醒(ASR 錯字、老師口誤、投影片缺公式等;只用跟這章有關的)
- 這支只有約 1 小時 20 分(老師 1:18:56 下課),下半場改看助教預錄的 PyTorch 教學影片(約一個半小時),筆記在第 06–09 章,章名前面有「PyTorch:」,影片時間是那支影片自己的時間。
- PyTorch 教學是 2024 年錄的舊影片,片中提到的作業說法(例如建議用 teacher forcing、之後要用 Hugging Face)不代表今年,今年作業以今年公告為準。
- 課表寫的是「Text Classification, NB, NN」,但實際上還在講 W2_Word 投影片(p.17–47)的語言模型和詞向量;Naive Bayes 只在 0:55:59 拿來對比「統計」和「模型學習」。
- 開頭 0:00:27–0:02:24 有網路和回音問題,0:03:55–0:04:32 在調整直播畫面,內容沒有缺。
- 逐字稿有語音辨識重複行(0:27:41–0:29:20 幾乎每句重複兩次、0:39:37 一句重複四次),不影響理解。
- 全片沒有下課休息,一路講完(0:00:01–1:26:08)。
- 逐字稿 0:01:32–0:01:53 有語音辨識重複句與亂碼(同一句重複五次、CUDA 版本被辨識成 ientes/analytical sci-fi/evangelical sci-fi),內容只是「別直接 pip install,到官網選版本」。
- 0:35:46 老師說「這是新的嗎」,接著改用口述講 Google Bomb。p.31 的文字檔裡已經有「Google Bomb/Data Poisoning」,可能是 10/1 更新版才加的,直播畫面也許還是舊版。不確定。
- p.33–38 的 word2vec 細節,老師是用回顧的方式講的,沒有逐頁翻:p.34 共現矩陣、p.38 SGD 那頁沒有明確講到;0:47:21 的 A、B、C softmax 計算例子,對應的是 p.35 還是 p.36(只有圖),不確定。
- 老師好幾次把模型輸出的「機率」說成 perplexity(例如 0:45:48、0:48:31),應該是口誤,寫筆記時要寫成 probability,不要寫成困惑度。
- 老師 1:08:44 已經宣布下課,接著又講了約 5 分鐘 activation function(p.46–47),1:13:47 才真正收尾,所以第 05 章沒有在 1:08:44 切開。1:13:27 說的「這一段的敘述」應該是指 p.47 的 softmax、sigmoid、tanh、ReLU 表格,只用一句帶過。p.48(In text viewpoint)沒講,下週應該從 p.48 開始。
- 第 04 章長約 13.5 分鐘,比建議的 15 分鐘短一點;它講 contextual embedding,跟第 05 章的 NN 基礎主題不同,所以沒有合併。
- [PyTorch 影片,第 06–09 章] 投影片 p.7 寫模型是 y = ax²+b,助教口頭說成「y等於ax加b」(0:04:08);投影片寫「four data points」但只列三個點 (-1,1)、(1,2)、(2,3),助教口頭念的點也對不上(0:04:36 說 -1 對 1、-1 對 2、-2 對 3)。寫筆記以投影片的 y = ax²+b 和三個點為準。
- [PyTorch 影片,第 06–09 章] 逐字稿有大量語音辨識錯字,寫手要自己還原:T度=梯度、correct function=collate function、translation=truncation、badge size=batch size、relude/Renew=ReLU、MN backward=MmBackward、nodegrade=no_grad、width.backward=with torch.no_grad()、nonpy=NumPy、viewed=view、birth=BERT、復迴圈=for 迴圈、增刮號=中括號、高雄宇=高宏宇;0:23:00 的「3e」應是 stride (3, 1)、0:22:02 的「13」是 (1, 3)。
- [PyTorch 影片,第 06–09 章] 助教把 BERT 稱為「auto encoder」(1:21:5x 起),對應投影片 p.60–61 的「Transformer Auto-encoder」,指的是編碼器式 Transformer,不是一般說的自編碼器;寫筆記時要說清楚,避免混淆。
- [PyTorch 影片,第 06–09 章] 第 2 章只有約 14 分鐘,略低於 15 分鐘下限;因為「模組」是獨立概念,而第 3 章(自動微分+訓練迴圈)已約 25 分鐘,沒有再合併。若主 session 想更細,第 3 章可在 0:51:20 切成「自動微分」與「損失函數、優化器與線性迴歸」兩章(各約 11、13.5 分鐘)。
- [PyTorch 影片,第 06–09 章] 投影片檔放在 2026 資料夾,影片是 2024 年錄的;對照下來頁序與講解內容一致(p.62 是結尾的笑話頁,沒有內容),但不確定 2026 版投影片是否和 2024 錄影時的版本完全相同。
- [PyTorch 影片,第 06–09 章] emphasis 只放了助教明講作業相關或重複強調的地方;另外兩處助教有說「注意」或「建議」但跟作業無關,沒列進去:0:53:00「不要用訓練的資料來測試」、0:24:47「儘量用矩陣運算的方式來運算」(兩句都已過 quote_check)。
- [寫手注意,第 06–09 章] 這四章是助教的程式教學,但主理人不看程式碼、考試不考寫程式:預設看得到的內容寫「這個元件在做什麼、為什麼需要它」+生活比喻(例:optimizer 像導航決定下一步往哪走);程式碼最多一小段,放進「(進階,可跳過)」摺疊。Exam-ready 只放投影片上的英文概念句(例如 tensor、autograd、loss、optimizer 的說明),不放程式碼行;投影片沒有完整英文句時用短的英文定義並標 (my wording)。Self-check 問「為什麼/比較」,不問語法。助教不是老師,不標【老師強調】,要標就寫【助教強調】+時間。
## 6. 投影片文字(這章範圍)
**這幾頁的公式或內容只在圖裡(文字檔抓不到),寫 Exam-ready 與公式前先用 Read 看這幾張圖:**
- W2_Word p.35 → C:\D槽\TAICA課程\_work\notes-v2\nlp-w4\img\brief_W2_Word_p035.png
- W2_Word p.36 → C:\D槽\TAICA課程\_work\notes-v2\nlp-w4\img\brief_W2_Word_p036.png
--- W2_Word p.29 ---
Dense Vectors
Dense vector embeddings represent words in a continuous vector space
Semantically similar words are closer together.
Word2Vec
Contextualized Embeddings
29
Word Embeddings and Language Modeling
--- W2_Word p.30 ---
Properties of Embeddings
30
Vectors for representing words are called embeddings
• Analogy/Relational Similarity
Washinton - U.S. = London - U.K.
Washinton - U.S. + U.K. = London
Word Embeddings and Language Modeling
--- W2_Word p.31 ---
Properties of Embeddings
31
• Historical Semantics
➢Embeddings can also be a useful tool for studying how meaning changes over time
spread
Broadcast (1850s)
Broadcast (1900s)
Broadcast (1990s)
sow
sows
seed
scatter
circulated
newspapers
television
radio
bbc
Network (1920s)
Network (1960s)
Network (1990s)
Network (2020s)
Telegraph
Electricity
Transport
Wires
Computer
Data
Information
Communication
Connection
Internet
Browser
Website
Email
TCP/IP
IoT
Social Media
Blockchain
AI
Cloud Computing
Word Embeddings and Language Modeling
Google Bomb
Data Poisoning
--- W2_Word p.32 ---
Word2Vec
32
➢Skip-gram
▪Use words to predict their contexts.
➢CBOW
▪Use the context to predict the target word.
Word Embeddings and Language Modeling
--- W2_Word p.33 ---
Word2Vec
33
1. Treat the target word and a neighboring context word as positive examples.
2. Randomly sample other words in the lexicon to get negative samples.
3. Use logistic regression to train a classifier to distinguish those two cases.
4. Use the learned weights as the embeddings.
Word Embeddings and Language Modeling
--- W2_Word p.34 ---
Word2Vec
34
Calculate the co-occurrence matrix from the corpus, where each element
represents how often a word appears in the context of another word within a
certain window size.
Assume window size = 2
Word Embeddings and Language Modeling
--- W2_Word p.35 ---
Word2Vec
35
Skip-gram:
Assume c is the word id in the context, w is the center word, u and v are vectors
of c and w.
Word Embeddings and Language Modeling
--- W2_Word p.36 ---
Word2Vec
36
[IMAGE-ONLY]
--- W2_Word p.37 ---
Model Parameters
word2vec uses a single hidden layer feedforward neural network
Input to hidden layer
matrix has our target
word embeddings
Hidden to output
layer matrix has
another set of word
embeddings called
output embeddings
http://mccormickml.com/2016/04/19/word2vec-tutorial-the-skip-gram-model/
37
--- W2_Word p.38 ---
Word2Vec
38
➢Large updates leads to inefficient
o Stochastic Gradient Descent
▪only update word vectors in context window
o Assume window size is m, In each window, there is only 2m+1 words.
Sparse
Word Embeddings and Language Modeling
## 7. 逐字稿(0:30:19 前後各多 1 分鐘,原始行)
[00:29:19] 或是300維的空間。
[00:29:20] 其實有點像。
[00:29:21] 其實有點像。
[00:29:22] 只是我們這邊是。
[00:29:23] Given的字。
[00:29:24] 就是我必須知道是哪一個字。
[00:29:25] 哪一個字我才能算
[00:29:26] 但是你在做Wall-to-Vector
[00:29:29] 或是一些Wall-Embedding的時候
[00:29:31] 那個維度空間
[00:29:32] 我們是不需要去給它說
[00:29:35] 第一維是什麼概念
[00:29:37] 第二維是什麼概念
[00:29:38] 它就直接用一個壓縮後的
[00:29:42] Concept的一個Dimension
[00:29:44] 去度量這些東西
[00:29:46] 那怎麼去算這些東西
[00:29:48] 就是有各式各樣的方法
[00:29:50] 只是說後來都用Trend的方式
[00:29:53] 讓它去逼近我想要的語料的特性
[00:29:57] 然後去學會這些Vector的表現
[00:30:00] 就像我們當初Wall-to-Vector講的部分
[00:30:02] 所以PPMI
[00:30:06] 其實你也可以把它想像是
[00:30:08] 某一種Sparse Vector
[00:30:10] 只是你的Context
[00:30:12] 通常我們會取比較多一點
[00:30:13] 那維度大一點
[00:30:15] 然後它就是字跟字之間
[00:30:17] 或字跟Context之間的Relation
[00:30:19] 那轉換過來之後
[00:30:21] 我們希望說
[00:30:22] 這個這麼大
[00:30:24] 但是又有稀疏
[00:30:25] 好像不太有意義
[00:30:26] 這計算量又很高
[00:30:28] 然後也沒有真正Capture出
[00:30:30] 重點的Semantic的相似度
[00:30:33] 所以當然後面就所謂的Dense Vector
[00:30:35] 那我們當然希望說
[00:30:39] 我們把這個稀疏性
[00:30:40] 把它破壞掉
[00:30:41] 希望這整個Dense Vector的Embedding
[00:30:43] 能夠是一個比較連續型的向量空間
[00:30:47] 我不要這麼的01
[00:30:49] 或者是非常的稀疏
[00:30:51] 我希望所有的語言
[00:30:52] 都有然後能夠去
[00:30:55] 完全表現我的字的語義
[00:30:58] 但這件事情
[00:30:59] 當你在做第一個作業的時候
[00:31:00] 你可以思考一下
[00:31:01] 就是說我如果用300維度
[00:31:03] 或是768維度
[00:31:04] 去做一個字的Embedding的時候
[00:31:08] 你可以想像說
[00:31:09] 那我有點像是把人類所有的Token的表示
[00:31:15] 就用這768個數字來描述
[00:31:18] 這個以前在做機器學習的時候
[00:31:20] 你會覺得好像
[00:31:22] 不太夠
[00:31:23] 就是一個所有的人類的語言的Token
[00:31:26] 怎麼可能只靠768個數字就可以足夠表示
[00:31:30] 你一定會覺得應該要到一萬維度這樣子
[00:31:33] 不過後來也發現說
[00:31:35] 其實以字的Static Wall Embedding的角色來看
[00:31:40] 那個700多其實是蠻夠的
[00:31:43] 那以Dense Vector來講
[00:31:44] 我們這邊會秀這兩個
[00:31:47] 當然這個大家都知道
[00:31:48] 是我們這個字當初的Static的Embedding
[00:31:52] 那到後來所謂Contextual Embedding
[00:31:54] 當然就是大家所熟知的這些BERT
[00:31:57] 或是LM他們在講的事情
[00:32:00] 那我們還是在Recap下
[00:32:02] 我Embedding在看的東西
[00:32:05] 那Embedding我們是希望說
[00:32:07] 我只要靠短的東西
[00:32:09] 或是壓縮厚的東西
[00:32:11] 去把這樣的概念能夠更連續
[00:32:14] 更分散式的呈現
[00:32:16] 所以他靠這樣的表示
[00:32:19] 我們希望能夠做到更好的這件事情
[00:32:22] 其實SPARTS的東西不見得做不到
[00:32:27] 只是沒那麼好而已這樣子
[00:32:30] 那只是說以前我也想要說這個字
[00:32:33] 其實老實說以前在做IR的時候
[00:32:36] Search Engine 2000年的時候
[00:32:38] 其實並沒有這個字並沒有太被大家所這樣用
[00:32:42] 就算Wall-to-Vector出來之後
[00:32:45] 大家才會把它當成是所謂的Wall Embedding
[00:32:48] 所以它比較像是一個遷路
[00:32:50] 比較像是用我一個壓縮後的空間去描述
[00:32:53] 一個更大量的語義的Space
[00:32:57] 所以會用這種Embedding
[00:32:59] 本身當然是變密變小
[00:33:04] 但是他也有一點是有壓縮的概念這樣子
[00:33:08] 這個例子是一個這個Analogy的例子
[00:33:11] 就對比的例子
[00:33:12] 這也是在裡面第一個作業會做到的部分
[00:33:15] 那其實在這種對比的
[00:33:17] 或是說你做Wall Embedding的東西
[00:33:19] 其實他有很多很有趣的東西
[00:33:22] 包含這邊我提到的
[00:33:23] 是這種Semantic Drift
[00:33:26] 就是語義的概念的飄移
[00:33:30] 就是比如說我這邊提到這個Broadcast
[00:33:33] 這Broadcast其實在以前可能會講的是
[00:33:38] 因為他其實你可以想像做Wall Embedding
[00:33:40] 大概不外乎是跟其他字共同出現
[00:33:44] 去算一些Relations出來
[00:33:46] 那以前在講Broadcast可能是廣播電臺
[00:33:50] 或者是什麼
[00:33:51] 但是後來的
[00:33:53] 媒體也變成電視
[00:33:55] 變成報紙什麼什麼之類的
[00:33:58] 甚至你現在可能做Broadcasting
[00:34:01] Broadcast的東西也許是在網路上
[00:34:03] 真正Physical的東西的Broadcast
[00:34:06] 所以這個字的概念
[00:34:08] 或是說跟他共同出現的字的分佈
[00:34:11] 會隨著年份有所不同
[00:34:15] 所以如果
[00:34:16] even你只是用Wall-to-Vector這麼簡單的Model
[00:34:20] 只要你有很長的時間的語料庫
[00:34:23] 你就可以辦法做這件事情
[00:34:26] 比如說你就
[00:34:27] 這個你有
[00:34:29] 可能有100年的資料
[00:34:31] 你就10年切一組
[00:34:34] 10年然後每一個給這個每一個字一個編號
[00:34:37] 比如說這叫Broadcast1 Broadcast2
[00:34:40] 那你就根據這樣10個Broadcast去算
[00:34:43] 把它當成不同的字
[00:34:45] 然後你就可以算出
[00:34:47] 發現他們的字
[00:34:49] 其實他們的Vector表現是不太一樣
[00:34:51] 那這個另外一個例子是
[00:34:55] Network
[00:34:58] 當然這種越Genial的Term
[00:35:00] 其實他本來
[00:35:02] 他本來涵蓋的概念就多了
[00:35:04] 只是說後來他的
[00:35:05] 每個年份
[00:35:06] 每個議題的重點會不太一樣
[00:35:08] 所以他很容易會造成這種Semantic Drip的狀況
[00:35:12] 這樣子
[00:35:14] OK
[00:35:15] 那其實這樣的東西
[00:35:16] 其實他
[00:35:20] 這是一個好像很正面的現象
[00:35:22] 但其實這種用貢獻性來做這些
[00:35:25] 其實會有很大的問題
[00:35:27] 就是說
[00:35:29] 我們等一下會秀一下說
[00:35:46] 這是新的嗎
[00:35:49] 好
[00:35:49] 沒關係
[00:35:49] 我用嘴巴講
[00:35:51] 就是在以前那個年代
[00:35:54] 大概在2000年代的時候
[00:35:56] Google的演算法有很多是靠著所謂Anchor Tags
[00:36:01] 就是比如說
[00:36:03] 就是連接到一個學校
[00:36:06] 然後你希望這個比如說Stanford
[00:36:10] 好
[00:36:11] 那你會擺在個人網頁
[00:36:13] 你會放一個連接
[00:36:15] 當然你會寫Stanford
[00:36:16] 但是你可能會寫說
[00:36:17] 這是你心目中最好的一個大學
[00:36:21] 這樣子
[00:36:21] 你會用那個Anchor Tags去描述
[00:36:24] 你要連接到的東西
[00:36:26] 所以以前當時在Google剛起來的時候
[00:36:29] 它其實Anchor Tags
[00:36:31] 其實它是一個很重要去度量
[00:36:34] 這個網頁的一個特徵
[00:36:37] 當然它這是一個正面的
[00:36:39] 但是後來大家發現
[00:36:41] Google有這個特性之後
[00:36:43] 就假造了很多假的Anchor
[00:36:47] 就是你做了很多假網頁
[00:36:50] 然後上面都用一些很負面的Anchor Tags
[00:36:56] 然後連接到這個個人網頁
[00:36:59] 就是你很容易可以造這種東西
[00:37:02] 因為都是你自己做
[00:37:03] 你只要擺連接
[00:37:05] 比如說你把它指到學校的首頁
[00:37:08] 然後你就說
[00:37:09] 這個學校很爛這樣子
[00:37:11] 然後你就造了一大堆這樣的連接
[00:37:14] 然後Google就會把它Cloud回去
[00:37:16] 然後算一算之後發現
[00:37:18] 這個被指到的這個連接
[00:37:20] 就會帶有這些負面的概念
[00:37:23] 所以以前這樣的東西出來之後
[00:37:27] Google本來不覺得怎樣
[00:37:29] 就是你了不起
[00:37:30] 只能做幾個假的Anchor
[00:37:32] 但是後來這個自動化的工具出來之後
[00:37:36] 這個Anchor就太多很容易造假的部分
[00:37:41] 所以當初有所謂的這種Google的Bomb
[00:37:46] 就是它其實名稱就叫Google Bomb
[00:37:48] 就是Google炸彈
[00:37:50] 就是我可以用這種方式去做
[00:37:53] 去讓某些人的網頁的排名下降
[00:37:58] 甚至我要去對一些
[00:38:00] 尤其是政治人物
[00:38:02] 我要給他一些很負面的詞彙的時候
[00:38:04] 我就可以利用這種方式去做
[00:38:06] 因為這個掌控權都在自己
[00:38:08] 因為網頁自己做的
[00:38:10] 連接你自己放
[00:38:11] Anchor text你自己設計
[00:38:13] 所以都可以這樣做
[00:38:14] 所以有點
[00:38:15] 就抓住他們在計算演算法的這種
[00:38:18] 貢獻性的詞彙之後
[00:38:20] 你就可以做造假這種東西
[00:38:23] 那這個東西其實一直有在用
[00:38:26] 其實一直有在用
[00:38:26] 其實像
[00:38:29] 你如果有機會去下載
[00:38:32] 比如說川普
[00:38:34] 他在競選總統時候的言論
[00:38:37] 或者是新聞稿
[00:38:38] 或者是什麼
[00:38:39] 你可以把它的東西抓出來之後
[00:38:42] 你會發現他在形容對手的時候
[00:38:46] 都一定會加一些很負面的形容詞
[00:38:50] 這樣子
[00:38:52] 像這其實是事實
[00:38:53] 都有點統計過
[00:38:54] 像當初他就會說這個拜登
[00:38:58] 叫做sleepy joe
[00:39:00] 就是愛睡覺的這樣子
[00:39:02] 他就會前面放一些
[00:39:04] 比較不是這麼誇張
[00:39:06] 但其實是負面的形容詞去形容對手
[00:39:09] 那隻要他不斷提到這個事情的時候
[00:39:13] 這個對手常常在搜尋
[00:39:16] 在搜尋運行在搜尋的時候
[00:39:18] 通常就會被很容易被帶到這種
[00:39:20] 比較負面的概念進去
[00:39:23] 這樣子
[00:39:24] 那這個當然是有點像是道高與子
[00:39:28] 魔高與藏這種東西
[00:39:29] 就是你怎麼去破壞各種的ranking的機制
[00:39:33] 然後達到你想要的效果
[00:39:37] 當然以前搜尋運行剛剛很正常的樣子
[00:39:38] 當然以前搜尋運行剛剛很正常的樣子
[00:39:38] 當然以前搜尋運行剛剛很正常的樣子
[00:39:38] 當然以前搜尋運行剛剛很正常的樣子
[00:39:38] 當很重要很紅的時候
[00:39:40] 就有這種SEO的公司
[00:39:42] 幫你去做一些最佳化
[00:39:45] 就排名最佳化
[00:39:46] 一個新公司出來之後
[00:39:47] 你可能不會被搜尋到
[00:39:49] 你就付一些錢給這些公司
[00:39:52] 他就可以幫你做一些內容農場
[00:39:54] 然後去導引到你的網站
[00:39:56] 然後去promote你的東西這樣
[00:39:58] 其實那個其實是
[00:40:01] 也有正面也有負面的case
[00:40:04] 不過anyway
[00:40:05] 這個可能就大家自己在想象
[00:40:07] 好
[00:40:08] 好
[00:40:08] ,我們當初提了what-to-vector這兩個方式
[00:40:13] 你用這個這樣的一個角色去講
[00:40:15] 就比較知道是說
[00:40:17] 我在做C-Ball的時候
[00:40:18] 其實我是根據這個context
[00:40:21] 去predict我現在的target
[00:40:23] 那這個在
[00:40:28] 這有點像磕漏字
[00:40:30] 有點像我們後面要提到這個masking
[00:40:32] language model在做的事
[00:40:34] 但是其實上以我們這個當初在做
[00:40:37] what-to-vector的語料庫
[00:40:38] 的取得的時候
[00:40:40] 其實我覺得這種角色
[00:40:42] 這種方向是比較容易訓練
[00:40:44] 就是我只要去抓我這個中間這一個字
[00:40:48] 然後他周邊的字predict他可能是哪些
[00:40:52] 這個在training data上是比較直覺
[00:40:55] 當然不是說有很大差別
[00:40:59] 但是我覺得用這種訓練方式
[00:41:01] 可能比較容易理解
[00:41:04] 這個是我們當初有提到這樣的一個角色
[00:41:07] 其實就是
[00:41:08] 就是這一個兩層的NN
[00:41:12] 其實我們在上一W1的投影片後面有提到
[00:41:17] 那其實
[00:41:19] 他整個一個flow
[00:41:21] 當然就是以一個兩層的NN的training的過程
[00:41:26] 那我需要有supervised data
[00:41:28] 所以我們說我們會根據語料做一個sliding window
[00:41:32] 切這樣的一個pair
[00:41:33] 這個pair其實都是positive example
[00:41:37] 就是A有共同處理的
[00:41:38] A有共同出現的字碼
[00:41:40] 但是機器學習我們需要negative sample
[00:41:44] 這樣才比較知道告訴模型說他應該是
[00:41:49] 這個是yes這個是no這樣子
[00:41:51] 這個模型才知道算這樣的一個分數去算loss
[00:41:55] 當然這樣講不見得是這麼嚴謹
[00:41:57] 不過一般機器學上都會需要所謂negative sample
[00:42:00] 而且negative sample選擇相當重要
[00:42:05] 因為你如果隨便選
[00:42:06] 如果隨便選模型
[00:42:08] 很聰明
[00:42:09] 他知道說原來這次考試這麼簡單
[00:42:12] 這個看起來就是很明顯的negative
[00:42:15] 我就就隨便回答就好了
[00:42:18] 那這個問題其實我們到時候在講這個transformer
[00:42:23] 在pretrain的那個時候
[00:42:25] 在講有一個NSP的train法
[00:42:28] 其實也會有negative sample選擇的不好的問題
[00:42:33] 所以其實以前如果你做過機器學
[00:42:35] 你就知道說
[00:42:37] 如果我不是一個given
[00:42:38] 已經給你好的train data的時候
[00:42:41] 你要自己去建造或是選擇你所謂的positive或negative data的時候
[00:42:47] 這時候就學問就來
[00:42:50] 就是你需要好好的選擇
[00:42:52] 第一個你可能要balance
[00:42:55] 就是你不能差太多這樣子
[00:42:57] 差太多其實模型也會就都回答
[00:43:01] 比如說你的negative很多
[00:43:04] 但positive只有一個
[00:43:05] 那以後模型都是回答不是這樣子
[00:43:08] 它分數就很高
[00:43:10] 那另外你也希望能夠讓這個negative
[00:43:14] 越接近positive越好
[00:43:17] 有點像是說
[00:43:19] 這個考試難度要增加
[00:43:21] 不是讓他很容易就可以判斷這一題的對錯
[00:43:25] 他必須要稍微思考一下
[00:43:27] 必須要模型要稍微去看一下說
[00:43:30] 原來隨便答的是會錯的
[00:43:32] 所以他必須要探究更細的特徵跟差距值的時候
[00:43:36] 模型才能學到一些相似的東西
[00:43:38] 細的美感這樣子
[00:43:40] 但是這句話其實也是有trade-off
[00:43:44] 就是很容易會有一些over-fitting的狀況
[00:43:48] 我想這個在做基因學習的過程
[00:43:51] 應該如果你有經驗
[00:43:52] 大概可以體會出這種感覺
[00:43:54] 不過在做Wall-to-Vector的時候
[00:43:56] negative選擇非常重要
[00:43:59] 因為一個字在整個vocabulary裡會出現
[00:44:04] 跟它共同出現的字是在佔整個詞彙的位置
[00:44:08] 因為這個詞彙的比例非常低的
[00:44:10] 那你不太可能把
[00:44:12] 比如說你用一萬維度的vocabulary size
[00:44:15] 那每一個字了不起就是十個字跟它共同出現
[00:44:19] 你不太可能把所有的9990個都算成negative sample
[00:44:25] 第一個非常不balance
[00:44:27] 第二個你要算這所有東西的cost相當的高
[00:44:30] 那你可以再去看一下Wall-to-Vector本身
[00:44:35] 它在做training data的sampling的時候
[00:44:38] 它的一個process是什麼
[00:44:40] 它其實是有一個
[00:44:42] 裡面有各式各樣的做法
[00:44:44] 但是一般都是會用一個簡單的sampling方式
[00:44:47] 它不會去sample所有的case出來去算loss
[00:44:50] 它只會跟你的training data一個比例
[00:44:54] 去對照那個positive跟negative去算那個loss
[00:44:59] 當然也有不同的做法
[00:45:02] 你可能可以用這個Hoffman的方式
[00:45:05] 以code這些每一個vocabulary來做
[00:45:08] anyway你可以去看一下它的細節
[00:45:12] 這個用這個regression的角度來看這件事情
[00:45:17] 其實跟我們原先的那個NN在做的其實是一樣的
[00:45:21] 只是說我們在後面的Wall-to-Vector其實
[00:45:27] 一般都是用我們前面講那樣的一個簡單的NN的方式
[00:45:34] 在做這件事情
[00:45:36] 那只是說
[00:45:37] 勸完之後的模型
[00:45:39] 勸完之後的模型它只能做一件事
[00:45:46] 它就是給一個字
[00:45:48] 然後它去預測跟它的context的perplexity
[00:45:52] 但這個模型其實不是我們要
[00:45:54] 這個模型能夠output的東西不是我們要的東西
[00:45:59] 我們要的是它勸出來這個第一層的weight
[00:46:03] 因為第一層的weight
[00:46:05] 在這樣的一個語義的表示的空間
[00:46:08] 其實是一個
[00:46:09] 一個space vector
[00:46:11] 透過一個學習的過程
[00:46:13] 轉換出我要的一個embedding的space的呈現
[00:46:18] 比如說這個字
[00:46:20] 我在這300個NN裡面應該要用哪些數字來表示
[00:46:24] 透過這些數字的表示之後
[00:46:26] 我可以靠著它的一個weighted sum
[00:46:31] 就是第二個矩陣的學習的過程
[00:46:34] 比如說我這個字的維度是
[00:46:37] 應該第一個維度跟第三個維度乘以多少
[00:46:40] 然後就可以構成
[00:46:42] 這個字典裡的第一個字的共同出現的perplexity
[00:46:46] 這個也是學出來的
[00:46:48] 只是說我們其實是用第一層學會的結果
[00:46:52] 去轉換出我的字的embedding的分佈
[00:46:59] 然後第二個metric
[00:47:01] 其實是把這樣的一個wall embedding
[00:47:04] 靠著某種組合
[00:47:06] 學到來組合去預測這個字的
[00:47:10] 共同出現的一個perplexity
[00:47:13] 這也是我們當初講過embedding比較強調的部分
[00:47:17] 不然它就是一個非常小的NN的metrics
[00:47:21] 好
[00:47:28] 這是在計算的過程
[00:47:30] 這個summax就看了
[00:47:33] 其實在predict最後的perplexity
[00:47:36] 那我這邊舉一個例子
[00:47:38] 這是一個target wall
[00:47:41] ABC三個字
[00:47:43] 其實這個字
[00:47:44] 這個例子
[00:47:46] 只是讓大家感覺一下這個計算過程
[00:47:49] 因為這個U其實是
[00:47:53] 它並不是ABC的embedding
[00:47:56] 而是這個
[00:47:58] 我們後來學到第二層的那個metric
[00:48:01] 那個weight
[00:48:03] 跟我現在target wall這個embedding之間
[00:48:06] 該怎麼去做一個weighted sum
[00:48:09] 去得到這個字的一個perplexity
[00:48:12] 這樣子
[00:48:13] 它只是說我們
[00:48:14] 我們這個例子是告訴你說
[00:48:16] 我這樣乘出來之後
[00:48:17] 我再做一個這個neuron的
[00:48:20] 這樣的一個計算summax的方式
[00:48:23] 然後去得到這個值
[00:48:27] 所以最後的perplexity就是
[00:48:29] 我看到這一個target wall之後
[00:48:31] 我的ABC它共同出現perplexity是這樣
[00:48:36] 其實大概只是帶用這個例子
[00:48:38] 帶一下這個這個值
[00:48:42] 那你大概就可以predict說
[00:48:45] 如果我現在的vocabulary只有這三個字
[00:48:48] 那我大概就可以算出我現在的perplexity
[00:48:52] 但是因為你的vocabulary很大
[00:48:54] 你可能有一萬個字
[00:48:56] 一萬個字裡面
[00:48:57] 我去算這些全部都算出來
[00:48:59] 其實cost相當高
[00:49:02] 所以我們通常會做negative sampling的地方的概念
[00:49:07] 就在這裡
[00:49:08] 好
[00:49:09] 不過這個例子只是數字
[00:49:11] 讓你帶一下這個感覺
[00:49:12] 不過大概你可以發現
[00:49:14] 它是也是一個正比的關係
[00:49:16] 也是一個正比的關係
[00:49:18] 不過因為這個本來就會對這個數值
[00:49:21] 做一個normalization
[00:49:22] 然後有些東西會有點壓縮
[00:49:25] 所以當然它並不是一個很線性的部分
[00:49:29] 好
[00:49:33] 這其實大概就是在在recap下
[00:49:35] 這些Value to Vector的東西
[00:49:38] 那
[00:49:39] 這個東西其實隨著大家在使用上
[00:49:44] 覺得這種東西
[00:49:45] 如果是一個static的角色的時候
[00:49:47] 它就有時候不是這麼好用
[00:49:50] 或者根本是不對的東西
[00:49:52] 所以我們希望做一個叫contextual embedding
[00:49:55] 就是我會隨著前後文的東西
[00:49:58] 這個字的表示就會有所不同
[00:50:01] 這當然大家覺得現在好像都是這樣
[00:50:04] 但是其實在Value to Vector那個年代
[00:50:07] 其實大家也想這樣
[00:50:09] 只是做不太到這樣子
[00:50:11] 所以從Value to Vector到後面的transformer
[00:50:15] 這個過程
[00:50:16] 大家就一直希望從所謂的Value embedding
[00:50:20] 轉換到這種contextual embedding
[00:50:22] 能夠去capture這個字
[00:50:24] 同樣的字在這個句子裡面
[00:50:26] 該有什麼樣不同的表示
[00:50:29] OK
## 8. 寫作規則
(這是 `_筆記SOP.md` 第 3.1、4、5、6 節的濃縮版。兩者衝突時以 SOP 為準。)
讀者:碩士生,兩門課期末是英文考試。要只看筆記就能學會,講得比老師好懂。畫面要簡潔。
**概念優先(2026-09-26 主理人)**:主理人只想懂概念,不想補數學、不想看程式碼和座標圖。兩門課的考試也都是問答題、不考算式(AI W1 1:16:52;NLP W3 1:47:41、2:48:36)。所以:
- 每段預設看得到的只有:白話摘要(2–4 句)+**一句生活比喻**(例:模擬退火像投資理財,年輕時敢冒險、越老越保守)+「考試可能怎麼問」一句。
- 數學推導、公式、手算、程式碼、座標圖,全部收進標題寫「(進階,可跳過)」的摺疊,例如「它到底怎麼運作?(進階,可跳過)」。每段最多一個進階摺疊,不要寫長篇計算。
- 演算法要能「用文字說出步驟」(考試可能要你描述),這一點放在預設看得到的地方,不用數字。
- **重心比例**:白話理論與概念模式(它在解決什麼問題、核心想法、跟別的方法差在哪、優缺點、生活比喻)占主要篇幅;數學與程式細節只用一兩句帶過,細節收進進階摺疊。
**圖文並茂(2026-09-26 主理人:不要只有文字)**:
- 每章至少 2–3 個圖,放在**預設看得到**的地方,每個圖前後各用一兩句白話說明「這張圖在看什麼」。
- 流程、步驟、因果、比較 → 用 mermaid 流程圖(```mermaid,flowchart LR 或 TD;節點文字用中文、加雙引號;一張圖不超過 10 個節點)。
- 投影片上的示意圖、架構圖 → 用 [[IMG: …]] 放投影片圖。
- 仍守「每個 ## 段落最多一種視覺元素」。
### 輸出兩個檔
1. `chNN.md`(Notion 寫法,不含頁面標題),結構固定:
- 第一行:章節包第 1 節那行,原樣照抄。
- 第二行起(有數學段才寫):**跳過提示**,每段一行,讓主理人看影片時知道從哪跳到哪。用章節包第 3b 節的候選當提示,對照第 7 節逐字稿確認(只標老師連續講公式、推導、矩陣、微積分、機率計算、程式細節超過約 1 分鐘的段落;概念講解和比喻不算):
`跳過提示:(1:31:02–1:35:40) 老師在推導梯度公式,聽不懂可以直接跳到 [1:35:40](YouTube 連結),接著講「步長 α 怎麼選」。`
- `## 重點`:三點中文,每點一到兩句。
- `## Exam-ready`:3–10 行英文,**從章節包的投影片文字逐字抄**,每行 `- **Term**: "原句"(Ch3 p.14)`。老師有明確證據才在行尾加 `【老師強調】(h:mm:ss)`。
**每一行下面一定要有一行縮排的中文解釋**(主理人英文不好,看不懂的英文等於沒用):
```
- **Hill climbing**: "It keeps track of one current state and on each iteration moves to the neighboring state with highest value."(Ch4 p.5)
- 中文:爬山法只記住「現在這一個狀態」,每一輪都移到分數最高的鄰居。白話:一直往比較高的地方走一步。
```
中文要先把句子意思講清楚,再補一句白話;最後用「英文(中文)」列出這句裡 1–3 個難字,例:sparse(稀疏)、distinct terms(不重複的字)。
**一行只放一句投影片原句**。同一頁有多句要考就拆成多行,每行各接一行中文;不要用分號串三句以上,不要把計算量 O(...) 塞進去。
- 章節包第 2 節的每一段:`## [h:mm:ss](連結) 標題`(照抄),下面 2–4 句白話摘要,其餘全部收進摺疊:
```
問句(例:用生活例子講,BFS 在做什麼?)
內容
```
摺疊種類(需要才放):用生活例子講?/它到底怎麼運作?/要先懂什麼?(老師假設你會的數學或概念,短版教學)/老師原話是什麼?(「原話」(h:mm:ss),只放重要的,最多 5 句)。
- 「它到底怎麼運作?」要用一組小數字把這段的演算法**真的跑 1–3 步**(例:算出梯度、更新一次、比較兩個 α),不是只示範定義的加減乘除。全章盡量沿用同一組數字,讓前一段的答案能在下一段被驗證。
- 每段正文要回答讀者最可能卡住的一個「為什麼」。投影片公式方向跟題目相反、或投影片說「解不出來」時,用一兩句講出原因,自己補的標(我補充)。
- 投影片句子停在公式前(公式在圖裡)時:Exam-ready 在粗體詞條上補公式、引號內保持原句;正文寫出同一條式子。公式圖看章節包第 6 節列出的 PNG。
- `## Self-check`:2–4 題英文考題,答案收摺疊。**至少一題考老師強調的內容**;只出 explain/why/compare 這類問答題,**不出要代數字計算的題目**(考試不考算式);不出「老師和投影片哪裡不同」這類不會考的題目。每題格式:
```
Q1. English question?(中文:中文題目)
**Answer**: English answer.
中文:把答案完整講一遍(不是只翻一句),讓看不懂英文的人也知道要怎麼答。
```
- **最後一行**:章節包第 1b 節那行(下一章連結),原樣照抄。讓讀完的人直接點下一章。
- 不要把章節包或這份規則裡的指示句寫進筆記(例如「寫筆記時照投影片寫」「已改正 ASR 錯字」)。
- 長度:全文不超過 16,000 字元(跟 check_note.py 同一個數字)。**不要為了壓字數反覆刪改**(實測一章最多花 12 輪在刪字);超過時只刪進階摺疊裡的第二組算例,比喻、比較表、圖說、「老師說不用背」的提醒都不刪。
- 預設看得到的正文不放計算量 O(...)、代號對照(例如 SMART 字母)、課本出處考據,一律移進進階摺疊。
2. `chNN.concepts.json`:JSON 陣列,4–12 個考試可能問的術語,每個物件:
`name`(英文)、`zh`、`type`(概念/演算法/公式/人物事件/前置知識/行政)、`signal`("老師說會考"/"老師強調"/"核心(我判斷)"/"")、`evidence`(有 signal 前兩種時必填:原句+時間)、`definition_en`(投影片原句;沒有就註明 (textbook)/(lecture)/(my wording))、`plain`(一句中文)、`a4`(≤150 字元英文,可夾極短中文;期末拼貼用的小方塊)、`time`、`slides`、`prereq`(英文名陣列)。
### 風格鐵律
- 不用 emoji 或裝飾符號(✓✗★⚠ 都不要;→ 可以)。不用 callout。不用 `$`。時間不要用 code 樣式。
- 每個 `##` 段落最多一種視覺元素:一張圖、或一個表格、或一個 mermaid。
- 摺疊標題是問句,前面不加符號。
- 圖片最多 3 張,只放文字取代不了的圖。放法:單獨一行 `[[IMG: | 中文圖說]]`,PNG 用 `slides_to_png.py <圖片資料夾> <頁> --dpi=110` 產生。
- 考試訊號只在老師明確說時標。老師只說「不用背」「不講」就寫「注意:……」。
- 老師口誤或跟投影片不同:照投影片寫,加「注意:老師口頭說的是……」。
- 引用老師的話時,ASR 錯字改成正確的字。
### 沒有投影片時
不要憑記憶逐字重現課本段落或數值表。英文定義用自己的話寫、句尾標 (my wording);Exam-ready 每行標「(自擬,投影片待補)」。例子只用老師講的。
### 寫完之後(只做一次)
跑檢查:
`C:\Users\user\.cache\meeting-record\venv\Scripts\python.exe C:\Users\user\.claude\scripts\check_note.py --transcript <逐字稿> --slides <投影片 txt …> --start <起> --end <訖> --vid <影片 ID>`
- STYLE/VISUAL/TIME/FORMAT:全部改掉。
- QUOTE:確認是不是你改正了 ASR 錯字(是就保留),不是就改成原文或拿掉引號。
- ENGLISH:確認是不是投影片斷行造成的(是就保留),不是就改成投影片原句。
**省額度守則**:章節包裡已經有你需要的全部資料。不要再去讀整份逐字稿、整份投影片、segments.json 或手冊。一次寫好整個檔(Write 一次),檢查後集中修改。