8.1 遷移學(xué)習(xí)介紹

遷移學(xué)習(xí)

1.遷移學(xué)習(xí)理論

學(xué)習(xí)目標(biāo):

了解遷移學(xué)習(xí)中的有關(guān)概念.

掌握遷移學(xué)習(xí)的兩種遷移方式.

1.1 遷移學(xué)習(xí)中的有關(guān)概念:

預(yù)訓(xùn)練模型

微調(diào)

微調(diào)腳本

1.2 預(yù)訓(xùn)練模型(Pretrained model):

一般情況下預(yù)訓(xùn)練模型都是大型模型,具備復(fù)雜的網(wǎng)絡(luò)結(jié)構(gòu),眾多的參數(shù)量,以及在足夠大的數(shù)據(jù)集下進(jìn)行訓(xùn)練而產(chǎn)生的模型. 在NLP領(lǐng)域,預(yù)訓(xùn)練模型往往是語(yǔ)言模型,因?yàn)檎Z(yǔ)言模型的訓(xùn)練是無(wú)監(jiān)督的,可以獲得大規(guī)模語(yǔ)料,同時(shí)語(yǔ)言模型又是許多典型NLP任務(wù)的基礎(chǔ),如機(jī)器翻譯,文本生成,閱讀理解等,常見(jiàn)的預(yù)訓(xùn)練模型有BERT, GPT, roBERTa, transformer-XL等.

1.3 微調(diào)(Fine-tuning):

根據(jù)給定的預(yù)訓(xùn)練模型,改變它的部分參數(shù)或者為其新增部分輸出結(jié)構(gòu)后,通過(guò)在小部分?jǐn)?shù)據(jù)集上訓(xùn)練,來(lái)使整個(gè)模型更好的適應(yīng)特定任務(wù).

1.4 微調(diào)腳本(Fine-tuning script):

