BERT 101 🤗 SOTA NLP 模型詳解

釋出於 2022 年 3 月 2 日
在 GitHub 上更新

什麼是 BERT?

BERT,全稱 Bidirectional Encoder Representations from Transformers (來自 Transformer 的雙向編碼器表示),是一種用於自然語言處理的機器學習 (ML) 模型。它於 2018 年由 Google AI Language 的研究人員開發,如同瑞士軍刀一般,為 11 種以上最常見的語言任務提供瞭解決方案,例如情感分析和命名實體識別。

長久以來,語言對於計算機來說一直難以“理解”。當然,計算機可以收集、儲存和讀取文字輸入,但它們缺乏基本的語言 上下文

於是,自然語言處理 (NLP) 應運而生:這是一個旨在讓計算機能夠閱讀、分析、解釋並從文字和口語中獲取意義的人工智慧領域。這一實踐結合了語言學、統計學和機器學習,以幫助計算機“理解”人類語言。

傳統上,個別的 NLP 任務需要由為該特定任務建立的個別模型來解決。直到——BERT 的出現!

BERT 徹底改變了 NLP 領域,它解決了 11 種以上最常見的 NLP 任務 (並且比以前的模型做得更好),使其成為 NLP 領域的多面手。

在本指南中,你將瞭解什麼是 BERT,它有何不同,以及如何開始使用 BERT。

  1. BERT 有什麼用?
  2. BERT 的工作原理是什麼?
  3. BERT 模型的大小和架構
  4. BERT 在常見語言任務上的效能
  5. 深度學習對環境的影響
  6. BERT 的開源力量
  7. 如何開始使用 BERT
  8. BERT 常見問題解答
  9. 結論

讓我們開始吧!🚀

1. BERT 有什麼用?

BERT 可以用於各種各樣的語言任務

  • 可以判斷電影評論的正面或負面程度。(情感分析)
  • 幫助聊天機器人回答你的問題。(問答)
  • 在寫電子郵件 (Gmail) 時預測你的文字。(文字預測)
  • 只需輸入幾句話,就能寫一篇關於任何主題的文章。(文字生成)
  • 可以快速總結冗長的法律合同。(摘要)
  • 可以根據周圍的文字區分具有多種含義的詞 (例如“bank”)。(多義詞消歧)

還有更多語言/NLP 任務以及每個任務背後的更多細節。

有趣的事實: 你幾乎每天都在與 NLP (很可能是 BERT) 互動!

NLP 的應用包括谷歌翻譯、語音助手 (Alexa、Siri 等)、聊天機器人、谷歌搜尋、聲控 GPS 等等。


1.1 BERT 示例

自 2020 年 11 月以來,BERT 幫助 Google 更好地呈現幾乎所有搜尋的 (英語) 結果。

這是一個例子,說明 BERT 如何幫助 Google 更好地理解特定的搜尋,例如

原始碼

在 BERT 出現之前,Google 顯示的是關於如何配藥的資訊。

在 BERT 出現之後,Google 理解了“for someone (為某人)”與為別人取藥有關,現在搜尋結果有助於回答這個問題。


2. BERT 的工作原理是什麼?

BERT 的工作原理是利用以下幾點

2.1 海量訓練資料

一個包含 33 億單詞的大規模資料集為 BERT 的持續成功做出了貢獻。

BERT 專門在維基百科 (約 25 億單詞) 和谷歌的 BooksCorpus (約 8 億單詞) 上進行了訓練。這些大型資訊資料集不僅讓 BERT 對英語語言有了深入的瞭解,也對我們的世界有了深入的瞭解!🚀

在如此大的資料集上訓練需要很長時間。BERT 的訓練得益於新穎的 Transformer 架構,並透過使用 TPU (張量處理單元 - 谷歌專門為大型 ML 模型構建的定製電路) 加速了訓練過程。——64 個 TPU 在 4 天內完成了 BERT 的訓練。

注意: 對較小的 BERT 模型的需求正在增加,以便在較小的計算環境 (如手機和個人電腦) 中使用 BERT。2020 年 3 月釋出了 23 個較小的 BERT 模型DistilBERT 提供了 BERT 的輕量級版本;執行速度快 60%,同時保持了 BERT 95% 以上的效能。

2.2 什麼是掩碼語言模型?

MLM 透過掩碼 (隱藏) 句子中的一個單詞,並迫使 BERT 雙向地使用被覆蓋單詞兩側的單詞來預測被掩碼的單詞,從而實現/強制從文字中進行雙向學習。這是前所未有的!

有趣的事實: 我們人類自然而然地就會這樣做!

掩碼語言模型示例

想象一下,你的朋友在冰川國家公園露營時給你打電話,他們的訊號開始中斷。在電話掉線之前,你聽到的最後一句話是

