В начале февраля мы наградили победителей нашего IT‑чемпионата VK Cup. До финала дошли 80 человек, а общий призовой фонд в 4 млн рублей разделили 20 победителей — по четыре команды на каждый трек чемпионата. На Хабре мы решили сделать серию статей с разбором наиболее интересных решений по разным трекам.
Сегодня мы расскажем про трек по машинному обучению. Участники работали над улучшением рекомендаций для друзей и предсказанием взаимного добавления в друзья между пользователями ВКонтакте. Все мы пользуемся соцсетями и можем на собственном примере ощутить, как работают рекомендации друзей. Но что под капотом этого решения, откуда соцсеть знает, с кем мне стоит подружиться?
Во всём этом разобрался Иван Брагин, один из победителей чемпионата.
О решении
VK Cup «22/23 проходил в три этапа. Чтобы пробиться в финал, мы решали задачи по классификации групп на основе текстов и рекомендации постов в Дзен. В финале нас попросили решить задачу формата „возможно, вы знакомы“, но без использования полного графа.
Задача недели №1 (из группы PBVmaths в ВК, ссылка в описании)
Идея базового алгоритма очень простая: нужно посчитать общее количество друзей у пары пользователей, и чем их больше, тем вероятнее, что эти пользователи знакомы.
Есть огромный граф пользователей соцсети. Каждый пользователь (кружочек) в графе называется вершиной, а связь — ребром. Я предполагаю, что в графе VK более 200 миллионов вершин, каждая из которых имеет в среднем 150 рёбер. Посчитать количество общих друзей для каждой пары вершин — задача сложная, поэтому нам предложили альтернативный формат данных.
Для каждого пользователя соцсети создаётся эго‑граф — граф, состоящий из вершины этого пользователя и вершин его друзей. В эго‑графе сохраняются все рёбра.
Вершину основного пользователя, который связан со всеми другими вершинами, обозначим C, а две вершины, для которых мы хотим оценить вероятность создания связи, — U и V. Эго‑граф значительно меньше полного графа соцсети, и в нашей задаче он был ограничен тремястами вершинами. Посчитать любые срезы статистики очень просто на одном ядре и без использования большого объёма памяти. Поэтому решение задачи с использованием эго‑графов хорошо масштабируется парадигмой map‑reduce. На этапе map мы оцениваем шанс двух вершин подружиться, на этапе reduce — объединяем оценки со всего графа. В конкурсе мы решали задачу map.
Итак, у нас есть эго‑граф и мы должны спрогнозировать пять пар рёбер, которые образуются за следующую неделю. Базовое решение — взять пары, у которых максимальное количество общих друзей. Нам предоставили baseline, в котором поиск количества общих друзей реализован через скалярное произведение.
Информатика ЕГЭ 2020 | Разбор задач из вк #1
Представляем граф в виде матрицы m, вычисляем m.T.dot(m) и получаем матрицу количества общих друзей. Например, в ячейке (V1, V2) будет
то есть вершины V1 и V2 имеют двух общих друзей.
Давайте посмотрим на эго-граф выше. Две оранжевые вершины U и V имеют одного общего красного друга, а две серые вершины имеют одного общего зелёного друга. Но зелёная вершина имеет много других связей, то есть это просто активный человек, который добавляет всех, и наличие такого общего друга должно цениться ниже, чем наличие общего друга у пользователя с немногочисленными друзьями. Для этого можно взвесить одну из матриц.
Ячейка (V1, V2) теперь имеет значение перемножения первой строчки в левой матрице и второго столбца второй матрицы:
Теперь важность связи взвешена на количество друзей каждого общего друга.
Пока что я описал baseline решения, предоставленного организаторами.
Теперь надо было решить совсем другую и значительно более привычную задачу. Есть пара [U, V] и бинарная разметка, где 1 — U подружится с V в ближайшие 7 дней, 0 — не подружится.
Дальше всё банально: генерируем кучу признаков, обучаем популярные модели, собираем в ансамбль и отправляем на оценку качества. Данных много, хочется рассчитать большое количество признаков, но делать это на одной машине и тем более в одном процессе слишком долго. Поэтому я перевёл все данные в Parquet и написал расчёт признаков на Spark.
Не вижу смысла описывать все рассчитанные признаки, проще посмотреть в код, всё создаётся в одной ячейке. Наша конечная метрика — NDCG, а значит, надо оптимизировать не метку, а ранжирование, для этого хорошо подходит pairwise‑оптимизация. LambdaRank от lightgbm показал себя неплохо. В последний день попробовал CatBoost с QuerySoftMax‑функцией, но ничего принципиально нового не получил, кроме медленного обучения.
Огромная благодарность организаторам, которые подготовили отличные три задачи, дали полезные baseline и сделали быстрый расчёт баллов. Я два года не участвовал в конкурсах и решил вернуться. Очень рад что выбрал VK Cup, теперь хочется продолжать.
Ссылки
Скоро мы расскажем о других интересных решениях победителей различных треков VK Cup, следите за нашими новостями. И заглядывайте в нашу группу ВКонтакте, чтобы не пропустить регистрацию на следующий чемпионат, мы придумаем для вас много новых интересных задач.
Источник: habr.com
Бесплатные стикеры Fortnite (Фортнайт) ВК, ответы на задания теста какие?
Для получения стикеров Фортнайт во Вконтакте бот сообщества Фортнайт ВК после того, как подпишешься на него, присылает во ВК задания в личные сообщения.
Пройти опрос — одно из заданий, после прохождения которого дадут четыре из 20 стикеров.
Открою вам секрет, что даже если не ответишь верно на все вопросы, стикеры все равно дадут, так что не задумываясь жми на любые варианты предложенных в опросе.
Если хочешь проявить себя эрудитом, то нажимай на такие варианты:
Вопрос 1. Стекло.
Вопрос 2 Четвертая картинка — пушка.
Вопрос 3. Выбрать такие персонажи — 6,3,1.
Вопрос 4. 3 аптечки.
Вопрос 5. Выбрать вариант «Громко заявить о себе».
Подробнее обо всех этапах получения всех 20 штук стикеров Fortnite в этом вопросе на нашем сайте.
Источник: www.bolshoyvopros.ru
Задачи со спичками — ответы на игру
Начинаем составлять ответы к игре «Задачи со спичками», из социальной сети ВКонтакте.
В игре подсказок крайне мало, поэтому наше прохождение может Вам пригодиться.
Если Вам будет трудно отыскать правильное решение, то можете найти ответы на игру «Задачи со спичками» на нашем сайте.
Задачи со спичками — подсказки
Игра «Задачи со спичками»: ответ на Уровень 1
Переместите 1 спичку, чтобы получилось верное равенство: 0 + 3 = 2 (0+3=2)
Игра «Задачи со спичками»: ответ на Уровень 2
Переместите 1 спичку, чтобы получилось верное равенство: 5 — 1 = 8 (5-1=8)
Игра «Задачи со спичками»: ответ на Уровень 3
Переместите 1 спичку, чтобы получилось верное равенство: 9 + 0 = 5 (9+0=5)
Игра «Задачи со спичками»: ответ на Уровень 4
Переместите 1 спичку, чтобы получилось верное равенство: 3 — 7 = 4 (3-7=4)
Игра «Задачи со спичками»: ответ на Уровень 5
Переместите 2 спички, чтобы получилось верное равенство: 6 + 9 = 5 (6+9=5)
Игра «Задачи со спичками»: ответ на Уровень 6
Переместите 1 спичку, чтобы получилось верное равенство: 5 + 5 = 8 (5+5=8)
Игра «Задачи со спичками»: ответ на Уровень 7
Переместите 1 спичку, чтобы получилось верное равенство: 0 + 3 = 9 (0+3=9)
Игра «Задачи со спичками»: ответ на Уровень 8
Переместите 1 спичку, чтобы получилось верное равенство: 8 — 6 = 6 (8-6=6)
Игра «Задачи со спичками»: ответ на Уровень 9
Переместите 1 спичку, чтобы получилось верное равенство: 1 + 0 = 7 (1+0=7)
Игра «Задачи со спичками»: ответ на Уровень 10
Переместите 1 спичку, чтобы получилось верное равенство: 2 + 9 = 8 (2+9=8)
Игра «Задачи со спичками»: ответ на Уровень 11
Переместите 1 спичку, чтобы получилось верное равенство: 8 — 0 = 6 (8-0=6)
Игра «Задачи со спичками»: ответ на Уровень 12
Переместите 2 спички, чтобы получилось верное равенство: 2 — 9 = 3 (2-9=3)
Игра «Задачи со спичками»: ответ на Уровень 13
Переместите 1 спичку, чтобы получилось верное равенство: 6 — 1 = 6 (6-1=6)
Игра «Задачи со спичками»: ответ на Уровень 14
Переместите 1 спичку, чтобы получилось верное равенство: 9 + 1 = 8 (9+1=8)
Игра «Задачи со спичками»: ответ на Уровень 15
Переместите 1 спичку, чтобы получилось верное равенство: 7 — 8 = 7 (7-8=7)
Игра «Задачи со спичками»: ответ на Уровень 16
Переместите 1 спичку, чтобы получилось верное равенство: 1 + 5 = 4 (1+5=4)
Игра «Задачи со спичками»: ответ на Уровень 17
Переместите 1 спичку, чтобы получилось верное равенство: 5 + 2 = 8 (5+2=8)
Игра «Задачи со спичками»: ответ на Уровень 18
Переместите 1 спичку, чтобы получилось верное равенство: 6 — 0 = 5 (6-0=5)
Игра «Задачи со спичками»: ответ на Уровень 19
Переместите 1 спичку, чтобы получилось верное равенство: 2 + 1 = 4 (2+1=4)
Игра «Задачи со спичками»: ответ на Уровень 20
Переместите 2 спички, чтобы получилось верное равенство: 2 + 2 = 7 (2+2=7)
Игра «Задачи со спичками»: ответ на Уровень 21
Переместите 1 спичку, чтобы получилось верное равенство: 7 — 0 = 1 (7-0=1)
Игра «Задачи со спичками»: ответ на Уровень 22
Переместите 1 спичку, чтобы получилось верное равенство: 8 + 0 = 0 (8+0=0)
Игра «Задачи со спичками»: ответ на Уровень 23
Переместите 1 спичку, чтобы получилось верное равенство: 3 + 0 = 5 (3+0=5)
Игра «Задачи со спичками»: ответ на Уровень 24
Переместите 1 спичку, чтобы получилось верное равенство: 1 + 2 = 2 (1+2=2)
Игра «Задачи со спичками»: ответ на Уровень 25
Переместите 2 спички, чтобы получилось верное равенство: 4 + 0 = 8 (4+0=8)
Игра «Задачи со спичками»: ответ на Уровень 26
Переместите 1 спичку, чтобы получилось верное равенство: 5 + 0 = 9 (5+0=9)
Игра «Задачи со спичками»: ответ на Уровень 27
Переместите 2 спички, чтобы получилось верное равенство: 1 — 6 = 0 (1-6=0)
Игра «Задачи со спичками»: ответ на Уровень 28
Переместите 1 спичку, чтобы получилось верное равенство: 1 + 1 = 6 (1+1=6)
Игра «Задачи со спичками»: ответ на Уровень 29
Переместите 2 спички, чтобы получилось верное равенство: 2 + 1 = 6 (2+1=6)
Игра «Задачи со спичками»: ответ на Уровень 30
Переместите 1 спичку, чтобы получилось верное равенство: 3 + 9 = 9 (3+9=9)
Игра «Задачи со спичками»: ответ на Уровень 31
Переместите 1 спичку, чтобы получилось верное равенство: 1 + 1 = 3 (1+1=3)
Игра «Задачи со спичками»: ответ на Уровень 32
Переместите 1 спичку, чтобы получилось верное равенство: 9 + 0 = 8 (9+0=8)
Игра «Задачи со спичками»: ответ на Уровень 33
Переместите 1 спичку, чтобы получилось верное равенство: 2 — 9 = 5 (2-9=5)
Игра «Задачи со спичками»: ответ на Уровень 34
Переместите 1 спичку, чтобы получилось верное равенство: 0 + 6 = 0 (0+6=0)
Игра «Задачи со спичками»: ответ на Уровень 35
Переместите 1 спичку, чтобы получилось верное равенство: 1 + 8 = 7 (1+8=7)
Игра «Задачи со спичками»: ответ на Уровень 36
Переместите 1 спичку, чтобы получилось верное равенство: 6 + 0 = 0 (6+0=0)
Игра «Задачи со спичками»: ответ на Уровень 37
Переместите 1 спичку, чтобы получилось верное равенство: 8 + 1 = 6 (8+1=6)
Игра «Задачи со спичками»: ответ на Уровень 38
Переместите 1 спичку, чтобы получилось верное равенство: 0 + 2 = 3 (0+2=3)
Игра «Задачи со спичками»: ответ на Уровень 39
Переместите 1 спичку, чтобы получилось верное равенство: 4 — 9 = 7 (4-9=7)
Игра «Задачи со спичками»: ответ на Уровень 40
Переместите 1 спичку, чтобы получилось верное равенство: 3 + 6 = 0 (3+6=0)
Источник: branto.ru