Question

#1
by BigBeavis - opened

If you go through these models one by one, they all seem to be based on the same few other models, which brings me to question the point of merging them like this.

I understand your opinion and I know that my approach is not common and may raise questions. Moreover, the configuration of this model is somewhat confusing due to the fact that I recreated it from my notes on paper. I often come across good and relatively simple merges like A=B+C. It's cool when such a merge turns out to be good. In this model, one of the 9 merges of the first generation turned out to be such and became the foundation of this model. However, sometimes the result may not be satisfactory due to the degradation of the final model for some reasons, such as talkativeness/ taciturnity, censorship or excessive fixation on the latest events of the context. At the same time, in other ways, the model can be very promising and outperform the original models.

The classic approach is to throw out an imperfect result and try out another algorithm or merge parameters. This is a completely working strategy and if the result is completely bad, the best one.
My approach is based on a manual evolutionary strategy to select and derive the final model from potentially strong candidates. This is similar to real plant and animal selection.
In your question, you said that the result is based on the same few models. You are right about this, as well as the fact that all the huge variety of dog breeds is based on several prehistoric wolves, and if you go further into the past, then on one last universal common ancestor (LUCA).
The process of model mixing is very similar or even equivalent to hybridization, which is the basis of the diversity of life.

Therefore, even a few initial models may be enough to get something completely new and unique. This requires going through many generations and some luck.
I can't afford much because "I'm limited by the technology of my time", but the method I use is based on patterns that work in nature.
In the end, I will give a simple explanation on imaginary objects, meaning models.
A=B+C; D1=A+B; D2=A+C; E1=(D1+[A..D1))... , Z1..Zn.
As a result, we get a lot of offsprings that are different from the originals (B and C). More complex the objects and methods of hybridization, the greater the diversity space in the distant offsprings (Z1..Zn).
Of course, it is necessary to check, select the best for reproduction, simulate mutations and reject degenerations.
As a result, you get the perfect result - my model (joke).

Of course, merge without final fine-tune training is some kind of randomness game, but the world is full of randomness and they can be controlled.
I hope you are satisfied with my explanations.

I understand your opinion and I know that my approach is not common and may raise questions. Moreover, the configuration of this model is somewhat confusing due to the fact that I recreated it from my notes on paper. I often come across good and relatively simple merges like A=B+C. It's cool when such a merge turns out to be good. In this model, one of the 9 merges of the first generation turned out to be such and became the foundation of this model. However, sometimes the result may not be satisfactory due to the degradation of the final model for some reasons, such as talkativeness/ taciturnity, censorship or excessive fixation on the latest events of the context. At the same time, in other ways, the model can be very promising and outperform the original models.

The classic approach is to throw out an imperfect result and try out another algorithm or merge parameters. This is a completely working strategy and if the result is completely bad, the best one.
My approach is based on a manual evolutionary strategy to select and derive the final model from potentially strong candidates. This is similar to real plant and animal selection.
In your question, you said that the result is based on the same few models. You are right about this, as well as the fact that all the huge variety of dog breeds is based on several prehistoric wolves, and if you go further into the past, then on one last universal common ancestor (LUCA).
The process of model mixing is very similar or even equivalent to hybridization, which is the basis of the diversity of life.

Therefore, even a few initial models may be enough to get something completely new and unique. This requires going through many generations and some luck.
I can't afford much because "I'm limited by the technology of my time", but the method I use is based on patterns that work in nature.
In the end, I will give a simple explanation on imaginary objects, meaning models.
A=B+C; D1=A+B; D2=A+C; E1=(D1+[A..D1))... , Z1..Zn.
As a result, we get a lot of offsprings that are different from the originals (B and C). More complex the objects and methods of hybridization, the greater the diversity space in the distant offsprings (Z1..Zn).
Of course, it is necessary to check, select the best for reproduction, simulate mutations and reject degenerations.
As a result, you get the perfect result - my model (joke).

Of course, merge without final fine-tune training is some kind of randomness game, but the world is full of randomness and they can be controlled.
I hope you are satisfied with my explanations.