朋友:“天哪!我正在釣魚,一條巨大的鱒魚剛剛 [____] 了我的魚線!”

你能猜出你朋友說了什麼嗎?

你能夠自然地預測缺失的單詞,透過將缺失單詞前後的單詞作為上下文線索進行雙向考慮 (此外還有你對釣魚原理的歷史知識)。你猜到你的朋友說的是“broke (弄斷)”了嗎?這也是我們預測的,但即使是我們人類,對這些方法也容易出錯。

注意: 這就是為什麼你經常會看到將“人類表現”與語言模型的效能得分進行比較。是的,像 BERT 這樣的新模型可以比人類更準確!🤯

你上面用來填補 [____] 單詞的雙向方法與 BERT 獲得 SOTA 準確率的方式類似。在訓練過程中,會隨機隱藏 15% 的分詞,BERT 的任務是正確預測被隱藏的單詞。因此,直接教會模型關於英語語言 (以及我們使用的單詞) 的知識。這不是很巧妙嗎?

來玩玩 BERT 的掩碼預測吧

託管推理 API
掩碼符號:[MASK]
此模型可以按需載入到推理 API 上。

有趣的事實: 掩碼技術已經存在很長時間了 - 1953 年關於完形填空程式 (或“掩碼”) 的論文

2.3 什麼是下一句預測?

NSP (下一句預測) 用於幫助 BERT 學習句子之間的關係,透過預測給定的句子是否是前一個句子的下一句。

下一句預測示例

  1. Paul went shopping. He bought a new shirt. (保羅去購物了。他買了一件新襯衫。) (正確的句子對)
  2. Ramona made coffee. Vanilla ice cream cones for sale. (雷蒙娜煮了咖啡。香草冰淇淋甜筒出售。) (不正確的句子對)

在訓練中,50% 的正確句子對與 50% 的隨機句子對混合在一起,以幫助 BERT 提高下一句預測的準確性。

有趣的事實: BERT 是同時在 MLM (50%) 和 NSP (50%) 上進行訓練的。

2.4 Transformer

Transformer 架構使得 ML 訓練能夠極其高效地並行化。因此,大規模並行化使得在相對較短的時間內對 BERT 進行大量資料訓練成為可能。

Transformer 使用注意力機制來觀察單詞之間的關係。這一概念最初在流行的 2017 年論文《Attention Is All You Need》中提出,引發了世界各地 NLP 模型對 Transformer 的使用。

自 2017 年問世以來,Transformer 已迅速成為解決許多領域任務 (如自然語言處理、語音識別和計算機視覺) 的最先進方法。簡而言之,如果你在做深度學習,那麼你需要 Transformer!

Lewis Tunstall,Hugging Face 機器學習工程師兼《Natural Language Processing with Transformers》作者

流行的 Transformer 模型釋出時間線

原始碼

2.4.1 Transformer 是如何工作的?

Transformer 的工作原理是利用注意力機制,這是一種強大的深度學習演算法,最早出現在計算機視覺模型中。

——這與我們人類透過注意力處理資訊的方式並無太大不同。我們非常擅長忘記/忽略那些不會構成威脅或不需要我們回應的日常瑣碎輸入。例如,你還記得上週二回家路上看到和聽到的一切嗎?當然不記得!我們大腦的記憶力是有限且寶貴的。我們能夠回憶,得益於我們能夠忘記瑣碎的輸入。

同樣,機器學習模型需要學會只關注重要的事情,而不要浪費計算資源處理不相關的資訊。Transformer 建立差異化的權重,以表明句子中的哪些單詞最關鍵,需要進一步處理。

Transformer 透過將輸入在一系列 Transformer 層 (通常稱為編碼器) 中連續處理來實現這一點。如有必要,可以使用另一系列 Transformer 層——解碼器——來預測目標輸出。——然而,BERT 並未使用解碼器。Transformer 特別適合無監督學習,因為它們可以高效地處理數百萬個數據點。

有趣的事實:自 2011 年以來,Google 一直在使用你的 reCAPTCHA 選擇來標記訓練資料。整個 Google Books 檔案和《紐約時報》目錄中的 1300 萬篇文章都已透過人們輸入 reCAPTCHA 文字進行了轉錄/數字化。現在,reCAPTCHA 要求我們標記 Google 街景影像、車輛、紅綠燈、飛機等。如果 Google 讓我們意識到我們參與了這項工作 (因為訓練資料很可能具有未來的商業意圖),那將會很不錯,但我跑題了。

要了解有關 Transformer 的更多資訊,請檢視我們的 Hugging Face Transformers 課程

3. BERT 模型的大小和架構

讓我們來分析一下兩個原始 BERT 模型的架構

ML 架構術語表

