Warning: Undefined array key 0 in /var/www/tgoop/function.php on line 65

Warning: Trying to access array offset on value of type null in /var/www/tgoop/function.php on line 65
- Telegram Web
Telegram Web
LLM и словотворчество

Попробовал в телеграм-боте Ильи Гусева @saiga_igusev_bot дать нескольким моделям вот такую задачу:

Придумай 10 несуществующих смешных слов на русском языке, объясни их значение.

Пример: 
кринжулька - социально неуклюжая девушка, которая часто попадает в неловкие ситуации


Вот несколько вариантов, которые мне понравились:


(Sonnet-3.5)

Бубырка - маленькая, но очень надоедливая проблема в повседневной жизни.

Шмыгозавр - человек, который постоянно шмыгает носом в общественных местах.

Взбрындык - внезапный порыв сделать что-то необычное или экстравагантное.

(GPT-4o)

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

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

Зевокрыл - человек, который так широко зевает, что кажется, будто сейчас взлетит.

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

Трясокот - кот, который все время трясет головой, как будто слушает невидимую музыку.

(gemma2-9b-abliterated) 

Фуфлобокс -  необычайно вместительная сумка, в которой можно хранить абсолютно все, даже нереальную ерунду.

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

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

Звончуга -  веселая и звонкая собака, которая постоянно лает и радует своим пением.


Забираю себе в лексикон)
Давно не было постов тут. У меня совсем не выходит что-то выкладывать на более-менее регулярной основе. Да и телеграм-каналов сейчас очень много, так что думается иногда: а что нового я могу добавить к тому, что уже есть? 😨 Остаётся постить когда получается и как получается, в надежде на то, что кто-то из вас зачем-то будет это читать)

Сегодня вот поделюсь некоторыми новостями из своей жизни. На этой неделе я вышел в Яндекс ведущим разработчиком в команду алайнмента YandexGPT. Она называется очень поэтично: "группа поиска смысла". Мне нравится. ❤️

А весь август я не работал. Фактически, это был просто отпуск за свой счёт, так как с предыдущего места работы уволился 31 июля, а на новое место вышел 4 сентября. Ужасно давно не было возможности просто взять и отдохнуть целый месяц. Ух, здорово провёл это время! 👍

Ещё из интересного: так получается, что почти каждый год в августе у меня появляется какое-нибудь новое хобби, или даже не одно. Бывает, через несколько месяцев оно надоедает и отваливается, но иногда и приживается. Например, в прошлом году в августе начал заниматься йогой, а в этом - записался на курсы актёрского мастерства (внезапно). Вроде как помогает управлять эмоциями и раскрепощает. 💃 Посмотрим)

А у вас что нового?
Please open Telegram to view this post
VIEW IN TELEGRAM
Репощу с разрешения организаторов. Я раньше работал в МТС ИИ в одной команде со всеми троими спикерами, они очень классные) Наверняка будет много полезного и интересного. Ребята говорят, что даже вроде бы остались ещё офлайн-места. Но если вы не в Москве, присоединяйтесь хотя бы онлайн!
Напоминаем, что меньше чем через неделю состоится наш первый AI Sync, а мы готовы поделиться подробностями про темы предстоящих докладов. Определиться было не просто, на ACL много всего интересного, но мы справились!

🌂 Для начала Гриша Аршинов расскажет про новые веяния в текстовой классификации. Да, на дворе 2024й год, модели с 3-4b параметров считаются маленькими, но такая классическая задача как текстовая классификация остается актуальной и в индустрии, и в ресерче.

🌂 Маша Никифорова поделится инсайтами про прогресс в понимании LLM - что нашли в скрытых представлениях трансформеров, английский след в размышлениях LLama, какие данные подавать модели и в каком порядке, чтобы получить SoTA решение.

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

Напоминаем, если хотите послушать нас в онлайне, то подписывайтесь на канал и ожидайте ссылку на трансляцию :) Информация для тех, кто хочет прийти к нам в офис:

