技術共有

ダウンストリーム タスクに BERT を使用する方法 - Transformer チュートリアル

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

BERT (Bidirectional Encoder Representations from Transformers) は、2018 年に Google によってリリースされた事前トレーニング済みの言語モデルです。 BERT の出現は、複数言語タスクのパフォーマンスを大幅に向上させるため、自然言語処理の分野における重要なマイルストーンとなります。この記事では、誰もがこの強力なツールをよりよく理解し、適用できるように、ダウンストリーム タスクに BERT を使用する方法を詳しく紹介します。

バートとは何ですか?

BERT は、Transformer アーキテクチャに基づいた言語モデルです。以前の言語モデルとは異なり、BERT は双方向のトレーニング方法を採用しており、コンテキスト情報を同時に考慮できるため、さまざまなタスクで優れたパフォーマンスを発揮します。 BERT の中心的な考え方は、広範な教師なし事前トレーニングと特定のタスクの微調整を通じて優れたパフォーマンスを達成することです。

BERT の事前トレーニングと微調整

BERT のトレーニング プロセスは、事前トレーニングと微調整の 2 つの段階に分かれています。

  1. 事前トレーニング : この段階では、BERT は大量のテキスト データを通じてトレーニングされ、タスクにはマスク言語モデル (MLM) と次文予測 (NSP) が含まれます。 MLM タスクでは、マスクされた単語を予測するモデルが必要ですが、NSP タスクでは、2 つの文が連続しているかどうかを予測するモデルが必要です。

  2. 微調整 : 事前トレーニングが完了したら、特定の下流タスクに従ってモデルを微調整する必要があります。下流タスクには、分類、回帰、質問応答、固有表現認識などがあります。タスク固有のデータセットでさらにトレーニングすることにより、BERT は特定のタスクのニーズにさらに適応できるようになります。

ダウンストリームタスクに BERT を使用する方法

次に、BERT をテキスト分類タスクに使用する方法を、具体的な例を通して紹介します。

ステップ 1: 必要なライブラリをインストールする

まず、Transformers ライブラリをインストールする必要があります。これは、Hugging Face によって提供される非常に人気のあるライブラリであり、事前トレーニングされたさまざまな言語モデルを使用できるようになります。

pip install transformers
pip install torch
  • 1
  • 2
ステップ 2: 事前トレーニングされたモデルとデータをロードする

事前トレーニングされた BERT モデルと対応する Tokenizer を Hugging Face のモデル ライブラリからロードする必要があります。

from transformers import BertTokenizer, BertForSequenceClassification
from transformers import Trainer, TrainingArguments

# 加载预训练的BERT模型和Tokenizer
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = BertForSequenceClassification.from_pretrained('bert-base-uncased', num_labels=2)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
ステップ 3: データを準備する

テキスト分類を実行するには、テキスト データをモデルが受け入れられる入力形式に変換する必要があります。これには通常、テキストのトークン化とトークン ID への変換、およびアテンション マスクの作成が含まれます。

# 示例数据
texts = ["I love programming.", "I hate bugs."]
labels = [1, 0]

# 数据预处理
inputs = tokenizer(texts, return_tensors='pt', padding=True, truncation=True)
inputs['labels'] = torch.tensor(labels)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
ステップ 4: モデルを微調整する

Trainer API を使用すると、モデルを簡単に微調整できます。まず、トレーニング パラメーターを設定し、次にトレーニングのためにトレーナーを呼び出す必要があります。

training_args = TrainingArguments(
    output_dir='./results',          # 输出目录
    num_train_epochs=3,              # 训练的epoch数
    per_device_train_batch_size=4,   # 训练时每个设备的batch size
    per_device_eval_batch_size=8,    # 评估时每个设备的batch size
    warmup_steps=500,                # 预热步数
    weight_decay=0.01,               # 权重衰减
    logging_dir='./logs',            # 日志目录
    logging_steps=10,
)

trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=inputs,
    eval_dataset=inputs
)

# 开始训练
trainer.train()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
ステップ 5: 評価と予測

トレーニングが完了すると、トレーニングされたモデルを評価と予測に使用できます。評価の場合は、検証セットを使用して精度などの指標を計算できます。予測の場合は、新しいテキストを入力して分類結果を取得できます。

# 评估
results = trainer.evaluate()
print(results)

# 预测
test_texts = ["I enjoy learning new things.", "I dislike errors."]
test_inputs = tokenizer(test_texts, return_tensors='pt', padding=True, truncation=True)
predictions = model(**test_inputs)
print(predictions)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

BERT アプリケーションのシナリオ

BERT は、テキスト分類に加えて、他の自然言語処理タスクでも優れたパフォーマンスを発揮します。例えば:

  • 質疑応答システム: BERT を使用すると、コンテキストを理解してユーザーの質問に正確に答えることができる強力な質問と回答システムを構築できます。
  • 固有表現の認識: BERT は、人名、場所名、組織名など、テキスト内のエンティティを識別できます。
  • テキストの生成: BERT は主にタスクを理解するために使用されますが、空白を埋める、書き直すなど、一部の生成タスクにも役立ちます。

要約する

BERT は、強力な事前トレーニング済み言語モデルとして、複数の自然言語処理タスクで顕著な結果を達成しました。事前トレーニングと微調整の 2 段階を通じて、BERT はさまざまな下流タスクに効率的に適応できます。この記事の紹介を通じて、誰もが BERT をよりよく理解して適用し、実際的な問題を解決できることを願っています。

さらにエキサイティングなコンテンツについては、次の点にご注意ください。 ChatGPT中国語ウェブサイト