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

(Сатирический и очень непрофессиональный ответ на «DeepWine»)

1. Введение

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

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

2. Сопутствующая работа

Еще одна методика создания винных обзоров с использованием кода автора этой статьи называется «DeepWine» и представляет собой окончательный отчет для трех студентов курса Standford CS230-Fall. Где они сравнили GPT2 OpenAI с текстом, сгенерированным RNN/GRU. Они ссылаются на другой студенческий проект, который сгенерировал «явно сгенерированный машиной» текст, в котором «не хватало здравого смысла и английской структуры». Эта статья стремится только усугубить эту проблему, давая самый минимум.

3. Набор данных

Для обучения этой системы использовался набор данных, доступный на Kaggle. Он содержит 150 000 ранее существовавших обзоров вин, а также подробную информацию о происхождении вин. «Ключевые столбцы включают сорт винограда, баллы, регион и сам обзор». (DeepWine, стр. 1) Большинство точек остались вне поля зрения этой системы.

4. Методы

4.1 Результаты DeepWine

Результаты DeepWine RNN/GRU были не чем иным, как скучными и лишенными базовой английской структуры, как и в предыдущих результатах. Они также не учли современные методы использования моделей RNN/GRU и LSTM, и можно предположить, что их модель была недостаточно большой. А еще смешно было читать слова

"Similar to the dinosaur language exercise in Coursera, we used our model to do character level prediction,"

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

4.2 JeffNet (нейронная сеть ради выдумки)

также известное как предсказание плотного представления на основе многоуровневого персептрона

Во-первых, модель Tensorflow-Hub «Универсальный кодировщик предложений», модель, обученная Google делать именно то, что следует из названия, используется для кодирования обзоров в 512-мерные векторы, а также всех других данных о вине, таких как как страна и регион происхождения, сорт вина и винодельня, из которой оно было произведено.

Теперь есть два списка 512-мерных векторов: один для данных о вине, а другой для отзывов. Это будет использоваться в сочетании с пользовательской сетью прямой связи (или многоуровневым персептроном) для прогнозирования вектора обзора на основе вектора данных.

Теперь MLP обучен делать, как было предложено ранее, предсказывать вектор обзора для нового бита данных. Затем выполняется поиск по уже существующим отзывам, чтобы выбрать наиболее подходящий, поскольку в этом наборе данных 150 000 отзывов, обязательно найдется тот, который почти полностью соответствует, в этом вся прелесть больших данных.

4.2.1 Маркировка POS для извлечения ключевых слов

Теперь используется инструмент Parts of Speech Tagger, поставляемый с библиотекой SpaCy, для выделения любых прилагательных в обзоре. Затем они используются для создания «тегов», которые могут использоваться системой рекомендаций для рекомендации похожих вин или в качестве функции для поисковой системы для поиска определенного типа вина. Отсюда мы можем перейти к экспериментальному созданию новых обзоров на основе тегов.

5. Результаты

Вывод для Country: France, Province: Provence, Region: Bandol, Winery: Domaine de la Bégude, Designation: La Brûlade, Variety: Provence red blend, and Price: 66.0 гласит:

Best Match: второй, спелый, широкий, полный, яркий, красный, свежий, нежный

Настоящий обзор для этого конкретного вина был

«Это лучшее вино от La Bégude, названное в честь самой высокой точки виноградника на высоте 1200 футов. Он имеет структуру, плотность и значительную кислотность, которая еще успокаивается. За 18 месяцев выдержки в дереве вино приобрело дополнительное богатство и концентрацию. Произведенное семьей Тари, ранее принадлежавшей Château Giscours в Марго, это вино предназначено для выдержки. Пей из 2020 года».

Я чувствую, что кислотность и насыщенность точно отражены в тегах со словами «Спелый», «Широкий» и «Яркий». Хотя это может быть предвзятость подтверждения.

6. Заключение и будущая работа

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

пс. блокнот со всем кодом можно найти здесь

Эта работа и сопровождающий ее код находятся под лицензией Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.