Сегодня в чатике мы обсуждали тему преобразования текстовой информации в граф знаний.
Используя свой опыт в текстовом чанкинге, я решил провести эксперимент, взял большой текстовый документ, нарезал его на семантически связанные чанки, которые в моём случае выступают в роли узлов графа.
Для вычисления рёбер между узлами из чанков были извлечены эмбеддинги (векторные представления), после чего определяется косинусное расстояние между всеми узлами и фильтруются только те у которых сходство >= 0.9
Полученный граф на картинке.
Ссылка на юпитер-блокнот тут.
Используя свой опыт в текстовом чанкинге, я решил провести эксперимент, взял большой текстовый документ, нарезал его на семантически связанные чанки, которые в моём случае выступают в роли узлов графа.
Для вычисления рёбер между узлами из чанков были извлечены эмбеддинги (векторные представления), после чего определяется косинусное расстояние между всеми узлами и фильтруются только те у которых сходство >= 0.9
Полученный граф на картинке.
Ссылка на юпитер-блокнот тут.
Всю прошлую неделю занимался вопросом сбора Parallel Corpora датасета специализированной технической тематики.
Моя идея крайне проста, хочу обучить модель-эмбеддер которая бы могла:
a) участвовать в пайплайне индексации чанков из текстов для векторного поиска, указанные тексты представляют из себя солянку документации на разные темы на русском и английском языках вперемешку
б) пользователь передавая фразы на русском или английском находил в векторной базе то что ему надо
Иными словами, чтобы можно было сказать "how create a helm chart?" или "как создать хельм чарт?", а векторный поиск вернул одни и те же чанки.
На данный момет мои эксперименты привели меня к следующей схеме:
1) берём базовую sentence transformer модель, в моём случае это
2) дообучаем её на домене технической литературы, на данный момент я собрал датасет только про PHP (2 тысячи пар текста), но хочу ещё сделать датасет по Python, Docker, Kubernets и GoLang
3) полученную модель обучить на Parallel Corpora из пар English<>Russian (сравнение выполняю через MSELoss)
Промежуточный результат на картинках, пока что всё очень плохо :)
Моя идея крайне проста, хочу обучить модель-эмбеддер которая бы могла:
a) участвовать в пайплайне индексации чанков из текстов для векторного поиска, указанные тексты представляют из себя солянку документации на разные темы на русском и английском языках вперемешку
б) пользователь передавая фразы на русском или английском находил в векторной базе то что ему надо
Иными словами, чтобы можно было сказать "how create a helm chart?" или "как создать хельм чарт?", а векторный поиск вернул одни и те же чанки.
На данный момет мои эксперименты привели меня к следующей схеме:
1) берём базовую sentence transformer модель, в моём случае это
Snowflake/snowflake-arctic-embed-xs
так как я хочу потому использовать её в ollama2) дообучаем её на домене технической литературы, на данный момент я собрал датасет только про PHP (2 тысячи пар текста), но хочу ещё сделать датасет по Python, Docker, Kubernets и GoLang
3) полученную модель обучить на Parallel Corpora из пар English<>Russian (сравнение выполняю через MSELoss)
Промежуточный результат на картинках, пока что всё очень плохо :)
Pavel Zloi
Всю прошлую неделю занимался вопросом сбора Parallel Corpora датасета специализированной технической тематики. Моя идея крайне проста, хочу обучить модель-эмбеддер которая бы могла: a) участвовать в пайплайне индексации чанков из текстов для векторного поиска…
В общем надоело возиться с моделями семейства snowflake-arctic-embed так как все мои эксперименты с этими моноязыковыми моделями (всех доступных размерностей) не давали каких-то заметных результатов, поэтому решил отойти от концепции совместимости с ollama и попробовал обучить мультиязыковую google-bert/bert-base-multilingual-uncased.
Для этого взял датасет большой (Helsinki-NLP/opus_books, выборка en-ru, сплит train) на 17к пар, подмешал в него мой вычищенный датасет про PHP на 2к пар и запустил обучение в 20 эпох (на всё про всё ушло примерно 40 минут).
После первых 5 эпох мультиязывая bert показала результаты лучше, чем любая snowflake-arctic-embed, nomic-embed-text или mxbai-embed-large.
Ну короче вывод очевиден: надо брать мультиязыковую модель и притягивать русские фразы к английским через MSELoss.
Прикладываю скрин с результатами тестов, по центру эмбеддинги похожих фраз на разных языках начали "кружиться в вальсе", чего не наблюдается у модели без дообучения (правый график). Результаты ручного теста первым постом под этим сообщением.
PS. Датасет evilfreelancer/opus-php-en-ru-cleaned содержит в себе сплит train (на 1.6k строк) и eval на 100 строк.
PPS. Бай зе вей, между делом научился через matplotlib рисовать несколько графиков на одной картинке.
Для этого взял датасет большой (Helsinki-NLP/opus_books, выборка en-ru, сплит train) на 17к пар, подмешал в него мой вычищенный датасет про PHP на 2к пар и запустил обучение в 20 эпох (на всё про всё ушло примерно 40 минут).
После первых 5 эпох мультиязывая bert показала результаты лучше, чем любая snowflake-arctic-embed, nomic-embed-text или mxbai-embed-large.
Ну короче вывод очевиден: надо брать мультиязыковую модель и притягивать русские фразы к английским через MSELoss.
Прикладываю скрин с результатами тестов, по центру эмбеддинги похожих фраз на разных языках начали "кружиться в вальсе", чего не наблюдается у модели без дообучения (правый график). Результаты ручного теста первым постом под этим сообщением.
PS. Датасет evilfreelancer/opus-php-en-ru-cleaned содержит в себе сплит train (на 1.6k строк) и eval на 100 строк.
PPS. Бай зе вей, между делом научился через matplotlib рисовать несколько графиков на одной картинке.
Forwarded from LightAutoML framework (Alex Ryzhkov)
Коллеги, всем доброго дня!
Если вы еще не успели ткнуть ⭐️ на гитхабе на https://github.com/sb-ai-lab/LightAutoML, то самое время это сделать.
Наша глобальная текущая цель - собрать 1000 звезд и попасть в окружение Kaggle на постоянной основе!
Будем рады, если вы нас в этом поддержите ❤️
Если вы еще не успели ткнуть ⭐️ на гитхабе на https://github.com/sb-ai-lab/LightAutoML, то самое время это сделать.
Наша глобальная текущая цель - собрать 1000 звезд и попасть в окружение Kaggle на постоянной основе!
Будем рады, если вы нас в этом поддержите ❤️
GitHub
GitHub - sb-ai-lab/LightAutoML: Fast and customizable framework for automatic ML model creation (AutoML)
Fast and customizable framework for automatic ML model creation (AutoML) - sb-ai-lab/LightAutoML
Утро доброе!
Сижу перебираю свои старые заметки, увидел одну про слой сжатия эмбеддингов, в ней я описал пример слоя сжимающего данные для последующей передачи в графовую нейросеть, к сожалению тогда мой план не сработал и сеть стала работать хуже.
Ну и так вот, читаю эту пометку и пришла новая мысля, а что если сжимать не внутри модели, а скажем на входе? (присылать в модель уже сжатые данные)
Скажем берём текста 1мб, сжимаем его через tar.gz дальше преобразуем и отправляем на вход модели.
Правда не понятно как разжимать, если про LLM модели говорить. Но для моделей типа эмбеддеров подобный подход вероятно позволит в 512 токенов укладывать в разы больше данных, однако, тут нужен будет кастомный токенизатор, чтобы бинарные последовательности в токены преобразовывать.
В общем мне любопытно попадались ли кому публикации на тему сжатия данных передаваемых в нейросети? Прежде всего любопытно это в контексте сетей работающих с естественным языком.
Сижу перебираю свои старые заметки, увидел одну про слой сжатия эмбеддингов, в ней я описал пример слоя сжимающего данные для последующей передачи в графовую нейросеть, к сожалению тогда мой план не сработал и сеть стала работать хуже.
Ну и так вот, читаю эту пометку и пришла новая мысля, а что если сжимать не внутри модели, а скажем на входе? (присылать в модель уже сжатые данные)
Скажем берём текста 1мб, сжимаем его через tar.gz дальше преобразуем и отправляем на вход модели.
Правда не понятно как разжимать, если про LLM модели говорить. Но для моделей типа эмбеддеров подобный подход вероятно позволит в 512 токенов укладывать в разы больше данных, однако, тут нужен будет кастомный токенизатор, чтобы бинарные последовательности в токены преобразовывать.
В общем мне любопытно попадались ли кому публикации на тему сжатия данных передаваемых в нейросети? Прежде всего любопытно это в контексте сетей работающих с естественным языком.
Сегодня состоялся релиз ManticoreSearch версии 6.3, одной из ключевых особенностей новой версии является официальное добавление векторного поиска.
Помимо этого сегодня ещё был выдан аппрув моему PR в проект LangChain который добавляет поддержку Мантикоры в качестве движка векторного поиска.
PS. Думаю после работы ещё поправлю тесты в PR, чтобы всё точно было красиво.
Помимо этого сегодня ещё был выдан аппрув моему PR в проект LangChain который добавляет поддержку Мантикоры в качестве движка векторного поиска.
PS. Думаю после работы ещё поправлю тесты в PR, чтобы всё точно было красиво.
GitHub
WIP: community: ManticoreSearch engine added to vectorstore by EvilFreelancer · Pull Request #19117 · langchain-ai/langchain
Description: ManticoreSearch engine added to vectorstores
Issue: no issue, just a new feature
Dependencies: https://pypi.org/project/manticoresearch-dev/
Twitter handle: @EvilFreelancer
Example no...
Issue: no issue, just a new feature
Dependencies: https://pypi.org/project/manticoresearch-dev/
Twitter handle: @EvilFreelancer
Example no...
Pavel Zloi
Сегодня состоялся релиз ManticoreSearch версии 6.3, одной из ключевых особенностей новой версии является официальное добавление векторного поиска. Помимо этого сегодня ещё был выдан аппрув моему PR в проект LangChain который добавляет поддержку Мантикоры…
Кстати PR смерджили, вот пример как использовать ManticoreSearch Engine в качестве VectorStrore через LangChain:
Детали реализации классов ManticoreSearch и ManticoreSearchSettings тут.
from langchain.text_splitter import CharacterTextSplitter
from langchain_community.embeddings import GPT4AllEmbeddings
from langchain_community.vectorstores import ManticoreSearch, ManticoreSearchSettings
from langchain_community.document_loaders import TextLoader
# Подгружаем какие-нибудь документы
loader = TextLoader("../../modules/paul_graham_essay.txt")
documents = loader.load()
# При помощи сплиттера режем на чанки (кусочки)
text_splitter = CharacterTextSplitter(chunk_size=100, chunk_overlap=0)
docs = text_splitter.split_documents(documents)
# (опционально) Добавляем в чанки метаинформацию которую необходимо хранить в базе
for d in docs:
d.metadata = {"some": "metadata"}
# Инициализируем эмбеддинговую модель
embeddings = GPT4AllEmbeddings()
# Инициализируем клиент мантикоры и настройки векторного поиска, после чего заливаем чанки в базу
settings = ManticoreSearchSettings(table="manticoresearch_vector_search_example")
docsearch = ManticoreSearch.from_documents(docs, embeddings, config=settings)
# Выполняем поисковый запрос
query = "Robert Morris is"
docs = docsearch.similarity_search(query)
Детали реализации классов ManticoreSearch и ManticoreSearchSettings тут.
GitHub
WIP: community: ManticoreSearch engine added to vectorstore by EvilFreelancer · Pull Request #19117 · langchain-ai/langchain
Description: ManticoreSearch engine added to vectorstores
Issue: no issue, just a new feature
Dependencies: https://pypi.org/project/manticoresearch-dev/
Twitter handle: @EvilFreelancer
Example no...
Issue: no issue, just a new feature
Dependencies: https://pypi.org/project/manticoresearch-dev/
Twitter handle: @EvilFreelancer
Example no...
Всем привет! Отправил сегодня мой первый PR в проект llama.cpp, в нём я добавил возможность конвертировать BERT-модели расположенные на локальной файловой системе, так как текущая стабильная версия умеет работать лишь с моделями выгруженными на HuggingFace.
GitHub
Feat: Support of converting local models added to `convert-hf-to-gguf-update.py` by EvilFreelancer · Pull Request #7547 · ggerganov/llama.cpp
Description
For one of my projects, I needed to convert a trained BERT model, which was only available on my local filesystem. However, when I attempted the conversion, I encountered an error indic...
For one of my projects, I needed to convert a trained BERT model, which was only available on my local filesystem. However, when I attempted the conversion, I encountered an error indic...
Всем привет!
В моём блоге на Дзен появилась свежая публикация под названием "Как конвертировать модель семейста BERT в формат GGUF?", если вы хотите узнать, как запускать модели-эмбеддеры на слабом железе или эффективно использовать ресурсы сервера, то эта публикация для вас.
Юпитерианский блокнот в котором я сравнил PyTorch к GGUF версии модели ai-forever/sbert_large_nlu_ru
Желаю приятного прочтения!
#zen #gguf #bert #nlp #embedding
В моём блоге на Дзен появилась свежая публикация под названием "Как конвертировать модель семейста BERT в формат GGUF?", если вы хотите узнать, как запускать модели-эмбеддеры на слабом железе или эффективно использовать ресурсы сервера, то эта публикация для вас.
Юпитерианский блокнот в котором я сравнил PyTorch к GGUF версии модели ai-forever/sbert_large_nlu_ru
Желаю приятного прочтения!
#zen #gguf #bert #nlp #embedding
Дзен | Статьи
Как конвертировать модель BERT в формат GGUF?
Статья автора «Pavel Zloi» в Дзене ✍: Чем глубже погружаюсь в тему нейросетей, тем больше разношерстных моделей мне требуется использовать для решения различных задач.
Прочёл с утреца пост который вчера опубликовал Илья Гусев, у меня в целом схожие мысли, кто давно на меня подписан знает, что мой путь в OpenSource начался примерно 8 лет назад одновременно с этим начал вести стримы на Твиче и делал видеоролики на Ютубе, написал множество публикаций в своих блогах, на Хабре и на Дзене, но всё это создавалось беззаветно, из-за люблю к искусству, просто делал и всё.
По моим более чем 100 проектам на GitHub можно проследить, как рос мой скил, как менялись мои вкусы и интересы, как всё глубже я изучал PHP, а после достижения пхпшного дао и множество других языков программирования, видно что начинал я со своих собственных велосипедов, а в последнее время всё чаще участвую в чужих проектах.
Для меня публичная деятельность это возможность научиться чему-то новому так как когда я занимался фрилансом на изучение новых технологий просто не было времени, а на работе часто профессиональная деятельность завязана на сопровождение существующей инфраструктуры и изучать новое просто не входит в обязанности. Плюс мой вклад в OpenSource не раз выручал меня при прохождении разных интервью и поиске заказов и вместо того чтобы отвечать на пошлые вопросы про пупырчатую сортировку чёрно-белых деревянных дней я могу просто показать кусок кода который по нужной теме написал, и беседу уже веду я, а не мой визави.
Плюс во время публичных дискуссий можно кидать ссылки на какие-то свои наработки и публикации, а ещё я часто переиспользую код из своих старых проектов, помимо этого OpenSource научил меня писать хорошую документацию и тестировать свои решения (как говорится в одном древнем меме документация и комментарии в коде это любовные письма самому себе из будущего), ведь часто проекты которые я публикую никому кроме меня не нужны и лежат в неизменном виде годами и если вдруг что-то понадобится можно через тесты, комментарии в коде и документацию быстро найти и исправить нужное.
Короче, не стоит бояться делиться своими наработками, не стоит стесняться своих наработок, не стоит думать что вам удастся на них хоть что-то заработать, денег вам смогут принести, дай Торвальдс, только десятая часть из всех проектов да и то косвенно, а не напрямую :)
По моим более чем 100 проектам на GitHub можно проследить, как рос мой скил, как менялись мои вкусы и интересы, как всё глубже я изучал PHP, а после достижения пхпшного дао и множество других языков программирования, видно что начинал я со своих собственных велосипедов, а в последнее время всё чаще участвую в чужих проектах.
Для меня публичная деятельность это возможность научиться чему-то новому так как когда я занимался фрилансом на изучение новых технологий просто не было времени, а на работе часто профессиональная деятельность завязана на сопровождение существующей инфраструктуры и изучать новое просто не входит в обязанности. Плюс мой вклад в OpenSource не раз выручал меня при прохождении разных интервью и поиске заказов и вместо того чтобы отвечать на пошлые вопросы про пупырчатую сортировку чёрно-белых деревянных дней я могу просто показать кусок кода который по нужной теме написал, и беседу уже веду я, а не мой визави.
Плюс во время публичных дискуссий можно кидать ссылки на какие-то свои наработки и публикации, а ещё я часто переиспользую код из своих старых проектов, помимо этого OpenSource научил меня писать хорошую документацию и тестировать свои решения (как говорится в одном древнем меме документация и комментарии в коде это любовные письма самому себе из будущего), ведь часто проекты которые я публикую никому кроме меня не нужны и лежат в неизменном виде годами и если вдруг что-то понадобится можно через тесты, комментарии в коде и документацию быстро найти и исправить нужное.
Короче, не стоит бояться делиться своими наработками, не стоит стесняться своих наработок, не стоит думать что вам удастся на них хоть что-то заработать, денег вам смогут принести, дай Торвальдс, только десятая часть из всех проектов да и то косвенно, а не напрямую :)
Telegram
Старший Авгур
Мини-пост на ночь.
Всю свою работу, за которую я не получаю деньги, я выкладываю в open source. Так было всегда. Вот, например, мои решения задачек с 1 курса универа 11-летней давности. Были бы и крестики-нолики на Паскале из 9 класса, но я их хостил на…
Всю свою работу, за которую я не получаю деньги, я выкладываю в open source. Так было всегда. Вот, например, мои решения задачек с 1 курса универа 11-летней давности. Были бы и крестики-нолики на Паскале из 9 класса, но я их хостил на…
Возможно не все ещё видели эту призабавнейшую публикацию, но если в двух словах Docker Hub более недоступен с российских IP-адресов.
То что нечто подобное случится я был уверен уже давно, но меня удивляет две вещи: что блокировку включили только сейчас, а ещё более странно, что это ошарашило так много народу. Пора уже понять, товарищи, что как раньше уже никогда не будет, реальность изменилась и надо к новой реальности приспосабливаться.
Но давайте быстро пробежимся по альтернативам которые у нас есть:
- арендуем VPS сервер где-нибудь, поднимаем на нём например Sonartype Nexus (у меня кстати есть видеоролик об этом проекте) и там делаем Docker Proxy как тут описано, который потом по этой инструкции настраиваем на своих тачках;
- ещё можно где-нибудь настроить docker registry в режиме pull through cache;
- Harbor в режиме кеширования Docker контейнеров;
- GitLab Container Registry - данное решение входит в состав поставки GitLab и позволяет проекты расположенные на локальном GitLab собирать в контейнеры и складывать их там же где и исходники, прокси к сожалению не настроить, но как один из вариантов сойдёт;
- Yandex Container Registry - один из сервисов инфраструктуры Yandex Cloud, к сожалению это решение заточенное под приватные облака, но можно сделать свой публичный регистри;
- Cloud(.)ru (в девичестве Сбер Cloud) Artifact Registry - аналогичное яндексовскому решение, приватный регистри который можно сделать публичным;
- Какой-нибудь прокси с сомнительным уровнем безопасности, но смешным названием, через который могут утекать ключики.
Кстати крайне любопытно, что такие большие игроки, как Сбер, Астра, VK, МТС или Яндекс до сих пор не предложили никакой альтернативы Docker Hub акромя решений которые заточены под их облачные платформы или являющиеся просто аналогами GitHub.
#habr #docker
То что нечто подобное случится я был уверен уже давно, но меня удивляет две вещи: что блокировку включили только сейчас, а ещё более странно, что это ошарашило так много народу. Пора уже понять, товарищи, что как раньше уже никогда не будет, реальность изменилась и надо к новой реальности приспосабливаться.
Но давайте быстро пробежимся по альтернативам которые у нас есть:
- арендуем VPS сервер где-нибудь, поднимаем на нём например Sonartype Nexus (у меня кстати есть видеоролик об этом проекте) и там делаем Docker Proxy как тут описано, который потом по этой инструкции настраиваем на своих тачках;
- ещё можно где-нибудь настроить docker registry в режиме pull through cache;
- Harbor в режиме кеширования Docker контейнеров;
- GitLab Container Registry - данное решение входит в состав поставки GitLab и позволяет проекты расположенные на локальном GitLab собирать в контейнеры и складывать их там же где и исходники, прокси к сожалению не настроить, но как один из вариантов сойдёт;
- Yandex Container Registry - один из сервисов инфраструктуры Yandex Cloud, к сожалению это решение заточенное под приватные облака, но можно сделать свой публичный регистри;
- Cloud(.)ru (в девичестве Сбер Cloud) Artifact Registry - аналогичное яндексовскому решение, приватный регистри который можно сделать публичным;
- Какой-нибудь прокси с сомнительным уровнем безопасности, но смешным названием, через который могут утекать ключики.
Кстати крайне любопытно, что такие большие игроки, как Сбер, Астра, VK, МТС или Яндекс до сих пор не предложили никакой альтернативы Docker Hub акромя решений которые заточены под их облачные платформы или являющиеся просто аналогами GitHub.
#habr #docker
Хабр
Docker hub перестал работать в России
При открытии сайта появляется надпись: 403 Forbidden Since Docker is a US company, we must comply with US export control regulations. In an effort to comply with these, we now block all IP addresses...
Всем привет! Спешу поделиться моей новой публикацией "Enbeddrus — обучение независящей от языка эмбеддинг-модели" на Хабр о том как я обучал свою хитрую модель-эмбеддер на параллельном корпусе русских и английских текстов.
В ней вас ожидает разбор существующих решений, краткий рассказ про датасет который я собрал по ходу дела, про то как обучил модель сначала на Domain Adaptation и Parallel Corpora и потом понял, что одного Parallel Corpora будет достаточно.
В общем желаю приятного прочтения!
Ссылки:
- Исходные коды на GitHub
- Датасет evilfreelancer/opus-php-en-ru-cleaned
- Модель evilfreelancer/enbeddrus-v0.1-domain обученная через Domain Adaptation, а потом ещё и через Parallel Corpora
- Модель evilfreelancer/enbeddrus-v0.1 обученная только на Parallel Corpora
- Веса evilfreelancer/enbeddrus GGUF версий моделей выгруженных на серверы Ollama
#habr #nlp #embeddings
В ней вас ожидает разбор существующих решений, краткий рассказ про датасет который я собрал по ходу дела, про то как обучил модель сначала на Domain Adaptation и Parallel Corpora и потом понял, что одного Parallel Corpora будет достаточно.
В общем желаю приятного прочтения!
Ссылки:
- Исходные коды на GitHub
- Датасет evilfreelancer/opus-php-en-ru-cleaned
- Модель evilfreelancer/enbeddrus-v0.1-domain обученная через Domain Adaptation, а потом ещё и через Parallel Corpora
- Модель evilfreelancer/enbeddrus-v0.1 обученная только на Parallel Corpora
- Веса evilfreelancer/enbeddrus GGUF версий моделей выгруженных на серверы Ollama
#habr #nlp #embeddings
Хабр
Enbeddrus — обучение независящей от языка эмбеддинг-модели
Приветствую, хабровчане! Сегодня хочу рассказать вам историю о том, как я обучил простую и компактную независящую от языка (language agnostic) модель-эмбеддер, которая умеет работать с техническими...
Вчера решился таки сделать форк torchtune, точнее мне весь код не нужен, нужна только часть запуска скриптов, примеры рецептов обучения и готовых конфигураций, а ещё базовые шаблоны генерации датасетов. Проект ещё на уровне базового прототипа, но мне есть где подглядывать, спасибо инженерам из f**k.
Так вот, начать мытарства над прототипом я решил с моделей, с которыми было моё первое знакомство в направлении обработки естественного языка (NLP), а именно семейства моделей ruGPT3 (малютки до 1.3B включительно) от Сбера.
И в процессе экспериментов выяснил, что можно запускать инференс и обучение этих классических моделей со включенной flash attention... в общем теперь есть о чём подумать.
Так вот, начать мытарства над прототипом я решил с моделей, с которыми было моё первое знакомство в направлении обработки естественного языка (NLP), а именно семейства моделей ruGPT3 (малютки до 1.3B включительно) от Сбера.
И в процессе экспериментов выяснил, что можно запускать инференс и обучение этих классических моделей со включенной flash attention... в общем теперь есть о чём подумать.
Pavel Zloi
Всем привет! Спешу поделиться моей новой публикацией "Enbeddrus — обучение независящей от языка эмбеддинг-модели" на Хабр о том как я обучал свою хитрую модель-эмбеддер на параллельном корпусе русских и английских текстов. В ней вас ожидает разбор существующих…
Всем привет! Вчера мне прислали небольшой датасет типа Parallel Corpora с парами русского и английского текста на тему GoLang, я его чутка почистил, сгенерировал через ChatGPT валидационные примеры и результат оформил в виде датасета.
Далее запустил обучение модели и получился enbeddrus v0.2
Ссылки:
- Датасет evilfreelancer/golang-en-ru на HuggingFace
- Модель evilfreelancer/enbeddrus-v0.2 на HuggingFace
Помимо этого я запушил на Ollama новые GGUF и тег 0.2, а ещё две версии квантизации модели: v0.2-f16 и v0.2-q8_0
PS. Благодарю пользователя с ником dsphere за помощь со сбором данных для датасета о GoLang!
Далее запустил обучение модели и получился enbeddrus v0.2
Ссылки:
- Датасет evilfreelancer/golang-en-ru на HuggingFace
- Модель evilfreelancer/enbeddrus-v0.2 на HuggingFace
Помимо этого я запушил на Ollama новые GGUF и тег 0.2, а ещё две версии квантизации модели: v0.2-f16 и v0.2-q8_0
PS. Благодарю пользователя с ником dsphere за помощь со сбором данных для датасета о GoLang!
Собрал на коленке крохотный прототип системы MoDA, что расшифровывается как Mixture of Dynamically connected Adapters.
Данный фреймворк можно условно описать как Mixture of Experts (MoE) для бедных, в котором есть только две "головы", да и те от разных моделей.
Суть проекта в следующем:
- у нас есть две небольшие модели, скажем на 7B: первая (router) - обычная function call модель, вторая (socket) - модель к которой на лету подключаются разные LoRA адаптеры
- администратор заранее описывает то какие LoRA адаптеры будут использоваться в файле config.yml, какой формат у чата, что адаптер предлагает и когда его стоит использовать
- далее пользователь делает запрос, он переадресуется роутеру, тот выбирает из списка LoRA адаптеров тот что лучше всего подходит для генерации ответа
- происходит прерывание и демон подключает нужный адаптер к socket модели
- далее на вход модели с подключенным адаптером передаётся запрос пользователя и генерируется ответ
- ответ добавляется в историю чата и отправляется пользователю
В принципе я могу чуть дальше покопать в данном направлении, тут можно скажем не выбирать какую-то конкретную socket модель заранее, а грузить ту что указана в адаптере и по завершению генерации удалять из памяти.
Ещё можно попробовать обучить несколько специализированных адаптеров на разные темы и жонглировать ими на лету.
Можно доработать историю запросов, чтобы данные передавались обратно в роутер и он в свою очередь принимал решение нужно ли сделать ещё один function call или данных уже достаточно для ответа, после чего генерировать ответ.
И уже по тому, что получилось сваять публикацию на Хабр, другой вопрос нужно ли это кому-то и не изобрёл ли я случайно велосипед которому десять лет в обед :)
Данный фреймворк можно условно описать как Mixture of Experts (MoE) для бедных, в котором есть только две "головы", да и те от разных моделей.
Суть проекта в следующем:
- у нас есть две небольшие модели, скажем на 7B: первая (router) - обычная function call модель, вторая (socket) - модель к которой на лету подключаются разные LoRA адаптеры
- администратор заранее описывает то какие LoRA адаптеры будут использоваться в файле config.yml, какой формат у чата, что адаптер предлагает и когда его стоит использовать
- далее пользователь делает запрос, он переадресуется роутеру, тот выбирает из списка LoRA адаптеров тот что лучше всего подходит для генерации ответа
- происходит прерывание и демон подключает нужный адаптер к socket модели
- далее на вход модели с подключенным адаптером передаётся запрос пользователя и генерируется ответ
- ответ добавляется в историю чата и отправляется пользователю
В принципе я могу чуть дальше покопать в данном направлении, тут можно скажем не выбирать какую-то конкретную socket модель заранее, а грузить ту что указана в адаптере и по завершению генерации удалять из памяти.
Ещё можно попробовать обучить несколько специализированных адаптеров на разные темы и жонглировать ими на лету.
Можно доработать историю запросов, чтобы данные передавались обратно в роутер и он в свою очередь принимал решение нужно ли сделать ещё один function call или данных уже достаточно для ответа, после чего генерировать ответ.
И уже по тому, что получилось сваять публикацию на Хабр, другой вопрос нужно ли это кому-то и не изобрёл ли я случайно велосипед которому десять лет в обед :)
Pavel Zloi
Всем привет! Вчера мне прислали небольшой датасет типа Parallel Corpora с парами русского и английского текста на тему GoLang, я его чутка почистил, сгенерировал через ChatGPT валидационные примеры и результат оформил в виде датасета. Далее запустил обучение…
Добавил в репозиторий Enbeddrus результаты валидационных тестов через encodechka, вот какая табличка получилась.
UPD. Получилось выполнить тесты FactRuTask и RudrTask.
UPD. Получилось выполнить тесты FactRuTask и RudrTask.
Любопытнейшую новость прочёл, о том что Яндекс выпустили в OpenSource библиотеку для распределённого обучения моделей, пишут что YaFSDP в среднем на 20% быстрее чем классический FSDP, который используют для акселлерации обучения.
Короче неплохая тема которую пожалуй попробую в моём хобби проектике на базе Saiga и TorchTune для обучения моделек, который я тизерил чуть раньше.
Короче неплохая тема которую пожалуй попробую в моём хобби проектике на базе Saiga и TorchTune для обучения моделек, который я тизерил чуть раньше.
Telegram
Хабр / ML & AI
Яндекс открывает YaFSDP — инструмент для ускорения обучения больших языковых моделей и сокращения расходов на GPU
Сегодня мы выкладываем в опенсорс наш новый инструмент — алгоритм YaFSDP, который помогает существенно ускорить процесс обучения больших языковых…
Сегодня мы выкладываем в опенсорс наш новый инструмент — алгоритм YaFSDP, который помогает существенно ускорить процесс обучения больших языковых…
Всем привет! Прочёл сегодня в блоге OpenAI занятную новость про то, что они приняли отставного генерала и бывшего директора АНБ в совет директоров, он будет советовать всей команде как сделать платформу безопаснее и защитить собранные на серверах OpenAI данные от утечек, комичнее всего то, что это новость в категории блога под названием Safety & Alignment.
В сочетании с другими новостями, которые исходят от компании OpenAI в последнее время есть мнение, что пора уже готовиться к тому, что даже обходные пути перестанут работать и придётся перебираться на отечественные аналоги.
В сочетании с другими новостями, которые исходят от компании OpenAI в последнее время есть мнение, что пора уже готовиться к тому, что даже обходные пути перестанут работать и придётся перебираться на отечественные аналоги.
Openai
OpenAI appoints Retired U.S. Army General Paul M. Nakasone to Board of Directors
Nakasone brings cybersecurity experience to growing Board of Directors; will join the Board’s Safety and Security Committee
Всем привет! Хочу поделиться интересными новостями, которые произошли со мной на поприще нейросетей за прошлую неделю.
Неудачная попытка отправить научную работу
Всю прошлую неделю по вечерам я писал научную работу на тему классификации при помощи языковых моделей (папиру надо было отправить в субботу, чтобы получить фидбэке), но к сожалению я был очень расстроен, когда оказалось, что подтверждение регистрации на сайте OpenReviews для ноунеймов без универа, навроде меня, занимает две недели с момента регистрации. Ну и плюс мою работу так и так бы отклонили, ведь она не похожа ни на что из того что там обычно публикуют (в моей работе есть подробные объяснения технологии и нет формул, плюс у меня скорее исследование о применении уже существующих решений, а не разработка новых).
Но, неудача это тоже результат, в следующий раз буду умнее и подготовлюсь получше :)
Скрипты обучения моделей
Не отпускаю из головы идею написания проекта по обучению больших языковых моделей, да я знаю, что есть saiga/rulm, torchtune, hivemind и прочие крутые проекты, но у них у всех есть "фатальные недостатки", к примеру лично моя гордость это идея различных стратегий обрезки чатов, пока что реализовал только last_message_by_assistant (последнее сообщение всегда от assistant), в планах добавить ещё стратегию из saiga (последнее сообщение без привязки к тому был ли это assistant или user), а ещё посмотреть что там у torchtune (вроде была обрезка по количеству токенов no matter what).
Вторая причина - модели при обучении пытаются отгадать последние несколько токенов (даже если это сообщение отправил user), а я хочу сделать такую loss функцию, которая будет обучать модель генерировать ответ assistant (поэтому мне и нужна была хитрая стратегия фильтрации), получится эдакий упрощённый аналог DPO или около того.
Третья - упомянутые выше системы обучения предлагают обучать модели типа function call через костыли, а мне хочется специализированный формат датасетета конкретно под эту задачу сделать.
Но пока мой проект ещё на стадии пре-альфа MVP.
Начал перебираться на GitFlic
Посмотрел я значит на всякие интересные новости и решил, что похоже пора на всякий случай забэкапить все мои топовые проекты с GitHub на отечественную площадку GitFlic, из недостатков данной площадки - невозможность импорта проектов оптом, поэтому приходится вручную каждый проектик один за одним переносить, но самое важное уже скопировал.
В планах
Допиливать научную работу, надо больше математики и тестов, плюс обучить свою модель, сравнить результаты, ну короче как обычно. Кстати, вроде были какие-то конкурсы научных работ для начинающих учёных, надо будет изучить этот момент и посмотреть получится ли у меня принять участие где-нибудь, может выйграю да вторую видяшку куплю наконец.
Допилить скрипты обучения моделей, в целом у меня уже готова подсистема генерации датасетов в формате чата, и читалка конфигурации из yaml конфига, нужно ещё сделать два сценария обучения моделей: single device и multigpu режим через YaFSDP, а потом уже смотреть что делать дальше.
PS. Всем продуктивной рабочей недели!
Неудачная попытка отправить научную работу
Всю прошлую неделю по вечерам я писал научную работу на тему классификации при помощи языковых моделей (папиру надо было отправить в субботу, чтобы получить фидбэке), но к сожалению я был очень расстроен, когда оказалось, что подтверждение регистрации на сайте OpenReviews для ноунеймов без универа, навроде меня, занимает две недели с момента регистрации. Ну и плюс мою работу так и так бы отклонили, ведь она не похожа ни на что из того что там обычно публикуют (в моей работе есть подробные объяснения технологии и нет формул, плюс у меня скорее исследование о применении уже существующих решений, а не разработка новых).
Но, неудача это тоже результат, в следующий раз буду умнее и подготовлюсь получше :)
Скрипты обучения моделей
Не отпускаю из головы идею написания проекта по обучению больших языковых моделей, да я знаю, что есть saiga/rulm, torchtune, hivemind и прочие крутые проекты, но у них у всех есть "фатальные недостатки", к примеру лично моя гордость это идея различных стратегий обрезки чатов, пока что реализовал только last_message_by_assistant (последнее сообщение всегда от assistant), в планах добавить ещё стратегию из saiga (последнее сообщение без привязки к тому был ли это assistant или user), а ещё посмотреть что там у torchtune (вроде была обрезка по количеству токенов no matter what).
Вторая причина - модели при обучении пытаются отгадать последние несколько токенов (даже если это сообщение отправил user), а я хочу сделать такую loss функцию, которая будет обучать модель генерировать ответ assistant (поэтому мне и нужна была хитрая стратегия фильтрации), получится эдакий упрощённый аналог DPO или около того.
Третья - упомянутые выше системы обучения предлагают обучать модели типа function call через костыли, а мне хочется специализированный формат датасетета конкретно под эту задачу сделать.
Но пока мой проект ещё на стадии пре-альфа MVP.
Начал перебираться на GitFlic
Посмотрел я значит на всякие интересные новости и решил, что похоже пора на всякий случай забэкапить все мои топовые проекты с GitHub на отечественную площадку GitFlic, из недостатков данной площадки - невозможность импорта проектов оптом, поэтому приходится вручную каждый проектик один за одним переносить, но самое важное уже скопировал.
В планах
Допиливать научную работу, надо больше математики и тестов, плюс обучить свою модель, сравнить результаты, ну короче как обычно. Кстати, вроде были какие-то конкурсы научных работ для начинающих учёных, надо будет изучить этот момент и посмотреть получится ли у меня принять участие где-нибудь, может выйграю да вторую видяшку куплю наконец.
Допилить скрипты обучения моделей, в целом у меня уже готова подсистема генерации датасетов в формате чата, и читалка конфигурации из yaml конфига, нужно ещё сделать два сценария обучения моделей: single device и multigpu режим через YaFSDP, а потом уже смотреть что делать дальше.
PS. Всем продуктивной рабочей недели!
Привет! Сегодня мне пришло письмо из поднебесной на китайском, оно по какой-то причине попало в спам, но тема в нём изложенная крайне любопытна.
Короче автор письма рекламировал свою книгу "Деконструкция больших языковых моделей: от линейной регрессии к общему искусственному интеллекту (解构大语言模型:从线性回归到通用人工智能)" и вот этот репозиторий: https://github.com/GenTang/regression2chatgpt
Если кратко, то автор в книге проходит весь путь от простых регрессионных моделей, до небольших БЯМ, примеры кода и комментарии прилагаются, как я понял этот проект что-то типа Linux From Scratch, только про LLM.
Короче автор письма рекламировал свою книгу "Деконструкция больших языковых моделей: от линейной регрессии к общему искусственному интеллекту (解构大语言模型:从线性回归到通用人工智能)" и вот этот репозиторий: https://github.com/GenTang/regression2chatgpt
Если кратко, то автор в книге проходит весь путь от простых регрессионных моделей, до небольших БЯМ, примеры кода и комментарии прилагаются, как я понял этот проект что-то типа Linux From Scratch, только про LLM.
GitHub
GitHub - GenTang/regression2chatgpt: 《解构大语言模型:从线性回归到通用人工智能》配套代码
《解构大语言模型:从线性回归到通用人工智能》配套代码. Contribute to GenTang/regression2chatgpt development by creating an account on GitHub.