Skip to content

Repository files navigation

🎭 Генератор анекдотов

Веб-приложение для генерации анекдотов с помощью рекуррентной нейронной сети (LSTM), обученной на корпусе русскоязычных анекдотов.

Пользователь вводит начало анекдота — модель дописывает продолжение. Температура генерации регулирует «безумность» результата: низкая даёт предсказуемый текст, высокая — хаотичный и неожиданный.


Демонстрация

Интерфейс выполнен в стиле чата: вы пишете начало анекдота, модель отвечает вариантами продолжения.

Начальный экран чата

image

Получение анекдотов по началу

image

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

  • Python 3.10+
  • PyTorch — архитектура и инференс модели (LSTM, 3 слоя)
  • FastAPI — REST API сервер
  • Uvicorn — ASGI-сервер
  • HTML/CSS/JS — пользовательский интерфейс

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

generating_jokes/
├── main.py                   # FastAPI-сервер с эндпоинтами и логикой генерации
├── joke_chat.html            # Веб-интерфейс (чат)
├── model_jokes_weights.pth   # Веса обученной модели
├── vocab_info.json           # Словарь: маппинг символов в индексы
├── model_training.ipynb      # Ноутбук с обучением модели
├── requirements.txt          # Зависимости Python
├── .gitignore                # Игнорируемые файлы
└── README.md

Быстрый старт

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

git clone https://github.com/jack1591/generating_jokes.git
cd generating_jokes

2. Скачайте веса моделей.

Скачайте веса моделей и поместите в корень проекта. Файл не был добавлен в репозиторий из-за размера. https://disk.yandex.ru/d/hTKJx0kfFF9U0w

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

python -m venv .venv

Активация:

  • Windows: .venv\Scripts\activate
  • Linux / macOS: source .venv/bin/activate

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

pip install -r requirements.txt

5. Запустите сервер

uvicorn main:app --reload

Сервер запустится на http://localhost:8000.

6. Откройте интерфейс

Перейдите в браузере на:

http://localhost:8000/ui

API

GET /jokes

Генерация с настройкой количества и температуры.

Параметр Тип По умолчанию Описание
prompt str Начало анекдота
count int 5 Количество вариантов (1–20)
temperature float 0.5 Температура генерации (0.1–2.0)

Пример запроса:

GET /jokes?prompt=Штирлиц&count=3&temperature=0.7

Пример ответа:

{
  "jokes": [
    "Штирлиц шёл по коридору...",
    "Штирлиц открыл дверь...",
    "Штирлиц посмотрел в окно..."
  ]
}

GET /random_joke

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

GET /health

Проверка состояния сервиса. Возвращает статус, устройство (CPU/GPU) и размер словаря.

GET /

Веб-интерфейс чата.


Архитектура модели

Посимвольная языковая модель на основе LSTM:

  • Embedding — 256-мерное представление каждого символа
  • LSTM — 3 слоя, hidden size 256, dropout 0.3
  • Выходной слой — два линейных слоя с LeakyReLU

Словарь включает 85 символов: русские буквы (строчные и заглавные), цифры, пробел, знаки препинания и служебные токены (SOS, EOS, PAD).


Обучение

Ноутбук model_training.ipynb содержит полный пайплайн:

  1. Загрузка и подготовка датасета анекдотов
  2. Создание словаря и токенизация
  3. Обучение LSTM-модели (10 эпох, Adam, lr=2e-3)
  4. Генерация примеров и сохранение весов

Для обучения с нуля потребуется GPU (использовался Kaggle с CUDA).


About

Веб-приложение для генерации анекдотов с помощью рекуррентной нейронной сети (LSTM), обученной на корпусе русскоязычных анекдотов.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages