Как стать автором
Обновить
620.84

Python *

Высокоуровневый язык программирования

Сначала показывать
Порог рейтинга

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

Не очень было понятно, как можно извлечь эту информацию из самого Питона, не заглядывая в готовые таблицы соответствия (это было бы скучно). Тем более, что на самом деле Питон много чего оптимизирует, и на самом деле при сложении двух сущностей обычно не будет вызван метод __add__, а в байткоде сгенерируется вызов BINARY_ADD, в чём можно легко убедиться с помощью модуля dis (если речь не о самописном классе с перегруженным методом __add__, а о каких-то стандартных объектах Питона). Например, сложим два списка через + и через __add__ и посмотрим, какой байткод будет сгенерирован.

import dis

dis.dis("first_list = [1, 2]; second_list = [3, 4]; final_list = first_list + second_list")
# Только самое существенное в выводе:
#             16 LOAD_NAME                0 (first_list)
#             18 LOAD_NAME                1 (second_list)
#             20 BINARY_ADD

dis.dis("first_list = [1, 2]; second_list = [3, 4]; final_list = first_list.__add__(second_list)")
# Опять же самая суть:
#             16 LOAD_NAME                0 (first_list)
#             18 LOAD_METHOD              2 (__add__)
#             20 LOAD_NAME                1 (second_list)
#             22 CALL_METHOD              1

И тут я вдруг вспомнил про стандартный модуль operator, в который зашиты все возможные операторы Питона именно в виде именованных методов как с двойным подчёркиванием, так и без оного. После небольшого исследования оказалось, что в нём каждый такой метод имеет строку документации, в которой таки написано что-то типа "Same as a + b." ("Тоже самое, что a+b.")

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

# Модуль operator содержит методы, аналогичные встроенным методам Питона и методам классов Питона
import operator
import re

# Будем искать в докстрингах методов фразу "Same as" ("То же, что и")
rx = re.compile('Same as (.*)')

# Перебираем имена модуля operator
for name in dir(operator):
    
    # Нас интересуют только имеющие двойное подчёркивание в названии
    if '__' in name:
        
        # Берём аттрибут модуля operator с таким именем
        attr = getattr(operator, name)
        
        # Читаем его docstring и ищем там фразу (см. выше)
        descr = rx.findall(attr.__doc__)
        
        # Если фраза нашлась, то она там одна и заканчивается она точкой, которая нам не нужна
        if descr:
            print(f'{descr[0][:-1]} -> {name}')

Получилось такое соответствие.