Дата: 19 сентября
Время: 19:00
Место: Офис MTS AI, м. Курская
Обязательная регистрация на оффлайн вот тут

До встречи!
Please open Telegram to view this post
VIEW IN TELEGRAM
Свежий пост от Anthropic про интересную технику контекстуализации чанков для улучшения RAG.

Напомню на всякий случай, RAG (retrieval augmented generation) - это когда мы помогаем нашей LLM лучше ответить на пользовательский запрос, "обогащая" его релевантной информацией из базы знаний. Примерно так: берём запрос, находим семантически близкие к нему фрагменты из базы знаний, просим LLM использовать их в ответе на запрос. Но это совсем на пальцах, а чуть подробнее про RAG можно почитать, например, тут.

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

Выручка компании выросла на 3% относительно предыдущего квартала.
->
Выдержка из отчета за второй квартал 2023 года компании "Иванов и партнёры". Выручка в предыдущем квартале составила 314 млн долларов. Выручка компании выросла на 3% относительно предыдущего квартала.


Интуитивно понятная идея, но... А как это сделать? Не вручную же? 🥰 Разумеется, нет. Антропики использовали для написания контекстов свою же недорогую модель Claude 3 Haiku с примерно таким промптом (мой вольный перевод):

<документ>
{{подставляем сюда ПОЛНЫЙ текст документа}}
</документ>
Вот фрагмент, для которого нам нужен краткий контекст из документа:
<фрагмент>
{{подставляем сюда текст фрагмента}}
</фрагмент>
Дай краткий контекст для этого фрагмента на основе всего документа, так чтобы потом можно было легко понять, про что этот фрагмент и как он соотносится с документом в целом. В ответе напиши только краткий контекст, без повторения фрагмента.


[Я, кстати, немного потестировал ровно этот промпт с локальными Mistral-Small-Instruct-2409 и Gemma2-9b на русскоязычных текстах, и вроде бы даже работает]

Вы скажете, что слишком дорого каждый раз заставлять модель читать весь документ - ведь у нас для рерайтинга каждого чанка полный текст документа подставляется в промпт. Но у Антропиков есть кеширование документов, поэтому им не дорого. 😎

Как можно было ожидать - не просто же так Антропики решили поведать миру о contextual retrieval - метод дал ощутимый прирост к качеству поиска релевантных фрагментов для ответа на запросы. В каком-то смысле, мы просто обмениваем большое количество компьюта (в данном случае - переписывание чанков моделью, пусть и относительно лёгкой) на улучшение данных и, как следствие, рост метрик. Если база знаний не слишком часто обновляется, то наверное, игра стоит свеч. Но, как вы понимаете, от кейса к кейсу эффективность может разниться, надо брать и экспериментировать. Тем более, что в блогпосте особо не пишут о влиянии этой техники на конечную задачу - собственно ответы на пользовательские запросы. 💃

P.S. Ещё авторы говорят, что техника хорошо сочетается с гибридным индексом (эмбеддинги + BM25), реранкингом и подачей аж топ-20 чанков в финальный промпт.
Please open Telegram to view this post
VIEW IN TELEGRAM
Первый раз сделал пост на реддите в r/LocalLLaMA... не ожидал, что всего за 6 часов он вызовет несколько десятков комментариев! 👨‍💻

https://www.reddit.com/r/LocalLLaMA/s/2bS2Xf9cxN
Please open Telegram to view this post
VIEW IN TELEGRAM
Раз уж сам делал разбор, то не грех и тут зарепостить 🥰
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Душный NLP
Сбалансированный метод семплирования Min-p

Min-p — метод семплирования, который, по словам его создателей, позволяет найти баланс между креативностью и связностью ответов. Сегодня разберём статью с описанием этого подхода.

