Классификация текста с BERT
Трансформеры HuggingFace, AutoTokenizer, AutoModelForSequenceClassification, дообучение
«Классификация текста с BERT» — бесплатный урок Learn AI with Python на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Learn AI with Python, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Learn AI with Python содержит 4 уроков всего.
Ограничения статических векторных представлений
Word2Vec и GloVe задают для каждого слова один фиксированный вектор. Но слово «bank» означает разное в выражениях «берег реки» и «сберегательный банк». Контекстные модели, такие как BERT, решают эту проблему.
Что такое BERT
BERT — это модель-трансформер, которая одновременно читает всё предложение и создаёт контекстные векторные представления. Предварительно обученная на огромном объёме текста, она может дообучаться для таких задач, как классификация.
Библиотека «Трансформеры» от «Хаггинг-Фейс»
Библиотека 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 загружает подходящий токенизатор для модели. Он разделяет текст на субтокены и сопоставляет их с идентификаторами, которые ожидает модель.
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
print(tokenizer.tokenize("unbelievable"))
# subwords like ["un", "##bel", "##ievable"]AutoModelForSequenceClassification
AutoModelForSequenceClassification загружает BERT с расположенной сверху классификационной головкой, которая выдаёт одну оценку для каждого класса всей последовательности.
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].
Запуск модели
Передайте токенизированные входные данные модели, чтобы получить логиты — исходные, ненормализованные оценки классов.
import torch
with torch.no_grad():
outputs = model(**inputs)
logits = outputs.logits
print(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 управляет циклом обучения.
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 объединяет токенизацию, запуск модели и декодирование в один вызов, что идеально подходит для создания прототипов.
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 — для получения логитов. Преобразуйте логиты с помощью softmax, а затем argmax. Выполняйте дообучение с помощью Trainer или быстро создавайте прототипы с помощью pipeline.
Часто задаваемые вопросы
Урок «Классификация текста с BERT» бесплатный?
Да — полный текст урока «Классификация текста с BERT» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Learn AI with Python, подпишись на CoddyKit PRO. Курс Learn AI with Python содержит 4 уроков всего.
Чему я научусь в уроке «Классификация текста с BERT»?
Трансформеры HuggingFace, AutoTokenizer, AutoModelForSequenceClassification, дообучение Ты практикуешь Learn AI with Python с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Learn AI with Python?
Предыдущий опыт не требуется. Learn AI with Python на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Классификация текста с BERT»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Learn AI with Python?
Да. Каждый урок Learn AI with Python включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Word2Vec: Skip-gram и CBOW
- Эмбеддинги GloVe и FastText
- Классификация текста с BERT
- Семантическое сходство и эмбеддинги предложений