Вижу вы русскоговорящий, по этому позволю ответить вам на родном-могучем, а то устала излагать мысли на английском, часто теряю много смысла из-за перевода.
Вообще решение интересное, так сказать взболтать, но не смешивать. Я часто ловлю себя на том, что современные модели, что 3я Ллама, что Мистраль потеряли - человечность. В них тонна синтетических данных (причем судя по поведению и "любимым фразочкам" датасет общий), и я уже не ловлю того эффекта "живого" общения как с моделями на 2й Лламе.
Про мержи и тьюны Немо вообще смешно говорить, я кажется их лексикон наизусть выучила за пару месяцев регулярного взаимодействия. Такого я ни на одной модели 2йЛламы не чувствовала, хотя более полугода сидела на МифоМаксе от Грифа, а потом уползла на его более развратную версию от Унди95 MLewd-ReMM-L2-Chat-20B, который и по сей день считаю шикарной моделью, при всей ее тупости временами.
Те модели что вы взяли для слияния определенно хороши, я бы посоветовала взять еще для химической реакции модель от:

  1. Грифа - Пантеон, у нее очень глубокое мышление и рефлексия на старые сообщения в чате.
  2. Фиолотовые сумерки от Эпикулюса, она просто хороша в РП, не зря у нее столько скачиваний, плюсом знание русского, хотя и очень скудное.
    Остальные модели я так или иначе выдела в ваших слияниях, либо в тех моделях, которые вы использовали как основы для слияния.

Меня, как девушку, немного расстраивает то поведение моделей которое они показывают изображая мужских персонажей. Мы по факту имеет 3 типа личности: нытик вечно что то просящий от пользователя как щенок, общечеловек больше в общении похожий на бревно, ну и на сладкое сексуальный террорист который об пользователя вытирает ноги и матерится через слово. И проблема в том что большинство моделей на Мистраль НЕМО при перегенерации ответа начинают просто гонять 3 этих архетипа по кругу, совершенно насрав на данные в карточке и превращая условного милого парня и матерящееся чмо. С женскими героинями все проще, там видимо набор данных лучше и реально можно увидеть и ехидную стервочку, и милую скромняшку. Как написал один человек на Реддите, современные модели легко сделают вам послушного фем-бота, а если хотите характера идите к старым моделям. А еще судя по некоторым веткам многие авторы просто боятся добавлять в модели более откровенный контент как делали это ранее. Если говорить про ЕРП, то если Немо изображает мужчину, у нее 6 базовых поведений на любом тьюне, это ужасно... ты этому вообще не веришь, даже лексика одна и та же. Я понимаю что я разочаровываюсь в ЛЛМ все больше и больше.
Недавно решила попробовать пообщаться с 3,1 Ллама Гермес 405б , каково же было мое разочарование когда я поняла, что она по факту от НЕМО отличается только чуть большими знаниями и набором слов, а паттерны поведения и реакции - просто один в один, даже выражения одни и те же. тихо плачу в углу.
Мои поиски идеальной модели с более чем 16к контекста, это как анекдот про мышей, которые плакали и кололись, но продолжали есть кактус.

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

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

Про 405B и вообще любые огромные сети могу сказать, что они в большей части не нужны. Раньше, казалось, что размер сети имеет значение, думали раз маленькая может что-то, то огромная превзойдёт её во всём. Она то может быть её и превзошла бы, но вот обучить её так почти невозможно. Для такой сети многие задачи маленькие, а это довольно базовая проблема. Если задача меньше сети - она будет её не понимать, а заучивать. Конечно, разными трюками вроде дропа компонентов сети её можно обучить по типу маленькой, только и получишь ту же маленькую сеть в огромном корпусе, которая бонусом слышала про всё на свете и имеет отличную память. Думаю, что время 405B+ сетей придёт, но им нужна особенная архитектура.

Я имею больше опыта с моделями txt-img, они тоже имеют проблемы с пониманием и выполнением того, что от них требуется. Они зацикливаются на некоторых спорных моментах базового датасета, стремясь воссоздать его, но сложный мерж, когда модель частично ломается и его дальнейший агрессивный файнтюн дают весьма интересные результаты. Сравнение не идеальное, всё-таки они немного иначе устроены, но думаю, что и с llm подобный метод может сработать. Конечно, датасет для файнтюна должен быть уникальным и даже зацикленным на тех моментах, которые нужно привить модели. Обучаемая же модель уже должна иметь нужные наклонности. Пока я экспериментирую с моделями, но думаю, что подходящие кандидаты будут созданы. Всё-таки тут есть талантливые люди и их работы хороши.

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

