Skip to content

Zeldrizz/EmpathyLLM-Finetuning-RU-FEELIX

Repository files navigation

Аннотация

Этот репозиторий посвящен созданию и дообучению (fine-tuning) больших языковых моделей (LLM) для курсового программного проекта Чат-бот эмоциональной поддержки студентов FEELIX.

Идея проекта возникла из потребности в аналогах современных закрытых LLM, таких как ChatGPT и YandexGPT, которые могли бы не просто генерировать текст, а эффективно справляться с задачей эмпатичного общения и эмоциональной поддержки. Главной целью было создать легковесную LLM, которая не уступала бы по качеству существующим моделям, но была бы специализирована именно на эмоциональной поддержке.

На момент начала работы не существовало ни одной русскоязычной LLM, способной качественно генерировать поддерживающие, эмпатичные диалоги, поэтому пришлось делать все с нуля:

  1. Поиск оптимальной базовой LLM

    • Необходима была open-source модель, которая хорошо работает с русским языком, имеет приемлемое качество генерации текста на русском языке и поддается эффективному дообучению (fine-tuning).
  2. Поиск и подготовка датасетов

    • На русском языке не существует ни одного датасета с примерами эмпатичных, поддерживающих диалогов, которые действительно могли бы улучшать психологическое и эмоциональное состояние собеседника.
    • Из-за этого самым сложным этапом стало создание качественного обучающего набора данных, который позволял бы модели генерировать теплые, внимательные и поддерживающие ответы.
    • Было проведено множество экспериментов, чтобы собрать и сформировать датасет, приближенный к качественному.
  3. Дообучение моделей (fine-tuning) на суперкомпьютере

    • Все эксперименты по обучению проводились на суперкомпьютере cHARISMa Высшей школы экономики.
    • В процессе дообучения анализировались потери (loss), а также ответы LLM после fine-tuning на нескольких тестовых вопросах. Это помогало оценить качество генерации и выявить недостатки в датасетах.
    • На основе полученных результатов корректировался датасет: удалялись нерелевантные данные или, в случае неудовлетворительных результатов, принималось решение о создании нового датасета.

Этот проект — учебный, и он является моим первым опытом в дообучении LLM. Я — студент 2 курса Прикладной математики и информатики на Факультете компьютерных наук НИУ ВШЭ (Москва). В университете я пока не изучал машинное и глубинное обучение, так что этот проект — мои первые самостоятельные шаги в этой области.

Автор

Все дообучения моделей (fine-tuning) в этом репозитории выполнены мной.

Марат Тактаров
Студент 2 курса, Прикладная математика и информатика
Факультет компьютерных наук, НИУ ВШЭ (Москва)

