Files
simple-llm/doc/get_data_documentation_ru.md

80 lines
3.9 KiB
Markdown
Raw Normal View History

# Документация по классу GetData
## Назначение
Класс `GetData` предназначен для создания датасетов из последовательных данных для обучения языковых моделей и других задач, работающих с последовательностями.
## Основные возможности
- Преобразование последовательности данных в обучающие пары (input, target)
- Поддержка различных типов данных (числа, токены)
- Автоматический сдвиг целевой последовательности
- Поддержка работы на CPU/GPU
- Проверка корректности входных параметров
## Алгоритм работы
1. Принимает на вход последовательность данных и длину окна
2. Скользящим окном проходит по последовательности
3. Для каждой позиции создает пару:
- Входная последовательность: `data[pos:pos+seq_len]`
- Целевая последовательность: `data[pos+1:pos+seq_len+1]` (сдвиг на 1 элемент)
4. Преобразует данные в тензоры PyTorch
```mermaid
flowchart TD
A[Начало] --> B[Проверка параметров]
B -->|seq_len <= 0| C[Ошибка: отрицательная длина]
B -->|seq_len >= len(data)| D[Ошибка: слишком длинное окно]
B -->|Параметры верны| E[Инициализация датасета]
E --> F[Для каждого индекса i от 0 до len(data)-seq_len-1]
F --> G[Входной тензор: data[i:i+seq_len]]
G --> H[Целевой тензор: data[i+1:i+seq_len+1]]
H --> I[Преобразование в тензоры PyTorch]
I --> J[Возврат пары тензоров]
J --> F
F -->|Все индексы обработаны| K[Конец]
```
## Пример использования
```python
from simple_llm.data.get_data import GetData
data = list(range(10)) # Последовательность 0-9
seq_len = 3
dataset = GetData(data=data, seq_len=seq_len)
# Получение первого примера
x, y = dataset[0]
print(f"Вход: {x.tolist()} → Цель: {y.tolist()}")
# Вывод: Вход: [0, 1, 2] → Цель: [1, 2, 3]
```
## Параметры класса
- `data` (list): Входная последовательность данных
- `seq_len` (int): Длина окна последовательности
- `device` (str): Устройство для тензоров ('cpu' или 'cuda')
## Методы
- `__len__()`: Возвращает количество обучающих примеров
- `__getitem__(idx)`: Возвращает пару тензоров по индексу
## Ошибки
- `ValueError`: Если `seq_len` <= 0 или >= длины данных
## Применение
1. Обучение языковых моделей
2. Прогнозирование временных рядов
3. Любые задачи, требующие работы с последовательностями
## Рекомендации
- Для текстовых данных предварительно токенизируйте текст
- Для больших датасетов используйте GPU (device='cuda')
- Подбирайте seq_len в зависимости от задачи
## Пример с текстовыми данными
```python
text_tokens = [10, 20, 30, 40] # Токенизированный текст
dataset = GetData(text_tokens, seq_len=2)
x, y = dataset[1]
print(f"Вход: {x.tolist()} → Цель: {y.tolist()}")
# Вывод: Вход: [20, 30] → Цель: [30, 40]
```