mirror of
https://github.com/pese-git/simple-llm.git
synced 2026-01-23 21:14:17 +00:00
4.1 KiB
4.1 KiB
TokenEmbeddings - Векторные представления токенов
Назначение
Модуль TokenEmbeddings преобразует дискретные индексы токенов в плотные векторные представления (эмбеддинги). Это фундаментальный компонент большинства нейросетевых моделей для обработки естественного языка (NLP).
Алгоритм работы
flowchart TD
A[Начало] --> B[Инициализация таблицы эмбеддингов]
B --> C[Получение индексов токенов]
C --> D{Все ли индексы\nв пределах словаря?}
D -->|Да| E[Поиск векторов в таблице]
D -->|Нет| F[Ошибка: индекс вне словаря]
E --> G[Возврат тензора эмбеддингов]
G --> H[Обновление весов при обучении]
H --> I[Конец]
F --> I
-
Инициализация:
- Создается таблица эмбеддингов размером
vocab_size x emb_size - Каждая строка таблицы соответствует векторному представлению одного токена
- Инициализация происходит случайным образом (обычно из нормального распределения)
- Создается таблица эмбеддингов размером
-
Преобразование токенов:
- На вход принимается тензор целых чисел (индексов токенов)
- Для каждого индекса выполняется "lookup" в таблице эмбеддингов
- Возвращается тензор векторных представлений
-
Обучение:
- Веса эмбеддингов обновляются в процессе обучения модели
- Сходные по значению токены получают близкие векторные представления
Использование
from simple_llm.embedding.token_embedings import TokenEmbeddings
# Инициализация
embedding_layer = TokenEmbeddings(
vocab_size=10000, # размер словаря
emb_size=300 # размерность векторов
)
# Пример использования
tokens = torch.tensor([[1, 2, 3], [4, 5, 6]]) # индексы токенов
embeddings = embedding_layer(tokens) # векторные представления
Параметры
| Параметр | Тип | Описание |
|---|---|---|
| vocab_size | int | Размер словаря (количество уникальных токенов) |
| emb_size | int | Размерность векторных представлений |
Особенности
- Автоматическое обучение: Векторы адаптируются в процессе тренировки модели
- Эффективность: Быстрое преобразование индексов в векторы
- Гибкость: Может использоваться как самостоятельный слой или часть более сложной архитектуры
Типичные сценарии использования
- Первый слой в нейросетевых моделях NLP
- Представление категориальных признаков
- Создание плотных представлений для sparse данных
Рекомендации
- Для больших словарей используйте размерность 256-1024
- При использовании предобученных эмбеддингов можно заморозить слой (embedding_layer.requires_grad_(False))
- Для обработки неизвестных токенов (OOV) резервируйте нулевой индекс