Как стать автором
Обновить
13
0
Олег @iHun

Анализ данных

Отправить сообщение

Алгоритм, сделавший ChatGPT таким «человечным» — Reinforcement Learning from Human Feedback

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

ChatGPT генерирует разнообразный и привлекательный для человека текст. Но что делает текст «хорошим»? Это субъективно и зависит от контекста. Например, если вы попросите сочинить историю, нужен творческий подход. Если вы запрашиваете информацию, то хотите, чтобы она была правдивой. А если вы просите написать код, то ожидаете, что он будет исполняемым.

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

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

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

Читать далее
Всего голосов 16: ↑15 и ↓1+14
Комментарии9

На пальцах: ассоциированные типы в Rust и в чём их отличие от аргументов типов

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

Для чего в Rust есть ассоциированные типы (associated types), и в чём их отличие от аргументов типов (type arguments aka generics), ведь они так похожи? Разве недостаточно только последних, как во всех нормальных языках? У тех, кто только начинает изучать Rust, а особенно у людей, пришедших из других языков ("Это же дженерики!" — скажет умудрённый годами джавист), такой вопрос возникает регулярно. Давайте разбираться.


TL;DR Первые контролирует вызываемый код, вторые — вызывающий.

Научите меня плохому!
Всего голосов 51: ↑50 и ↓1+49
Комментарии10

Дистилляция BERT для задачи классификации

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

Большие языковые модели это конечно хорошо, но иногда требуется использовать что-то маленькое и быстрое.

Читать далее
Всего голосов 6: ↑6 и ↓0+6
Комментарии0

Краткосрочные и долгосрочные персональные рекомендации

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

Автор: Роман Зыков, эксперт в области баз данных, независимый AI-консультант LENNUF.ru

Когда мы говорим про персональные рекомендации, мы часто забываем, что они бывают разного типа. В данной статье я рассмотрю основные отличия долгосрочных (long term) и краткосрочных (short term) рекомендаций.

Персональные рекомендации означают, что мы рекомендуем что-то пользователю с учетом его личных интересов учитывая его сигналы. Сами сигналы бывают двух видов - явные (explicit), когда пользователь говорит, что ему нравится (лайк, оценка к песне, отзыв на товар); и неявные (implicit), когда пользователь совершает какие-то действия (посмотрел товар, послушал песню, что-то поискал), по которым мы не можем однозначно оценить нравится/не нравится что-то пользователю. В первых версиях рекомендательных систем было принято пользоваться только явными данными, это видно и по литературе, и по научным статьям того времени. Неявных данных обычно значительно больше - вспомните, сколько товаров вы посмотрели (неявные сигналы) перед покупкой, а потом по скольким товарам вы оставили отзывы (явные сигналы)? Поэтому в последнее десятилетие пошел сдвиг в сторону неявных рекомендаций. Даже представители Netflix 5 лет назад на конференции RecSys объявили о важности таких данных. Как это мы можем заметить? Например, рекомендации на youtube постоянно подстраиваются по те ролики, которые вы смотрели, и под те ролики, которые вы оценили лайками. То же самое делают рекомендательные системы в стриминговых музыкальных сервисов, социальных сетей и интернет-магазинов.

Читать далее
Всего голосов 6: ↑4 и ↓2+2
Комментарии0

Алгоритм Дейкстры. Разбор Задач

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


Поиск оптимального пути в графе. Такая задача встречается довольно часто и в повседневной жизни, и в мире технологий. Справиться с такими вызовами помогает подход, который должен быть в арсенале каждого программиста — алгоритм Дейкстры.

Если вы хотите найти ответить на вопросы, чем этот алгоритм лучше BFS (поиска в ширину), при каких условиях алгоритм применим, и какие теоретические и практические задачи можно с его помощью решать, читайте далее.

Читать дальше →
Всего голосов 14: ↑14 и ↓0+14
Комментарии5

Мониторинг веб-приложения на Rust с использованием Prometheus и Grafana

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

В статье показано как настроить мониторинг веб-приложения на Rust. Приложение выставляет наружу Prometheus метрики, которые визуализируются с помощью Grafana. Мониторинг осуществляется для проекта mongodb-redis demo, детально рассмотренного здесь. В итоге получена следующая архитектура:


