Проект - система детекции сгенерированных текстов на основе автокодировщика.
Как работает:
- Тексты разбиваются на предложения и кодируются в эмбеддинги.
- Из эмбеддингов строятся эмбеддинги через комбинацию пуллингов (mean pooling + mean diff pooling).
- Автоэнкодер обучается только на человеческих текстах - AI-тексты он восстанавливает хуже, поэтому высокая ошибка реконструкции = признак AI.
- Порог классификации подбирается по ROC-кривой (или может задаваться), гиперпараметры - через Optuna.
Что умеет:
- Генерировать и скачивать датасеты (IvyPanda, ASAP2, PERSUADE + AI-эссе).
- Обучать модель с поиском гиперпараметров, сохранять результаты и загружать на HuggingFace.
- Отдавать предсказания через REST API (FastAPI) — на вход список текстов, на выходе score + метка Human/AI.
- Деплоиться в Kubernetes (Yandex Cloud) через автоматизированный bash-скрипт.
Взаимодействие с пользователем происходит через плагин для браузера (Chrome) - AI Text Checker.
Стек: PyTorch, FastAPI, Optuna, Hydra, sentence-transformers, Kubernetes/Yandex Cloud.
- Открой страницу расширений
В адресной строке Chrome введи:
chrome://extensions/
- Включи режим разработчика
В правом верхнем углу страницы переключи тумблер Режим разработчика.
- Загрузи расширение
Нажми кнопку Загрузить распакованное расширение и выбери распакованную папку ./plugins/ai-checker-extension.
В качестве примера можно использовать text.html.
- Выдели весь текст
- Кликни правой кнопкой мыши
- Выбери пункт Проверить на ИИ
- В центре экрана появится результат:
- AI — текст написан нейросетью
- HUMAN — текст написан человеком
uv sync
docker compose up --build
curl http://localhost:8080/health
# {"status":"ok"}
curl -X POST http://localhost:8080/score \
-H "Content-Type: application/json" \
-d '{"texts": ["Just text"], "threshold": 0.0008}'
# {"results":[{"text":"Just text","score":0.0007377,"label":"Human"}],"model":"all-mpnet-base-v2","threshold":0.0008}(m2gpu) anonim-macbook-14 :: ~/IdeaProjects/ai-text-detection ‹main*› » uv run commands.py --help
Available commands:
generate_ai → Generate AI essays using prompt strategies
download_datasets → Parse combined_essays.jsonl and split into IvyPanda / ASAP2 / PERSUADE CSVs
generate_embeddings → Generate embeddings of the datasets
train → Train modeluv run commands.py generate_aiuv run commands.py generate_ai model=llamauv run commands.py generate_ai generation.strategies=[1,3,5]uv run commands.py generate_ai run.start=1000 run.count=500uv run commands.py generate_ai model=llama run.count=100 generation.temperature=0.9./deploy.sh