飛槳帶你了解:基於百科類數據訓練的ELMo中文預訓練模型

2021-03-03 百度AI

在 NLP 世界裡,有一支很重要的家族,英文叫做 LARK( LAnguage Representations Kit ),翻譯成中文是語言表示工具箱。目前 LARK 家族最新最重要的三種算法,分別是 ELMo , BERT 和 ERNIE 。

你一定不知道,這三個普通的名字,竟然包含著一個有趣的秘密。

真相,即將揭開!

我們先從算法模型的名字尋找一些蛛絲馬跡

第一位, ELMo :

來自英文 Embedding from Language Models 的縮寫,來自論文名為Deep contextualized word representation

第二位, BERT : 

來自英文 Bidirectional Encoder Representations from Transformers 的縮寫,來自論文名為 Pre-training of Deep Bidirectional Transformers for Language Understanding

第三位, ERNIE : 

來自英文 Enhanced Representation through kNowledge IntEgration) 的縮寫,來自論文名為Enhanced Representation through Knowledge  Integration

看完了,是不是,還是一頭霧水,哪裡有什麼秘密?

不賣關子了,直接上圖!

What??

再回頭看看,你還記得那三個算法的名字麼?

ELMo , BERT , ERNIE 

竟然都是美國經典動畫片,《 Sesame Street (芝麻街)》裡面的卡通人物!!!

好吧,如果你說,沒看過這個動畫片,沒感覺啊。那我舉個例子,如果把《芝麻街》類比成中文《舒克和貝塔》。那麼,第一篇論文把模型取做「舒克」,第二篇很有愛的就叫做「貝塔」,第三篇就硬把模型叫做「皮皮魯」,也許不久的下一個模型就命名為「魯西西」啦。

誰說科學家們很無聊,是不是也很童趣?

好了,扯遠了,今天我們先給大家介紹 LARK 家族的 ELMo ! 提出它的論文獲得2018年 NAACL 最佳 paper ,它在 NLP 領域可是有著響噹噹的名頭,讓我們來認識它!

 ELMo 模型簡介 

ELMo ( Embeddings from Language Models )是重要的通用語義表示模型之一,以雙向 LSTM 為網路基本組件,以 Language Model 為訓練目標,通過預訓練得到通用的語義表示,將通用的語義表示作為 Feature 遷移到下遊 NLP 任務中,會顯著提升下遊任務的模型性能。

ELMo 模型核心是一個雙層雙向的 LSTM 網絡,與傳統的 word2vec 算法中詞向量一成不變相比, ELMo 會根據上下文改變語義 embedding 。

一個簡單的例子就是「蘋果」的詞向量:

句子1:「我買了1斤蘋果」

句子2:「我新買了1個蘋果X」

在 word2vec 算法中,「蘋果」的詞向量固定,無法區分這兩句話的區別,而ELMo 可以解決語言中的二義性問題,可以帶來性能的顯著提升。

 ELMo 項目的飛槳( PaddlePaddle )實現 

為了方便廣大的開發者,飛槳( PaddlePaddle )完成了 ELMo 的開源實現(依賴於 Paddle Fluid 1.4),發布要點如下。

注意啦,下面劃重點!!!

完整支持 ELMo 多卡訓練,底層算子優化,訓練速度比主流實現快約1倍。

下遊任務的性能明顯提升: LAC 任務加入 ELMo 後 F1 可以提升 1.1%;閱讀理解任務加入 ELMo 後 Rouge-L 提升 1%。

接下來,我們看看怎麼可以快速把 ELMo 用到我們的項目中來吧!

 ELMo 訓練過程介紹 

(1)數據預處理

將文檔按照句號、問號、感嘆以及內容分詞預處理。預處理後的數據文件,每行為一個分詞後的句子。給出了訓練數據 data/train 和測試數據 data/dev 的數據示例如下:

本 書 介紹 了 中國 經濟 發展 的 內外 平衡問題 、 亞洲 金融 危機 十 周年 回顧 與 反思 、 實踐 中 的 城鄉 統籌 發展 、 未來 十 年 中國 需要 研究 的 重大 課題 、 科學 發展 與新型 工業 化 等 方面 。

