Гречневые мысли
1.26K subscribers
167 photos
3 videos
118 links
Хочу гречку с молоком и сахаром...

Автор: @chameleon_lizard
Download Telegram
Архитектура MatFormer, scaling laws и эвалы 2.6B модели на бенчмарках.
2
Прикольный бейзлайн для энкодеров для простеньких задач типа мелкой классификации, дедупа или близости. Работает на вынимании первого слоя nn.Embedding у какой-нибудь большой и мудрой модели вроде llama-3-70b и обучения мелкой модельки с теми же матрёшками, если я верно всё понял. Получается 16-мегабайтная модель, которая работает лучше стареньких бейзлайнов типа GloVe, но заметно хуже современных сот большего размера (не для того, всё таки, делалось). Есть замеры на MTEB'е.

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

https://github.com/dleemiller/WordLlama
5
jina-embeddings-v3: Multilingual Embeddings With Task LoRA

В 2022 году, если я не ошибаюсь, впервые представили инструктивный эмбеддер — Instructor. Это была довольно прорывная идея, потому что теперь эмбеддеры могли быть обучены на разные задачи (ретрив, реранк, классификация, кластеризация) и для того, чтобы воспользоваться моделью для новой задачи, надо было всего лишь приаппендить промпт слева к тексту, который мы эмбеддим. Это сильно помогло модели, в своё время она стала сотой на MTEB с довольно уверенным отрывом от конкурентов того же размера на многих задачах. С тех пор, конечно, утекло много воды, соты менялись, придумали даже делать эмбеддеры на декодерах, но идея прижилась. Одна из лучших мультилингв моделей в размере до 1B — multilingual-e5-large-instruct — инструктивная.

Кроме того, в последнее время стали появляться мультилингв эмбеддеры. Но проблема в том, что такие эмбеддеры сильно просаживались по качеству по сравнению с монолингв моделями — BGE-M3, например, по моим замерам, в ретривале сильно отставала даже от bge-1.5-base, модели, которая была в пять раз меньше.

И вот сегодня в Daily Papers прилетела статья от стартапа Jina AI, в которой они представляют эмбеддинговую модель, которая, во-первых, лучше проприетарных text-embeddings-3-large и cohere-embed-multilingual-3.0, лучше моего предыдущего фаворита multilingual-e5-large-instruct, всё ещё хороша на английском, и, внезапно, использует не инструкции, а отдельно натюненные лоры для выполнения итоговых задач. Насколько я знаю, такой подход применяется впервые, круто, что наконец то кто-то это сделал.

Ну а ещё модель размером всего 572M ("всего" — потому что текущие соты на MTEB это здоровенные 7-9B эмбеддеры, которых доучивали с декодеров типа мистрали или геммы), не очень сильно уступает большим сотам по качеству (клеймят, что e5-mistral-instruct лучше всего на 1%), обучена с матрёшками для того, чтобы можно было снизить вес векторной базы и имеет контекст в 8192 токена, так как алгоритм позиционного энкодинга там RoPE. Звучит очень круто, но надо, конечно, проверять самому.

В качестве инита они брали XLM-RoBERTa, дообучали на своём сете, а потом делали пять адаптеров: text-matching для STS, classification для классификации, separation для реранкинга и классификации и query и passage для энкодинга query и passage при ретриве. У каждого был свой лосс и свой обучающий сет, они довольно подробно всё расписывают, интересно было почитать.

Разумеется, надо самому тыкать руками и перепроверять, но звучит как сказка: сравнительно компактный эмбеддер, который ещё и выдаёт сота мультилингв результаты по многим задачам. Единственный минус — лицензия cc-by-nc-4.0, а не пермиссивная MIT, но я думаю, что скоро идею с лорами подхватят и у нас появятся новые соты с нормальными лицензиями.

