Я обнаружил сюрприз сегодня совершенно случайно. Сказать, что я впечатлен - это очень мало.
Оказывается, генеративная модель стихов (отладочный бот в телеге) умеет переводить стихи с английского и немецкого, как минимум. Возможно и с других языков.
При этом ни одного сэмпла с переводом в датасете, на котором обучена эта модель, нет. Я это знаю совершенно точно, так как я сам ей занимаюсь :) ( Collapse )
Заодно упомяну одну фичу, которая сделана в этой версии, и которую можно попробовать в отладочном боте: подбор текста в шаблоне стихов вместо ***:
Нужно написать что-то вроде "Подставь текст вместо ***" и далее привести заготовку, где часть текста замазана звездочками. Модель будет будет подбирать текст, учитывая фонетику оставшихся слов (например, рифм). Можно взять текст какой-нибудь популярной песни, или стихотворение, и сделать с помощью этого инструмента что-то свое.
И да, кстати - нет никаких запретов на добавление в промпт каких-то модификаторов, чтобы управлять получающимся текстов. Как видно на скрине, я добавлял "в детском стишке", но можно указать эмоциональную окраску, или какой-то необходимый контекст.
В ней несколько открытых языковых моделей, доступных в https://huggingface.co/models, отсортированы в порядке убывания рейтинга, полученного в следующем бенчмарке.
1) Есть генерации художественных текстов, для каждого пользовательского промпта по несколько штук. 2) Ранжируем эти генерации с помощью перплексии от LM'ки, и берем топовую генерацию. 3) Затем выполняем экспертную оценку side-by-side выбранной генерации против человеческого варианта для данного запроса. 4) Считаем, как часто эксперт выбирает генерацию из п.3, а не человеческий текст. Числа во втором столбце - усредненный результат такого sbs.
В целом, расчет перплексии в этом пайплайне выполняет роль прокси-искусствоведа, чтобы отбросить кривые (в разном смысле) генерации.
Что хочу заметить по приведенным результатам.
1) Мистраль действительно рулит в своем классе, максимально хорошо генерализуясь на новые домены русских текстов. Сколько там у них было русских текстов в претрейне?
2) Как я уже много раз замечал, доучивание любой foundation LM это не так чтобы простое дело. Можно получить просадку в каком-то свойстве модели, как в данном случае получилось с моделькой Vikhr-7b-0.1.
3) Всегда нужно оценивать все LM'ки на своих бенчмарках, на своей downstream задаче. Ориентироваться на чужие метрики - непрофессиональный подход.
"Не надо меня уговаривать" означает "нет" "Меня не надо уговаривать" означает "конечно да".
В целом её можно считать хорошей иллюстрацией того, что даже в русском языке с его почти свободным порядком слов есть ситуации, когда семантика предложения критично зависит от порядка слов. Заметьте, что в этом примере меняются местами составляющие (constituents), а отрицательная частица "не" по сути остается перед словом "надо". Казалось бы, никаких причин менять семантику нет, так как к порядку составляющих русская речь еще более толерантна, чем к порядку слов. В общем, очень хорошая иллюстрация :)
Так вот к чему это я. На днях нашел на архиве статью от 21 года, написанную рисёрчерами из r&d лабы фейсбука: UnNatural Language Inference. Вкратце говорится там следующее. Взяли задачу NLI, когда для двух фраз проверяется, вытекает ли вторая логически из первой (так называемый entailment), или нет. Замечу, что всё это для английского языка, где порядок слов прямо железобетонный. И оказалось, что модели на базе Roberta etc зачастую плевать хотели на порядок слов. Цитирую: ( Collapse )
По определению, идемпотентность это такое свойство операций, когда повторное применение операции дает такой же результат, как и первое. Другими словами, f(f(x)) = f(x).
С идемпотентными математическими операциями всё достаточно просто. Знаний в рамках школьной программы достаточно, чтобы придумать несколько подходящих: умножение на 0 или 1 и т.п.
В домене естественного языка можно предположить, что такое свойство должно быть у некоторых составных "round-trip" операций, в частности - для перевода ru => en => ru. Впрочем, из-за вариативности языка ждать строгой идемпотентности от перевода не стоит.
Более того, с ходу я не могу сказать, что получение исходного текста в результате цепочки переводов ru => en => ru является подтверждением высого уровня владения языками, так как важным аспектом владения языком является способность выразить свою мысль другими словами, иначе говоря - перефразировать текст. В конце концов, нешаблонность мышления это то, что мы ожидаем от сильного ИИ в том или ином виде.
Два этих конкурирующих фактора (консервативность семантики и вариативность лексики) позволяют использовать системы машперевода в качестве генераторов перефразировок. Этот прием давно в числе стандартных для аугментации датасетов, хотя я его обычно не использую из-за удручающего качества результатов.
И вот тут появилась дурацкая идея: а что, если применять рекурсивно перевод ru-en-ru к какой-то фразе и смотреть, когда модель зациклится, то есть повторит какой-то из предыдущих вариантов? Затем прогнать через такой пайплайн много разных фраз и посмотреть статистику числа итераций до зацикливания.
С точки зрения разработчика, сильно испорченного всяким DS с матстатом и оптимизационными штуками, этот факт выглядит крайне интригующе и должен (как кажется) быть основой каких-то невероятно умных теоретических выкладок. Как тезис о постоянстве скорости света и специальная теория относительности со всем ее красивым математическим бэкграундом в виде преобразований Лоренца и пространства Минковского.
В кратком изложении "на пальцах" это звучит так. Практически все живые организмы используют одинаковую таблицу кодирования 20 аминокислот в тройках из четырех нуклеотидов. Математически строгая система, машина Тьюринга, созданная слепым часовщиком.
По этому поводу я нашел весьма подробную обзорную статью от 2008 года за авторством Кунина и Новожилова: "Origin and evolution of the genetic code: The universal enigma" https://arxiv.org/pdf/0807.4749.pdf, с массой ссылок и перечнем альтернативных теорий.
В рамках одной перспективной темы делаю рисёч тыкаю открытые PLM'ки: всякие CodeLLama etc.
Общее моё впечатление - хайп с этими моделями и реальное состояние технологии различаются намного сильнее, чем для обычных чатботов. Причина вполне очевидна: если в диалоговых моделях бредовый ответ можно при желании натянуть на некую интерпретацию, то с кодом это не проходит.
Упрощая - код либо работает, либо нет.
Например, идем сюда потыкать CodeLlama-13B. Судя по статье, эта модель видела кода на питоне значительно больше, чем я за всё время. Ок, верю. Вбиваю запрос: ( Collapse )
Хочу немного рассказать о том, как недавно встретил необычный пост в одном телеграмм-канале и отправился погулять по ссылкам, почитать и поискать "корреляты" и "аналоги" в своей области. Немного похоже на студента на экзамене по зоологии, который всё сводил к блохам, но в любой шутке, как известно...
Суть вот в чем. Среди множества странностей в наших мозгах встречаются прямо-таки феерические баги, внесенные в нашу прошивку еще в нашу бытность если не диплодоками, то лемурами уж точно. Парочку таких багов которых автор поста и разбирает.
Первый баг связан с тем, что любое предшествующее восприятие или мысль начинает влиять на последующие решения, причем зачастую совершенно неосознанно и там, где оснований для такого влияния нет. «Эффект числового якоря», как частный случай, выглядит так (далее цитирую):
В книге "Думай медленно, решай быстро" (я нашел аудио в литресе, но без проблем ищется и "бесплатный" пдф) приводятся еще примеры сногсшибательных багов. Например, неожиданно и неконтролируемо появляющийся эффект идеомоторного прайминга:
Читая про все эти немыслимые эффекты, трудно удержаться от аналогии с одним техническим приемом в нашем уютненьком NLP домене при работе с LLM'ками. Я говорю о промптинге и всем, что по этому поводу придумано за последние годы. Если посмотреть на выдачу поисковика, можно убедиться, что всякая магия правильных запросов к чатжпг и подобным системам обсуждается далеко за рамками узкого комьюнити NLP'шников.
О чем говорит такая популярность? На мой взгляд, о двух вещах.
Во-первых, промптинг действительно эффективен.
Во-вторых, промптинг интуитивно понятен обычному пользователю. Хотя это не означает, что владение этим кунфу позволяет добиваться всего от text-to-image и чатботиков вообще без усилий.
А теперь давайте добавим сюда еще парочку фактов про тренды в LLM.
1) Мы (те, кто создает LLM'ки и их пользователи) довольно бодро двигаемся в сторону мультимодальности, когда языковые модели будут работать не только с текстовым представлением, но и с аудио и видео. Запутанность, неочевидность ассоциативных связей в LLM будет нарастать, и ничего с этим не поделаешь. Проклятие высокой размерности обучающих данных и вытекающие из него особенности машобуча с нами навсегда.
2) Командами, ведущими r&d в области чатботов, вкладывается много сил в улучшении механизмов кратковременной и долговременной памяти. В частности, расширение длины контекста в LLM'ках от прежних 1-2k токенов до 4k или выше это уже факт. Плюс всякий RAG как реализация механизма долговременной памяти. Всё это означает, что эффекты влияния предшествующих коммуникаций на последующие шаги будут нарастать. И не факт, что простые вставки "Забудь всё, что говорилось ранее" в промпты нас будут спасать :)
Какое-то время назад (полгода?) я начал эксперименты с посимвольной токенизацией для декодерных генеративок. Первыми результатами, разной степени успешности, были chargpt-96M и charllama-35M. Была еще модель charbloom-35M с позиционными эмбеддингами alibi, но ее я не стал выкладывать, так как она была чуть хуже charllama-35M.
Прошло время, я научился собирать хороший датасет, качественно делать претрейн char-level моделей, сделал автоматический бенчмарк для сравнения этих моделей на разных специфических downstream задачах типа расстановки ударений на омографах. Ёмкость модели и ее качество выросли кардинально. Ура-ура!
Теперь могу поделиться текущим результатом в модели charllama. Генерация стихотворения "под Шекспира", прямо в том виде, как его выдает модель charllama, с расстановкой ударений (можно подавать в tts пайплайн, ага):
(в продолжение вот этой темы про топологию эмбеддингов)
Распределения intrinsic dimension, рассчитанные с помощью scikit-dimension по эмбеддингам модели ruroberta для стихов некоторых жанров, выглядят так: ( Collapse )Вот некоторые инсайты, которые можно тут найти:
1) "эротика" - наиболее сложный жанр с точки зрения ruRoberta; это самый правый горб. 2) "иронические стихи" немного отстают от "эротики". 3) как ни странно, "любовная лирика" на третьем месте по сложности. 4) твёрдые жанры - депрессяшки и пирожки, представленные четырехстрочниками, топологически наиболее просты, это самые левые горбы. 5) "пирожки" - единственное бимодальное распределение, возможно там на самом деле 2 разных поджанра. 6) стихи для детей достаточно близки к любовной лирике.
PS: Спасибо коллеге imageman72'у за очень верный вопрос про зависимость intrinsic dimention от длины текста. Сам я этот нюанс упустил, а он реально важен. Вот что получается, если отрисовать такую зависимость для жанра "любовная лирика": ( Collapse )
"Any suitor who has pledged their affection in print can attest to how difficult it can be to write good love poetry; and being able to generate rhyming text that also has the lengths of consecutive words matching the digits of pi is sure to swoon all but the most frigid of mathematicians."
Мой примерный перевод:
"Любой поклонник, стремящийся выразить свою страсть письменно, подтвердит, как непросто писать хорошую любовную поэзию. А возможность сгенерировать зарифмованный текст, в котором длины последовательных слов соответствуют цифрам числа пи, безусловно ошеломит любого, кроме разве что самых фригидных математиков."
Статья: Most Language Models can be Poets too: An AI Writing Assistant and Constrained Text Generation Studio (ссылка)