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

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

Классификация намерений - это фундаментальная задача, которую выполняют чат-боты. Классификация намерений - это процесс определения действия, которое пользователь желает выполнить. Например, вы спрашиваете чат-бота: «Пожалуйста, включите новейшую песню U2», тогда бот должен определить, что пользователь хочет «воспроизвести песню». Оттуда модель обычно использует распознавание сущностей, чтобы определить, какую песню играть. В этой статье предлагается возможный способ использования новых технологий для выполнения классификации по намерениям без каких-либо обучающих данных.

Классификация текста Zero-Shot

Классификация текста с нулевым выстрелом Модели преобразователей были предложены в 2019 году в статье «Сравнительный анализ классификации текста с нулевым выстрелом: наборы данных, оценка и подход» [1]. Входные данные модели сформулированы как влечет за собой проблему для каждой метки. Итак, учитывая текст «Я хочу купить яблоко» и этикетку «еда», предпосылкой будет текст, а гипотеза будет примерно такой же, как «Этот текст о еде». Затем модель определяет, влечет ли гипотеза предпосылку или нет. С помощью этой технологии практикующие НЛП могут обучать свои модели на одном наборе данных текстового следования, а затем использовать эту модель для выполнения классификации текста для любой произвольной метки.

Мы будем использовать вторую по популярности модель классификации текста с нулевым выстрелом в сети распространения моделей Hugging Face, созданную Facebook AI. Он был выпущен под лицензией MIT, которая является разрешительной лицензией, о которой вы можете прочитать здесь.

Архитектура

В этой статье предлагается древовидная система классификации намерений, в которой используются простые модели классификации текста. Некоторые намерения можно классифицировать вместе, и поэтому я считаю, что лучше сначала определить категорию намерений, а затем определить конкретные действия, которые необходимо выполнить. Например, категорией может быть «воспроизведение музыки», а затем назначением категории может быть «воспроизведение исполнителя» или «воспроизведение альбома».

Без применения модели нулевого выстрела использование аналогичной древовидной системы может оказаться недоступным по двум основным причинам. Во-первых, вам, вероятно, понадобится одна модель для классификации категории, а затем модель для каждой из категорий. Итак, если вы имеете дело с системой с большим разнообразием возможных действий, это может составить множество моделей. А затем, из-за увеличения количества моделей и категорий, потребуется дополнительное обучение. Таким образом, при использовании этой предлагаемой системы для всей древовидной системы классификации требуется только одна модель.

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

В настоящее время библиотека Transformers от Hugging Face - это лучший способ реализовать модели трансформаторов с нулевой классификацией текста. Таким образом, мы можем загрузить пакет из PyPI со следующей строкой кода.

pip install transformers

Hugging Face создал функцию под названием «pipeline», которая абстрагирует сложности, обычно связанные с использованием моделей Transformer для вывода. Давайте импортируем это.

from transformers import pipeline

Нам нужно предоставить задачу, которую мы хотим выполнить, и название модели классу конвейера. Затем он выведет объект, который мы можем использовать для начала классификации текста. Идентификатор задачи - классификация без выстрелов, а название модели - facebook / bart-large-mnli.

task = "zero-shot-classification"
model = "facebook/bart-large-mnli" 
classifier = pipeline(task, model)

Классификация по первичному намерению

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

primary_labels = ["take note", "play music", "search internet ", "send email", "create reminder"]

Теперь мы можем классифицировать текст по одной из этих меток. Прежде всего, давайте определим текст, связанный с одним из этих ярлыков. Мы воспользуемся примером из категории «воспроизведение музыки».

input_text = "Put on Drake's new album"

Чтобы сделать прогноз, мы можем предоставить нашему классификатору текст и метки, как показано ниже.

classifier_output = classifier(input_text, primary_labels)

Теперь мы можем распечатать результаты.

print(classifier_output["labels"]) print(classifier_output["scores"])

Результат:

[«включить музыку», «принять к сведению», «создать напоминание», «найти в Интернете», «отправить электронное письмо»] [0,8064008355140686, 0,1329479217529297, 0,04738568142056465, 0,010709572583436966, 0,0025559617206454277]

И ярлыки, и баллы отсортированы по наивысшему баллу. Итак, здесь мы видим, что «воспроизведение музыки» было лучшим результатом с результатом 80,64%, что имеет смысл.

Классификация вторичного намерения

Для каждой из основных меток мы должны создать список дополнительных меток, чтобы уточнить, что пользователь намеревается сделать. Продолжая приведенный выше пример, поскольку основным ярлыком является «воспроизведение музыки», ниже приведен список возможных действий.

secondary_labels = ["play artist", "play song", "play album", "play popular", "play new", "play old"]

Как и раньше, мы можем использовать модель классификации текста с нулевым выстрелом для определения предполагаемого действия. Мы предоставим исходный текст и второстепенные метки для моделирования.

secondary_classifier_output = classifier(input_text, secondary_labels) 
print(secondary_classifier_output["labels"]) print(secondary_classifier_output["scores"])

["воспроизвести альбом", "воспроизвести исполнителя", "воспроизвести новое", "воспроизвести популярное", "воспроизвести песню", "воспроизвести старое"]
[0.2994290888309479, 0.23053139448165894, 0.2097683995962143, 0.1356963962316513, 0.1226228997111320639, 0.0019517539 ]

И вот так! Мы просто определяем, какие действия выполнять. Мы видим, что «играть артиста», «проигрывать альбом» и «играть новым» - все они получили высокие баллы. Итак, теперь мы можем использовать распознавание сущностей, чтобы определять исполнителя в тексте, а затем запрашивать новейший альбом исполнителя.

Заключение

В этой статье я предложил способ использования модели классификации текста с нулевым выстрелом, чтобы исключить необходимость в обучающих данных для распознавания намерений. Я также обсудил, как этот метод можно использовать для создания древовидного алгоритма поиска, чтобы уточнить точное действие, которое пользователь хочет выполнить. Надеюсь, эта статья вдохновит вас на создание более мощных чат-ботов!

Пожалуйста, напишите на [email protected], если вы успешно реализуете этот предложенный метод для проекта. Я хотел бы услышать об этом.

использованная литература

[1] В. Инь, Дж. Хэй, Д. Рот, Бенчмаркинг с нулевой классификацией текста: наборы данных, оценка и подход (2019), EMNLP 2019

[2] А. Уильямс, Н. Нангиа, С. Боуман, Корпус задач с широким охватом для понимания предложений посредством вывода (2018), Ассоциация компьютерной лингвистики

Ресурсы:

Код, использованный в этом руководстве

Подобная статья

Если вам понравилась эта статья, то вам может понравиться и статья ниже, в которой описывается мой оригинальный исследовательский проект, который включает модели трансформаторов с нулевой классификацией текста.

Заголовок: Как пометить данные обучения классификации текста - с помощью ИИ Резюме: Используйте модель классификации текста с нулевым выстрелом для маркировки данных обучения. Затем используйте помеченные данные для обучения, чтобы настроить небольшую контролируемую модель, которую будет проще использовать в производственной среде.

Статья

Видео

Первоначально опубликовано на https://www.vennify.ai 8 сентября 2021 г.