mirror of
https://github.com/pese-git/simple-llm.git
synced 2026-01-23 21:14:17 +00:00
115 lines
5.0 KiB
Markdown
115 lines
5.0 KiB
Markdown
# Документация по классу GetData
|
||
|
||
> **Документ актуален для Simple-LLM v1.0 (июль 2025)**
|
||
|
||
---
|
||
|
||
**Краткое summary:**
|
||
Документ описывает класс 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)`: Возвращает пару тензоров по индексу
|
||
|
||
## Рекомендации
|
||
- Для текстовых данных предварительно токенизируйте текст
|
||
- Для больших датасетов используйте GPU (`device='cuda'`)
|
||
- Подбирайте `seq_len` в зависимости от задачи
|
||
|
||
---
|
||
|
||
## Типовые ошибки и их решения
|
||
|
||
### Ошибка: ValueError при создании датасета
|
||
**Возможные причины:**
|
||
- `seq_len` <= 0
|
||
- `seq_len` >= длины данных
|
||
|
||
**Решение:**
|
||
- Задайте `seq_len` > 0 и < длины данных
|
||
- Проверьте корректность входных параметров
|
||
|
||
---
|
||
|
||
## Применение
|
||
1. Обучение языковых моделей
|
||
2. Прогнозирование временных рядов
|
||
3. Любые задачи, требующие работы с последовательностями
|
||
|
||
## Пример с текстовыми данными
|
||
```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]
|
||
```
|