《電子技術應用》
您所在的位置:首頁 > 通信與網絡 > 業界動態 > 預訓練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。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
亚洲国产婷婷综合在线精品| 一本色道久久99精品综合| 国内精品久久久久久久影视蜜臀 | 老巨人导航500精品| 午夜亚洲一区| 亚洲在线观看免费| 国产精品99久久久久久有的能看 | 欧美刺激性大交免费视频| 久久久久久9| 久久久久久亚洲综合影院红桃| 午夜视频在线观看一区二区三区| 一区二区不卡在线视频 午夜欧美不卡在 | 亚洲精品视频免费| 亚洲国产精品久久久久秋霞影院| 久久精品成人欧美大片古装| 欧美一区二区精品| 欧美在线观看你懂的| 欧美一区三区三区高中清蜜桃| 亚洲综合第一页| 亚洲欧美一区二区激情| 亚洲一本视频| 亚洲欧美卡通另类91av| 亚洲字幕一区二区| 午夜精品一区二区三区在线视 | 亚洲高清不卡一区| 在线观看久久av| 在线观看av不卡| 亚洲第一区中文99精品| 亚洲国产欧美日韩| 亚洲免费精品| 亚洲一区国产一区| 午夜在线不卡| 亚洲国产成人av| 亚洲人午夜精品免费| 99视频精品全国免费| 中日韩在线视频| 午夜精彩视频在线观看不卡| 亚洲欧美一级二级三级| 久久精品国产亚洲一区二区三区 | 久久永久免费| 欧美福利视频在线| 欧美日韩精品高清| 国产精品久久婷婷六月丁香| 国产美女诱惑一区二区| 国语对白精品一区二区| 在线看日韩av| 日韩天堂av| 午夜精品999| 亚洲人成在线免费观看| 亚洲一二区在线| 欧美专区日韩专区| 你懂的国产精品永久在线| 欧美日韩亚洲另类| 国产欧美婷婷中文| 亚洲国产欧美国产综合一区| 夜夜精品视频一区二区| 亚洲欧美一区二区在线观看| 亚洲国产黄色片| 亚洲无玛一区| 久久久久久久尹人综合网亚洲| 欧美激情导航| 国产精品丝袜91| 在线精品视频一区二区| 9色国产精品| 久久都是精品| 亚洲一区不卡| 免费欧美在线视频| 欧美午夜久久| 雨宫琴音一区二区在线| 中文精品99久久国产香蕉| 久久精品国产第一区二区三区最新章节| aa日韩免费精品视频一| 久久精品在这里| 欧美日韩中文字幕| 国内一区二区三区在线视频| 一本色道久久综合亚洲精品婷婷| 久久精品日产第一区二区| 亚洲天天影视| 久久久久青草大香线综合精品| 欧美日韩美女在线| 黄色一区二区三区| 亚洲线精品一区二区三区八戒| 亚洲国产精品高清久久久| 亚洲欧美日本伦理| 老牛影视一区二区三区| 国产精品一区二区久久久| 亚洲激情午夜| 久久精品国产96久久久香蕉| 亚洲综合成人婷婷小说| 欧美国产综合| 精品盗摄一区二区三区| 午夜精品久久久久久久蜜桃app| 日韩一级黄色av| 久久人人爽人人爽爽久久| 国产精品久久久一区二区| 日韩午夜免费| 日韩亚洲一区二区| 毛片av中文字幕一区二区| 国产日韩欧美91| 亚洲天堂av电影| 9国产精品视频| 欧美成人午夜激情| 激情成人av在线| 久久成人一区二区| 久久国产精品久久久久久电车| 欧美视频中文字幕在线| 久久免费国产| 欧美中日韩免费视频| 亚洲欧美激情四射在线日| 国产亚洲欧美一区二区三区| 国产午夜精品一区二区三区欧美| aa级大片欧美三级| 日韩一级片网址| 欧美激情va永久在线播放| 一区三区视频| 久久精品视频亚洲| 久久精品人人爽| 国产日韩欧美制服另类| 亚洲一区在线直播| 亚洲欧美日韩天堂一区二区| 欧美午夜精品久久久久久孕妇| 亚洲精品久久久久久久久| 亚洲美女免费精品视频在线观看| 欧美~级网站不卡| 亚洲国产高清视频| 亚洲欧洲免费视频| 欧美激情国产精品| 亚洲精品1区2区| 99re8这里有精品热视频免费| 欧美精品久久天天躁| 亚洲精品国产精品国自产观看浪潮 | 日韩午夜av在线| 99精品视频一区| 欧美日韩亚洲一区在线观看| 99国产精品久久| 亚洲欧美日韩一区二区三区在线观看 | 亚洲欧美成人精品| 国产精品视频一二三| 亚洲专区在线| 久久久精品欧美丰满| 精品999日本| 亚洲人成网站色ww在线| 欧美极品影院| 一二三区精品福利视频| 欧美亚洲视频| 国内精品视频在线播放| 亚洲激情视频在线播放| 欧美日韩精品伦理作品在线免费观看| 一区二区激情视频| 欧美一区视频| 在线播放精品| 夜夜夜久久久| 国产精品毛片一区二区三区| 欧美一级大片在线观看| 麻豆精品一区二区av白丝在线| 亚洲人成免费| 午夜宅男久久久| 黄页网站一区| 一区二区三区毛片| 国产精品免费网站在线观看| 欧美亚洲一区在线| 免费影视亚洲| 一区二区精品| 久久天堂国产精品| 亚洲精品一区在线观看香蕉| 午夜精品久久99蜜桃的功能介绍| 韩国av一区二区| 一区二区三区久久| 国产亚洲二区| 99re8这里有精品热视频免费 | 99国产精品久久久久久久| 欧美在线视频免费播放| 在线观看亚洲一区| 亚洲无限av看| 雨宫琴音一区二区在线| 亚洲午夜久久久| 国产一区二区日韩精品| 日韩视频一区二区三区| 国产麻豆日韩| 日韩午夜免费| 国产亚洲精品一区二555| 日韩网站在线| 国产日韩精品在线观看| 99天天综合性| 国产伊人精品| 亚洲天堂男人| 在线日韩av片| 欧美一区二区在线视频| 最新高清无码专区| 久久精品论坛| 洋洋av久久久久久久一区| 久久综合狠狠综合久久综青草| 日韩一区二区久久| 久久这里只有| 亚洲欧美制服另类日韩| 欧美日本久久| 亚洲高清自拍| 国产日韩av高清| 亚洲午夜激情网页| 尤物yw午夜国产精品视频明星|