SetFitABSA Анализ аспектов на основе настроения с использованием SetFit в нескольких примерах

Анализ настроения на основе аспектов с помощью SetFit несколько примеров

SetFitABSA – это эффективная техника обнаружения отношения к определенным аспектам в тексте.

Анализ настроений по аспектам (ABSA) – это задача обнаружения отношения к определенным аспектам в тексте. Например, в предложении “Этот телефон имеет отличный экран, но его батарея слишком мала”, аспектами являются “экран” и “батарея”, а отношение к ним – положительное и отрицательное соответственно.

ABSA широко используется организациями для извлечения ценной информации, анализируя отзывы клиентов относительно аспектов продуктов или услуг в различных областях. Однако разметка тренировочных данных для ABSA является утомительной задачей из-за тонкой (уровень токена) природы ручной идентификации аспектов в обучающих примерах.

Intel Labs и Hugging Face рады представить SetFitABSA, фреймворк для тренировки моделей ABSA с помощью небольшого количества примеров; SetFitABSA конкурентоспособна и даже превосходит генеративные модели, такие как Llama2 и T5, в ситуациях с ограниченным количеством примеров.

По сравнению с методами на основе LLM, SetFitABSA обладает двумя уникальными преимуществами:

🗣 Не требуется запросов: тренировка моделей с использованием LLM с небольшим количеством примеров требует создания запросов, что делает результаты хрупкими, зависит от формулировки и зависит от опыта пользователя. SetFitABSA полностью отказывается от запросов, генерируя богатые векторные представления непосредственно из небольшого количества помеченных текстовых примеров.

🏎 Быстрая тренировка: SetFitABSA требует всего нескольких помеченных обучающих примеров; кроме того, используется простой формат данных для обучения, не требующий специальных инструментов разметки. Это делает процесс разметки данных быстрым и простым.

В этой статье на блоге мы объясним, как работает SetFitABSA и как обучить свои собственные модели с использованием библиотеки SetFit. Погрузимся!

Как это работает?

Трехэтапный процесс обучения SetFitABSA

SetFitABSA состоит из трех этапов. Первый этап извлекает кандидатов на аспекты из текста, второй этап определяет аспекты, классифицируя кандидатов на аспекты или не-аспекты, а последний этап присваивает эмоциональную окраску каждому извлеченному аспекту. Второй и третий этапы основаны на моделях SetFit.

Обучение

1. Извлечение кандидатов на аспекты

В данной работе предполагается, что аспекты, которые обычно являются характеристиками продуктов и услуг, в основном представлены существительными или составными существительными (последовательностями существительных). Мы используем spaCy для токенизации и извлечения существительных/составных существительных из предложений в наборе данных (с небольшим количеством примеров) для тренировки. Поскольку не все извлеченные существительные/составные существительные являются аспектами, мы называем их кандидатами на аспекты.

2. Классификация аспектов/не-аспектов

Теперь, когда у нас есть кандидаты на аспекты, необходимо обучить модель, которая может различать существительные, являющиеся аспектами, и существительные, не являющиеся аспектами. Для этой цели нам нужны тренировочные примеры с метками аспект/не-аспект. Это делается путем рассмотрения аспектов в обучающем наборе как истинных аспектов True, в то время как другие не перекрывающиеся кандидаты на аспекты считаются не-аспектами и поэтому помечаются как False:

  • Обучающее предложение: “Официанты не дружелюбны, но кремовые макароны супер.”
  • Токенизированное предложение: [Официанты, не, дружелюбны, но, кремовые, макароны, супер, .]
  • Извлеченные кандидаты на аспекты: [Официанты, не, дружелюбны, но, кремовые, макароны, супер, .]
  • Реальные метки из обучающего набора, в формате BIO: [B-ASP, O, O, O, O, B-ASP, I-ASP, O]
  • Сгенерированные метки аспектов/не-аспектов: [Официанты, не, дружелюбны, но, кремовые, макароны, супер]

Теперь, когда мы пометили всех кандидатов по аспектам, как мы используем это для обучения модели классификации аспектов кандидата? Другими словами, как мы используем SetFit, фреймворк классификации предложений, чтобы классифицировать отдельные токены? Это трюк: каждый кандидат по аспекту конкатенируется с полным предложением обучения, чтобы создать обучающий экземпляр с использованием следующего шаблона:

aspect_candidate:training_sentence

