Обновить

Технотекст

Рекомендательные системы: проблемы и методы решения. Часть 1

Время на прочтение14 мин
Количество просмотров34K

Привет! Я хочу рассказать вам о рекомендательных алгоритмах. Мы в Prequel создаем фильтры и эффекты для редактирования фото и видео. Создаем давно, и постепенно этих эффектов стало очень много. А с ними и пользовательского контента. Мы захотели помочь с выбором из этого многообразия, для чего нам и понадобилась система рекомендаций. Если масштабы вашей системы такие, что пользователям сложно в ней ориентироваться, возможно, что рекомендации могут помочь и вам.

Задуманный систем оказался слишком объемным для одной статьи, поэтому мы разбили его на две части. Перед вами первая, она посвящена постановке задачи и базовым методам решения. В этой части мы разберем коллаборативные модели от матричного разложения (на примере ALS) до neural collaborative filtering. Кроме того, будет небольшой обзор метрик и техник борьбы с проблемой холодного старта.

Читать далее

Ансамблевые методы машинного обучения

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров40K

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

Поэтому я решил осветить эту тему в данной статье и показать реализацию ансамблей с помощью scikit-learn.

Читать далее

Как классифицировать данные без разметки

Время на прочтение7 мин
Количество просмотров9.6K

Пользователи iFunny ежедневно загружают в приложение около 100 000 единиц контента, среди которого не только мемы, но и расизм, насилие, порнография и другие недопустимые вещи. 

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

Как мы это в итоге сделали — расскажу под катом на наглядном примере. Статья рассчитана на тех, кто знаком с Python (при этом необязательно разбираться в Data Science и Machine Learning).

Читать далее

Как мы создавали сервис Benzin — бесплатный аналог remove.bg

Время на прочтение14 мин
Количество просмотров10K

Рассказ о том, как мы сделали нейросеть для удаления фона на фотографиях, догнали по качеству лидера рынка и выделили получившийся BENZIN neural network в отдельный продукт - https://benzin.io. В статье расскажу о шоке, который мы испытали узнав трафик главного конкурента. Как мы вычисляли его выручку, чтобы на неё ориентироваться, а также о наших результатах за календарный год, работе над ошибками, и о том какие перспективы у этого проекта. Будет полезно тем, кто планирует или уже создает свой SaaS.

Узнать подробности

Как мы фронтиры науки с помощью тематического моделирования искали

Время на прочтение13 мин
Количество просмотров3.5K

Некоторое время назад перед нашей NLP-командой была поставлена необычная задача: построения системы определения фронтиров науки. Некоторые из нас до постановки задачи ни разу даже не слышали слово «фронтир», и мы начали с того, что стали разбираться, что оно значит. Буквальное историческое определение слова frontier – это граница между освоенными и неосвоенными поселенцами свободными землями на Диком Западе. Естественно, от этого буквального определения нам была интересна только часть про границу между освоенным и неосвоенным, она же «передний край науки». Получается, перед нами была поставлена задача автоматически определить, где проходит этот передний край.
Читать дальше →

Го: Долгая дорога к боту

Время на прочтение28 мин
Количество просмотров6.6K
There is no difference between theory and practice in theory,
but there is often a great deal of difference between theory
and practice in practice.

Yogi Berra

Я слепым вместо глаз вставил звезды и синее небо.

Юрий Шевчук


Тема игровых ботов с самого начала была для меня довольно чувствительной. Используя Dagaz, я научился воссоздавать самые разнообразные игры, но что в них толку, если с тобой никто не играет? Nest позволил разработать сервер, для игры по сети, но до тех пор пока на нём не слишком много народу, боты продолжают оставаться актуальными. Универсальные боты, которые я писал, были медленными и слабыми. К счастью, знакомство с Garbochess позволило переломить ситуацию, по крайней мере в том, что касалось шахматных игр. Признаюсь честно, я никогда не думал, что у меня появится бот для игры в Го
Читать дальше →

Машинное обучение в сейсмологии

Время на прочтение18 мин
Количество просмотров6.2K

