0Pricing
Learn AI with Python · レッスン

BERTによるテキスト分類

HuggingFace transformers、AutoTokenizer、AutoModelForSequenceClassification、ファインチューニングについて学習します。

「BERTによるテキスト分類」はCoddyKit上の無料Learn AI with Pythonレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLearn AI with Python学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Learn AI with Pythonコースには全4レッスンが含まれています。

静的埋め込みの限界

Word2Vec と GloVe は、各単語に1つの固定ベクトルを割り当てます。しかし、"bank" は "river bank" と "savings bank" で意味が異なります。文脈対応モデルである BERT などは、この問題を解決します。

BERT とは

BERT は、文全体を一度に読み取り、文脈を考慮した埋め込みを生成するトランスフォーマーモデルです。巨大なテキストで事前学習されており、分類などのタスク向けにファインチューニングできます。

Hugging Face の transformers ライブラリ

transformers ライブラリを使うと、BERT や数千種類の事前学習済みモデルに簡単にアクセスできます。トークナイザーとモデルに一貫したクラスが用意されています。

from transformers import AutoTokenizer, AutoModelForSequenceClassification

name = "distilbert-base-uncased-finetuned-sst-2-english"
tokenizer = AutoTokenizer.from_pretrained(name)
model = AutoModelForSequenceClassification.from_pretrained(name)

AutoTokenizer

AutoTokenizer はモデルに適したトークナイザーを読み込みます。テキストをサブワードトークンに分割し、モデルが必要とする ID に変換します。

from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
print(tokenizer.tokenize("unbelievable"))
# subwords like ["un", "##bel", "##ievable"]

AutoModelForSequenceClassification

AutoModelForSequenceClassification は、上部に分類ヘッドを備えた BERT を読み込み、シーケンス全体についてクラスごとに1つのスコアを出力します。

from transformers import AutoModelForSequenceClassification

model = AutoModelForSequenceClassification.from_pretrained(
    "distilbert-base-uncased-finetuned-sst-2-english"
)

入力のトークン化

truncation、padding、return_tensors を指定してトークナイザーをテキストに適用し、モデルで使用できるテンソルを取得します。切り詰め処理は長い入力を制限し、パディングはバッチ内の長さを揃えます。

inputs = tokenizer(
    "This movie was fantastic!",
    truncation=True,
    padding=True,
    return_tensors="pt",
)
print(inputs["input_ids"].shape)

特殊トークン

BERT は特殊トークンを自動的に追加します。先頭の [CLS](その隠れ状態がシーケンスを要約します)と、文と文の間または末尾に置かれる [SEP] です。分類器は [CLS] 表現を読み取ります。

モデルの実行

トークン化した入力をモデルに渡すと、正規化されていない生のクラススコアである logits を取得できます。

import torch

with torch.no_grad():
    outputs = model(**inputs)
logits = outputs.logits
print(logits)

Logits から予測へ

logits に softmax を適用して確率を求め、次に argmax で予測されたクラスのインデックスを取得します。そのインデックスをラベルに対応付けます。

import torch

probs = torch.softmax(logits, dim=-1)
pred = torch.argmax(probs, dim=-1).item()
print(model.config.id2label[pred])

タスク向けのファインチューニング

カスタムデータセットでは、ラベル付きの例を使って分類ヘッド(必要に応じてモデル全体も)を学習し、BERT をファインチューニングします。Trainer API が学習ループを処理します。

from transformers import Trainer, TrainingArguments

args = TrainingArguments(output_dir="out", num_train_epochs=3)
trainer = Trainer(model=model, args=args, train_dataset=train_ds)
trainer.train()

pipeline によるショートカット

すばやく推論したい場合は、pipeline ヘルパーを使うと、トークン化、モデルの実行、デコードを1回の呼び出しにまとめられます。プロトタイピングに最適です。

from transformers import pipeline

clf = pipeline("sentiment-analysis")
print(clf("I love this product!"))
# [{"label": "POSITIVE", "score": 0.99...}]

理解度チェック

BERT に関する知識を確認しましょう。

まとめ

まとめ: BERT はトランスフォーマーによって文脈を考慮した埋め込みを生成します。AutoTokenizer で truncation/padding/return_tensors を使ってトークン化し、AutoModelForSequenceClassification で logits を取得します。logits に softmax を適用してから argmax を使って変換します。Trainer でファインチューニングするか、pipeline ですばやくプロトタイプを作成します。

よくある質問

「BERTによるテキスト分類」レッスンは無料ですか?

はい。「BERTによるテキスト分類」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Learn AI with Pythonコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Learn AI with Pythonコースには全4レッスンが含まれています。

「BERTによるテキスト分類」で何を学びますか?

HuggingFace transformers、AutoTokenizer、AutoModelForSequenceClassification、ファインチューニングについて学習します。 ブラウザで直接実行するハンズオンコードでLearn AI with Pythonを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Learn AI with Pythonを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのLearn AI with Pythonは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「BERTによるテキスト分類」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このLearn AI with Pythonレッスンでコードを書いて実行できますか?

はい。すべてのLearn AI with Pythonレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Word2Vec:Skip-gramとCBOW
  2. GloVeとFastTextの埋め込み
  3. BERTによるテキスト分類
  4. 意味的類似度と文埋め込み
← Learn AI with Pythonに戻る