Демонстрация кода для классификации текста с двумя популярными предварительно обученными моделями обнимающихся лиц

Введение

Лично я считаю, что все причудливые исследования машинного обучения и передовые алгоритмы искусственного интеллекта имеют очень минимальную ценность, если не нулевую, до той даты, когда их можно будет применять к реальным проектам, не требуя от пользователей безумного количества ресурсов и чрезмерных знаний в предметной области. И Hugging Face строит мост. Hugging Face является домом для тысяч предварительно обученных моделей, которые внесли большой вклад в демократизацию искусственного интеллекта с помощью открытого исходного кода и открытой науки.

Сегодня я хочу показать вам сквозную демонстрацию кода для сравнения двух самых популярных предварительно обученных моделей путем проведения анализа классификации текста с несколькими метками.

Первая модель — SentenceTransformers (SBERT). На самом деле это набор предварительно обученных моделей для различных задач, созданных командой из Лаборатории обработки вездесущих знаний в Техническом университете Дармштадта. Я использовал SBERT несколько раз в своих предыдущих проектах. У них даже есть библиотека Python, которая дает вам возможность не использовать Hugging Face API и платформу Pytorch. Загляните здесь.

Вторая модель — Data2vec, мощная предварительно обученная модель, предлагаемая командой ИИ из Meta (Facebook). Это самоконтролируемая структура (модель учителя → модель ученика), предназначенная для кодирования текста, аудио и изображений. Если вам интересно, как он развивается, вы можете найти оригинальную статью здесь.

Данные

Для данных я использую известный набор текстовых данных с открытым исходным кодом: BBC News Group (Его лицензия находится здесь: https://opendatacommons.org/licenses/dbcl/1-0/). Вы можете либо загрузить данные, выполнив следующие действия:

Или вы можете найти предварительно обработанную версию CSV в моем репозитории GitHub: https://github.com/jinhangjiang/Medium_Demo/blob/main/Data2vec_vs_SBERT/bbc-text.csv

Демонстрация кода

Шаг 1: Установите и импортируйте нужный нам пакет

Шаг 2: Разделите данные для проверки

Обратите внимание на одну деталь: я использую файл CSV вместо импорта данных из sklearn. Поэтому я задал входные данные в виде списка (X.tolist()). Без этого модель позже будет выдавать ошибки.

Шаг 3. Разметьте текст

Вот некоторые уточнения:

имя_модели: этот параметр должен быть строкой имени предварительно обученной модели, которую вы хотите использовать. Вы можете найти доступные модели: https://huggingface.co/models

max_length: этот параметр напрямую влияет на время обучения и скорость обучения. Вы хотели бы указать длину текста, который вы хотите, чтобы модель обрабатывала для каждого документа, если каждый документ очень длинный.

padding: установите для этого параметра значение True, если вы указали max_length. Заполнение самой длинной последовательностью в пакете (или без заполнения, если предоставлена ​​только одна последовательность)

Шаг 4. Преобразование вложений в набор данных torch

Шаг 5: вызовите модель

AutoModelForSequenceClassification: «AutoModel…» поможет вам автоматически определить правильную модель для использования. До сих пор это работает нормально для меня. «…ForSequenceClassification» специально используется для задач классификации.

to("cuda"): если на вашем компьютере доступен графический процессор, вы можете добавить эту функцию в конец, чтобы использовать мощность графического процессора. Без этой функции время обучения обычно значительно увеличивается.

Шаг 6. Определите показатели оценки

metrics_name: это должна быть строка. Для нашей демонстрации я выбрал f1 в качестве метрики оценки. Вы можете найти доступные параметры здесь: https://github.com/huggingface/datasets/tree/master/metrics

среднее: я передал этот параметр, поскольку использую показатель f1 для оценки проблемы классификации с несколькими метками. Это НЕ универсальный параметр.

Шаг 7: Точная настройка предварительно обученной модели

Шаг 8. Сохраните доработанную модель, чтобы ее можно было использовать повторно.

Если вы хотите использовать свою точно настроенную модель, все, что вам нужно сделать, это заменить строку имени модели на шаге 3 и шаге 5 на путь к вашей собственной модели.

У вас есть доступ к полному коду скрипта здесь: https://github.com/jinhangjiang/Medium_Demo/blob/main/Data2vec_vs_SBERT/Data2vec_vs_SBERT_512.ipynb

Полученные результаты

Для SBERT (max_length = 512, эпоха = 5):

Лучший результат f1: 0,985034

Средний балл f1: 0,959524

Время стены: 15 мин 36 с

Память увеличена: 5,0294 ГБ

Для Data2vec (max_length = 512, эпоха = 5):

Лучший результат f1: 0,976871

Средний балл f1: 0,957822

Время стены: 15 мин 8 с

Память увеличена: 0,3213 ГБ

Каждый раз, когда вы запускаете модель, результаты могут немного отличаться. В целом, после 5 попыток я могу сделать вывод, что SBERT имеет немного лучшую производительность с точки зрения лучшего результата f1, в то время как Data2vec использует намного меньше памяти. Средние результаты f1 для обеих моделей очень близки.

После прочтения сегодняшней демонстрации у вас должны быть следующие выводы:

  1. Как токенизировать ваши текстовые данные с помощью предварительно обученных моделей
  2. Как правильно преобразовать ваши данные в набор данных факела
  3. Как использовать и настраивать предварительно обученные модели
  4. Как сохранить модель для будущего использования
  5. Сравнение производительности между Data2vec и SBERT

Пожалуйста, свяжитесь со мной в LinkedIn.

Ссылка

Баевский и др. (2022). data2vec: Общая основа для самостоятельного обучения речи, зрению и языку. https://arxiv.org/pdf/2202.03555.pdf

Обнимающее лицо. (2022). Текстовая классификация. https://huggingface.co/docs/transformers/tasks/sequence_classification

Реймерс, Н. и Гуревич, И. (2019). Предложение-BERT: встраивание предложений с использованием сиамских сетей BERT. https://arxiv.org/pdf/1908.10084.pdf