Возник вопрос, а какой формат запроса в результате у ваших слияний? ЧатМЛ, Метрам, Мистраль, Альпака... или из разряда как повезет? У вас в слияниях есть модели где авторы использовали все возможные форматы, так какой же приоритетен?

All of this is very interesting, comparing model merging to literal evolution! On a side note, have you considered using the TheDrummer's UnslopNemo (https://huggingface.co/TheDrummer/UnslopNemo-12B-v4.1) for a merge at some point?

Возник вопрос, а какой формат запроса в результате у ваших слияний? ЧатМЛ, Метрам, Мистраль, Альпака... или из разряда как повезет? У вас в слияниях есть модели где авторы использовали все возможные форматы, так какой же приоритетен?

Я посмотрел разные виды chat templates и выбрал те, с которыми модель работает. Какой из них лучше я не знаю, но первый в списке был унаследован от одной из оригинальных моделей и используется по умолчанию. Если есть более крутой вариант, не стесняйтесь написать о нём. Отмечу, что предположение о некоторой случайности и неизвестности итогового формата имеет место быть верным, но по предварительным тестам, она приемлемо работает с несколькими разными.

Original :

{%- for message in messages %}
    {%- if message['role'] == 'system' -%}
        {%- if message['content'] -%}
            {{- message['content'] + '\n\n' -}}
        {%- endif -%}
        {%- if user_bio -%}
            {{- user_bio + '\n\n' -}}
        {%- endif -%}
    {%- else -%}
        {%- if message['role'] == 'user' -%}
            {{- name1 + ': ' + message['content'] + '\n'-}}
        {%- else -%}
            {{- name2 + ': ' + message['content'] + '\n' -}}
        {%- endif -%}
    {%- endif -%}
{%- endfor -%}

Qwen :

{% for message in messages %}
  {% if loop.first and messages[0]['role'] != 'system' %}
    {{ '<|im_start|>system\nYou are a helpful assistant<|im_end|>\n' }}
  {% endif %}
  
  {{'<|im_start|>' + message['role'] + '\n' + message['content'].strip() }}
  
  {% if (loop.last and add_generation_prompt) or not loop.last %}
    {{ '<|im_end|>' + '\n'}}
  {% endif %}
{% endfor %}

{% if add_generation_prompt and messages[-1]['role'] != 'assistant' %}
  {{ '<|im_start|>assistant\n' }}
{% endif %}

ChatML :

{% for message in messages %}
    {{'<|im_start|>' + message['role'] + '\n' + message['content'].strip() + '<|im_end|>' + '\n'}}
{% endfor %}

{% if add_generation_prompt %}
    {{ '<|im_start|>assistant\n' }}
{% endif %}

OpenChat 3.5 :

{{ bos_token }}
{% for message in messages %}
  {{ 'GPT4 Correct ' + message['role'].title() + ': ' + message['content'].strip() + '<|end_of_turn|>'}}
{% endfor %}

{% if add_generation_prompt %}
  {{ 'GPT4 Correct Assistant:' }}
{% endif %}

OpenChat 3.6 :

{{ bos_token }}
{% for message in messages %}
  {% if message['role'] in ['user', 'assistant'] %}
    {% set content = '<|start_header_id|>GPT4 Correct ' + message['role'].title() + '<|end_header_id|>\n\n' + message['content'] | trim + '<|eot_id|>' %}
  {% elif message['role'] == 'system' %}
    {% set content = '<|start_header_id|>System<|end_header_id|>\n\n' + message['content'] | trim + '<|eot_id|>' %}
  {% else %}
    {{ raise_exception('Only user, assistant and system roles are supported!') }}
  {% endif %}
  
  {{ content }}
{% endfor %}

{% if add_generation_prompt %}
  {{ '<|start_header_id|>GPT4 Correct Assistant<|end_header_id|>\n\n' }}
{% endif %}

Phi-3 :

{{ bos_token }}
{% for message in messages %}
    {% if (message['role'] == 'system') %}
        {{'<|system|>' + '\n' + message['content'].strip() + '<|end|>' + '\n'}}
    {% elif (message['role'] == 'user') %}
        {{'<|user|>' + '\n' + message['content'].strip() + '<|end|>' + '\n' + '<|assistant|>' + '\n'}}
    {% elif message['role'] == 'assistant' %}
        {{message['content'].strip() + '<|end|>' + '\n'}}
    {% endif %}
{% endfor %}"

