吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

BERT的官方代碼終于來了

DPVg_AI_era ? 來源:未知 ? 作者:李倩 ? 2018-11-05 17:17 ? 次閱讀

谷歌AI團隊終于開源了最強NLP模型BERT的代碼和預訓練模型。從論文發布以來,BERT在NLP業內引起巨大反響,被認為開啟了NLP的新時代。

BERT的官方代碼終于來了!

昨天,谷歌在GitHub上發布了備受關注的“最強NLP模型”BERT的TensorFlow代碼和預訓練模型,不到一天時間,已經獲得3000多星!

地址:

https://github.com/google-research/bert

BERT,全稱是BidirectionalEncoderRepresentations fromTransformers,是一種預訓練語言表示的新方法。

新智元近期對BERT模型作了詳細的報道和專家解讀:

NLP歷史突破!谷歌BERT模型狂破11項紀錄,全面超越人類!

狂破11項記錄,谷歌年度最強NLP論文到底強在哪里?

解讀谷歌最強NLP模型BERT:模型、數據和訓練

BERT有多強大呢?它在機器閱讀理解頂級水平測試SQuAD1.1中表現出驚人的成績:全部兩個衡量指標上全面超越人類!并且還在11種不同NLP測試中創出最佳成績,包括將GLUE基準推至80.4%(絕對改進7.6%),MultiNLI準確度達到86.7% (絕對改進率5.6%)等。

以下是BERT模型在SQuAD v1.1問題回答任務的結果:

在幾個自然語言推理任務的結果:

以及更多其他任務。

而且,這些結果都是在幾乎沒有task-specific神經網絡架構設計的情況下獲得的。

如果你已經知道BERT是什么,只想馬上開始使用,可以下載預訓練過的模型,幾分鐘就可以很好地完成調優。

預訓練模型下載:

https://github.com/google-research/bert#pre-trained-models

BERT是什么?

BERT是一種預訓練語言表示(language representations)的方法,意思是我們在一個大型文本語料庫(比如維基百科)上訓練一個通用的“語言理解”模型,然后將這個模型用于我們關心的下游NLP任務(比如問題回答)。BERT優于以前的方法,因為它是第一個用于預訓練NLP的無監督、深度雙向的系統(unsupervised,deeply bidirectionalsystem)。

無監督意味著BERT只使用純文本語料庫進行訓練,這很重要,因為網絡上有大量的公開的純文本數據,而且是多語言的。

預訓練的表示可以是上下文無關(context-free)的,也可以是上下文相關(contextual)的,并且上下文相關表示還可以是單向的或雙向的。上下文無關的模型,比如word2vec或GloVe,會為詞匯表中的每個單詞生成單個“word embedding”表示,因此bank在bank deposit(銀行存款)和river bank(河岸)中具有相同的表示。上下文模型則會根據句子中的其他單詞生成每個單詞的表示。

BERT建立在最近的預訓練contextual representations的基礎上——包括半監督序列學習、生成性預訓練、ELMo和ULMFit——但這些模型都是單向的或淺雙向的。這意味著每個單詞只能使用其左邊(或右邊)的單詞來預測上下文。例如,在I made a bank deposit這個句子中, bank的單向表示僅僅基于I made a,而不是deposit。以前的一些工作結合了來自單獨的left-context和right-context 模型的表示,但只是一種“淺層”的方式。BERT同時使用左側和右側上下文來表示“bank”—— I made a ... deposit——從深神經網絡的最底層開始,所以它是深度雙向的。

BERT使用一種簡單的方法:將輸入中15%的單詞屏蔽(mask)起來,通過一個深度雙向Transformer編碼器運行整個序列,然后僅預測被屏蔽的單詞。例如:

Input: the man went to the [MASK1] . he bought a [MASK2] of milk. Labels: [MASK1] = store; [MASK2] = gallon

為了學習句子之間的關系,我們還訓練了一個可以從任何單語語料庫生成的簡單任務:給定兩個句子A和B, 讓模型判斷B是A的下一個句子,還是語料庫中的一個隨機句子?

Sentence A: the man went to the store . Sentence B: he bought a gallon of milk . Label: IsNextSentenceSentence A: the man went to the store . Sentence B: penguins are flightless . Label: NotNextSentence

然后,我們在大型語料庫(Wikipedia + BookCorpus)上訓練了一個大型模型(12-layer 到 24-layer的Transformer),花了很長時間(100萬次更新步驟),這就是BERT。

使用BERT的兩個階段:預訓練和微調