abs(a) -> __abs__
a + b -> __add__
a & b -> __and__
a + b, for a and b sequences -> __concat__
b in a (note reversed operands) -> __contains__
del a[b] -> __delitem__
a == b -> __eq__
a // b -> __floordiv__
a >= b -> __ge__
a[b] -> __getitem__
a > b -> __gt__
a += b -> __iadd__
a &= b -> __iand__
a += b, for a and b sequences -> __iconcat__
a //= b -> __ifloordiv__
a <<= b -> __ilshift__
a @= b -> __imatmul__
a %= b -> __imod__
a *= b -> __imul__
a.__index__( -> __index__
~a -> __inv__
~a -> __invert__
a |= b -> __ior__
a **= b -> __ipow__
a >>= b -> __irshift__
a -= b -> __isub__
a /= b -> __itruediv__
a ^= b -> __ixor__
a <= b -> __le__
a << b -> __lshift__
a < b -> __lt__
a @ b -> __matmul__
a % b -> __mod__
a * b -> __mul__
a != b -> __ne__
-a -> __neg__
not a -> __not__
a | b -> __or__
+a -> __pos__
a ** b -> __pow__
a >> b -> __rshift__
a[b] = c -> __setitem__
a - b -> __sub__
a / b -> __truediv__
a ^ b -> __xor__

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

Спасибо за чтение.

Теги:
+5
Комментарии0

Напоминаем, что в Академии Selectel можно пройти бесплатный курс «Изучаем Python: теория, практика, настройка инструментов».

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

Что будем делать:

✅ настроим инструменты разработчика — уделим внимание связке IDE и Python;

✅ поработаем с базами данных и брокерами сообщений — будем писать запросы SQL;

✅ создадим приложения с графическим интерфейсом — нарисуем виджеты, выведем диалоговые окна;

✅ научимся автоматизировать получение данных — попрактикуемся и с Request, и с Selenium.

Без задач для практики тоже не останетесь!

Но и это не все! Поделимся записями докладов Python Meetup. Дадим подборку для дальнейшего изучения.

Все материалы бесплатные. Не требуется даже регистрация.

Изучить курс в Академии Selectel

Теги:
+2
Комментарии0

Очень быстрая графика в Matplotlib (Python). Достигли 2-х кратного ускорения в сравнении с предыдущей версией. Python исходник в моем телеграм

Теги:
Всего голосов 2: ↑1 и ↓1+1
Комментарии1

IMPulse - менеджмент инцидентов. Интеграция с Telegram.

После первой публикации об IMPulse, стало понятно, что основная интеграция, которую от нас ждут, это Telegram. И мы рады её представить!

Для работы с Telegram мы использовали группы с топиками - они лучше всего ложатся на наш функционал. В процессе разработки мы столкнулись с багом при упоминании (mention) пользователей в Telegram, о чём составили соответствующий issue. Если вы тоже заинтересованы в закрытии этого бага, пожалуйста поставьте "👍".

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

Также мы запустили нашу группу в Telegram для вопросов и обсуждений.

Скоро мы снова придём с очередными хорошими новостями! Подписывайтесь здесь, в Telegram'е или на GitHub'е, чтобы быть в курсе.

Теги:
Всего голосов 1: ↑1 и ↓0+2
Комментарии1

Непонятно с Reddit

c 2016 года был аккаунт на Reddit. Читал и постил исключительно только в форум по Python (1 млн. подписчиков!). Вчера неожиданно получил теневой бан. То есть твои комментарии и посты никто не видит. Фактически это read only.

Сделал несколько новых аккаунтов с разных IP и устройств. Оказалось теперь не надо верифицировать email. Это занимает 15 сек. На части аккаунтов почту верифицировал - это не помогло. Вот пример только созданного аккаунта без почты, на нем ничего не делалось и потому он еще жив: https://www.reddit.com/user/No-Half8140/

Если у вас есть возможность получить код на почту вида dff35fghf@hfhlltgf.com, то вам автоматически дадут бесплатно PRO версию аккаунта - это расширенная статистика и другие плюшки, но все равно состояние "перед баном".

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

При попытке сделать пост на свою собственную стену (автоматически появляется при регистрации), написать любой комментарий в любую ветку обсуждения (даже в /askReddit и даже /NewToReddit), создать пост в любых группах и даже пригласить человека модератором на свою стену, а также сделать Follow на человека без кармы - мгновенный теневой бан. Аккаунт не виден из приватного окна и с разлогиненных устройств, аватарка меняется на красный и ее невозможно изменить.

Для всех IP и языков (english, poland, русский ) симптоматика одинаковая. ChatGPT говорит, что, да, теперь так, бан очень вероятен. Однако, я вижу в группах о Москве и Питере некоторую активность, значит как-то людям удается пройти этот квест.... Но как?

AI Reddit лютует!
AI Reddit лютует!

Теги:
Всего голосов 3: ↑2 и ↓1+3
Комментарии16

LLM для генерации признаков

Как LLM могут помочь в классическом ML?

По статистике, специалисты по Data Science тратят до 70% рабочего времени на этап Feature Engineering, то есть отбирают наиболее важные признаки в данных и формируют новые, более информативные, датасеты. Кажется, с этой рутинной задачей отлично справится LLM. Но нет — в итоге 64% времени уйдёт на подготовку промптов.

Исследователи предлагают новые решения проблемы, одно из них — FELIX(Feature Engineering with LLMs for Interpretability and Explainability). Всё, что нужно для получения готовых фич — сам датасет и его короткий контекст. Дальше FELIX делает следующее:

  • Из случайных групп сэмплов датасета LLM генерирует численных и категориальных кандидатов в новые признаки.

  • С помощью кластеризации эмбеддингов похожие признаки отбрасываются.

  • Из полученных признаков отбрасываются те, что дают наименьшую объяснимость.

    Метод эффективен для текстовых данных и сильно превосходит TF-IDF и трансформерные эмбеддинги от RoBERT. Если вам интересно, расскажем и о преобразовании других типов данных в новых постах!

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

Хочу поделиться своим максимально ненужным проектом на Python, под названием flexpasm.

Это билдер кода для FASM под Linux. Работает ограниченно, но вроде-бы работает.

Проект, лично для меня, интересный.

Установить эту библиотеку можно через PyPi:

from flexpasm import ASMProgram
from flexpasm.constants import LinuxInterrupts
from flexpasm.instructions.registers import get_registers
from flexpasm.instructions.segments import Label
from flexpasm.mnemonics import IntMnemonic, MovMnemonic, XorMnemonic
from flexpasm.settings import Settings


def main():
    settings = Settings(
        title="Example ASM Program",
        author="alexeev-prog",
        filename="example.asm",
        mode="64",
    )
    asmprogram = ASMProgram(settings, __name__)
    regs = get_registers(settings.mode)

    start_lbl = Label("start")

    start_lbl.add_instruction(MovMnemonic(regs.AX, 4))
    start_lbl.add_instruction(MovMnemonic(regs.CX, "message"))
    start_lbl.add_instruction(MovMnemonic(regs.DX, "message_size"))
    start_lbl.add_instruction(IntMnemonic(LinuxInterrupts.SYSCALL))
    start_lbl.add_instruction(MovMnemonic(regs.AX, 1))
    start_lbl.add_instruction(XorMnemonic(regs.BX, regs.BX))
    start_lbl.add_instruction(IntMnemonic(LinuxInterrupts.SYSCALL))

    asmprogram.add_label(start_lbl)
    asmprogram.main_rws.add_string("message", "Hello, World!")

    asmprogram.save_code()
    # asmprogram.restore_backup()


if __name__ == "__main__":
    main()
$ fasm example.asm example
$ ld example -o example
$ ./example

Hello, World!

А сам код генерируется такой:

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Author: alexeev-prog                                                                                               ;;
;; Example ASM Program                                                                                                ;;
;; Program generated by FLEXPASM (github.com/alexeev-pro/flexpasm)                                                    ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

format ELF64 executable 3;                      ; ELF64 EXECUTABLE
entry start                                     ; Set Start Entry


;; Segment readable executable in FASM is a directive for defining a section of code with readable and executable attributes.
segment readable executable

start:                                          ; Label start with 7 commands
    MOV RAX, 4                                      ; Loading 4 value into RAX register.
    MOV RCX, message                                ; Loading message value into RCX register.
    MOV RDX, message_size                           ; Loading message_size value into RDX register.
    INT 128                                         ; Call software interrupt 128: SYSCALL
    MOV RAX, 1                                      ; Loading 1 value into RAX register.
    MOV RBX, RBX                                    ; Exclusive OR operation RBX and RBX using XOR
    INT 128                                         ; Call software interrupt 128: SYSCALL


;; Segment readable writeable in FASM is a definition of a segment of program data codes, where the attributes readable (the contents of the segment can be read) and writeable (program commands can both read codes and change their values) are specified for it.
segment readable writeable

message db 'Hello, World!', 0xA                 ; Var message (string)
message_size = $-message                        ; Var message (string) length

Я его написал довольно давно, вот решил поделиться. Может кому-то пригодится. Если есть баги - создавайте PR и Issue, буду рад)