При использовании отсекающего семплирования вроде top-p или top-k, на каждом шаге генерации после отсечения может всё ещё оставаться ненужный нам «хвост» из маловероятных токенов. Это приводит к тому, что вероятность допустить ошибку на следующем шаге генерации — не нулевая. А токен — не воробей, вылетит — не поймаешь. Из-за этого может пострадать весь ответ.

Это происходит потому что top-p и top-k предполагают применение жёсткого порога отсечения, который никак не зависит от шага генерации и уверенности модели в следующем токене. А подобрать универсальный порог на все случаи жизни невозможно.

Метод Min-p пытается решить эту проблему с помощью динамической настройки порога в зависимости от токена с самой высокой вероятностью. Если модель уверена в токене, то порог обрезки будет высокий. Если сомневается — то из распределения возьмётся больше токенов.

Как это работает:

1. выбирается токен с наибольшей вероятностью — Pmax;

2. гиперпараметр метода — базовый порог вероятности, Pbase (авторы рекомендуют выбирать между 0,05 и 0,1) — умножается на Pmax, и получается порог отсечки — Pscaled. По нему отсекаются токены, всё, что ниже, выкидывается;

3.формируется пул для семплирования из оставшихся токенов;

4. вероятности нормализуются.

Получается, что на каждом шаге генерации порог отсечки может меняться. При этом ресурсозатраты метода не намного выше, чем у Top-p.

Преимущество Min-p в том, что этот метод подходит для разных температур — даже при высоком значении в 3-5. Важный момент: температура должна применяться после Min-p. Авторы не рекомендуют использовать Min-p с другими методами семплирования, хотя они и могут сочетаться.

Авторы тестировали метод на Mistral 7B в трёх бенчмарках: GPQA Main, GSM8K CoT — которые проверяют конкретные знания — и AlpacaEval Creative Writing. На первых двух бенчмарках Min-p может показывать результаты чуть хуже, чем Top-p при низких температурах. Зато в AlpacaEval Creative Writing, где осуществляется SbS-сравнение на креативных задачах, он строго лучше.

Разбор подготовил Алексей Малафеев

Душный NLP
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Дополнение про min-p

Как известно, семплеры (температура, top-p, top-k, позже Mirostat, min-p, DRY, XTC и другие) изначально были придуманы, чтобы компенсировать недостатки обучения GPT-подобных языковых моделей.

Такие модели на этапе претрейна и SFT учатся решать задачу _классификации_ (наиболее правдоподобного следующего токена). Inductive bias здесь в предположении, что на каждом шаге порождения текста может быть только один правильный следующий токен. В природе это не так ("Они решили назвать свою дочь <?>" - какой здесь единственный правильный следущий токен?). В обучающих данных это требование тоже не обязано соблюдаться - например, в SFT у вас могут быть разные эталонные ответы на один и тот же промпт.

Могут ли модели научиться в таком режиме генерировать связный текст, не содержащий внутренних противоречий? Да. Но как сделать так, чтобы ответы модели были ещё и разнообразными? Если на каждом шаге генерации брать самый вероятный токен - у вас всегда будут получаться одинаковые ответы на один и тот же запрос. Есть ситуации, когда важно разнообразие и возможность получить несколько неодинаковых ответов. Например, при решении творческих задач: брейншторминг, рерайтинг, ролплей и т.п. Тут на помощь и приходит семплирование. Сильно упрощая, оно позволяет нам не всегда брать самый вероятный токен, что делает ответы более живыми и разнообразными. Однако важно семплировать аккуратно, чтобы не сбиться с мысли и не начать порождать бред. 😵

Классические семплеры, такие как температура и top-p, чувствительны к выбору модели и к решаемой задаче. Например, насыщенные модели, которые обучались на очень большом количестве токенов, требуют более высокой температуры, если нужно разнообразие генераций. Магия же min-p как раз в том, что мы можем использовать одни и те же параметры семплирования практически на любой модели и задаче, и при этом стабильно получать связные и разнообразные ответы. 🙄

