[自然語言處理](https://app.notion.com/p/3e6fc631b03081b4a9e8f91f3411f61f) › [W4(10/1)](https://app.notion.com/p/3ecfc631b03081b8aa2cf4a97467ed41) › 04|影片 [0:49:29–1:03:02](https://www.youtube.com/watch?v=7kgOuhuIjvY&t=2969s)|投影片 W2_Word p.39–42|上一章 [03 稠密向量與 Word2Vec(0:30–0:49)](https://app.notion.com/p/3ecfc631b030819f9a0df026aac33ae7)|下一章 [05 神經網路訓練基礎(1:03–1:19)](https://app.notion.com/p/3ecfc631b0308157b691e69c735de4b4) ## 重點 - Word2Vec 這類 static embedding(靜態詞向量:一個字永遠只有一個向量)分不出「蘋果公司」和「吃蘋果」的蘋果,所以需要 contextual embedding(上下文詞向量:同一個字放在不同句子裡,會得到不同向量)。BERT、GPT 都能產生這種向量。 - 如果只有 static embedding,最直覺的修正法是「拿這個字跟旁邊的字算相關性,再調整自己」;這正是之後 attention 機制的核心想法。 - 有了 contextual embedding,就能把整句變成語意表示,再接情緒分類、搜尋、QA 等下游任務;embedding 可以凍結不動(frozen),也可以和下游任務一起訓練(train together),哪個好要自己評估。 ## Exam-ready - **Contextualized embeddings**: "capture the meaning of a word in its context within a sentence or a larger body of text."(W2_Word p.39) - 中文:上下文詞向量會抓住「一個字在這個句子(或更大一段文字)裡」的意思。白話:同一個字的意思,要看它身邊的字才決定。capture(抓住)、body of text(一段文字)。 - **Different representations**: "Contextualized embeddings allows words to have different representations depending on their usage in different contexts."(W2_Word p.39) - 中文:上下文詞向量讓同一個字依照它在不同情境的用法,有不同的表示。白話:「蘋果」在蘋果公司和蘋果派裡會是兩個不同的向量。representation(表示、向量)、usage(用法)。 - **Traditional word embeddings**: "Traditional word embeddings assign a fixed vector to each word."(W2_Word p.39) - 中文:傳統詞向量(例如 Word2Vec)給每個字一個固定的向量。白話:查字典式,一個字一格,不管句子怎麼寫都一樣。assign(指派)、fixed(固定的)。 - **Surrounding words**: "Contextualized embeddings generate a vectors based on the surrounding words."(W2_Word p.39) - 中文:上下文詞向量是根據周圍的字「當場算出」向量。白話:不是查表,是看完整句再生出來。generate(產生)、surrounding(周圍的)。 - **Examples (BERT, GPT)**: "Contextualized embeddings are widely used in various NLP tasks. (e.g., BERT, GPT)"(W2_Word p.39) - 中文:上下文詞向量被廣泛用在各種 NLP 任務,代表模型是 BERT 和 GPT。白話:現在大家用的語言模型,產生的都是這種向量。widely used(廣泛使用)、various(各種)。 - **Long contexts**: "Learn word vectors using long contexts instead of a context window"(W2_Word p.41) - 中文:用很長的上下文來學詞向量,而不是只看一個小窗口。白話:Word2Vec 只看前後幾個字,這裡要看整段。context window(上下文窗口:只看目標字前後固定幾個字)。 - **Deep Neural LM**: "Learn a deep Neural LM and use all its layers in prediction"(W2_Word p.41) - 中文:訓練一個很深的神經網路語言模型,預測時把它每一層的資訊都用上。白話:不只拿最底層的字向量,中間每一層算出來的東西都有用。Neural LM(神經網路語言模型)、layers(層)。 - **Sequence probability, P(w₁…wₙ) = P(w₁)P(w₂|w₁)P(w₃|w₁:₂)…P(wₙ|w₁:ₙ₋₁) = ∏ₖ P(wₖ|w₁:ₖ₋₁)**: "The probability of a sequence becomes:"(W2_Word p.41) - 中文:一整句話出現的機率,等於「每個字在看過它前面所有字之後出現的機率」全部乘起來。白話:一個字一個字接龍,每一步都看前面全部的字。sequence(序列、一串字)、probability(機率)。 - 符號怎麼讀:P(在 | 我) 讀作「已經看到『我』之後,下一個字是『在』的機率」,中間的直線意思是「在已知前面這些字的情況下」;∏ 是「全部乘起來」;w₁:ₖ₋₁ 指第 1 個到第 k−1 個字,也就是目前這個字前面的全部字。(第 3 週學過:語言模型就是算「一句話有多像人話」的機率,見 [07 語言模型定義與困惑度](https://app.notion.com/p/3e6fc631b03081b4b99acb876fd0bb2d)) - **Embedding as part of the model**: "The embedding is designed to be a part of the model."(W2_Word p.42) - 中文:embedding 被設計成模型的一部分。白話:字向量不是外掛的字典,而是模型裡一塊可以訓練的零件。be designed to(被設計成)。 - **Adjusted by downstream task**: "When the downstream task provides a preferred context, it can be adjusted during the training process, incorporating the relevant information from the task context."(W2_Word p.42) - 中文:當下游任務有它偏好的情境時,embedding 可以在訓練過程中被調整,把任務情境裡的相關資訊吸收進來。白話:拿醫療資料訓練時,字向量也會被改得更懂醫療用語。downstream task(下游任務:真正要做的應用,例如分類)、incorporate(納入)。 ## [0:49:29](https://www.youtube.com/watch?v=7kgOuhuIjvY&t=2969s) 為什麼需要 contextual embedding Word2Vec 給每個字一個固定向量,用久了大家發現它有時不好用,有時甚至是錯的。例如「我在蘋果公司吃蘋果」,兩個蘋果意思完全不同,卻只能共用一個向量。contextual embedding 的目標是讓同一個字隨著前後文得到不同表示。 為什麼 Word2Vec 那時不直接這樣做?老師說大家當時就想這樣做,只是做不到;從 Word2Vec 一路到 transformer,整條路就是在往這個方向走。 考試可能怎麼問:解釋 static 和 contextual embedding 的差別,並舉一個例子。
要先懂什麼? - 詞向量(word embedding):把一個字變成一串數字,讓電腦能算「哪些字意思接近」。(第 3 週學過:意思相近的字,向量也會靠得近,見 [01 詞向量的起源與類比](https://app.notion.com/p/3e6fc631b0308169a5ebc6aa047ff58d)) - Word2Vec:一種學詞向量的方法,看一個字前後幾個字來學它的向量;學完之後,每個字就固定只有一個向量。(上一章 [03 稠密向量與 Word2Vec](https://app.notion.com/p/3ecfc631b030819f9a0df026aac33ae7) 和第 3 週 [03 word2vec 的訓練方式](https://app.notion.com/p/3e6fc631b03081f1b4bfe71efbd2cd7a) 都講過) - transformer:現在主流的神經網路架構,BERT、GPT 都是用它做的;它的核心就是本章後面會講到的 attention。之後的課會細講。
用生活例子講,static 和 contextual 差在哪? static embedding 像一本「一個字只有一條解釋」的小字典:查「蘋果」永遠得到水果。contextual embedding 像一個會看上下文的翻譯人員:聽到「蘋果公司」就知道是科技公司,聽到「削蘋果」就知道是水果。
老師原話是什麼? - 「如果是一個 static 的角色的時候,它就有時候不是這麼好用,或者根本是不對的東西。」(0:49:45) - 「同樣一句話裡面的兩個蘋果,這概念本來就是不一樣,它應該用不同的向量的字來表示。」(0:50:37)
## [0:50:46](https://www.youtube.com/watch?v=7kgOuhuIjvY&t=3046s) BERT、GPT 與上下文的影響 contextual embedding 後來帶出最重要的技術 BERT(以 transformer 為基礎的 encoder,編碼器:把整句讀進來變成向量)。GPT 是 decoder(解碼器:一個字一個字往後生成),但它算出來的向量一樣能當 contextual embedding 用。 老師用下面這張投影片說明「上下文會改變意思」: [[IMG: C:\D槽\TAICA課程\_work\notes-v2\nlp-w4\img\w2_word_embeddings_and_language_modeling_rnn_p040.png | 左:一隻狗被欄杆影子照出斑紋,影像辨識器看不到頭,把牠認成老虎;右:蘋果公司 vs 蘋果派、同一句「蘋果改變了他的一生」接牛頓或賈伯斯,蘋果的意思就不同]] 圖上重點: - 標題 Word context:字的上下文(一個字身邊的其他字)。 - 左上 "Artificial intelligence is the future" / "Also AI:":「人工智慧是未來」/「但 AI 實際上是這樣:」,是一則網路玩笑。 - 綠框 Tiger:影像辨識器判斷這是「老虎」;箭頭 Context:上下文,這裡指欄杆的影子。 - 右邊四格是中文例子:蘋果+公司、蘋果+派;「蘋果改變了他的一生」後面接牛頓或賈伯斯。 - 這張圖在講:同一個東西(那隻狗、那個「蘋果」),會被周圍的東西影響,意思就被看成不一樣。 左邊那隻其實是拉不拉多,欄杆影子(context)讓牠看起來有老虎斑紋。右邊同理:後面接牛頓,蘋果是那顆掉下來的水果;接賈伯斯,蘋果是公司。 為什麼用 static embedding 有時效果也不差?老師說向量有那麼多維度,裡面應該也有一些相似的成分,所以效果不一定很差;只是同一個字在不同句子裡還是同一個向量。 維度(dimension)就是向量裡有幾個數字。一個詞向量常有幾百個數字,每個數字各抓一點點意思,所以就算「蘋果」只有一個向量,裡面也可能同時混著水果和公司兩種成分(我補充)。 考試可能怎麼問:BERT 和 GPT 架構不同(encoder vs decoder),為什麼都能產生 contextual embedding? 下面的進階摺疊是老師建議的小實驗:拿同一句話裡兩個「蘋果」的向量來比有多像。它要證明的是:如果比出來不是完全一樣,就代表 BERT 真的會依上下文給同一個字不同的向量。
它到底怎麼運作?(進階,可跳過) 老師建議的小實驗:把「我在蘋果公司吃蘋果」丟進 BERT,取出兩個「蘋果」位置的輸出向量,算 cosine similarity(餘弦相似度:兩個向量方向有多接近,1 是完全一樣)。 - 如果是 Word2Vec,兩個蘋果是同一個向量,相似度一定是 1。 - 換成 BERT,兩個蘋果的向量不同,相似度會小於 1(我補充)。老師說「你就會發現好像有一點故事」(0:52:30)。 這就是 contextual 的直接證據:同一個字、同一句話,向量卻不一樣。
## [0:53:03](https://www.youtube.com/watch?v=7kgOuhuIjvY&t=3183s) 只用 static embedding 會怎麼做 老師出了一題思考題:如果沒有 BERT,只有每個字的 static 向量,你會怎麼讓「蘋果」變得跟上下文有關?最自然的答案是:拿蘋果跟句子裡其他字算相似度,看看旁邊是誰,再據此調整蘋果自己的向量。 這個想法就是 attention 機制(注意力機制:每個字依照和其他字的相關程度,決定要參考誰多一點)。下面這張圖是它的步驟: ```mermaid flowchart LR A["蘋果的 static 向量"] --> B["和句子裡每個字算相關性"] B --> C["相關性變成權重"] C --> D["依權重混合其他字的資訊"] D --> E["更新後的蘋果向量"] E --> F["下一層再看一次別人變成什麼"] F --> B ``` 為什麼要一層一層重複?因為別的字也在同時更新,「公司」看過蘋果之後也變了,所以下一層要再看一次大家的新樣子,再學一次。老師說之後學到 self-attention 時,你會發現《Attention Is All You Need》寫的就是你現在想到的東西。 名詞白話:權重就是「要參考誰多少」的比例,加起來等於 1;self-attention(自注意力)是句子裡每個字都去看同一句的其他字;《Attention Is All You Need》是 2017 年提出 transformer 的那篇論文。 考試可能怎麼問:用文字描述,如果只有 static embedding,要怎麼讓一個字的表示跟上下文有關? 下面的進階摺疊用三個很小的數字向量,實際做一次「看鄰居、再調整自己」。算出來代表的是:同一個「蘋果」在「蘋果公司」裡往公司那邊偏、在「蘋果派」裡往派那邊偏,也就是變成跟上下文有關的向量。
用生活例子講,attention 在做什麼? 像剛進一個新團隊的人:先看看身邊每個人是誰、跟自己多相關,相關的人說的話多聽一點,然後調整自己的定位。下一週大家也都調整過了,你再重新看一次、再調整一次。
它到底怎麼運作?(進階,可跳過) 用三個 2 維 static 向量跑一次(數字是我補充的示範):蘋果 = (1, 1)、公司 = (2, 0)、派 = (0, 2)。 1. 句子「蘋果公司」:蘋果和自己的內積 = 2,和公司的內積 = 2。權重各一半(0.5、0.5)。 2. 新的蘋果 = 0.5 × (1, 1) + 0.5 × (2, 0) = (1.5, 0.5),往「公司」那一邊偏。 3. 換成「蘋果派」:權重同樣各一半,新的蘋果 = 0.5 × (1, 1) + 0.5 × (0, 2) = (0.5, 1.5),往「派」那一邊偏。 同一個 static 蘋果 (1, 1),經過一次「看鄰居再調整」,在兩個句子裡變成兩個不同向量。真正的 attention 會再用 Q、K、V 三組可學的矩陣和 softmax 算權重,但精神就是這樣。 名詞白話:內積是兩個向量「對應位置相乘再加起來」,數字越大代表兩個字越相關;softmax 是把一排分數變成加起來等於 1 的權重;Q、K、V(query、key、value)是每個字拿來「發問」「被比對」「提供內容」的三個版本向量,之後講 transformer 時會細講。
老師原話是什麼? 「每過一層我都要再去看看別人變成什麼樣子,然後再學,所以他就是不斷看別人變成什麼,然後再學新的東西,所以 attention 機制就是這樣出來的。」(0:54:10)
## [0:55:04](https://www.youtube.com/watch?v=7kgOuhuIjvY&t=3304s) Long context 語言模型 以前做 contextual word embedding,最直覺的方法是把語言模型的 context 拉長:一個字出現的機率,跟它前面所有的字有關。投影片 p.41 的式子就是這個意思:整句的機率 = 每個字在「看過前面全部的字」之後的機率連乘。 要先知道:語言模型(language model)就是「猜下一個字」的模型,它會算一句話出現的機率,越像人話機率越高。(第 3 週學過:N-gram 只看前面 1–2 個字來猜下一個字,見 [06 N-gram 語言模型](https://app.notion.com/p/3e6fc631b03081588140d7f6a95e5bb4);這裡的 long context 就是把「前面幾個字」拉長成「前面全部的字」。) 投影片另一個做法是訓練一個很深的神經網路語言模型,預測時把它每一層的輸出都用上,不只用最底層的字向量。 但這樣只看前文。一個字的意思其實也跟後面的字有關,就像聽人講話,聽到一半以為是 A 意思,聽完整句才發現是 B。所以只用前文算出的機率會有一點 bias(偏差)。 注意:老師口頭說的是 perplexity,這裡指的是機率(probability)。 考試可能怎麼問:為什麼只依賴前文(left context)的語言模型,對字義的判斷會有偏差? 下面的進階摺疊用幾個假數字把整句機率真的乘一次。重點不在算出來的數字,而是讓你看到:算到「蘋果」那一步時,模型還沒看到後面的「公司」,所以猜不出是哪一種蘋果。
它到底怎麼運作?(進階,可跳過) 沿用「我 在 蘋果 公司」,用 p.41 的連乘式算整句機率(數字是我補充的示範): - P(我) = 0.1 - P(在 | 我) = 0.3 - P(蘋果 | 我 在) = 0.05 - P(公司 | 我 在 蘋果) = 0.4 整句機率 = 0.1 × 0.3 × 0.05 × 0.4 = 0.0006。 問題出在第三步:算「蘋果」時模型還沒看到「公司」,所以它不知道這裡的蘋果是公司還是水果。後面的字幫不上前面的字,這就是老師說的 bias。BERT 這類 encoder 會同時看前後文,就是在解決這件事(我補充)。
## [0:55:59](https://www.youtube.com/watch?v=7kgOuhuIjvY&t=3359s) 統計 vs 模型學習 以前用統計(數字詞一起出現的次數)來學上下文,後來發現三個問題:語料不夠多、計算量非常恐怖、資料太 sparse(稀疏:大多數字的組合從沒出現過,計數是 0)。所以改讓模型來學。 名詞白話:語料(corpus)是拿來訓練的大量文字;Naive Bayes(樸素貝氏)是一種分類方法,數每個字在各類別裡出現幾次,直接用次數算出「這句屬於哪一類」的機率;NN(neural network,神經網路)是由一層層可調整的數字組成的模型,靠訓練自己找出規律,下一章會講。 統計和模型學習差在哪?老師要大家拿 Naive Bayes 和 NN 來對比: | | 統計(例:Naive Bayes) | 模型學習(例:NN) | |---|---|---| | 怎麼得到答案 | 數以前發生過的次數,直接算機率 | 用資料訓練參數 | | 沒看過的組合 | 統計上是 0,說不出東西 | 能延伸出統計看不到的模式 | | 缺點 | 語料少就失準,組合太多太稀疏 | 延伸出來的不一定對 | | 老師的評價 | 只靠過去的紀錄 | 通常有助於延伸你的訓練資料 | 為什麼模型能「延伸」?因為它學的是規律,不是逐條背紀錄。看過「吃蘋果」「吃香蕉」,就算沒看過「吃芭樂」,也能推測它合理。 表裡的「參數」是模型裡面可以調整的數字;「訓練」就是一直調這些數字,讓模型答得越來越準。 注意:老師說 Naive Bayes 是 lazy learner、「不用學」。嚴格說 Naive Bayes 還是有一個「數次數」的訓練步驟,lazy learner 通常指 KNN 這類把所有資料存起來、要預測時才比對的方法(我補充)。老師要強調的是:它只靠過去的統計,不會延伸。 KNN(K-nearest neighbors,K 最近鄰):要預測時,找出跟它最像的 K 筆舊資料,看它們多數是哪一類,就猜那一類。 考試可能怎麼問:比較統計式(count-based)和神經網路式(learning-based)語言模型的差別,為什麼後者比較好?
用生活例子講,統計和學習差在哪? 統計像只會翻歷史紀錄的店員:客人問「這兩樣一起買過嗎」,紀錄沒有就答不出來。模型學習像有經驗的店員:沒看過這個組合,但知道這類客人通常喜歡什麼,能推薦得出來,雖然偶爾會猜錯。
老師原話是什麼? 「第一個語料沒那麼多,第二個這個計算其實也是非常恐怖的,而且有很高的 sparsity,所以我們就讓模型來學。」(0:56:06)
## [0:58:21](https://www.youtube.com/watch?v=7kgOuhuIjvY&t=3501s) Embedding 接下游任務 先不管 contextual embedding 怎麼學,假設已經有了:一句話進來,就能轉成電腦看得懂、而且懂整句的語意表示。接著就能在後面接各種判斷,這就是現在 LLM 的基本架構。 ```mermaid flowchart LR A["一句話"] --> B["預訓練 embedding"] B --> C["編碼層(encoder)"] C --> D["整句語意表示"] D --> E["情緒分數"] D --> F["相似度、搜尋"] D --> G["問答 QA"] ``` 為什麼要動前面的 embedding?embedding 通常是用一般語料預訓練的。如果要做醫療應用,裡面全是醫療用語,就可以拿醫療語料去更新 embedding,讓它懂新領域的字。這跟拿預訓練語言模型接下游任務做 fine-tune(微調:在別人訓練好的模型上,用自己的資料再訓練一點)是同一個精神。 為什麼不自己從頭訓練 embedding?因為不太可能有那麼大的語料庫,所以一律先拿預訓練好的,再用自己領域的新語料調整。 考試可能怎麼問:預訓練好的 embedding 遇到新領域(例如醫療)時,可以怎麼處理?
要先懂什麼? - 下游任務(downstream task):真正要做的應用,例如情緒分類、問答。相對地,「上游」是預訓練。 - 反向傳播(backpropagation:把下游任務的錯誤一層層往回傳,告訴前面每個參數要怎麼改):embedding 和後面的層如果都是神經網路,錯誤就能一路傳回 embedding,讓它也一起被改。這就是 embedding 能「被下游任務調整」的原因。之後會再講。 - 預訓練(pretrain):別人先用超大量的一般文章把模型或 embedding 訓練好,你直接拿來用。 - LLM(large language model,大型語言模型):像 ChatGPT 這種參數非常多、用大量文字預訓練過的語言模型。 - 語意表示(semantic representation):把一句話的意思變成一串數字,讓電腦能拿來比較、分類。
老師原話是什麼? 「我如何讓這個有點改變,又不會把它變爛這樣子,所以這個 embedding 的這樣的 co-training 其實是一個這樣的精神。」(1:01:08)
## [1:01:19](https://www.youtube.com/watch?v=7kgOuhuIjvY&t=3679s) 凍結還是一起訓練 embedding 接下游任務時有兩個選擇:frozen(凍結:embedding 的參數完全不動,只訓練後面)或 train together(一起訓練:embedding 跟著下游任務一起更新)。投影片把這個問題直接標在架構圖上: [[IMG: C:\D槽\TAICA課程\_work\notes-v2\nlp-w4\img\w2_word_embeddings_and_language_modeling_rnn_p042.png | 輸入先經過 Embedding,再進 LM Layers,整個虛線框是一個神經網路;Embedding 下方問的是要凍結還是一起訓練(投影片拼成 forzen,應為 frozen)]] 圖上重點: - 上面兩句英文就是 Exam-ready 最後兩句:embedding 是模型的一部分;下游任務可以在訓練時調整它。 - Inputs → Embedding → LM Layers:輸入的字先變成詞向量,再送進語言模型的各層(LM Layers)。 - 虛線框 Neural Network Architecture(神經網路架構):整個框是同一個神經網路,所以錯誤可以一路傳回 Embedding。 - 紅字 forzen? train together?:Embedding 要凍結,還是一起訓練? - 這張圖在講:embedding 不是外掛,而是神經網路的第一塊,所以才有「要不要讓它跟著改」的選擇。 老師提到,現在拿預訓練模型當 contextual embedding,幾 B(十億)參數都不算大;但七、八年前,BERT 對他們來說已經是龐然大物。他分享當年參加一個偵測句子性別偏見(gender bias)的比賽:大家都用 BERT,他們也用,但因為算力不夠、訓練不動,只好把 BERT 凍結。結果成績還不錯,拿到第二名,其他隊伍反而很好奇「為什麼不 tune BERT」。 為什麼不一律一起訓練?因為一起訓練有時比較好,但也可能把原本學好的 embedding 練壞,所以要自己評估。 考試可能怎麼問:比較 frozen 和 train together 兩種做法的優缺點。 下面的進階摺疊把兩種做法的代價並排:凍結省算力、不會練壞,但不太懂新領域;一起訓練能學新領域,但吃算力,資料少時還可能練壞。
用生活例子講,凍結和一起訓練差在哪? 像請來一位資深翻譯(預訓練 embedding)幫你的醫療團隊。凍結=翻譯照他原本的習慣翻,你只訓練團隊怎麼用他的翻譯;一起訓練=也讓翻譯學醫療用語。後者可能翻得更準,但如果醫療資料太少又練太兇,他可能連原本會的都翻壞了。
它到底怎麼運作?(進階,可跳過) 兩者的差別(我補充的整理): - Frozen:只更新下游層的參數,算力與記憶體需求小;缺點是對新領域適應較弱,新領域的字可能表示得不好。 - Train together:embedding 和下游層一起更新,BERT 整顆都要算梯度,算力需求大;優點是能學到新領域的意思,風險是資料少時容易把 embedding 練壞。 梯度(gradient):告訴每個參數「往哪個方向改、改多少」的數字。要算梯度的參數越多,就越吃算力和記憶體。
老師原話是什麼? 「重點是有時候你 train together 也會比較好,你只會把他搞爛而已,這樣子所以也是要評估一下。」(1:02:53) 老師的意思是:一起訓練有時比較好,有時反而只會把模型練壞。
## Self-check
Q1. What is the difference between traditional (static) word embeddings and contextualized embeddings? Give an example.(中文:傳統靜態詞向量和上下文詞向量有什麼不同?請舉例。) **Answer**: Traditional word embeddings such as Word2Vec assign a fixed vector to each word, no matter where it appears. Contextualized embeddings generate a vector based on the surrounding words, so the same word can have different representations in different contexts. For example, in "I eat an apple at Apple Inc.", the two "apples" should get different vectors; BERT and GPT produce such embeddings. 中文:傳統詞向量(像 Word2Vec)給每個字一個固定向量,不管它出現在哪個句子都一樣。上下文詞向量則根據周圍的字當場產生向量,所以同一個字在不同句子裡會有不同表示。例如「我在蘋果公司吃蘋果」,兩個蘋果意思不同,應該要有不同向量;BERT 和 GPT 產生的就是這種向量。
Q2. If you only had static embeddings, how could you make a word's representation depend on its context? How does this relate to attention?(中文:如果只有靜態詞向量,要怎麼讓一個字的表示跟上下文有關?這跟 attention 有什麼關係?) **Answer**: Compute how related the word is to every other word in the sentence (for example, by similarity), turn these scores into weights, and update the word's vector by mixing in information from the related words. Repeat this layer by layer, since the other words are also being updated. This is exactly the idea behind the attention mechanism in transformers. 中文:拿這個字跟句子裡每個字算相關性(例如相似度),把相關性變成權重,再依權重把相關字的資訊混進來,更新自己的向量。因為其他字也同時在更新,所以要一層一層重複做。這就是 transformer 裡 attention 機制的核心想法。
Q3. Why does a language model that only conditions on previous words give a biased view of a word's meaning?(中文:為什麼只依據前文的語言模型,對字義的判斷會有偏差?) **Answer**: In P(w1...wn) = ∏ P(wk | w1:k-1), each word is predicted only from the words before it. But a word's meaning can also depend on the words after it; for "Apple" in "Apple company", the word "company" comes later. Using only the left context ignores this information, so the probability (and the meaning) is biased. 中文:在連乘式裡,每個字只根據它前面的字來預測。但一個字的意思也可能取決於後面的字,例如「蘋果公司」的蘋果,要看到後面的「公司」才知道是公司。只看前文就漏掉這些資訊,所以算出的機率和判斷的意思會有偏差。
Q4. Compare freezing the embedding and training it together with the downstream task.(中文:比較凍結 embedding 和跟下游任務一起訓練這兩種做法。) **Answer**: Freezing keeps the pretrained embedding fixed and trains only the downstream layers; it needs less computation and keeps the general knowledge safe, but it adapts less to a new domain. Training together updates the embedding with the task data, so it can learn domain-specific meanings (e.g., medical terms), but it costs more computation and may damage the pretrained embedding. The choice should be evaluated case by case. 中文:凍結是預訓練 embedding 不動、只訓練後面的下游層,算力需求小、原本學到的通用知識不會被破壞,但對新領域的適應較弱。一起訓練是讓 embedding 也跟著任務資料更新,能學到領域專屬的意思(例如醫療用語),但算力成本高,也可能把預訓練好的 embedding 練壞。要依情況評估選哪一種。
讀完了嗎?下一章:[05 神經網路訓練基礎(1:03–1:19)](https://app.notion.com/p/3ecfc631b0308157b691e69c735de4b4)|回到週頁:[W4(10/1)](https://app.notion.com/p/3ecfc631b03081b8aa2cf4a97467ed41)