# Self-Supervised Learning & Bert ## 基本概念 ![Screenshot_20240205_154850](https://hackmd.io/_uploads/BJygmG096.png) 以往都是 Supervised Learning,需要許多有標註的成對資料(如左圖) Self-Supervised 可以將未標注的資料拆成兩部份,將一部分丟入 Model 中,要求 Model 的輸出要跟另一部分越接近越好 以下會用 Bert 這個模型當作例子說明: 註:Bert 架構與 Transformer 的 Encoder 相同,常用於自然語言處理 ![Screenshot_20240205_155743](https://hackmd.io/_uploads/rJBbrG0cp.png) 將輸入的 Sequence 隨機遮住一個些字,並要求 Model 輸出與真實答案越相近越好 (輸出會是文字的機率分佈,所以要 Minimize Cross Entrophy) 同時,有兩種方法可以蓋住字: * 換成一個代表 Mask 的 Special Token * 隨便換成字典裡的其他字 也是隨機決定要用哪一種方法 ![Screenshot_20240205_155946](https://hackmd.io/_uploads/ByRuHzCc6.png) Self-Supervised 訓練完後,Bert 就是一個會做文字填空題的模型 神奇的是,除了訓練時學會的填空問題,給 Bert 一些有標註的資料來進行微調(Fine-Tune)後,就可以拿來做其他任務 這些其他的任務通常才是我們在意的,稱為 Downstream Tasks 而訓練 Bert 做填空問題的這個步驟稱為 Pre-train ![Screenshot_20240205_161441](https://hackmd.io/_uploads/BykZtzAq6.png) ## Bert 的用法 ### Case 1:輸入 Sequence 分類 例如:語句情感分析(正面 / 負面) ![Screenshot_20240205_163623](https://hackmd.io/_uploads/B1rGCMC5a.png) Bert (encoder) 使用 Pretrained,僅有 Linear 層隨機初始化來進行調整 得到的結果會比完全隨機初始化還要好 ### Case 2:Seq-2-seq, same length ![Screenshot_20240205_164746](https://hackmd.io/_uploads/SkC2lQ05T.png) ### Case 3:Input 2 Sequence, Output Class 例如:分析兩個句子是否矛盾 ![Screenshot_20240205_164930](https://hackmd.io/_uploads/BJr7ZQ0qp.png) 實際上操作起來應該像是這樣: ![Screenshot_20240206_153241](https://hackmd.io/_uploads/B1VieDysa.png) ### Case 4:抽取文章中閱讀測驗答案(作業7) ![Screenshot_20240206_153433](https://hackmd.io/_uploads/r1NGZP1sa.png) 輸出兩個正整數 s 和 e,代表在文章中 Start 和 End 的位置 更具體一點:將問題和文章丟進 Bert,中間用特殊符號分開 並 Random Initialize 兩個向量(橘色和藍色),橘色負責計算開始位置,藍色則是結束位置 分別將橘色向量、藍色向量與 Bert 的輸出做 Inner Product 並通過 Softmax 就會得到信心分數,最高的即是開始與結束的位置 ![Screenshot_20240206_153631](https://hackmd.io/_uploads/r1oY-vysT.png) 以上圖為例,跟橘色向量做內積以後,得到分數最高的在文章中第二個字,所以 s = 2 而與藍色向量做內積後,分數最高的是文章中第三個字,e = 3 ![Screenshot_20240206_154120](https://hackmd.io/_uploads/Hyiozw1o6.png) ## 為什麼 Bert 可以這樣用? ![Screenshot_20240206_161106](https://hackmd.io/_uploads/B1BoFwkjp.png) Bert 架構就是 Transformer 的 Encoder 其 Encode 出來的東西稱為 Enbedding(或 Code) 其中已經包含語意的資訊,意思越相近的字會有越相近的 Embedding 而且因為有 Self-Attention 考慮前後文,所以也可以處理一字多義的情況 ## Multi-ligual Bert 訓練時要求模型以各種語言做填空題: ![Screenshot_20240206_165656](https://hackmd.io/_uploads/rkVPEOys6.png) 神奇的是,事後只要以一種語言進行 Fine-tune 成用來做 Downstream Task 的模型 該模型可以自動適應 Fine-tune 時沒看過、但 Pre-train 時學過的語言: ![Screenshot_20240206_170203](https://hackmd.io/_uploads/S1U9B_JoT.png) 上圖中,以 104 種語言 pre-train,以 English 進行 Fine-tune,最後 Test 在中文閱讀測驗資料集 最後也可以達到 78.8% 正確率,比 Non-pretarin + Chinese Fine-tune 還要好 而表現最好的是 104 種語言 pre-train,English + Chinese Fine-tune ![Screenshot_20240207_092026](https://hackmd.io/_uploads/BJLkoIeiT.png) 不同語言、相近意義的字也會有相近的 Alignment 而且 Embedding 中還包含了語言資訊