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

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

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

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

Одной из очень активных областей исследований в области нейронных сетей была классификация изображений. Задачи этого поля могут заключаться в различении того, что изображено на картинке, обнаружении объектов на дороге, что необходимо для обучения вашей Теслы вождению, или обнаружении хот-догов. Сети, используемые для этих задач, называются Сверточные нейронные сети (CNN), потому что они используют свертки, которые представляют собой математические операции, эмулирующие реакцию нейронов на визуальные стимулы, видящие только в его окрестности. Применение свертки ко всему изображению означает прохождение по нему фрагментами.

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

Однако многие из этих сетей могут не подойти для нашей желаемой задачи. CNN обычно обучены обнаруживать тысячи различных объектов, и нам может быть интересно отличить двуспальную кровать от односпальной, а не собаку от машины. Здесь на помощь приходит обучение с переносом. Оно заключается в переносе знаний нейронной сети, обученной для выполнения общей задачи, т. е. обнаружения тысяч различных объектов, в вашу конкретную задачу, такую ​​как обнаружение красивой квартиры. Это делается путем использования промежуточных слоев нейронной сети, называемых встраиваниями, в качестве входных данных для вашей конкретной задачи. Эти вложения являются промежуточным представлением изображения, не очень специфичным для основной задачи, но способным закодировать важную информацию об изображении. Результат этого процесса переводит изображение в вектор фиксированного размера чисел с плавающей запятой.

Это представление имеет очень мало смысла для людей. Они представляют собой оценку длинного списка связанных производных в конкретном значении этого изображения, что по-прежнему является проблемой очень большого размера для понимания человеком. Чтобы увидеть его результаты, мы закодировали несколько сотен тысяч магов о комнатах и ​​пользователях в Бади и сгруппировали похожие вложения. Для нейронных сетей мы использовали Keras для извлечения кодировок, экспериментируя с различными архитектурами, такими как VGG16 и Resnet50, с аналогичными результатами. В обоих случаях мы удалили полносвязный слой, который сопоставляет нейроны с выходами модели.

После того, как у нас были вложения изображений, мы использовали кластеризацию K-средних из Scikit Learn:

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

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

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