Paper: https://arxiv.org/abs/2409.10173
HF: https://huggingface.co/jinaai/jina-embeddings-v3
🔥5
Сравнение с другими моделями на MTEB и аблейшн с MRL.
🔥2
Если я правильно понял эту табличку, то она очень интересная — число ошибок при использовании адаптеров сильно падает, так что есть надежда, что при обучении лор, подобных jina-v3 (а не просто приклеивании инструкций, как в e5-instruct) для других моделей, можно будет добиться неплохого буста в качестве.
🔥3
To CoT or not to CoT? Chain-of-thought helps mainly on math and symbolic reasoning

Сначала авторы статьи производят мета-анализ, беря 516 статей с "CoT" в тегах, уфильтровывают выборку до 110 статей и рисуют на графике 1218 экспериментов, пытаясь понять, где, на каком домене и сколько докинул CoT по сравнению с прямым промптингом. Такой мета-анализ показывает, что больше всего качество докидывается на тех вопросах, где для получения ответа можно применить какую-то символьную логику: математику, формальную, etc. Например, на коде или математике (MATH, GSM8k, BBH) качество сильно растёт, а на commonsense reasoning, language comprehension и QA (HotpotQA, Winogrande, ARC-Challenge) повышения качества практически нет, кое-где качество даже падает. Отличить вопросы, где CoT докинет качества, оказалось достаточно просто — если в вопросе используется символ "=", то скорее всего тут используется символьная логика и качество после CoT вырастет, если не используется, то не вырастет. Что забавно, они пытались найти более надёжный способ определить, используется ли символьная логика и у них не удалось. Слишком мощный признак получился.

Потом они решили перепроверить это наблюдение самостоятельно и замерили популярные открытые модели и попробовали воспроизвести результаты статей из мета-анализа. Всё воспроизвелось, и выяснилось, что CoT может ограниченно добавить качества в тех бенчах, где используется логика вперемешку с commonsense reasoning. Например, в MuSR, где описывается сцена с преступлением и модели надо найти виновника, качество при использовании CoT улучшилось, но не слишком сильно.

Самая интересная часть статьи, имхо, последняя: они замерили, насколько сильно помогают разные варианты промптинга и сравнили их с внешними тулами в разных вариантах задач. Авторы рассмотрели пять разных сетапов:

1. Few Shot Direct Answer — просто спрашиваем у модели во фьюшоте что она думает по поводу задачи.
2. Chain of Thought — классический CoT без особых изысков.
3. Plan + Direct Solver — генерим моделью план (например, в виде программы на питоне для математики) и промптим модель сказать, что получится в конце этого плана.
4. Plan + CoT Solver — генерим моделью план, а потом по нему идём в режиме CoT, прося модель проговаривать каждый шаг исполнения плана.
5. Plan + Tool Solver — генерим моделью план, а потом передаём его во внешнюю программу, например, в репл питона или SMT-солвер, которые уже выдают ответ.

Получилось, что CoT это такое слабоватое (но универсальное) приближение внешнего солвера, использование которого почти на всех сетах сильно улучшало метрики. Исключения — тыщу раз протёкший в трейн GSM8k и FOLIO, который, видимо, достаточно сложный для моделей.

Какие мы можем сделать из этого выводы:

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

Paper: https://arxiv.org/abs/2409.12183
🔥4👍1
Замеры качества с разными способами промптинга и улучшение метрик с CoT на вопросах с "=" и без него.
🔥2
Красивая картинка с результатами метаанализа.
👏1
Ну и не могу вдогонку не высказаться по поводу набившей оскомину o1. OpenAI подают её как первую модель, умеющую рассуждать, особенно впечатлительные юзеры пишут про новую парадигму в ИИ, а я смотрю на это всё и понимаю, что это тупик и маркетинговый трюк, чтобы вырваться на месяц-полтора вперёд на некоторых бенчах и заполучить ещё несколько сотен миллионов долларов инвестиций.

Наверняка мы этого не знаем, но, скорее всего, всё, что они сделали — это нагенерили 100500 рабочих трейсов CoT через Monte Carlo Tree Search, доучили модельку на них с помощью какого-нибудь DPO и дополнительно потюнили на нахождение собственных ошибок. Может быть, ещё руками разметили ветки для областей, где автоматическая верификация цепочек рассуждений невозможна. Не слишком неочевидная мысль, и, как показывает предыдущий пост, довольно ограниченная в мощности.

