Построение модели, которая может предсказывать сорта вин, чтобы упростить выбор и покупку вин

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

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

Рассмотрим компьютерную систему, которая может предсказать, какой сорт вина, просто сообщив ей описание вина. Такой подход облегчит людям (неспециалистам) закупку вин.

Цель

Целью проекта было обучить и развернуть модель, которая прошла бы тест Master Sommelier Test (который описывается как самый сложный в мире). Модель будет обучена ожидать входные данные о стране, наименовании вина, провинции, регионах и винодельне, и должна иметь возможность давать правильные выходные данные о том, что такое сорт вина.

Метод

Очистка данных

Набор данных, найденный на Kaggle, содержал три файла (в форматах .csv и .json), но только один из них был использован после того, как стало понятно, что все они имеют одинаковое содержимое. Эти данные были большими, около 130000 строк с 13 столбцами. Поскольку наше внимание было сосредоточено на нескольких функциях, указанных в Задаче, мы с самого начала сосредоточились исключительно на них. Будучи проблемой, связанной с последовательностью текста, НЛП было принято. Мы объединили важные столбцы в один (под названием не винтажный), за исключением столбца описание. Это привело к созданию двух функций для прогнозирования цели разнообразия.

EDA и передискретизация

Целевой столбец был исследован, чтобы узнать, сколько уникальных разновидностей существует в данных вместе с их соответствующими значениями. Таким образом, мы обнаружили, что их было 707, но лишь несколько процентов имели высокие значения. Это гарантировало выбор работы с 20 ведущими сортами вин, исключая, таким образом, другие меньшинства. Тем не менее, из 20 разновидностей все еще оставалась очень высокая разница между первыми пятью разновидностями и последними четырнадцатью. Это потребовало техники передискретизации.

Передискретизация была достигнута на младших четырнадцати разновидностях путем разделения каждой из их строк описания на предложение. Поэтому увеличивайте количество строк для представления этих разновидностей. На изображениях ниже показана разница до и после передискретизации.

Предварительная обработка данных

Для столбцов description и non-vintage была принята стандартная предварительная обработка данных NLP, начиная с токенизации, удаления стоп-слов и, наконец, лемматизации. Когда это было сделано, библиотека word2vec использовалась для преобразования слов в векторы (числа). Это потому, что он обеспечивает лучшую производительность модели по сравнению с другими векторизаторами, такими как векторизатор Tf-idf. Также было применено заполнение нулями для заполнения строк, длина которых не соответствовала максимальной, чтобы повысить интерпретируемость модели.

Построение модели

Нашей целью было превзойти мастера-сомелье, мы использовали множество моделей, от моделей машинного обучения до методов глубокого обучения. Этими моделями и методами были RandomForestClassifier, XGBoostClassifier, Многослойный персептрон (MLP), сверточные нейронные сети (CNN) и долгосрочная краткосрочная память (LSTM). Из-за классов дисбаланса в качестве метрики оценки был выбран показатель f1. Итоговые значения f1 составили 0,66, 0,784, 0,77, 0,85 и 0,876 соответственно.

У нас были самые эффективные модели, такие как модели CNN и LSTM. Чтобы получить лучшую производительность наших моделей, мы использовали ансамблевую технику, чтобы смешать модели CNN и LSTM, что дало нам окончательную оценку 0,879.

Наконец-то мы сделали это!

Развертывание

Модель CNN была развернута на Heroku с использованием Kubeflow. Посмотреть его можно здесь.

Обсуждение

Пройдя тщательный процесс, мы сделали несколько заметок:

  • Метод передискретизации SMOTE не дал хороших результатов по сравнению с выбранным нами методом передискретизации.
  • Модель не работала так хорошо, когда столбец описания использовался только для прогнозирования (во всяком случае, это была наша первоначальная идея).
  • Для обучения моделей машинного обучения потребовалось очень много времени, почти несколько часов. Однако методы глубокого обучения были намного быстрее (и даже лучше).
  • Смешанная модель, как и LSTM, представляла большие трудности в развертывании, поскольку они занимали очень много времени. Вот почему вместо этого был развернут CNN, потому что это было очень удобно.

Благодаря точности этой модели ее можно использовать в различных областях применения.

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

Ограничения

  • Модель была обучена всего на 20 сортах вин из-за нехватки данных по другим сортам.

Заключение

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

Project Cont r ibuto r s: Джоломи Тосанвуми, Шарон Ибеджи , Олаида Джозеф, Форчун Чуку, Моджолаолува Джадесола, Шашанк Субхам, Адемиде Адевале, Джимо Содик, Джахфейт Ирокануло, Амос Адеола и Дэвид Вей