Email: [zeldrizzyt@gmail.com]
Telegram: [https://t.me/mrtaktarov]


Благодарность

Огромная благодарность НИУ ВШЭ за предоставленный доступ к суперкомпьютеру cHARISMa, благодаря которому стало возможным выполнение всех fine-tune.


Используемые модели и датасеты

Модели

  1. Llama 3.2 1B Instruct RU
    Дообученная Llama 3.2 1B Instruct на русскоязычном датасете командой Vikhr.

    Ссылка на модель

  2. Llama 3.1 8B Instruct RU
    Дообученная Llama 3.1 8B Instruct на русскоязычном датасете командой Vikhr.

    Ссылка на модель

  3. T-lite-it-1.0
    LLM семейства qwen2, 7.6b ~ 8b параметров, дообученная Т-банковцами для генерации текста на русском языке.

    Ссылка на модель

  4. T-pro-it-1.0
    LLM семейства qwen2.5, 32.8b ~ 33b параметров, дообученная Т-банковцами для генерации текста на русском языке.

    Ссылка на модель

  5. Nemo 12B Instruct RU
    Дообученная Nemo 12B на русскоязычном датасете командой Vikhr.

    Ссылка на модель


Датасеты

  1. forum
    Русскоязычный датасет, полученный самостоятельным парсингом психологических форумов (~2000 строк).
    Формат: вопрос1 - ответ1, вопрос1 - ответ2, вопрос2 - ответ1 и т.д.
    Обработка:

    • Удалены вопросы и ответы с низкой репутацией или короткой длиной.
    • Удалены специфичные для форумов приписки к пользователям, например:
      Елена ответил(а) Александру:, Елена ответил(а) через 5 минут:.
  2. forum-gpt
    Объединение датасета forum с самостоятельно сгенерированными вопросами и ответами GPT-4o психологического характера (~2500–3000 строк).

  3. STCD
    Датасет с Kaggle: Synthetic Therapy Conversations Dataset.
    Особенности:

    • Содержит диалоги человека с ChatGPT с фокусом на улучшение психологического состояния.
    • Размер (~8000 строк).
    • Обработка:
      • Удалены имена.
      • Перевод из json в текстовый формат с добавлением тегов и
      • Переведен на русский язык с использованием googletrans (около 8 часов работы скрипта).
  4. STCD-big-ver1
    Расширенная версия STCD (>22,000 строк).

  5. STCD-GMPM
    Объединение:

    • ~11,000 строк из STCD-big-ver1.
    • ~5000 строк из Grand Master Pro Max, инструктивного датасета, сгенерированного LLM. Выбирал именно те строки, у которых менее 1024 токенов в вопросах и ответах, и в которых встречаются ключевые слова "психология", "учеба", "университет", "стресс" и тд.
  6. STCD-GMPM_S
    Объединение:

    • ~18,000 строк из STCD-big-ver1 на train.
      • ~2,000 из STCD-big-ver1 строк на valid
      • ~2,000 из STCD-big-ver1 строк на test
      • train + test + valid - в сумме дают весь датасет STCD-big-ver1 и между собой не пересекаются.
    • ~2000 строк из Grand Master Pro Max, инструктивного датасета, сгенерированного LLM. Выбирал именно те строки, у которых менее 1024 токенов в вопросах и ответах, и в которых встречаются ключевые слова "психология", "учеба", "университет", "стресс" и тд.
  7. STCD-GMPM_T-PSYCH
    Объединение:

    • ~18,000 строк из STCD-big-ver1 на train.
      • ~2,000 из STCD-big-ver1 строк на valid
      • ~2,000 из STCD-big-ver1 строк на test
      • train + test + valid - в сумме дают весь датасет STCD-big-ver1 и между собой не пересекаются.
    • ~700 строк из Grand Master Pro Max, инструктивного датасета, сгенерированного LLM. Выбирал именно те строки, у которых менее 1024 токенов в вопросах и ответах, и в которых встречаются ключевые слова "психология", "учеба", "университет", "стресс" и тд.
    • ~2400 строк было спарсено с психологического форума, где пользователи задавали вопросы под профилями опытных и практикующих психологов, а те им отвечали. Этот датасет схож с датасетом "forum": также использовался парсинг веб-страниц и проводилась аналогичная очистка данных. Имена были удалены с помощью natasha, но в отличие от "forum", ответы здесь давали не обычные участники форума, а профессиональные психологи.
  8. STCD-PSYCH
    Объединение:

    • ~18,000 строк из STCD-big-ver1 на train.
      • ~2,000 из STCD-big-ver1 строк на valid
      • ~2,000 из STCD-big-ver1 строк на test
      • train + test + valid - в сумме дают весь датасет STCD-big-ver1 и между собой не пересекаются.
    • ~2400 строк было спарсено с психологического форума, где пользователи задавали вопросы под профилями опытных и практикующих психологов, а те им отвечали. Этот датасет схож с датасетом "forum": также использовался парсинг веб-страниц и проводилась аналогичная очистка данных. Имена были удалены с помощью natasha, но в отличие от "forum", ответы здесь давали не обычные участники форума, а профессиональные психологи.
  9. STCD-PSYCH-COMBINED
    Как это было:

    • 1 этап) взял STCD-big-ver1 (>22,000 строк) поделил его следующим образом: train 81% от STCD-big-ver1, test 10% от STCD-big-ver1 и valid 9% от STCD-big-ver1. Между собойб train, test и valid не пересекаются.

    • 2 этап) точно такое же деление проделал с ответами психологов с одного психологического форума, где всего около 2400 строк.

    • 3 этап) объединил train с STCD-big-ver1 и train c ответами психологов с одного психологического форума, тоже самое проделал с test и valid. В итоге train, valid, test присутсвуют как синтетические эмпатичные ответы, так и психологическая консультация/помощь от реальных людей психологов.

    • Собственно, LLM получается на полученном train, веса корректируются на полученной valid, и итоговая проверка на test.

  10. STCD-PSYCH-COMBINED-length-filtered

    В основе этого датасета лежит STCD-PSYCH-COMBINED, к которому были применены несколько фильтраций (к train, valid, test частям):

    1. Ограничение максимальной длины

      • Удалены строки, в которых хотя бы один из столбцов (request/response) содержал текст длиннее 5000 символов.
      • Это позволило убрать слишком длинные запросы и ответы.
    2. Равномерное распределение длин запросов

      • Внутри столбца request выделены диапазоны длин:
        [0-1000], [1000-2000], [2000-3000], [3000-4000], [4000-5000].
      • Из каждого диапазона случайным образом выбрано по 2000 строк.
      • Итоговое распределение длин request получилось равномерным.
    3. Ограничение длины ответов

      • Удалены строки, где response превышал 800 символов.
      • Это позволило добиться нормального распределения длин response.

    Итоговый размер датасета: ~9000 строк.

    Визуализация изменений:

    • До фильтрации:

      Распределение длин до фильтрации

    • После фильтрации:

      Распределение длин после фильтрации

  11. HF-jkhedri-psychology-translated
    Датасет с Hugging Face: jkhedri/psychology-dataset.
    Особенности:

    • Содержит вопросы психологического характера и два типа ответов:
      1. Эмпатичный и поддерживающий ответ.
      2. Негативный и пессимистичный ответ.
    • Для обучения использовались только вопросы и первый тип ответов.
    • Размер (~9000 строк).

    Обработка:

    • Переведен на русский язык с использованием GPT-4o mini через API.
    • Удалены:
      • Имена.
      • Ссылки.
      • Английские и китайские символы.
    • Датасет разделен на train (81%), valid (9%), test (10%).
  12. HF-jkhedri-psychology-translated-filtered
    Отфильтрированная версия HF-jkhedri-psychology-translated.

    Особенности:

    • После fine-tune на HF-jkhedri-psychology-translated выявлены нежелательные элементы в ответах.
    • Модель начала рекомендовать терапию и медикаменты, что несет потенциальные риски.
    • Размер (~7000 строк).

    Обработка:

    • Удалены слова "терапия", "медикамент" и их производные.
    • Датасет разделен на train (81%), valid (9%), test (10%).
  13. HF-mental_health_data-translated
    Датасет с Hugging Face: YvvonM/mental_health_data.
    Особенности:

    • Содержит три столбца:
      • Instruction — промпт для LLM.
      • Input — пользовательский запрос, связанный с психологическими или эмоциональными проблемами.
      • Response — эмпатичный и поддерживающий ответ.
    • Размер (~1 760 000 строк).

    Обработка:

    • Переведен на русский язык с использованием GPT-4o mini через API (переведены первые 16 000 строк).
    • Удалены:
      • Имена.
      • Ссылки.
      • Английские и китайские символы.
      • Слова "терапия", "медикамент" и их производные.
    • Датасет разделен на train (81%), valid (9%), test (10%).
  14. HF-mental_health_data-translated-filtered
    Отфильтрированная версия HF-mental_health_data-translated.

    Особенности:

    • После fine-tune модели на HF-mental_health_data-translated выявлена неоднозначность в формах обращения.
    • Модель могла использовать как "ты", так и "вы" в одном диалоге.
    • Датасет был заново переведен, с закреплением единого обращения на "ты".
    • Размер (~16 000 строк).

    Обработка:

    • Переведен на русский язык с использованием GPT-4o mini через API.
    • Удалены:
      • Имена.
      • Ссылки.
      • Английские, китайские, арабские и тайские символы.
      • Слова "терапия", "медикамент" и их производные.
    • Датасет разделен на train (81%), valid (9%), test (10%).
  15. STCD-GPT-Translated-Half
    Исходник: датасет STCD-big-ver1. Особенности:

  • Содержит диалоги человека с ChatGPT с фокусом на улучшение психологического состояния.
  • Размер (~10000 строк).
  • Обработка:
    • Перевод из json в текстовый формат с добавлением тегов и
    • Переведен на русский язык с использованием gpt 4o-mini.
    • Удалены:
      • Имена.
      • Ссылки.
      • Буквы не из русского языка.
      • Слова "терапия", "медикамент" и их производные.
    • Датасет разделен на train (81%), valid (9%), test (10%).