實(shí)現(xiàn)微調(diào)過(guò)程的代碼文件。這些腳本文件中,應(yīng)包括對(duì)預(yù)訓(xùn)練模型的調(diào)用,對(duì)微調(diào)參數(shù)的選定以及對(duì)微調(diào)結(jié)構(gòu)的更改等,同時(shí),因?yàn)槲⒄{(diào)是一個(gè)訓(xùn)練過(guò)程,它同樣需要一些超參數(shù)的設(shè)定,以及損失函數(shù)和優(yōu)化器的選取等, 因此微調(diào)腳本往往也包含了整個(gè)遷移學(xué)習(xí)的過(guò)程.

關(guān)于微調(diào)腳本的說(shuō)明:

一般情況下,微調(diào)腳本應(yīng)該由不同的任務(wù)類(lèi)型開(kāi)發(fā)者自己編寫(xiě),但是由于目前研究的NLP任務(wù)類(lèi)型(分類(lèi),提取,生成)以及對(duì)應(yīng)的微調(diào)輸出結(jié)構(gòu)都是有限的,有些微調(diào)方式已經(jīng)在很多數(shù)據(jù)集上被驗(yàn)證是有效的,因此微調(diào)腳本也可以使用已經(jīng)完成的規(guī)范腳本.

1.5 兩種遷移方式:

(1)直接使用預(yù)訓(xùn)練模型,進(jìn)行相同任務(wù)的處理,不需要調(diào)整參數(shù)或模型結(jié)構(gòu),這些模型開(kāi)箱即用。但是這種情況一般只適用于普適任務(wù), 如:fasttest工具包中預(yù)訓(xùn)練的詞向量模型。另外,很多預(yù)訓(xùn)練模型開(kāi)發(fā)者為了達(dá)到開(kāi)箱即用的效果,將模型結(jié)構(gòu)分各個(gè)部分保存為不同的預(yù)訓(xùn)練模型,提供對(duì)應(yīng)的加載方法來(lái)完成特定目標(biāo).

(2)更加主流的遷移學(xué)習(xí)方式是發(fā)揮預(yù)訓(xùn)練模型特征抽象的能力,然后再通過(guò)微調(diào)的方式,通過(guò)訓(xùn)練更新小部分參數(shù)以此來(lái)適應(yīng)不同的任務(wù)。這種遷移方式需要提供小部分的標(biāo)注數(shù)據(jù)來(lái)進(jìn)行監(jiān)督學(xué)習(xí).

關(guān)于遷移方式的說(shuō)明:

直接使用預(yù)訓(xùn)練模型的方式, 已經(jīng)在fasttext的詞向量遷移中學(xué)習(xí). 接下來(lái)的遷移學(xué)習(xí)實(shí)踐將主要講解通過(guò)微調(diào)的方式進(jìn)行遷移學(xué)習(xí).

2.NLP標(biāo)準(zhǔn)數(shù)據(jù)集

學(xué)習(xí)目標(biāo):

了解NLP中GLUE標(biāo)準(zhǔn)數(shù)據(jù)集合的相關(guān)知識(shí).

掌握GLUE標(biāo)準(zhǔn)數(shù)據(jù)集合的下載方式, 數(shù)據(jù)樣式及其對(duì)應(yīng)的任務(wù)類(lèi)型.

2.1 GLUE數(shù)據(jù)集合的介紹:

GLUE由紐約大學(xué), 華盛頓大學(xué), Google聯(lián)合推出, 涵蓋不同NLP任務(wù)類(lèi)型, 截止至2020年1月其中包括11個(gè)子任務(wù)數(shù)據(jù)集, 成為衡量NLP研究發(fā)展的衡量標(biāo)準(zhǔn).

2.2 GLUE數(shù)據(jù)集合包含以下數(shù)據(jù)集:

diagnostics數(shù)據(jù)集(官方未完善)

CoLA: 語(yǔ)句的語(yǔ)法是否正確, 二分類(lèi)

SST-2: 情感分析語(yǔ)句積極, 消極, 二分類(lèi)

MRPC: 判斷句子對(duì)含義是否相同, 二分類(lèi)

SST-B: 衡量句子對(duì)的相似度, 多分類(lèi)/回歸, 相似度評(píng)分[0.0 - 5.0]

QQP: 判斷句子對(duì)是否重復(fù)性問(wèn)題, 二分類(lèi)

MNLI(SNLI): 判斷句子對(duì)的語(yǔ)義信息的關(guān)系, 三分類(lèi) (蘊(yùn)含, 矛盾, 不蘊(yùn)含不矛盾)

QNLI(RTE, WNLI): 判斷句子對(duì)是否蘊(yùn)含關(guān)系, 二分類(lèi)

2.3 下載GLUE數(shù)據(jù)集:

下載腳本代碼:略

3. NLP中的常用預(yù)訓(xùn)練模型:

????BERT

????GPT

????GPT-2

????Transformer-XL

????XLNet

????XLM

????RoBERTa

????DistilBERT

????ALBERT

????T5

????XLM-RoBERTa

4.?加載和使用預(yù)訓(xùn)練模型:

在這里我們使用torch.hub工具進(jìn)行模型的加載和使用.

這些預(yù)訓(xùn)練模型由世界先進(jìn)的NLP研發(fā)團(tuán)隊(duì)huggingface提供.

加載和使用預(yù)訓(xùn)練模型的步驟:

第一步: 確定需要加載的預(yù)訓(xùn)練模型并安裝依賴(lài)包.

第二步: 加載預(yù)訓(xùn)練模型的映射器tokenizer.

第三步: 加載帶/不帶頭的預(yù)訓(xùn)練模型.

第四步: 使用模型獲得輸出結(jié)果.

5.?遷移學(xué)習(xí)實(shí)踐:

5.1 指定任務(wù)類(lèi)型的微調(diào)腳本:

huggingface研究機(jī)構(gòu)向我們提供了針對(duì)GLUE數(shù)據(jù)集合任務(wù)類(lèi)型的微調(diào)腳本, 這些微調(diào)腳本的核心都是微調(diào)模型的最后一個(gè)全連接層.

通過(guò)簡(jiǎn)單的參數(shù)配置來(lái)指定GLUE中存在任務(wù)類(lèi)型(如: CoLA對(duì)應(yīng)文本二分類(lèi), MRPC對(duì)應(yīng)句子對(duì)文本二分類(lèi), STS-B對(duì)應(yīng)句子對(duì)文本多分類(lèi)), 以及指定需要微調(diào)的預(yù)訓(xùn)練模型.

huggingface研究機(jī)構(gòu)向我們提供了針對(duì)GLUE數(shù)據(jù)集合任務(wù)類(lèi)型的微調(diào)腳本, 這些微調(diào)腳本的核心都是微調(diào)模型的最后一個(gè)全連接層.

通過(guò)簡(jiǎn)單的參數(shù)配置來(lái)指定GLUE中存在任務(wù)類(lèi)型(如: CoLA對(duì)應(yīng)文本二分類(lèi), MRPC對(duì)應(yīng)句子對(duì)文本二分類(lèi), STS-B對(duì)應(yīng)句子對(duì)文本多分類(lèi)), 以及指定需要微調(diào)的預(yù)訓(xùn)練模型.

5.2 指定任務(wù)類(lèi)型的微調(diào)腳本使用步驟:

第一步: 下載微調(diào)腳本文件

第二步: 配置微調(diào)腳本參數(shù) , 創(chuàng)建run_glue.sh文件

# 定義DATA_DIR: 微調(diào)數(shù)據(jù)所在路徑, 這里我們使用glue_data中的數(shù)據(jù)作為微調(diào)數(shù)據(jù)

export DATA_DIR="../../glue_data"

# 定義SAVE_DIR: 模型的保存路徑, 我們將模型保存在當(dāng)前目錄的bert_finetuning_test文件中

export SAVE_DIR="./bert_finetuning_test/"

# 使用python運(yùn)行微調(diào)腳本

# --model_type: 選擇需要微調(diào)的模型類(lèi)型, 這里可以選擇BERT, XLNET, XLM, roBERTa, distilBERT, ALBERT

# --model_name_or_path: 選擇具體的模型或者變體, 這里是在英文語(yǔ)料上微調(diào), 因此選擇bert-base-uncased

# --task_name: 它將代表對(duì)應(yīng)的任務(wù)類(lèi)型, 如MRPC代表句子對(duì)二分類(lèi)任務(wù)

# --do_train: 使用微調(diào)腳本進(jìn)行訓(xùn)練

# --do_eval: 使用微調(diào)腳本進(jìn)行驗(yàn)證

# --data_dir: 訓(xùn)練集及其驗(yàn)證集所在路徑, 將自動(dòng)尋找該路徑下的train.tsv和dev.tsv作為訓(xùn)練集和驗(yàn)證集

# --max_seq_length: 輸入句子的最大長(zhǎng)度, 超過(guò)則截?cái)? 不足則補(bǔ)齊

# --learning_rate: 學(xué)習(xí)率

# --num_train_epochs: 訓(xùn)練輪數(shù)

# --output_dir $SAVE_DIR: 訓(xùn)練后的模型保存路徑

# --overwrite_output_dir: 再次訓(xùn)練時(shí)將清空之前的保存路徑內(nèi)容重新寫(xiě)入

python run_glue.py \

?--model_type BERT \?

?--model_name_or_path bert-base-uncased \

?--task_name MRPC \?

?--do_train \?

?--do_eval \

?--data_dir $DATA_DIR/MRPC/ \

?--max_seq_length 128 \?

?--learning_rate 2e-5 \?

?--num_train_epochs 1.0 \?

?--output_dir $SAVE_DIR \

?--overwrite_output_dir

第三步: 運(yùn)行并檢驗(yàn)效果??sh run_glue.sh(啟動(dòng)腳本會(huì)調(diào)用run_glue.py文件來(lái)執(zhí)行微調(diào)程序。程序主要有三部分功能:加載模型,加載數(shù)據(jù),進(jìn)行微調(diào)(訓(xùn)練,驗(yàn)證,預(yù)測(cè))。

5.3 通過(guò)微調(diào)腳本微調(diào)后模型的使用步驟:

第一步: 在https://huggingface.co/join上創(chuàng)建一個(gè)帳戶

第二步: 在服務(wù)器終端使用transformers-cli登陸

第三步: 使用transformers-cli上傳模型并查看? ? ??

# 選擇正確的微調(diào)模型路徑$ transformers-cli upload ./bert_finetuning_test/

# 查看上傳結(jié)果$ transformers-cli ls

第四步: 使用pytorch.hub加載模型進(jìn)行使用

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容