Обновить
256K+

Алгоритмы *

Все об алгоритмах

377,07
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

Персонализация без Big Data: как мы ранжируем новости в Telegram с помощью pgvector и пяти сигналов

Уровень сложностиПростой
Время на прочтение9 мин
Охват и читатели1.9K

У меня накопилось 23 Telegram-канала.

Не потому что я специально их коллекционировал. Просто со временем подписывался на новые. В какой-то момент понял, что читаю всего несколько процентов того, что приходит. Остальное просто пролистываю в поисках чего-то интересного.

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

Из-за этого появился CleanNews — бот, который собирает посты из ваших Telegram-каналов и формирует персональную подборку.

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

Читать далее

Новости

Публичный мок АА в Яндексе: опыт, который не заменит никакая подготовка

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели3.4K

Есть опыт, который не купишь и не прочитаешь. Его можно только пережить. Три недели алгоритмов с нуля, публичный мок в Яндекс Практикуме перед живой аудиторией — и один краевой случай, который расставил всё по местам. Алгоритмы — не основа разработки, но важная её часть. И три недели — не тот срок, за который они становятся частью тебя. Это проявилось на публике, перед аудиторией, когда права на паузу не было.

Читать далее

Просто дайте мне ввести цифры

Время на прочтение10 мин
Охват и читатели5.6K

Цифровая идентификация и её значение для веба в последние годы стали темой горячих обсуждений. Они привнесли с собой множество спорных моментов: законы о проверке возраста и их влияние на онлайн-анонимность; Википедия потенциально будет вынуждена верифицировать в Великобритании личность пользователей; привязка к официальным операционным системам iOS и Android стала обязательным форм-фактором для кошельков цифровой идентификации; кроме того, стоит упомянуть ситуацию, когда американские цифровые аккаунты были закрыты потому, что их пользователь был судьёй Международного уголовного суда.

В своей истории я расскажу о швейцарской правительственной системе идентификации AGOV. Этот развёрнутый в 2024 году сервис сегодня насчитывает 1,6 миллиона аккаунтов и становится всё более необходимым: через него можно получать пособие по безработице, предоставлять налоговую декларацию (а это обязательное действие!) и выполнять множество других операций. В кантоне Цюрих это единственная возможность подачи заявления на гражданство.

В конечном итоге, я был вынужден создать аккаунт AGOV. К сожалению, его регистрация была довольно сложной задачей, пока я не нашёл причины странного бага accessibility. Вдохновившись статьёй «Просто дайте мне выделить текст», хочу представить вашему вниманию «Просто дайте мне ввести цифры».

Читать далее

Анализ 2048 3 на 3

Уровень сложностиПростой
Время на прочтение3 мин
Охват и читатели9.2K

Вариант этой игры на маленьком поле лучше классического не только тем, что не такой бесконечно долгий, но и возможностью полностью «решить» её. Граф состояний не такой большой, примерно 3,9 * 10^8вершин. А зная граф состояний, легко построить оптимальную стратегию игры.

Но что, если сама игра не совсем честная? По нашей оптимальной стратегии мы построим «злой» вариант поля, который будет её уничтожать. Небольшой спойлер, она проиграет за 23 хода, при том, что на классическом поле в среднем держалась 367. И напоследок вы сможете сами попробовать свои силы против злого 2048.

Читать далее

Искусство и разработка игры Silpheed для Sega-CD

Время на прочтение7 мин
Охват и читатели8.8K

90-е стали десятилетием существенного прогресса в мире видеоигровых консолей[1]. Каждая новая модель привносила повышение вычислительных мощностей и улучшение графики.

Однако выпадающим из общей картины фактом стало появление в середине 90-х приводов CD-ROM. Хотя диск на 640 МиБ был в 320 раз больше объёма картриджей[2], скорость доступа (800 мс[3]) и пропускная способность (150 КиБ/с в случае односкоростных приводов) были, соответственно в 4 миллиона раз и в 35 раз ниже.

Mega-CD стала проектом компании Sega по добавлению CD-ROM к её консоли Genesis. Для этой платформы выпустили почти двести[4] игр. Среди них были и потрясающие Sonic CD, Snatcher, Final Fight CD, а также несколько RPG. Однако бесконечный конвейер игр, в которых активно использовалось Full Motion Video (FMV) (Night Trap, Prize Fighter, Slam City, Corpse Killer, Supreme Warrior, WireHead и A/X-101), создал плохую репутацию этой приставке Sega .