吳 敬 璉 曾經 提出 中國 股市 「 賭場 論 」 , 主張 維護 市場 規則 , 保護 草根 階層 生計, 被 譽 為 「 中國 經濟 學界 良心 」 , 是 媒體 和公眾 眼中 的 學術 明星

(2)模型訓練

利用提供的示例訓練數據和測試數據,進行單機多卡預訓練。在開始預訓練之前,需要把 CUDA 、 cuDNN 、 NCCL2 等動態庫路徑加入到環境變量 LD_LIBRARY_PATH 之中,然後執行 run.sh 即可開始單機多卡預訓練,run.sh 文件內容如下:

export CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7python train.py \--train_path='data/train/sentence_file_*' \--test_path='data/dev/sentence_file_*' \--vocab_path data/vocabulary_min5k.txt \--learning_rate 0.2 \--use_gpu True \--all_train_tokens 35479 \--local True $@

其中, all_train_tokens 為 train 和 dev 統計出來的 tokens 總量,訓練過程中,默認每個epoch後,將模型參數寫入到 checkpoints 路徑下,可以用於遷移到下遊 NLP 任務。

(3)ELMo模型遷移

以 LAC 任務為示例,將 ELMo 預訓練模型的語義表示遷移到 LAC 任務的主要步驟如下:

#step1:在已經搭建好的 LAC 網絡結構之後,加載 ELMo 預訓練模型參數:

