back to index

【機器學習 2022】惡搞自督導式學習模型 BERT 的三個故事


link |
00:00.000
好,那大家好啊
link |
00:02.000
這堂課呢,想跟大家講的是
link |
00:05.000
自督導式學習有多麼的無所不能
link |
00:10.000
那今天呢,我會跟大家分享三個故事
link |
00:14.000
那這三個故事呢,第一個跟第二個
link |
00:17.000
其實在之前的上課錄影中有提過了啦
link |
00:20.000
但是今天呢,會補充更多的內容
link |
00:23.000
那第三個故事是全新的
link |
00:26.000
那很高興呢,今天可以跟大家分享這三個故事
link |
00:29.000
第一個故事是
link |
00:32.000
自督導式學習的模型
link |
00:35.000
它有跨語言的能力
link |
00:38.000
什麼意思呢?
link |
00:40.000
我們在訓練這個BERT的時候
link |
00:43.000
不是只能用一種語言
link |
00:45.000
我們都知道BERT的訓練
link |
00:47.000
就是做填空題
link |
00:49.000
你可以拿一堆英文的句子
link |
00:51.000
叫機器去學做填空題
link |
00:54.000
但是我們在訓練BERT的時候
link |
00:56.000
不是只能用一種語言
link |
00:58.000
你可以把各種語言的資料都餵給BERT
link |
01:01.000
讓它做多種語言的填空題練習
link |
01:05.000
那如果BERT這個模型
link |
01:07.000
在做了多種語言的填空題練習以後
link |
01:11.000
它會有什麼樣不可思議的效果呢?
link |
01:14.000
以下我們就來看看這種多語言的BERT
link |
01:17.000
它有什麼樣神奇的能力
link |
01:20.000
多語言的BERT可以做到什麼樣的事情呢?
link |
01:23.000
我們知道在Self-Supervised Learning裡面
link |
01:26.000
我們就是要先pre-train
link |
01:29.000
然後把pre-trained好的模型
link |
01:31.000
針對某一個任務進行Find Q
link |
01:34.000
然後再測試在你感興趣的任務上
link |
01:37.000
那今天假設我們感興趣的
link |
01:39.000
我們想要解決的任務
link |
01:41.000
是中文的QA
link |
01:43.000
就是你問機器一個中文的問題
link |
01:46.000
機器讀一篇中文的文章
link |
01:48.000
給你一個中文的答案
link |
01:51.000
那一般而言呢
link |
01:52.000
一般的想法
link |
01:54.000
如果你要解的問題
link |
01:56.000
是要做中文的QA
link |
01:58.000
那你當然需要提供一些中文QA的訓練資料
link |
02:03.000
讓機器去Find Q
link |
02:05.000
去微調pre-trained的模型
link |
02:09.000
但是有了這種Multilingual的BERT
link |
02:12.000
當BERT看過多種語言以後
link |
02:15.000
神奇的地方來了
link |
02:17.000
如果今天你要叫機器解的是中文的QA問題
link |
02:21.000
你不需要提供給他中文QA的訓練資料
link |
02:27.000
你可以只給他英文QA的訓練資料就好
link |
02:30.000
你可以只給他英文的文章
link |
02:33.000
英文的問題
link |
02:34.000
英文的答案
link |
02:35.000
你可以只給他英文的QA的訓練資料
link |
02:38.000
讓機器學習
link |
02:39.000
他自動可以舉一反三
link |
02:42.000
自動可以做中文的問題
link |
02:45.000
這個就好像說
link |
02:46.000
你今天要去考一個語言能力檢定
link |
02:49.000
你明明要去考的是中文的閱讀測驗
link |
02:53.000
但是不知道怎麼回事
link |
02:54.000
你拿到的是英文的考古題
link |
02:56.000
但是你做了英文的考古題
link |
02:58.000
你也會做中文的閱讀測驗
link |
03:01.000
這麼神奇
link |
03:03.000
BERT在中文的QA上是可以裸考的
link |
03:06.000
他完全不需要看過中文QA的問題
link |
03:08.000
他只要看過英文QA的問題
link |
03:11.000
就可以解中文QA的問題
link |
03:16.000
這個發現是許宗源同學跟劉濟良同學
link |
03:20.000
發表在2019年的EMNLP的結果
link |
03:23.000
這邊是節錄Paper裡面的一個表格
link |
03:26.000
這個實驗
link |
03:27.000
我們的測試資料是中文的QA
link |
03:30.000
用的是一個叫做DRCD的Dataset
link |
03:34.000
如果英文的QA
link |
03:35.000
我們用的是大家都耳熟能詳的SCRUM
link |
03:39.000
這個Dataset
link |
03:40.000
我們來看一下實驗結果
link |
03:42.000
假設你沒有用BERT
link |
03:44.000
如果你沒有做Pre-Train的話
link |
03:46.000
那你用的是QANet
link |
03:48.000
如果沒有做Pre-Train
link |
03:50.000
只有拿中文的資料進行FindQ測試在中文上
link |
03:55.000
那你的F1 Score是78.1
link |
03:58.000
那大家可以把F1 Score就當作是正確率
link |
04:02.000
今天如果你用BERT
link |
04:05.000
你Pre-Train在中文上
link |
04:07.000
讓BERT在中文上做過填空題
link |
04:10.000
FindQ在中文的QA上
link |
04:13.000
接下來測試在中文的QA上
link |
04:16.000
你可以得到89%的F1 Score
link |
04:19.000
當然比沒有Pre-Train只有78%的F1 Score
link |
04:22.000
結果好很多
link |
04:24.000
但真正神奇的地方是
link |
04:26.000
假設你Pre-Train的時候
link |
04:28.000
是用了104種語言Pre-Train的MultilingualBERT
link |
04:31.000
MultilingualBERT在104種語言上做過填空題
link |
04:35.000
FindQ的時候
link |
04:36.000
給他英文的QA Data進行FindQ
link |
04:40.000
接下來直接測試在中文上
link |
04:42.000
會發生什麼事情呢
link |
04:44.000
他也得到78.8%的F1 Score
link |
04:48.000
跟訓練在中文上的結果
link |
04:52.000
幾乎是一樣好甚至還更好一點
link |
04:55.000
神奇的事情是
link |
04:56.000
他只看過英文的QA Data
link |
04:58.000
直接去測試在中文的QA Data上
link |
05:01.000
居然也有78%的F1 Score
link |
05:05.000
這個結果並不是什麼巧合
link |
05:08.000
那在同一年
link |
05:10.000
很多團隊也都發現了類似的結果
link |
05:13.000
不只在QA上
link |
05:14.000
在很多不同的任務
link |
05:16.000
不同的語言上
link |
05:17.000
都有類似的現象
link |
05:19.000
都觀察到MultilingualBERT
link |
05:21.000
有跨語言舉一反三的能力
link |
05:25.000
而今天這種MultilingualBERT
link |
05:27.000
跨語言的能力
link |
05:28.000
那甚至一點都不稀奇了
link |
05:30.000
這個今天在自然語言處理的領域
link |
05:32.000
根本就是一個Common Sense
link |
05:34.000
因為在自然語言處理的領域
link |
05:36.000
他有一個這個基準的資料集
link |
05:40.000
叫做Extreme
link |
05:42.000
Extreme要做的事情
link |
05:43.000
就是要測驗你的MultilingualBERT
link |
05:47.000
他有沒有跨語言的能力
link |
05:50.000
在Extreme裡面
link |
05:51.000
有這個九個不同的任務
link |
05:54.000
然後你的目標
link |
05:56.000
是要在這九個任務上
link |
05:58.000
你只有英文的訓練資料
link |
06:00.000
你只有英文的訓練資料
link |
06:02.000
可以去Finding微調你的MultilingualBERT
link |
06:05.000
然後要測試在
link |
06:06.000
剩下其他三十幾種語言上
link |
06:09.000
所以今天BERT有跨語言的能力
link |
06:12.000
一點都不令人意外
link |
06:14.000
大家都已經知道
link |
06:15.000
MultilingualBERT
link |
06:16.000
就是有這種跨語言的能力
link |
06:20.000
但是雖然大家都知道
link |
06:21.000
MultilingualBERT有跨語言的能力
link |
06:23.000
但是這個跨語言的能力
link |
06:26.000
是怎麼來的呢
link |
06:30.000
一個常見的猜想是這樣子
link |
06:33.000
就是MultilingualBERT
link |
06:35.000
他可以無視語言的差異
link |
06:38.000
對他來說不同語言的符號
link |
06:41.000
只是一個表象
link |
06:43.000
他可以無視語言的差異
link |
06:45.000
把不同語言同樣意思的符號
link |
06:49.000
給他一樣的Representation
link |
06:52.000
所以對MultilingualBERT來說
link |
06:54.000
你給他魚跟Fish
link |
06:56.000
他看起來是差不多的
link |
06:57.000
你給他兔跟Rabbit
link |
06:59.000
他看起來是差不多的
link |
07:01.000
他可以無視不同語言符號的差異
link |
07:04.000
只了解這個符號背後
link |
07:06.000
本身所代表的語意
link |
07:09.000
所以這可以解釋說
link |
07:10.000
為什麼MultilingualBERT
link |
07:12.000
他有跨語言的能力
link |
07:13.000
因為對他來說
link |
07:14.000
不同語言是沒有差別的
link |
07:18.000
真的是這樣嗎
link |
07:19.000
我們這邊做了一個簡單的實驗
link |
07:22.000
來驗證MultilingualBERT
link |
07:24.000
是不是可以把不同語言
link |
07:27.000
同樣意思的符號
link |
07:28.000
把它對應在一起
link |
07:30.000
這個實驗是這樣的
link |
07:31.000
首先你先準備一個字典
link |
07:35.000
這個字典是一個中英對照的字典
link |
07:38.000
所以你有一些英文的詞彙
link |
07:40.000
你有一些中文的字
link |
07:43.000
然後你知道哪些中文的字
link |
07:45.000
跟哪些英文的詞彙
link |
07:46.000
他們有一樣的語意
link |
07:49.000
所以你有一個英文詞彙的List
link |
07:51.000
有一個中文字的List
link |
07:53.000
接下來我們給每一個英文的詞彙
link |
07:57.000
或者是每一個中文的字
link |
07:59.000
都給它一個代表的Embedding
link |
08:04.000
那怎麼找這個代表的Embedding呢
link |
08:06.000
因為大家都知道說這個BERT
link |
08:08.000
它是一個Contextualized Representation Model
link |
08:11.000
所以同一個詞彙
link |
08:13.000
在不同的上下文中
link |
08:15.000
它的Representation都是不一樣的
link |
08:18.000
不過沒有關係
link |
08:19.000
我們這邊就是把同樣的詞彙
link |
08:21.000
出現在整個Corpus裡面
link |
08:24.000
所有的Representation
link |
08:25.000
通通找出來
link |
08:26.000
直接做平均
link |
08:28.000
把這個平均的結果
link |
08:29.000
當作代表那個詞彙的Representation
link |
08:33.000
所以這邊每一個中文的字
link |
08:36.000
都有一個Representation
link |
08:37.000
每一個英文的詞彙
link |
08:39.000
都有一個Representation
link |
08:40.000
接下來就可以計算中文的某一個字
link |
08:43.000
跟英文的某一個詞彙
link |
08:45.000
它們中間Representation的相似度
link |
08:48.000
所以這邊就把中文的詞彙
link |
08:50.000
跟英文的詞彙
link |
08:52.000
它們的相似度都計算出來
link |
08:56.000
接下來我們怎麼知道
link |
08:58.000
中文跟英文的詞彙
link |
09:00.000
如果它們意思一樣
link |
09:02.000
它們的Representation就越接近呢
link |
09:06.000
因為我們已經有這個詞典的關係
link |
09:10.000
所以你知道哪一個英文的詞彙
link |
09:12.000
是對應到哪一個中文的詞彙
link |
09:14.000
接下來就計算看看說
link |
09:15.000
比如說我們知道這個Year
link |
09:18.000
就對應到年
link |
09:20.000
那就計算Year跟年之間
link |
09:22.000
它們的Representation的相似度
link |
09:25.000
然後再看看說
link |
09:26.000
Year跟其他中文詞彙的相似度
link |
09:29.000
如果Year跟年的相似度是最大的
link |
09:33.000
那就給它Ranking是1
link |
09:36.000
然後比如說舉另外一個例子
link |
09:38.000
Month跟月的意思是一樣的
link |
09:40.000
再看Month跟其他的中文字的相似度
link |
09:45.000
然後發現月的相似度是只有排第三
link |
09:49.000
這邊的Rank就給它3
link |
09:51.000
以此類推
link |
09:52.000
所以每一個英文的詞彙都會得到一個Rank
link |
09:55.000
那這個Rank的值越小
link |
09:57.000
就代表說英文的詞彙
link |
09:59.000
跟它對應的一樣意思的中文字
link |
10:02.000
它們的這個相似度是越高的
link |
10:05.000
接下來呢
link |
10:06.000
計算一下這個Rank的倒數
link |
10:09.000
再把計算出來的結果平均
link |
10:11.000
可以得到一個分數
link |
10:12.000
叫做Mean Reciprocal Rank NRR
link |
10:16.000
那這個NRR就是分數越高
link |
10:19.000
就代表中文跟英文它的Alignment
link |
10:22.000
它的對應關係
link |
10:24.000
這個Multilingual Bird學得越好
link |
10:27.000
那如果剛才這個步驟你聽不太懂的話
link |
10:29.000
就是記得說NRR的值越大
link |
10:32.000
就代表說呢
link |
10:33.000
今天這一個Multilingual Bird
link |
10:35.000
它越有把英文跟中文這兩種不同語言
link |
10:40.000
同樣意思的詞彙
link |
10:41.000
把它們這個對應的越好
link |
10:43.000
對應的越好
link |
10:44.000
NRR的分數就越高
link |
10:47.000
那這邊呢是一些實驗結果啦
link |
10:50.000
我們分析了這個Bird呢
link |
10:53.000
跟這個英文
link |
10:55.000
這個給Bird的英文
link |
10:57.000
跟另外十種語言
link |
10:59.000
它們的對應關係
link |
11:02.000
那我們先來看最右邊的這個Bar
link |
11:05.000
最右邊這個藍色的Bar呢
link |
11:07.000
它是Google的Multilingual Bird
link |
11:10.000
用一百多種語言訓練出來的
link |
11:13.000
那這個縱軸呢
link |
11:14.000
就是我們剛才看到的NRR
link |
11:16.000
這個值越大
link |
11:17.000
代表說這個Bird呢
link |
11:19.000
越可以無視兩種語言的差異
link |
11:21.000
越可以無視符號的差異
link |
11:23.000
只把語意的資訊抽出來
link |
11:26.000
那你會發現說呢
link |
11:27.000
這個Google所訓練的這個Bird呢
link |
11:31.000
它其實非常的強喔
link |
11:33.000
在不同語言上呢
link |
11:34.000
它的NRR的分數都蠻高的
link |
11:38.000
那這個右邊數來第二個Bar啊
link |
11:41.000
這個是我們自己訓練的Multilingual Bird
link |
11:44.000
我們只用了十種語言
link |
11:45.000
每一種語言用了一千K個句子
link |
11:49.000
那我們發現說
link |
11:51.000
其實就算我們只用十種語言
link |
11:53.000
也可以達到不同語言間
link |
11:56.000
Alignment的效果
link |
11:57.000
它跟這個最右邊數來第二個Bar
link |
12:01.000
跟最右邊這個Bar
link |
12:02.000
其實在不同的語言上
link |
12:04.000
只有差一點點
link |
12:05.000
但是如果我們今天只用十種語言
link |
12:08.000
但是把訓練資料量
link |
12:09.000
從每一種語言一千K
link |
12:11.000
降到每一種語言兩百K
link |
12:13.000
也就是把資料變少了
link |
12:15.000
那我們得到的是什麼
link |
12:16.000
我們得到的是粉紅色的這個Bar
link |
12:18.000
你會發現說粉紅色的Bar
link |
12:20.000
跟最右邊這兩條Bar比起來
link |
12:23.000
都有非常顯著的差異
link |
12:25.000
這告訴我們什麼
link |
12:26.000
這告訴我們訓練資料很重要
link |
12:29.000
你訓練資料一少
link |
12:30.000
哇這個跨語言的能力就不見了
link |
12:34.000
訓練資料夠多
link |
12:35.000
我們才能觀察到跨語言的能力
link |
12:38.000
那這剩下四個 剩下四條這個Bar
link |
12:43.000
是什麼東西呢
link |
12:44.000
它們是過去在還沒有BERT的時代的
link |
12:48.000
World Representation的模型
link |
12:50.000
有Globe 還有Water Vector
link |
12:52.000
然後用不同的訓練資料訓練出來
link |
12:55.000
那為什麼要做這個實驗呢
link |
12:56.000
因為我就在想說
link |
12:58.000
把不同語言的資料倒在一起
link |
13:00.000
過去在還沒有BERT的年代
link |
13:03.000
其實也不是沒有人試過
link |
13:05.000
但過去從來沒有人說
link |
13:07.000
把不同語言倒在一起
link |
13:09.000
你的模型就自動可以把
link |
13:11.000
同樣意思不同語言的詞彙
link |
13:13.000
把它對應起來
link |
13:14.000
是一直到有BERT以後
link |
13:16.000
才有人觀察到這個現象
link |
13:18.000
那到底是過去的模型不行
link |
13:20.000
還是只是過去的人
link |
13:22.000
沒有做這樣的觀察呢
link |
13:24.000
所以我們就把傳統的
link |
13:25.000
在還沒有BERT年代的那些
link |
13:27.000
World Embedding的模型
link |
13:29.000
拿來跑一下
link |
13:30.000
然後也給它不同的資料量
link |
13:32.000
那我們發現說
link |
13:33.000
傳統的這些模型
link |
13:35.000
在不同的資料量下
link |
13:36.000
就算它的資料
link |
13:37.000
跟MultilingualBERT用的一樣多
link |
13:40.000
它不同語言間對應的關係
link |
13:42.000
也趕不上MultilingualBERT的結果
link |
13:45.000
這顯示說模型也是重要的
link |
13:48.000
所以資料是重要的
link |
13:49.000
模型也是重要的
link |
13:51.000
有一個大的模型
link |
13:52.000
有足夠的資料
link |
13:53.000
才能夠觀察到今天
link |
13:54.000
MultilingualBERT有跨語言的能力
link |
13:58.000
但是雖然大家都說
link |
14:01.000
MultilingualBERT有跨語言的能力
link |
14:03.000
它可以無視不同語言符號間的差異
link |
14:07.000
但是如果它真的做到
link |
14:09.000
這件事情的話
link |
14:10.000
你有沒有覺得哪裡怪怪的呢
link |
14:13.000
想想看假設MultilingualBERT
link |
14:17.000
它真的完全無視語言間的差異
link |
14:21.000
那我們今天叫它做填空題的時候
link |
14:24.000
給它一個英文的句子
link |
14:26.000
它怎麼會知道最後
link |
14:28.000
能夠填入英文的詞彙
link |
14:30.000
給它中文的句子
link |
14:31.000
它怎麼能夠填入
link |
14:33.000
把這個mask的地方
link |
14:35.000
填入中文的詞彙呢
link |
14:37.000
我們實際上在訓練MultilingualBERT的時候
link |
14:39.000
也觀察到說
link |
14:40.000
有一個中文的句子
link |
14:42.000
那填空的地方
link |
14:43.000
它就是填中文
link |
14:44.000
英文的句子
link |
14:45.000
填空的地方
link |
14:46.000
就是填英文
link |
14:47.000
它不會弄錯的
link |
14:48.000
所以對MultilingualBERT來說
link |
14:50.000
它應該還是知道
link |
14:52.000
輸入的句子的符號
link |
14:54.000
代表哪一個語言
link |
14:56.000
它應該還是沒有完全去掉
link |
14:58.000
所有語言間的差異
link |
15:01.000
它應該還是沒有完全
link |
15:03.000
無視語言間的資訊
link |
15:05.000
對它來說
link |
15:06.000
語言間的資訊
link |
15:07.000
語言間的差異
link |
15:09.000
仍然是存在的
link |
15:10.000
只是這個資訊
link |
15:12.000
它被藏在哪裡呢
link |
15:17.000
那後來啊
link |
15:18.000
我們發現
link |
15:19.000
這個語言的資訊
link |
15:21.000
其實有可能可以用很簡單的方法
link |
15:25.000
就把語言的資訊抽取出來
link |
15:28.000
怎麼說呢
link |
15:30.000
我們這邊有個實驗
link |
15:31.000
就假設你把英文的embedding平均
link |
15:35.000
得到一個所有英文embedding平均的項量
link |
15:39.000
那你再把所有中文的這些字呢
link |
15:43.000
所有的中文的這些符號呢
link |
15:46.000
它的embedding也拿來做平均
link |
15:49.000
得到一個所有中文符號的embedding
link |
15:52.000
現在有所有英文的符號的embedding
link |
15:55.000
所有中文的符號的embedding
link |
15:57.000
接下來計算它們的差距
link |
16:00.000
你得到了英文的
link |
16:02.000
英文跟中文之間的差距
link |
16:05.000
得到這個差距以後
link |
16:06.000
你可以做到什麼事情呢
link |
16:08.000
神奇的地方是
link |
16:09.000
你可以把英文的這些詞彙
link |
16:13.000
加上這個差距以後
link |
16:16.000
它就會得到中文的同樣意思的詞彙
link |
16:21.000
當然這個對應的關係沒有非常非常的精確
link |
16:25.000
但是你可以大致觀察到說
link |
16:27.000
如果你把fish
link |
16:29.000
加上這個英文跟中文間的差距
link |
16:31.000
那你得到的結果
link |
16:33.000
可能就跟中文的魚的embedding很接近
link |
16:36.000
Rabbit加上這個差距
link |
16:38.000
可能就跟中文的兔很接近
link |
16:42.000
那甚至你還可以做到一個神奇的事情
link |
16:46.000
是這樣
link |
16:47.000
你給multilingual bird一個英文的句子
link |
16:50.000
本來你給他英文的句子
link |
16:52.000
正常的狀況就是
link |
16:53.000
他會做英文的填空題
link |
16:56.000
他會把英文單字填到你mask起來的地方
link |
17:00.000
但是呢
link |
17:01.000
如果你把英文丟進去以後
link |
17:04.000
在multilingual bird裡面
link |
17:06.000
把英文跟中文的差異
link |
17:09.000
加到multilingual bird的representation上面
link |
17:13.000
我們剛才說你可以算出英文跟中文之間的差異
link |
17:16.000
所以你把英文的句子
link |
17:17.000
丟到multilingual bird裡面
link |
17:19.000
讓multilingual bird得到英文句子裡面
link |
17:22.000
每一個token的embedding
link |
17:24.000
接下來你再把這些embedding
link |
17:26.000
通通加上英文跟中文的差異
link |
17:28.000
把這些embedding通通往某一個方向移動一下
link |
17:32.000
那這些embedding
link |
17:33.000
就會從原來像是英文的embedding
link |
17:36.000
變成對multilingual bird來說
link |
17:39.000
像是中文的embedding
link |
17:41.000
你再把這些東西
link |
17:42.000
叫multilingual bird還原回來
link |
17:44.000
你會發現
link |
17:45.000
會得到一個中文的句子
link |
17:48.000
舉一個更具體的例子
link |
17:50.000
以下這個例子
link |
17:51.000
不是憑空想像的例子
link |
17:53.000
它是真實的實驗結果
link |
17:55.000
我們輸入一句
link |
17:57.000
There is no one who can help me
link |
17:59.000
我們輸入一個英文的句子給multilingual bird
link |
18:02.000
multilingual bird得到一堆representation
link |
18:05.000
接下來把這些representation
link |
18:07.000
往同一個方向平移
link |
18:09.000
讓這些representation看起來像是中文
link |
18:11.000
然後進行還原以後
link |
18:13.000
得到的句子是
link |
18:15.000
There is no one who can help me
link |
18:18.000
當然這不是一個非常精確的翻譯
link |
18:20.000
但是你發現multilingual bird
link |
18:22.000
它確實可以把me就對應到我
link |
18:25.000
把is就對應到是
link |
18:28.000
把no one就對應到無人
link |
18:31.000
這邊只是舉一個例子
link |
18:33.000
我們也有更完整的結果
link |
18:35.000
在這篇文章裡面
link |
18:36.000
我們試了把英文
link |
18:40.000
轉成另外六種不同的語言
link |
18:43.000
還有把另外六種不同的語言
link |
18:45.000
轉成英文
link |
18:47.000
然後我們把英文轉成另外一個語言
link |
18:50.000
比如說把英文轉成法文以後
link |
18:52.000
我們去看看那個法文的句子
link |
18:55.000
跟真正的翻譯結果之間的blue score
link |
19:00.000
這個blue score越高
link |
19:01.000
就代表說透過這個方法
link |
19:03.000
透過加不同語言間差異的向量這個方法
link |
19:08.000
我們確實可以把某個語言
link |
19:10.000
轉成另外一個語言的翻譯
link |
19:12.000
你發現這邊blue score
link |
19:14.000
雖然說沒有真的很高
link |
19:15.000
這個十上下的blue score
link |
19:17.000
它是non-trivial的
link |
19:19.000
它代表說今天這個multilingual bird
link |
19:22.000
確實可以用加上這些向量的方法
link |
19:25.000
達到部分翻譯的成果
link |
19:30.000
其實在差不多時間
link |
19:33.000
也有另外兩篇論文
link |
19:35.000
有非常類似的發現
link |
19:37.000
發現說multilingual bird
link |
19:39.000
不只是把不同語言同樣意思的詞彙對應在一起
link |
19:43.000
它其實也有存有語言的資訊
link |
19:48.000
那發現multilingual bird
link |
19:50.000
存有語言的資訊
link |
19:51.000
有什麼樣的作用呢
link |
19:54.000
這個發現可以帶來什麼樣的好處呢
link |
19:57.000
這些發現我想還是有一些應用的
link |
19:59.000
舉例來說
link |
20:00.000
我們都會說今天multilingual bird
link |
20:03.000
它有跨語言的能力
link |
20:06.000
你可以給它訓練的時候
link |
20:09.000
訓練在英文上
link |
20:11.000
接下來測試的時候
link |
20:13.000
直接測試在中文上
link |
20:16.000
但是問題是
link |
20:17.000
如果它訓練的時候是
link |
20:19.000
訓練在英文的訓練資料上
link |
20:21.000
測試的時候是測試在中文的資料上
link |
20:23.000
我們知道英文跟中文
link |
20:25.000
對multilingual bird來說
link |
20:27.000
還是有一些差異的
link |
20:29.000
因為我們說multilingual bird
link |
20:30.000
存有語言的資訊
link |
20:31.000
所以對它來說
link |
20:32.000
英文的embedding跟中文的embedding
link |
20:35.000
還是略有差異的
link |
20:38.000
所以這種跨語言的轉換
link |
20:39.000
雖然可以做到一定程度
link |
20:41.000
但是它沒有辦法跟
link |
20:43.000
同樣語言的結果做得一樣好
link |
20:45.000
所以訓練在英文上
link |
20:47.000
測試在英文上
link |
20:48.000
它結果很有可能就是比
link |
20:50.000
訓練在英文上
link |
20:51.000
測試在中文上的結果還要好
link |
20:53.000
因為英文跟中文
link |
20:54.000
畢竟看起來是不太一樣的
link |
20:57.000
所以怎麼辦呢
link |
20:59.000
有一個方法可以去修正
link |
21:01.000
multilingual bird的output
link |
21:04.000
假設我們現在訓練的時候
link |
21:06.000
是訓練在英文上
link |
21:07.000
所以你的downstream model
link |
21:09.000
它看得懂英文的representation
link |
21:12.000
如果給它中文的句子
link |
21:13.000
抽出中文的representation
link |
21:15.000
雖然downstream model
link |
21:16.000
好像也看得懂
link |
21:17.000
但是它畢竟跟英文的representation
link |
21:20.000
還是有一些差異的
link |
21:22.000
怎麼辦呢
link |
21:23.000
我們能不能把這一個
link |
21:27.000
中文的representation
link |
21:29.000
減掉英文跟中文之間的差異
link |
21:33.000
把它做一下修正
link |
21:35.000
讓這些representation
link |
21:36.000
看起來比較像是英文
link |
21:40.000
然後這個downstream model
link |
21:42.000
就比較有機會得到好的結果
link |
21:45.000
這個結果如何呢
link |
21:47.000
我把論文放在右上角這邊
link |
21:50.000
給大家參考
link |
21:52.000
所以第一個故事
link |
21:54.000
是Bird有跨語言的能力
link |
21:57.000
接下來要講一個更離奇的故事
link |
22:01.000
是Bird不只有跨語言的能力
link |
22:04.000
只有supervised model
link |
22:05.000
不只有跨語言的能力
link |
22:07.000
它還有跨學科的能力
link |
22:11.000
什麼叫跨學科的能力呢
link |
22:13.000
這邊我們要做的事情是
link |
22:15.000
假設我們把model
link |
22:17.000
pretrained在人類的語言上
link |
22:21.000
接下來我們能不能夠
link |
22:23.000
讓它去做一些跟人類語言
link |
22:26.000
完全無關的任務
link |
22:27.000
比如說DNA的分類
link |
22:29.000
或蛋白質的分類
link |
22:31.000
如果我們讓這些模型
link |
22:33.000
去做一些跟人類語言
link |
22:35.000
完全沒有關係的任務
link |
22:37.000
它會有幫助嗎
link |
22:39.000
那等一下要講的
link |
22:41.000
是高偉聰同學在ENNLP 2021
link |
22:44.000
發表的論文
link |
22:46.000
等一下只是摘要部分的實驗結果
link |
22:49.000
如果你想要更知道論文的
link |
22:51.000
詳細的實驗結果的話
link |
22:53.000
可以參見放在右下角的論文
link |
22:57.000
好那這些訓練在人類語言上的
link |
23:01.000
在人類語言上做pre-trained的BERT
link |
23:04.000
它把它用在跟人類語言
link |
23:07.000
無關的任務上
link |
23:08.000
到底有沒有幫助呢
link |
23:10.000
那你第一個也許會想問的問題是
link |
23:13.000
pre-trained在人類語言上的模型
link |
23:16.000
它只會在人類語言上做填空題
link |
23:19.000
它只看得懂人類語言
link |
23:21.000
它只會拿人類語言當作輸入
link |
23:23.000
那怎麼把它用在DNA或蛋白質上呢
link |
23:28.000
DNA就是由四種去氧核糖核酸所構成的
link |
23:32.000
DNA是由ATCG四種去氧核糖核酸所構成的
link |
23:38.000
所以如果給你一個DNA的序列
link |
23:41.000
那它其實是用ATCG等連串的符號所表示的
link |
23:47.000
那接下來我們就建一個表格
link |
23:51.000
這個表格裡面把ATCG四種去氧核糖核酸
link |
23:56.000
分別對應到英文的四個詞彙
link |
24:00.000
而且我們發現這個對應的關係並不重要
link |
24:03.000
等一下雖然沒有講這方面的實驗
link |
24:05.000
但是這個對應的關係啊
link |
24:07.000
我們有做過大量的嘗試
link |
24:09.000
發現對應的關係並不重要
link |
24:11.000
這個表格隨機生成就好
link |
24:14.000
好 那我們呢
link |
24:16.000
假設把A對應到We T對應到You C對應到He G對應到She
link |
24:21.000
那給你一個DNA sequence
link |
24:23.000
它是AGAC
link |
24:24.000
那A就對到We G就對到She
link |
24:27.000
A再對到We C再對到He
link |
24:29.000
這個DNA sequence就變成一串英文
link |
24:32.000
We She We He
link |
24:34.000
好 這一段不知所云的英文
link |
24:36.000
把它丟到BERT裡面去
link |
24:39.000
然後呢用這個BERT的模型來做DNA的分類
link |
24:45.000
那一樣呢
link |
24:47.000
如果你要做分類的話呢
link |
24:49.000
你需要在BERT的後面多加一個linear的model
link |
24:52.000
那linear的model是需要train from scratch
link |
24:55.000
是需要從頭訓練的
link |
24:57.000
但是我們的BERT的本體不需要從頭訓練
link |
25:00.000
它已經有pre-trained過了
link |
25:02.000
我們會用一個pre-trained的BERT來做initialization
link |
25:06.000
那我這邊要特別強調的事情是
link |
25:08.000
我知道已經有很多研究
link |
25:10.000
在DNA在蛋白質的sequence上面做pre-training
link |
25:14.000
我這邊要做的研究跟那些在DNA蛋白質上
link |
25:17.000
做pre-training的研究是完全不一樣的
link |
25:20.000
我們這邊要做的事情是
link |
25:22.000
這個BERT它是在英文上做填空題
link |
25:25.000
它是pre-trained在英文上
link |
25:27.000
但我們把它用在蛋白質上面
link |
25:30.000
用在DNA的分類上面
link |
25:32.000
看看會發生什麼樣的事情
link |
25:36.000
好 那以下呢就是實驗結果
link |
25:39.000
我們試了三個不同的蛋白質分類任務
link |
25:43.000
我們試了四個不同的DNA分類任務
link |
25:47.000
我們還試了一個音樂的分類任務
link |
25:50.000
那這邊這個音樂的任務並沒有真的用到聲音訊號
link |
25:53.000
它是根據音符來判斷一首歌的風格
link |
25:58.000
好 那這邊我們就做了一大堆
link |
26:00.000
跟人類語言無關的任務
link |
26:05.000
好 那這個藍色的框框裡面的結果
link |
26:09.000
是假設你沒有用pre-trained在英文上的模型
link |
26:14.000
這是你在這些不同的任務上
link |
26:16.000
可以得到的正確率
link |
26:18.000
這邊的數值是正確率
link |
26:19.000
所以越大越好
link |
26:21.000
如果我們用pre-trained在英文上的BERT
link |
26:24.000
來做這三個蛋白質的任務
link |
26:26.000
這四個DNA的任務
link |
26:28.000
還有這個音樂的任務會發生什麼事呢
link |
26:30.000
紅色框框裡面得到的是有使用BERT的正確率
link |
26:36.000
你會發現如果比較有用BERT的結果
link |
26:40.000
跟沒有用BERT的結果
link |
26:42.000
在所有我們嘗試的任務裡面
link |
26:45.000
有用BERT正確率都有顯著的提升
link |
26:49.000
最神奇的事情是BERT
link |
26:51.000
它明明就是用英文的填空題來做pre-training
link |
26:57.000
但是神秘的事情是
link |
26:59.000
在跟人類語言完全無關的任務上也有幫助
link |
27:03.000
所以這顯示什麼
link |
27:05.000
這顯示說這些pre-trained的model
link |
27:07.000
它不只是學到人類語言的語意而已
link |
27:12.000
因為它不只會解人類語言相關的問題
link |
27:15.000
它還可以解跟人類語言無關的問題
link |
27:18.000
這顯示說它不只是學到語意
link |
27:20.000
它還學到了一些更通用的能力
link |
27:24.000
而這些更通用的能力
link |
27:26.000
是可以讓它解一些跟語言無關的任務的
link |
27:30.000
這些更通用的能力
link |
27:31.000
可以讓它把所有的分類任務
link |
27:34.000
所有的其他機器學習的任務都做得更好
link |
27:39.000
有人可能會想說
link |
27:41.000
你才試了一個pre-trained的model
link |
27:43.000
會不會這只是巧合
link |
27:45.000
我告訴你說
link |
27:46.000
這個不是巧合
link |
27:48.000
不是trained在英文上的那個BERT
link |
27:51.000
有什麼特別的地方
link |
27:53.000
我們這邊試了四種不同的pre-trained的model
link |
27:57.000
我們試了BERT
link |
27:58.000
試了Roberta
link |
27:59.000
試了Albert
link |
28:00.000
還試了BERT C
link |
28:02.000
BERT C就是pre-trained在中文上的那個BERT
link |
28:06.000
這邊我們顯示了
link |
28:08.000
我們放了在DNA的分類上的結果
link |
28:11.000
在蛋白質分類上的結果
link |
28:13.000
還有在音樂分類上的結果
link |
28:15.000
藍色的這些bar
link |
28:17.000
藍色的這些bar
link |
28:18.000
代表有用pre-trained在人類語言模型上的結果
link |
28:24.000
橙色的這個bar
link |
28:26.000
代表沒有pre-trained的結果
link |
28:28.000
你會發現很明顯的
link |
28:30.000
各種不同pre-trained在人類語言上的模型都有幫助
link |
28:33.000
各種不同pre-trained在人類語言上的模型
link |
28:36.000
都對DNA的分類
link |
28:38.000
蛋白質的分類等等
link |
28:39.000
跟人類語言無關的任務有幫助
link |
28:44.000
那接下來你可能會問說
link |
28:46.000
既然有幫助
link |
28:47.000
那是在哪一個面向上帶來幫助呢
link |
28:51.000
是讓這個在人類語言上pre-trained
link |
28:55.000
是讓DNA的任務
link |
28:57.000
在optimization的時候更容易
link |
29:00.000
還是讓這些模型generalization
link |
29:03.000
也就是舉一反三的能力
link |
29:05.000
變得更好呢
link |
29:07.000
那到底是哪一個呢
link |
29:09.000
我們先來看optimization的能力
link |
29:12.000
要知道說一個optimization做得如何
link |
29:16.000
就是觀察training的過程中
link |
29:18.000
你的loss function的變化
link |
29:20.000
所以這個圖是某一個任務
link |
29:23.000
其實其他任務做起來
link |
29:25.000
這個結果也差不多啦
link |
29:27.000
這邊只是舉個例子而已
link |
29:28.000
某一個任務在訓練的過程中
link |
29:31.000
loss的變化
link |
29:33.000
那scratch就是代表
link |
29:35.000
沒有用pre-trained的模型
link |
29:37.000
沒有用pre-trained的模型
link |
29:38.000
loss很快就沒有辦法下降了
link |
29:41.000
很快就卡住了
link |
29:43.000
如果有用pre-trained的模型
link |
29:45.000
有用BERT的話
link |
29:46.000
你發現這個loss的下降呢
link |
29:48.000
是可以比trained from scratch
link |
29:50.000
橙色的這條線下降的更多了
link |
29:53.000
這個實驗告訴我們什麼
link |
29:55.000
這個實驗告訴我們說
link |
29:56.000
這些pre-trained的模型
link |
29:58.000
它有強化optimization的能力
link |
30:03.000
那這些pre-trained的模型
link |
30:05.000
有沒有強化generalization的能力呢
link |
30:08.000
那這邊就是舉兩個例子
link |
30:10.000
我們就看左邊這個圖就好
link |
30:13.000
這邊這兩條橙色跟藍色的curve
link |
30:16.000
是訓練的過程中loss的變化
link |
30:19.000
橙色的線是trained from scratch
link |
30:21.000
藍色的線是pre-trained
link |
30:23.000
那我們已經在左邊這個圖看到說
link |
30:26.000
trained from scratch
link |
30:27.000
loss下降的比較慢
link |
30:29.000
這個pre-trained
link |
30:30.000
你的loss這邊是下降的比較快
link |
30:33.000
那但是呢
link |
30:34.000
我們故意讓它trained久一點
link |
30:36.000
trained到說
link |
30:37.000
今天不管是trained from scratch
link |
30:39.000
還是pre-trained
link |
30:40.000
在training data上都得到
link |
30:43.000
非常低的loss
link |
30:44.000
都得到接近零的loss
link |
30:47.000
那今天pre-trained跟trained from scratch
link |
30:50.000
他們在training set上都做的一樣好了
link |
30:53.000
接下來我們在development set上
link |
30:56.000
看看他們舉一反三的能力如何
link |
31:00.000
那development set這邊show的是accuracy啦
link |
31:03.000
所以只是越大越好
link |
31:04.000
那你會發現說pre-training的accuracy
link |
31:07.000
是比trained from scratch的accuracy還要高的
link |
31:10.000
雖然在training的時候可以壓到差不多的loss
link |
31:13.000
但是pre-training的模型
link |
31:15.000
它的舉一反三能力是比較強的
link |
31:18.000
在訓練資料上
link |
31:19.000
pre-training跟trained from scratch的結果
link |
31:21.000
有辦法做到一樣好
link |
31:23.000
就算你在訓練資料上
link |
31:25.000
把pre-training跟trained from scratch
link |
31:27.000
做到一樣好
link |
31:28.000
在development set上
link |
31:29.000
當你要測驗你的模型
link |
31:31.000
舉一反三的能力的時候
link |
31:33.000
你會發現pre-trained的模型
link |
31:35.000
它舉一反三的能力也是比較強的
link |
31:38.000
所以神奇的事情就是
link |
31:40.000
這些pre-trained的模型
link |
31:41.000
是幫助了optimization
link |
31:43.000
還是幫助了generalization呢
link |
31:46.000
它兩者都有幫助到
link |
31:48.000
它讓optimization做得更好
link |
31:50.000
也讓generalization做得更好
link |
31:55.000
接下來也要問的問題是
link |
31:58.000
發現這個BERT有cross-discipline的能力
link |
32:02.000
有跨學科的能力是很神奇的
link |
32:05.000
但是這個發現能幹嘛呢
link |
32:08.000
接下來我要跟你講一個
link |
32:11.000
剛才所講的跨學科的能力的應用
link |
32:16.000
我們可以把這個跨學科的能力
link |
32:19.000
用在speech的question answering上面
link |
32:23.000
台大語音處理實驗室
link |
32:25.000
其實很早就開始研究
link |
32:27.000
speech question answering這個問題
link |
32:29.000
在2016年之前
link |
32:31.000
就嘗試想要讓機器
link |
32:33.000
去做托福的聽力測驗
link |
32:35.000
也就是讓機器聽一段聲音
link |
32:38.000
就跟人去考托福的時候考的考題
link |
32:40.000
是一樣的
link |
32:41.000
讓機器去聽一段人考的托福的試題
link |
32:45.000
然後給他聽一個問題
link |
32:47.000
然後看他能不能從四個選項裡面
link |
32:49.000
選出正確的答案
link |
32:52.000
那托福聽力測驗畢竟是選擇題
link |
32:55.000
所以還是比較簡單的
link |
32:58.000
後來我們又嘗試讓機器
link |
33:00.000
做了真正的question answering
link |
33:03.000
所謂真正的question answering
link |
33:04.000
就是說你給他一個問題
link |
33:07.000
給他一篇語音的文章
link |
33:10.000
然後告訴你說正確的答案
link |
33:12.000
出現在這個語音文章的聲音檔的
link |
33:15.000
第幾秒到第幾秒
link |
33:18.000
這個是發表在
link |
33:20.000
Interspeech 2018的文章
link |
33:22.000
當時我們做了一個
link |
33:24.000
可以拿來做speech question answering
link |
33:26.000
的benchmark compass
link |
33:27.000
叫做Spoken SQUAD
link |
33:29.000
顧名思義它就是SQUAD的語音版
link |
33:34.000
但是當時是怎麼解的呢
link |
33:36.000
當時要解speech question answering的問題
link |
33:39.000
都是用一個cascade model
link |
33:41.000
也就是我們先把聲音訊號
link |
33:43.000
透過語音辨識辨識成文字
link |
33:45.000
然後在語音辨識的結果上面去做理解
link |
33:50.000
套用一個文字處理的模型
link |
33:52.000
在語音辨識的結果上面進行理解
link |
33:56.000
後來有一個很厲害的模型
link |
33:58.000
叫做speech bird
link |
34:00.000
這個speech bird
link |
34:01.000
它是一個
link |
34:03.000
這個是莊永松同學做的
link |
34:05.000
這個speech bird
link |
34:06.000
它是一個end-to-end的模型
link |
34:08.000
它確實可以給它語音檔
link |
34:11.000
給它問題就輸出
link |
34:13.000
這個在語音檔的哪一個位置
link |
34:16.000
有出現答案
link |
34:18.000
但是它在訓練的時候
link |
34:20.000
它還是需要語音跟文字成對的資料
link |
34:24.000
才有辦法訓練這個speech bird
link |
34:27.000
所以這個speech bird
link |
34:28.000
離我的夢想還差一步
link |
34:31.000
我對於speech question answering的期待是
link |
34:34.000
我們有沒有可能
link |
34:35.000
我們的訓練資料是完全沒有文字的transcription
link |
34:40.000
我們只有語音的問題
link |
34:42.000
語音的文章
link |
34:44.000
還有標註答案出現在語音文章裡面的哪一個片段
link |
34:50.000
我們沒有任何文字的transcription
link |
34:53.000
在這種情況下
link |
34:54.000
我們有沒有可能訓練一個QA的模型
link |
34:57.000
這個QA的模型不做語音辨識
link |
35:00.000
它可以做到聽一個問題
link |
35:03.000
聽一段聲音檔
link |
35:05.000
然後根據這個問題的內容
link |
35:07.000
它就可以找出在聲音檔的哪裡到哪裡
link |
35:11.000
有出現問題的答案
link |
35:13.000
我們有沒有可能在完全不做語音辨識
link |
35:16.000
在完全沒有任何語音跟文字成對資料的情況下
link |
35:22.000
就學一個QA的模型
link |
35:24.000
讀聲音檔直接告訴我們
link |
35:26.000
答案出現在聲音檔的哪一個位置
link |
35:29.000
過去
link |
35:30.000
這一直是一個很有挑戰性的問題
link |
35:33.000
要訓練一個模型
link |
35:34.000
它讀語音的問題
link |
35:36.000
讀一段語音檔
link |
35:37.000
告訴你說正確答案落在聲音檔的哪裡
link |
35:40.000
直接train
link |
35:41.000
顯然難度非常的高
link |
35:44.000
但是今天
link |
35:45.000
我們有了pre-trained語音的模型
link |
35:49.000
比如說Hubert
link |
35:51.000
所以我覺得說
link |
35:52.000
有了這些pre-trained的模型
link |
35:54.000
也許我們有機會再來挑戰一次
link |
35:57.000
10-to-end的speech question answer
link |
36:00.000
但是我們用語音的BERT
link |
36:02.000
我用這個Hubert來initialize這個模型
link |
36:06.000
語音QA的模型發現
link |
36:08.000
語音的QA還是做不起來
link |
36:12.000
我仔細想想
link |
36:13.000
這個結果好像也是可以預期的
link |
36:16.000
為什麼呢
link |
36:17.000
因為如果你分析這些語音的pre-trained model
link |
36:20.000
比如說Hubert的representation
link |
36:22.000
你會發現
link |
36:23.000
其實他們沒有學到太多語意的資訊
link |
36:26.000
而如果你要解speech question answer的model
link |
36:29.000
你的模型
link |
36:30.000
不只是要能夠抽出聲音訊號的內容
link |
36:34.000
它還必須要理解
link |
36:36.000
這些內容背後所代表的意思
link |
36:39.000
所以也許光用Hubert是不夠的
link |
36:42.000
我們的想法是說
link |
36:44.000
我們把Hubert的輸出
link |
36:46.000
做tokenization
link |
36:48.000
把它離散化
link |
36:50.000
變成discrete的token
link |
36:52.000
接下來在discrete的token後面
link |
36:54.000
再疊幾層self-attention的layer
link |
36:58.000
那我們期待說
link |
36:59.000
也許Hubert只抽出content的資訊
link |
37:03.000
他是告訴我們聲音的內容是什麼
link |
37:05.000
但他還沒有辦法做到理解
link |
37:07.000
我們期待透過後面多加幾層neural network
link |
37:11.000
多加幾層self-attention
link |
37:13.000
可以讓整個模型具有理解的能力
link |
37:17.000
那在多加幾個self-attention layer以後
link |
37:20.000
有沒有辦法讓整個模型
link |
37:22.000
可以做語音的speech的question answering呢
link |
37:26.000
答案是不行
link |
37:28.000
還是做不起來
link |
37:31.000
那怎麼辦呢
link |
37:33.000
那我就突發奇想
link |
37:35.000
想說會不會我們應該也要pre-train
link |
37:40.000
後面這一個模型呢
link |
37:43.000
我這個接在語音的模型
link |
37:45.000
後面的這個模型
link |
37:47.000
這些layer是不是應該要用
link |
37:50.000
pre-train在文字上的BERT
link |
37:52.000
來做initialization呢
link |
37:55.000
講到這邊有人可能會覺得說
link |
37:57.000
老師你是不是頭腦壞掉了
link |
38:00.000
你早上是不是吃了什麼髒東西
link |
38:02.000
這個想清楚啊
link |
38:04.000
這個文字的BERT
link |
38:06.000
是訓練在人類的語言上
link |
38:09.000
所以它的輸入是什麼
link |
38:11.000
它的輸入是文字
link |
38:14.000
那它有辦法看得懂
link |
38:17.000
語音上面pre-train的模型它的輸出嗎
link |
38:20.000
語音上的pre-train模型
link |
38:21.000
它的輸出的這些符號
link |
38:22.000
輸出的這些token
link |
38:24.000
輸出的這些ID
link |
38:25.000
跟文字是沒有什麼關係的
link |
38:28.000
這邊這個9號
link |
38:29.000
我們根本不知道對應到哪一個詞彙
link |
38:32.000
對應到哪一個文字的詞彙
link |
38:34.000
那我們直接把這樣的東西
link |
38:36.000
丟給文字上面pre-train的BERT
link |
38:39.000
那會有好的結果嗎
link |
38:42.000
我如果之前沒有做過
link |
38:44.000
把BERT用在DNA上面的實驗
link |
38:46.000
我可能會覺得這個實驗呢
link |
38:48.000
根本就是在瞎搞
link |
38:50.000
但是你想想看
link |
38:51.000
我們剛才已經看到
link |
38:53.000
訓練在文字上的BERT
link |
38:55.000
可以用在DNA啊
link |
38:57.000
蛋白質的分類任務上
link |
38:59.000
所以其實我們也可以做一樣的事情
link |
39:02.000
我們可以把這個Huber呢
link |
39:05.000
它output的這些ID
link |
39:07.000
就隨機對應到英文的文字
link |
39:11.000
比如說ID編號1就對應到U
link |
39:14.000
就別對應到He
link |
39:16.000
以此類推
link |
39:17.000
然後呢
link |
39:18.000
把這些ID轉成文字以後
link |
39:20.000
丟給文字的BERT
link |
39:22.000
讓他來做question answering
link |
39:24.000
然後呢
link |
39:25.000
他會可以
link |
39:26.000
然後我們fine-tune這個文字的BERT
link |
39:28.000
看看能不能夠把
link |
39:30.000
speech的question answering做起來
link |
39:32.000
結果是如何呢
link |
39:34.000
結果是
link |
39:35.000
有pre-train以後
link |
39:36.000
神奇的事情是
link |
39:38.000
就起飛了
link |
39:39.000
如果沒有拿文字的BERT
link |
39:41.000
來pre-train這個黃色的module
link |
39:43.000
那你的F1 score是6%
link |
39:45.000
那基本上就是沒做起來
link |
39:47.000
但是如果用文字的模型
link |
39:51.000
來pre-train這個黃色的module
link |
39:53.000
那你可以得到54%的F1 score
link |
39:56.000
也就是說
link |
39:57.000
你現在有語音上pre-train的模型
link |
40:00.000
也有文字上pre-train的模型
link |
40:02.000
把他們兩個接起來以後
link |
40:05.000
達到了不可思議的效果
link |
40:07.000
可以真的把speech的question answering
link |
40:09.000
做起來
link |
40:10.000
你可以得到54%的F1 score
link |
40:13.000
那這個54%的F1 score
link |
40:16.000
他的表現到底是多好呢
link |
40:18.000
那這邊呢
link |
40:19.000
就只列一個圖表了
link |
40:21.000
那如果大家有興趣的話
link |
40:22.000
這個是林冠廷同學做的
link |
40:24.000
可以參見林冠廷同學的論文
link |
40:27.000
那這個綠色的這一條線
link |
40:29.000
他是cascade模型的表現
link |
40:32.000
也就是你先把聲音訊號
link |
40:34.000
做語音辨識
link |
40:35.000
把它轉成文字
link |
40:36.000
在這些文字上面
link |
40:38.000
再去做question answering
link |
40:40.000
那因為有做語音辨識
link |
40:42.000
所以顯然你的模型
link |
40:44.000
受到語音辨識的錯誤率
link |
40:46.000
影響非常的大
link |
40:48.000
所以我們這邊的橫軸是什麼
link |
40:50.000
橫軸是語音辨識的錯誤率
link |
40:53.000
縱軸是QA的正確率
link |
40:56.000
那我們發現
link |
40:57.000
隨著語音辨識的錯誤率越來越大
link |
41:00.000
QA的模型
link |
41:01.000
他的這個錯誤率呢
link |
41:04.000
會越來越高
link |
41:05.000
答對的題目會越來越少
link |
41:07.000
那這是很直覺的
link |
41:08.000
如果語音辨識辨識錯了
link |
41:10.000
後面再接一個QA的模型
link |
41:12.000
顯然他也沒有辦法
link |
41:13.000
得到正確的答案
link |
41:15.000
藍色的這條線呢
link |
41:17.000
是end-to-end
link |
41:19.000
完全沒有做語音辨識的模型
link |
41:22.000
藍色這條線
link |
41:23.000
就是我剛才講的
link |
41:24.000
把一個語音上普串的模型
link |
41:26.000
後面再接一個文字上普串的模型
link |
41:29.000
所得到的結果
link |
41:30.000
那你會發現藍色這一條線呢
link |
41:32.000
基本上不受語音辨識錯誤的影響
link |
41:35.000
那當語音辨識錯誤的
link |
41:37.000
這個語音辨識的錯誤率
link |
41:39.000
大概超過25%的時候
link |
41:41.000
這個藍色的這個end-to-end的模型
link |
41:44.000
他的正確率居然可以超過
link |
41:47.000
有做語音辨識的模型
link |
41:50.000
所以神奇的地方是
link |
41:52.000
把語音的普串模型
link |
41:54.000
加上文字的普串模型合起來
link |
41:56.000
得到不可思議的效果
link |
41:58.000
我們可以真的有機會
link |
42:00.000
把speech question answer end-to-end訓練出來
link |
42:05.000
好 這是第二個故事
link |
42:07.000
那第三個故事啊
link |
42:08.000
我想跟大家分享的是
link |
42:10.000
我們甚至可以在人造的資料上
link |
42:15.000
訓練出BERT
link |
42:18.000
好 那我們知道說一般而言
link |
42:21.000
那BERT呢
link |
42:22.000
就是訓練在人類的語言上
link |
42:24.000
然後呢
link |
42:25.000
你會在這個NLP的任務上面呢
link |
42:28.000
做fine-tune 然後做測試
link |
42:31.000
那在NLP的任務上呢
link |
42:32.000
最知名的就是GLUE這個data set
link |
42:34.000
裡面有好幾個NLP的任務
link |
42:36.000
那通常會用GLUE的data set
link |
42:38.000
來檢視BERT模型
link |
42:40.000
他pre-trained的好不好
link |
42:42.000
這個pre-trained有沒有學到東西
link |
42:45.000
但是我們剛才已經有看到說
link |
42:48.000
今天這些pre-training呢
link |
42:50.000
他有很厲害的跨語言的能力
link |
42:53.000
訓練在人類語言上的模型
link |
42:55.000
都可以去解DNA的分類
link |
42:57.000
那如果我們要解
link |
42:58.000
人類語言相關的NLP任務
link |
43:01.000
我們真的需要拿人類的文字
link |
43:04.000
來做pre-training嗎
link |
43:06.000
我們能不能不用人類的文字
link |
43:09.000
來做pre-training
link |
43:10.000
那我們這邊就做了一個嘗試
link |
43:12.000
我們呢
link |
43:13.000
用一些簡單的規則
link |
43:15.000
產生一些token的sequence
link |
43:17.000
我們用一些簡單的規則
link |
43:19.000
製造出假的資料
link |
43:21.000
在這些假的資料上面做pre-training
link |
43:24.000
BERT呢
link |
43:25.000
在這些假的資料上面
link |
43:26.000
學習做填空題
link |
43:28.000
然後看看
link |
43:29.000
他在group上面
link |
43:31.000
會有什麼樣的表現
link |
43:33.000
那你可能會問說
link |
43:34.000
做這個實驗有什麼意義呢
link |
43:36.000
做這個實驗的意義是
link |
43:37.000
我們可以透過使用不同的規則
link |
43:40.000
產生不同的人造的資料
link |
43:43.000
那有不同的人造資料
link |
43:45.000
我們就可以讓BERT
link |
43:46.000
具備不同的能力
link |
43:48.000
然後我們可以藉由
link |
43:49.000
讓BERT具備不同的能力
link |
43:51.000
知道說
link |
43:52.000
如果我們要讓一個pre-trained的模型
link |
43:55.000
在人類語言相關的任務上
link |
43:57.000
在group上面有好的表現
link |
43:59.000
那什麼樣的能力是重要的
link |
44:01.000
什麼樣的能力是必須的
link |
44:05.000
而這個研究成果呢
link |
44:07.000
是幫大家上過很多次課的
link |
44:10.000
江承翰同學的研究成果
link |
44:14.000
那我們把實驗流程
link |
44:15.000
講得更具體一點
link |
44:17.000
所以我們就是有人造的資料
link |
44:19.000
拿這些人造的資料呢
link |
44:21.000
來訓練一個BERT
link |
44:22.000
而這個BERT
link |
44:23.000
不是一般用人類語言訓練的BERT
link |
44:26.000
他是用人造的資料訓練出來的BERT
link |
44:30.000
所以他只能夠讀這種ID
link |
44:33.000
他讀不懂人類的語言
link |
44:35.000
那你怎麼拿這樣子的BERT
link |
44:37.000
來做人類語言相關的任務呢
link |
44:40.000
你就是有一個人類語言的句子輸進來
link |
44:43.000
你需要有一個表格
link |
44:44.000
告訴我們說
link |
44:45.000
人類的語言的每一個詞彙
link |
44:47.000
對應到這個人造資料裡面的哪一個ID
link |
44:55.000
那這個ID跟這個人類語言之間的對應關係
link |
44:58.000
隨機生成就好
link |
45:00.000
所以那個的呢
link |
45:01.000
就對應到編號1
link |
45:03.000
Movie呢
link |
45:04.000
就對應到編號101
link |
45:06.000
就對應到編號3
link |
45:08.000
就對應到編號4
link |
45:09.000
以此類推
link |
45:10.000
所以一個人類的句子
link |
45:12.000
他會被轉成一個Token Sequence
link |
45:14.000
丟到BERT裡面
link |
45:15.000
然後呢你就把這個Token Sequence輸入到BERT裡面
link |
45:19.000
接下來呢
link |
45:20.000
你就做
link |
45:21.000
舉例來說
link |
45:22.000
假設你現在要做的
link |
45:23.000
是Sentimental Classification
link |
45:24.000
要決定說輸入的這個句子
link |
45:26.000
是正面的句子
link |
45:27.000
還是負面的句子
link |
45:28.000
你就會去Trend這個Linear的Model
link |
45:31.000
然後這個BERT呢
link |
45:32.000
它是用這個Token ID去Trend過
link |
45:35.000
但是你也可以Fine-Tune這個BERT的模型
link |
45:38.000
那接下來呢
link |
45:39.000
我們就來看看實驗結果怎樣
link |
45:42.000
那這個圖表上的縱軸啊
link |
45:44.000
代表的是
link |
45:46.000
如果我們比較有Pre-Trend的模型
link |
45:49.000
跟沒有Pre-Trend
link |
45:50.000
也就是Trend From Scratch的模型
link |
45:53.000
它們在Rule的那些任務上
link |
45:56.000
平均表現的差異
link |
45:58.000
那個值
link |
45:59.000
這個值越大
link |
46:00.000
就代表說
link |
46:01.000
Pre-Trend這件事情越有效
link |
46:04.000
那我們先來看看
link |
46:05.000
拿英文資料Pre-Trend的結果
link |
46:08.000
如果拿英文資料Pre-Trend
link |
46:10.000
相較於Trend From Scratch
link |
46:12.000
你有20%的進步
link |
46:14.000
所以這可以看作是Upper Bound了
link |
46:16.000
如果你今天要解英文相關的任務
link |
46:19.000
當然是拿英文的Pre-Trend的資料
link |
46:21.000
結果會是最好的
link |
46:23.000
拿英文的Pre-Trend的資料
link |
46:24.000
在英文的相關任務上
link |
46:26.000
相較於沒有Pre-Trend
link |
46:27.000
有20%的進步
link |
46:30.000
那今天如果我們的這個Token
link |
46:34.000
我們的這個人造的資料
link |
46:36.000
是隨機生成的
link |
46:38.000
那會發生什麼事呢
link |
46:40.000
我們發現如果是用隨機生成的資料
link |
46:43.000
那Pre-Trend完全就沒有幫助
link |
46:47.000
這告訴我們什麼事情
link |
46:48.000
這告訴我們說資料還是重要
link |
46:52.000
因為我們剛才前面看到說
link |
46:54.000
BERT有神奇的這個化學科的能力
link |
46:58.000
怎麼訓練在人類語言上
link |
47:00.000
在DNA上也有用
link |
47:02.000
那這會讓人不禁懷疑說
link |
47:04.000
會不會資料本身
link |
47:06.000
在什麼資料上面Pre-Trend
link |
47:08.000
根本不重要
link |
47:09.000
重要的也許是Pre-Trend這個動作
link |
47:12.000
只要有做Pre-Trend
link |
47:13.000
在什麼資料上都會好
link |
47:15.000
但是呢我們現在這個實驗
link |
47:17.000
就是破解剛才那個假設
link |
47:20.000
資料還是重要的
link |
47:22.000
如果你今天的資料
link |
47:23.000
是隨機生成的沒有什麼規律
link |
47:26.000
那拿這些沒有規律的資料做Pre-Trend
link |
47:29.000
那也是沒有幫助
link |
47:32.000
好那接下來呢
link |
47:34.000
我們發現有某一種人造的資料
link |
47:37.000
非常有用
link |
47:38.000
它可以得到幾乎15%的進步量
link |
47:41.000
跟訓練在英文上其實只差了一點點
link |
47:44.000
那什麼樣人造的資料非常有用呢
link |
47:47.000
我們發現
link |
47:48.000
假設你生出來的這一些Token
link |
47:51.000
它是成對的
link |
47:53.000
也就是你產生出來的Sequence裡面
link |
47:55.000
如果出現一個5
link |
47:57.000
那等一下一定要出現一個5
link |
47:59.000
出現個3
link |
48:00.000
等一下一定要出現個3
link |
48:01.000
出現個0
link |
48:02.000
等一下一定要出現個0
link |
48:04.000
如果你產生出來的Sequence是成對的
link |
48:06.000
拿這種成對的資料來訓練BERT
link |
48:09.000
在人類語言上面
link |
48:11.000
神奇的事情是非常有效
link |
48:14.000
跟英文只差了一點點
link |
48:17.000
大概可以做到英文的四分之三那麼好
link |
48:21.000
好那為什麼會這樣呢
link |
48:23.000
過去也有一篇論文
link |
48:25.000
有做過很類似的事情
link |
48:27.000
他也有拿人造的資料來訓練一個模型
link |
48:31.000
只是那個時候做的不是今天的BERT
link |
48:33.000
所以那個實驗的Setting是非常不一樣的
link |
48:35.000
不過過去呢
link |
48:37.000
這篇Dan Jurewski的論文
link |
48:39.000
他說Learning Music Helps You Read
link |
48:41.000
所以他也發現說
link |
48:42.000
趁在一些人造的資料上面
link |
48:44.000
會對自然語言處理有幫助
link |
48:46.000
那他也發現說這種成對的資料呢
link |
48:50.000
是蠻有幫助的
link |
48:52.000
這種在成對的資料上做訓練
link |
48:54.000
是對自然語言處理是有幫助的
link |
48:57.000
那也許是因為在人類的語言裡面
link |
49:00.000
有時候也會有這種成對的結構
link |
49:04.000
你提到某一個詞彙的時候
link |
49:06.000
接下來接另外一個詞彙的機率就會非常大
link |
49:08.000
你提到i的時候
link |
49:10.000
後面比較有可能會接n
link |
49:12.000
你提到i的時候後面不會接r等等
link |
49:14.000
人類語言好像也有這種成對的資訊
link |
49:17.000
也許這可以解釋
link |
49:19.000
為什麼在這種人造資料上面
link |
49:21.000
做Pretraining是有用的
link |
49:24.000
好那接下來更離奇的事情發生了
link |
49:29.000
我們有另外一種方法叫做Shuffle
link |
49:33.000
這個Shuffle呢
link |
49:35.000
他可以達到跟剛才那個成對的資料
link |
49:38.000
也是差不多的Pretraining的進步量
link |
49:42.000
那這種Shuffle是怎麼做的呢
link |
49:45.000
這種Shuffle的做法是
link |
49:47.000
你先給一個
link |
49:49.000
你先產生一些連續編號的Token Sequence
link |
49:55.000
比如說1到64
link |
49:58.000
接下來把他隨機的Shuffle
link |
50:02.000
把他的順序打亂
link |
50:04.000
然後在這個打亂順序的Sequence上面
link |
50:07.000
去做Mask去做填空題
link |
50:11.000
那你會發現說
link |
50:13.000
你的模型訓練在這種打亂的Sequence上面
link |
50:16.000
他也非常好
link |
50:18.000
這種打亂的Sequence對於Pretraining來說
link |
50:21.000
也非常有幫助
link |
50:23.000
那這個就非常難以解釋
link |
50:25.000
就很難解釋說
link |
50:26.000
這樣子的Sequence跟人類的語言有什麼關係
link |
50:29.000
那神奇的事情就是
link |
50:32.000
這樣子的Sequence對Pretraining
link |
50:35.000
用在人類的語言上居然是有幫助的
link |
50:40.000
那到底有什麼樣的原因
link |
50:43.000
造成這一些人造的資料有用或沒有用呢
link |
50:47.000
我們剛才一開始說
link |
50:49.000
我們想要透過不同的人造的資料
link |
50:51.000
讓模型具備不同的能力
link |
50:53.000
看看說什麼樣的能力
link |
50:55.000
對於解NLP的任務是重要的
link |
50:58.000
到底什麼樣的能力
link |
51:00.000
對於解NLP的任務是重要的呢
link |
51:03.000
我們沒有非常精確的答案
link |
51:05.000
但是這邊我們有一個發現給大家參考
link |
51:09.000
這個發現是什麼呢
link |
51:11.000
左邊這個圖啊
link |
51:12.000
他的縱軸仍然是Pretraining跟沒有Pretraining
link |
51:17.000
這個Pretraining跟沒有Pretraining相減後的差異
link |
51:21.000
所以值越大代表Pretraining越有效
link |
51:25.000
那這邊4 6 8 16 32的數字代表什麼意思呢
link |
51:29.000
這個數字代表說
link |
51:30.000
我們一樣都是用剛才Shuffle的方法
link |
51:33.000
但是如果我們今天選的是數字4的話
link |
51:36.000
就代表我們一次只產生4個數字連續的Token
link |
51:42.000
比如說我們先產生1到4
link |
51:44.000
然後接下來呢
link |
51:45.000
就要重新產生4個數字連續的Token
link |
51:48.000
比如說3到6
link |
51:50.000
然後接下來呢
link |
51:51.000
我們以4個4個為單位
link |
51:54.000
把4個Token做打亂
link |
51:56.000
4個Token做打亂
link |
51:58.000
那在這個Sequence上面去做Pretraining
link |
52:02.000
那我們發現說呢
link |
52:03.000
如果你今天只用4個4個一數
link |
52:07.000
你每次只產生4個連續的Sequence
link |
52:10.000
那你的這個進步量呢
link |
52:12.000
其實沒有很大
link |
52:13.000
但如果你是產生64個連續的Sequence
link |
52:16.000
這個進步量就很可觀了
link |
52:19.000
這告訴我們什麼
link |
52:21.000
這告訴我們說
link |
52:22.000
假設你給你的Pretrain Model
link |
52:26.000
這個產生比較長的連續數字的Sequence
link |
52:31.000
那要解這樣子的問題的填空題
link |
52:36.000
那你的模型必須要學會
link |
52:38.000
看一個比較長的範圍
link |
52:41.000
那有可能看一個比較長的範圍
link |
52:44.000
對於Pretrain是重要的
link |
52:47.000
如果今天模型在Pretrain的時候
link |
52:49.000
可以學看一個Sequence裡面比較長的範圍
link |
52:51.000
可以讓他在NLP的當初任務上面做得比較好
link |
52:56.000
但這只是一個發現
link |
52:58.000
有沒有其他的因素影響這些模型呢
link |
53:02.000
有沒有其他的因素
link |
53:03.000
也對NLP的Pretraining很重要呢
link |
53:05.000
這個是上代研究的問題
link |
53:08.000
我們這邊只提供一個發現
link |
53:09.000
發現說如果你強迫讓你的Sequence
link |
53:12.000
在Pretrain的時候
link |
53:13.000
可以看到比較大的範圍
link |
53:14.000
強迫他要看比較大的範圍
link |
53:16.000
才能夠解填空題的話
link |
53:18.000
那他可能可以做得比較好
link |
53:20.000
那有沒有其他的因素
link |
53:22.000
目前還在研究中
link |
53:25.000
那以上就是跟大家分享
link |
53:27.000
三個有趣的跟Sales Supervised Learning
link |
53:30.000
有關的故事
link |
53:32.000
然後這個Sales Supervised Learning
link |
53:34.000
還有很多未解之謎
link |
53:36.000
等著大家來發現
link |
53:38.000
這個就是今天想跟大家分享的內容
link |
53:41.000
謝謝大家謝謝