《電子技術應用》
您所在的位置:首頁 > 通信與網絡 > 業界動態 > 預訓練BERT,官方代碼發布前他們是這樣用TensorFlow解決的

預訓練BERT,官方代碼發布前他們是這樣用TensorFlow解決的

2018-10-31
關鍵詞: BERT 谷歌 預訓練模型

這個月谷歌提出的 BERT 受到了很多關注,該研究憑借預訓練模型刷新了 11 項 NLP 任務的當前最優性能記錄。論文作者表示這個月月末會放出代碼與預訓練模型,但目前還沒有發布。因此很多研究者嘗試使用中等數據集降低計算力,或使用 OpenAI 的 Transformer 預訓練模型作為初始化條件。


本文介紹的兩個 BERT 實現項目分別基于 TensorFlow 和 Keras,其中基于 TensorFlow 的項目會使用中等數據集與其它技巧降低計算力,并發現使用 TextCNN 代替 Transformer 主干網絡,且保留 BERT 預訓練任務也能得到非常好的效果。而基于 Keras 的項目嘗試使用預訓練的 OpenAI Transformer 作為初始化權重,并以較小的計算力重新訓練 BERT 預訓練模型,再將該預訓練的 BERT 應用到不同任務。


這兩個項目都在嘗試使用 BERT 核心思想,并以較小的計算成本應用于其它 NLP 任務。當然如果讀者希望使用大型 BERT 預訓練模型,還需要等谷歌官方發布代碼與模型。


BERT 簡介


機器之心SyncedBERT小程序


BERT 的全稱是基于 Transformer 的雙向編碼器表征,其中「雙向」表示模型在處理某一個詞時,它能同時利用前面的詞和后面的詞兩部分信息。這種「雙向」的來源在于 BERT 與傳統語言模型不同,它不是在給定所有前面詞的條件下預測最可能的當前詞,而是隨機遮掩一些詞,并利用所有沒被遮掩的詞進行預測。下圖展示了三種預訓練模型,其中 BERT 和 ELMo 都使用雙向信息,OpenAI GPT 使用單向信息。

微信圖片_20181031230953.jpg


如上所示為不同預訓練模型的架構,BERT 可以視為結合了 OpenAI GPT 和 ELMo 優勢的新模型。其中 ELMo 使用兩條獨立訓練的 LSTM 獲取雙向信息,而 OpenAI GPT 使用新型的 Transformer 和經典語言模型只能獲取單向信息。BERT 的主要目標即在 OpenAI GPT 的基礎上對預訓練任務做一些改進,以同時利用 Transformer 深度模型與雙向信息的優勢。


BERT 的核心過程非常簡潔,它會先從數據集抽取兩個句子,其中第二句是第一句的下一句概率是 50%,這樣就能學習句子之間的關系。其次隨機去除兩個句子中的一些詞,并要求模型預測這些詞是什么,這樣就能學習句子內部的關系。最后再將經處理的句子傳入大型 Transformer 模型,并通過兩個損失函數同時學習上面兩個目標就能完成訓練。


TensorFlow 實現項目簡介


BERT 最近在 10 幾項 NLP 任務上取得了新進展,這個項目是《BERT:Pre-training of Deep Bidirectional Transformers for Language Understanding》和《Attention is all You Need》這兩篇論文的 tensorflow 實現。


這個項目提供了預訓練方法與代碼,并做了一些調整以加快收斂速度。這一份 TensorFlow 實現在使用中等數據集下計算力并不是太大,所以感興趣的讀者也可以嘗試使用。當然,希望使用大型預訓練 BERT 模型的讀者可以等谷歌發布官方模型。


項目地址:https://github.com/brightmart/bert_language_understanding


預訓練和微調實驗


項目作者把 Transfprmer 換成 TextCNN,替換了 BERT 的主干網絡,結果發現使用大量原始數據用遮蔽語言模型預訓練的模型可以顯著提高性能,因此他們認為預訓練和微調策略是獨立于模型和預訓練任務的。因此,可以修正主干網絡添加更多的預訓練任務或者定義一些新的預訓練任務,預訓練不限于遮蔽語言模型或預測下一句的任務。讓人驚訝的是,對于中等規模的數據集(比如說一百萬條數據)來說,即使不使用外部數據,只要借助于預訓練任務(如帶掩碼的語言模型),性能也可以大幅提升,而且模型可以更快地收斂。有時在微調階段,訓練僅需幾個 epoch。