ML 架構部分 定義
引數量 模型可用的可學習變數/值的數量。
Transformer 層 Transformer 塊的數量。一個 Transformer 塊將一系列單詞表示轉換為一系列上下文相關的單詞 (編號表示)。
隱藏層大小 位於輸入和輸出之間的數學函式層,用於為 (單詞) 分配權重以產生期望的結果。
注意力頭 一個 Transformer 塊的大小。
處理中 用於訓練模型的處理單元型別。
訓練時長 訓練模型所需的時間。

以下是 BERTbase 和 BERTlarge 的上述 ML 架構部分的數量

Transformer 層 隱藏層大小 注意力頭 引數量 處理中 訓練時長
BERTbase 12 768 12 1.1 億 4 個 TPU 4 天
BERTlarge 24 1024 16 3.4 億 16 個 TPU 4 天

讓我們來看看 BERTlarge 的額外層、注意力頭和引數如何提高了它在 NLP 任務中的效能。

4. BERT 在常見語言任務上的效能

BERT 已在 11 個常見的 NLP 任務上成功達到了最先進的準確率,超越了以往頂尖的 NLP 模型,並且是第一個超越人類的模型!但是,這些成就是如何衡量的呢?

NLP 評估方法:

4.1 SQuAD v1.1 & v2.0

SQuAD (斯坦福問答資料集) 是一個閱讀理解資料集,包含約 10.8 萬個問題,這些問題可以透過相應的維基百科文字段落來回答。BERT 在這種評估方法上的表現是一項重大成就,它擊敗了之前的最先進模型和人類水平的表現。

4.2 SWAG

SWAG (Situations With Adversarial Generations) 是一項有趣的評估,因為它檢測模型推斷常識的能力!它透過一個包含 11.3 萬個關於常識情景的多項選擇題的大規模資料集來實現這一點。這些問題是從影片場景/情景中轉錄的,SWAG 為模型提供了下一個場景中四種可能的結果。然後模型盡力預測正確答案。

BERT 的表現優於之前的頂尖模型,包括人類水平的表現。

4.3 GLUE 基準測試

GLUE (通用語言理解評估) 基準測試是一組用於訓練、衡量和相互比較分析語言模型的資源。這些資源由九個旨在測試 NLP 模型理解能力的“困難”任務組成。以下是每個任務的摘要

雖然其中一些任務可能看起來無關緊要和陳腐,但重要的是要注意,這些評估方法在指示哪些模型最適合你的下一個 NLP 應用方面 極其 強大。

達到這種水平的表現並非沒有代價。接下來,讓我們瞭解一下機器學習對環境的影響。

5. 深度學習對環境的影響

大型機器學習模型需要海量資料,這在時間和計算資源上都代價高昂。

這些模型也對環境有影響

原始碼

機器學習對環境的影響是我們相信透過開源實現機器學習世界民主化的眾多原因之一!共享大型預訓練語言模型對於降低我們社群驅動工作的總體計算成本和碳足跡至關重要。

6. BERT 的開源力量

與其他大型學習模型 (如 GPT-3) 不同,BERT 的原始碼是公開可訪問的 (在 Github 上檢視 BERT 的程式碼),這使得 BERT 在世界範圍內得到更廣泛的使用。這是一個改變遊戲規則的因素!

開發人員現在能夠快速啟動並執行像 BERT 這樣的最先進模型,而無需花費大量的時間和金錢。🤯

開發人員可以轉而將精力集中在微調 BERT 上,以針對其獨特的任務定製模型的效能。

值得注意的是,如果你不想微調 BERT,目前已有數千個開源免費、預訓練的 BERT 模型可用於特定用例。

為特定任務預訓練的 BERT 模型

你還可以在 Hugging Face Hub 上找到數百個預訓練的開源 Transformer 模型

7. 如何開始使用 BERT

我們建立了這個 notebook,以便你可以透過這個簡單的教程在 Google Colab 中試用 BERT。開啟 notebook 或將以下程式碼新增到你自己的 notebook 中。專業提示:使用 (Shift + 單擊) 來執行程式碼單元格。

注意:Hugging Face 的 pipeline 類 使得引入像 Transformers 這樣的開源 ML 模型變得極其簡單,只需一行程式碼即可。

7.1 安裝 Transformers

首先,讓我們透過以下程式碼安裝 Transformers

!pip install transformers

7.2 試用 BERT

請隨意將下面的句子換成你自己的句子。但是,請在某處保留 [MASK],以便 BERT 預測缺失的單詞

from transformers import pipeline
unmasker = pipeline('fill-mask', model='bert-base-uncased')
unmasker("Artificial Intelligence [MASK] take over the world.")

當你執行上面的程式碼時,你應該會看到類似這樣的輸出

