Боди, куртка, пара шпилек. Часть 2

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

Minimum Viable Product

Мы решили, что самым оптимальным форматом для виртуального стилиста будет мобильное приложение. Базовая конфигурация продукта уже была бы на порядок круче того, что имелось на рынке, но взлетит ли – вот в чем вопрос. Доверят ли люди бездушной железяке свой внешний вид? Захотят ли делиться фотографиями вещей?

Мы провели опрос среди ЦА, получили добро и выяснили, в каких сценариях сервис был бы теоретически полезен. А чтобы понять, что будет востребовано на деле, решили перед запуском собственно MVP создать beta-версию beta-версии с минимумом функций, обкатав ее на тест-группе из полусотни женщин 16-50 лет.

Pre-MVP или Proof of Concept II

Чтобы наш стильный AI мог других посмотреть и себя показать, нужно было:

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

Поселить стилиста для начала решили в приложение на iOS.

На следующие два с половиной месяца мы с головой ушли в мир Dolce & Gabbana работу: описали большую часть возможного гардероба, исключив аксессуары и зимние вещи, и расширили описание атрибутов одежды вдвое (вплоть до типа застежки). Число правил возросло в 15 раз, перевалив за 70 тысяч. Виртуальный стилист превратился в цифрового Голиафа, и вернуть контроль над ним могла только алгоритмическая оптимизация.

Чтобы понять, в чем проблема, вернемся к устройству системы.

Что там под капотом

Машине не надо наряжать человека. Машине надо оптимально заполнить элементами [одеждой] 6-8 слотов [частей тела] в рамках заданного стиля и с учетом характеристик пользователя. Каждому слоту соответствуют отдельные атрибуты – параметры пользователя и вещей.

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

Заполнение слотов подчинялось предписывающим и запрещающим правилам. Сочетания атрибутов, а вместе с ними и итоговый наряд получали рейтинг

from 0 to 10

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

Но система перебирала необъятное количество комбинаций. А мы стремились к реал-тайм рекомендациям и обработке запроса за пять секунд. Чтобы предотвратить комбинаторный взрыв и уложиться во временные рамки, мы использовали метод ветвей и границ, и в целом он с поставленными задачами справился, но:

  1. Алгоритм сокращал число комбинаций за счет того, что отбирал оптимальные сочетания последовательно, заполняя слот за слотом и отсеивая варианты на каждом шаге. Иногда сочетания, отобранные на промежуточных итерациях алгоритма, не давали оптимального результата в конце. Можно собрать идеальный костюм, а потом обнаружить, что к нему нет подходящей обуви.
  2. При текущей загрузке алгоритм сбавил время обработки запросов до нескольких секунд. Но в перспективе, когда мы снова увеличим гардероб, его быстродействия будет недостаточно. Пострадает либо скорость ответа на запрос, либо качество рекомендаций. Это не нужно ни нам, ни пользователям.

Поэтому на будущее мы рассмотрели и другие методы машинного обучения. Наша задача сводилась к регрессионному анализу:

  • есть множество объектов – готовые луки и комбинации отдельных вещей;
  • каждая вещь имеет наборы своих атрибутов;
  • каждая комбинация или лук оценивается экспертом (а в перспективе и пользователями) в диапазоне 0-10.

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

Мы рассматривали метод наивного Байеса, опорных векторов, решающих деревьев и т.д., но остановились на факторизационных машинах, так как они лучше всего подходят для разреженных матриц. У каждого предмета одежды есть свои отдельные атрибуты: форма каблука обуви, тип ворота и рукавов блузки, крой брюк, лямка сумки. Поэтому наша матрица объектов и атрибутов была бы сильно разрежена – для каждого объекта задана лишь небольшая часть общего числа атрибутов.

К тому же мы успели плотно поработать с факторизационными машинами в рамках основного продукта – оптимизации онлайн-рекламы и прогнозирования рекламных показов и конверсий. ФМ помогают нам предсказывать клики с высокой точностью, несмотря на то что в запросах на показ рекламы зачастую пропущены многие параметры. Абсолютно разные предметные области оказались очень схожи в плане обучения и разреженности моделей.

Мы проанализировали готовые библиотеки, которые используются для решения задач на базе ФМ и нашли две наиболее распространенные: libFM и xLearn. Прочитав многочисленные отзывы и поигравшись с каждой самостоятельно, решили остановиться на xLearn, потому что она:

  • имеет более удобный API с разделением на фазы обучения и предсказания;
  • быстрее libFM, если верить графикам на основной странице проекта;
  • да и что там греха таить, имеет больше звезд на гитхабе.

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