Среди этого мусора появилась Silpheed. Превосходный художественный вкус наряду с движком, способным выдавать великолепные анимации, свели прессу с ума[5][6]. Игроки гадали, было ли это 3D в реальном времени или же всё вычислялось заранее[7]. Игра заслужила похвалы, которой она достойна и сегодня[8][9].

Читать далее

Оптимизация распределения потоков в системах массового обслуживания

Уровень сложностиСредний
Время на прочтение12 мин
Охват и читатели6.6K

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

Читать далее

Alice AI ART 2.0: путь к unified‑модели, которая одинаково хорошо умеет генерировать и редактировать картинки

Время на прочтение15 мин
Охват и читатели11K

Привет, Хабр! На связи команда генеративных моделей в компьютерном зрении. Вместе с другими командами мы делаем мультимодального ассистента Алиса AI. Внутри него мы развиваем несколько вариантов визуальной генерации с помощью отдельной модели Alice AI ART. Два базовых сценария её работы — генерация по тексту (Text‑to‑Image, T2I) и редактирование по картинке с инструкцией (Image‑to‑Image, I2I). Именно о них пойдёт речь. 

Всё это время эти сценарии жили как два разных стека: свои базовые модели, свои данные, свои метрики и, честно говоря, своя отдельная боль в разработке и поддержке.

В этом году мы поставили себе цель, которая звучала просто, а на практике оказалась полугодовым приключением: не только подтянуть качество, а сделать одну модель, которая одинаково хорошо умеет и в T2I, и в I2I. Внутри мы называем такой режим unified или просто uni. Вас ждёт рассказ об отдельных экспериментах и наблюдениях, которые помогли нам сделать первый шаг в этом направлении и привели нас к Alice AI ART 2.0, — включая те, которые красиво не сработали (спойлер: их хватало).

Читать далее

Лейтнер, Elo и поправка на угадывание: движок тренажёра собесов без единого вызова LLM

Уровень сложностиСредний
Время на прочтение10 мин
Охват и читатели6K

Готовиться к собесу по списку «2000 вопросов с ответами» невозможно. Я пробовал: открываешь, листаешь минут сорок, отвечаешь на те, что и так знаешь, закрываешь с чувством выполненного долга. Через неделю в голове ноль. Список не помнит, где ты плаваешь, и не знает, когда ты забудешь то, что вчера повторил.

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

Читать далее

Механизм возникновения сознания у конечных автоматов

Уровень сложностиСредний
Время на прочтение5 мин
Охват и читатели13K

Конечный автомат - это математическая модель вычислений: абстрактная машина, которая в каждый момент времени находится ровно в одном из конечного множества состояний, а переходы между состояниями происходят в ответ на входные сигналы (события) по заранее заданным правилам. Традиционно эту модель воспринимают как примитивную формализацию, пригодную лишь для распознавания регулярных языков и реализации жёстко детерминированных реактивных контроллеров.

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

Читать далее

Кейс с артистами: дедупликация пользователей в базе данных и сохранение связанных с ними записей

Уровень сложностиПростой
Время на прочтение7 мин
Охват и читатели6.8K

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

Меня зовут Илья Новиков, я технический директор компании «Исходный код».

Ранее карточки артистов создавались автоматически на основе заявок на выступления. Поначалу это казалось вполне приемлемым: артист подает заявку, система создает карточку, администраторы могут с ней работать.

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

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

Правильное решение — предотвращать появление дубликатов до того, как они попадут в систему. Я с этим согласен. Регистрация должна проверять данные, нормализовать контакты и проверять, существует ли человек уже в системе.

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

Читать далее

Ускорение в 200 раз — не предел

Уровень сложностиСредний
Время на прочтение14 мин
Охват и читатели15K

Всем привет, меня зовут Сергей Татарцев. Я эксперт-разработчик розничной АБС в банке Уралсиб. В финтехе уже много лет, в Уралсибе несколько месяцев и моя ключевая задача здесь – оптимизация в СУБД Oracle. Мне нравится эта тема, она дает развитие инженерному творчеству и очень похожа на спорт, где от подхода к подходу видишь, что взял бОльший вес штанги или планку выше предыдущей.

Мое погружение в работу проходило постепенно, не было задач из серии «бросаемся на амбразуру». Процесс онбординга шёл плавно, в том числе и на тестовых задачах.
В этой статье я хочу поделиться одним из таких тестовых заданий. Где мне удалось ускорить один простой запрос в 250 раз, а подход к решению задачи взят к применению на похожих кейсах.

Читать далее

Атомарные регулярные выражения

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели11K

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

Читать далее

Как мы подружили динамические тесты JUnit 5 с Госуслугами