from bilm import init_pretraining_paramsinit_pretraining_params(exe,args.pretrain_elmo_model_path, fluid.default_main_program()

#step2: 基於ELMo 字典 將輸入數據轉化為 word_ids,利用 elmo_encoder 接口獲取 ELMo embedding:

from bilm import elmo_encoderelmo_embedding = elmo_encoder(word_ids)

#step3: ELMoembedding 與 LAC 原有 word_embedding 拼接得到最終的 embedding:

word_embedding=fluid.layers.concat(input=[elmo_embedding, word_embedding], axis=1)

好的,到這裡,模型的遷移就完成了,再來回顧一下加入 ELMo 後對性能的提升,心動不如行動,趕緊用起來吧!

 ERNIE 模型簡介 

學習完了 ELMo ,我們再來了解一下 LARK 家族的學習成績最好的重磅成員ERNIE ,在多項 NLP 中文任務上表現非凡。

ERNIE 通過建模海量數據中的實體概念等先驗語義知識,學習真實世界的語義關係。具體來說, ERNIE 模型通過對詞、實體等語義單元的掩碼,使得模型學習完整概念的語義表示。相較於 BERT 學習原始語言信號, ERNIE 直接對先驗語義知識單元進行建模,增強了模型語義表示能力。

ERNIE 在多個公開的中文數據集上進行了效果驗證,包括語言推斷、語義相似度、命名實體識別、情感分析、問答匹配等自然語言處理各類任務上,均超越了語義表示模型 BERT 的效果。

查看更多詳細內容請點擊文末「閱讀原文」。

相關焦點

  • 飛槳帶你了解:基於百科類數據訓練的 ELMo 中文預訓練模型
    ELMo項目的飛槳(PaddlePaddle)實現  為了方便廣大的開發者, 飛槳(PaddlePaddle) 完成了ELMo的開源實現(依賴於 PaddlePaddle 1.4.0),發布要點如下。  注意啦,下面劃重點!!!
  • 基於飛槳PaddlePaddle的多種圖像分類預訓練模型強勢發布
    當前飛槳分類模型庫提供了VGG11,VGG13,VGG16以及VGG19四個網絡結構預訓練模型。當前飛槳分類模型庫提供了MobileNetV1和MobileNetV2的預訓練模型(1x),其精度指標都高於論文指標,其他大小的預訓練模型將在不久後開源。
  • RestNet50預訓練模型top1近80%,基於飛槳PaddlePaddle的多種圖像...
    VGG 系列模型[3]VGGNet是牛津大學計算機視覺組和DeepMind公司共同研發一種深度卷積網絡,2014年在ILSVRC比賽上獲得了分類項目的第二名和定位項目的第一名,其網絡設計思想直接影響了往後這些年的CNN網絡設計,進一步推動了基於深度學習的計算機視覺的發展。當前飛槳分類模型庫提供了VGG11,VGG13,VGG16以及VGG19四個網絡結構預訓練模型。
  • 23個系列分類網絡,10萬分類預訓練模型,這是飛槳PaddleClas百寶箱
    數據集訓練的分類模型作為預訓練模型,然後進行圖像分類的遷移學習。百度的小夥伴基於 PaddleClas 提供的 ResNet_vd 系列網絡結構的訓練方法和預訓練模型,訓練了一批大規模圖像分類預訓練模型,並應用到實際圖像分類相關業務中。
  • 賽爾原創@Findings|中文預訓練語言模型回顧
    同時,我們創新地提出了一種基於文本糾錯的預訓練語言模型MacBERT,應用糾錯型掩碼語言模型(MLM as correction,Mac)解決了預訓練模型中「預訓練-精調」不一致的問題。為了驗證實驗效果,我們選擇了8個經典的中文自然語言處理任務,包括閱讀理解、單句文本分類、句對文本分類等。大量實驗結果表明所提出的MacBERT能夠在大多數任務上取得顯著性能提升。
  • 直播回顧|最強中文NLP預訓練模型艾尼ERNIE官方揭秘
    而艾尼(ERNIE),可謂是目前NLP領域的最強中文預訓練模型。昨天,百度資深研發工程師龍老師,就通過直播帶開發者走近最強中文NLP預訓練模型ERNIE,在線上解讀了一系列艾尼ERNIE的強大特性,並現場與同為NLP模型的BERT直接PK,讓開發者連連感嘆,希望能把ERNIE運用到自己的工作與生活之中。
  • 賽爾原創@Findings | 中文預訓練語言模型回顧
    同時,我們創新地提出了一種基於文本糾錯的預訓練語言模型MacBERT,應用糾錯型掩碼語言模型(MLM as correction,Mac)解決了預訓練模型中「預訓練-精調」不一致的問題。為了驗證實驗效果,我們選擇了8個經典的中文自然語言處理任務,包括閱讀理解、單句文本分類、句對文本分類等。大量實驗結果表明所提出的MacBERT能夠在大多數任務上取得顯著性能提升。
  • 史上最全解讀|飛槳模型庫重大升級,主流算法模型全覆蓋
    語義表示庫新增 XLNet 預訓練模型;開源 EMNLP 2019 閱讀理解競賽冠軍模型 D-NET,同時支持 18 個不同抽取式閱讀理解數據集打榜。發布飛槳多任務學習庫 PALM (PAddLe Multi-task learning),更便捷支持多任務機器學習調研。 1.3.
  • 中文最佳,哈工大訊飛聯合發布全詞覆蓋中文BERT預訓練模型
    而在中文領域,哈工大訊飛聯合實驗室也於昨日發布了基於全詞覆蓋的中文 BERT 預訓練模型,在多個中文數據集上取得了當前中文預訓練模型的最佳水平,效果甚至超過了原版 BERT、ERINE 等中文預訓練模型。基於 Transformers 的雙向編碼表示(BERT)在多個自然語言處理任務中取得了廣泛的性能提升。
  • 26億參數,智源、清華開源中文大規模預訓練模型
    自 2018 年穀歌發布 BERT 以來,預訓練模型在自然語言處理(NLP)領域逐漸成為主流。今年 5 月份,OpenAI 推出的 更是引起了大量討論。但是,目前 NLP 領域的預訓練模型多針對英語語言,以英語語言數據為訓練數據,例如 GPT-3:用於訓練 GPT-3 的數據集。
  • RoBERTa中文預訓練模型,你離中文任務的「SOTA」只差個它
    昨天,國內開發者 brightmart 開源了最新的 RoBERTa 中文預訓練語言模型,開發社區又有新的中文模型可以用了。項目地址:https://github.com/brightmart/roberta_zh項目表示,該中文預訓練模型為 24 層的 base 版,它使用了 10G 文本進行數據訓練,包含新聞、社區問答、百科數據等。
  • 登頂GLUE百度ERNIE再突破:語言生成預訓練模型ERNIE-GEN刷新SOTA
    他們提出了首個基於多流(multi-flow)機制生成完整語義片段的預訓練模型 ERNIE-GEN,顯著提升了自然語言生成任務效果。藉助飛槳的高效分布式訓練優勢,百度開源了 ERNIE-GEN 的英文預訓練模型,並對開源工具進行了動靜合一升級,核心代碼精簡了 59% 。
  • 基於複數神經網絡首發量子機器學習開發工具 「量槳」,飛槳布局...
    特別值得一提的是,峰會現場飛槳率先宣布支持複數神經網絡,支持跨學科的機器學習研究。事實上,去年11月百度大腦就曾發布基於複數CNN網絡語音增強及聲學建模的「一體化」端到端建模技術,前瞻性遙遙領先。此次峰會,百度再次基於複數神經網絡,首發量子機器學習開發工具量槳。飛槳賦能量子計算,成為國內首個、目前也是唯一一個支持量子機器學習開發工具的深度學習平臺。
  • 為什麼預訓練語言模型 ELMo 是NLP的最大進步之一?
    Elmo 不僅僅是一個木偶人物玩具的名字,而且 ELMo 還是一個強大的計算模型,可以將單詞轉換成數字。這一重要的過程允許機器學習模型(以數字而不是單詞作為輸入)可以在文本數據上進行訓練。當我通讀原始論文時,有幾個主要觀點引起了我的注意:ELMo 解釋了單詞的上下文。ELMo 是基於大型文本語料庫進行訓練的。ELMo 是開源的。
  • 中文ELECTRA預訓練模型再升級
    在今年3月,哈工大訊飛聯合實驗室推出了中文ELECTRA預訓練模型,並將相關資源進行開源,目前在GitHub上已獲得580個star。本次更新中,我們將預訓練語料從原有的約20G提升至180G,利用接近9倍大小的數據集。
  • 一作解讀NLPCC最佳學生論文:1200萬中文對話數據和預訓練模型CDial...
    基於Transformer的大規模預訓練語言模型極大地促進了開放領域對話的研究進展。然而目前這一技術在中文對話領域並未被廣泛應用,主要原因在於目前缺乏大規模高質量的中文對話開源數據。  為了推動中文對話領域的研究,彌補中文對話語料不足這一問題,我們發布了一個包含1200萬對話的大規模中文對話數據集LCCC,並開源了在LCCC上預訓練的大規模中文對話生成模型CDial-GPT。
  • GTC大會飛槳專家演講實錄:簡單易用的飛槳分布式訓練功能升級
    百度飛槳也貢獻了四個主題演講,現在為您帶來飛槳大規模分布式訓練進展與應用的演講實錄。課程連結:https://nvidia.gtcevent.cn/forum/watch?在一小時的演講中,百度主任研發架構師董大祥圍繞飛槳框架新版本的大規模訓練與應用展開,介紹了大規模分布式訓練的功能、性能、以及在產業中的實踐。以下為演講實錄部分:飛槳的這次改動中主要是對並行訓練API進行了全面更新,使代碼變得更加簡潔,也更方便調試,另外也對並行訓練的策略進行了進一步的升級,可以適用於更大規模的模型參數。
  • 一作解讀NLPCC最佳學生論文:1200萬中文對話數據和預訓練模型CDial-GPT
    基於Transformer的大規模預訓練語言模型極大地促進了開放領域對話的研究進展。然而目前這一技術在中文對話領域並未被廣泛應用,主要原因在於目前缺乏大規模高質量的中文對話開源數據。為了推動中文對話領域的研究,彌補中文對話語料不足這一問題,我們發布了一個包含1200萬對話的大規模中文對話數據集LCCC,並開源了在LCCC上預訓練的大規模中文對話生成模型CDial-GPT。
  • 一文讀懂最強中文NLP預訓練模型ERNIE
    基於飛槳開源的持續學習的語義理解框架ERNIE 2.0,及基於此框架的ERNIE 2.0預訓練模型,在共計16個中英文任務上超越了BERT和XLNet, 取得了SOTA效果。本文帶你進一步深入了解ERNIE的技術細節。
  • NLP領域最優秀的8個預訓練模型(附開源地址)
    自然語言處理應用能夠快速增長,很大程度上要歸功於通過預訓練模型實現遷移學習的概念。在本文中,我將介紹一些頂級的預訓練模型,你可以用它們來開始你的自然語言處理之旅,並複製該領域的最新研究成果。如今,自然語言處理(Natural Language Processing,NLP)應用已經變得無處不在。