Веб-приложение для генерации анекдотов с помощью рекуррентной нейронной сети (LSTM), обученной на корпусе русскоязычных анекдотов.
Пользователь вводит начало анекдота — модель дописывает продолжение. Температура генерации регулирует «безумность» результата: низкая даёт предсказуемый текст, высокая — хаотичный и неожиданный.
Интерфейс выполнен в стиле чата: вы пишете начало анекдота, модель отвечает вариантами продолжения.
- 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
git clone https://github.com/jack1591/generating_jokes.git
cd generating_jokesСкачайте веса моделей и поместите в корень проекта. Файл не был добавлен в репозиторий из-за размера. https://disk.yandex.ru/d/hTKJx0kfFF9U0w
python -m venv .venvАктивация:
- Windows:
.venv\Scripts\activate - Linux / macOS:
source .venv/bin/activate
pip install -r requirements.txtuvicorn main:app --reloadСервер запустится на http://localhost:8000.
Перейдите в браузере на:
http://localhost:8000/ui
Генерация с настройкой количества и температуры.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
prompt |
str |
— | Начало анекдота |
count |
int |
5 |
Количество вариантов (1–20) |
temperature |
float |
0.5 |
Температура генерации (0.1–2.0) |
Пример запроса:
GET /jokes?prompt=Штирлиц&count=3&temperature=0.7
Пример ответа:
{
"jokes": [
"Штирлиц шёл по коридору...",
"Штирлиц открыл дверь...",
"Штирлиц посмотрел в окно..."
]
}Случайный анекдот — сервер сам выбирает начало из набора популярных префиксов.
Проверка состояния сервиса. Возвращает статус, устройство (CPU/GPU) и размер словаря.
Веб-интерфейс чата.
Посимвольная языковая модель на основе LSTM:
- Embedding — 256-мерное представление каждого символа
- LSTM — 3 слоя, hidden size 256, dropout 0.3
- Выходной слой — два линейных слоя с LeakyReLU
Словарь включает 85 символов: русские буквы (строчные и заглавные), цифры, пробел, знаки препинания и служебные токены (SOS, EOS, PAD).
Ноутбук model_training.ipynb содержит полный пайплайн:
- Загрузка и подготовка датасета анекдотов
- Создание словаря и токенизация
- Обучение LSTM-модели (10 эпох, Adam, lr=2e-3)
- Генерация примеров и сохранение весов
Для обучения с нуля потребуется GPU (использовался Kaggle с CUDA).