使用BERT分為兩個階段:預訓練(Pre-training)和微調(Fine-tuning)。

預訓練(Pre-training)的成本是相當昂貴的(需要4到16個Cloud TPU訓練4天),但是對于每種語言來說都只需訓練一次(目前的模型僅限英語的,我們打算很快發布多語言模型)。大多數NLP研究人員根本不需要從頭開始訓練自己的模型。

微調(Fine-tuning)的成本不高。從完全相同的預訓練模型開始,論文中的所有結果在單個Cloud TPU上最多1小時就能復制,或者在GPU上幾小時就能復制。例如,對于SQUAD任務,在單個Cloud TPU上訓練大約30分鐘,就能獲得91.0%的Dev F1分數,這是目前單系統最先進的。

BERT的另一個重要方面是,它可以很容易地適應許多類型的NLP任務。在論文中,我們展示了句子級(例如SST-2)、句子對級別(例如MultiNLI)、單詞級別(例如NER)以及段落級別(例如SQuAD)等任務上最先進的結果,并且,幾乎沒有針對特定任務進行修改。

GitHub庫中包含哪些內容?

BERT模型架構的TensorFlow代碼(主體是一個標準Transformer架構)。

BERT-Base和BERT-Large的lowercase和cased版本的預訓練檢查點。

用于復制論文中最重要的微調實驗的TensorFlow代碼,包括SQuAD,MultiNLI和MRPC。

這個項目庫中所有代碼都可以在CPU、GPU和Cloud TPU上使用。

預訓練模型

我們發布了論文中的BERT-Base和BERT-Large模型。

Uncased表示在WordPiece tokenization之前文本已經變成小寫了,例如,John Smithbecomesjohn smith。Uncased模型也去掉了所有重音標志。

Cased表示保留了真實的大小寫和重音標記。通常,除非你已經知道大小寫信息對你的任務來說很重要(例如,命名實體識別或詞性標記),否則Uncased模型會更好。

這些模型都在與源代碼相同的許可(Apache 2.0)下發布。

請在GitHub的鏈接里下載模型:

BERT-Base, Uncased: 12-layer, 768-hidden, 12-heads, 110M parameters

BERT-Large, Uncased: 24-layer, 1024-hidden, 16-heads, 340M parameters

BERT-Base, Cased: 12-layer, 768-hidden, 12-heads , 110M parameters

BERT-Large, Cased: 24-layer, 1024-hidden, 16-heads, 340M parameters (暫時未發布).

每個.zip文件包含三個項目:

一個包含預訓練權重的TensorFlow checkpoint (bert_model.ckpt),(實際上是3個文件)。

一個vocab文件(vocab.txt),用于將WordPiece映射到word id。

一個配置文件(bert_config.json),用于指定模型的超參數。

BERT的Fine-tuning

重要提示:論文里的所有結果都在單個Cloud TPU上進行了微調,Cloud TPU具有64GB的RAM。目前無法使用具有12GB-16GB RAM的GPU復現論文里BERT-Large的大多數結果,因為內存可以適用的最大 batch size太小。我們正在努力添加代碼,以允許在GPU上實現更大的有效batch size。有關更多詳細信息,請參閱out-of memory issues的部分。

使用BERT-Base的fine-tuning示例應該能夠使用給定的超參數在具有至少12GB RAM的GPU上運行。

BERT預訓練

我們發布了在任意文本語料庫上做“masked LM”和“下一句預測”的代碼。請注意,這不是論文的確切代碼(原始代碼是用C ++編寫的,并且有一些額外的復雜性),但是此代碼確實生成了論文中描述的預訓練數據。

以下是運行數據生成的方法。輸入是純文本文件,每行一個句子。(在“下一句預測”任務中,這些需要是實際的句子)。文件用空行分隔。輸出是一組序列化為TFRecord文件格式的tf.train.Examples。

你可以使用現成的NLP工具包(如spaCy)來執行句子分割。create_pretraining_data.py腳本將連接 segments,直到達到最大序列長度,以最大限度地減少填充造成的計算浪費。但是,你可能需要在輸入數據中有意添加少量噪聲(例如,隨機截斷2%的輸入segments),以使其在微調期間對非句子輸入更加魯棒。

此腳本將整個輸入文件的所有示例存儲在內存中,因此對于大型數據文件,你應該對輸入文件進行切分,并多次調用腳本。(可以將文件glob傳遞給run_pretraining.py,例如,tf_examples.tf_record *。)