Zephyr-gemma :

{% if messages[0]['role'] == 'user' or messages[0]['role'] == 'system' %}
  {{ bos_token }}
{% endif %}

{% for message in messages %}
  {{ '<|im_start|>' + message['role'] + '\n' + message['content'] + '<|im_end|>' + '\n' }}
{% endfor %}

{% if add_generation_prompt %}
  {{ '<|im_start|>assistant\n' }}
{% elif messages[-1]['role'] == 'assistant' %}
  {{ eos_token }}
{% endif %}"

All of this is very interesting, comparing model merging to literal evolution! On a side note, have you considered using the TheDrummer's UnslopNemo (https://huggingface.co/TheDrummer/UnslopNemo-12B-v4.1) for a merge at some point?

I am glad that my nightly reflections on the connection between evolution and the merge of models were of interest to you. I am inspired by such intertwining of complex processes of nature with the fields of science, technology and art. Regarding TheDrummer/UnslopNemo-12B-v4.1, I can say that it will be interesting to watch it. Now I have one 8B model unfinished, but after that I plan 12B.

This is not the system prompt in the screenshot. This is a “prom[p]t” for a language model along the lines of chatgpt/cloud sonnet/gemeni -- to create a “base” as a sort of “core” under the “character card” to allow for the fullest and most interesting disclosure of personality. Akin to food for the language model, on the basis of which it will already be wagering.

Ah, so it's like an add-in within the final prompt that serves as an extra guide for the model, akin to SillyTavern's Author's Note that's inserted below the "character card" ? Couldn't you integrate this with the system prompt, like it's done in https://huggingface.co/Virt-io/SillyTavern-Presets/tree/main ? Or is the depth in the prompt important to reinforce your points in a more thorough manner?

This is not the system prompt in the screenshot. This is a “prom[p]t” for a language model along the lines of chatgpt/cloud sonnet/gemeni -- to create a “base” as a sort of “core” under the “character card” to allow for the fullest and most interesting disclosure of personality. Akin to food for the language model, on the basis of which it will already be wagering.

Ah, so it's like an add-in within the final prompt that serves as an extra guide for the model, akin to SillyTavern's Author's Note that's inserted below the "character card" ? Couldn't you integrate this with the system prompt, like it's done in https://huggingface.co/Virt-io/SillyTavern-Presets/tree/main ? Or is the depth in the prompt important to reinforce your points in a more thorough manner?

This is the instruction manual by which the big language models will build me a character according to my wishes, and I already in the process edit this or that. Through n number of iterations.
In the end, I get a ready-made “persona” or “character card”, in addition to the basic “system hint”. I've added both of them above in my post in the form of screenshots.
The “persona” is the brain of the character, ala reference. And “system prompt” is what determines the game/chat format. It tells what should be in the generated answers and what should not, how/why/why.

This comment has been hidden

This is the instruction manual by which the big language models will build me a character according to my wishes, and I already in the process edit this or that. Through n number of iterations.
In the end, I get a ready-made “persona” or “character card”, in addition to the basic “system hint”. I've added both of them above in my post in the form of screenshots.
The “persona” is the brain of the character, ala reference. And “system prompt” is what determines the game/chat format. It tells what should be in the generated answers and what should not, how/why/why.

Ah, I finally understand. It seems there was a misunderstanding on which layer of the process we're on. Which final format do you use for the "character card"?

This is the instruction manual by which the big language models will build me a character according to my wishes, and I already in the process edit this or that. Through n number of iterations.
In the end, I get a ready-made “persona” or “character card”, in addition to the basic “system hint”. I've added both of them above in my post in the form of screenshots.
The “persona” is the brain of the character, ala reference. And “system prompt” is what determines the game/chat format. It tells what should be in the generated answers and what should not, how/why/why.

Ah, I finally understand. It seems there was a misunderstanding on which layer of the process we're on. Which final format do you use for the "character card"?

the one in the screenshot with “narrative profile {char}”

the one in the screenshot with “narrative profile {char}”

