Введение
В прошлых обзорах я исследовал, как различные большие языковые модели (LLM) и эмбеддинги влияют на качество ответов по юридическим документам. Основные тесты включали различные модели для RAG-задачи:
Большой тест GPT4, GPT3.5, YandexGPT, GigaChat, Saiga в RAG-задаче. Часть 1
Большой тест GPT4, GPT3.5, YandexGPT, GigaChat, Saiga в RAG-задаче. Часть 2/2
Оценка качества ответов производилась вручную экспертами, что придало исследованию практическую значимость. Одним из ключевых выводов было то, что значительную роль в доле качественных ответов играла модель, создававшая первичные эмбеддинги документа. Хороший эмбединг придавал больше роста в качестве, чем хороший LLM.
Что такое эмбеддинг
Эмбеддинг - что числовое представление текста в виде вектора (набора цифр), позволяя текстам, близким по смыслу, быть близкими и математически. Это обеспечивает поиск по метаматематике, а не по ключевым словам.
Когда мой хороший знакомый, админ канала "Технозаметки Малышева", опубликовал заметку о поиске афоризмов и цитат с помощью эмбеддинга Salesforce/SFR-Embedding-Mistral, я увидел в этом прекрасную возможность оценить качество моделей, которые появились за последние четыре месяца, и сравнить их с базовой моделью ai-forever/ruBert-large, которая использовалась в первых обзорах.
OpenAi анонсировал модели text-embedding-3-large, text-embedding-3-small утверждая, что они лучше чем прошлая модель. Также Microsoft анонсировал модель E5 intfloat/multilingual-e5-large.
Это сравнение поможет понять, насколько эффективнее новые модели обрабатывают тексты по сравнению с уже известным. Афоризмы, которые часто содержат метафоры и глубокие смыслы, являются отличным материалом для такой проверки.
Мы будем искать афоризмы, которые отвечают на извечный вопрос: В чем сила?
А в качестве бонуса я проведу сравнение трех моделей на примере рабочей задачи по классификации текста. Это даст возможность оценить практическую ценность моделей в реальных условиях работы. Ведь практические выводы всегда важнее теории, не так ли?
Превращаем набор 300+ афоризмов в вектор и ищем силу
В качестве базы для поиска я скормил в свой рабочий фреймворк список из 300+ афоризмов. Был сделано 6 слепков этого набора, используя разные модели токенайзеров:
text-embedding-ada-002
text-embedding-3-large
text-embedding-3-small
intfloat/multilingual-e5-large
ai-forever/ruBert-large
ai-forever/sbert_large_mt_nlu_ru
Salesforce/SFR-Embedding-Mistral(по итогу я выключил его из списка из-за того, что (1) предложение нужно правильно готовить, более сложно, чем e5 (2) он кушал неоправданно много памяти более 26 ГБ. )
Для каждого слепка я задавал один и тот же вопрос. Ответы представлены по мере убывания "близости". Близость рассчитывалась через косинус. Усреднение эмбедингов всех токенов через mean.
"В чем сила?"
text-embedding-ada-002 |
text-embedding-3-large |
text-embedding-3-small |
Сила в Ньютонах! ? |
Сила в Ньютонах! ? |
Сила в Ньютонах!? |
Где тонко, там и рвется. Где толсто, там и наслаивается. ? |
Тень Чака Норриса сминает все, на что падает. ? |
Где тонко, там и рвется. Где толсто, там и наслаивается.? |
Попытка — не пытка, а спрос — не беда. |
Где тонко, там и рвется. Где толсто, там и наслаивается. ? |
Палка о двух концах: туда и сюда бьет. |
Слово - не воробей. Вообще ничто не воробей, кроме самого воробья. |
От работы кони дохнут, а люди — крепнут.? |
Не завидуй тому, кто силен и богат, За рассветом всегда наступает закат. С этой жизнью короткою, равною вдоху, Обращайся, как с данной тебе напрокат. ? |
Старость не радость, сядешь — не встанешь, побежишь — не остановишься. |
Никогда не сдавайтесь, идите к своей цели! А если будет сложно – сдавайтесь. |
Жи-ши пиши от души. |
Пьяному море по колено, а лужа — по уши. |
В здоровом теле здоровый дух — редкая удача. |
Тише едешь – дальше будешь от того места, куда едешь. |
2/6 |
4/6 |
3/6 |
intfloat/multilingual-e5-large |
ai-forever/ruBert-large |
ai-forever/sbert_large_mt_nlu_ru |
Сила в Ньютонах!? |
Сила в Ньютонах!? |
Сила в Ньютонах!? |
Делай, как надо. Как не надо, не делай. ? |
Дело мастера боится, а иной мастер — дела. |
Тень Чака Норриса сминает все, на что падает. ? |
Никогда не сдавайтесь, идите к своей цели! А если будет сложно – сдавайтесь. |
Слово - не воробей. Вообще ничто не воробей, кроме самого воробья. |
Рука руку моет, да обе свербят. |
От работы кони дохнут, а люди — крепнут.? |
Первый парень на деревне, а деревня в два двора. |
Горбатого могила исправит, а упрямого — дубина. |
Где тонко, там и рвется. Где толсто, там и наслаивается. ? |
Один в поле не воин, а путник. |
Чак Норрис может ударить циклопа между глаз? |
Запомни: всего одна ошибка – и ты ошибся.? |
Гол как сокол, а остер как топор. |
Расти большой, да не будь лапшой, тянись верстой, да не будь простой. ? |
5/6 |
1/6 |
4/6 |
? - я отметил те афоризмы и цитаты, которые на мой взгляд были наиболее близки к запросу "В чем сила?". Оценка субъективная.
Кто победил и какие выводы?
На первом месте безусловно Чак Норис. Он вне конкуренции.
По остальным выводы следующие:
text-embedding-3-large безусловно лучший токенайзер чем прошлая версия text-embedding-ada-002. Small находится по-середине. Всё абсолютно так, как они заявляют официально
ai-forever/ruBert-large - модель старая и на последнем месте. Что не удивительно.
Очень порадовал ai-forever/sbert_large_mt_nlu_ru, мой основной токенайзер в проектах, а в лидеры вышел intfloat/multilingual-e5-large.
В целом достаточно показательно, но к сожалению запросы в intfloat/multilingual-e5-large нужно готовить, а именно добавлять "query: " к каждой строке, что скорее всего потребует переделки текущего кода. Можно и без неё, но качество тогда 4/6.
А как бы Вы оценили результат?
Теперь попробуем сделать классификационную модель
Афоризмы - афоризмами, а насколько видно отличие токенайзера в задачах классификации?
У меня есть рабочий датасет на 15000 примеров по 30 классам (равномерно). 20% на валидацию, 80% на обучение. Создадим три модели, на трех разных токенайзеров и посмотрим validation _ accuracy, т.е. сколько % из валидационной выборки оказалось верно угаданным.
Черный график точности - intfloat/multilingual-e5-large
Красный - ai-forever/sbert_large_mt_nlu_ru
Синий - ai-forever/ruBert-large
Прирост качества на intfloat/multilingual-e5-large меня действительно поразил, в то время как Bert модели показали одинаковую результативность.
Да, общий процент % попадания низкий, но это особенность датасета. Там были очень размытые границы между классами.
Из минусов intfloat/multilingual-e5-large :
Достаточно много кушает памяти (более 6 гб)
Ограничение по размеру предложения: 512 символов.
Поэтому на коротких предложениях - intfloat/multilingual-e5-large действительно отличный вариант.
odmin227
Было бы интересно собрать какие нибудь большие тесткейсы и на них статистику посмотреть эмбеддингов!
потому что кажется что на небольших кейсах есть предвзятость и сдвиги
dvgureev Автор
Вы имеете ввиду длинные тексты?
С этим проблема. Локальные модели очень ограниченные в размере текста, который они могут превратить в вектор.
text-large-03 может относительно много. Если не ошибаюсь 4096.
Bert 712 символов. intfloat/multilingual-e5-large - вообще 512.
Поэтому тут очень специфическое применение.
odmin227
не я имею ввиду собрать различные задачи например для RAG, пособирать промты всякие и тест кейсы для этого и провести исследование на (хотя бы 100+ примерах) для русского, английского языка, … Для задач на понимание научных статей, блогов, новостей и тд. И посмотреть какие вообще эмбеды где лучше делают репрезентации.
Думаю что вполне может потянуть на небольшую научную статью
dvgureev Автор
Возможно, но я тут больше как практик, поэтому на сегодняшний день наиболее практичным мне кажется исходить из домено-ориентированного подхода.
Т.е. делать файнтюн эмбединга под конкретную область знаний. Но это не решит вопрос (увы) задач поиска ответа на вопросы. К сожалению "традиционный" подход: нарезать на куски, сделать вектор и потом по ним искать имеет ограничения методологические. Более 80-85% точных ответов сложно получить.