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フィードバックを取得できます。ローカル設定は不要です。