Применение шаблона к приведенному выше примеру приведет к созданию 3 обучающих экземпляров – два со значением True, представляющих обучающие экземпляры аспектов, и один со значением False, представляющий обучающий экземпляр не-аспекта:

После создания обучающих экземпляров мы готовы использовать мощь SetFit для обучения бинарного классификатора с малым числом обучающих примеров для извлечения аспектов из текстового обзора. Это будет наша первая модель SetFit, улучшенная с помощью настройки.

3. Классификация тональности отзыва

После извлечения аспектов из текста системе необходимо присвоить каждому аспекту тональность (например, позитивную, негативную или нейтральную). Для этой цели мы используем вторую модель SetFit и обучаем ее таким же образом, как и модель извлечения аспектов, как показано в следующем примере:

  • Обучающее предложение: “Официанты не дружелюбны, но сливочные макароны – нечто потрясающее.”
  • Токенизированное предложение: [Официанты, не, дружелюбны, но, сливочные, макароны, – нечто, потрясающее, .]
  • Правильные метки из обучающего набора: [NEG, O, O, O, O, O, POS, POS, O, O, O, O, O, .]

Обратите внимание, что, в отличие от модели извлечения аспектов, мы не включаем не-аспекты в этот набор обучения, поскольку целью является классификация тональности относительно реальных аспектов.

Запуск вывода

Во время вывода тестовое предложение проходит через фазу извлечения кандидатов по аспектам в spaCy, что приводит к созданию тестовых экземпляров с использованием шаблона aspect_candidate:test_sentence. Затем не-аспекты фильтруются с помощью классификатора аспектов/не-аспектов. Наконец, извлеченные аспекты передаются классификатору тональности отзыва, который прогнозирует тональность относительно каждого аспекта.

На практике это означает, что модель может получать обычный текст в качестве ввода и выводить аспекты и их тональность:

Ввод модели:

"их специальные ужины фантастические."

Вывод модели:

[{'span': 'специальные ужины', 'polarity': 'positive'}]

Бенчмаркинг

SetFitABSA был сравнен с последними работами от AWS AI Labs и Salesforce AI Research в области финетюнинга T5 и GPT2 с использованием подсказок. Для более полного представления мы также сравниваем нашу модель с моделью Llama-2-chat, использующей контекстное обучение. Мы используем популярные наборы данных Laptop14 и Restaurant14 ABSA из Semantic Evaluation Challenge 2014 (SemEval14).SetFitABSA оценивается как по промежуточной задаче извлечения терминов аспектов (SB1), так и по полной задаче ABSA, включающей извлечение аспектов и прогнозирование тональности относительно них (SB1+SB2).

Сравнение размеров модели

Обратите внимание, что для задачи SB1 модель SetFitABSA состоит из 110M параметров, для задачи SB2 – из 110M параметров, и для задачи SB1+SB2 SetFitABSA содержит 220M параметров.

Сравнение производительности

Мы видим явное преимущество SetFitABSA, когда количество обучающих экземпляров невелико, несмотря на то, что она в два раза меньше, чем T5, и в три раза меньше, чем GPT2-medium. Даже при сравнении с Llama 2, который в 64 раза больше, производительность на паритете или лучше.

SetFitABSA против GPT2

SetFitABSA против T5

Обратите внимание, что для честного сравнения мы провели сравнения с помощью SetFitABSA именно по наборам данных, использованным различными исходными данными (GPT2, T5 и т. д.).

SetFitABSA против Llama2

Мы замечаем, что увеличение количества примеров тренировочных данных для Llama2 не привело к улучшению производительности. Это явление уже было показано для ChatGPT, и мы считаем, что его следует дополнительно исследовать.

Обучение собственной модели

SetFitABSA является частью фреймворка SetFit. Чтобы обучить модель ABSA, начните с установки setfit с включенным параметром absa:

python -m pip install -U "setfit[absa]"

Кроме того, необходимо установить модель spaCy en_core_web_lg:

python -m spacy download en_core_web_lg

Затем приступаем к подготовке тренировочного набора данных. Формат тренировочного набора данных представляет собой Dataset с колонками text, span, label, ordinal:

  • text: Полное предложение или текст, содержащий аспекты.
  • span: Аспект из полного предложения. Может состоять из нескольких слов. Например: “еда”.
  • label: (Полярность) метка, соответствующая аспекту. Например: “положительная”. Имена меток могут быть выбраны произвольно при маркировании собранных тренировочных данных.
  • ordinal: Если аспект встречается несколько раз в тексте, то это значение представляет индекс этих вхождений. Обычно это просто 0, так как каждый аспект обычно встречается только один раз во входном тексте.

