Магазины мебели желают демонстрировать потенциальному покупателю примеры того, как могут выглядеть полностью меблированные комнаты. Обычно такие фотографии собраны в каталоги. Покупателю удобно иметь возможность просмотра нескольких наиболее релевантных его запросу изображений комнат вместо просмотра огромного каталога.
Без использования машинного обучения, возможно бы было создать поиск по описаниям фотографий, например основанный на реккурентных выражениях. Проблема такого подхода заключается в том, что если не будет найдено точное совпадение слов, клиент в ответ на запрос не получит никакое изображение. В случае же ML-решения клиент получит в ответ фотографию, описание которой наиболее соответствует его запросу, даже если в итоге некоторые детали не соответствуют действительности, или соответствующие предметы заданы синонимами.
Успехом выполнения задачи будет является работающий веб-сайт в котором пользователь может ввести запрос на английском языке в свободной форме с описанием представляемого ему интерьера интересующей его комнаты, и получить в ответ несколько наиболее релевантных ему картинок из каталога магазина
Проект представляет собой реализацию системы текстового поиска по каталогу изображений меблированных комнат. Для его реализации необходимо предоставление каталога изображений меблированных комнат. Также необходимо проведение командой проекта разметки данных. Ограничением является поиск только по заранее загруженным в систему данным.
Требования к системе:
- Пользователь должен иметь возможность ввести описание интерьера на английском языке в свободной форме.
- Пользователь длжен иметь возможность выбрать нужный ему тип комнаты из следующих: спальня, кухня, гостиная, обеденная зона, ванная комната.
- Пользователь должен иметь возможность получить фотографию комнаты интерьера по типу соответствующей его запросу .
- От момента отправки запроса в систему до получения картинки должно пройти не более 10 секунд.
- Интерфейс системы должен содержать окно ввода текста и кнопку подтверждения в центральной части экрана, чтобы быть хорошо видимым интуитивно понятным пользователю.
- Доступ к интерфейсу системы должен осуществляться с помощью url адреса в сети интернет.
Основной критерий успеха проекта это увелечение конверсии пользователей при использовании системы по сравнению с традиционным листанием каталога фотографий. Мы предполагаем, что увелечени конверсии пользователей будет напрямую зависеть от пользовательской удовлетворенности, скорости ответа системы на запрос и от доступности системы по url.
Проект считается успешно выполненным если точность выше или равна 0,85, время ответа системы меньше 15 секунд, а сайт доступен 99% времени, то есть в среднем более 361 дня в году.
- Точность - подсчитываем отношение визуально релевантных ответов на запрос по отношению ко всем ответам. Ответом считается выдача из трех картинок. Если одна из картинок содержит более одного релевантного предмета - то ответ считаетсяя релевантным.
- Время ответа системы - измеряем время прошедшее с момент отправки запроса пользоватлем до вывода на экран изображений.
- Пользовательская удовлетворённость - зависит от точности результатов. Чем точнее результаты выдачи, тем более удовлетворены конечные пользователи системы.
- Скорость ответа на запрос - зависит от времени ответа системы.
- Доступность системы по url: провереям мониторингом доступности сайта и системы в процентном соотношении время доступности ко всему времени работы системы.
Пользователь выбирает из пяти предложенных типов комнат нужную ему, а также вводит на английском языке описание в свободной форме интересующей его комнаты. Система возвращает ему фотографию трех комнат из каталога магазина.
Перед нами стоит задача выдачи точного результата в соответствии с метриками качества, который мы можем получить решая задачу машинного обучения о нахождения близости вектора-эмбединга запроса клиента с векторами-эмбеднгами, описывающими фотографии из каталога.
Метрикой машинного обучения является близость векторов, которая вычисляется как среднее арифмеметическое косинусного расстояния и меры Жакара.
Для работы нашей системы необходим каталог фотографий пяти видов комнат: спальня, гостинная, обеденная зона, кухня, ванная комната. Предполагается, что эти данные мы планируем получать от клиентов. Ввиду того, что проект служит демонстрацией возможностей системы потенциальным клиентам, фотографии каталога были взяты из открытых источников в интернете, а именно с сайта Kaggle: https://www.kaggle.com/datasets/robinreni/house-rooms-image-dataset/data. В этом наборе данных “House rooms image dataset” фотографии в формате .jpg уже распределны по нужным нам папкам с названиями - видами комнат. Лицензия на использования датасета - CC0: Public Domain, означает разрешение на использования его в том числе и коммерческих целях.
После получения каталога, инженеры по работе с данными из нашей команды создают текстовую разметку каталога в формате .txt по следующему правилам: Каждая строка описывает только одну фотографию В начале строки пишется название файла изображения с указанием формата Далее, пишется тип комнаты Далее, указываются предметы внутреннего оформления комнаты и мебели по возможности с указанием их характеристик. Названия файла, тип комнаты и последующее описания отдельных предметов внутри разделяются точкой с запятой. Каждый тип комнат описывается в отдельном .txt файле. Всё описание производится на английском языке. Итого, получаем пять файлов в соответствии с пятью видами комнат.
Бейзлайном данного решения является веб-сайт на котором пользователь может ввести тип комнаты (на английском языке): спальня, гостиная, обеденная зона, кухня, ванная.
В ответ он получает случайную комнату заданного типа.