github.com/alexeev-prog/flexpasm

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

Пользователь Reddit рассказал, что проанализировал с помощью нейросети Claude 3.7 EXE-файл на Visual Basic 27-летней давности и смог с помощью простого промта провести реверс-инжиниринг программы так, чтобы нейросеть переписала её на Python.

Это была старая программа на Visual Basic 4, написанная в 1997 году. Запуск exe-файла VB4 в 2025 году может стать настоящим кошмаром совместимости, требующим поиска устаревших DLL и сложных обходных путей.

Пользователь загрузил файл exe в Claude 3.7 с таким запросом: «Можете ли вы сказать мне, как запустить этот файл? Было бы неплохо преобразовать его в Python».

Claude 3.7 проанализировала двоичный файл, извлекла токены VB (VB не является языком, полностью компилируемым в машинный код, что делает эту задачу намного проще, чем что‑то из C/C++), идентифицировала элементы пользовательского интерфейса и даже извлекла звуковые файлы.

Затем нейросеть сгенерировала полный эквивалент приложения на Python с помощью Pygame. По словам автора, код заработал с первой попытки, и весь процесс занял менее пяти минут.

Теги:
Всего голосов 7: ↑7 и ↓0+7
Комментарии1

SRE PUB #5 Судный день

Интерактивный стримкаст со зрителями 9 марта в 19:00