Например, тренировочный текст “Ресторан с прекрасной едой, но ужасным сервисом, который я когда-либо видел” содержит два аспекта, поэтому мы добавим две строки в таблицу тренировочного набора данных:

После того, как у нас есть готовый тренировочный набор данных, мы можем создать тренер ABSA и выполнить тренировку. Модели SetFit обычно обучаются довольно эффективно, но так как SetFitABSA включает две модели, обученных последовательно, рекомендуется использовать GPU для тренировки, чтобы сократить время обучения. Например, следующий тренировочный скрипт обучает полную модель SetFitABSA примерно за 10 минут с использованием бесплатного GPU Google Colab T4.

from datasets import load_datasetfrom setfit import AbsaTrainer, AbsaModel# Создание тренировочного набора данных, как указано выше# Для удобства мы будем использовать уже подготовленный набор данныхtrain_dataset = load_dataset("tomaarsen/setfit-absa-semeval-restaurants", split="train[:128]")# Создание модели с выбранным представлением предложений из Hubmodel = AbsaModel.from_pretrained("sentence-transformers/paraphrase-mpnet-base-v2")# Создание тренератренер = AbsaTrainer(model, train_dataset=train_dataset)# Выполнение тренировки:trainer.train()

Вот и все! Мы обучили модель ABSA для определенной области. Можем сохранить обученную модель на диск или загрузить ее в Hugging Face hub. Имейте в виду, что модель содержит две подмодели, поэтому каждой из них присваивается свой собственный путь:

model.save_pretrained(    "models/setfit-absa-model-aspect",     "models/setfit-absa-model-polarity")# илиmodel.push_to_hub(    "tomaarsen/setfit-absa-paraphrase-mpnet-base-v2-restaurants-aspect",    "tomaarsen/setfit-absa-paraphrase-mpnet-base-v2-restaurants-polarity")

Теперь мы можем использовать нашу обученную модель для вывода. Начнем с загрузки модели:

from setfit import AbsaModelmodel = AbsaModel.from_pretrained(    "tomaarsen/setfit-absa-paraphrase-mpnet-base-v2-restaurants-aspect",    "tomaarsen/setfit-absa-paraphrase-mpnet-base-v2-restaurants-polarity")

Затем мы используем API predict для выполнения вывода. Входным является список строк, каждая из которых представляет собой текстовый обзор:

preds = model.predict([    "Лучшая пицца за пределами Италии и очень вкусная.",    "Разнообразие блюд замечательное, а цены абсолютно справедливые.",    "К сожалению, вы должны ожидать некоторого времени ожидания и получить заметку с номером ожидания, если очень много людей."])print(preds)# [#     [{'span': 'pizza', 'polarity': 'positive'}],#     [{'span': 'food variations', 'polarity': 'positive'}, {'span': 'prices', 'polarity': 'positive'}],#     [{'span': 'waiting time', 'polarity': 'neutral'}, {'span': 'waiting number', 'polarity': 'neutral'}]# ]

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

Ссылки

  • Maria Pontiki, Dimitris Galanis, John Pavlopoulos, Harris Papageorgiou, Ion Androutsopoulos, and Suresh Manandhar. 2014. SemEval-2014 task 4: Анализ отзывов на основе аспектов. В Программах 8-го Международного семинара по семантической оценке (SemEval 2014), страницы 27-35.
  • Siddharth Varia, Shuai Wang, Kishaloy Halder, Robert Vacareanu, Miguel Ballesteros, Yassine Benajiba, Neha Anna John, Rishita Anubhai, Smaranda Muresan, Dan Roth, 2023 “Настройка инструкций для анализа отзывов на основе аспектов при ограниченных данных”. https://arxiv.org/abs/2210.06629
  • Ehsan Hosseini-Asl, Wenhao Liu, Caiming Xiong, 2022. “Генеративная языковая модель для анализа отзывов на основе аспектов с помощью ограниченных данных”. https://arxiv.org/abs/2204.05356
  • Lewis Tunstall, Nils Reimers, Unso Eun Seo Jo, Luke Bates, Daniel Korat, Moshe Wasserblat, Oren Pereg, 2022. “Эффективное обучение при нехватке данных”. https://arxiv.org/abs/2209.11055