Уровень сложностиСложный
Время на прочтение12 мин
Охват и читатели9.7K


Привет, Хабр! На связи Максим Кацал, руководитель направления автоматизированного тестирования в РТЛабс.

Мы с командой на Госуслугах тестируем огромное количество услуг. В каждой из них — тысячи, миллионы сценариев. Писать автотесты руками — безумие, а поддерживать их очень больно.

В статье расскажу, как мы научились генерировать тесты прямо из JSON-схемы услуги. JUnit 5 + @TestFactory + рекурсивный обход графа маршрутов. Фреймворк, который сам прокладывает путь пользователя по приложению-конструктору, а потом проигрывает его в браузере.

Ниже раскрою архитектуру, код, подводные камни, опишу плюсы и минусы такого подхода.

Читать далее

Ближайшие события

Как я писал in-memory векторный движок на Go — и в каком месте он обогнал hnswilb

Уровень сложностиСредний
Время на прочтение15 мин
Охват и читатели9K

Полгода назад я начал писать in-memory базу с векторным поиском на Go: RESP-протокол, HNSW-индекс, WAL, многопоточность. Рассказываю, что из этого вышло: как я мерил производительность и на каких граблях стоял, что реально ускоряет векторный поиск, а что нет. Все цифры воспроизводимы, код открыт.

Читать далее

Децентрализованное клеточноавтоматное планирование эвакуации раненых

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

Децентрализованно планируем эвакуацию раненых: под огнем, в бардаке, с постоянно меняющимся путем отхода и нервным поиском плана Б, если..., вернее, когда.

Привет, я Егор The Hawk, и я, тоже, своего рода, разработчик. Надо успеть написать про работу, пока не завершил карьеру. Постараюсь кратко. Геймдевелоперам зайдет.

Читать далее

Когда может пригодиться экзотика в ООП: миксины/трейты/аспекты

Уровень сложностиСредний
Время на прочтение7 мин
Охват и читатели12K

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

Читать далее

Почему бумага и ручка переживают технологические революции

Уровень сложностиПростой
Время на прочтение9 мин
Охват и читатели13K

Краткая история внешней памяти и пять функций листа бумаги

Не претендуя на гениальность задался простым, на первый взгляд, вопросом: "На моем столе в 2026г всегда лежит лист черновика и пара карандашей?" Ответ оказался не таким коротким, как ожидал. Приглашаю к прочтению!

Читать далее

Архивация текста через инференс llama.cpp

Уровень сложностиПростой
Время на прочтение26 мин
Охват и читатели10K

Архивация - старая, давно изученная тема ...или нет?

Вспомним как она зарождалась, и как нейроалгоритмы вдохнули в архивацию новую жизнь.

Заодно напишем простой нейроархиватор работающий через инференс любой нейронки.

Читать далее

Как заставить ИИ соблюдать закон, не трогая веса. Выкладываем в открытый доступ внешний фильтр для LLM

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели10K

В прошлом году я уже рассказывал об AVI (Aligned/Agreement Validation Interface) — концепции внешнего, гибкого и независимого от модели фильтра, который работает как умный файрвол для LLM: отбивает промпт-атаки на входе, проверяет ответы модели на токсичность, этичность и нарушение закона — на выходе. Недавно мы доработали свою концепцию с точки зрения архитектуры, реализовали и выложили на GitHub рабочий сервис на Python и FastAPI: входной и выходной фильтры, RAG-модуль, докер-сборку с мониторингом (Prometheus, Grafana, Jaeger), а также инструментарий для воспроизведения экспериментов на FinanceBench. 

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

А по-научному и подробно все описано в журнале MDPI.Electronics (на английском).  

Поехали!

Помочь пользователю открыть новое: как мы боролись с замкнутым кругом рекомендаций в Яндекс Лавке

Время на прочтение14 мин
Охват и читатели9.5K

Хорошая рекомендательная система быстро учится угадывать, что вы положите в корзину. И чем точнее она угадывает, тем реже показывает что‑то незнакомое: ведь выгоднее предлагать проверенное. Со временем система замыкается на привычках человека и перестаёт показывать ему хоть что‑то за их пределами.

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

Меня зовут Рамиль Боярченков, я занимаюсь машинным обучением в команде Яндекс Лавки. Расскажу, как мы собрали механизм, который подмешивает незнакомые товары персонально — тем, кто к ним расположен, — и с какой вероятностью это делать для каждого пользователя. По пути разберу, как мы калибровали «агрессивность» exploration и что получилось в итоге.

Читать далее
1
23 ...