«Чем пахнет?» — вопрос, который часто ставит нас в тупик. Описать запах сложнее, чем, например, цвет или звук. Обычно аромат связывают с его источником: пахнет лимоном, сиренью, напалмом поутру; и реже — с абстрактными образами: «круглый» или «жёлтый». Как найти подходящий аромат, если не хватает слов для обозначения своих ольфакторных предпочтений?

Специалистка по рекомендательным системам Клэр Лонго (Claire Longo) создала бота, который подбирает парфюм по текстовому описанию ситуации или образа. Например, вот что советует бот для отдыха на итальянском острове:

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

А это подборка для любителей книг:

Корица, бергамот, имбирь — для уютных посиделок в библиотеке.

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

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

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

Так выглядит информация о любимом парфюме самой создательницы бота.

Каждый документ с информацией о парфюме имеет два векторных представления, построенных с помощью латентно-семантического анализа (LSA) и Doc2Vec. Использование двух разных векторов помогает учитывать как конкретные описания («запах ванили»), так и более абстрактные («запах утреннего леса»).

Когда пользователь вводит свой запрос, бот определяет эмоциональную окрашенность каждого предложения и затем группирует их: позитивные и нейтральные — с одной стороны, негативные — с другой. Затем с помощью усредненного косинусного расстояния в двух векторных пространствах бот ищет парфюм, чьё описание наиболее близко к положительным и нейтральным предложениям из запроса пользователя. Если описание парфюма ближе к негативно окрашенным предложениям, он исключается из рекомендаций. В итоге бот предлагает на выбор 5 самых подходящих ароматов.

Вот что бот рекомендует любителям Digital Humanities.

Оценить работу модели сложно: наше восприятие образов и ситуаций, как и запахов, субъективно. Для идеального результата стоило бы учитывать ассоциативный ряд конкретного пользователя. Впрочем, такая рекомендательная система — отличный способ исследовать мир парфюмерии и найти в нем что-то новое для себя.

Код проекта опубликован в открытом доступе*.

Источник: Perfume Recommendations using Natural Language Processing

* Исходный код на github