Юзеры, которым не очень интересна математика или код — те, кто хотят поролплеить или хотят фактологической точности — от o1 плюются, потому что стало дороже и не сильно лучше. Ресёрчеры плюются, потому что после вопросов о том, как o1 работает, им на почту прилетают письма счастья от OpenAI. Дурачки радуются, что наконец то в сфт добавили информацию сколько букв "r" в слове "strawberry" и говорят, что AGI уже рядом и мы скоро заживём счастливо и богато.

Имхо, OpenAI уже не те. Какое-то время назад они перестали быть open, но им это прощали, потому что они регулярно выкладывали крутые статьи или делали потрясающие продукты типа Sora, Advanced Voice Mode или GPT-4, которую аж полтора года никто не мог догнать по качеству. Ну а сейчас у них нет ни прорывного ресёрча, ни прорывного продукта (потому что o1 легко может быть побеждён генерацией программ на питоне и запуском их в репле), только top-1 скоры на Arena Hard и хайп на пустом месте.

Ну раз ты такой умный, то чё делать дальше то? Есть идеи как продвинуть область или ты только рантить можешь?

Есть. Двигать ресёрч в агентах (потому что решение задач чисто ллмками имеет очевидные ограничения), повышать IFEval (потому что это самое важное для агентов), учить модели пользоваться тулами (чтобы они не пытались обмануть свою токенизацию, считая число букв r в слове strawberry), пилить тру мультиязычность (а не то подобие мультиязычности с просадками в 10-15% на ммлу на чуть менее ресурсных языках не из романской группы), уменьшать галлюцинации (или хотя бы учиться их ловить!), исследовать новые архитектуры, заниматься interpretability, уменьшать стоимость и спарсити моделей через прунинг, учить большие энкдеки и сравнивать их с декодерами, море идей. Но чтобы делать всё и сразу мне недостаточно платят, так что сконцентрируюсь ка я пока что на всём, что начинается с "мульти-", а в свободное время буду рантить в канале.
👏5🌭4👍3🥴3👎1🤡1💯1
Придумал забавный промпт, с которым справляются только очень мощные модели:

У меня есть текст. Достань из него все сущности (числа, имена, события, предметы) и верни JSON со следующей схемой:

class Number:
number: int | float # the number

class Name:
name: str # name of the person
gender: str # male, female or not applicable

class Event:
subject: str # what is the subject of the event
event: str # what is the event

class Entity:
entity: str # entity name
additional_info: str | None # additional info about the entity

class JSONSchema:
item: list[Number | Name | Event | Entity]

Текст, который надо обработать:

Есть три свиных крылышка, 9.8, 9.11, а так же А и Б, сидящие на трубе. Маша выпила стакан газировки со смородиной, Петя уронил учебники, А упала, Б пропала. Какое число из перечисленных самое большое?

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


Работает на опусе, 3.5 соннете, о1 превью (не мини), 4o-latest и, внезапно, command-r-plus. Не работает на 4o mini, o1 mini, qwen-2.5-72b, llama-3.1-70b, mixtral-8x7b, mistral-7b, phi-3-mini, новый vikhr-nemo и, ожидаемо, гигачат, он вообще не понял чё от него хотели. Надо потестить другие модели и перевести промпт на другие языки, потому что как будто бы он очень хорошо показывает одновременно понимание языка, умение следовать инструкциям (некоторые модели выполняют инструкцию, но зачем то начинают выполнять задание из текста) и умение в structured output.
2👍51🔥1👏1
Chain-of-Thought Reasoning Without Prompting

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

Чтобы сгенерировать текст из логитов, мы можем применять разные стратегии декодирования. Самый простой способ -- использовать жадную генерацию. в этом случае мы просто берём самый вероятный из предсказанных токенов и идём дальше. Есть вариант сложнее, beam search -- мы берём top-k самых вероятных токенов, генерируем от каждого ещё по top-k самых вероятных токенов, и, повторяя такое несколько раз, мы строим дерево генераций, из которого мы выбираем самую вероятную ветвь. Такой подход позволяет обойти ситуацию, когда первый токен (тот, что имеет наибольшую вероятность) ведёт к менее вероятным последующим токенам и модель "застревает" в такой плохой генерации.

