Skip to content

The project, where LLM with few shot prompting checks solutions of mathematical problems according to certain criteria and recommend courses to improve knowledge using ML model Catboost. Synthetic dataset generation from scratch is also presented.

Notifications You must be signed in to change notification settings

ArthurBabkin/project_ml_course

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Project ML Course: Итоговый проект по курсу "Анализ Данных и Машинное Обучение" от Университета Иннополис.

Снимок экрана 2024-11-10 в 14 29 48

Описание проекта

Этот проект — часть курса по машинному обучению и глубокому обучению. Основная цель проекта — разработать систему, которая принимает решения пользователя по нескольким задачам и предлагает рекомендации по курсам для улучшения знаний.

Проект включает:

  • Генерацию синтетических данных для обучения модели машинного обучения.
  • Обучение и выбор лучших моделей ML с использованием различных алгоритмов.
  • Использование Большой Языковой Модели gpt-4o от OpenAI для проверки решений пользователя с нахождением ошибок по определённым параметрам у пользователя.
  • Организация цепочки работы из Большоай Языковой Модели для проверки решений и формированием данных для модели ML, которая на основе ошибок предлагает курсы для улучшения знаний.
  • Веб-приложение для интерактивного взаимодействия с пользователем, реализованное на Streamlit.

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

project_ml_course/ │ ├── backend/ │ └── main.py # Веб-приложение на Streamlit │ ├── llm_model/ │ ├── llm_constants.py # Константы для генеративной модели ИИ │ ├── llm_model_main.py # Пайплайн работы с GPT-4o │ └── .env # Персональные API-ключи от Microsoft Azure │ ├── ml_model/ │ ├── ml_main.ipynb # Обучение ML-моделей и сохранение лучшей │ ├── ml_model_constants.py # Константы для работы с ML-моделями │ ├── ml_test.py # Класс для работы с сохранённой лучшей ML-моделью │ ├── best_model.pkl # Сохранённая лучшая ML-модель │ └── scaler.pkl # Масштабирование данных │ ├── synthetic_dataset_generation/ │ ├── generator.py # Генерация синтетических данных │ ├── dataset_constants.py # Константы для генерации датасета │ └── synthetic_users_data.csv # Сгенерированный датасет │ ├── .gitignore # Исключения для Git ├── requirements.txt # Зависимости проекта └── README.md # Описание проекта


Стек технологий

  1. Python
  2. Numpy
  3. Pandas
  4. Matplotlib
  5. Microsoft Azure API
  6. Streamlit
  7. Sklearn
  8. Openai
  9. asyncio

Установка

Требования

  • Python 3.10+

Шаги

  1. Клонируйте репозиторий:

    git clone https://github.com/ArthurBabkin/project_ml_course.git cd project_ml_course

  2. Создайте виртуальное окружение и активируйте его:

    python3 -m venv .venv source .venv/bin/activate # Linux/Mac .venv\Scripts\activate # Windows

  3. Установите зависимости:

    pip install -r requirements.txt


