[自然語言處理](https://app.notion.com/p/3e6fc631b03081b4a9e8f91f3411f61f) › [W3(9/24)](https://app.notion.com/p/3e6fc631b03081ff9776f36fab3e6e50) › 01|影片 [0:02:31–0:36:38](https://www.youtube.com/watch?v=g0QE6O17BWE&t=151s)|投影片 W1_NLP_brief p.64–69|上一章 無|下一章 [02 分布假說與 LSA/LSI(0:36–0:53)](https://app.notion.com/p/3e6fc631b030815a90adc80645bf2668) ## 重點 - one-hot 和 TF-IDF 只認得「一模一樣的字」,分不出貓、狗、卡車誰跟誰像。解法是把每個字變成一串實數(continuous, distributed representation,後來叫 word embedding),讓意思相近的字在空間裡靠近。 - 這條路很早就開始:Markov(1913)親手數字母,發現「下一個只看目前的狀態」;Shannon(1951)用 entropy 量化資訊量。Bengio 2003 再改成用神經網路「學」出詞向量,不再靠人工標特徵或純數數。 - 學到的向量能做類比:king − man + woman ≈ queen,這就是作業一。老師反覆提醒:「貓」的鄰居常常不是貓,Queen 也不一定排第一。這些觀察就是作業報告和考試要的 insight。 ## Exam-ready - **Continuous, Distributed Representations**: "By continuous we mean real-valued" "Distributed means a vector in a space, like …"(W1_NLP_brief p.64;圖中 dog = [0.6, 0.4]、cat = [0.5, 0.4]) - **Bengio et al. 2003, A Neural Probabilistic Language Model**: "associate with each word in the vocabulary a distributed word feature vector (a real-valued vector in ℝ^m) … learn simultaneously the word feature vectors and the parameters of that probability function."(W1_NLP_brief p.65,投影片上的論文截圖) - **Pre-trained vectors**: "We can also pre-train our vectors with encoded world knowledge (e.g. similarity)"(W1_NLP_brief p.65) - **Markov**: "[1913] The chance of a letter appearing depends on the letter before it." "Markov demonstrated that the next step depends only on your current state, not your entire past history."(W1_NLP_brief p.66) - **Markov's vowel/consonant finding**: "If a character was a vowel, the probability of the next being a consonant was roughly 87%; if it was a consonant, a vowel followed 66% of the time."(W1_NLP_brief p.66) - **Information Entropy (Shannon)**: "He coined Information Entropy: the more surprising or unpredictable a message is, the more information it carries."(W1_NLP_brief p.66) - **Why does this work? (1)**: "Similar words are expected to have similar vector representations (and be closer in vector space)"(W1_NLP_brief p.67) - **Why does this work? (2)**: "The probability function is a smooth function of feature values … This is not true for unorganized discrete spaces, where small changes in input can lead to large changes in the function value"(W1_NLP_brief p.67) - **Why does this work? (3)**: "Therefore, the presence of one sentence in the training set can effectively distribute probability density in the vector space for a combinatorial number of unseen sentences"(W1_NLP_brief p.67) - **Word analogy**: "man:woman :: king:?" king [0.30 0.70] − man [0.20 0.20] + woman [0.60 0.30] = queen [0.70 0.80];"Paris - France + Italy" → "Rome"(W1_NLP_brief p.68、p.69,投影片圖中文字)【老師強調】(0:31:12) ## [0:02:31](https://www.youtube.com/watch?v=g0QE6O17BWE&t=151s) 開場與回顧:one-hot 分不出貓狗卡車 今天要講完 intro 投影片,並公布作業一。上週的 one-hot 和 TF-IDF 只能比對「一模一樣的字」,所以在電腦眼中,「貓和狗」跟「貓和卡車」一樣不相干。p.64 的解法是 continuous, distributed representation(連續、分散式表示:每個字變成一串實數,意思分散寫在每個數字裡),後來大家叫它 embedding(把字的概念「嵌」進數字裡)。老師先預告:做作業時你會發現,「貓」旁邊最近的向量常常不是貓,這就是作業要你反思的地方【老師強調】(0:05:37)。
要先懂什麼?cosine similarity 怎麼算? cosine similarity(餘弦相似度)看兩個向量「指的方向」有多接近:cos(a, b) = a·b / (|a| × |b|)。a·b 是對應位置相乘再相加,|a| 是向量長度。值在 −1 到 1:1 是同方向,0 是垂直(無關)。 手算 p.64:dog·cat = 0.6×0.5 + 0.4×0.4 = 0.46;|dog| = √0.52 = 0.721,|cat| = √0.41 = 0.640;cos = 0.46 ÷ (0.721 × 0.640) = 0.996,幾乎同方向。 **注意:老師說「cosine 夾角很低」,意思是夾角很小、cosine 值接近 1。**
它到底怎麼運作?one-hot 和實數向量差在哪? 用三個字的小字典比一次(truck 的數字從 p.64 的圖上估):
one-hotp.64 的實數向量
cat[1, 0, 0][0.5, 0.4]
dog[0, 1, 0][0.6, 0.4]
truck[0, 0, 1]約 [0.1, 0.7]
cos(dog, cat)0**0.996**
cos(dog, truck)0**0.667**
one-hot 裡不同的字都互相垂直(p.63:"every different words are orthogonal"),相似度永遠是 0;字典有 10 萬字,向量就有 10 萬維。實數向量只要幾百維,還算得出「狗像貓、不像卡車」。
老師原話是什麼? 「貓附近的向量,就是跟它很接近的向量,其實不是貓」(0:05:21) 「所以這個就可以讓你反思,當你在做assignment,我們會問你這些問題」(0:05:37)
## [0:06:01](https://www.youtube.com/watch?v=g0QE6O17BWE&t=361s) 從數數改成用學的:Bengio 2003 以前的做法是「數數」:數 n-gram、開 sliding window(滑動視窗)算字一起出現的機率,成本高、效果也不好。2000 年後資料和算力變多,大家改成訓練神經網路,讓模型參數「內化」語料裡的知識,詞向量就是其中一組參數。Bengio 2003 是觸發點,三個步驟:每個字配一個實數向量、用這些向量表示整句話的機率、兩者一起學。老師說後面各種 word embedding 的架構「都不外乎是長這樣」,差別只在架構細節和訓練資料怎麼給。閒聊:Bengio、LeCun、Hinton 共同獲得 2018 年圖靈獎,p.65 右下是老師在 AAAI 2019 遇到三人的照片。 [[IMG: C:\D槽\TAICA課程\_work\notes-v2\nlp-w3\img\w1_nlp_brief_v2_p065.png | Bengio 2003 的架構:前面幾個字查表(Matrix C)拿到詞向量,經過 tanh 隱藏層,最後 softmax 算出下一個字的機率]]
它到底怎麼運作?Bengio 的模型一步一步在做什麼? 任務:看前面幾個字(例如 "the cat is"),猜下一個字。 1. 查表:用每個字的編號去矩陣 C 取出一列,就是它的詞向量(論文用 30–100 維,字典約 17,000 字)。 2. 幾個字的向量接起來,進 tanh 隱藏層。 3. softmax 輸出字典裡每個字當「下一個字」的機率。 4. 讓真正的下一個字機率越大越好,用梯度同時更新網路權重和 C。 答案就在文章裡,不用人工標註(老師叫它 unsupervised,現在多叫 self-supervised)。訓練完,C 的每一列就是詞向量,不必再找人手工標「是動物嗎?yes」這種特徵。 **注意:老師說「700 多維度」只是舉例。維度是自己設的:Bengio 用 30–100 維,Gensim word2vec 預設 100 維,Google News word2vec 300 維,BERT-base 768 維。**
要先懂什麼?神經網路、softmax、cross-entropy 最短版 老師明說這門課不講神經網路,要自己補(1:16:41)。 神經網路:一層一層做「加權總和,再過非線性函數(例如 tanh)」,權重靠訓練調整。 softmax:把一排分數變成加起來等於 1 的機率。例:分數 [2, 1, 0] → e² : e¹ : e⁰ = 7.39 : 2.72 : 1 → 機率 [0.665, 0.245, 0.090]。 cross-entropy loss:−log P(正確答案)。正確答案機率 0.665 時,loss = −ln 0.665 = 0.41;機率越接近 1,loss 越接近 0。 反向傳播(back-propagation):算出 loss 對每個權重的偏微分(梯度),往 loss 變小的方向調一點,重複很多次。 所以對你的影響是:第 3 章的 word2vec 也是這套邏輯,只是網路更簡單。
別人怎麼教這個? [3Blue1Brown:神經網路入門](https://www.youtube.com/watch?v=aircAruvnKk) [3Blue1Brown:反向傳播](https://www.youtube.com/watch?v=Ilg3gGewQ5U) [Bengio 2003 原論文(投影片附的連結)](https://www.jmlr.org/papers/volume3/bengio03a/bengio03a.pdf)
老師原話是什麼? 「我們能不能透過模型學習的方式,去內化看到的文章」(0:06:58) 「我們不用再用找一大堆的人去標」(0:08:45) 「人學不會就讓電腦自己去學」(0:09:18)
## [0:12:07](https://www.youtube.com/watch?v=g0QE6O17BWE&t=727s) 語言模型的源頭:Markov 在大家用「神的旨意」解釋世界的年代,Markov(1856–1922)堅持實證:拿普希金的詩體小說《Eugene Onegin》,親手數了前 20,000 個字母,發現母音後面接子音約 87%,子音後面接母音約 66%。字母不是隨便出現,而是看前一個。他的結論是 Markov property(馬可夫性質):下一步只看目前的狀態,不看整段歷史。這就是語言模型的核心:下一個字的機率不是平均分配,而是跟著前面的字走。
它到底怎麼運作?用 Markov 自己的數字手算一次 原始數字(Hayes 2013,American Scientist 整理):母音 8,638 個、子音 11,362 個;「母音接母音」1,104 對,「子音接子音」3,827 對。
目前是下一個是母音下一個是子音
母音1,104 ÷ 8,638 = 0.1281 − 0.128 = **0.872**
子音1 − 0.337 = **0.663**3,827 ÷ 11,362 = 0.337
這就是 p.66 的 87% 和 66%。如果字母彼此獨立,「母音接母音」應該有 19,999 × (8,638 ÷ 20,000)² ≈ 3,731 對,實際只有 1,104 對,所以前一個字母確實會影響下一個。
用生活例子講,hidden state 是什麼? 老師的作弊賭徒:正常骰子每點機率 1/6,作弊骰子擲出 6 的機率是 1/2。他偷換的手法很好,你看不到他現在用哪一顆。「用哪顆骰子」就是 hidden state(看不到的狀態),你只看得到點數。 手算:連續五個 6。正常骰子機率 (1/6)⁵ = 1/7,776,作弊骰子 (1/2)⁵ = 1/32,後者大 243 倍,所以你判斷他換骰子了。這種模型叫 hidden Markov model(HMM)。老師也提到 DNA:有些區段 C 後面接 G 特別多,同樣能用這種方法判斷「現在進入這種區段了」。
它到底怎麼運作?字換成看不懂的符號也能分析? 老師的思考實驗:把文字一對一換成怪符號(例如每個字母往後挪一位,the → uif),你看不懂了,但出現規律完全沒變,英文最常見的 e 換完後還是最常見。所以語言模型不必「看懂」字,只要抓規律;老師說早期破解古文字也用到統計頻率的想法。
老師原話是什麼? 「我覺得做研究就是這樣,你就要把這樣精神用在你現在在做的東西」(0:15:44) 「下一個字,它的出現的機率不是uniform」(0:19:17)
## [0:21:08](https://www.youtube.com/watch?v=g0QE6O17BWE&t=1268s) Shannon 與資訊熵 Shannon(1916–2001)延續 Markov 的精神,開創資訊理論;1951 年的論文 Prediction and Entropy of Printed English 在估英文有多好猜。核心想法:越少見、越出乎意料的字,帶的資訊量越高;一個人講一堆廢話,資訊量就很低。Entropy(熵)把「平均有多出乎意料」變成一個數字,後面的語言模型機率和 perplexity(困惑度,W2 p.16)都會用到。 **注意:老師口頭說「用 entropy 代表能量」是比喻。entropy 量的是平均資訊量(不確定性),單位是 bit,考試照投影片寫。**
它到底怎麼運作?資訊量和 entropy 怎麼算? 一件事的資訊量 I(x) = −log₂ P(x)(單位 bit):機率 1/2 → 1 bit,1/8 → 3 bits,1/1024 → 10 bits。沙漠預報「明天下雪」就比「明天晴天」資訊量高得多。 Entropy 是資訊量的平均:H = −Σ P(x) log₂ P(x)。
情況機率Entropy
公平硬幣0.5/0.51 bit
公平骰子每點 1/62.585 bits
作弊骰子6 點 1/2,其他各 1/102.161 bits
Markov:母音之後子音 0.872/母音 0.1280.55 bit
Markov:子音之後母音 0.663/子音 0.3370.92 bit
越好猜,entropy 越低。語言模型的目標就是讓下一個字「不那麼意外」;第 7 章的 perplexity = 2 的 entropy 次方。
老師原話是什麼? 「你常常聽到一個人講一堆東西,但是好像沒有什麼重點,聽的跟沒有聽一樣這樣子,那個就是資訊量很低的意思」(0:22:14)
## [0:23:20](https://www.youtube.com/watch?v=g0QE6O17BWE&t=1400s) 為什麼向量表示行得通 貓和狗都會跳、會吃、會咬,卡車不會,所以「一個字常跟哪些字一起出現」有規律,意思相近的字應該有相近的表示(下一章的 distributional hypothesis 會正式講)。representation(表示法)就是機器學習的 feature vector:老師用「描述一個學生」比喻,出席率、作業分數、坐第幾排,把人變成一排數字;現在要替每個字做一條這樣的向量。p.67 說明為什麼能舉一反三:相似的字向量靠近,機率函數又是 smooth(平滑:輸入改一點,輸出只改一點)的,所以小貓、大貓也該靠近貓。
它到底怎麼運作?一句話怎麼幫到沒看過的句子? Bengio 論文的例子:訓練資料只有 "The cat is walking in the bedroom"。因為 the≈a、cat≈dog、is≈was、walking≈running、bedroom≈room 的向量都很近,模型也會給 "A dog was running in a room" 很高的機率。 這句有 6 個位置各有 2 種相近的字可換,2⁶ = 64 種組合,一句訓練資料就把機率分給幾十句沒看過的句子,這就是 "a combinatorial number of unseen sentences"。 在 one-hot 這種 unorganized discrete space(沒有組織的離散空間)裡,cat 換成 dog 跟換成 truck 一樣遠,改一個字機率可能整個跳掉,就學不到這種推廣。
別人怎麼教這個? [The Illustrated Word2vec](https://jalammar.github.io/illustrated-word2vec/):開頭用「把人的性格變成一排數字」講 embedding 和 cosine similarity,跟老師的學生比喻一樣。
老師原話是什麼? 「但是當你做完第一個assignment之後,你就發現好像不是這麼一回事」(0:25:54) 「就是這個訓練資料的東西,其實是會影響到這個representation的東西」(0:26:39)
## [0:26:48](https://www.youtube.com/watch?v=g0QE6O17BWE&t=1608s) 詞向量的類比:man:woman=king:queen p.68 把 word2vec、GloVe 學到的向量壓到 2D 平面。重點不是每個字的「絕對位置」,而是字與字的「相對關係」:man→woman 和 king→queen 的箭頭,方向和長度幾乎一樣。所以可以直接做向量運算:king − man + woman,離結果最近的字就是 queen,而且完全不用人工標註資料。這就是作業一的 word analogy;老師提醒,你算出來的 Queen 不一定排第一,可能只在前三名,這可以拿來探討【老師強調】(0:31:12)。 [[IMG: C:\D槽\TAICA課程\_work\notes-v2\nlp-w3\img\w1_nlp_brief_v2_p068.png | p.68:左邊性別對應、中上 king − man + woman 算式、中間公司對 CEO、右邊比較級與最高級、下方 frog 的近鄰]]
它到底怎麼運作?用 p.68 的數字手算一次 king [0.30, 0.70] − man [0.20, 0.20] + woman [0.60, 0.30] = [0.70, 0.80] = queen。 為什麼會對?woman − man = [0.40, 0.10],queen − king = [0.40, 0.10],兩個差一樣,就是「男→女」的方向。king 加上這個方向,就走到 queen。 一般寫法:a:b :: c:?,d ≈ b − a + c,再找跟 d 的 cosine similarity 最高的字,並排除 a、b、c 本身(不排除的話,最近的常常是 king 自己)。真實向量不會剛好等於 queen,只是 queen 最靠近。 **注意:作業一 PDF p.2 的算式寫成 King + Queen − Man ≈ Woman,這是筆誤。照「A is to B as C is to D」,正確是 D ≈ B − A + C,也就是 Queen − King + Man ≈ Woman。**
p.68 其他幾張圖在說什麼? 公司對 CEO、slow→slower→slowest 這類語法關係,也都有一致的方向;老師說不是每組都完全一樣,但趨勢很接近。 下方是 GloVe 找 frog 最近的字:frogs、toad、litoria、leptodactylidae、rana、lizard、eleutherodactylus。冷門的蛙類學名都抓到了,但第 6 名 lizard 是蜥蜴,又是「鄰居不一定同類」的例子。 老師也提醒:拿這種詞向量做 RAG(先搜資料再交給大語言模型回答),搜 King 找到的鄰居可能跟 King 無關;實務上的 RAG 不會用這麼簡單的向量。
老師原話是什麼? 「我們看的並不是字的向量的絕對的向量的東西,而是一種對比的關係」(0:27:56) 「沒有任何的supervised的Data,完全靠它做Unsupervised的方式的訓練」(0:29:46) 「它附近的向量是不是都跟King有關,其實不盡然」(0:30:12) 「這個就是在你們assignment1要做的事情,但是你可能會發現你的Queen並不會在這個數字的附近的第一個選項」(0:31:12) 考試連結:老師說閉書考試要看你做作業、聽課「到底有catch到什麼樣的insight」(1:48:02),所以這類觀察要能用英文寫出原因。
## [0:32:59](https://www.youtube.com/watch?v=g0QE6O17BWE&t=1979s) 題外話:有了大語言模型還要學這些嗎 電腦學會這些關係後,搜尋就能自動做語意延伸。老師接著談:大語言模型什麼都會,還要學這些嗎?他的看法是要回頭看以前的人怎麼做、遇到什麼痛點、為什麼那樣解,建立「痛點對解法」的對應,才能自己想出新的對應。凡事都問 AI,表現會停在某個程度;學生的貢獻如果只剩下 prompt,就會變成沒有新想法的封閉迴圈。
老師原話是什麼? 「痛點跟solution之間的mapping」(0:34:49) 「凡事就問AI,你永遠就是,雖然你可以到達一定的表現,但是你的表現就會停留在那裡」(0:35:00)
## [0:35:08](https://www.youtube.com/watch?v=g0QE6O17BWE&t=2108s) 更多類比與跨語言對應 p.69 還有:Paris − France + Italy → Rome(首都)、bigger − big + cold → colder(比較級)、Cu − copper + gold → Au(化學符號)。更神奇的是跨語言:英文 horse、cow、pig、dog、cat 和西班牙文 caballo、vaca、cerdo、perro、gato 分別訓練出的向量,分布形狀很像,所以能拿來做翻譯。老師補充,同語系比較像,換成中文這類不同語系就可能不一樣。最後預告:word2vec、GloVe、FastText 出來後這塊就底定了,下一章從語言學的想法講起。 [[IMG: C:\D槽\TAICA課程\_work\notes-v2\nlp-w3\img\w1_nlp_brief_v2_p069.png | p.69:左邊是類比算式與最近的字,右邊是英文和西班牙文動物詞向量的分布,形狀很像]]
它到底怎麼運作?「形狀很像」怎麼拿來翻譯? 兩種語言的向量空間形狀相似,只是整體轉了個角度。做法(Mikolov 等人 2013):用一小批已知對照字(horse↔caballo…)學一個線性轉換 W,讓 W × 英文向量 ≈ 西班牙文向量;遇到新的英文字,算 W × 它的向量,再找最近的西班牙文字。 小例子:若西班牙文空間剛好是英文空間逆時針轉 90 度,W 就是「[x, y] 變成 [−y, x]」。英文某字 [0.2, 0.0] 轉完是 [0.0, 0.2],再去西班牙文空間找最靠近的字。 p.69 表格最後兩列的答案被圖蓋住,投影片上看不到。
## Self-check
Q1. Why can't one-hot vectors capture word similarity? What does a "continuous, distributed representation" mean? **Answer**: In one-hot encoding every different word is orthogonal, so the cosine similarity of any two different words is 0; "cat" is as far from "dog" as from "truck". A continuous representation is real-valued; a distributed representation makes each word a dense vector in a space, so similar words are closer (e.g., cos(dog, cat) = 0.996 vs. cos(dog, truck) = 0.667). 中文重點:one-hot 兩兩垂直、相似度都是 0;實數向量讓相近的字靠近。
Q2. Given king = [0.30, 0.70], man = [0.20, 0.20], woman = [0.60, 0.30], compute king − man + woman. Why does it give "queen", and why might "queen" not rank first with real embeddings? **Answer**: king − man + woman = [0.70, 0.80] = queen, because woman − man equals queen − king ([0.40, 0.10]): the gender relation is a consistent direction. With real embeddings the result is only close to queen; the input words are often nearer and must be excluded, and corpus size, domain, rare words, and polysemy can push other words ahead. 中文重點:看的是相對方向,不是絕對位置;真實向量只有「接近」,Queen 不一定第一。
Q3. According to Bengio et al. (2003), why does a distributed representation help a language model generalize to unseen sentences? **Answer**: Similar words get similar feature vectors, and the probability function is smooth in those features, so a small change in features causes a small change in probability. One training sentence ("The cat is walking in the bedroom") therefore raises the probability of a combinatorial number of similar unseen sentences ("A dog was running in a room"). This fails in unorganized discrete spaces such as one-hot. 中文重點:相似字向量相近+機率函數平滑,一句訓練資料就能推廣到很多沒看過的句子。