技術前瞻
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnL3kzMmNzYmVzNhZDZ0IGNhJGZiRTO2cTOhljZyITYzkzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
在預訓練模型上訓練Bert,并在我們的資料上fine-tune所需要的模型!
就像學習英文一樣! 應該是通讀英文文章後再去做題,而不是先做題再讀懂文章!
Pre-train Model
Embedding
剛開始是 Word2Vertor,但是不能所有的單詞都這樣的! 太多了
要不,用字母和偏旁?
但是你這樣下去,是有詞義歧義的!
是以才有了Contextualized Word Embedding! 這裡中間的Model可以選擇是LSTM、Self-attention layers或者是Tree-based model(文法樹)! 下面的連結是關于Tree-based model的!
BERT要不做大,要不做小! 大公司都是越來越大,但是窮人就是使得Bert越來越小!
其中最有名的是ALBERT,它神奇的地方在于基本都和BERT一樣,不同的方法在于原來的BERT12層、24層都是不同的參數,但是ALBERT12層、24層都是一樣的參數,但是效果比BERT還要好。
究竟怎麼讓模型變小呢? 這裡有很多的方法可以自己去了解一下:
Network Architecture
如果我們處理更多的句子,而不是僅僅的sequence的tokens,而是segment-level的! 而是成段的,整個文章放入網絡!
how to fine-tune
具體的NLP任務來進行fine-tune!
NLP的任務:
如果輸入多個句子時:
輸入兩個句子,中間有【SEP】作為隔絕! 兩個句子可以是查詢和檔案的差距,也可以是前提和假設的差異!
如果是輸出時:
one class:
我們可以使用CLS,使得其輸出一個類!
或者我們取幾個向量的平均!
class for each token:
每個token輸出一個類
copy from input:
檔案D和答案query一起作為輸入放到QA model裡,最終輸出兩個整型變量s和e,分别是在文中的答案!
、
在BERT中如果操作的呢? 我們隻需要兩個vector(沒有懂怎麼獲得的,可能是預定義的),其中一個vector用來和document中的輸出vector做dot product來,根據相似度來定是不是是不是起點; 而另一個vector是作為結尾的!
General Sequence(v1):
Bert很适合Seq2Seq中的Encoder,然後經過Decoder來得到輸出的句子! 但是問題在于,現在的Task Specific需要的labeled data不應該多,而且Decoder最好是預訓練的! 但是現實是沒有訓練,那就會受到影響!
General Sequence(v2):
我們可以以預測下一個token的方法來訓練seq2seq!
how to fine-tune:
第一種是将Pre-trained model固定住,第二種是一塊訓練! 但是結果表明,往往一塊訓練效果會更好!
Adaptor:
如果一塊訓練的話,參數實在是太多了!
那麼我們可不可以選擇其中一部分層進行訓練呢? 将這些層稱為Adaptor層!其它地方固定!
Adaptor的方法很多,而且插入到哪裡都是需要研究的! 我們以Transformer為例,我們在Feed-forward layer後加入Adaptor; 同時在訓練之前我們不訓練Adaptor,加入具體任務之後,我們才會訓練Adaptor! 右邊的是Adaptor層的具體,確定參數不會太多!
左側0代表的是如果我們fine-tune整個model得到的結果,下圖中藍色的線表示的是訓練倒數層,第一個點是倒數第一層,第二個點加入了倒數第二層,第三個點是加入了倒數第三層,以此類推! 而橙色的線就表示的是隻訓練其中的Adaptor!
Weighted Features:
其中 W 1 W_1 W1和 W 2 W_2 W2是可以被學出的! 比如我們用最終的特征放入具體的任務中,那麼這個參數就是可以被學習的!其中 W 1 W_1 W1和 W 2 W_2 W2對應于不同層産出的特征! 不同層産出的特征是有不同的側重點的,誰重要誰不重要是需要自己學的!
WHY Pre-train Models?:
為什麼使用Pre-train Models? 因為這些Model真的帶給了我們不錯的效果!
Why FIne-tune?:
實作代表該模型Fine-tune過,虛線代表沒有Fine-tune過! 可以看出所有的實線loss下降的都很快!
如何生成下面的圖像? 可以看右上角的連結!
怎麼看出這個模型是不是有泛化能力? end Point是峽谷的話泛化能力差,如果是盆地,那麼泛化能力就很好!