Максим будет писать веб интерфейс для вики (с выделением текста и возможностью отставлять инлайн комментарии) с помощью последней версии Copilot agent.
А все мы (включая вас) — токсично (и не очень) комментировать.

Посмотреть нас можно будет на следующих платформах:
Youtube - https://www.youtube.com/@srepubstreamcast
Twitch - https://www.twitch.tv/srepubstreamcast
Telegram - https://t.me/sre_pub

Готовьте попкорн, напитки, хорошее настроение и колкие комментарии.

Пишите в календари: 9 марта, 19:00

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

Kahneman-Tversky Optimization

Авторы метода подсмотрели идею Loss Aversion в экономической теории Канемана и Тверски.


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

Авторы вводят Human-Aware Loss, который моделирует такое восприятие. Здесь уже не нужны пары ответов модели: достаточно иметь бинарную оценку, которая показывает «хороший» он или «плохой». Лосс сначала оценивает относительную награду, используя референсную политику — вероятность получить тот же ответ, используя модель до начала дообучения. После этого относительная награда максимизируется с учетом KL-дивергенции и заданного желаемого промежута между хорошими и плохими ответами.

Плюсы метода:

  • Очень простой сбор датасета. Достаточно просить пользователя после ответа поставить лайк или дизлайк. А уже существующие парные датасеты увеличиваются в 2 раза автоматически.

  • Более устойчивый метод, чем DPO и PPO.

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

  • На достаточно больших моделях 13B+ не требует SFT.

Минусы метода:

  • Не показано качество работы на больших моделях 30B+.

  • Нужно уделять больше внимания датасету при переработке его из других форматов. Проблема может крыться в транзитивности A>B>C. В датасете DPO будет A>B, B>C. В датасете KTO окажется, что A — хороший пример, C — плохой, а B один раз хороший, а другой плохой, и мы будем пытаться по-разному отметить один и тот же пример.

Теги:
Рейтинг0
Комментарии0

Необычное! Исходник прототипа игры Пинг-Понг на MatPlotLib (научная графика на python) с высоким FPS .

Ранее в моей >>статье на Хабр было рассмотрено применение PyGame для построения графиков, а теперь, наоборот, делаем игру на системе построения научных графиков. В предыдущей версии при попытке вывода текста с высоким FPS возникали сильные "тормоза", В текущей версии эта проблема решена.

В коде для отрисовки всех элементов игры используются только объекты MatPlotLib: теннисные ракетки - это столбцовые диаграммы, мячик - это scatter диаграмма, само игровое поле - это объект figure из MatPlotLib, текст также выводится через встроенные в MatPlotLib функции. Для анимации используется встроенный в MatPlotLib объект Animation + update(). FPS=40 (сорок!).

P.S. желтая столбцовая диаграмма - это распределение координат по оси Y, в которых ракетка отбивает мячик. Обновляется при каждом ударе ракеткой по мячику.

Теги:
Всего голосов 5: ↑3 и ↓2+2
Комментарии1

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