Интересно, что этот семплер появился уже довольно давно в сообществе LLM-ролплееров, использующих локальные модели. Вот один из ключевых постов его автора, наглядно разъясняющий его преимущества и недостатки традиционных семплеров. Пост был опубликован в r/LocalLLaMA ещё в ноябре 2023 года!

Я регулярно пользуюсь min-p в личных проектах и экспериментах с локальными моделями уже около года. Это единственный семплер, который у меня включен по дефолту - я не использую top-k, top-p и т.д. Он отлично подходит для всего, кроме, пожалуй, замера бенчмарков, но это особый случай. Если ещё не пробовали в своих задачах - попробуйте! 👍
Please open Telegram to view this post
VIEW IN TELEGRAM
Снова мой обзор, снова зарепощу, чего уж
Forwarded from Душный NLP
Технический отчёт Qwen2.5-Coder

Qwen2.5-Coder — семейство моделей, предназначенных для генерации кода. Его технический отчёт вышел ещё в прошлом году, но там много интересного, что стоит разобрать. Этим и займёмся.

Модель учили работать как с отдельными файлами, так и с целыми репозиториями. Что касается токенизации, то авторы взяли словарь Qwen2.5 на 151,646 токенов, но добавили к нему спецтокены. Например, для обучения в режиме Fill-in-the-Middle (FIM).

В датасете для допретрейна было пять типов данных:

— код на 92 языках программирования — примеры брали с GitHub до февраля 2024 года. Использовали фильтры на эвристиках, чтобы отсеять некачественные данные;
— text-code grounding data — уже не только код, но и документация, руководства. Использовали итеративную иерархическую фильтрацию: сперва брали большой массив данных, но с каждым шагом фильтрации их становилось всё меньше;
— синтетические данные — их генерировали с помощью CodeQwen1.5. Оставляли только выполнявшийся код;
— математические данные — использовали претрейн-датасет Qwen2.5-Math;
— текст — использовали данные из претрейна Qwen2.5, но без кода. Авторы хотели, чтобы модель получилась достаточно универсальной и умела решать различные задачи, а не только связанные с программированием. По результатам бенчмарков, лучше всего себя показала пропорция кода, математики и текста — 7:2:1.

Сперва был допретрейн на уровне файлов. Контекстное окно тут составляло не более 8 тысяч токенов. Здесь как раз и использовали FIM. Следом шло обучение на уровне репозиториев с контекстным окном до 32 тысяч токенов за счёт увеличения параметра RoPE base до миллиона. Для экстраполяции до 128 тысяч применяли технику YARN.

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

Для репозиториев на GitHub генерировали инструкции неназванной в отчёте LLM, а с помощью другой модели — тоже неназванной — создавали ответы. Третья LLM занималась фильтрацией полученных пар. Для повышения точности использовали фьюшот на опенсорсных инстракт-датасетах — например, McEval-Instruct.

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

Самый трудный с точки зрения разработки элемент — это мультиязычная «песочница». Нужно было обеспечить поддержку каждого из 92 языков программирования, собрать репозиторий эталонного кода, создать генераторы юнит-тестов, движки выполнения и анализаторы результатов. «Песочница» — вещь итеративная, которая нуждается в постоянной поддержке. Для этого разработчики привлекли экспертов, что делает «песочницу» особенно ресурсозатратной.

SFT сперва осуществлялся на нескольких десятках миллионов не слишком качественных, но разнообразных примеров. Затем с помощью rejection sampling выборка снижалась до нескольких миллионов лучших сэмплов.

Чтобы на этапе SFT модель не разучилась работать с длинным контекстом, авторы использовали короткие инстракт-сэмплы с FIM. При этом добавленный контекст — синтаксис — получался с помощью парсинга библиотекой Tree-sitter-languages. Примеров, обогащённых контекстом, было меньше, чем обычных SFT-данных.