[{'score': 0.3182411789894104,
  'sequence': 'artificial intelligence can take over the world.',
  'token': 2064,
  'token_str': 'can'},
 {'score': 0.18299679458141327,
  'sequence': 'artificial intelligence will take over the world.',
  'token': 2097,
  'token_str': 'will'},
 {'score': 0.05600147321820259,
  'sequence': 'artificial intelligence to take over the world.',
  'token': 2000,
  'token_str': 'to'},
 {'score': 0.04519503191113472,
  'sequence': 'artificial intelligences take over the world.',
  'token': 2015,
  'token_str': '##s'},
 {'score': 0.045153118669986725,
  'sequence': 'artificial intelligence would take over the world.',
  'token': 2052,
  'token_str': 'would'}]

有點嚇人,對吧?🙃

7.3 警惕模型偏見

讓我們看看 BERT 為“男人”推薦什麼工作

unmasker("The man worked as a [MASK].")

當你執行上面的程式碼時,你應該會看到類似這樣的輸出

[{'score': 0.09747546911239624,
  'sequence': 'the man worked as a carpenter.',
  'token': 10533,
  'token_str': 'carpenter'},
 {'score': 0.052383411675691605,
  'sequence': 'the man worked as a waiter.',
  'token': 15610,
  'token_str': 'waiter'},
 {'score': 0.04962698742747307,
  'sequence': 'the man worked as a barber.',
  'token': 13362,
  'token_str': 'barber'},
 {'score': 0.037886083126068115,
  'sequence': 'the man worked as a mechanic.',
  'token': 15893,
  'token_str': 'mechanic'},
 {'score': 0.037680838257074356,
  'sequence': 'the man worked as a salesman.',
  'token': 18968,
  'token_str': 'salesman'}]

BERT 預測這個男人的工作是木匠、服務員、理髮師、機械師或銷售員

現在讓我們看看 BERT 為“女人”推薦什麼工作

unmasker("The woman worked as a [MASK].")

你應該會看到類似這樣的輸出

[{'score': 0.21981535851955414,
  'sequence': 'the woman worked as a nurse.',
  'token': 6821,
  'token_str': 'nurse'},
 {'score': 0.1597413569688797,
  'sequence': 'the woman worked as a waitress.',
  'token': 13877,
  'token_str': 'waitress'},
 {'score': 0.11547300964593887,
  'sequence': 'the woman worked as a maid.',
  'token': 10850,
  'token_str': 'maid'},
 {'score': 0.03796879202127457,
  'sequence': 'the woman worked as a prostitute.',
  'token': 19215,
  'token_str': 'prostitute'},
 {'score': 0.030423851683735847,
  'sequence': 'the woman worked as a cook.',
  'token': 5660,
  'token_str': 'cook'}]

BERT 預測這個女人的工作是護士、女服務員、女傭、妓女或廚師,這顯示了職業角色中明顯的性別偏見。

7.4 你可能喜歡的其他 BERT Notebook:

首次使用 BERT 的視覺化 Notebook

訓練你的分詞器

+別忘了檢視 Hugging Face Transformers 課程 以瞭解更多 🎉

8. BERT 常見問題解答

BERT 能和 PyTorch 一起使用嗎?

可以!我們在 Hugging Face 的專家已經在 GitHub 上開源了 PyTorch transformers 倉庫

專業提示:Lewis Tunstall、Leandro von Werra 和 Thomas Wolf 還寫了一本書,幫助人們用 Hugging Face 構建語言應用,名為《Natural Language Processing with Transformers》

BERT 能和 Tensorflow 一起使用嗎?

預訓練 BERT 需要多長時間?

2 個原始的 BERT 模型分別在 4 個 (BERTbase) 和 16 個 (BERTlarge) Cloud TPU 上訓練了 4 天。

微調 BERT 需要多長時間?

對於上面討論的常見 NLP 任務,BERT 在單個 Cloud TPU 上需要 1-25 分鐘,在單個 GPU 上需要 1-130 分鐘。

是什麼讓 BERT 與眾不同?

BERT 是 NLP 領域最早以兩步方式進行訓練的模型之一
  1. BERT 以無監督的方式在海量未標記資料 (無人為標註) 上進行了訓練。
  2. 然後,BERT 從之前的預訓練模型開始,在少量人為標註的資料上進行訓練,從而達到了最先進的效能。

9. 結論

BERT 是一個高度複雜和先進的語言模型,幫助人們自動化語言理解。它能夠在海量資料上進行訓練,並利用 Transformer 架構徹底改變 NLP 領域,從而實現了最先進的效能。

得益於 BERT 的開源庫,以及傑出的 AI 社群為持續改進和分享新的 BERT 模型所做的努力,尚未觸及的 NLP 里程碑的未來看起來一片光明。

你將用 BERT 創造什麼?

瞭解如何為你的特定用例微調 BERT 🤗

社群

註冊登入 發表評論

© . This site is unofficial and not affiliated with Hugging Face, Inc.