BERTモデルを最初からトレーニングする方法

ソースノード: 1013329

BERTモデルを最初からトレーニングする方法

BERT のイタリア人のいとこである FiliBERTo を紹介します。


By ジェームズ・ブリッグス、データサイエンティスト



BERT、ただしイタリア — 著者による画像

 

私の記事の多くは BERT に焦点を当ててきました。BERT は、自然言語処理 (NLP) の世界に登場して支配し、言語モデルの新時代を画したモデルです。

これまでにトランスフォーマー モデル (たとえば BERT とは何か) を使用したことがない人のために説明すると、プロセスは次のようになります。

  • pip install transformers
  • 事前にトレーニングされたトランスフォーマー モデルを初期化する — from_pretrained.
  • いくつかのデータでテストしてください。
  • 多分 モデルを微調整します (さらにトレーニングします)。

これは素晴らしいアプローチですが、これだけを行うと、独自の変圧器モデルを作成する背後にある理解が欠けてしまいます。

そして、独自の変圧器モデルを作成できない場合は、問題に適合する事前トレーニング済みのモデルがあることに依存する必要がありますが、常にそうとは限りません。



英語以外の BERT モデルについて質問するいくつかのコメント

 

そこでこの記事では、独自の変圧器モデル、特に RoBERTa と呼ばれる BERT のさらに発展したバージョンを構築するために実行する必要がある手順を検討します。

概要

 
 
このプロセスにはいくつかの手順があるので、本題に入る前に、まず何をする必要があるかをまとめてみましょう。 合計で XNUMX つの重要な部分があります。

  • データの取得
  • トークナイザーの構築
  • 入力パイプラインの作成
  • モデルのトレーニング

これらの各セクションを完了したら、構築したトークナイザーとモデルを取得し、通常と同じ方法で使用できるように両方を保存します。 from_pretrained.

データの取得

 
 
他の機械学習プロジェクトと同様に、データが必要です。 トランスフォーマー モデルをトレーニングするためのデータに関しては、本当に選択の余地がありません。ほぼすべてのテキスト データを使用できます。



HuggingFace のデータセット ライブラリを使用して OSCAR データセットをダウンロードするためのビデオ ウォークスルー

 

そして、インターネット上にたくさんあるものがあるとすれば、それは非構造化テキスト データです。

インターネットから収集されたテキストの分野で最大のデータセットの XNUMX つは、OSCAR データセットです。

OSCAR データセットには膨大な数の異なる言語が含まれており、ゼロからトレーニングするための最も明確な使用例の XNUMX つは、テルグ語やナバホ語など、あまり使用されていない言語に BERT を適用できるようにすることです。

残念ながら、ある程度の能力を持って私が話せる唯一の言語は英語です。しかし、私のガールフレンドはイタリア人なので、彼女であるローラが、イタリア語を話す BERT モデルである FiliBERTo の結果を評価することになります。

したがって、OSCAR データセットのイタリア語セグメントをダウンロードするには、HuggingFace の datasets ライブラリ — を使用してインストールできます pip install datasets。 次に、OSCAR_IT を次のようにダウンロードします。

を見てみましょう dataset オブジェクト。

わかりました。トークナイザーを構築するときに使用できる形式でデータを保存しましょう。 のみを含むプレーンテキスト ファイルのセットを作成する必要があります。 text データセットから特徴を抽出し、それぞれを分割します サンプル 改行を使用する n.

私たちの中で data/text/oscar_it ディレクトリは次のとおりです。


プレーンテキストの OSCAR データを表す .txt ファイルでいっぱいの Windows エクスプローラー ウィンドウを表示するスクリーンショット
プレーンテキストの OSCAR ファイルが含まれるディレクトリ

 

トークナイザーの構築

 
 
次はトークナイザーです! トランスフォーマーを使用する場合、通常、それぞれのトランスフォーマー モデルと一緒にトークナイザーをロードします。トークナイザーはプロセスの重要なコンポーネントです。



