Этот проект представляет собой комплексное исследование того, как передовые методы глубокого обучения могут помочь нам классифицировать цель запроса, заданного клиентом банка, без вмешательства человека. Этот сценарий может быть полезен чат-боту, чтобы решить, каким должно быть ответное сообщение для клиента после понимания цели сообщения.
Оглавление:
- Бизнес-проблема
- Потребность в науке о данных
- Источник данных
- Исследовательский анализ данных
- Решение для первого разреза с использованием GloVe
- Модели глубокого обучения с использованием современных технологий
- Сравнение моделей
- Развертывание с помощью Streamlit
- Вывод
- Будущая работа
- Профиль
- использованная литература
1. Бизнес-проблема
Бизнес-задача, которую мы рассматриваем, представляет собой текстовый запрос клиента банка в текстовом формате, который мы должны отнести к одному из классов намерений. Кроме того, нам нужно получить модель, которая дает высокую производительность в этой задаче и имеет небольшой вес.
2. Потребность в науке о данных
Зачем нам нужна наука о данных для решения этой проблемы?
- Существующий подход для этого состоит в том, чтобы использовать человека для получения намерения, что и делает персонал колл-центра.
- Но для простых запросов, где нам просто нужно дать выбранный ответ, могут быть полезны машины, которые скорее будут раздражать сотрудников колл-центра каждый раз, когда они могут отвечать на запросы высокого уровня.
- Также машина может быть доступна 24 x 7.
Какую метрику использовать для проверки производительности нашей модели?
- Банковские данные имеют 77 категорий намерений
- Данные несбалансированы, потому что количество выборок для этих 77 классов отличается в данных поезда.
- Точность нельзя использовать для несбалансированных данных, поэтому в нашем случае это бесполезно.
- Точность расскажет обо всех точках, которые предсказаны как положительные, сколько из них на самом деле, что важно в нашем случае.
- Отзыв важен, поскольку он расскажет обо всех точках, которые на самом деле являются положительными, сколько из них предсказано как положительное.
- Показатель F1 представляет собой среднее геометрическое точности, полноты и точности и является высоким, если полнота и точность высоки.
- Отзыв и Точность должны быть высокими в нашем сценарии, мы можем рассматривать оценку F1 в качестве нашей метрики.
- Поскольку наши данные несбалансированы, мы собираемся учитывать взвешенную оценку F1, при расчете оценки F1 она будет учитывать вес по классам.
3. Источник данных
Скрипты данных были предоставлены компанией Poly-AI, они содержат текст столбцов и категорию, к которой принадлежит текст.
4. Исследовательский анализ данных
Этот график поможет нам определить, какой должна быть максимальная длина входного предложения, данного модели, в основном учитывая максимальную длину, на которую приходится 90–95% предложений.
Облака слов
я. Категория: card_payment_fee_charged
Вывод
- Намерение card_payment_fee_charged обычно распознается по словам «комиссия», «взимается», «дополнительно».
- Чаще всего это происходит при использовании кредитной или дебетовой карты.
II. Категория: потерянная_или_украденная_карта
Вывод
- Намерение «потерянная_или_украденная_карта» обычно распознается по словам «карта», «потерял», «украл», «помощь».
III. Категория: неправильное_количество_наличных_получено
Вывод
- Намерение «неверная_сумма_полученных_наличных» обычно возникает, когда банкомат не работает должным образом.
- Распространенными словами являются «банкомат», «наличные», «деньги».
5. Решение для первого разреза
В качестве первого решения мы попытались использовать алгоритм GloVe.
GloVe — это алгоритм обучения без учителя для получения векторных представлений слов. Обучение выполняется на агрегированной глобальной статистике совпадения слов из корпуса, и полученные представления демонстрируют интересные линейные подструктуры векторного пространства слов.
Создание конвейера данных:
Архитектура модели:
Пробовали некоторые комбинации,
Наименьшее переоснащение было замечено в модели 4 Dropout 0,5 с терпением к ранней остановке 5 Train F1 с оценкой 0,8793 и Validation F1 с оценкой 0,8755
6. Модели глубокого обучения с использованием современных методов
- BERT (представление двунаправленного кодировщика от трансформаторов):
Обратитесь к этому сайту для получения дополнительной информации о BERT,
Мы использовали предварительно обученную модель Берта (bert_en_wwm_cased_L-24_H-1024_A-16), чтобы получить вложения:
Архитектура модели:
Окончательные результаты с моделью BERT, оценка f1 обучения 0,8452 и оценка f1 проверки 0,7802. Кажется, что модель BERT переопределяла данные, а размер модели был очень большим. Модель BERT не смогла работать лучше, чем GloVe.
2. Универсальный кодировщик предложений:
Универсальный кодировщик предложений — это модель двойного кодировщика, которая кодирует текст в многомерные векторы, которые можно использовать для классификации текста, семантического подобия, кластеризации и других задач естественного языка.
Архитектура модели:
Окончательные результаты с моделью ЕГЭ, оценка f1 обучения 0,9350 и оценка f1 проверки 0,9314. Это были наилучшие результаты по сравнению с моделями GloVe и BERT. У него было наименьшее переоснащение, а размер модели был меньше по сравнению с GloVe и BERT.
3. ConveRT (разговорные репрезентации трансформеров):
ConveRT — это кодировщик двойных предложений , он эффективен, доступен по цене и быстро обучаем, а размер модели ConveRT меньше по сравнению с моделью BERT. ConveRT, согласно компании PolyAI, разработавшей его, был обучен разговорным данным Reddit (контекст, ответ). Но, к сожалению, ConveRT не имеет реализации в Tensorflow. Поэтому я попытался создать ConveRT с нуля в TensorFlow и обучить его разговорным данным Reddit.
Архитектура модели;
я. Позиционное кодирование
Пожалуйста, обратитесь к этому блогу для подробного понимания позиционного кодирования,
II. Уровень кодировщика
III. Полный кодировщик со слоями кодировщика
IV. Окончательная модель ConveRT
Используемая реализация потерь:
я. Потери на бумаге ConveRT
S(xi,yi)= Сходство между контекстом и соответствующим ответом
S(xi,yj)= Сходство между контекстом и другими ответами
II. Тройная потеря
Потеря триплетов — это функция потери для алгоритмов машинного обучения, в которой исходные (привязочные) входные данные сравниваются с положительными (правдивыми) входными данными и отрицательными (ложными) входными данными.
тройная потеря = максимум (положительное расстояние + отрицательное расстояние + запас, 0)
При обучении с данными Reddit проблема заключалась в том, что потеря не обновлялась. Мы попробовали такие варианты, как переключение потерь, изменение размера пакета, изменение максимальной длины ввода, проверка гистограмм, если они обновляются, но мы не смогли найти выход, также у нас были ограничения по времени, поэтому мы приостановили наше исследование в ConveRT. раздел. Но я хочу возобновить его в ближайшее время.
7. Сравнение моделей
8. Развертывание с помощью Streamlit
Окончательное развертывание модели, созданной с использованием библиотеки Stream-lit и развернутой в Stream-lit.
Streamlit – это библиотека Python с открытым исходным кодом, которая позволяет легко создавать красивые настраиваемые веб-приложения для машинного обучения и обработки данных и делиться ими.
Ссылка на веб-приложение:
https://share.streamlit.io/wins999/query_intent_detector/main/main_app.py
9. Заключение
Мы испробовали различные языковые модели, чтобы решить нашу проблему, связанную с обнаружением намерений банковских запросов. Мы обнаружили, что модели кодировщика двойных предложений, такие как Universal Sentence Encoder, лучше работают в таком сценарии по сравнению с современной моделью BERT. Также модель Universal Sentence Encoder легче по весу, чем модель BERT.
10. Будущая работа
Мы попытались решить нашу проблему с помощью таких моделей, как GloVe, BERT и USE. Мы также построили архитектуру модели ConvRT, прочитав ее исследовательскую работу, но во время обучения возникла проблема, связанная с тем, что потери не обновляются из-за нехватки времени. Я приостановил наше исследование в разделе ConveRT. Но я хочу возобновить его в ближайшее время.
Для кода просто разветвите мой проект по ссылке github, упомянутой ниже, для любых запросов или улучшений, которые вы хотите предложить мне, прокомментируйте или свяжитесь со мной в LinkedIn или по почте.
Почта: [email protected]
11 Профиль
12 ссылок
- https://www.appliedaicourse.com/
- https://kazemnejad.com/blog/transformer_architecture_positional_encoding/
- https://arxiv.org/abs/1911.03688
- https://github.com/codertimo/ConveRT-pytorch
- Span-ConveRT: извлечение нескольких фрагментов для диалога с предварительно обученными диалоговыми представлениями, https://arxiv.org/abs/2005.08866
- Эффективное обнаружение намерений с помощью кодировщиков двойных предложений, https://arxiv.org/abs/2003.04807
- http://jalammar.github.io/illustrated-bert/
- https://nlp.stanford.edu/projects/glove/
- BERT: предварительная подготовка глубоких двунаправленных преобразователей для понимания языка, https://arxiv.org/abs/1810.0480
- Универсальный кодировщик предложений, https://arxiv.org/abs/1803.11175
- ConveRT: эффективные и точные разговорные представления от трансформеров, https://arxiv.org/abs/1911.03688
- https://www.reddit.com/dev/api/