Инструкция по запуску

  1. Перейдите в директорию backend:

    cd backend

  2. Запустите приложение:

    streamlit run main.py

  3. Откройте ссылку, указанную в терминале (например, http://localhost:8501).

Снимок экрана 2024-11-10 в 14 29 48
  1. Заполните решения на различные математические номера и нажмите на кнопку "Отослать решения"
Снимок экрана 2024-11-10 в 14 30 00

Ссылка на видеодемонстрацию демо приложения:

ML_Course.mp4

Технические детали и функционал проекта

1. Генерация синтетических данных

  • Используются правила и случайные вероятностни для создания синтетического набора данных, имитирующего реальные данные пользователей.

  • Ошибки пользователей распределяются по четырём категориям:

    • Алгебра: ошибки в решении алгебраических задач.
    • Тригонометрия/геометрия: ошибки, связанные с тригонометрическими функциями или геометрическими вычислениями.
    • Работа с условиями задач: невнимательность или некорректное понимание условий задачи.
    • Работа с формулами: ошибки в использовании математических формул.
  • Данные используются для обучения моделей машинного обучения.

  • Реализация:

    • Файл: synthetic_dataset_generation/generator.py.
    • Сохранение набора данных в формате CSV (synthetic_users_data.csv), который затем используется для обучения моделей.
    • Первоначально была использована генераций 10000 примеров. И в данном датасете мы можем заметить дисбаланс классов ведь итоговое распределение выглядело так:
image
-  Поэтому после при обработке и подгатовке данных к обучению было решено использовать undersampling для нормализации количества экземпляров каждого класса, поэтому после undersampling'а распредление стало выглядеть так:
image

2. Модели машинного обучения

  • Обучение моделей для предсказания курсов, которые помогут пользователям улучшить знания в слабых областях.

  • Обучались следующие модели ML:

    • RandomForestClassifier
    • GradientBoostingClassifier
    • LogisticRegression
    • KNeighborsClassifier
  • Обработка дисбаланса классов (undersampling).

  • Автоматический выбор лучшей модели на основе точности accuracy и сохранение её для использования последующего.

  • Характеристики для моделей:

    • Общее количество задач.
    • Количество правильных решений.
    • Количество ошибок по алгебре.
    • Количество ошибок по геометрии/тригонометрии.
    • Количество ошибок по пониманию условий задач.
    • Количество ошибок в использовании математических формул.
  • Реализация:

    • Файл: 'ml_model/ml_test.py' для использования готовой лучшей модели.
    • Файл: 'ml_model/ml_main.ipynb' для обучения нескольких моделей Ml и сохранения лучшей модели (по итогу оказалась GradientBoosting).
      • Лучшие параметры для RandomForest: {'estimator__max_depth': 20, 'estimator__min_samples_split': 2, 'estimator__n_estimators': 150}. Точность для RandomForest: 0.63.
      • Лучшие параметры для GradientBoosting: {'estimator__learning_rate': 0.2, 'estimator__max_depth': 7, 'estimator__n_estimators': 100}. Точность для GradientBoosting: 0.65.
      • Лучшие параметры для LogisticRegression: {'estimator__C': 10, 'estimator__penalty': 'l2', 'estimator__solver': 'lbfgs'}. Точность для LogisticRegression: 0.56.
      • Лучшие параметры для KNeighbors: {'estimator__metric': 'euclidean', 'estimator__n_neighbors': 7, 'estimator__weights': 'distance'}. Точность для KNeighbors: 0.60.
    • Лучшие модели и данные:
      • Лучшая модель сохраняется в best_model.pkl.
      • Стандартизатор данных (StandardScaler) сохраняется в scaler.pkl.

3. Анализ решений с помощью Большой Языковой Модели (LLM) GPT-4o

  • Интеграция с GPT-4o для проверки пользовательских решений математических примеров.

  • LLM классифицирует ошибки пользователя по четырём категориям.

  • Few-shot prompting и продвинутые промпты используется для повышения точности анализа и классификации ошибок и формирования ответов модели в определённом формате.

  • Результат анализа передаётся в модель машинного обучения для выдачи рекомендаций.

  • Реализация:

    • Файл: llm_model/llm_model_main.py с реализацией работы с итоговой моделью с промптами и few-shot промптингом.
    • Файл: llm_model/llm_constants.py с загатоволенным промптом для проверки решений и few-shot примерами.
    • Используется Microsoft Azure API ключ, хранящийся в .env файле, для доступа к модели GPT-4o.

4. Интерактивное веб-приложение

  • Приложение предоставляет пользователю условия задач, поля для ввода решений.

  • Основные возможности:

    • Пользователь видит задачи и вводит решения.
    • Решения проверяются через LLM и для каждого номера показывается в каких моментах были совершены ошибки.
    • Рекомендации по курсам генерируются на основе слабых мест и ошибок используя ML модель.
  • Реализовано на Streamlit для интерактивности и простоты использования.

  • Реализация:

    • Файл: backend/main.py
    • Пользователь взаимодействует с системой через интуитивно понятный интерфейс.
    • Подключены функции, позволяющие анализировать ответы в реальном времени.

Примеры использования модели ML

Входные данные:

[total_questions, total_correct_solutions, number_algebra_mistakes, number_trigonometry_mistakes, number_reading_mistakes, number_working_with_formulas_mistakes] [30, 20, 3, 2, 3, 2]

Выход:

Рекомендованные курсы: Курс по алгебре, Курс по тригонометрии


Дальнейшее развитие

  1. Интеграция новых задач:

    • Добавление задач из математике или вообще из других областей знаний (например, физика или химия).
  2. Улучшение ML-моделей:

    • Использование нейросетевых моделей вместо классических ML.
  3. Увелечение количества не целевых признаков в модели:

    • Например добавить "среднее время потраченное на решение задач".
  4. Собрать настоящие датасеты, а не герерировать синтетику.


Автор

About

The project, where LLM with few shot prompting checks solutions of mathematical problems according to certain criteria and recommend courses to improve knowledge using ML model Catboost. Synthetic dataset generation from scratch is also presented.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published