Как работают LLM под капотом: токенизация, эмбеддинги, attention и генерация с примерами на JavaScript

#LLM#JavaScript#AI#tokenization#embeddings

TL;DR: В этой статье мы разберем ключевые компоненты языковых моделей (LLM) — токенизацию, эмбеддинги, механизм attention и генерацию текста — с примерами на JavaScript, которые можно запустить и поэкспериментировать.

Введение

Языковые модели (LLM) стали основой современных AI-решений, таких как ChatGPT, Bard и другие. Однако их внутренняя работа часто остается загадкой для многих разработчиков. В этой статье мы разберем ключевые этапы обработки текста в LLM: токенизацию, создание эмбеддингов, механизм attention и генерацию текста. Все это будет проиллюстрировано примерами на JavaScript, чтобы вы могли лучше понять, как это работает на практике.

Токенизация

Первый шаг в обработке текста — это токенизация. Токенизация преобразует текст в последовательность токенов — чисел, которые модель может обрабатывать. Например, слово “hello” может быть преобразовано в токен 1234.

Пример на JavaScript:

const tokenizer = {
  vocab: {"hello": 1234, "world": 5678},
  tokenize(text) {
    return text.split(" ").map(word => this.vocab[word] || 0);
  }
};

const tokens = tokenizer.tokenize("hello world");
console.log(tokens); // [1234, 5678]

В реальных моделях токенизация может быть более сложной, учитывая морфологию языка и контекст.

Эмбеддинги

После токенизации каждый токен преобразуется в вектор фиксированной длины — эмбеддинг. Эмбеддинги представляют семантическое значение токена в многомерном пространстве.

Пример на JavaScript:

const embeddings = {
  matrix: [
    [0.1, 0.2], // embedding для токена 1234 ("hello")
    [0.3, 0.4]  // embedding для токена 5678 ("world")
  ],
  getEmbedding(token) {
    return this.matrix[token - 1] || [0, 0];
  }
};

const embedding = embeddings.getEmbedding(1234);
console.log(embedding); // [0.1, 0.2]

Механизм Attention

Механизм attention позволяет модели “фокусироваться” на наиболее важных частях входных данных. Это достигается путем вычисления взвешенной суммы эмбеддингов.

Пример на JavaScript:

function dotProduct(a, b) {
  return a.reduce((sum, val, i) => sum + val * b[i], 0);
}

function softmax(arr) {
  const max = Math.max(...arr);
  const exps = arr.map(x => Math.exp(x - max));
  const sum = exps.reduce((a, b) => a + b, 0);
  return exps.map(x => x / sum);
}

function attention(query, keys, values) {
  const scores = keys.map(key => dotProduct(query, key));
  const weights = softmax(scores);
  return values.reduce((sum, val, i) => sum + val * weights[i], 0);
}

const query = [0.1, 0.2];
const keys = [[0.1, 0.2], [0.3, 0.4]];
const values = [1, 2];

const result = attention(query, keys, values);
console.log(result); // Примерный результат: 1.5

Генерация текста

После обработки входных данных модель генерирует текст, предсказывая следующий токен на основе предыдущих. Этот процесс повторяется до тех пор, пока не будет сгенерирован весь текст.

Пример на JavaScript:

function generateText(initialTokens, model, maxLength = 10) {
  let tokens = [...initialTokens];
  while (tokens.length < maxLength) {
    const nextToken = model.predict(tokens);
    tokens.push(nextToken);
  }
  return tokens;
}

const model = {
  predict(tokens) {
    // Простая модель, которая всегда возвращает следующий токен
    return tokens[tokens.length - 1] + 1;
  }
};

const initialTokens = [1234];
const generatedText = generateText(initialTokens, model);
console.log(generatedText); // Пример: [1234, 1235, 1236, ...]

Практическое применение

Понимание работы LLM помогает в создании собственных моделей, оптимизации существующих и интеграции AI в приложения. Например, вы можете использовать токенизацию и эмбеддинги для создания поисковых систем, а механизм attention — для улучшения качества генерации текста.

Заключение

Языковые модели — это мощный инструмент, который меняет мир AI. Понимание их внутренней работы позволяет лучше использовать их возможности и создавать более эффективные решения. В этой статье мы рассмотрели ключевые этапы обработки текста в LLM с примерами на JavaScript, которые вы можете использовать в своих проектах.


Источник: https://nitayneeman.com/blog/how-ai-works-under-the-hood-llms-explained-with-code/