architecture

Читать дальше →
Всего голосов 21: ↑21 и ↓0+21
Комментарии10

Стратификация. Как разбиение выборки повышает чувствительность A/B теста

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

Всем привет! На связи команда ad-hoc аналитики X5 Tech.

Сегодня подробно обсудим применение стратификации для повышения чувствительности оценки AB экспериментов.

Читать далее
Всего голосов 9: ↑9 и ↓0+9
Комментарии1

Эксперименты в Ситимобил. Эпизод 2: Атака тестов на Switchback

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

Всем привет! На линию выходит команда динамического ценообразования Маркетплейса СитиМобил.

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

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

Читать далее
Всего голосов 12: ↑11 и ↓1+10
Комментарии5

Начало работы с MongoDB и Redis на Rust

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

В этой статье будет показано как создать Rust бэкэнд, который использует MongoDB, документо-ориентированную БД, для хранения данных и Redis для кэширования, ограничения количества HTTP запросов и нотификаций пользователя. Для большей наглядности созданное приложение также будет предоставлять REST API. В итоге будет получена следующая архитектура:


architecture


MongoDB является хранилищем, в то время как Redis используется для следующего:


Читать дальше →
Всего голосов 12: ↑12 и ↓0+12
Комментарии13

Эффективный поиск XSS-уязвимостей

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


Про XSS-уязвимости известно давным-давно — казалось бы, нужен ли миру ещё один материал о них? Но когда Иван Румак, занимающийся тестированием безопасности, поделился методологией их поиска на нашей конференции Heisenbug, реакция зрителей оказалась очень положительной.


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


Под катом — и текст, и видео. Далее повествование идет от лица Ивана.

Всего голосов 23: ↑23 и ↓0+23
Комментарии4

Структура + предположения > ML? Моделирование продаж байесовскими методами

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

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

Также подробно расскажу об основах Байесовского моделирования. Ну и бонусом, тем кто дочитает до конца и захочет углубиться в эту тему – «куча» ссылок. ​

Читать далее
Всего голосов 3: ↑3 и ↓0+3
Комментарии1

Рекуррентные нейронные сети (RNN) с Keras

Время на прочтение11 мин
Количество просмотров78K
Перевод руководства по рекуррентным нейросетям с сайта Tensorflow.org. В материале рассматриваются как встроенные возможности Keras/Tensorflow 2.0 по быстрому построению сеток, так и возможности кастомизации слоев и ячеек. Также рассматриваются случаи и ограничения использования ядра CuDNN позволяющего ускорить процесс обучения нейросети.


Читать дальше →
Всего голосов 14: ↑14 и ↓0+14
Комментарии0

Fastcore — недооцененная, но полезная библиотека Python

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

Недавно я начал оттачивать владение языком программирования Python. Я хотел изучить продвинутые паттерны, идиомы и методы программирования. Начал я с чтения книг по продвинутому Python, но информация, похоже, не откладывалась в голове без применения навыков. Хотелось иметь возможность задавать вопросы эксперту, пока учусь, а такую возможность трудно найти! Тогда ко мне и пришла идея: что, если я найду проект с открытым и достаточно продвинутым кодом и напишу документацию и тесты? Я сделал ставку, что это заставит меня изучать все очень глубоко, а поддерживающие проект люди оценит мою работу и будут готовы ответить на мои вопросы.
Возможности fascore
Всего голосов 28: ↑24 и ↓4+20
Комментарии6

Покупка загородной недвижимости, выбор места

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

Более 10 лет назад, мне как и многим, захотелось вырваться из «душного» города и начать жить на природе, в своем загородном доме. Как и большинство таких людей, я понятия не имел, с какими трудностями мне придется столкнуться. В данном цикле статей я хочу поделиться своим опытом проживания в загородном доме и помочь людям подготовиться к тем трудностям, которые могут возникнуть. А самое главное, помочь более трезво и расчетливо подойти к выбору объекта для покупки.

И так, начнем →
Всего голосов 43: ↑33 и ↓10+23
Комментарии116

Умная нормализация данных

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

Эта статья появилась по нескольким причинам.