Все хотя бы раз слышали про землетрясения. Это опасное природное явление которое может привести к разрушению зданий, возникновению цунами и гибели людей. С помощью составления каталогов землетрясений и анализа сейсмической активности человечество пытается минимизировать риски от наступления сейсмических событий. Основной источник данных в сейсмологии - это непрерывные записи движения грунта, которые регистрируют с помощью сейсмических станций. Для того что бы составить представительный каталог землетрясений необходимо определить времена вступлений сейсмических волн в непрерывном потоке, рассчитать параметры очага и выполнить оценку магнитуды. Каждый этап рутинной обработки сейсмологических данных это предмет отдельной статьи, но мы с вами посмотрим на самое интересное - распознавание сейсмических волн методами машинного обучения. Определение времён вступлений сейсмических волн до сих пор выполняется (или корректируется) операторами-сейсмологами. Автоматизация этой сложной задачи позволит полностью исключить ручной труд при непрерывной обработке данных любой сейсмической сети. При этом, необходима такая модель, которая с одной стороны могла обеспечить точность отметок вступлений на уровне человека, а с другой была эффективна на этапе вывода (эксплуатация на CPU). Возможно ли это? Давайте посмотрим!

Читать далее

Тихая революция и новый дикий запад в ComputerVision

Время на прочтение7 мин
Количество просмотров36K

Казалось бы, революция с Computer Vision уже была. В 2012 году выстрелили алгоритмы основанные на сверточных нейронных сетях. Года с 2014 они дошли до продакшна, а года с 2016 заполонили все. Но, в конце 2020 года прошел новый виток. На этот раз не за 4 года, а за один. поговорим о Трансформерах в ComputerVision. В статье будет обзор новинок, которые появились в последний год.

Читать далее

Окрашивание изображений

Время на прочтение6 мин
Количество просмотров8K

Статья про окрашивание изображений на основе работы Color2Embed: Fast Exemplar-Based Image Colorization using Color Embeddings. Рассмотрим, как переносить цвет с одной картинки на другую с помощью смеси из U-Net и StyleGAN v2.

Читать далее

Как мы пришли к релизам мобильных приложений раз в неделю

Время на прочтение9 мин
Количество просмотров10K

Несколько лет назад в Ozon между двумя релизами приложения на одной платформе могло пройти три месяца. Мы планировали, что хотим выпуститься с определенной большой фичей и пока её не сделаем — не релизим. 

С чем мы столкнулись, пока выпускали релизы по этой схеме: 

Читать далее

Как мы автоматизируем iOS: настройка Gitlab CI + Fastlane + Firebase + ItunesConnect

Время на прочтение17 мин
Количество просмотров17K

В основном идея использования CI/CD для iOS, да и для других платформ, — это автоматизация рутинной работы. Когда мы работаем над одним приложением, можем вручную собирать небольшой проект. Но команда растёт, хочется тратить время эффективнее, чем вручную собирать проект или объяснять новичкам, что же там с Code-signing нужно делать.

Пожалуй, самое рутинное и самое важное занятие, которое берёт на себя CI, — это прогон тестов. Нет зелёных тестов? В master не попадёшь. А с ростом команды вероятность того, что кто-то вольёт в master нерабочий код, будет только увеличиваться. Нужна автоматизация.

В этой статье я хочу подробно рассказать о пути настройки Gitlab CI + Fastlane + Firebase + Testflight. Примеры приводятся на основе одного проекта, в котором участвовали 10 разработчиков. В конце будут описаны проблемы, с которыми мы сталкивались, и их решения.

Для кого будет полезен этот опыт? Для всех, кому нужен CI/CD и кто сидит на Gitlab. Для Github будет другая связка, например с Travis, — остальные компоненты неизменны. В нашей команде все используют Gitlab CI, Fastlane вместо голого xcodebuild для быстроты и удобства разработки, Firebase и Testflight.

Если у нас бесплатный Gitlab и мы укладываемся в лимит Firebase, то получаем бесплатное решение по настройке CI/CD.

Читать далее

Все новинки Android 12. Обзор для разработчиков

Время на прочтение14 мин
Количество просмотров23K

Прошло Google I/O и мы узнали абсолютно всё про новую версию Android. Основной упор в релизе был сделан на усиление безопасности ОС и приватности данных, а также провели редизайн системы. Очень хорошо поработали с поддержкой новых современных стандартов Media, причём минимизировали объем боли, которую будут испытывать флагманские устройства из-за старых или бюджетных смартфонов. App Widgets воскресили и сделали улучшения, которые просили еще с первой версии Android.