カスタムトークナイザーを構築するためのビデオウォークスルー

 

トークナイザーを構築するときは、OSCAR データをすべてフィードし、語彙サイズ (トークナイザー内のトークンの数)、および特別なトークンを指定します。

RoBERTa 特別トークンは次のようになります。

したがって、それらを必ず special_tokens トークナイザーのパラメータ train メソッド呼び出し。

これでトークナイザーの準備が整ったので、後で使用するためにファイルに保存できます。

これで、新しいファイルを定義する XNUMX つのファイルができました。 FiliBERへ トークナイザー:

  • マージ.txt — テキストからトークンへの初期マッピングを実行します。
  • 語彙.json — トークンをトークン ID にマッピングします

これらを使用して、トークナイザーの初期化に進み、他のトークナイザーを使用するのと同じように使用できるようにします。 from_pretrained トークナイザー。

トークナイザーの初期化

 
 
まず、以前に構築した XNUMX つのファイルを使用してトークナイザーを初期化します。 from_pretrained:

これでトークナイザーの準備が整ったので、それを使用してテキストをエンコードしてみます。 エンコードするときは、通常使用するものと同じ XNUMX つの方法を使用します。 encode および encode_batch.

エンコーディングオブジェクトから tokens を抽出します input_ids および attention_mask FiliBERTo で使用するテンソル。

入力パイプラインの作成

 
 
トレーニング プロセスの入力パイプラインは、プロセス全体のより複雑な部分です。 これは、生の OSCAR トレーニング データを取得し、変換し、それを DataLoader トレーニングの準備ができています。



MLM 入力パイプラインのビデオウォークスルー

 

データの準備

 
 
単一のサンプルから始めて、準備ロジックを進めていきます。

まず、ファイルを開く必要があります。これは、保存したファイルと同じです。 。TXT 先ほどのファイル。 改行文字に基づいてそれぞれを分割します n これは個々のサンプルを示しているためです。

次に、次を使用してデータをエンコードします。 tokenizer — 次のような重要なパラメータを必ず含めます。 max_lengthpaddingtruncation.

そして、テンソルの作成に進むことができます。マスク言語モデリング (MLM) を通じてモデルをトレーニングします。 したがって、XNUMX つのテンソルが必要です。

  • 入力 ID - 私たちの トークン ID マスク トークンを使用してトークンの ~15% がマスクされる <mask>.
  • 注意マスク — のテンソル 1砂 0s、「実際の」トークン/パディング トークンの位置をマークします。アテンションの計算に使用されます。
  • ラベル - 私たちの トークン ID   いいえ マスキング。

MLMに詳しくない方のために説明しました こちら.

本サイトの attention_mask および labels テンソルは単純に次から抽出されます。 batchを選択します。 input_ids テンソルにはさらに注意が必要ですが、このテンソルではトークンの約 15% をマスクし、トークン ID を割り当てます。 3.

最終出力では、エンコードされたファイルの一部が表示されます。 input_ids テンソル。 一番最初のトークン ID は 1  -  [CLS] トークン。 テンソルの周りに点在するものはいくつかあります 3 トークン ID — これらは新しく追加されたものです [MASK] トークン。

データローダーの構築

 
 
次に、 Dataset クラス — XNUMX つのエンコードされたテンソルを PyTorch として初期化するために使用します torch.utils.data.Dataset オブジェクト。

最後に、私たちの dataset PyTorch にロードされる DataLoader オブジェクト — トレーニング中にデータをモデルにロードするために使用します。

モデルのトレーニング

 
 
トレーニングには XNUMX つのものが必要です。 DataLoader そしてモデル。 の DataLoader 私たちにはありますが、モデルはありません。



モデルの初期化

 
 
トレーニングには、生の(事前トレーニングされていない)ものが必要です。 BERTLMHeadModel。 これを作成するには、まず RoBERTa 構成オブジェクトを作成して、FiliBERTo を初期化するパラメーターを記述する必要があります。