目的


雖然開放源碼(tensor2tensor)和 Transformer 與 BERT 的官方實現實現即將到來,但是有可能很難懂,不易理解。該項目的作者并不打算完全復制原始文件,而是要應用主要思想,以更好的方式解決 NLP 問題。本文的大部分工作是去年由另一個 GitHub 項目修改完成的:文本分類(https://github.com/brightmart/text_classification)。


性能


下圖是在中等規模數據集(cail2018,45 萬)上文本分類任務的測試效果,其中采用 BERT 預訓練思想的 TextCNN 要顯著優于其它模型:

微信圖片_20181031231018.jpg


下圖是在小規模數據集(private,10 萬)上的測試效果:

微信圖片_20181031231045.jpg


TensorFlow 實現項目細節


使用方法


如果想在 Masked 語言模型上預訓練 BERT 模型,并在新 NLP 任務上使用它,那么使用方法主要可以分為兩步驟。值得注意的是,該項目并沒有提供預訓練模型,所以需要大量計算力的預訓練過程仍然需要自行執行。


1. 通過 BERT 預訓練語言模型


 python train_bert_lm.py [DONE]


2. 在新任務微調模型


 python train_bert_fine_tuning.py [Done]


在項目作者的試驗中,即使在微調的起點,剛剛從預訓練模型恢復參數也能獲得比從頭訓練更低的損失。預訓練模型的 F1 值同樣要比從頭訓練的高,且從頭訓練的 F1 值還需要從零開始增長。


此外為了快速測試新想法與模型,可以將超參數 test_mode 設置為 True,在這種模式下模型只會加載少量的數據進行測試,因此訓練非常迅速。


在基本步驟中,還可以通過 Transform 解決文本分類問題:


python train_transform.py [DONE, but a bug exist prevent it from converge, welcome you to fix, email: brightmart@hotmail.com]


預訓練和微調過程還有其它一些可選超參數,它們控制了模型的大小與訓練過程:


d_model:模型維度,默認為 [512]。

num_layer:層級數,默認為 [6]。

num_header:自注意力機制的 Head 數,默認為 [8]。

d_k:Key(K)和 Query(Q)的維度,默認為 [64]。

d_v:Value(V)的維度,默認為 [64]。


default hyperparameter is d_model=512,h=8,d_k=d_v=64(big). if you have want to train the model fast, or has a small data set 

or want to train a small model, use d_model=128,h=8,d_k=d_v=16(small), or d_model=64,h=8,d_k=d_v=8(tiny).


實現細節


首先,TensorFlow 的實現環境比較簡單:python 3+ tensorflow 1.10。其次,實現時要注意以下問題:


1. 預訓練和微調階段之間有哪些能夠共享和無法共享的參數?


基本來說,預訓練和微調階段的主干網絡使用的所有參數都能共享。


既然可以共享很多參數,那微調階段只需學習很少的參數,此外這兩個階段的詞嵌入也可以共享。


因此,在微調的初始階段已經學習了大部分參數。


2. 如何實現帶 Mask 的語言模型?


為了讓事情變得簡單點,可以根據文件生成很多句子。把每個句子截斷并填充到相同的長度,然后隨機選擇一個單詞,用 [MASK]、單詞本身或一個隨機單詞替換它。


3. 如何使微調階段變得更高效并同時不影響在預訓練階段學到的結果和知識?


在微調階段使用較小的學習率,因此只需在很小的范圍內進行調整。


Keras 實現


基于 TensorFlow 的實現同樣沒有提供預訓練語言模型,這樣的模型在預訓練階段會需要大量的計算力,這樣的計算力需求對于很多研究者與開發者都是接受不了的。但是現在的官方實現與預訓練模型仍然沒有放出來,因此有開發者利用 OpenAI 預訓練的 Transformer 作為初始化參數,并訓練新的 BERT 預訓練模型,這種方式大大降低了計算力需求。


項目地址:https://github.com/Separius/BERT-keras


在這個 Keras 實現項目中,作者用預訓練的 OpenAI Transformer 作為初始化條件,并訓練新的 BERT,項目作者表示這樣可以不使用 TPU 而實現預訓練。以下展示了 Keras 實現的主要語句,包括加載 OpenAI Transformer 預訓練模型、加載 BERT 模型和保存新的預訓練權重等。


# this is a pseudo code you can read an actual working example in tutorial.ipynb
text_encoder = MyTextEncoder(**my_text_encoder_params) # you create a text encoder (sentence piece and openai's bpe are included)
lm_generator = lm_generator(text_encoder, **lm_generator_params) # this is essentially your data reader (single sentence and double sentence reader with masking and is_next label are included)
task_meta_datas = [lm_task, classification_task, pos_task] # these are your tasks (the lm_generator must generate the labels for these tasks too)
encoder_model = create_transformer(**encoder_params) # or you could simply load_openai()
trained_model = train_model(encoder_model, task_meta_datas, lm_generator, **training_params) # it does both pretraing and finetuning
trained_model.save_weights('my_awesome_model') # save it
model = load_model('my_awesome_model', encoder_model) # load it later and use it!


作者表示這個項目有一些很重要說明,針對不同的任務與需求,可以根據這些說明修改模型結構和預訓練過程。


這個庫的核心觀點是使用 OpenAI 的預訓練模型作為訓練新模型的初始狀態,因此通過 GPU 就能訓練 BERT。

通過 Keras 加載 OpenAI 模型已經在 TensorFlow 后端和 Theano 后端得到測試。

對于大多數 NLP 模型,能使用這個項目定義的數據生成器和任務元數據,即使在其它框架中也是。

數據集和 Transformer 都會執行一些單元測試,如果你不太了解代碼可以閱讀這些測試。

還可以使用其它編碼器進行訓練,例如 LSTM 或 BiQRNN 等。

當官方代碼發布后會發生什么?數據讀取器仍然會保持穩定,甚至可以導入官方發布的權重到這個庫中(作者認為他會完成這一過程,因為實際的 Transformer 還是比較容易實現的)

作者強烈建議閱讀項目中的 tutorial.ipynb 文件,它展示了整個項目的使用過程。


重要的代碼概念


任務:有兩個一般任務,句子級任務(如下一句預測和情感分析)和 token 級任務(如詞性標注和命名實體識別)。

句子:「句子」表示一段帶有標簽和所有內容的實例,它為每個任務提供了一個目標(句子級任務的單個標注值,token 級任務的每個 token 標簽)和一個掩碼;對于 token 級任務,除了忽略 padding 外,還要使用第一個符號向量預測類別(BERT 中的 [CLS] 符號)。

TaskWeightScheduler:項目作者希望從語言模型開始訓練,然后遷移到到分類任務,我們可以用這個類快速實現。

special_tokens:pad, start, end, delimiter, mask 


本站內容除特別聲明的原創文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:aet@chinaaet.com。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          欧美专区日韩专区| 亚洲欧美国产高清| 美乳少妇欧美精品| 欧美精品日韩综合在线| 欧美一区三区三区高中清蜜桃| 欧美成在线观看| 国产精品久久久对白| 韩国成人精品a∨在线观看| 亚洲精品一区二区三区99| 在线视频国内自拍亚洲视频| 亚洲欧洲日韩在线| 国产精品福利在线观看| 亚洲美女视频在线观看| 鲁大师成人一区二区三区| 久久av老司机精品网站导航| 国产精品毛片大码女人| 黄色工厂这里只有精品| 国产亚洲成年网址在线观看| 欧美国产一区视频在线观看| 欧美在线3区| 国产精品久久久久久久久久ktv| 久久久久国产精品一区三寸| 午夜在线视频观看日韩17c| 欧美a一区二区| 久久精品五月婷婷| 国产精品日韩在线一区| 欧美在线视频二区| 国产精品久久久久久久久久久久久久| 亚洲精品一区二区在线观看| 欧美综合77777色婷婷| 亚洲激情视频网站| 激情综合电影网| 一区二区三区在线视频观看| 欧美不卡激情三级在线观看| 一本色道久久综合精品竹菊| 亚洲视频在线看| 亚洲精美视频| 久久久亚洲精品一区二区三区| 最新国产成人av网站网址麻豆| 欧美一区二区三区播放老司机| 激情综合激情| 欧美成人精品在线| 欧美日本一区二区视频在线观看| 一区二区三区在线观看欧美| 国产精品福利在线观看网址| 欧美综合第一页| 亚洲精品欧美在线| 一区二区三区精品在线| 9色精品在线| 亚洲欧美日韩在线高清直播| 亚洲高清久久久| 国产精品v欧美精品v日韩精品| 国产在线观看精品一区二区三区| 韩日精品中文字幕| 日韩一级大片| 国产视频一区免费看| 又紧又大又爽精品一区二区| 麻豆成人91精品二区三区| 国产精品激情偷乱一区二区∴| 小黄鸭精品密入口导航| 伊人久久大香线蕉av超碰演员| 国产精品三级久久久久久电影| 欧美日韩久久精品| 欧美电影专区| 一区二区三区成人精品| 国产日韩欧美在线看| 麻豆成人小视频| 亚洲黄页一区| 欧美一区二区视频在线观看2020| 国产欧美日韩精品一区| 国产精品永久在线| 国产揄拍国内精品对白| 99视频+国产日韩欧美| 国产一区二区精品久久99| 亚洲综合好骚| 欧美美女喷水视频| 9人人澡人人爽人人精品| 欧美在线观看视频在线| 国产美女搞久久| 欧美激情bt| 影音先锋国产精品| 免费亚洲一区二区| 久久婷婷久久| 欧美性开放视频| 一本色道久久综合亚洲精品不卡| 夜夜嗨av一区二区三区中文字幕| 国产麻豆精品久久一二三| 亚洲欧美欧美一区二区三区| 亚洲第一精品在线| 亚洲日韩欧美一区二区在线| 久久久久久久久久看片| 午夜精品一区二区三区在线播放| 男女激情视频一区| 久久伊人一区二区| 欧美成在线观看| 激情成人在线视频| 欧美高清在线视频| 国产精品二区在线| 亚洲网站在线观看| 国产精品av免费在线观看| 国产精品久久久久久妇女6080| 国产美女精品视频免费观看| 亚洲国产欧美国产综合一区| 久久se精品一区二区| 久久久久一区二区三区| 依依成人综合视频| 国产日产亚洲精品系列| 国产丝袜美腿一区二区三区| 亚洲国产另类久久久精品极度| 在线观看日韩一区| 国产一区二区你懂的| 免费欧美网站| 亚洲乱码久久| 欧美日韩伦理在线| 毛片精品免费在线观看| 99精品视频免费| 国产一区二区三区成人欧美日韩在线观看| 欧美精品久久99久久在免费线| 欧美精品久久一区二区| 黄色资源网久久资源365| 久久亚洲精品一区| 一本色道久久加勒比精品| 亚洲视频第一页| 国产欧美一区二区精品秋霞影院| 亚洲欧美日韩天堂| 欧美日韩亚洲一区| 午夜精品久久99蜜桃的功能介绍| 久久综合九色欧美综合狠狠| 久久久99精品免费观看不卡| 亚洲黄一区二区三区| 国产毛片一区二区| 伊人激情综合| 国产欧美日韩视频一区二区三区| 欧美激情中文不卡| 亚洲自拍三区| 国产精品美女久久久久av超清| 欧美另类一区二区三区| 久久精品国产一区二区电影| 久久精品国产999大香线蕉| 在线免费观看成人网| 亚洲国产日日夜夜| 欧美有码在线观看视频| 亚洲成人资源网| 久久婷婷国产麻豆91天堂| 欧美经典一区二区| 国产亚洲欧美中文| 亚洲激情在线播放| 亚洲日本电影在线| 亚洲国产成人在线| 久久www免费人成看片高清| 亚洲小视频在线| 亚洲在线播放| 又紧又大又爽精品一区二区| 久久嫩草精品久久久精品一| 国产精品日韩精品| 日韩视频不卡中文| 午夜精品一区二区三区在线视| 国产欧美日韩精品专区| 毛片基地黄久久久久久天堂| 欧美日韩在线一区二区| 亚洲男人av电影| 在线观看日韩精品| 一区视频在线看| 精品不卡一区| 久久精品麻豆| 亚洲免费观看在线视频| 亚洲色无码播放| 国产精品三上| 欧美精品乱码久久久久久按摩| 国产精品一区二区三区四区五区| 欧美日韩在线高清| 国产精品久久久久久久久免费樱桃| 国产亚洲va综合人人澡精品| 久久免费偷拍视频| 国产欧美日韩一区二区三区在线观看| 一区在线免费观看| 久久在线免费视频| 亚洲福利精品| 欧美视频在线看| 一区二区高清视频| 亚洲欧美伊人| 欧美在线黄色| 欧美精品久久一区二区| 日韩小视频在线观看专区| 久久国产精品色婷婷| 国产精品一级在线| 亚洲男女自偷自拍图片另类| 亚洲精品视频免费观看| 欧美视频三区在线播放| 国产精品系列在线播放| 久久婷婷人人澡人人喊人人爽| 欧美区一区二区三区| 国产精品久久久久久久久动漫| 亚洲欧美日韩一区| 亚洲国产国产亚洲一二三| 午夜精品免费| 欧美极品在线播放| 国产综合婷婷| 99v久久综合狠狠综合久久| 欧美三日本三级少妇三2023| 国产精品亚洲网站| 久久精品国语| 国产日韩欧美在线播放不卡| 国产一区二区三区在线免费观看| 国产精品福利在线| 久久久久www| 99精品欧美一区二区三区| 欧美成人免费视频| 欧美亚洲午夜视频在线观看| 国产午夜亚洲精品不卡| 中文在线资源观看视频网站免费不卡| 久久免费一区| 亚洲精品日韩在线| 国产一区二区三区av电影| 欧美高清在线| 亚洲欧美日产图| 国产精品一区二区三区成人| 好看不卡的中文字幕| 国产精品推荐精品| 亚洲一区二区在线播放| 能在线观看的日韩av| 久久久久久久97| 亚洲自拍偷拍色片视频| 国产亚洲欧美日韩一区二区| 亚洲男人影院| 永久免费毛片在线播放不卡| 先锋影音网一区二区| 欧美精品在线视频| 久久久精品一区| 亚洲美女在线视频| 麻豆精品精品国产自在97香蕉| 在线播放不卡| 国产精品美女999| 欧美国产激情| 欧美日韩精品免费观看视频| 久久偷看各类wc女厕嘘嘘偷窃| 国产日韩在线亚洲字幕中文| 亚洲欧美一区二区三区久久| 老司机精品导航| 国产精品视频免费一区| 国产精品电影观看| 亚洲毛片播放| 一本久道久久综合狠狠爱| 欧美亚洲色图校园春色| 亚洲黄色片网站| 欧美久久久久久久久久| 亚洲高清视频的网址| 亚洲三级网站| 国产精品影视天天线| 欧美日韩国产成人在线91| 国产精品乱码一区二区三区| 亚洲精品国产系列| 激情久久五月天| 在线播放豆国产99亚洲| 国产精品日本欧美一区二区三区| 一色屋精品视频在线看| 尤妮丝一区二区裸体视频| 欧美在线观看一区二区| 欧美日韩亚洲国产精品| 一个色综合av| 欧美午夜精彩| 欧美一级专区| 欧美网站大全在线观看| 亚洲日本在线视频观看| 午夜精品电影| 欧美日本免费一区二区三区| 欧美日韩视频在线一区二区| 国产精品免费观看在线| 精品成人久久| 久久精品国产一区二区三| 亚洲大胆女人| 午夜精品久久久久久久久久久久| 亚洲丶国产丶欧美一区二区三区| 亚洲淫片在线视频| 国产伦精品一区二区三区四区免费| 国产精品中文字幕在线观看| 欧美日韩国产成人在线免费| 黄色一区三区| 欧美午夜影院| 欧美日韩第一页| 在线观看日韩精品| 99精品视频一区二区三区| 亚洲免费电影在线| 免费中文字幕日韩欧美| 欧美日韩伦理在线免费| 欧美激情综合在线| 一区二区精品国产| 欧美专区一区二区三区| 欧美欧美天天天天操| 国产中文一区| 午夜精品美女自拍福到在线| 欧美一级专区| 久久亚洲国产精品一区二区| 羞羞答答国产精品www一本| 国产手机视频一区二区| 欧美岛国激情| 在线观看欧美精品| 99国产精品久久久久久久成人热| 激情综合激情| 一区二区在线视频播放| 欧美日本高清一区| 国产精品成人一区二区三区吃奶| 中文一区字幕| 欧美日韩视频在线一区二区| 一区二区三区精密机械公司| 欧美一区二区三区在线观看| 一区二区三区在线免费视频| 亚洲视频在线看| 久久综合九色| 国内精品伊人久久久久av一坑| 国内精品视频在线观看| 欧美中文字幕视频| 欧美性色视频在线| 欧美视频亚洲视频| 国产一区在线看| 久久成年人视频| 欧美性猛交一区二区三区精品| 国产精品久久久久国产a级| 久久久久一区二区三区四区| 在线免费观看视频一区| 欧美日韩黄色一区二区| 亚洲影视在线| 国产精品黄视频| 国产一区二区毛片| 欧美精品福利| 日韩亚洲不卡在线| 国产精品久久久久9999吃药| 欧美在线日韩在线|