19 марта – 28 апреля
Экспедиция «Рэйдикс»
Нижний НовгородЕкатеринбургНовосибирскВладивостокИжевскКазаньТюменьУфаИркутскЧелябинскСамараХабаровскКрасноярскОмск
22 апреля
VK Видео Meetup 2025
МоскваОнлайн
23 апреля
Meetup DevOps 43Tech
Санкт-ПетербургОнлайн
24 апреля
VK Go Meetup 2025
Санкт-ПетербургОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань
14 мая
LinkMeetup
Москва
20 – 22 июня
Летняя айти-тусовка Summer Merge
Ульяновская область

Представлен локальный ИИ-ассистент DeepSeek Code Companion для разработчиков на базе DeepSeek R1. Для работы с ним не нужен даже API. Пишет код на уровне сеньора. Во время компиляции помогает в отладке и исправлении багов. Даёт рекомендации по архитектуре и масштабированию. На выбор есть две модели: для быстрых ответов и для более сложных задач.

Теги:
Всего голосов 2: ↑1 и ↓10
Комментарии5

Из комментариев к статье о гитарном тюнере выяснилось, что многие НЕ верят, что можно вычислять ОЧЕНЬ ТОЧНО частоту синусоидального сигнала по очень небольшому количеству отсчетов не равному степени двойки для FFT и намного точнее чем FFT на том же количестве отсчетов и том же временном интервале накопления данных. Например, ошибка определения частоты может быть 0.05 Гц при небольшом количестве отсчетов на интервале 0.1 сек (FFT дало бы ошибку в 10 Гц = 1/0.1 сек) . Однако, кажется, это возможно. Вот ссылка на мой код на Python (>>исходник) (в телеграм) Коллеги, прошу проверить код, возможно я где-то ошибся.

Actual frequency: 5.77 Hz Estimated frequency: 5.769999999999999 Hz Frequency estimation error: 8.881784197001252e-16 Hz
Actual frequency: 5.77 Hz Estimated frequency: 5.769999999999999 Hz Frequency estimation error: 8.881784197001252e-16 Hz

Теги:
Всего голосов 2: ↑2 и ↓0+2
Комментарии11

Создать Telegram-бота и получить за это подарок от Selectel?

Да, это возможно, если вписаться в наш интерактив. Вот что нужно сделать:

  1. Создайте бота и опубликуйте репозиторий на GitHub.

  2. Пришлите ссылку на репозиторий в Telegram-канал SelectelFeedbackBot, чтобы получить бонусные рубли для панели управления.

  3. Задеплойте бота в облаке Selectel, оплатив услуги полученными баллами.

  4. Отправьте ссылку на бота в Telegram-канал SelectelFeedbackBot.

Мы будем ждать ваших сообщений до 2 марта 2025 года, после чего подведем итоги. 10 счастливчиков получат комплект мерча Selectel: картхолдер, кружку и плюшевого Тирекса 🦖

Если готового бота у вас еще нет и вы вообще таким не занимались, то у нас в Академии Selectel есть пример для вдохновения — пошаговый гайд по созданию бота для прогноза погоды. На всякий случай есть еще инструкция, как задеплоить бота на сервер (мало ли).

Полные правила конкурса доступны по ссылке. Узнать обо всем чуть подробнее можно в нашем Telegram-канале.

Теги:
Всего голосов 8: ↑8 и ↓0+9
Комментарии0

Direct Preference Optimization

Proximal Policy Optimization работает хорошо, но необходимость собирать фидбэк, обучать на нем модель наград и тюнить дальнейший RL оказывается довольно ресурсоемкой задачей, вместо которой можно напрямую оптимизировать нашу политику (LLM) по парам предпочтений пользователей. Имея промпт и пару ответов chosen/rejected, мы можем вместо их абсолютных значений награды требовать, чтобы вероятность генерации одного была выше, чем у второго. Как и в PPO, метод имеет свойство сильно ухудшать другие качества модели, из-за чего нужно добавлять ограничивающий член в лосс, который будет сохранять общее распределение предсказаний похожим на начальную модель.