次に、言語モデリング (LM) ヘッドを使用して RoBERTa モデルをインポートし、初期化します。

研修準備

 
 
トレーニング ループに進む前に、いくつかのことを設定する必要があります。 まず、GPU/CPU の使用率を設定します。 次に、モデルのトレーニング モードをアクティブにし、最後にオプティマイザーを初期化します。

トレーニング

 
 
ついにトレーニングの時間です! 通常、PyTorch 経由でトレーニングするときと同じようにトレーニングします。

Tensorboard に進むと、時間の経過とともに損失が見つかるでしょう。それは有望に見えます。



損失 / 時間 — このグラフでは複数のトレーニング セッションがまとめられています。

 

本当のテスト

 
 
さあ、本当のテストの時が来ました。 私たちは MLM パイプラインを設定し、Laura に結果を評価するよう依頼しました。 ビデオレビューはこちらの 22:44 からご覧いただけます。



まず初期化します pipeline オブジェクトを使用して、 'fill-mask' 口論。 次に、次のようにモデルのテストを開始します。

「チャオ」 来ます ヴァ?」 が正解です! それは私のイタリア語の進歩と同じくらい上級です。それでは、ローラに任せましょう。

私たちは 「ボンジョルノ、来ますか?」 —または 「こんにちは、調子はどうですか?」:

最初の答えは「ボンジョルノ、チーヴァ?」 「こんにちは、誰がいますか?」という意味です。 — たとえば、ナンセンス。 しかし、XNUMX 番目の答えは正解です。

次に、少し難しいフレーズですが、 「チャオ、ドーブ・シ・インコントリアモ・オッジ・ポメリッジョ?」 —または 「こんにちは、今日の午後どこで会いましょうか?」:

そして、さらに肯定的な結果がいくつか返されます。

✅ "hi, where do we see each other this afternoon?"
✅ "hi, where do we meet this afternoon?"
❌ "hi, where here we are this afternoon?"
✅ "hi, where are we meeting this afternoon?"
✅ "hi, where do we meet this afternoon?"

最後に、さらに難しい文をもう XNUMX つ挙げます。 「サレッベは成功しましたか?」 — または「別の日を選んでいたらどうなっていたでしょうか?」:

ここでも、さらにいくつかの優れた回答を返します。

✅ "what would have happened if we had chosen another day?"
✅ "what would have happened if I had chosen another day?"
✅ "what would have happened if they had chosen another day?"
✅ "what would have happened if you had chosen another day?"
❌ "what would have happened if another day was chosen?"

全体として、私たちのモデルは Laura のテストに合格したようです。そして、FiliBERTo と呼ばれる有能なイタリア語モデルが完成しました。

BERT モデルをゼロからトレーニングするこのチュートリアルはこれで終わりです。

データの取得とフォーマットから、言語モデリングを使用した生の BERT モデルのトレーニングまで、多くの分野をカバーしてきました。

この記事を楽しんでいただければ幸いです。 ご質問がございましたら、次の方法でお知らせください。 Twitter または以下のコメントで。 このようなコンテンツをもっと知りたい場合は、に投稿します YouTube のためにペンを持つ時間も見つけています。

読んでくれてありがとう!

 

70%オフ! 自然言語処理: Python のトランスフォーマーを使用した NLP

Transformer モデルは、現代の NLP における事実上の標準です。 彼らは自分たちが最も表現力豊かであることを証明しました…
 

※特に断りのない限り、すべての画像は作者によるものです

 
バイオ: ジェームズ・ブリッグス は、自然言語処理を専門とし、英国のロンドンを拠点とする金融セクターで働くデータサイエンティストです。 彼はまた、フリーランスのメンター、ライター、コンテンツクリエーターでもあります。 あなたは電子メールで著者に連絡することができます(jamescalam94@gmail.com).

元の。 許可を得て転載。

関連する

出典: https://www.kdnuggets.com/2021/08/train-bert-model-scratch.html

タイムスタンプ:

より多くの KDナゲット