Skip to content

Latest commit

 

History

History
113 lines (94 loc) · 6.12 KB

PLAN.md

File metadata and controls

113 lines (94 loc) · 6.12 KB

План проекта book2bert

Цель проекта — создание BERT-модели с нуля для глубокого понимания архитектуры трансформеров и получения практически полезной модели для работы с уникальным корпусом текстов (180k книг, 40 ГБ, преимущественно нехудожественная литература, включая тексты с OCR-артефактами и старой орфографией).

Проект является учебно-научным экспериментом: мы пройдем путь от сырого текста до обученной модели, с полным разбором каждого компонента.

Этапы

Этап 0: Инициализация проекта (сейчас)

  • Создать репозиторий book2bert
  • Оформить README.md (описание, цели, структура)
  • Создать PLAN.md (этот документ)
  • Подготовить 50 чистых книг в data/sample/
  • Создать metadata.csv (автор, название, жанр, файл)

Этап 1: Сегментация предложений

  • Создать HTTP-сервис сегментации на Python (Flask + razdel)
  • Написать Go-клиент для сервиса (с пулом соединений и batch-обработкой)
  • Провести сегментацию 50 книг → сохранить в data/processed/sentences/
  • Валидировать качество сегментации (100 случайных предложений вручную)

Этап 2: Обучение токенизатора

  • Собрать корпус предложений для обучения токенизатора
  • Обучить WordPiece токенизатор (vocab_size=30000)
  • Сохранить токенизатор в data/processed/tokenizer/

Этап 3: Построение датасета для BERT

  • Написать dataset-builder на Go
  • Сгруппировать предложения в примеры по 512 токенов
  • Сформировать NSP-пары (50% положительных)
  • Сохранить датасет в формате JSONL (train/val split)

Этап 4: Реализация BERT на PyTorch

  • Реализовать MultiHeadSelfAttention (с нуля)
  • Реализовать TransformerBlock
  • Реализовать BERT и BERTForMLM
  • Создать скрипт обучения с логированием (wandb/tensorboard)

Этап 5: Обучение MiniBERT

  • Запустить обучение на 50 книгах
  • Сохранить чекпоинты модели
  • Оценить качество (perplexity, визуализация attention)

Этап 6: Анализ и визуализация

  • Визуализация attention heads
  • Анализ специализации слоев
  • Тестирование на простых downstream-задачах (классификация, поиск похожих)

Этап 7: Масштабирование (по желанию)

  • Добавить больше данных (военно-исторический корпус 4 ГБ)
  • Обучить BERT-base
  • Эксперименты с параметрами

Структура репозитория

book2bert/
├── README.md
├── PLAN.md
├── LICENSE
├── Makefile
├── docker-compose.yml
├── requirements.txt
├── go.mod / go.sum
├── data/
│   ├── sample/                  # 50 чистых книг
│   │   ├── metadata.csv
│   │   └── texts/
│   ├── processed/               # (gitignore) сгенерированные данные
│   └── models/                  # (gitignore) сохраненные модели
├── services/
│   └── segmenter/               # Flask-сервис сегментации
│       ├── Dockerfile
│       ├── app.py
│       └── requirements.txt
├── cmd/
│   ├── parser/                  # Парсер книг (будет адаптирован)
│   ├── dataset-builder/
│   └── tokenizer-train/
├── pkg/
│   ├── segment/                 # Ваша библиотека segment
│   ├── textutils/               # Нормализация, чистка
│   └── client/                  # HTTP-клиент для сервисов
├── scripts/
│   └── ...
├── notebooks/
│   └── ...
└── training/
    ├── config/
    ├── train.py
    └── model.py

Технологический стек

  • Языки: Go (обработка данных, координация), Python (NLP-сервисы, обучение модели)
  • NLP: razdel (сегментация предложений), HuggingFace tokenizers (WordPiece), PyTorch (BERT)
  • Сервисы: Flask, gunicorn, Docker
  • Мониторинг: wandb / tensorboard

Критерии успеха

  1. Рабочий пайплайн от текста до датасета
  2. Обученная MiniBERT на 50 книгах с адекватным loss
  3. Визуализированные attention patterns, подтверждающие понимание структуры текста
  4. Открытый репозиторий с воспроизводимыми шагами
  5. Документированные выводы и инсайты

Примечания

  • Все сгенерированные данные (processed/, models/) добавлены в .gitignore
  • 50 чистых книг будут добавлены как примеры и для начального обучения
  • Код пишется с учетом возможности масштабирования на полный корпус (40 ГБ)