はじめに
Hugging Face は「AI 用 GitHub」です。すべての NLP/AI エンジニアが知っておく必要があるモデル、データセット、ツールを共有するためのプラットフォームです。図書館 transformers は世界で最も人気のある NLP 練習ツールです。
1. トランスフォーマー ライブラリ — クイック スタート
パイプライン API (5 行のコード)
from transformers import pipeline
# Sentiment Analysis
classifier = pipeline("sentiment-analysis")
result = classifier("NLP is amazing!")
print(result) # [{'label': 'POSITIVE', 'score': 0.9998}]
# NER
ner = pipeline("ner", grouped_entities=True)
# Question Answering
qa = pipeline("question-answering")
# Summarization
summarizer = pipeline("summarization")
# Translation
translator = pipeline("translation_en_to_vi", model="Helsinki-NLP/opus-mt-en-vi")
# Zero-shot Classification
zero_shot = pipeline("zero-shot-classification")
result = zero_shot(
"NLP giúp máy tính hiểu ngôn ngữ",
candidate_labels=["technology", "sports", "politics"],
)
print(result) # technology: 0.95
AutoModel と AutoTokenizer
from transformers import AutoTokenizer, AutoModelForSequenceClassification
model_name = "vinai/phobert-base-v2"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(
model_name, num_labels=3
)
# Tokenize
inputs = tokenizer("NLP rất thú vị!", return_tensors="pt", padding=True)
print(inputs.keys()) # dict_keys(['input_ids', 'attention_mask'])
# Forward pass
outputs = model(**inputs)
print(outputs.logits.shape) # torch.Size([1, 3])
2. データセット ライブラリ
from datasets import load_dataset
# Load từ Hub
dataset = load_dataset("imdb")
print(dataset)
# DatasetDict({
# train: Dataset({features: ['text', 'label'], num_rows: 25000})
# test: Dataset({features: ['text', 'label'], num_rows: 25000})
# })
# Load CSV/JSON local
dataset = load_dataset("csv", data_files="data.csv")
# Map (preprocessing)
def tokenize_fn(examples):
return tokenizer(examples["text"], truncation=True, padding="max_length")
tokenized = dataset.map(tokenize_fn, batched=True)
# Filter
short = dataset.filter(lambda x: len(x["text"]) < 200)
# Train/test split
split = dataset["train"].train_test_split(test_size=0.2)
3. トレーナー API — 高速微調整
from transformers import Trainer, TrainingArguments
training_args = TrainingArguments(
output_dir="./results",
num_train_epochs=3,
per_device_train_batch_size=16,
per_device_eval_batch_size=32,
learning_rate=2e-5,
weight_decay=0.01,
evaluation_strategy="epoch",
save_strategy="epoch",
load_best_model_at_end=True,
logging_dir="./logs",
fp16=True, # Mixed precision
)
trainer = Trainer(
model=model,
args=training_args,
train_dataset=tokenized["train"],
eval_dataset=tokenized["test"],
tokenizer=tokenizer,
)
# Train!
trainer.train()
# Evaluate
results = trainer.evaluate()
print(results)
# Save
model.save_pretrained("./my-model")
tokenizer.save_pretrained("./my-model")
4. PEFT と LoRA — 効率的な微調整
from peft import LoraConfig, get_peft_model, TaskType
# Cấu hình LoRA
lora_config = LoraConfig(
task_type=TaskType.SEQ_CLS,
r=8, # Rank
lora_alpha=16,
lora_dropout=0.1,
target_modules=["query", "value"],
)
# Wrap model với LoRA
model = get_peft_model(model, lora_config)
model.print_trainable_parameters()
# trainable params: 294,912 || all params: 109,482,240 || trainable%: 0.27%
# → Chỉ train 0.27% parameters!
5. モデル ハブ — 事前トレーニングされたモデルを検索する
| タスク | 人気モデル | ベトナム語 |
|---|---|---|
| 分類 | バートベース、ロバータラージ | vinai/phobert-base-v2 |
| ナー | dslim/bert-base-NER | NlpHUST/vibert4news-base-cased |
| QA | ディープセット/ロバータベース-スクワッド2 | — |
| 翻訳 | ヘルシンキ-NLP/opus-mt-* | VietAI/envit5-翻訳 |
| 埋め込み | センテンストランスフォーマー/* | BAAI/bge-m3 |
概要
| コンポーネント | 機能 |
|---|---|
pipeline() | クイック推論、5 行のコード |
AutoModel | 事前トレーニングされたモデルをロードする |
datasets | データセットのロード、処理、キャッシュ |
Trainer | ベストプラクティスを組み込んだ微調整 |
PEFT/LoRA | 効率的な微調整 (0.1 ~ 1% パラメータ) |
次の記事
レッスン 13: テキスト分類と感情分析 — 最も一般的に適用される NLP 問題、テキスト分類と感情分析。