Структура проекта

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

Основные директории

  • test_base_models

    • Тестовые ответы моделей до обучения (fine-tuning) на контрольных примерах.
  • datasets_preview

    • Первые 25 случайных строк из используемых датасетов.
    • Полные версии датасетов не размещены из-за ограничений GitHub на размер файлов.
  • final_test_evaluation/
    Итоговые метрики (Test Loss, PPL) на независимых тестовых выборках.
    Файлы:

    • llama-3.1-8b-all-promissing-finetunes.txt
    • nemo-it-12b-all-promissing-finetunes.txt
      Содержат наиболее перспективные модели по качеству генерации в задаче эмоциональной поддержке.
  • simple_coversation_simulations/
    Симуляции примитивного диалога с наиболее перспективными fine-tuned моделями для задачи эмоциональной поддержки (llama-3.1-8b/, nemo-it-12b/).
    Используются заранее подготовленные вопросы, на которые модели отвечают в стиле поддерживающего собеседника.

  • simple_coversation_simulations/sample_code/
    Код симуляции примитивных диалогов (simulate.py, script.sh).
    Диалог не интерактивный — LLM отвечает на фиксированные фразы.

  • llama-3.1-8b-finetunes, llama-3.2-1b-finetunes, t-lite-it-8b-finetunes, t-pro-it-33b-finetunes, nemo-it-12b-finetunes

    • Папки с версиями моделей после обучения (fine-tuning).
    • В каждой из них находятся папки с конкретными экспериментами
    • Например: llama-3.2-1b-ep5-STCD
      • llama-3.2-1b — версия и размер модели.
      • ep5 — количество эпох обучения.
      • STCD — название датасета.

    Внутри каждой экспериментальной папки находятся следующие файлы:

    • main.py — код для обучения модели (fine-tuning).
    • script.sh — shell-скрипт для запуска main.py на кластере (включает параметры sbatch, количество GPU, CPU, время обучения и т. д.).
    • run_model.py — тестовый запуск модели после fine-tuning, где модель отвечает на несколько вопросов для оценки качества.
    • run_model_script.sh — shell-скрипт для запуска run_model.py.
    • responses.txt — ответы модели после fine-tuning на вопросы из run_model.py.
    • result_FT_images/ — папка с изображениями, показывающими динамику изменения train loss, eval loss (valid), градиентов и learning rate во время обучения.
    • total_statistics.png — объединенное изображение с графиками из result_FT_images в один файл.

License: CC BY-NC 4.0

Releases

No releases published

Packages

No packages published