max_predictions_per_seq是每個序列的masked LM預測的最大數量。你應該將其設置為max_seq_length * masked_lm_prob(腳本不會自動執行此操作,因為需要將確切的值傳遞給兩個腳本)。

python create_pretraining_data.py --input_file=./sample_text.txt --output_file=/tmp/tf_examples.tfrecord --vocab_file=$BERT_BASE_DIR/vocab.txt --do_lower_case=True --max_seq_length=128 --max_predictions_per_seq=20 --masked_lm_prob=0.15 --random_seed=12345 --dupe_factor=5

以下是如何進行預訓練。

如果你從頭開始進行預訓練,請不要包含init_checkpoint。模型配置(包括詞匯大小)在bert_config_file中指定。此演示代碼僅預訓練少量steps(20),但實際上你可能希望將num_train_steps設置為10000步或更多。傳遞給run_pretraining.py的max_seq_lengthand max_predictions_per_seq參數必須與create_pretraining_data.py相同。

python run_pretraining.py --input_file=/tmp/tf_examples.tfrecord --output_dir=/tmp/pretraining_output --do_train=True --do_eval=True --bert_config_file=$BERT_BASE_DIR/bert_config.json --init_checkpoint=$BERT_BASE_DIR/bert_model.ckpt --train_batch_size=32 --max_seq_length=128 --max_predictions_per_seq=20 --num_train_steps=20 --num_warmup_steps=10 --learning_rate=2e-5

這將產生如下輸出:

***** Eval results ***** global_step = 20 loss = 0.0979674 masked_lm_accuracy = 0.985479 masked_lm_loss = 0.0979328 next_sentence_accuracy = 1.0 next_sentence_loss = 3.45724e-05FAQ

問:這次公開的代碼是否與Cloud TPU兼容?GPU呢?

答:是的,這個存儲庫中的所有代碼都可以與CPU,GPU和Cloud TPU兼容。但是,GPU訓練僅適用于單GPU。

問:提示內存不足,這是什么問題?

答:請參閱out-of-memory issues這部分的內容。

問:有PyTorch版本嗎?

答:目前還沒有正式的PyTorch實現。如果有人創建了一個逐行PyTorch實現,可以讓我們的預訓練checkpoints直接轉換,那么我們很樂意在這里鏈接到PyTorch版本。

問:是否會發布其他語言的模型?

答:是的,我們計劃很快發布多語言BERT模型。我們不能保證將包含哪些語言,但它很可能是一個單一的模型,其中包括大多數維基百科上預料規模較大的語言。

問:是否會發布比BERT-Large更大的模型?

答:到目前為止,我們還沒有嘗試過比BERT-Large更大的訓練。如果我們能夠獲得重大改進,可能會發布更大的模型。

問:這個庫的許可證是什么?

答:所有代碼和模型都在Apache 2.0許可下發布。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 谷歌
    +關注

    關注

    27

    文章

    6194

    瀏覽量

    106014
  • 代碼
    +關注

    關注

    30

    文章

    4825

    瀏覽量

    69043
  • nlp
    nlp
    +關注

    關注

    1

    文章

    489

    瀏覽量

    22107

原文標題:谷歌最強NLP模型BERT官方代碼來了!GitHub一天3000星