Читать далее

Что будет, если у программиста появится хобби кулинария

Время на прочтение12 мин
Количество просмотров13K

Начну издалека, то есть с самого начала. Готовить сам для себя я умел и раньше (до описываемых событий): сварить суп, борщ, пожарить яичницу, картошку - нет проблем. Но готовить что-то конкретно и целенаправленно, да еще и получать от этого удовольствие, мне в голову не приходило. Как-то ползал я по ютубу, пересматривал любимые мультики и попался мне пиксаровский "Рататуй", а в рекомендациях после него выпали ссылки на теоретический ролик про рататуй И. Лазерсона с канала ТВЕда, как сейчас помню. Посмотрел один ролик, другой и понеслась. Лазерсон отличный пропагандист "мужской кулинарии", у него есть настолько завлекательные ролики, после просмотра которых любой мужик, до этого даже не имевший мыслей про кухню, побежит готовить вприпрыжку, я уверен на сто процентов. Ну вот и я втянулся, начал с капустных салатов, потом собственно рататуй (классический, а не Confit Byaldi из мультика), потом различные блюда с курицей и пошло-поехало. Пересмотрел кучу теоретических Лазерсоновских роликов, потом его же кухни народов мира, классические рецепты, потом начал перелезать на других кулинарных блогеров (Обломова, Емельяненко и др.), короче закончилось это тем, что у меня появилась бумажка, на которую я скрупулезно выписывал названия рецептов, которые в будущем хочу готовить, безотносительно каких-то конкретных кулинарных видосов и блогеров (большая часть от Лазерсона конечно, уж так вышло, потому что он среди меня стал первым "кулинарным гуру").

Читать далее

Цвета в Swift: UIColor

Время на прочтение6 мин
Количество просмотров21K

UIColor дает возможность настроить цвет для Dark Mode, дает семантический набор цветов "от Apple", а также дает возможность задать не только цвет, но и паттерн заполнения пространства, что как бы кричит нам, что UIColor это вовсе не цвет. Давайте слегка заглянем в эти чертоги UIColor.

Читать далее

Настало время офигительных историй. Кастомные транзишены в iOS [1/2]

Время на прочтение7 мин
Количество просмотров6.9K

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

Читать далее

Работа с фоновыми задачами в Android 12: переезжаем с foreground service на expedited jobs

Время на прочтение4 мин
Количество просмотров12K

С релизом Android 12 приложения, где новая версия операционки будет указана в targetSdkVersion, получат запрет на запуск foreground-сервисов в бэкграунде. В качестве альтернативы Google предлагает WorkManager, который с появлением expedited jobs станет предпочтительным вариантом для запуска высокоприоритетных фоновых задач. 

О нём и пойдёт речь в статье — под катом обсудим новые возможности инструмента, подключим его к приложению и реализуем миграцию с foreground-сервиса.

Читать далее

Vivid UI

Время на прочтение13 мин
Количество просмотров8.2K

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

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

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

Читать далее

Эволюция CI в Android

Время на прочтение18 мин
Количество просмотров3.5K

“Твою ж мать, какая же это хтонь!”. Примерно так можно было охарактеризовать все наши инфраструктурные скрипты до недавнего времени. Нужно было что-то менять, и мы сделали это. 

Меня зовут Павел Стрельченко, я – Android-разработчик компании hh. Я расскажу вам как эволюционировали наши CI скрипты на протяжении трех лет, с какими проблемами мы сталкивались, как анализировали их и пытались изменить, а также что вообще делали и к чему в итоге пришли. 

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

Узнать про хтонь

Как подготовиться к iOS-собеседованию

Время на прочтение12 мин
Количество просмотров26K

Всем привет! Меня зовут Илья, и я провожу собеседования *хлоп-хлоп-хлоп*. Сейчас работаю на позиции Principal iOS Engineer в inDriver, и мой фокус смещен в сторону технических собеседований. До этого руководил мобильной разработкой в в «Альфа-Банке» и был кем-то вроде нанимающего менеджера. Это тот человек, который говорит финальное слово по кандидату и определяет, какую циферку написать в оффере. Помимо «рабочих» собеседований, я иногда собеседую на аутсорсе, а также помогаю разработчикам к ним готовиться. 

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

Читать далее