用NVIDIA-NGC对BERT进行训练和微调
用NVIDIA-NGC對BERT進行訓練和微調
Training and Fine-tuning BERT Using NVIDIA NGC
想象一下一個比人類更能理解語言的人工智能程序。想象一下為定制的域或應用程序構建自己的Siri或Google搜索。
Google BERT(來自Transformers的雙向編碼器表示)為自然語言處理(NLP)領域提供了一個改變游戲規則的轉折點。
BERT運行在NVIDIA GPUs驅動的超級計算機上,訓練其龐大的神經網絡,達到前所未有的NLP精度,沖擊了已知人類語言理解的空間。像這樣的人工智能已經被期待了幾十年。有了BERT,它終于來了。
Figure 1. Block diagram for BERT pretraining and fine-tuning.
本文將詳細討論如何使用BERT,這需要預訓練和微調階段。本文重點放在預訓練。
What can BERT do?
隨著全球研究機構將對話人工智能作為首要目標,BERT在自然語言處理領域取得了重大突破。在過去,基本的語音接口,如電話樹算法,當你打電話給你的移動電話公司,銀行,或互聯網供應商是交易性的,并有有限的語言理解。
對于事務性接口,計算機的理解范圍一次僅限于一個問題。這給計算機提供了有限的所需智能:只有與當前動作相關的智能,一兩個字,或者更進一步說,可能是一個句子。有關更多信息,請參閱什么是會話人工智能?。
但當人們在日常對話中交談時,他們指的是段落前面介紹的單詞和上下文。超越單句是對話人工智能的切入點。
下面是一個使用BERT理解文章并回答問題的例子。這個例子更多的是對話而不是交易。這個例子展示了BERT在語言理解方面的表現。從美式足球運動版上選一段,然后問BERT一個關鍵問題。這個例子取自《鋼鐵俠》中沒有本·羅伊特利斯伯格的鏡頭?,F在會發生什么?。
****消息
匹茲堡鋼人隊是一支總部位于賓夕法尼亞州匹茲堡的職業美式足球隊。鋼人隊作為美國足球協會(AFC)東區的會員俱樂部參加國家足球聯盟(NFL)的比賽。該隊在海因茨球場進行主場比賽。鋼鐵工人去年賺了43900000美元。他們的四分衛叫本·羅特利斯伯格。
羅斯伯格已經在處理肘部問題了。本被后援梅森·魯道夫接替。他的第一個傳球被接球手蒙克里夫的手反彈攔截,但魯道夫在下半場反彈,以16分領先三個得分球。這還不足以阻止鋼人隊以0-2落后,在過去的12年里,大約90%以0-2領先的球隊錯過了季后賽。這些可能性可能已經讓鋼人隊的球迷們開始考慮明年的比賽,很難不去想羅思伯格的未來。
問:誰取代了本?
正在運行推理…****
以312.076句/秒的速度進行推理
回答:“梅森·魯道夫”
概率:86.918
太棒了,對吧?句子被解析成知識表示。在挑戰問題上,BERT必須確定誰是匹茲堡鋼人隊的四分衛(本羅斯利斯伯格)。此外,BERT可以看出梅森·魯道夫取代了羅斯利斯伯格擔任四分衛,這是本文的一個重點。
使用NVIDIA TensorRT的推理速度早些時候報告為每秒312.076句。如果取其倒數,則獲得3.2毫秒的延遲時間。這種GPU加速可以很快地預測出答案,在人工智能領域被稱為推理。
在2018年,BERT成為一個流行的深度學習模式,因為它的GLUE(General Language Understanding Evaluation,通用語言理解評估)得分達到80.5%(7.7%的絕對改善)。有關更多信息,請參見多任務基準測試和分析平臺以獲得自然理解。
回答問題是粘合基準度量之一。最近的一個突破是開發斯坦福問答數據集或小組,因為它是一個強大和一致的訓練和標準化學習績效觀察的關鍵。有關更多信息,請參閱SQuAD:100000+文本機器理解問題。
擁有足夠的計算能力同樣重要。在Google開發了BERT之后,不久NVIDIA就通過在許多gpu上訓練BERT,使用大規模并行處理實現了世界記錄時間。他們使用了大約83億個參數,并在53分鐘內訓練,而不是幾天。根據ZDNet在2019年的報告,“GPU制造商說,他們的人工智能平臺現在擁有最快的訓練記錄、最快的推理和迄今為止同類最大的訓練模型?!?/p>
BERT background
BERT的名字里有三個概念。
首先,變形金剛是一個神經網絡層,它利用自我注意來學習人類語言,其中的一段文字會與自身進行比較。該模型學習如何從段中的每個其他單詞派生給定單詞的含義。
Figure 2. BERT high-level architecture. Words are encoded with transformers, then used as inputs to classifiers.
第二,雙向意味著遞歸神經網絡(RNNs)將單詞視為時間序列,從兩個方向看句子。舊的算法將單詞向前看,試圖預測下一個單詞,而忽略了后面出現的單詞所提供的上下文和信息。BERT用自我注意一次看整個輸入句子。這個詞之前或之后的任何關系都會被考慮在內。
Figure3. BERT works with various types of embeddings as it parses two basic sentences.
最后,編碼器是編碼器-解碼器結構的一個組件。將輸入語言編碼到潛在空間中,然后使用經過訓練的解碼器反向創建另一種語言。這對翻譯很有幫助,因為自我關注有助于解決語言在表達相同觀點方面的許多差異,例如單詞的數量或句子結構。
在BERT中,您只需采用編碼的思想來創建輸入的潛在表示,然后將其用作幾個完全連接的層的特征輸入,以學習特定的語言任務。
How to use BERT
圖4暗示了讓BERT學會為您解決問題的兩個步驟。您首先需要對transformer層進行預處理,以便能夠將給定類型的文本編碼為包含完整底層含義的表示。然后,需要訓練全連接的分類器結構來解決特定的問題,也稱為微調。
Figure 4. BERT workflow with pretraining and fine-tuning phases.
預訓練是一項巨大的努力,可能需要超級計算機級的計算時間和等量的數據。最常用的開放源代碼數據集是維基百科上的文章,它們構成了25億個單詞,而BooksCorpus則提供了11000個免費使用的文本。這最終形成了一個約33億字的數據集。
所有這些數據都可以輸入到網絡中,供模型掃描和提取語言結構。在這個過程的最后,你應該有一個模型,在某種意義上,知道如何閱讀。這個模型對語言、單詞的意義、上下文和語法有一個大致的理解。
要為特定領域(如金融領域)定制此模型,需要在預訓練模型上添加更多特定領域的數據。這使得模型能夠理解特定領域的行話和術語,并對其更加敏感。
根據上下文的不同,一個詞有多種含義。例如,熊對動物學家來說就是動物。對華爾街的某些人來說,這意味著一個糟糕的市場。添加專門的文本使BERT定制到該域。使用NGC上提供的預訓練BERT并通過添加特定于域的數據對其進行自定義是一個好主意。
微調更容易實現,需要的數據集要小得多,大約有上萬個標記示例。BERT可以被訓練去做一系列的語言任務。
盡管有許多不同的微調運行,您可以創建專門版本的BERT,但它們都可以分支到相同的基礎預訓練模型。這使得BERT方法通常被稱為轉移學習的一個例子,當為一個問題訓練的模型權重被用作另一個問題的起點時。經過微調,這個BERT模型獲得了閱讀的能力,并學會了用它來解決問題。
What makes BERT special?
從教育的角度來看,早期的信息可能很有趣,但這種方法真的比以前的思路有那么大的改進嗎?答案是響亮的是!BERT模型在NLP任務中比以往任何時候都能獲得更高的精度。一個潛在的來源是膠水基準。
GLUE表示11個示例NLP任務。一個常見的例子是命名實體識別(named entity recognition),或者能夠將輸入中的每個單詞識別為人、位置等。另一種是句子情感相似度,即判斷兩個句子是否都意味著同一件事。GLUE提供了用于評估性能的通用數據集,模型研究人員將其結果提交到在線排行榜,作為模型準確性的一般展示。
2018年9月,最先進的NLP模型徘徊在GLUE分數70左右,平均完成各種任務。雖然令人印象深刻,但在同樣的任務中,人類基線的測量值為87.1,因此很難對人類水平的表現提出任何要求。
BERT是由谷歌研究員雅各布·德夫林(Jacob Devlin)在2018年10月開放的(特別是BERT的參數變化最大)。雖然發布的最大的BERT模型仍然只有80.5分,但它顯著地表明,在至少幾個關鍵任務中,它可以首次超過人類的基線。有關更多信息,請參閱BERT:Pre-training of Deep Bidirectional Transformers For Language Understanding。 BERT用這些結果獲得了整個領域的興趣,并引發了一波新的提交,每一個都采用了基于BERT變換器的方法并對其進行了修改。從2019年底的GLUE排行榜上看,最初的BERT投稿一路下滑至第17位。
最令人印象深刻的是,人類的基線分數最近被加入了排行榜,因為模特的表現明顯提高到了被超越的程度。果不其然,在幾個月的時間里,人類的基準線下降到了8點,完全超過了平均分和幾乎所有的個人任務表現。當你讀到這篇文章的時候,人類的基線可能會更低。
與2012年用于圖像處理的卷積神經網絡的出現類似,這種在可實現的模型性能方面令人印象深刻的快速增長為新的NLP應用打開了閘門。
Try out BERT
現在,很多人想試試BERT。對于用戶來說,問答過程是相當先進和有趣的。從我們的步驟開始。
之前的一篇文章,實時自然語言理解與BERT使用TensorRT,檢查如何建立和運行BERT使用aNVIDIA
NGC網站容器為TensorRT。我們建議使用它。我們可以訪問運行Ubuntu 16.04.6lts的NVIDIA V100 GPU。如果驅動器空間對您來說有問題,請使用/tmp區域,方法是在post中的步驟之前使用以下命令:
cd/tmp
此外,我們還找到了另一個可能有幫助的選擇。確保python/create_docker_container.sh路徑訪問的腳本從底部開始的第三行如下:
-v ${PWD}/models:/models \
另外,在后面直接添加一行,內容如下:
-v HOME:{HOME}:HOME:{HOME} \
在成功進入文章的第五步之后,您可以運行它,然后替換-p “…” -q "What is TensorRT?"段落和問題shell命令部分,如下命令所示。這與本文前面描述的美式足球問題重復。
python/bert_inference.py -e bert_base_384.engine -p
匹茲堡鋼人隊是一支總部位于賓夕法尼亞州匹茲堡的職業美式足球隊。鋼人隊作為美國足球協會(AFC)東區的會員俱樂部參加國家足球聯盟(NFL)的比賽。該隊在海因茨球場進行主場比賽。鋼鐵工人去年賺了43900000美元。他們的四分衛叫本·羅特利斯伯格。羅斯伯格已經在處理肘部問題了。本被后援梅森·魯道夫接替。他的第一個傳球被接球手蒙克里夫的手反彈攔截,但魯道夫在下半場反彈,以16分領先三個得分球。這還不足以阻止鋼人隊以0-2落后,在過去的12年里,大約90%以0-2領先的球隊錯過了季后賽。這些可能性可能已經讓鋼人隊的球迷們開始考慮明年的比賽了,很難不去想羅斯伯格的未來。
" -q “Who replaced Ben?” -v /workspace/models/fine tuned/bert_tf_v2_base_fp16_384_v2/vocab.txt -b 1
要用其他問題來嘗試這個足球段落,請更改-q "Who replaced Ben?"選擇和價值與另一個類似的問題。
對于預訓練和微調的兩階段方法,對于NVIDIA金融服務客戶,有一個BERT-GPU訓練營可用。
總結
以上是生活随笔為你收集整理的用NVIDIA-NGC对BERT进行训练和微调的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用NVIDIA Tensor Cores
- 下一篇: 基于OpenSeq2Seq的NLP与语音