3. Ембеддинги токенів
Tip
Вивчайте та практикуйте AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.
Ембеддинги токенів
Після токенізації текстових даних наступним критичним кроком підготовки даних для навчання великих мовних моделей (LLM) на кшталт GPT є створення ембеддингів токенів. Ембеддинги токенів перетворюють дискретні токени (наприклад, слова або субслова) в неперервні числові вектори, які модель може обробляти та навчатися на їх основі. Це пояснення розбиває ембеддинги токенів, їх ініціалізацію, використання та роль позиційних ембеддингів у покращенні розуміння послідовності токенів моделлю.
Tip
Мета цього третього етапу дуже проста: призначити кожному з попередніх токенів у словнику вектор бажаної розмірності для навчання моделі. Кожне слово у словнику буде точкою у просторі з X вимірами.
Зауважте, що спочатку положення кожного слова у просторі просто ініціалізується “випадково”, і ці положення є параметрами, що навчаються (будуть покращуватися під час навчання).Більше того, під час створення ембеддингів токенів створюється ще один шар ембеддингів, який представляє (у цьому випадку) абсолютну позицію слова у навчальному реченні. Таким чином слово на різних позиціях у реченні матиме різне представлення (значення).
Що таке ембеддинги токенів?
Ембеддинги токенів — це числові представлення токенів у неперервному векторному просторі. Кожен токен у словнику пов’язаний з унікальним вектором фіксованої розмірності. Ці вектори захоплюють семантичну та синтаксичну інформацію про токени, дозволяючи моделі розуміти зв’язки та шаблони в даних.
- Розмір словника: Загальна кількість унікальних токенів (наприклад, слова, субслова) у словнику моделі.
- Розмірність ембеддингів: Кількість числових значень (вимірів) у векторі кожного токена. Більша розмірність може захопити більш тонку інформацію, але вимагає більше обчислювальних ресурсів.
Приклад:
- Розмір словника: 6 токенів [1, 2, 3, 4, 5, 6]
- Розмірність ембеддингів: 3 (x, y, z)
Ініціалізація ембеддингів токенів
На початку навчання ембеддинги токенів зазвичай ініціалізуються невеликими випадковими значеннями. Ці початкові значення коригуються (тонко налаштовуються) під час навчання, щоб краще відображати значення токенів на основі навчальних даних.
PyTorch Example:
import torch
# Set a random seed for reproducibility
torch.manual_seed(123)
# Create an embedding layer with 6 tokens and 3 dimensions
embedding_layer = torch.nn.Embedding(6, 3)
# Display the initial weights (embeddings)
print(embedding_layer.weight)
Я не маю доступу до вмісту файлу. Будь ласка, вставте текст з src/AI/AI-llm-architecture/3.-token-embeddings.md, і я перекладу його українською, зберігаючи всю markdown/HTML синтаксис та дотримуючись ваших правил.
luaCopy codeParameter containing:
tensor([[ 0.3374, -0.1778, -0.1690],
[ 0.9178, 1.5810, 1.3010],
[ 1.2753, -0.2010, -0.1606],
[-0.4015, 0.9666, -1.1481],
[-1.1589, 0.3255, -0.6315],
[-2.8400, -0.7849, -1.4096]], requires_grad=True)
Пояснення:
- Кожен рядок відповідає токену у словнику.
- Кожен стовпець представляє вимір у векторі ембедінгу.
- Наприклад, токен з індексом
3має вектор ембедінгу[-0.4015, 0.9666, -1.1481].
Доступ до ембедінгу токена:
# Retrieve the embedding for the token at index 3
token_index = torch.tensor([3])
print(embedding_layer(token_index))
I don’t have the file contents. Please paste the markdown/text from src/AI/AI-llm-architecture/3.-token-embeddings.md that you want translated, and I will return a Ukrainian translation preserving all markdown, code, links, tags and paths per your instructions.
tensor([[-0.4015, 0.9666, -1.1481]], grad_fn=<EmbeddingBackward0>)
Інтерпретація:
- Токен з індексом
3представлений вектором[-0.4015, 0.9666, -1.1481]. - Ці значення — навчувані параметри, які модель коригуватиме під час навчання, щоб краще відображати контекст і значення токена.
Як працюють ембеддинги токенів під час навчання
Під час навчання кожний токен у вхідних даних перетворюється на відповідний вектор ембеддингу. Ці вектори потім використовуються в різних обчисленнях у межах моделі, наприклад у механізмах уваги та шарах нейронної мережі.
Приклад сценарію:
- Розмір батчу: 8 (кількість зразків, оброблених одночасно)
- Максимальна довжина послідовності: 4 (кількість токенів на зразок)
- Розмірність ембеддингу: 256
Структура даних:
- Кожен батч представлений як 3D тензор з формою
(batch_size, max_length, embedding_dim). - Для нашого прикладу форма буде
(8, 4, 256).
Візуалізація:
cssCopy codeBatch
┌─────────────┐
│ Sample 1 │
│ ┌─────┐ │
│ │Token│ → [x₁₁, x₁₂, ..., x₁₂₅₆]
│ │ 1 │ │
│ │... │ │
│ │Token│ │
│ │ 4 │ │
│ └─────┘ │
│ Sample 2 │
│ ┌─────┐ │
│ │Token│ → [x₂₁, x₂₂, ..., x₂₂₅₆]
│ │ 1 │ │
│ │... │ │
│ │Token│ │
│ │ 4 │ │
│ └─────┘ │
│ ... │
│ Sample 8 │
│ ┌─────┐ │
│ │Token│ → [x₈₁, x₈₂, ..., x₈₂₅₆]
│ │ 1 │ │
│ │... │ │
│ │Token│ │
│ │ 4 │ │
│ └─────┘ │
└─────────────┘
Пояснення:
- Кожен токен у послідовності представлений 256-вимірним вектором.
- Модель обробляє ці векторні представлення, щоб вивчати мовні закономірності та генерувати передбачення.
Позиційні векторні представлення: додавання контексту до векторних представлень токенів
Хоча векторні представлення токенів відображають значення окремих токенів, вони самі по собі не кодують позицію токенів у послідовності. Розуміння порядку токенів є критично важливим для розуміння мови. Саме тут вступають в дію позиційні векторні представлення.
Чому потрібні позиційні векторні представлення:
- Порядок токенів має значення: У реченнях значення часто залежить від порядку слів. Наприклад, «Кіт сів на килимок» проти «Килимок сів на кота».
- Обмеження векторних представлень: Без позиційної інформації модель трактує токени як «мішок слів», ігноруючи їхню послідовність.
Типи позиційних векторних представлень:
- Абсолютні позиційні векторні представлення:
- Призначають унікальний вектор позиції для кожної позиції в послідовності.
- Приклад: Перший токен у будь-якій послідовності має однакове позиційне представлення, другий токен має інше і так далі.
- Використовуються в: OpenAI’s GPT models.
- Відносні позиційні векторні представлення:
- Кодують відносну відстань між токенами, а не їхні абсолютні позиції.
- Приклад: Вказують, наскільки далеко один токен від іншого, незалежно від їхніх абсолютних позицій у послідовності.
- Використовуються в: таких моделях, як Transformer-XL та деяких варіантах BERT.
Як інтегруються позиційні векторні представлення:
- Та сама розмірність: Позиційні векторні представлення мають ту ж розмірність, що й векторні представлення токенів.
- Додавання: Їх додають до векторних представлень токенів, поєднуючи ідентичність токена з позиційною інформацією без збільшення загальної розмірності.
Приклад додавання позиційних векторних представлень:
Припустимо, векторне представлення токена дорівнює [0.5, -0.2, 0.1], а його позиційне векторне представлення — [0.1, 0.3, -0.1]. Поєднане представлення, що використовується моделлю, буде:
Combined Embedding = Token Embedding + Positional Embedding
= [0.5 + 0.1, -0.2 + 0.3, 0.1 + (-0.1)]
= [0.6, 0.1, 0.0]
Переваги позиційних ембедингів:
- Урахування контексту: Модель може розрізняти токени за їхніми позиціями.
- Розуміння послідовності: Дозволяє моделі розуміти граматику, синтаксис та значення, що залежать від контексту.
Позиційні ембеддинги в сучасних LLMs
Rotary Positional Embeddings (RoPE)
RoPE кодує позицію, застосовуючи залежне від позиції обертання до пар вимірів у векторах query/key, перетворюючи абсолютні позиції на відносні фазові зсуви. Це надає інформацію про відносні позиції, зберігаючи незмінну розмірність ембеддингів і широко використовується в останніх decoder-only LLMs.
For how token and positional embeddings are combined inside the model, see the LLM architecture page.
Extending Context Windows in RoPE-Based Models
Останні дослідження показують, що довжина контексту часто обмежена схемою позиційного кодування, а не самою матрицею токен-ембеддингів.
- Position Interpolation (PI): Перескалює індекси позицій так, щоб довші послідовності відображалися в діапазон, побачений під час навчання, що дозволяє продовжити контекст з мінімальним донавчанням. Приклад:
# Position Interpolation (PI) intuition
orig_ctx = 2048
new_ctx = 8192
scaled_pos = pos * (orig_ctx / new_ctx)
- YaRN: Обчислювально-ефективна стратегія розширення RoPE, яка змінює масштабування/інтерполяцію RoPE, щоб екстраполювати на довші контексти з меншою кількістю додаткових кроків навчання.
Приклад коду
Далі — приклад коду з https://github.com/rasbt/LLMs-from-scratch/blob/main/ch02/01_main-chapter-code/ch02.ipynb:
# Use previous code...
# Create dimensional emdeddings
"""
BPE uses a vocabulary of 50257 words
Let's supose we want to use 256 dimensions (instead of the millions used by LLMs)
"""
vocab_size = 50257
output_dim = 256
token_embedding_layer = torch.nn.Embedding(vocab_size, output_dim)
## Generate the dataloader like before
max_length = 4
dataloader = create_dataloader_v1(
raw_text, batch_size=8, max_length=max_length,
stride=max_length, shuffle=False
)
data_iter = iter(dataloader)
inputs, targets = next(data_iter)
# Apply embeddings
token_embeddings = token_embedding_layer(inputs)
print(token_embeddings.shape)
torch.Size([8, 4, 256]) # 8 x 4 x 256
# Generate absolute embeddings
context_length = max_length
pos_embedding_layer = torch.nn.Embedding(context_length, output_dim)
pos_embeddings = pos_embedding_layer(torch.arange(max_length))
input_embeddings = token_embeddings + pos_embeddings
print(input_embeddings.shape) # torch.Size([8, 4, 256])
Посилання
Tip
Вивчайте та практикуйте AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.