В рамках DPO использовали RLEF для сигналов о том, что код работает, а также юнит-тесты для некоторых примеров. Были и примеры без кода, чтобы модель могла решать задачи, не связанные с программированием. В качестве LLM-as-a-judge выступала 4о.

Разбор подготовил Алексей Малафеев

Душный NLP
Please open Telegram to view this post
VIEW IN TELEGRAM
Perplexity через SFT "расцензурили" DeepSeek-R1 🤡

Рецепт:

1) Классификатор проблемных промптов (мультиязычный!)
2) Создание рассуждений в стиле R1 (неужели вручную писали)
3) Оценка человеками расцензуренности и сравнение с другими LLM
4) Также убедились, что нет сильной просадки на бенчах (но небольшая всё равно есть)

Столько сил, чтобы про ту самую площадь поспрашивать... 🤦‍♂️ Заняться людям нечем
Наша команда выпустила хорошую небольшую модельку для русского языка в опенсорс, да ещё и с коммерческой лицензией. Модель можно и локально гонять на консьюмерском железе (есть GGUF). Попробуйте!
Forwarded from ML Underhood
YandexGPT 5 Lite Instruct теперь в опенсорсе 🎉

В феврале в открытый доступ вышла Pretrain-версия, а сейчас очередь дошла и до YandexGPT 5 Lite Instruct. Это модель на 8 миллиардов параметров с размером контекстного окна в 32К токенов.

О претрейне мы уже писали вот тут, а алайнмент аналогичен тому, через который проходит YandexGPT 5 Pro. На этапе SFT концентрировались на сложных запросах, а также методах фильтрации и ранжирования данных. В рамках RLHF комбинировали RL-подходы, которые дают лучшие результаты: DPO, LogDPO и PPO. Подробнее об этом читайте на Хабре.

По результатам внутреннего слепого попарного сравнения (side-by-side) новая модель YandexGPT 5 Lite превосходит Qwen-2.5-7B-instruct в 62% случаев и не уступает GPT-4o mini в решении стандартных задач сервисов Яндекса. Показатели бенчмарков можно посмотреть в таблице.

А ещё обновили лицензию: теперь можно использовать модель не только в некоммерческих целях, но и в коммерческих до 10 миллионов выходных токенов в месяц. Если ваши объёмы выше, напишите на почту, указанную в тексте лицензии.

Модель доступна на Hugging Face. Там же есть и квантизованная версия с поддержкой GGUF. YandexGPT 5 Lite Instruct совместима с llama.cpp и Ollama.

ML Underhood
Недавно вышел обновлённый DeepSeek-R1. Умельцы с реддита сделали кластеризацию ответов разных моделей (в том числе старого и нового R1) на одни и те промпты. Обнаружилось, что новый дипсик стал гораздо ближе к моделям от Google, чем к моделям от OpenAI, как раньше (картинка). Речь не про качество ответов, а про лексико-стилистические характеристики. Это вычислительный, а не ручной анализ - результат основан на отклонениях частот слов и n-граммов от человеческого бейслайна. 👨‍💻 Чуть подробнее тут.

Что это означает/ Раньше разработчики дипсика больше ориентировались на модели от OpenAI, а сейчас дистиллируют Gemini. Возможно, гугловские модели просто легче/дешевле прокачивать в больших объёмах. А может, их генерации больше соответствуют представлениям о прекрасном китайских инженеров. В любом случае, интересный поворот. 😵

На дендрограмме видно, что и клоды, и мистрали, и лламы образуют довольно устойчивые кластеры. Хотя есть и пара неожиданных сближений (грок и гпт-4.5, гемма3 12б и гпт-3.5). Не знаю, насколько стоит доверять этим результатам, но выглядит красиво. 👍
Please open Telegram to view this post
VIEW IN TELEGRAM
Поскольку про работу не могу писать из-за NDA, то пожалуй, буду больше рассказывать о своих пет-проектах, старых и новых 👨‍💻