Плюсы метода:

  • Не требует обучения и хранения в памяти ревард модели, в том числе не подвержен ее собственным искажениям. Проще контролировать, чем PPO.

  • Можно попробовать использовать вместо исходной модели предполагать равномерное распределение предсказаний, чтобы ограничить затраты по памяти.

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

Минусы метода:

  • Некоторые исследования показывают, что модель после DPO перформит еще хуже, чем до него.

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

  • Все еще оверфиттится под датасет. Кроме того, мы не можем использовать многие методы расширения датасета, так как ожидаем, что все ответы сгенерированы одной и той же политикой. То есть, можем наказать модель за то, чего она не делала.

  • В отличие от более свежих методов, требует больше времени на обучение.

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

За что я люблю python или почему его можно выбрать в качестве основного инструмента разработчика
1. Быстрая разработка. Самая сильная сторона Python — обширная стандартная библиотека и огромное число сторонних модулей на любой случай из жизни. Их применение экономит кучу времени.

2. Простая поддержка кода. Синтаксический сахар приводит к немногословным программам. Меньше кода — меньше мест для ошибок.

3. Возможность точечного ускорения кода. Изначально невысокую скорость работы можно починить разными хаками. Обычно в программе тормозит "бутылочное горлышко" . Это не вся программа, а только небольшая её часть. Зачастую профилирование позволяет найти и устранить это "бутылочное горлышко" путём переписывания кода на правильный. Если переписывание не помогло, можно использовать pypy или написать модуль на С/С++.

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

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

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

  3. Текущие неудобства с пакетным менеджером. Выбор pip, poetry, uv — хотелось бы всем на чём-то одном остановиться.

За что вы любите питон? А что вас в нём бесит?

Приглашаю вас посмотреть мой часовой стрим по созданию небольшого проекта для начинающих разработчиков. Идея проста — прочитать в csv-файле ФИО и login и проверить существование этого login на gitlab. Но тут vim, проект на gitlab, консольный git, исключения, google docstring, правильная структура проекта и тесты — всё слилось в едином экстазе.

Теги:
Всего голосов 8: ↑6 и ↓2+4
Комментарии2

Proximal Policy Optimization

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

В основе метода лежит reinforcement learning алгоритм Proximal Policy Optimization. Сначала мы создаем датасет из пар ответов, отранжированных человеком, и обучаем отдельную модель наград предсказывать, насколько ответ будет подходящим к вопросу. Это позволяет использовать модель для понимания, насколько людям понравятся неразмеченные ответы.

Дальше мы используем обученную модель, чтобы оценивать ответы нашей LLM и обучать ее максимизировать вероятность сгенерировать текст, который получит большую награду — то есть, быть ближе к “хорошему” ответу.

При использовании метода LLM сильно деградирует, потому что для максимизации вероятности успеха жертвует другими способностями. Для сохранения начальных качеств модели мы ставим ограничение (Kullback-Leibler divergence) на вид распределения вероятностей получить различные токены.

Плюсы метода:

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

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

Минусы:

  • RL достаточно сложно настраивать и контролировать, а еще она довольно быстро оверфитится.

  • Так как фидбэк от людей очень дорогой, нужно обучить дополнительную модель наград для ранжирования ответов.

  • Нужно держать в памяти сразу несколько больших моделей: саму модель, ее начальную версию, ревард-модель.

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

Готовим валентинку в Python:

1. Заходим сюда;

2. Копируем и вставляем код:

print('\n'.join
 ([''.join
   ([('Name'[(x-y)%4 ]
     if((x*0.05)**2+(y*0.1)**2-1)
      **3-(x*0.05)**2*(y*0.1)
       **3<=0 else ' ')
        for x in range(-30,30)])
         for y in range(15,-15,-1)]))

Замените Name на название\имя, а число в конце этой же строки — на количество букв в этом слове;

3. Жмём Run.

Теги:
Всего голосов 6: ↑6 и ↓0+6
Комментарии3
1
23 ...

Вклад авторов

Работа

Data Scientist
54 вакансии