pytorch微调bert_北大、人大联合开源工具箱UER,3 行代码完美复现BERT、GPT
本文由AI研習(xí)社用戶張正投稿,來稿見文末聯(lián)系方式
作者 | 張正
單位 | 清華大學(xué)
編輯 | Camel
現(xiàn)存的預(yù)訓(xùn)練模型中沒有一種可以完美的適用于所有任務(wù),這也給預(yù)訓(xùn)練模型的選擇帶來困難。對于這個問題,論文提供了一種切實可行的解決方案,即UER(Universal Encoder Representations)。論文標題:UER: An Open-Source Toolkit for Pre-training Models;論文地址: https://arxiv.org/abs/1909.05658自然語言處理(NaturalLanguage Processing, NLP)主要研究如何讓計算機讀懂人類的自然語言,該技術(shù)是人工智能非常重要的研究領(lǐng)域之一,也是人工智能最難解決的問題之一。幸運的是,得益于遷移學(xué)習(xí)技術(shù)的發(fā)展,自然語言處理在近些年也取得了快速的發(fā)展,并廣泛應(yīng)用于機器翻譯、信息檢索等領(lǐng)域。
何為遷移學(xué)習(xí)?在自然語言處理的背景下,遷移學(xué)習(xí)本質(zhì)上是在一個源領(lǐng)域(Source Domain)數(shù)據(jù)集上預(yù)訓(xùn)練模型,然后對該模型進行調(diào)整,以在目標領(lǐng)域(Target Domain)數(shù)據(jù)集上執(zhí)行自然語言處理功能。在這個過程中,用于訓(xùn)練模型的源領(lǐng)域與用于任務(wù)執(zhí)行的目標領(lǐng)域往往存在不一致性,因此預(yù)訓(xùn)練的模型往往無法直接完成目標領(lǐng)域的自然語言處理任務(wù),那為什么還要進行模型預(yù)訓(xùn)練呢?
首先,源領(lǐng)域與目標領(lǐng)域之間的差異性與一致性是并存的,經(jīng)過大數(shù)據(jù)訓(xùn)練的模型參數(shù)往往在小數(shù)據(jù)集上也是通用可行的。
其次,在源領(lǐng)域預(yù)訓(xùn)練好的模型只需要經(jīng)過微調(diào),就可以應(yīng)用于目標領(lǐng)域上,而無需重新訓(xùn)練,因此可以節(jié)省訓(xùn)練時間與計算量。
預(yù)訓(xùn)練模型有很多種,比如谷歌 BERT 模型、GPT 模型、ELMo 模型等,由于下游任務(wù)的多樣性及運算能力的限制,現(xiàn)存的預(yù)訓(xùn)練模型中沒有一種可以完美的適用于所有任務(wù),這也給預(yù)訓(xùn)練模型的選擇帶來困難。對于這個問題,論文提供了一種切實可行的解決方案,即 UER(Universal Encoder Representations)。
通過構(gòu)建一個整合的預(yù)訓(xùn)練工具箱,UER 包含了多個低耦合的模塊,各模塊中包含現(xiàn)有的主流模型,用戶可以很方便的調(diào)用這些模型,也可以根據(jù)任務(wù)需求個性化設(shè)計自己的預(yù)訓(xùn)練模型。此外,UER 提供了基于不同語料庫而訓(xùn)練的模型群,這些模型可幫助用戶在下游數(shù)據(jù)集上取得良好的語言處理結(jié)果。
1. 研究背景
NLP 模型包含很多超參數(shù),這些參數(shù)的確定過程通常比較復(fù)雜,而不同的參數(shù)值會對模型的性能產(chǎn)生很大的影響。一般文章很難記錄超參數(shù)的選取細節(jié)及代碼,這也為什么我們在重復(fù)別人的工作時很難取得與原文作者相似的結(jié)果。為此,很多系統(tǒng)提供了解決方案。
1)OpenNMT
OpenNMT(Open-source Neural Machine Translation)是一個開源的神經(jīng)網(wǎng)絡(luò)翻譯機器,于 2016 年由哈佛 NLP 研究組與 SYSTRAN 公司聯(lián)合開發(fā)。該系統(tǒng)具有高效、模塊化、易擴展等優(yōu)點,已經(jīng)取得了較高的翻譯精度。
2)fairseq
Fairseq 模型由 Facebook AI 實驗室在 2017 年提出,主要用于機器翻譯,其采用了以 CNN 為主的模型結(jié)構(gòu),具有翻譯速度快、精度高的優(yōu)勢。Fairseq 提供了英語到法語、英語到德語和英語到羅馬尼亞語翻譯的預(yù)訓(xùn)練模型。
3)NCRF++
NCRF++是一個基于 PyTorch 的開源神經(jīng)序列標注工具包,可用于多種神經(jīng)序列標注工具包的快速實現(xiàn)。
4)ngram2vec
N-Gram(有時也稱為 N 元模型)是自然語言處理中一個非常重要的概念,通常在 NLP 中,人們基于一定的語料庫,可以利用 N-Gram 來預(yù)計或者評估一個句子是否合理。另外一方面,N-Gram 的另外一個作用是用來評估兩個字符串之間的差異程度。這是模糊匹配中常用的一種手段。
以上模型為目前最主流的 NLP 模型預(yù)訓(xùn)練工具,這些工具對 NLP 技術(shù)的發(fā)展具有深遠影響。然而這些方法也存在自身的缺陷,比如它們往往只用于解決某個領(lǐng)域的具體問題,很難具有通用性。因此,提出一種可以融合各種模型并對其進行完善的工具箱具有較大的使用價值,本文提出的 UER 正是用于解決該問題。
2. UER 主要結(jié)構(gòu)
如圖所示:
UER 主要由四個部分組成:副編碼器(subencoder)、主編碼器(encoder)、target 和微調(diào)(fine-tuning)。
每個部分又包含大量可執(zhí)行模型,用戶可以根據(jù)自己的需求調(diào)用相應(yīng)模型,也可以根據(jù)需求自己設(shè)計相應(yīng)模型。
此外,為了能夠取得更好的預(yù)訓(xùn)練效果,在 UER 中還可以將不同模型進行組合使用。
1)副編碼器
該部分主要用于學(xué)習(xí) word 的底層特征。對于英文單詞來說,底層特征主要指組成單詞的各字母;對于中文來說,底層特征可以用字符的偏旁部首或者拼音來表示。
通過學(xué)習(xí),模型可以獲知 word 的內(nèi)部結(jié)構(gòu)。UER 采用 CNN 和 RNN 做為副編碼器,并且使用平均池化或最大池化的策略來獲得固定長度的詞向量(word vector)。
2)主編碼器
該部分主要用于學(xué)習(xí)詞向量的主要特征。UER 可以直接執(zhí)行基礎(chǔ)的編碼器,如 LSTM、GRU、CNN、GatedCNN、AttentionNN 等。也可以根據(jù)需求,實現(xiàn)不同編碼器的組合,構(gòu)建任意的網(wǎng)絡(luò)結(jié)構(gòu)。
近年來,Transformer 技術(shù)在文本特征提取任務(wù)上表現(xiàn)出優(yōu)越的性能。因此 UER 的主編碼器部分也整合了 Transformer 模塊,為 BERT 等模型的執(zhí)行提供便利。
3)Target
選用恰當?shù)?target 是預(yù)訓(xùn)練成功的關(guān)鍵,雖然現(xiàn)有的 target 有很多種,但是它們都有各自的優(yōu)缺點。UER 中包含有很多的 target,用戶可以使用一種或多種 target,并賦予它們不同的權(quán)值。根據(jù)原理的不同,這些 target 可以分為有監(jiān)督和無監(jiān)督類型。
無監(jiān)督 target 有很多種,例如 Language model(LM)、Masked LM(MLM)和 Autoencoder(AE)等 target 屬于字符層面的 target,主要用于單詞詞義的預(yù)測;Next sentence prediction(NSP)模型主要用于判斷兩個句子之間是否具有連續(xù)性。
有監(jiān)督 target 主要包括 Neural machine translation(NMT)和 Classification(CLS)兩種。有監(jiān)督 target 往往可以為模型提供源語料庫中無法提供的額外信息。
4)微調(diào)
UER 開發(fā)了與 ULMFiT、GPT 和 BERT 相似的微調(diào)策略,用于下游任務(wù)的模型往往具有和預(yù)訓(xùn)練模型相似的結(jié)構(gòu)與參數(shù),因此預(yù)訓(xùn)練模型只需經(jīng)過微調(diào)即可使用。
很多預(yù)訓(xùn)練任務(wù)包含兩個階段,即模型預(yù)訓(xùn)練與微調(diào)。但是,在 UER 中包含有 3 個階段,分別為:在廣義領(lǐng)域語料庫上的預(yù)訓(xùn)練、在下游數(shù)據(jù)庫上的預(yù)訓(xùn)練及在下游數(shù)據(jù)庫的微調(diào)。這樣做的好處是模型可以提前熟知下游數(shù)據(jù)庫的數(shù)據(jù)分布,從而在微調(diào)環(huán)節(jié)取得更好的訓(xùn)練效果。
3. 結(jié)果驗證
為了驗證 UER 性能的好壞,作者基于不同的數(shù)據(jù)集設(shè)計了一系列實驗。
在論文中,作者以基于 BERT 的英文和中文模型為例,對 UER 的模型再現(xiàn)性(即能夠產(chǎn)生目標模型的能力)進行評估,并討論了在選取不同 target 和編碼器時,UER 性能的提升效果。
1)模型再現(xiàn)性
前文已經(jīng)提到,UER 中已經(jīng)內(nèi)嵌了大量的模型,用戶可以直接調(diào)用這些模型,無需自己編寫模型代碼。調(diào)用的方法也非常簡單,用戶只需要根據(jù)自己的需求,編寫幾行代碼即可完成:
UER 中模型的調(diào)用方法演示
圖中分別演示了執(zhí)行不同模型時的模型調(diào)用方法,可以看到模型調(diào)用代碼非常簡單,即使對于第一次接觸 UER 的用戶來說也可以快速上手,這也是 UER 的特色之一。
在完成模型的調(diào)用之后,需要驗證在 UER 中調(diào)用的模型與實際模型是否存在偏差,即驗證 UER 中模型的準確性。論文中以 BERT 模型為例,分別對英文和中文的自然語言處理結(jié)果進行驗證。
在英文驗證部分,論文使用 GLUE 基準,并將 UER 取得的測試結(jié)果與 HuggingFace 的測試結(jié)果進行對比(表 1):
表1 在GLUE基準上HuggingFace的測試結(jié)果與UER的測試結(jié)果對比
在中文驗證部分,論文使用百度 ERNIE 基準,并將 UER 取得的測試結(jié)果與 ERNIE 提供的測試結(jié)果進行對比(表 2):
表2 在ERNIE基準上ERNIE的測試結(jié)果與UER的測試結(jié)果對比
通過對比結(jié)果可以看出,UER 取得的測試結(jié)果與 HuggingFace 和 ERNIE 的測試結(jié)果相近,因此可以認為使用 UER 并不會影響模型訓(xùn)練效果。
2)target 和編碼器對測試結(jié)果的影響
在選擇不同的 target 和編碼器時,模型的測試結(jié)果也是不同的。論文中,作者分別選擇了不同的 target 和編碼器,并記錄采用 UER 的預(yù)訓(xùn)練模型在數(shù)據(jù)集上的測試結(jié)果。這里采用了豆瓣書評、亞馬遜商品用戶評價和 Chnsenticorp 三個中文情感分析數(shù)據(jù)集做為下游數(shù)據(jù)集。
首先,作者在 UER 中采用 BERT-base 的中文模型進行預(yù)訓(xùn)練,然后將預(yù)訓(xùn)練完成的模型在下游數(shù)據(jù)集上進行微調(diào)。為了進行對比,作者分別采用 MLM 和 CLS 做為 target,并記錄測試結(jié)果(表3):
表3 采用不同target的預(yù)訓(xùn)練模型性能對比
通過比較不難發(fā)現(xiàn),選用不同的 target 會對預(yù)訓(xùn)練模型的性能產(chǎn)生較大影響,當采用 CLS 作為 target 時模型可以取得最高的測試結(jié)果。
由于 BERT 對計算力要求較高,為了提高運算效率,作者在 UER 中采用 2 層的 LTSM 編碼器來代替原始 12 層的 Transformer,并記錄在編碼器改變時預(yù)訓(xùn)練模型的測試結(jié)果(表 4):
表4 采用不同編碼器的預(yù)訓(xùn)練模型性能對比
通過數(shù)據(jù)對比可以看出,選用 LSTM 編碼器的預(yù)訓(xùn)練模型可以獲得與 BERT 模型相近甚至更好的測試結(jié)果。該試驗證明了采用 UER 進行模型預(yù)訓(xùn)練時可以靈活選擇不同的 target 和編碼器,來取得更好的訓(xùn)練效果及更高的訓(xùn)練效率。
4. 總結(jié)
論文中提出了一種開源的 NLP 模型預(yù)訓(xùn)練工具箱,并詳細介紹了其組成部分及使用方法。借助于 UER,用戶可以方便、高效地執(zhí)行各類預(yù)訓(xùn)練模型,并根據(jù)需求對模型進行調(diào)整,從而取得模型性能及訓(xùn)練速度的提升。
投稿需知
投稿請聯(lián)系:
郵箱:jiawei@leiphone.com
微信:jiawei1066
總結(jié)
以上是生活随笔為你收集整理的pytorch微调bert_北大、人大联合开源工具箱UER,3 行代码完美复现BERT、GPT的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: wordpress如何让百度快速收录_如
- 下一篇: sqlserver安装目录_Jira试用