Есть ли у вас опыт работы с библиотеками Hugging Face?

«Есть ли у вас опыт работы с библиотеками Hugging Face?» — вопрос из категории NLP и трансформеры, который задают на 26% собеседований Data Scientist / ML Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, я активно использую экосистему Hugging Face (transformers, datasets, accelerate) для решения NLP-задач, от прототипирования до промышленного внедрения моделей.

Пример пайплайна для тонкой настройки (fine-tuning) модели для классификации текста на собственном датасете:

from transformers import (
    AutoTokenizer,
    AutoModelForSequenceClassification,
    Trainer,
    TrainingArguments
)
from datasets import load_dataset, ClassLabel
import evaluate
import numpy as np

# 1. Загрузка и подготовка датасета
# Предположим, у нас есть CSV с колонками 'text' и 'label'
dataset = load_dataset('csv', data_files={'train': 'reviews_train.csv', 'test': 'reviews_test.csv'})

# 2. Загрузка токенизатора и предобработка
tokenizer = AutoTokenizer.from_pretrained("distilbert-base-uncased")

def tokenize_function(examples):
    return tokenizer(examples["text"], padding="max_length", truncation=True)

tokenized_datasets = dataset.map(tokenize_function, batched=True)

# 3. Загрузка предобученной модели
model = AutoModelForSequenceClassification.from_pretrained(
    "distilbert-base-uncased",
    num_labels=2  # положительный/отрицательный отзыв
)

# 4. Настройка метрики для оценки
accuracy_metric = evaluate.load("accuracy")
def compute_metrics(eval_pred):
    logits, labels = eval_pred
    predictions = np.argmax(logits, axis=-1)
    return accuracy_metric.compute(predictions=predictions, references=labels)

# 5. Конфигурация обучения
training_args = TrainingArguments(
    output_dir="./results",
    evaluation_strategy="epoch",
    learning_rate=2e-5,
    per_device_train_batch_size=16,
    per_device_eval_batch_size=16,
    num_train_epochs=3,
    weight_decay=0.01,
    save_strategy="epoch",
    load_best_model_at_end=True,
)

# 6. Запуск обучения
trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=tokenized_datasets["train"],
    eval_dataset=tokenized_datasets["test"],
    compute_metrics=compute_metrics,
)
trainer.train()

# 7. Инференс после обучения
from transformers import pipeline
classifier = pipeline("text-classification", model="./results/checkpoint-best", tokenizer=tokenizer)
result = classifier("This product exceeded all my expectations!")
print(result)  # [{'label': 'LABEL_1', 'score': 0.998}]

Мой опыт включает:

  • Fine-tuning моделей: Адаптация BERT, RoBERTa, DeBERTa для задач классификации, NER и извлечения ответов (Question Answering).
  • Работа с датасетами: Использование datasets для загрузки, фильтрации, потоковой обработки больших данных и создания кастомных DataCollator.
  • Оптимизация: Применение accelerate для распределенного обучения, использование смешанной точности (FP16) и методов ускорения инференса, таких как ONNX Runtime.
  • Интеграция: Развертывание обученных моделей через FastAPI-сервисы или использование optimum для работы на специфичном железе.