文章出處:【微信號:AI_era,微信公眾號:新智元】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    BERT原理詳解

    BERT原理詳解
    發表于 07-02 16:45

    串行BERT用戶指南

    A guide on using the Serial BERT
    發表于 09-23 11:01

    串行BERT編程指南

    A guide on programming the Serial BERT
    發表于 09-24 17:15

    J-BERT N4903A高性能串行BERT手冊

    Brochure for the Keysight J-BERT N4903A High-Performance Serial BERT: 4 pages
    發表于 09-26 12:17

    回收M8040A 64 Gbaud 高性能 BERT

    回收M8040A 64 Gbaud 高性能 BERT曾S:***;Q號:3140751627;M8040A 64 Gbaud 高性能 BERTM8030A 多通道比特誤碼率測試儀M8062A
    發表于 07-03 11:08

    msp430g2553示例C代碼_(官方)

    msp430g2553示例C代碼_(官方)。
    發表于 03-23 16:45 ?13次下載

    FR5739的官方代碼示例

    FR5739的官方代碼示例,感興趣的小伙伴們可以看看。
    發表于 07-26 14:31 ?42次下載

    BERT模型的PyTorch實現

    BertModel是一個基本的BERT Transformer模型,包含一個summed token、位置和序列嵌入層,然后是一系列相同的self-attention blocks(BERT-base是12個blocks, BERT
    的頭像 發表于 11-13 09:12 ?1.4w次閱讀

    淘金記:如何尋找未開墾的Bert應用領域

    Bert 給人們帶來了大驚喜,不過轉眼過去大約半年時間了,這半年來,陸續出現了與Bert相關的不少新工作。
    的頭像 發表于 06-11 10:36 ?2430次閱讀
    淘金記:如何尋找未開墾的<b class='flag-5'>Bert</b>應用領域

    BERT再次制霸GLUE排行榜!BERT王者歸來了

    不過,XLNet的王座沒坐太久。就在今天,Facebook公布一個基于BERT開發的加強版預訓練模型RoBERTa——在GLUE、SQuAD和RACE三個排行榜上全部實現了最先進的結果!
    的頭像 發表于 08-02 08:53 ?5695次閱讀
    <b class='flag-5'>BERT</b>再次制霸GLUE排行榜!<b class='flag-5'>BERT</b>王者歸<b class='flag-5'>來了</b>!

    如何在BERT中引入知識圖譜中信息

    引言 隨著BERT等預訓練模型橫空出世,NLP方向迎來了一波革命,預訓練模型在各類任務上均取得了驚人的成績。隨著各類預訓練任務層出不窮,也有部分研究者考慮如何在BERT這一類模型中引入或者強化知識
    的頭像 發表于 11-03 17:52 ?4074次閱讀
    如何在<b class='flag-5'>BERT</b>中引入知識圖譜中信息

    圖解BERT預訓練模型!

    BERT的發布是這個領域發展的最新的里程碑之一,這個事件標志著NLP 新時代的開始。BERT模型打破了基于語言處理的任務的幾個記錄。在 BERT 的論文發布后不久,這個團隊還公開了模型的代碼
    的頭像 發表于 11-24 10:08 ?3729次閱讀

    如何優雅地使用bert處理長文本

    不同NLP任務下使用COGLTX的代碼: 論文題目: CogLTX: Applying BERT to Long Texts 論文鏈接: http://keg.cs.tsinghua.edu.cn
    的頭像 發表于 12-26 09:17 ?8833次閱讀
    如何優雅地使用<b class='flag-5'>bert</b>處理長文本

    什么是BERT?為何選擇BERT

    由于絕大多數 BERT 參數專門用于創建高質量情境化詞嵌入,因此該框架非常適用于遷移學習。通過使用語言建模等自我監督任務(不需要人工標注的任務)訓練 BERT,可以利用 WikiText 和 BookCorpus 等大型無標記數據集
    的頭像 發表于 04-26 14:24 ?4409次閱讀

    總結FasterTransformer Encoder(BERT)的cuda相關優化技巧

    FasterTransformer BERT 包含優化的 BERT 模型、高效的 FasterTransformer 和 INT8 量化推理。
    的頭像 發表于 01-30 09:34 ?2446次閱讀
    總結FasterTransformer Encoder(<b class='flag-5'>BERT</b>)的cuda相關優化技巧
    好运来百家乐官网现金网| 百家乐必胜软件下载| 百家乐推荐| 百家乐官网作弊内幕| 百家乐免费赌博软件| 大发888 王博| 金百家乐官网的玩法技巧和规则| 大发888是什么| 百家乐官网这样赢保单分析 | 百家乐官网站| 百家乐官网优博娱乐城| rmb百家乐的玩法技巧和规则 | 赌百家乐的计划跟策略| 高密市| 澳门百家乐网址多少| 百家乐官网怎么玩呀| 百家乐家乐娱乐城| 百家乐官网gamble| 月华百家乐的玩法技巧和规则 | 广水市| 百家乐和| 赌场百家乐官网投注公式| 威尼斯人娱乐城是骗子| 百家乐官网真人娱乐场开户注册| 百家乐娱乐城优惠| 宜春市| 百家百家乐官网网站| 网上玩百家乐官网游戏有人挣到钱了吗| 棋牌源码论坛| 噢门百家乐注码技巧| 信誉好百家乐官网平台| 大发888娱乐场官网| 不规则地形做生意风水好吗| 崇明县| V博百家乐的玩法技巧和规则| 长沙百家乐官网的玩法技巧和规则 | 德州扑克教学视频| 百家乐现金平台排名| 百家乐官网真人游戏开户| 大发888娱乐城维护| 百家乐投注玩多少钱|