Chuyển đến nội dung chính

レッスン 12: ハグフェイスのエコシステム — 現代の NLP 実践

Transformers ライブラリの詳細: パイプライン、AutoModel、AutoTokenizer。モデル ハブ: 事前トレーニングされたモデルを検索して使用します。データセットライブラリ。高速微調整のためのトレーナー API。効率的なチューニングのためのPEFT/LoRA。マルチ GPU の高速化。デモ用のスペース。

🧠 AI と ML — レッスン 11 レッスン 12: ハグフェイス エコシステム — 実践 最新の NLP

NLP の基礎から上級まで: 自然言語処理をマスターする

パート 4: 事前トレーニングされた言語モデル — BERT、GPT、その他

xdev.asia

はじめに

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-NERNlpHUST/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 問題、テキスト分類と感情分析。