Во-первых, в подавляющем большинстве книг, интернет-ресурсов и уроков по Data Science нюансы, изъяны разных типов нормализации данных и их причины либо не рассматриваются вообще, либо упоминаются лишь мельком и без раскрытия сути.


Во-вторых, имеет место «слепое» использование, например, стандартизации для наборов с большим количеством признаков — “чтобы для всех одинаково”. Особенно у новичков (сам был таким же). На первый взгляд ничего страшного. Но при детальном рассмотрении может выясниться, что какие-то признаки были неосознанно поставлены в привилегированное положение и стали влиять на результат значительно сильнее, чем должны.


И, в-третьих, мне всегда хотелось получить универсальный метод учитывающий проблемные места.


Читать дальше →
Всего голосов 19: ↑19 и ↓0+19
Комментарии3

Вред хранимых процедур

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

В чат подкаста «Цинковый прод» скинули статью о том, как некие ребята перенесли всю бизнес-логику в хранимые процедуры на языке pl/pgsql. И так как у статьи было много плюсов, то значит, есть люди, а может быть, их даже большинство, которые положительно восприняли такой рефакторинг.

Я не буду растекаться мыслью по древу, а сразу накидаю кучку минусов использования хранимых процедур.
Читать дальше →
Всего голосов 175: ↑140 и ↓35+105
Комментарии535

Функциональное программирование в Python. Генераторы, как питонячий декларативный стиль

Время на прочтение19 мин
Количество просмотров27K
  • Общее введение
  • ФП
    • Введение в ФП
    • Основные принципы ФП
    • Основные термины
    • Встроенное ФП поведение в Python
    • Библиотека Xoltar Toolkit
    • Библиотека returns
    • Литература
  • Генераторы
    • Введение в итераторы
    • Введение в генераторы
    • Генераторы vs итераторы
    • Генераторы как пайплайн
    • Концепт yield from
    • Маршрутизация данных на генераторах (мультиплексирование, броадкастинг)
    • Пример трейсинга генератора
    • Стандартные инструменты генераторы
    • Выводы
      • Плюсы
      • Минусы
    • Литература
  • Итоги

Общее введение

Читать дальше →
Всего голосов 20: ↑20 и ↓0+20
Комментарии19

Машинное обучение. Нейронные сети (часть 1): Процесс обучения персептрона

Время на прочтение6 мин
Количество просмотров29K
Заранее хочу отметить, что тот кто знает как обучается персептрон — в этой статье вряд ли найдет что-то новое. Вы можете смело пропускать ее. Почему я решил это написать — я хотел бы написать цикл статей, связанных с нейронными сетями и применением TensorFlow.js, ввиду этого я не мог опустить общие теоретические выдержки. Поэтому прошу отнестись с большим терпением и пониманием к конечной задумке.

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

Например, может быть запрограммирована стратегия игры в крестики-нолики, шахмат и другое (рисунок 1).


Рисунок 1 – Классический подход решения задач

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


Рисунок 2 – Машинное обучение

Нейронные сети


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

На рисунке 3 вы можете увидеть сходство между устройством биологического нейрона и математическим представлением нейрона, используемого в машинном обучении.
Читать дальше →
Всего голосов 8: ↑5 и ↓3+2
Комментарии1

Обзор методов создания эмбедингов предложений, Часть1

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

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


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


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


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


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


https://cdn-media-1.freecodecamp.org/images/1*bt-E2YcPafjiPbZFDMMmNQ.jpeg

Читать дальше →
Всего голосов 8: ↑8 и ↓0+8
Комментарии3

Пишем веб сервис на Python с помощью FastAPI

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

Знаю, знаю, наверное вы сейчас думаете «что, опять?!».

Да, на Хабре уже неоднократно писали о фреймворке FastAPI. Но я предлагаю рассмотреть этот инструмент немного подробнее и написать API своего собственного мини Хабра без кармы и рейтингов, зато с блэкджеком и с тестами, аутентификацией, миграциями и асинхронной работой с БД.
Читать дальше →
Всего голосов 24: ↑23 и ↓1+22
Комментарии27
1
23 ...

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Зарегистрирован
Активность