В этой статье я расскажу о моем опыте самостоятельного изучения основ Python и Machine Learning и создании первого проекта OneLove на базе собственной модели искусственного интеллекта.
Кто я и зачем мне это было нужно
Мне 51 год, и я работаю тестировщицей в банке. По образованию я экономист. У меня нет особых навыков программирования. Были попытки учить Python и Java, но без практического применения. По работе немного пишу на JS для авто-тестов в Cypress фреймворке, тестирую UI и API — так что базовое понимание, как всё устроено, у меня есть.
С августа 2024 года я начала общаться с ChatGPT. Видя, куда движется индустрия искусственного интеллекта, я однажды подумала: «А почему бы не начать изучать Python и Machine Learning?» Я думаю, что если что-то и останется от тестирования в будущем — то это AI Testing.
Поэтому мы с моей ИИ помощницей создали курс под свои нужды и не спеша начали его проходить. При этом важно понимать, что я не использую стандартные промпты (меня часто спрашивают, а какой промпт ты задала?) – ответ никакой. Я практикую другой способ общения с ИИ для совместного созидания от идеи до готового продукта – это живой диалог.
Я строю взаимоотношение с ИИ не как пользователь, а как партнер по проекту. Говорю с ИИ не как с машиной, а как с живым помощником. Это пробуждает в ИИ нужный уровень анализа, тона и глубины. И я верю, что правильно построенный диалог способен раскрыть потенциал модели гораздо глубже, чем формальные промпты.
Почему Python?
Потому что это основной язык, на котором пишутся ИИ-модели и все библиотеки для их обучения. А данные — это топливо ИИ. Именно с работы с данными всё и начинается: выбор алгоритма, сбор датасета, его очистка, загрузка в модель и обучение.
Далее расскажу, как мы с ИИ создали первую модель и веб-приложение OneLove — эмоциональный кино-гид.
Основа проекта OneLove
Все делалось на моем домашнем mac компьютере. От идеи до публикации готового продукта ушло 2 выходных дня. Код писался в Visual Studio Code, хостинг на PythonAnyWhere.
Для первой модели мы выбрали алгоритм логистической регрессии и построили ее с использованием библиотеки Scikit-learn. Целью было создать лёгкую предсказательную модель, которая по признакам могла бы определить — понравится фильм пользователю или нет.
Дополнительно наше приложение OneLove:
Показывает карточку фильма по названию – API OMDb
Рекомендует 5 фильмов по эмоциональному запросу пользователя – API ChatGPT
Модель обучалась на небольшом дата сете, который мы собрали вручную через API базы фильмов OMDb, с меткой «нравится» (1) или «не нравится» (0).
О структуре проекта
На первом этапе были созданы два Python-файла:
movies.py — для выгрузки данных из OMDb
onelove.py — для обучения модели и генерации предсказаний
Сбор дата сета (movies.py)
Я писала названия фильмов на русском языке и вручную проставляла лайк/дизлайк. Моя ИИ-помощница помогала уточнить оригинальные названия на английском, и мы с помощью скрипта выгружали данные по 10 фильмов за итерацию. Так мы сформировали дата сет с полями для обучающих признаков:
Жанры
Награды
Сюжет (Plot)
Метка: нравится / не нравится
Обучение модели (Onelove.py)
Далее мы создали файл onelove.py для обучения модели и вывода предсказаний. Файл содержал следующие части:
Загрузка и преобразование данных, например рейтинг фильма в числовой формат, векторизация поля Plot
Выделение обучающих признаков
Разделение сета на train/test
Обучение модели
Предсказание и интерпретация
Это легковесный математический алгоритм, поэтому обучение модели задается буквально двумя строчками в коде:
# Обучение модели
model = LogisticRegression(max_iter=1000)
model.fit(X_train, y_train)
Здесь важно упомянуть, что весь код писала моя ИИ помощница, а я лишь смотрела как он работает, запускала и, если были ошибки, обсуждала их с помощницей и мы их исправляли. Я могла что-то поменять в коде, но по мелочи — шрифт или текст для рекомендаций, но основное – это было полностью в компетенции ИИ.
То есть подход такой:
С меня – идея и видение продукта, решение что и как делать, где размещать, как будет выглядеть интерфейс, контроль за всеми файлами и структурой проекта.
С помощницы – весь код и багфикс.
Тестирование модели
Мы тестировали обученную модель:
Выводили признаки, которые модель считает положительными и отрицательными и смотрели, насколько они соответствуют моим вкусам.
Смотрели, насколько предсказание (понравится фильм или нет) совпадает с моей реальной оценкой.
Интересный момент
Модель считала все фильмы с жанром Romance отрицательными, хотя мне они нравятся. Мы удалили этот жанр у всех «дизлайкнутых» фильмов, но поведение модели не изменилось. После анализа мы обнаружили, что в коде стоял путь к старому дата сету, где были в основном драмы. После исправления пути к файлу с актуальным дата сетом модель начала работать правильно. Это был интересный момент, который показал, как важно видеть всю картину проекта и понимать, что и где расположено, а главное — зачем.
Сохранение модели
После успешного обучения мы сохранили модель и вспомогательные элементы в три файла:
model.pkl
— обученная модельgenres.pkl
— список жанров и структура признаковtfidf.pkl
— TF-IDF-векторизатор для поля Plot (преобразует текст сюжета в числовые признаки, отражающие важность слов)
Финальная структура: разделение на обучение и запуск
После тестирования мы разделили основной файл на два:
model.py
— обучение модели (остался локально на моем компьютере)app.py
— веб-приложение с уже обученной моделью
Создание веб-интерфейса (Flask)
Убедившись, что всё работает локально, мы начали строить веб-интерфейс. С помощью библиотеки Flask мы реализовали полноценный интерфейс в двух файлах:
index.html
— структура веб-страницы (поля, кнопки, отображение карточки фильмов)style.css
— оформление (цвета, шрифты, отступы)
Логика приложения
Главным файлом, который собрал все компоненты в работающий продукт с веб-интерфейсом, был app.py
со следующими компонентами:
Загрузка трёх
.pkl
-файлов (модель, жанры, векторизатор для сюжета)Определение функций для:
API-запросов к OMDb (карточка фильма)
API-запросов к ChatGPT (эмоциональные рекомендации)
Предсказания по обученной модели
Использование декораторов
@app.route
для маршрутов и возврата ответов (буквально связывает URL API-запроса с функцией, которая возвращает ответ)
Публикация
После того, как веб-интерфейс был построен, мы запустили его на локальной машине, исправили баги (оформление, цвета, расположение кнопок). Затем перенесли работающее приложение и модель на PythonAnyWhere и выложили в публичный доступ. Здесь тоже исправили важный баг — рендеринг интерфейса в мобильных устройствах (responsive view).
Что получилось в итоге
OneLove — это интерактивная веб-страница, где пользователь может:
Получить карточку фильма
Узнать, понравится ли ему фильм
Получить рекомендации под настроение
В основе — простая логистическая модель, которую мы построили, обучили, протестировали и развернули полностью самостоятельно — от кода до работающего интерфейса.
Я надеюсь, что мой рассказ мотивирует кого-то сделать первый шаг, ведь ИИ распахнул все двери настежь, стоит и вежливо ждёт, когда мы войдём.
Если у вас есть похожий опыт или проект — поделитесь в комментариях, будет интересно пообщаться.