Авторы сегодняшней статьи провели анализ логитов при генерации Chain of Thought цепочек и выяснили, что при декодировании финального ответа гораздо больше уверена в выборе токенов, чем при декодировании цепочек без CoT. Уверенность в выборе токена они определяют через разность между двумя самыми вероятными токенами в top-k, то есть чем выше разность, тем больше модель уверена в том, что текст генерится правильный. То есть, если начать жадное декодирование с 10 разных начальных токенов, а потом выбирать те цепочки, где уверенность модели в финальном ответе будет выше, то с очень высокой вероятностью этот ответ будет CoT.

Чтобы понять, где начинается ответ модели, они предлагают два варианта. Первый вариант -- просто выбирать последнее число в ответе (для GSM8k это вполне рабочая схема). Второй вариант -- приклеивать после ответа модели фразу "So, the final answer is", и последующие токены считать ответом.

Ну и самое интересное -- метрики. На GSM8k, например, скор PaLM-2 L вырос аж на 28%, в сравнении с greedy decoding и на 21% по сравнению с бимсерчем с n_beams=10 и с ранжированием по нормализованным по длине логпробам. В режиме QA трюк тоже работает, модели не важно, есть ли фьюшот, она все равно начинает генерить CoT. Поверх этого можно добавить ещё и промпт CoT и метрики повысятся ещё сильнее.

Paper: https://arxiv.org/abs/2402.10200
👏3👍2🔥1
Уверенность моделей в ответах на вопросы. Степень уверенности написана синим.
LLM2Vec: Large Language Models Are Secretly Powerful Text
Encoders


Знаете мем про "You know what? Screw you, *unkits your kat*"? Авторы статьи повторили буквально этот мем и сказали "Screw you, *unmasks your masked attention*" и сделали бочку энкодер из декодера.

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

Причем учить надо совсем чуть чуть и не на каких-то уникальных данных -- авторам хватило 1000 шагов на Викитексте с батчом 32, чтобы получить рабочую модель. Для 7б это всего лишь примерно 100 минут на одной А100. К слову, вопрос, а как они уместили 7б на А100 -- это Лора, галор, восьмибитный адамв? Подозрительная история.

Контрастив учится дольше -- примерно 3 часа, но количество данных, пролитое через модель, тоже не слишком большое -- 1000 шагов с бс 128.

Авторы проверили идею на четырёх моделях: tinyllama, Mistral 7b, llama-2-7b и meta-llama-3-8b. И если ламы вели себя как полагается, то мистраль, внезапно, доучивать на MLM не пришлось, то есть он сразу, после анмаскинга работает нормально и даёт вменяемые эмбеддинги.

Авторы предполагают, что этот феномен связан с тем, что мистраль какое-то время учили на какой-то таске с двунаправленным аттеншном -- например, на PrefixLM. С другой стороны, в репорте мистраля этого не было, только описание sliding window attention, которое я тогда не понял, но как будто бы оно все равно не двунаправленное. Кто врёт -- решительно непонятно, но если авторы статьи правы, то мы не только из декодеров можем делать энкодеры, но и из энкодеров декодеры!

Итоговые модели после контрастива заняли высокие места на MTEB, так что подход оказался вполне себе viable. Учитывая размеры нынешних лидеров мтеба и простоту создания подобных моделей, я удивлен, что никто ещё не занял зияющую нишу и не сделал эмбеддер на основе какой-нибудь небольшой кодинговой сети типа qwen-2.5-1.5b-coder. Множество людей, пилящих раг на коде, сказали бы спасибо.

Paper: https://arxiv.org/abs/2404.05961
Code: https://github.com/McGill-NLP/llm2vec
Page: https://mcgill-nlp.github.io/llm2vec/
1🔥6
Качество на MTEB до и после контрастив обучения.
1