Мы сравнили 5 моделей создания эмбеддингов на подготовленных нами данных и тестах.
- В качестве первой из рассматриваемых моделей мы выбрали word2vec обученную на google news данных. Её размер составляет около 1,6 гб.
- В качестве следующей из моделей мы подумали использовать word2vec от gensim обученную только на наших данных, таким образом получалась 3. маленькая модель. Однако, эта модель имела существенный недостаток, препятствующий задуманному функционированию программы: она не может превращать в вектора слова, которые не были в исходном довольно ограниченном наборе данных.
- Далее, мы рассматривали модель tok2vec “en_core_web_lg” из библиотеки spacy, которя обучена на текстах блогов, новостей и комментариев, и весит около 600 мб.
- Мы попробовали также трансформерную модель all-MiniLM-L6-v2. Она удобна в использовании из-за того, что ей можно передать целый список строк для кодирования без итераций в цикле. Её вес составляет 80 мб.
- Последней моделью, которую мы исследовали, была tok2vec “en_core_web_md” из библиотеки spacy, которая весит 40 мб.
В качестве тестов используется следующий подготовленный командой набор из 10 пар: вид комнаты, запрос пользователя:
- "bedroom", "Large bedroom with double wood bed, two windows, dressing table, and picture.",
- "bedroom", "Medium-sized bedroom with light red double bed, TV stand, glass doors, and white ceiling fan.",
- "bedroom", "Small bedroom with black double bed, two wall lamps, and dark curtains.",
- "bedroom", "A cozy bedroom with a beige double bed, TV, pouf, and spacious wardrobe",
- "bedroom", "I want a big room",
- "bathroom", "Medium bathroom, black washbasin, mirror, shelf, white bathtub, glass door, and brown blinds",
- "dining", "Show me a medium-sized dining area with a round glass table, six white chairs, white blinds, and beige curtains",
- "dining", "I want to see a medium-sized dining room with a grey table, seven grey chairs, two black chandeliers, a grey flowerpot, and a white sofa",
- "kitchen", "Show me a medium-sized kitchen with white cabinets, a sink, a black ceiling fan, a metallic hob, a white and black refrigerator, and a brown rug",
- "living room", "I want to see a large living room with a beige sofa, two beige armchairs, a beige pouf, a black coffee table, a black end table, a grey rug, two black wall lamps, and two paintings"
В каждой из сравниваемых моделей мы использовали для вычисления косинусное расстояние, также в моделях 1,2,3 и 5 мы использовали вышеуказанную метрику близости векторов. Однако, ввиду того, что абсолютное значение косинусного расстояние между векторами в разных векторных пространствах не всегда информативно отражает качество моделей эмбеденингов, а также того, что в работающей системе важна производительность и размер итоговой модели, мы выбрали модель, учитывая в первую очередь её размер, поэтому победила модель номер 5 - “en_core_web_md” из библиотеки spacy.
Архитектура - монолит - python код вызывается из backend node.js с помощью child process.
Сервис разворачивается в среде netlify, в которой фронтенд-часть запускается вызовом команды npm start, а бекенд часть node server.js Версия Node.js=16.15, React версий с 16.8 до 18.2 Система машинного обучения, работающая на python 3.8, вызывается непосредственно из backend. Фронтенд системы работает в браузере, и доступен из браузеров Edge, Safari, Google Chrome и Firefox с версиями выпущенными после 2014 года. Backend, а также текстовые файлы размещёны на netlify. Фотографии размещены по папкам соответствующих типов на гугл диске.
Сервис будет успешно выполняться на машине с 8 гб оперативной памяти, языковая модель оптимизирована на запуск без графического процессора. Также программа требует 1,2 гб дискового пространства.
Проверка работы системы осуществлялась в коде бекенда замером времени от вызова кода на python до возвращения результата работы кода. Мы провели 100 запусков, и получили следующее распределение времени.

Cреднее время работы составляет 23,198 секунды.
Одновременное открытие сайта возможно с более 50 машин.
Мы планируем cоединить фронтенд на react с бекендом на node.js и на fastapi. Разместить приложение можно будет на хостинге типа netlify. Таким образом, у нас получиться одновременный доступ большого количества пользователей. Бутылочным горлышком - основным ограничением на количество пользователей одновременно является быстродействие нашей модели включая препроцессинг. Возможным решением может быть запуск нескольких инстансов python-fastapi- сервера например в контейнерах и распределение между ними нагрузки с помощью node.js сервера.
Мы хотим добавить систему распознования предметов интерьера на фотографиях для того, чтобы автоматизировать процесс разметки. Для этой цели нам понадобиться модель компьютерного зрения, используемая в задаче детекции, например модели семейства YOLO.