Что там вокруг капота

За полтора месяца мы придумали, согласовали с заказчиком и разработали с нуля приложение на iOS. Пользователю нужно было загрузить свое фото в личный кабинет, указать тип фигуры и возраст.

body

Чтобы добавить вещь в виртуальный гардероб, достаточно было сфотографировать ее на нейтральном фоне. После этого у нас было 12 часов на то, чтобы проставить все недостающие атрибуты и определить типаж пользователя.

Нейронка сортировала загруженные вещи: рубашку к рубашкам, платье к платьям. Идеальный порядок как после генеральной уборки. Если бы в жизни можно было так же – кинул вещь в сторону шкафа, а она сама на свое место.

Photo by Nina Schwichtenberg
Photo by Nina Schwichtenberg

Нам было важно, чтобы рекомендации учитывали не только внешность, но и предпочтения пользователя. Для этого мы прикрутили кнопки “лайк”, “дизлайк” и “избранное”. Пользователь мог оценить предложенный образ, сохранить в “избранное”, оставить к нему комментарий и закрепить отдельную вещь или категорию вещей, которая обязательно должна быть в образе. Механизм самообучения подстраивал рекомендации на основе обратной связи, а также мог регулярно дополнять и обновлять базу знаний вслед за трендами.

Параллельно с личным гардеробом в приложение была добавлена имитация магазина на 1000 вещей: система подсказывала, чем разнообразить образы и как вещи из магазина будут сочетаться с уже имеющимися.

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

Приложение помогало выжать максимум из имеющегося гардероба и предлагало “правильные” обновки из магазина. По сути, рекомендации системы были сопоставимы с работой профессионального стилиста по адекватности, сложности и эстетике.

Настало время испытать продукт в деле.

Полевые испытания

Мы запустили приложение на TestFlight и разослали приглашения первой части фокус-группы вместе с инструкциями. iOS приложение работало на всех моделях iPhone, начиная с пятого. Пользователи начали загружать первые фотографии, кто-то одну-две, кто-то сразу полсотни. Запрашивали образы, ставили лайки и дизлайки, оставляли комментарии – дело закрутилось. За месяц приложением воспользовались около 80 человек.

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

Основное препятствие – это найти время, чтобы перефотографировать и загрузить всю свою одежду. Около 2/3 фокус-группы загружали либо с десяток вещей, либо вообще ничего, игрались с тестовым гардеробом, а вскоре забрасывали и его. Но это специфика задачи: чтобы разобрать гардероб, нужно участие его владельца.

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

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

На нескольких девайсах загруженные фотографии пропадали так же упорно, как ускользал от нас виновный в том баг. А к рекомендательной системе иногда заглядывала Муза, и то тут то там проскакивали экспериментальные аутфиты, достойные подиума и софитов, но сомнительные для будней.

Ну и организационный прокол: тестирование пришлось на октябрь-ноябрь, в то время как система была рассчитана на весенне-летний сезон. Из-за этого пласт гардероба оказался не у дел. Особенно обувь. Особенно босоножки.

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

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

Через магазин же можно было бы монетизировать приложение. Поэтому мы лишний раз задумались над форматом. Что нужнее: виртуальный стилист для личного гардероба или функция умного шоппинга, отдельное приложение или интегрированная в интернет-магазин опция? Что бы выбрали вы?

Поиск инвесторов

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

В приложении изначально задумывался еще календарь образов и система тегов для удобной навигации и планирования. Было место и другим фишкам: конструирование одежды, 3D-моделирование пользователя и одежды на основе фотографий, примерка причесок и макияжа, элементы соцсети – развернуться можно широко.

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

Опыт поиска инвесторов у нас имеется. Мы продвигали на рынок как наш основной ad-tech продукт, так и проекты, в которых мы были аутсорс-командой. Если интересно, можем рассказать об этой кухне в отдельной статье. Но на этот раз мы выступали в качестве исполнительной стороны, поэтому особых подробностей не знаем.

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

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

Artemy Nazin
Artemy Nazin
Senior Specialist, Strategic Development
Svetlana Petryanina
Svetlana Petryanina
Copywriter

Have a look at

Leave Your Contact Details Here

Have questions or would like to see the demo? Get in touch – and we will be delighted to talk