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

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

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

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

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

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

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

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

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

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

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

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