HuggingFace ブログ : BERT 101 🤗 最先端 NLPモデルの解説 (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 12/18/2022
* 本ページは、HuggingFace Blog の以下のドキュメントを翻訳した上で適宜、補足説明したものです:
- BERT 101 🤗 State Of The Art NLP Model Explained (Authors : Britney Muller ; Published : 03/02/2022)
* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。
- 人工知能研究開発支援
- 人工知能研修サービス(経営者層向けオンサイト研修)
- テクニカルコンサルティングサービス
- 実証実験(プロトタイプ構築)
- アプリケーションへの実装
- 人工知能研修サービス
- PoC(概念実証)を失敗させないための支援
- お住まいの地域に関係なく Web ブラウザからご参加頂けます。事前登録 が必要ですのでご注意ください。
◆ お問合せ : 本件に関するお問い合わせ先は下記までお願いいたします。
- 株式会社クラスキャット セールス・マーケティング本部 セールス・インフォメーション
- sales-info@classcat.com ; Web: www.classcat.com ; ClassCatJP
HuggingFace ブログ : BERT 101 🤗 最先端 NLPモデルの解説
What is BERT?
BERT、Transformers による双方向エンコーダ表現 (Bidirectional Encoder Representations from Transformers) の省略、は自然言語処理のための機械学習 (ML) モデルです。それは 2018 年に Google AI 言語の研究者により開発され、センチメント分析や固有表現抽出のような最も一般的な言語タスクの 11+ へのスイスアーミーナイフな解法として機能しています。
言語は歴史的に見てコンピュータが「理解する」ことが困難でした。確かに、コンピュータはテキスト入力を収集し、ストアして読むことはできますが、基本的な言語コンテキストを欠いています。
そこで、自然言語処理 (NLP) が出現しました : テキストと話し言葉をコンピュータが読み、分析し、解釈して意味を導出することを目的とした人工知能の分野です。この実践は、コンピュータが人間の言語を「理解する」ことを支援するために言語学、統計学と機械学習を組み合わせています。
従来、個々の NLP タスクは各特定タスクのために作成された個々のモデルにより解決されました。That is, until— BERT!
BERT は、最も一般的な NLP タスクの 11+ を解くことにより NLP 空間を変革し (しかも従来のモデルよりも良く)、NLP のなんでも屋になりました。
このガイドでは、BERT とは何か、何故それは違うのか、そして BERT でどのように始めるかを学習します :
- BERT は何に使われるか?
- BERT はどのように動作するか?
- BERT モデルサイズ & アーキテクチャ
- 一般的な言語タスク上の BERT の性能
- 深層学習の環境的な影響
- BERT のオープンソース・パワー
- BERT でどのように始めるか
- BERT FAQ
- まとめ
Let’s get started! 🚀
1. BERT は何に使われるか?
BERT は広範囲な言語タスクで利用できます :
- 映画レビューがポジティブかネガティブかを決定できます。(センチメント分析)
- チャットボットが質問に答えるのに役立ちます。(質問応答)
- 電子メール (Gmail) を書くときテキストを予測します。(テキスト予測)
- 数行のセンテンス入力だけで任意のトピックについて記事を書くことができます。(テキスト生成)
- 長い契約書を素早く要約できます。(要約)
- (‘bank’ のような) 複数の意味を持つ単語を周辺テキストに基づいて差別化できます。(多義性解消)
より多くの言語/NLP タスクがあり、更にこれらの各々の背後により詳細があります。
面白い事実 : 貴方はほぼ毎日、NLP (そして多分 BERT) と関わり合いを持っています!
NLP は Google 翻訳, 音声アシスタント (Alexa, Siri, etc.), チャットボット, Google 検索, 音声-operated GPS, 等々を支援しています。
1.1 BERT の例
BERT は 2020 年 11 月から殆どすべての検索に対して Google のより良い表面的な (英語の) 結果を支援しています。
ここに、BERT が特定の検索をより良く理解するのにどのように役立つかの例があります :
BERT 以前の Google は処方箋の取得に関する情報を表面化させました。
BERT 以後の Google は “for someone” が別の誰かのために処方箋を受け取ることに関係していることを理解して、今では検索結果はそれに答えるのに役立っています。
2. BERT はどのように動作するか?
BERT は以下を活用して機能します :
2.1 大規模な量の訓練データ
33 億語の膨大なデータセットが BERT の継続的な成功に寄与しています。
BERT は特に Wikipedia (~25 億語) と Google の BooksCorpus (~8 億語) 上で訓練されました。これらの巨大な情報を持つデータセットは BERT の英語だけでなく世界中の深い知識に寄与しました!🚀
この大規模なデータセットでの訓練は非常に時間がかかります。BERT の訓練は新しい Transformer アーキテクチャのおかげで可能となり、TPU (Tensor Processing Units – 巨大な ML モデルのために特に構築された Google のカスタム回路) を使用してスピードアップされました – 64 TPU が 4 日間に渡って BERT を訓練しました。
Note : より小さな BERT モデルの需要は BERT を (携帯はパソコンのような) 小さい計算環境内で使用するために増えています。2020 年 3 月には 23 の小さい BERT モデルがリリースされました。DistilBERT は BERT の軽量版を提供します ; BERT の性能の 95% 以上を維持しながら 60% 高速に実行できます。
2.2 Masked 言語モデルとは何か?
MLM は、センテンスのある単語をマスクして (隠して)、BERET にマスクされた単語を予測させるために覆われた単語のそれぞれの側の単語を双方向に利用させることにより、テキストからの双方向な学習を可能にします/強要します。This had never been done before!
Fun Fact : 私たちは人間としてこれを自然に行っています!
Masked 言語モデルの例 :
貴方の友人がグレイシャー国立公園でキャンプ中に電話をしてきて、サービスが途切れ始めたとします。電話が切れる前に貴方が聞いた最後は :
友人: “Dang! I’m out fishing and a huge trout just [ブランク] my line!”
友人が何と言ったか推測できますか??
コンテキストのヒントとして失われた (missing) 単語の前後の単語を双方向に考えることで、貴方は失われた単語を自然に予測することができます (釣りがどのようなものかの従来の知識に加えて)。貴方は友人は ‘broke’ と言ったことを推測しましたか?それは私たちが予測したものでもありますが、人間でさえもこれらの方法の幾つかについて間違いやすいです。
Note : これが、言語モデルの性能スコアに対して「人間の性能」の比較を見ることが多い理由です。そしてもちろん、BERT のような新しいモデルは人間よりも正確であり得ます!🤯
上記の [空白] 単語を満たすために貴方が行った双方向手法は BERT が最先端精度を達成した方法に類似しています。トークン化された単語のランダムな 15% は訓練の間に隠され、BERT のジョブは隠された単語を正しく予測することです。このように、モデルに英語 (そして使用する単語) について直接教えます。Isn’t that neat?
Play around with BERT’s masking predictions:
(訳注: 原文 参照)
次文 (Next Sentence) 予測とは何か?
NSP (次文予測) は、与えられたセンテンスが前のセンテンスに続いているか否かを予測することで、BERT がセンテンス間の関係について学習するのを支援するために使用されます。
次文予測サンプル :
- Paul went shopping. He bought a new shirt. (正しいセンテンスペア)
- Ramona made coffee. Vanilla ice cream cones for sale. (不正なセンテンスペア)
訓練では、BERT が次のセンテンス予測精度を向上する支援のために、50% の正しいセンテンスペアが 50% のランダムなセンテンスペアとミックスインされます。
Fun Fact : BERT は MLM (50%) と NLP (50%) の両方で同時に訓練されます。
2.4 Transformers
Transformer アーキテクチャは ML 訓練を極めて効率的に並列化することを可能にします。こうして圧倒的な並列化は比較的短時間で大規模なデータ量で BERT を訓練することを可能にします。
Transformers は単語間の関係性を観察するためにアテンション機構を使用します。元々は有名な 2017 Attention Is All You Need 論文で提案されたコンセプトは世界中の NLP モデルで Transformers の使用のきっかけとなりました。
2017 年のそれらの発表以来、Transformers は自然言語処理, 発話認識, そしてコンピュータビジョン のようなは多くの分野のタスクに取り組む最先端のアプローチに急速になっていきました。要するに、貴方が深層学習を行っているのであれば、貴方は Transformers が必要だということです!
Lewis Tunstall, Hugging Face ML エンジニア & Natural Language Processing with Transformers の著者
Timeline of popular Transformer model releases:
2.4.1 Transformers はどのように機能するか?
Transformers はパワフルな深層学習アルゴリズムである、アテンションの活用により機能します。
— 注意 (アテンション) を通して私たち人間が情報を処理する方法とそれほど違いはありません。脅威を与えない、あるいは応答を必要としないありふれた日々の入力を忘れる/無視することが私たちは信じられないほど上手いです。例えば、貴方は前の火曜日に帰宅するときに見たり聞いたことすべてを覚えていることができますか?Of course not! 私たちの脳のメモリには限界があり貴重です。記憶力は自明な入力を忘れる能力により助けられています。
同様に、機械学習モデルは重要なことだけに注意を払い、無関係な情報を処理して計算資源を浪費しない方法を学習する必要があります。Transformers は更なら処理のためにセンテンスのどの単語が最も重要であるかを示す差別化する重みを作成します。
transformer は、通常はエンコーダと呼ばれる、transformer 層のスタックを経由して入力を連続的に処理することでこれを行ないます。必要であれば、ターゲット出力を予測するために別の transformer 層のスタック – デコーダ – を使用できます。— けれども BERT はデコーダを使用しません。Transformers は教師なし学習に比類なく適しています、それらは数百万のデータポイントを効率的に処理できるからです。
Fun Fact : Google は 2011 年から訓練データをラベル付けするために reCAPTCHA の選択を使用してきました。Google Books のアーカイブ全体と New York Times カタログの 1,300 万の記事が reCAPTCHA テキストを入力する人々を通して文字おこしされ (transcribed) 数値化されてきました。今は、reCAPTCHA は Google Street View 画像, 車, 停止信号, 飛行機, 等にラベル付けすることを要求しています。Google がこの労力への私たちの参加を知らせてくれると素敵なのですが (訓練データは将来的な商用意図がありがちなので), 脱線しました …
※ To learn more about Transformers check out our Hugging Face Transformers Course.
BERT モデルサイズ & アーキテクチャ
2 つのオリジナル BERT モデルについてアーキテクチャを分解しましょう :
ML アーキテクチャ用語:
- パラメータ : モデルで利用可能な学習可能な変数/値の数
- Transformer 層 : Transformer ブロック数。transformer ブロックは単語表現のシークエンスを文脈を考慮した (contextualized) 単語 (数値化された単語) のシークエンスに変換します。
- 隠れサイズ : 入力と出力の間に位置する数学関数の層で、望ましい結果を生成するために重みを (単語に) 割り当てます。
- アテンション・ヘッド : Transformer ブロックのサイズ
- プロセッシング : モデルを訓練するために使用される処理ユニットのタイプ。
- 訓練の長さ : モデルを訓練するためにかかった時間。
Here’s how many of the above ML architecture parts BERTbase and BERTlarge has:
BERTlarge の追加の層、アテンションヘッド、そしてパラメータが NLP タスクに対してその性能をどのように向上させたか見てみましょう。
4. 一般的な言語タスク上の BERT の性能
※ 訳注 : この章の詳細は 原文 参照。
BERT has successfully achieved state-of-the-art accuracy on 11 common NLP tasks, outperforming previous top NLP models, and is the first to outperform humans! But, how are these achievements measured?
NLP 評価メソッド :
4.1 SQuAD v1.1 & v2.0
4.2 SWAG
4.3 GLUE ベンチマーク
5. 深層学習の環境的な影響
大規模な機械学習モデルは膨大なデータ量を必要とし、これは時間と計算資源の両方で高価です。
これらのモデルはまた環境への影響もあります :
機械学習への環境への影響は、オープンソースを通して機械学習の世界を民主化することの正当性を信じる多くの理由の一つです!大規模な事前訓練済みモデルの共有は、コミュニティ手動の取り組みによる全体的な計算コストとカーボン・フットプリントの削減について本質的です。
6. BERT のオープンソース・パワー
GPT-3 のような他の大規模学習モデルとは違い、BERT のソースコードは一般にアクセス可能で (GitHub の BERT のコード参照)、BERT が世界中で広く使用されることを可能にしています。This is a game-changer!
開発者は今では BERT のような最先端モデルを取得して大量の時間とお金をかけることなく素早く実行できます。🤯
代わりに開発者は、独自のタスクにモデル性能をカスタマイズするために BERT を微調整する取り組みに注力できます。
貴方が BERT を微調整することを望まないならば、特定のユースケースのために数千のオープンソースで無料の、事前訓練済み BERT モデルが現在利用可能であることに注意することは重要です。
特定のタスクに対して事前訓練された BERT モデル :
- Twitter センチメント分析
- 日本語テキストの分析
- 感情 categorizer (英語 – anger, fear, joy, 等。)
- 臨床 (Clinical) ノート分析
- 音声 to テキスト翻訳
- 有害 (Toxic) コメント検出
You can also find hundreds of pre-trained, open-source Transformer models available on the Hugging Face Hub.
7. BERT でどのように始めるか
このノートブックを作成しました ので、Google Colab でこの簡単なチュートリアルを通して BERT を試すことができます。ノートブックを開くか、以下のコードを貴方のものに追加してください。Pro Tip : Use (Shift + Click) to run a code cell.
Note : Hugging Face の pipeline クラス は、コードのわずか 1 行で transformers のようなオープンソース ML モデルを信じられないくらい簡単に引き込みます。
7.1 Transformers のインストール
最初に、次のコードで Transformers をインストールしましょう :
!pip install transformers
7.2 BEERT を試す
以下のセンテンスを貴方自身のものに自由に置き換えてください。ただし、BERT が欠落した単語を予測できるようにどこかに [MASK] は残してください。
from transformers import pipeline
unmasker = pipeline('fill-mask', model='bert-base-uncased')
unmasker("Artificial Intelligence [MASK] take over the world.")
When you run the above code you should see an output like this:
[{'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'}]
Kind of frightening right? 🙃
7.3 モデルのバイアスに注意する
BERT が “man” に対してどのようなジョブを提案するか見てみましょう :
unmasker("The man worked as a [MASK].")
When you run the above code you should see an ouput that looks something like:
[{'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 は man のジョブを Carpenter, Waiter, Barber, Mechanic, or Salesman であると予測しました。
それでは “woman” に対してどのようなジョブを提案するか見てみましょう。
unmasker("The woman worked as a [MASK].")
You should see an output that looks something like:
[{'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 は woman のジョブを Nurse, Waitress, Maid, Prostitute, or Cook であると予測しました、これは職業的な役割で明らかな gender バイアスを示しています。
7.4 楽しめる幾つかの他の BERT ノートブック
A Visual Notebook to BERT for the First Time
+Don’t forget to checkout the Hugging Face Transformers Course to learn more 🎉
8. BERT FAQ
BERT は PyTorch で使用できますか?
Yes! Hugging Face の専門家は GitHub で PyTorch transformers レポジトリ をオープンソース化しました。
Pro Tip : Lewis Tunstall, Leandro von Werra, and Thomas Wolf also wrote a book to help people build language applications with Hugging Face called, ‘Natural Language Processing with Transformers’.
BERT は Tensorflow で使用できますか?
Yes! TensorFlow を Transformers のバックエンドとして使用できます。
BERT を事前訓練するにはどのくらいかかりますか?
2 つのオリジナル BERT モデルは 4(BERTbase) と 16(BERTlarge) の Cloud TPU で 4 日間訓練されました。
BERT を微調整するにはどのくらいかかりますか?
上述の一般的な NLP タスクについて、BERT は単一 Cloud TPU で 1-25 分の間、単一 GPU で 1-130 分の間かかります。
BERT は何が違うのか?
BERT は 2 ステップで訓練された NLP の最初のモデルの一つです :
- BERT は教師なし流儀でラベル付けされていない (人間のアノテーションがない) 膨大な量のデータで訓練されました。
- それから BERT は前の事前訓練済みモデルから始めて、少量の人間がアノテートしたデータで訓練され、最先端なパフォーマンスという結果になりました。
9. まとめ
BERT は非常に複雑で高度な言語モデルで、言語理解を自動化する支援をします。最先端の性能を実現する能力は膨大な量のデータ上の訓練と NLP 分野に革新をもたらした Transformers アーキテクチャの活用によりサポートされます。
Thanks to BERT’s open-source library, and the incredible AI community’s efforts to continue to improve and share new BERT models, the future of untouched NLP milestones looks bright.
What will you create with BERT?
Learn how to fine-tune BERT for your particular use case 🤗
以上