back to index

【機器學習2021】自督導式學習 (Self-supervised Learning) (三) – BERT的奇聞軼事


link |
00:01.000
好,接下來就是要回答剛才同學的問題
link |
00:04.000
為什麼BERT有用呢?
link |
00:06.000
那我們這邊呢
link |
00:08.000
先提供一個最常見的解釋方法
link |
00:12.000
最常見的解釋是這個樣子
link |
00:14.000
這個輸入一串文字
link |
00:17.000
每一個文字接下來都有一個對應的向量
link |
00:20.000
這個向量我們接下來叫它embedding
link |
00:24.000
那這個向量有什麼特別的地方?
link |
00:26.000
它特別的地方是
link |
00:27.000
這些向量代表了輸入的那個字的意思
link |
00:31.000
比如說輸入臺灣大學輸出四個向量
link |
00:34.000
這四個向量分別就代表
link |
00:36.000
臺還有灣還有大還有學的意思
link |
00:40.000
那什麼叫做代表意思呢?
link |
00:42.000
更具體而言是
link |
00:43.000
假設你把這些字對應的向量
link |
00:46.000
把它畫出來
link |
00:48.000
或算它們之間的距離
link |
00:50.000
你會發現說
link |
00:51.000
越意思越相近的字
link |
00:55.000
它們的向量就越接近
link |
00:57.000
比如說果跟草都是植物
link |
00:59.000
它們的向量就比較接近
link |
01:00.000
那這個例子是假的
link |
01:01.000
等一下給你看一個真實的例子
link |
01:05.000
鳥跟魚都是動物也許比較接近
link |
01:07.000
那電不是動物也不是植物
link |
01:09.000
所以比較遠
link |
01:10.000
那你可能會問說
link |
01:11.000
這個中文有一字多義的問題啊
link |
01:14.000
其實不是中文
link |
01:15.000
很多語言都有一字多義的問題啊
link |
01:17.000
BERT它可以考慮上下文
link |
01:20.000
所以同一個字
link |
01:22.000
比如說都是果這個字
link |
01:24.000
它的上下文不同
link |
01:26.000
它的向量是不會一樣的
link |
01:29.000
所以吃蘋果的果
link |
01:31.000
跟蘋果手機的果
link |
01:33.000
這兩個果通通都是果
link |
01:35.000
但是根據上下文
link |
01:37.000
它的意思不同
link |
01:38.000
所以它的向量
link |
01:39.000
它對應的embedding
link |
01:41.000
就會非常不一樣
link |
01:43.000
吃蘋果的果可能跟草比較接近
link |
01:45.000
蘋果手機的果
link |
01:46.000
可能就跟電比較接近
link |
01:48.000
BERT真的可以做到這件事嗎?
link |
01:50.000
這邊只是一個胡亂畫的例子
link |
01:54.000
那接下來就給你看真正的例子
link |
01:57.000
假設我們現在就考慮果這個字
link |
02:01.000
那我們就收集很多
link |
02:03.000
有提到果這個字的句子
link |
02:05.000
比如說
link |
02:06.000
喝蘋果吃啊
link |
02:07.000
蘋果電腦啊
link |
02:08.000
等等
link |
02:09.000
那我們把這些句子
link |
02:10.000
都丟到BERT裡面
link |
02:14.000
接下來我們再去計算
link |
02:16.000
每一個果
link |
02:17.000
它所對應的這個embedding
link |
02:19.000
就喝蘋果汁丟進去
link |
02:21.000
果有一個向量
link |
02:22.000
蘋果電腦的果有一個向量
link |
02:23.000
這兩個向量不會一樣
link |
02:25.000
為什麼不會一樣
link |
02:26.000
因為這是一個
link |
02:29.000
這是一個encoder
link |
02:31.000
裡面有self-attention
link |
02:33.000
所以根據果上下文的不同
link |
02:35.000
果上下文的不同
link |
02:36.000
得到的向量會不一樣
link |
02:38.000
接下來我們計算
link |
02:39.000
這些果之間的cosine similarity
link |
02:42.000
就是計算它的相似度
link |
02:44.000
得到的結果是這個樣子
link |
02:47.000
這邊選了十個句子
link |
02:49.000
前五個句子裡面的果
link |
02:51.000
都代表了可以吃的蘋果
link |
02:53.000
比如說
link |
02:54.000
這第一個句子是
link |
02:55.000
今天買了蘋果來吃
link |
02:56.000
第二個句子是
link |
02:57.000
進口富士蘋果
link |
02:58.000
平均每公斤多少
link |
02:59.000
第三個句子是
link |
03:00.000
蘋果茶真難喝
link |
03:01.000
第四個句子是
link |
03:02.000
智利的蘋果季節將來到
link |
03:04.000
第五個句子是
link |
03:05.000
進口蘋果怎樣怎樣
link |
03:07.000
所以這五個句子
link |
03:08.000
都有提到果
link |
03:09.000
接下來五個句子
link |
03:10.000
也都有提到果
link |
03:11.000
但他們指的是蘋果電腦的果
link |
03:13.000
比如蘋果即將在下個月
link |
03:14.000
發表新款iPhone
link |
03:16.000
蘋果獲得新的專利
link |
03:17.000
今天買了蘋果手機
link |
03:18.000
蘋果股價跌了
link |
03:19.000
蘋果押寶
link |
03:20.000
指紋辨識技術等等
link |
03:22.000
這邊有十個果
link |
03:23.000
兩兩之間去算相似度
link |
03:26.000
你會得到一個
link |
03:27.000
十乘以十的矩陣
link |
03:29.000
這裡每一格就代表兩個果
link |
03:32.000
他們的embedding
link |
03:33.000
之間的相似度
link |
03:35.000
那你會發現說
link |
03:36.000
前五個句子裡面的果
link |
03:38.000
這邊這個質越偏黃色
link |
03:40.000
就代表算出來質越大
link |
03:42.000
所以自己跟自己算相似度
link |
03:43.000
一定是最大的
link |
03:44.000
自己跟別人
link |
03:45.000
一定稍微小一點
link |
03:46.000
前五個果算相似度比較高
link |
03:50.000
後五個果算相似度比較高
link |
03:52.000
但前五個果跟後五個果
link |
03:54.000
前五個果跟後五個果
link |
03:56.000
相似度就比較低
link |
03:58.000
Bert自己知道說
link |
03:59.000
前五個果指的是可以吃的蘋果
link |
04:02.000
他們比較像
link |
04:03.000
後五個果指的是蘋果電腦的果
link |
04:05.000
所以他們比較像
link |
04:06.000
但這兩堆果
link |
04:08.000
他們的意思是不一樣的
link |
04:12.000
所以Bert的這些相量
link |
04:15.000
輸出來的相量
link |
04:16.000
每一個相量
link |
04:17.000
就代表了那個字的意思
link |
04:20.000
所以我們也許可以說
link |
04:21.000
這個Bert在訓練
link |
04:23.000
做填空題的過程中
link |
04:25.000
他學會了每一個中文字
link |
04:28.000
他有什麼樣的意思
link |
04:29.000
他也許真的了解中文的意思了
link |
04:31.000
對他來說
link |
04:32.000
每個中文的符號
link |
04:33.000
不再是沒有關係的
link |
04:34.000
他了解中文的意思
link |
04:35.000
所以他可以在接下來的任務
link |
04:37.000
做得更好
link |
04:39.000
那你接下來可能會問的問題就是
link |
04:41.000
Bert為什麼有這樣子神奇的能力呢
link |
04:44.000
為什麼他可以做到
link |
04:46.000
為什麼他可以做到說
link |
04:49.000
他的這個輸出的這些相量
link |
04:51.000
就代表輸入的那個字的意思呢
link |
04:54.000
那這邊呢
link |
04:55.000
基於一個語言學的假設
link |
04:57.000
那這個John Roper Firth
link |
05:00.000
是1960年代的一個語言學家
link |
05:03.000
他那時候說
link |
05:04.000
我們怎麼知道一個詞彙的意思呢
link |
05:06.000
我們要了解一個詞彙
link |
05:07.000
要看他的company
link |
05:10.000
就是跟他常常一起出現的詞彙
link |
05:13.000
也就是他的上下文
link |
05:15.000
一個詞彙的意思
link |
05:16.000
取決於他的上下文
link |
05:19.000
所以假設可以吃的蘋果的果
link |
05:22.000
他的上下文常常出現的是
link |
05:24.000
吃啊
link |
05:25.000
或者是樹啊
link |
05:26.000
等等
link |
05:27.000
那他可能指的就是
link |
05:28.000
可以吃的那個蘋果
link |
05:29.000
那如果是蘋果電腦的果
link |
05:31.000
他後面常常接電啊
link |
05:32.000
接專利啊
link |
05:33.000
接股價啊
link |
05:34.000
那他指的可能就是蘋果電腦的果
link |
05:37.000
這一個詞彙的意思
link |
05:38.000
可以從他的上下文看出來
link |
05:41.000
而Bert在做的事情
link |
05:42.000
在學會做填空題的過程中
link |
05:45.000
也許他在學的
link |
05:47.000
就是從上下文去抽取資訊
link |
05:50.000
因為我們在訓練Bert的時候
link |
05:52.000
你給他W1 W2 W3 W4
link |
05:55.000
你就把W2遮起來
link |
05:57.000
叫他去預測W2
link |
05:58.000
他怎麼預測W2
link |
06:00.000
他就是看他的上下文嘛
link |
06:02.000
所以他就從上下文
link |
06:03.000
去抽取出資訊來預測W2
link |
06:06.000
所以這個項量
link |
06:08.000
他就是上下文資訊裡面
link |
06:09.000
抽取出來的精華
link |
06:11.000
然後可以預測W2是什麼
link |
06:14.000
那像這樣子的想法
link |
06:16.000
其實在Bert之前
link |
06:18.000
就已經有了
link |
06:20.000
過去有一個技術
link |
06:21.000
叫Wei Embedded
link |
06:22.000
Wei Embedded
link |
06:23.000
裡面有一個技術叫做SIBO
link |
06:25.000
SIBO做的事情
link |
06:26.000
跟Bert其實一模一樣
link |
06:28.000
就是把中間挖空
link |
06:29.000
叫你預測空白的地方
link |
06:32.000
是什麼東西
link |
06:34.000
那SIBO這種技術啊
link |
06:35.000
這種Wei Embedded的技術啊
link |
06:37.000
他就可以給每一個詞彙
link |
06:39.000
一個項量
link |
06:40.000
那個項量就代表
link |
06:41.000
那個詞彙的意思
link |
06:43.000
那有人就會問說
link |
06:45.000
為什麼SIBO
link |
06:46.000
SIBO是一個非常簡單的模型
link |
06:48.000
它就是兩個Transform
link |
06:50.000
它是一個非常簡單的模型
link |
06:52.000
有人就會問說
link |
06:53.000
為什麼他只用兩個Transform呢
link |
06:56.000
能不能夠更複雜一點呢
link |
06:58.000
之前這個SIBO的作者
link |
07:00.000
Thomas Mikolov
link |
07:01.000
曾經來過台灣
link |
07:02.000
那時候常常
link |
07:03.000
之前我上課的時候
link |
07:04.000
常常有人問我說
link |
07:05.000
為什麼SIBO只有Linear
link |
07:07.000
為什麼不用Deep Learning
link |
07:09.000
那我就問Thomas Mikolov
link |
07:10.000
這個問題
link |
07:11.000
他說要用Deep Learning
link |
07:12.000
其實也可以
link |
07:13.000
但之所以選擇Linear Model
link |
07:15.000
簡單的模型
link |
07:16.000
最大的關鍵
link |
07:17.000
其實是運算的效能
link |
07:18.000
當時Computing Power
link |
07:20.000
跟今日還是不在
link |
07:21.000
同一個量級上
link |
07:22.000
那個時候大概是
link |
07:23.000
這個16年的時候
link |
07:25.000
五年前還不在
link |
07:26.000
同一個量級上
link |
07:27.000
那個時候要訓練
link |
07:28.000
非常大的模型
link |
07:29.000
還是有困難的
link |
07:30.000
所以選擇了
link |
07:31.000
比較簡單的模型
link |
07:33.000
那今天你用BERT
link |
07:35.000
其實等於就是
link |
07:36.000
Deep版的SIBO了
link |
07:38.000
你就可以做
link |
07:39.000
更複雜的事情
link |
07:41.000
而且BERT還可以
link |
07:42.000
做到同一個詞彙
link |
07:43.000
根據不同的上下文
link |
07:45.000
它的Embedding就不一樣
link |
07:48.000
那因為它是一個
link |
07:49.000
Voice Embedding的進階版
link |
07:50.000
是考慮上下文
link |
07:52.000
也就是Context的
link |
07:53.000
Voice Embedding
link |
07:54.000
所以BERT又叫做
link |
07:56.000
Contextualized
link |
07:58.000
BERT所抽出來的
link |
07:59.000
這些Embedding
link |
08:00.000
這些項量
link |
08:01.000
Contextualized Word Embedding
link |
08:04.000
希望這樣
link |
08:05.000
大家可以接受這個答案
link |
08:08.000
講到這邊
link |
08:09.000
大家有沒有問題
link |
08:10.000
想要問呢
link |
08:11.000
這樣你覺得可以嗎
link |
08:13.000
好 大家有問題
link |
08:14.000
想要問嗎
link |
08:17.000
好 如果你可以
link |
08:18.000
接受這個答案的話
link |
08:19.000
就很好
link |
08:20.000
你今天晚上睡得著
link |
08:21.000
但是接下來
link |
08:22.000
我要講一個多餘的
link |
08:23.000
會讓你今天晚上
link |
08:24.000
睡不著的東西
link |
08:25.000
就是這個答案
link |
08:26.000
真的是這樣嗎
link |
08:27.000
就這個是
link |
08:28.000
你在文獻上
link |
08:29.000
最常見到的
link |
08:30.000
你跟別人討論BERT的時候
link |
08:31.000
別人最常告訴你的理由
link |
08:33.000
真的是這樣嗎
link |
08:34.000
我這邊告訴你
link |
08:35.000
另外一個不知所云的
link |
08:37.000
我們實驗室同學
link |
08:38.000
做的實驗
link |
08:39.000
這個實驗是這樣子的
link |
08:41.000
我們把訓練在文字上的BERT
link |
08:44.000
拿來做蛋白質的分類
link |
08:47.000
DNA的分類
link |
08:48.000
或者是音樂的分類
link |
08:51.000
我們就拿DNA的分類
link |
08:52.000
做例子吧
link |
08:53.000
DNA大家都知道說
link |
08:54.000
DNA就是由一連串
link |
08:57.000
303 不是303線桿
link |
08:59.000
叫什麼
link |
09:00.000
叫做去氧核醣核酸
link |
09:01.000
對不對
link |
09:02.000
這個DNA
link |
09:04.000
就是一連串
link |
09:05.000
去氧核醣核酸所組成的
link |
09:08.000
去氧核醣核酸有四種
link |
09:10.000
分別用ATCG來表示
link |
09:13.000
所以一串DNA
link |
09:15.000
看起來就像是這個樣子
link |
09:17.000
那我們要做
link |
09:18.000
DNA分類的問題
link |
09:20.000
也就是給一串DNA
link |
09:21.000
那要決定這個DNA
link |
09:23.000
屬於什麼類別
link |
09:25.000
所以這邊ATCG的
link |
09:26.000
這些字母代表DNA
link |
09:28.000
這邊這個東西代表是分類
link |
09:30.000
你可能問說EIIEN
link |
09:32.000
是代表什麼
link |
09:33.000
不要在意這些細節
link |
09:34.000
我也不知道
link |
09:35.000
反正就是一個分類的問題
link |
09:38.000
訓練下去
link |
09:39.000
有訓練資料
link |
09:40.000
有Label的資料
link |
09:41.000
訓練下去就結束了
link |
09:43.000
那這神奇的地方
link |
09:44.000
是這個樣子
link |
09:45.000
DNA可以用ATCG來表示
link |
09:49.000
那我們現在要把BERT
link |
09:51.000
用在DNA的分類上
link |
09:53.000
到底是怎麼回事呢
link |
09:55.000
我們把ATCG分別對應到
link |
09:59.000
一個英文的詞彙
link |
10:01.000
比如說A就對到WE
link |
10:02.000
T就對到YOU
link |
10:03.000
C就對到HE
link |
10:04.000
G就對到SHE
link |
10:05.000
那這個對應的表格
link |
10:07.000
不重要
link |
10:08.000
你可以隨機產生
link |
10:10.000
A可以對應到隨便一個詞彙
link |
10:11.000
T對到隨便一個詞彙
link |
10:13.000
T對到隨便一個詞彙
link |
10:14.000
C對到隨便詞彙
link |
10:15.000
G對到隨便詞彙
link |
10:17.000
都沒有關係
link |
10:18.000
對結果影響不大
link |
10:20.000
你就把一串DNA
link |
10:21.000
變成一串文字
link |
10:24.000
是一串不知所云云的文字
link |
10:27.000
比如說AGAC
link |
10:28.000
就變成WE SHE WE HE
link |
10:30.000
不知道在說些什麼
link |
10:32.000
然後呢
link |
10:33.000
把它丟到BERT裡面
link |
10:35.000
一樣有CLS
link |
10:36.000
然後一樣產生一個Vector
link |
10:38.000
一樣通過Linear的Transform
link |
10:40.000
一樣分類
link |
10:41.000
只是分類
link |
10:42.000
是這個DNA的類別
link |
10:44.000
不知道在做什麼的類別
link |
10:46.000
那一樣Linear的部分
link |
10:47.000
Random Initialize
link |
10:48.000
BERT的部分
link |
10:49.000
用Pretrend的模型
link |
10:51.000
來Initialize
link |
10:53.000
但是用來Initialize的
link |
10:54.000
那個模型
link |
10:55.000
是那個學會做填空題
link |
10:58.000
在英文上
link |
10:59.000
他學會了做
link |
11:00.000
英文填空題的
link |
11:02.000
那一個BERT
link |
11:03.000
你可能會想說
link |
11:04.000
這都什麼亂七八糟的實驗
link |
11:06.000
莫名其妙的實驗
link |
11:08.000
明明是要做DNA
link |
11:09.000
把它轉成一串
link |
11:10.000
看不懂的文字
link |
11:11.000
用BERT這樣有什麼意義嗎
link |
11:13.000
BERT它可以分析語意
link |
11:15.000
它知道每個詞彙的意思
link |
11:16.000
你給它亂七八糟的句子
link |
11:18.000
它一定是看不懂的
link |
11:19.000
那做這個實驗
link |
11:20.000
到底有什麼意思
link |
11:21.000
神奇的地方是
link |
11:23.000
這邊就做了不同的任務
link |
11:25.000
蛋白質的分類
link |
11:27.000
做了三種
link |
11:28.000
蛋白質就是用胺基酸
link |
11:29.000
做構成的
link |
11:30.000
有十幾種胺基酸
link |
11:31.000
每一個胺基酸
link |
11:32.000
都隨便給它一個詞彙
link |
11:33.000
然後DNA就是ATCG
link |
11:35.000
Music就是那個音符
link |
11:36.000
每個音符
link |
11:37.000
也隨便給它一個詞彙
link |
11:38.000
然後接下來
link |
11:39.000
就當作是一個
link |
11:40.000
文章分類的問題
link |
11:41.000
硬做下去
link |
11:43.000
發現說
link |
11:44.000
如果你是
link |
11:45.000
你沒有用BERT
link |
11:47.000
你得到的結果
link |
11:48.000
是藍色的這個部分
link |
11:50.000
如果你有用BERT
link |
11:51.000
你得到的結果
link |
11:52.000
是紅色的這個部分
link |
11:54.000
居然是比較好的
link |
11:57.000
我知道你聽了一定覺得
link |
11:58.000
滿頭問號啦
link |
11:59.000
你心裡一定想起
link |
12:00.000
小朋友你是不是有
link |
12:01.000
很多問號的那首歌
link |
12:03.000
這個就是神奇的實驗
link |
12:05.000
不知道為什麼
link |
12:07.000
目前沒有特別好的解釋
link |
12:10.000
但我之所以要講這個實驗
link |
12:12.000
只是想要告訴你說
link |
12:13.000
BERT到底為什麼會好
link |
12:15.000
這裡面還有
link |
12:16.000
很大的研究的空間
link |
12:18.000
從這個實驗看來
link |
12:19.000
我並不是要否認說
link |
12:20.000
BERT有學到語意這件事情
link |
12:22.000
我們可以非常明顯的
link |
12:24.000
從他的embedding裡面觀察到
link |
12:26.000
他確實知道
link |
12:27.000
每一個詞彙的意思
link |
12:28.000
他知道哪些詞彙意思比較像
link |
12:29.000
他知道哪些詞彙意思比較不像
link |
12:31.000
那我今天要表達的意思是說
link |
12:33.000
你就算給他
link |
12:34.000
對他而言是亂七八糟的句子
link |
12:37.000
他居然還是可以
link |
12:38.000
分類得比較好
link |
12:39.000
所以他的能力
link |
12:40.000
不完全來自於
link |
12:42.000
他看得懂文章這件事
link |
12:44.000
而是可能有其他的理由
link |
12:46.000
舉例來說
link |
12:47.000
BERT也許他本質上
link |
12:48.000
就是一個比較好的初始化參數
link |
12:50.000
不見得跟語意有關
link |
12:51.000
就這種初始化參數
link |
12:53.000
就是特別適合
link |
12:55.000
拿來做大型模型的訓練
link |
12:58.000
是不是這樣呢
link |
12:59.000
那這個還尚待更進一步的研究
link |
13:02.000
我之所以想要告訴你
link |
13:03.000
這個實驗的結果
link |
13:05.000
只是想告訴你說
link |
13:06.000
我們今天
link |
13:07.000
這些模型都是非常新的模型
link |
13:10.000
他們為什麼能夠成功運作
link |
13:12.000
還有很大的研究的空間
link |
13:16.000
那我後面還有一小段
link |
13:18.000
我們就講完那一小段再下課
link |
13:20.000
有關那個BERT的部分
link |
13:22.000
我們今天講的
link |
13:23.000
其實也是滄海一述
link |
13:26.000
我在這邊再放了
link |
13:27.000
另外兩個影片的連結
link |
13:28.000
如果你想學完整版本的
link |
13:30.000
各種BERT的變形
link |
13:32.000
你可以參見以下兩個連結
link |
13:34.000
但如果沒有興趣
link |
13:35.000
也沒有關係
link |
13:36.000
作業裡面也用不上
link |
13:38.000
接下來的課程也用不上
link |
13:39.000
只是想告訴你說
link |
13:40.000
BERT還有很多其他的變形
link |
13:44.000
接下來要講的叫做
link |
13:46.000
Multilingual的BERT
link |
13:48.000
多語言的BERT
link |
13:49.000
多語言的BERT
link |
13:50.000
有什麼神奇的地方呢
link |
13:52.000
就是你在訓練的時候
link |
13:53.000
你會拿各種各樣的語言
link |
13:55.000
中文、英文、德文、法文
link |
13:57.000
通通給他拿去做填空題
link |
14:00.000
這個就是Multilingual的BERT
link |
14:03.000
Multilingual的BERT
link |
14:04.000
有什麼神奇之處呢
link |
14:06.000
Google釋出了一個
link |
14:07.000
Multilingual的BERT
link |
14:08.000
它是用104種不同的語言做成的
link |
14:12.000
所以Multilingual的BERT
link |
14:13.000
會做104種語言的填空題
link |
14:17.000
但接下來真正神奇的地方是
link |
14:19.000
Multilingual的BERT
link |
14:21.000
拿英文的QA的資料去做訓練
link |
14:25.000
他自動就會學
link |
14:26.000
做中文的QA的問題
link |
14:30.000
我不知道大家有沒有聽懂這句話
link |
14:32.000
我接下來有一個真實的實驗
link |
14:34.000
給大家參考
link |
14:35.000
這邊的訓練資料
link |
14:37.000
FineTune的資料
link |
14:38.000
用的是Square
link |
14:39.000
它是一個英文的QA的資料集
link |
14:42.000
中文的部分
link |
14:43.000
是一個台達電釋出來的
link |
14:45.000
叫做DRCD的資料集
link |
14:47.000
這個資料集
link |
14:48.000
就是我們在作業裡面
link |
14:50.000
會使用到的資料集
link |
14:53.000
在還沒有BERT的時候
link |
14:55.000
結果做出來不太好啦
link |
14:57.000
在BERT之前最強的問答模型
link |
14:59.000
叫QANet
link |
15:00.000
它的正確率只有
link |
15:02.000
這個是F1 Score
link |
15:03.000
其實它不是正確率
link |
15:04.000
你就當作是正確率好了
link |
15:05.000
它的正確率就是78%
link |
15:09.000
那BERT如果是
link |
15:12.000
pre-trained在中文上
link |
15:13.000
在中文上學會做填空題
link |
15:15.000
在中文的QA資料上做FineTune
link |
15:18.000
測試在中文的問題上
link |
15:20.000
那沒問題
link |
15:21.000
正確率89%
link |
15:23.000
其實人在同樣的資料上
link |
15:25.000
也只能做到93%
link |
15:27.000
所以跟人其實也沒差那麼遠了
link |
15:30.000
神奇的地方是
link |
15:31.000
如果是多語言的那個BERT
link |
15:35.000
FineTune在英文上
link |
15:37.000
你是拿英文的QA資料去訓練它
link |
15:40.000
直接測試在中文上
link |
15:42.000
居然也有78%的正確率
link |
15:45.000
跟之前的QANet
link |
15:47.000
不是用BERT的Network
link |
15:48.000
正確率是差不多的
link |
15:51.000
它從來沒有看過
link |
15:54.000
它從來沒有看過
link |
15:55.000
中文的問答的資料集
link |
15:58.000
對它來說
link |
15:59.000
中文的問答的問題
link |
16:01.000
就是羅考
link |
16:02.000
它第一次看到
link |
16:03.000
它居然能夠回答
link |
16:05.000
怎麼會這麼神奇
link |
16:07.000
當然有人可能會說
link |
16:08.000
你在預訓練的時候
link |
16:10.000
在Pretrain的時候
link |
16:11.000
不是看過中文嗎
link |
16:12.000
看過104種語言裡面有中文吧
link |
16:14.000
但是它在預訓練的時候
link |
16:16.000
它學習的目標只有做填空
link |
16:20.000
它只會做中文的填空
link |
16:21.000
然後你讓它學會做中文的填空
link |
16:24.000
但接下來教它英文的問答
link |
16:26.000
它居然自動學會了中文的問答
link |
16:30.000
就問你神不神奇
link |
16:33.000
那為什麼會這樣呢
link |
16:35.000
一個比較簡單的解釋是說
link |
16:38.000
也許對Multilingual的BERT而言
link |
16:40.000
不同語言間沒有什麼差異
link |
16:43.000
不管是你給它看中文還是英文
link |
16:45.000
最終中文和英文的
link |
16:47.000
這些詞彙的embedding
link |
16:50.000
只要是意思一樣的
link |
16:51.000
都會很近
link |
16:52.000
所以可能兔子跟rabbit
link |
16:54.000
它的embedding很近
link |
16:56.000
跳跟jump的embedding很近
link |
16:58.000
魚跟fish的embedding很近
link |
16:59.000
有跟swing的embedding很近
link |
17:02.000
也許它在看過
link |
17:03.000
大量語言的過程中
link |
17:05.000
自動學會了這件事情
link |
17:08.000
並不是只是一個猜測
link |
17:09.000
我們其實是有做過一些驗證
link |
17:12.000
那這邊驗證用的measure
link |
17:14.000
叫做mean reciprocal ranking
link |
17:17.000
叫做縮寫式MRR
link |
17:19.000
那細節我們這邊就不細講
link |
17:21.000
你只要知道說MRR的值越高
link |
17:24.000
代表兩個不同語言的embedding
link |
17:27.000
它們align的越好
link |
17:28.000
所謂align好的意思就是說
link |
17:30.000
同樣意思但不同語言的字
link |
17:35.000
它們會被
link |
17:36.000
它們的這個向量是接近的
link |
17:38.000
MRR越高就代表說
link |
17:40.000
同樣意思不同語言的詞彙
link |
17:42.000
它的向量越接近
link |
17:44.000
這個深藍色的
link |
17:46.000
最右邊這條線是什麼呢
link |
17:47.000
縱軸是MRR越高越好
link |
17:49.000
深藍色這條線
link |
17:51.000
是Google試出來的
link |
17:52.000
104種語言的multilingual bird
link |
17:55.000
得到的MRR
link |
17:57.000
它的值都非常的高
link |
17:59.000
代表說對它來說
link |
18:00.000
不同語言沒有差
link |
18:02.000
它只看意思
link |
18:03.000
不同語言對它來說
link |
18:04.000
沒有什麼不一樣
link |
18:06.000
那我們自己也試著去訓練了
link |
18:08.000
multilingual bird
link |
18:09.000
我們用的資料比較少
link |
18:10.000
每個語言只用了
link |
18:12.000
這個20萬句而已
link |
18:13.000
就算很少
link |
18:15.000
我們自己訓練的
link |
18:16.000
結果很差
link |
18:18.000
不知道為什麼
link |
18:19.000
我們自己訓練的multilingual bird
link |
18:21.000
沒有辦法把不同語言
link |
18:23.000
align在一起
link |
18:24.000
它似乎沒有辦法學到
link |
18:26.000
不同語言同樣意思的那些符號
link |
18:28.000
它們應該要一樣的意思
link |
18:29.000
那這件事情就困擾了我們很久
link |
18:32.000
那為什麼要做這個實驗
link |
18:33.000
做這個實驗
link |
18:34.000
當初為什麼要自己訓練multilingual bird
link |
18:36.000
是因為我們想要了解
link |
18:37.000
是什麼原因造成了multilingual bird
link |
18:41.000
我們想要設置不同的參數
link |
18:45.000
不同的factor
link |
18:46.000
然後看看哪些factor
link |
18:47.000
會影響multilingual bird
link |
18:49.000
multilingual的能力
link |
18:51.000
但我們發現
link |
18:52.000
我們自己train的multilingual bird
link |
18:54.000
不管怎麼調參數
link |
18:55.000
它就是做不到multilingual的效果
link |
18:58.000
它就是做不到alignment的效果
link |
19:01.000
那有一天我們突然覺得
link |
19:04.000
會不會是資料量不夠呢
link |
19:07.000
每個語言200K太少了
link |
19:10.000
資料變5倍
link |
19:11.000
看看做不做得起來
link |
19:14.000
做這個實驗之前
link |
19:15.000
大家都有點抗拒
link |
19:16.000
有點害怕
link |
19:17.000
因為訓練的時間
link |
19:18.000
要變成原來的5倍
link |
19:21.000
到底結果會怎樣呢
link |
19:23.000
這個是loss下降的圖
link |
19:26.000
然後train了兩天
link |
19:27.000
啥事也沒有發生
link |
19:29.000
loss都掉不下去
link |
19:31.000
就在準備要放棄的時候
link |
19:33.000
loss就突然掉下去了
link |
19:35.000
這個是用8張V100train的
link |
19:37.000
我們實驗室也沒有8張V100
link |
19:39.000
是用國網中心的機器跑的
link |
19:41.000
但是train了兩天
link |
19:42.000
loss都不掉下去
link |
19:43.000
正要放棄的時候
link |
19:45.000
loss就掉下去了
link |
19:46.000
這是某個同學facebook的貼文
link |
19:48.000
我把它引用在這邊
link |
19:49.000
告訴你當時內心的驚嘆
link |
19:52.000
整個實驗要跑一週以上
link |
19:56.000
才能夠把每個語言1000K的
link |
19:59.000
填空題把它學好
link |
20:01.000
資料變多有用嗎
link |
20:04.000
真有用這樣子
link |
20:06.000
資料變多alignment就學起來了
link |
20:09.000
所以看起來資料量
link |
20:11.000
是能不能夠把不同語言
link |
20:13.000
align在一起
link |
20:14.000
一個非常關鍵的因素
link |
20:17.000
所以有時候神奇的事情是
link |
20:19.000
很多問題要在足夠資料量的時候
link |
20:22.000
很多現象要在足夠資料量的時候
link |
20:25.000
才會顯現出來
link |
20:27.000
過去都沒有人說過
link |
20:28.000
什麼model有這種multilingual的能力
link |
20:31.000
可以訓練在A語言的QA上
link |
20:33.000
直接transfer到B語言
link |
20:35.000
從來沒有人說過有這件事情
link |
20:37.000
這幾年才有
link |
20:38.000
一個可能的原因就是
link |
20:39.000
過去資料量都不夠多
link |
20:41.000
現在有夠多的資料
link |
20:42.000
有大量的運算資源
link |
20:43.000
運作下去
link |
20:44.000
這種現象才會被觀察到
link |
20:49.000
那這邊有最後一個
link |
20:50.000
我知道時間快到了
link |
20:51.000
但我想講最後一個神奇的實驗
link |
20:56.000
你不覺得這整件事情
link |
20:57.000
還是有點怪怪的嗎
link |
20:58.000
我就覺得整件事怪怪的
link |
21:00.000
哪裡怪怪的
link |
21:01.000
你說Bird可以把不同語言
link |
21:03.000
同樣意思的符號
link |
21:04.000
讓他們的相量很接近
link |
21:06.000
可是在訓練Multilingual Bird的時候
link |
21:09.000
他明明是給他英文
link |
21:11.000
他能做英文的填空
link |
21:12.000
給他中文他能做中文的填空
link |
21:15.000
他不會混在一起啊
link |
21:17.000
那如果對他來說
link |
21:18.000
不同語言間根本沒有差的話
link |
21:20.000
那他怎麼可能給他英文的句子
link |
21:22.000
做英文的填空
link |
21:23.000
給他英文的句子
link |
21:24.000
會不會空格的地方
link |
21:25.000
他就填中文進去
link |
21:26.000
但他沒有這樣做
link |
21:27.000
代表說他知道語言的資訊
link |
21:31.000
對他來說
link |
21:32.000
同樣來自不同語言的那些符號
link |
21:36.000
終究還是不一樣
link |
21:39.000
他並沒有完全抹掉語言的資訊
link |
21:43.000
所以我就想了一個題目
link |
21:44.000
我說我們來找一下
link |
21:46.000
語言的資訊到底在哪裡
link |
21:49.000
後來我們發現語言的資訊
link |
21:50.000
並沒有藏得很深
link |
21:52.000
有一個同學發現說
link |
21:53.000
我們把所有英文的embedding
link |
21:56.000
就把所有英文的詞彙
link |
21:57.000
都丟到Multilingual Bird裡面
link |
21:59.000
把他的embedding平均起來
link |
22:01.000
把所有中文的embedding平均起來
link |
22:03.000
兩者相減
link |
22:04.000
就是中文跟英文之間的差距
link |
22:07.000
你可以做到什麼樣神奇的事情呢
link |
22:10.000
你可以做到
link |
22:11.000
現在給Multilingual Bird一句英文
link |
22:15.000
然後他得到embedding
link |
22:18.000
把這些embedding
link |
22:19.000
加上這個藍色的項量
link |
22:21.000
這個就是英文和中文之間的差距
link |
22:23.000
這些項量
link |
22:24.000
對Multilingual Bird來說
link |
22:26.000
就變成了中文的句子
link |
22:29.000
然後你在叫他去填空題的時候
link |
22:31.000
他居然就會填中文的答案了
link |
22:34.000
所以非常的神奇
link |
22:37.000
以下是真實的例子
link |
22:40.000
現在你給Multilingual Bird
link |
22:42.000
讀的句子是
link |
22:43.000
The girl that can help me
link |
22:45.000
is all the way across town
link |
22:47.000
There's no one who can help me
link |
22:49.000
你給Bird讀
link |
22:51.000
There's no one who can help me
link |
22:52.000
這個句子
link |
22:53.000
那Bird把這個句子讀進去以後
link |
22:56.000
那你再把這個藍色的項量
link |
23:00.000
加到Bird的embedding上
link |
23:03.000
本來讀進去的是英文的句子
link |
23:06.000
變成embedding
link |
23:08.000
加上這個藍色的項量以後
link |
23:10.000
Bird就會覺得
link |
23:11.000
他讀到的是中文的句子
link |
23:15.000
然後你再叫他做填空題
link |
23:18.000
把embedding變回句子以後
link |
23:20.000
他得到的結果是這樣的
link |
23:23.000
他本來讀進去的是
link |
23:24.000
There's no one who can help me
link |
23:27.000
加上藍色的項量
link |
23:29.000
在embedding上以後
link |
23:31.000
Bird輸出的句子就變成
link |
23:33.000
There's no one who can help me
link |
23:37.000
他就產生一個驚驚體
link |
23:39.000
發現他知道說
link |
23:41.000
No one就是無人
link |
23:44.000
Me就是我
link |
23:46.000
他可以某種程度上
link |
23:48.000
做到unsupervised
link |
23:50.000
poken level translation
link |
23:52.000
雖然這不是很好的translation
link |
23:54.000
但是這個實驗告訴我們說
link |
23:57.000
Bird裡面
link |
23:58.000
multilingual的Bird裡面
link |
24:00.000
雖然表面上他看起來
link |
24:02.000
把不同語言同樣意思的詞彙
link |
24:05.000
拉得很近
link |
24:06.000
但是語言的資訊
link |
24:08.000
還是藏在multilingual Bird裡面的