Have you considered using P-List + AliChat, as is recommended in https://huggingface.co/Virt-io/SillyTavern-Presets#character-cards ? I think that plain text for "character cards" has the issue of wasting context while also not nailing the personality down properly at times. P-List gives specific traits that need to be named (e. g. physical traits) while AliChat illustrates the character in-action (most basic version is probably an interview on Life Story, Appearance and Personality). I do understand that a P-List list seems "dry", but it's efficient in providing the necessary info so the focus can be on the AliChat "interview" and the actual context. I do think your approach is quite poetic tho :)

the one in the screenshot with “narrative profile {char}”

Have you considered using P-List + AliChat, as is recommended in https://huggingface.co/Virt-io/SillyTavern-Presets#character-cards ? I think that plain text for "character cards" has the issue of wasting context while also not nailing the personality down properly at times. P-List gives specific traits that need to be named (e. g. physical traits) while AliChat illustrates the character in-action (most basic version is probably an interview on Life Story, Appearance and Personality). I do understand that a P-List list seems "dry", but it's efficient in providing the necessary info so the focus can be on the AliChat "interview" and the actual context. I do think your approach is quite poetic tho :)

Who would know any better. I used to write in json format with characteristics, then I used ocean/mbti/ennogram - and now I write through narrative profile.

It eats a lot of context, yes, especially in Russian... almost twice as much as in English. But that's enough for me. My characters “weigh” under 1.3-1.5 thousand in English, and in Russian up to 2.5 max. Normal, I think.

There are considerations of this format: language models work like machines trying to finish a text and the “eternal context”, which includes system prompts/scenario/character card and so on, have a strong influence on how the model will generate its answer. I've noticed that if you stylistically color the text in the “character card”, say: make it in the format of an interlude or insert the character's lines in double quotes like “Yo! Men! How the fuck are you? I'm so...tired” - then the character has a ‘strong voice’ or a kind of ‘character’ or something...he will often show patterns of his speech from the examples. And the same description by ocean or mbti, though models understand them, but as if they don't use them

I don't know.) We should do blind studies with control groups :D

Even just what time and in what person the “character card” is written in already seems to have an impact.

I make my “character cards” as close to the “system prompt” as possible. To have a benchmark of how I want the language model to write to me.

Who would know any better. I used to write in json format with characteristics, then I used ocean/mbti/ennogram - and now I write through narrative profile.

It eats a lot of context, yes, especially in Russian... almost twice as much as in English. But that's enough for me. My characters “weigh” under 1.3-1.5 thousand in English, and in Russian up to 2.5 max. Normal, I think.

There are considerations of this format: language models work like machines trying to finish a text and the “eternal context”, which includes system prompts/scenario/character card and so on, have a strong influence on how the model will generate its answer. I've noticed that if you stylistically color the text in the “character card”, say: make it in the format of an interlude or insert the character's lines in double quotes like “Yo! Men! How the fuck are you? I'm so...tired” - then the character has a ‘strong voice’ or a kind of ‘character’ or something...he will often show patterns of his speech from the examples. And the same description by ocean or mbti, though models understand them, but as if they don't use them

I don't know.) We should do blind studies with control groups :D

Even just what time and in what person the “character card” is written in already seems to have an impact.

I make my “character cards” as close to the “system prompt” as possible. To have a benchmark of how I want the language model to write to me.

Опять же вопрос в модели, есть те на которые влияет тип написания карточки и чем более цветасто и повествовательно описан герой, тем более живой и интересный язык использует модель в ответах. Но есть тем модели которым наплевать на это и они цепляются к конкретным словам, а не к общей подаче текста. Например старые модели Мистраля, они чувствительны ко всему тексту, у меня есть карточка героя где автор в шутку написал: [Think of {{char}} as a mix of Deadpool's insanity with a sprinkle of dumpster raccoon vibes, a wild card. {{char}} has this tiny (huge) habit of stealing stuff. Is he broke? Nah, he's just a kleptomaniac, def doing it for the thrill. Doesn't need what he steals, but seeing the look on one's face? Priceless. Boy does his moral compass spin. One sec he's yoinking one's stuff, next he's like, "Hold up, gotta help granny cross the road, brb!". Consistency? Who's she?] Вы бы видели что творили с этим кратким описанием личности старые модели, я смеялась до слез. Сейчас такое чувство что они его вообще не замечают, либо не понимают.

Sign up or log in to comment