Начну с самого большого из них – KFW (сокращение от Kung-Fu World), пошаговая текстовая ролевая игра с режимом hot seat. Разрабатывал её несколько лет начиная с 2013 года. Вдохновлялся преимущественно старыми фильмами категории "Б" о китайском кунг-фу, но не мог не добавить кучу отсылок на современную поп-культуру и немного кринжового юмора.

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

Особенности проекта:

* Можно играть одному или с друзьями (за одним экраном, по очереди, – это и есть hot seat)
* Можно также добавить нескольких ИИ-игроков для пущего веселья. Это не просто NPC, которые есть в игре в любом случае, а именно конкурирующие с вами полноценные игроки
* Много случайно генерируемого контента: десятки тысяч уникальных стилей, приёмов и т.д.
* Упоротая ASCII-”графика” для боевого режима, сам рисовал ❤️
* Стек – чистый Питон, никаких внешних зависимостей для собственно игры (хотя в процессе разработки использовал пару классических ML-библиотек)
* 12 тысяч строк кода (что конечно не много). Вот бы это когда-нибудь отрефакторить…
* ИИ для боёв обучен с помощью собственной реализации генетического алгоритма
* Прогнозирование исхода боя классическим машинным обучением (логистическая регрессия)

Выложил KFW несколько лет назад в репозитории на гитхабе, никогда особо не рекламировал и не продвигал (не люблю и не умею это делать), но вот сегодня решил поделиться, вдруг вам будет интересно🥰
Please open Telegram to view this post
VIEW IN TELEGRAM
Поделюсь одной полезной практикой, к которой часто прибегаю. Если вам, как и мне, приходится много читать, то вы наверное замечали, что прочтённое имеет свойство быстро забываться. 😭 Поэтому полезно делать заметки (т.н. "внешняя память"). Но писать заметки руками - долго и лениво. И вот тут здорово помогают LLM-ки - ими можно извлекать ключевые тезисы из текстов и куда-то сохранять для дальнейшего использования. Процесс у меня обычно такой:

1. Читаю текст с Android-девайса
2. Копирую текст и добавляю к нему один из промптов, сохранённых в паттерны автозамены в клавиатуре SwiftKey*
3. Отдаю текст + промпт LLM-ке
4. Отправляю заметку вместе со ссылкой на исходный текст в нужный топик в группу в Телеграме, специально созданную для сохранёнок

* - Т.е. вместо того, чтобы писать весь промпт заново или откуда-то его копировать, набираем короткую последовательность символов, например “sum”, и в подсказках клавиатурного приложения появляется вариант “распаковки” этой последовательности в целый промпт

Отдельные инструменты тут легко заменить на другие, более подходящие лично для вас. Например, кому-то удобнее читать с макбука, тогда вместо SwiftKey для быстрой вставки промптов можно взять, например, Punto Switcher, там есть “Автозамена”. Также и с моделями: для суммаризации на русском и английском лично я предпочитаю Sonnet 3.7, но вы можете использовать свою любимую модель. ❤️

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

“сум” = Выдели ключевые мысли из данного текста в виде буллет-поинтов
“сум3” = Вырази главные мысли (не более трёх) из этого текста в максимально краткой и лаконичной форме
“сум1” = Вырази самую суть этого текста в максимально краткой и лаконичной форме, одним предложением

А вы делаете что-то подобное? Может, как-то ещё применяете LLM-ки в повседневной жизни? Делитесь своими лучшими практиками в комментариях! 👍
Please open Telegram to view this post
VIEW IN TELEGRAM
Попросил одну модель поправить мне взгляд на фото (я там смотрел вниз, а надо, чтобы в камеру). Загрузил фотку, дал инструкцию. Вот что она мне выдала
2025/10/16 23:02:48
Back to Top
HTML Embed Code: