transformers について
Hugging Face Transformersは、言語、ビジョン、科学、マルチモーダルのタスクで事前学習済みモデルを利用・訓練するライブラリとスキルガイドです。PipelineやAutoクラスによる統一APIを備えています。
主な機能
- 01事前学習済みモデルのPipeline
- 02AutoModelとAutoTokenizer API
- 03トークン化とバッチ準備
- 04Trainerによるモデル訓練
- 05量子化モデルの読み込み
活用シーン
- 01テキスト分類や要約
- 02タンパク質・化学配列の分析
- 03ドメインデータでのモデル微調整
- 04画像や文書の処理
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ tondevrel/ scientific-agent-skills --skill transformersインストール後、Claude Code で/transformersを入力して読み込まれたか確認します。
詳細
Hugging Face Transformers - 最新のAIモデル
Transformersは、最先端の事前学習済みモデルを簡単にダウンロードして学習するためのAPIとツールを提供します。研究者がゼロから学習する代わりにモデルを再利用できるため、計算コストと二酸化炭素排出量を削減できます。
使用する場面
- 自然言語処理(要約、翻訳、固有表現認識)。
- 科学分野の配列解析(タンパク質の折りたたみ、DNA/RNA配列のモデリング)。
- 化学的性質の予測(SMILESなどの分子文字列を使用)。
- コンピュータービジョン(Vision Transformers - ViT、画像分類)。
- 基盤モデルを使った時系列予測。
- 分野固有の科学文献を使った大規模言語モデル(LLM)のファインチューニング。
- マルチモーダルタスク(ドキュメントAI、視覚的質問応答)。
リファレンスドキュメント
公式ドキュメント:https://huggingface.co/docs/transformers/
モデルハブ:https://huggingface.co/models
検索パターン:pipeline、AutoModel、AutoTokenizer、Trainer、PEFT(パラメーター効率の高いファインチューニング)
基本原則
「Auto」クラス
Hugging Faceでは、「Auto」クラス(AutoModel、AutoTokenizer)を使用します。これらのクラスは、モデル名やパスから適切なアーキテクチャを自動的に推定します。そのため、コードの移植性が高まります。
トークナイズ
データをモデルに入力する前に、数値トークンに変換する必要があります。トークナイザーがこの処理を行い、パディング、切り詰め、[CLS]や[SEP]などの特殊トークンも扱います。
パイプライン
モデルを使う最も簡単な方法です。トークナイズ、モデルの実行、後処理を単一のpipe(data)呼び出しにまとめます。
クイックリファレンス
インストール
pip install transformers datasets tokenizers
# Requires a backend (PyTorch or JAX)
pip install torch
標準的なインポート
from transformers import pipeline, AutoModel, AutoTokenizer, TrainingArguments, Trainer
import torch
基本パターン - 事前学習済みパイプラインの使用
from transformers import pipeline
# 1. Initialize a pipeline (automatically downloads model)
classifier = pipeline("sentiment-analysis", model="distilbert-base-uncased-finetuned-sst-2-english")
# 2. Run inference
results = classifier("The molecular structure of this compound is fascinating.")
print(results)
重要なルール
✅ 推奨事項
- Autoクラスを使用する - 柔軟性を高めるため、常に
AutoTokenizer.from_pretrained()とAutoModel.from_pretrained()を優先してください。 - デバイスを設定する - GPUアクセラレーションを確実に利用するため、パイプラインで
device=0(CUDAの場合)またはdevice="mps"(Macの場合)を明示的に設定してください。 - モデルをキャッシュする - モデルはサイズが大きいため、
HF_HOME環境変数を使ってディスク上のモデル保存先を管理してください。 - 切り詰めを処理する - ほとんどのモデルには最大シーケンス長(通常512)があります。トークナイザーでは常に
truncation=Trueを使用してください。 - Datasetsライブラリを使用する - 学習時には、RAMを使い切らずにデータの読み込みやストリーミングを処理できる
datasetsライブラリを使用してください。 - トークナイザーをモデルと一緒に保存する - ファインチューニング時には、一貫性を保つために、必ずトークナイザーをモデルと一緒に保存してください。
❌ 禁止事項
- ループ内でモデルを読み込まない - モデルの読み込みには数秒かかり、数GBのRAMを消費します。一度読み込んで、繰り返し再利用してください。
- 非公開データをアップロードしない - APIにデータを送信する可能性のあるモデルを使用する際は注意してください(ただし、Transformersはほとんどの場合、ローカルで実行されます)。
- パディングを無視しない - バッチ処理では、バッチ内のすべてのシーケンスの長さをそろえるために、
padding=Trueを設定してください。 - タスクに合わないモデルを使わない - 「BERT」モデルは理解タスク向け、「GPT」は生成タスク向けです。適切なアーキテクチャを使ってください。
アンチパターン(絶対に避ける)
from transformers import AutoModel, AutoTokenizer
# ❌ BAD: Re-initializing the model inside a function called frequently
def get_prediction(text):
model = AutoModel.from_pretrained("bert-base-uncased") # ❌ SLOW & RAM HEAVY
return model(text)
# ✅ GOOD: Load once globally or in a class
model = AutoModel.from_pretrained("bert-base-uncased")
def get_prediction(text):
return model(text)
# ❌ BAD: Manual string splitting for "tokens"
# tokens = text.split(" ") # ❌ Not compatible with model vocabulary
# ✅ GOOD: Use the model's specific tokenizer
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
inputs = tokenizer(text, return_tensors="pt")
# ❌ BAD: Forgetting to move model to GPU
# model = AutoModel.from_pretrained("...")
# output = model(inputs.to("cuda")) # ❌ Error: Model is on CPU!
トークナイズの詳細
モデルに渡すデータの準備
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
texts = ["Science is cool.", "Quantum physics is hard."]
# Batch encoding
inputs = tokenizer(
texts,
padding=True,
truncation=True,
max_length=128,
return_tensors="pt" # Returns PyTorch tensors
)
print(inputs['input_ids'].shape) # (batch_size, seq_len)
Trainer API
簡略化された学習ループ
from transformers import TrainingArguments, Trainer
training_args = TrainingArguments(
output_dir="./results",
num_train_epochs=3,
per_device_train_batch_size=16,
evaluation_strategy="epoch",
logging_dir="./logs",
)
trainer = Trainer(
model=model,
args=training_args,
train_dataset=tokenized_train,
eval_dataset=tokenized_val,
)
# trainer.train()
科学分野での応用
1. タンパク質配列解析(ESM)
# ESM-2 is a powerful protein language model
tokenizer = AutoTokenizer.from_pretrained("facebook/esm2_t6_8M_UR50D")
model = AutoModel.from_pretrained("facebook/esm2_t6_8M_UR50D")
protein_seq = "MAPLRKTYLLG"
inputs = tokenizer(protein_seq, return_tensors="pt")
with torch.no_grad():
outputs = model(**inputs)
# The 'last_hidden_state' represents a "feature vector" for each amino acid
embeddings = outputs.last_hidden_state
2. 化学的性質の予測(SMILES)
# Using a model trained on molecular strings
pipe = pipeline("text-classification", model="seyonec/ChemBERTa-zinc-base-v1")
smiles = "CC(=O)Oc1ccccc1C(=O)O" # Aspirin
result = pipe(smiles)
print(f"Prediction: {result}")
3. 論文を対象とした固有表現認識(NER)
# Extracting genes, proteins, or chemicals from text
ner_pipe = pipeline("ner", model="dslim/bert-base-NER")
text = "The expression of the BRCA1 gene was observed in the sample."
entities = ner_pipe(text)
パフォーマンスと効率性
1. 量子化(bitsandbytes)
精度を下げる(8ビットまたは4ビット)ことで、コンシューマー向けGPU上で大規模モデルを実行します。
from transformers import BitsAndBytesConfig
# Load model in 4-bit precision
quant_config = BitsAndBytesConfig(load_in_4bit=True)
model = AutoModel.from_pretrained("model_name", quantization_config=quant_config)
2. GPUでのpipelineの使用
# 'device=0' targets the first CUDA device
pipe = pipeline("translation_en_to_fr", model="t5-base", device=0)
よくある問題と解決策
GPUでの「メモリ不足」(OOM)
# ❌ Problem: Batch size is too large for GPU RAM
# ✅ Solution:
# 1. Reduce 'per_device_train_batch_size'
# 2. Use 'gradient_accumulation_steps' to keep effective batch size
# 3. Use 'fp16=True' in TrainingArguments
モデルの出力がテンソルではなく辞書になっている
# ❌ Problem: outputs[0] works, but is confusing
# ✅ Solution: Access by name
outputs = model(**inputs)
hidden_states = outputs.last_hidden_state
トークン化の遅さ
# ✅ Solution: Use "Fast" tokenizers (written in Rust, usually default)
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased", use_fast=True)
Hugging Face Transformers は、科学コミュニティに AI を普及させました。世界で最も強力なモデルを統一されたインターフェースで提供することで、研究者はエンジニアリングに費やす時間を減らし、データから知見を発見することにより多くの時間を使えるようになります。