Практика: эмбеддинги на PHP с помощью трансформеров
Inference вместо обучения. TransformersPHP как инженерный инструмент.
В этой главе мы аккуратно приземлим теорию эмбеддингов на инженерную практику. Без обучения моделей, без GPU-кластеров и без магии. Только inference, готовые трансформеры и PHP как рабочий инструмент.
Наша цель проста и имеет практическую цель: научиться получать векторные представления текстов и использовать их для поиска, сравнения и анализа смысла. Мы будем относиться к трансформерам не как к объекту исследования, а как к инфраструктурному компоненту – примерно так же, как к базе данных или поисковому движку.
Почему inference, а не обучение
Если вы работаете с PHP, почти наверняка большая часть вашей реальности – это веб-приложения, API, сервисы, где важны стабильность, повторяемость и предсказуемость. Обучение трансформеров плохо вписывается в эту картину: оно требует больших датасетов, серьёзных вычислительных ресурсов и отдельной MLOps-инфраструктуры.
Inference, напротив, решает 80% прикладных задач:
семантический поиск
кластеризация документов
поиск похожих записей
рекомендации
дедупликация контента
интеллектуальная навигация
Мы берём уже обученную модель и используем её как функцию:
text→v∈Rd
В этом и заключается инженерный подход.
Что такое эмбеддинг с точки зрения математики
Формально эмбеддинг – это отображение из пространства текстов в евклидово пространство фиксированной размерности:
f:T→Rd
Где:
T – множество всех возможных текстов
d – размерность эмбеддинга (часто 384, 512, 768, 1024)
Ключевой момент здесь не в самой функции f, а в геометрии получившегося пространства. Семантически близкие тексты отображаются в точки, расположенные близко друг к другу.
На практике мы почти никогда не работаем с координатами напрямую. Нас интересует только расстояние между векторами:
косинусное сходство
евклидово расстояние
иногда скалярное произведение
Косинусное сходство
Самая популярная мера:
cos(a,b)=∥a∥∥b∥a⋅b
Она отвечает на вопрос: "насколько одинаково направлены два вектора". Для эмбеддингов это обычно важнее, чем их длина. Подробно мы разбирали эту тему в главе "Расстояния и сходство".
23.1 Векторы косинусного сходства
Трансформер как чёрный ящик
С инженерной точки зрения трансформер – это композиция функций:
Нас интересует только вход и выход. Всё, что внутри – self-attention, positional encoding, multi-head attention – важно концептуально, но не обязательно для практического использования.
Тем не менее полезно иметь интуицию.
23.2 Обзор трансформера
Рассмотрим TransformersPHP как инженерный инструмент
TransformersPHP – это PHP-обёртка вокруг идей и форматов, пришедших из экосистемы Hugging Face. Обычно она используется вместе с ONNX-моделями или через внешние inference-движки.
Именно это делает подход надёжным и воспроизводимым.
Архитектура практического решения
Типичная схема выглядит так:
23.3 Конвейер встраивания (embedding pipeline)
Первый пример: получение эмбеддинга текста
Начнём с минимального примера. Предположим, у нас уже есть ONNX-модель для эмбеддингов, например из семейства sentence-transformers.
Здесь важно несколько моментов:
мы не обучаем модель
результат всегда одинаков для одного и того же текста
размерность вектора фиксирована
Pooling: почему это вообще нужно
Трансформер возвращает эмбеддинг для каждого токена. Но нам нужен один вектор на весь текст.
Самые популярные стратегии:
mean pooling – среднее по токенам
max pooling – максимум по каждому измерению
CLS token – специальный агрегирующий токен
На практике mean pooling чаще всего даёт стабильные результаты.
23.4 Объяснение объединения (pooling_explanation)
Пример: косинусное сходство на PHP
Теперь, когда у нас есть векторы, мы можем их сравнивать.
Использование:
Практический кейс: семантический поиск
Представим, что у нас есть набор статей или событий (например, таймлайн новостей), и мы хотим искать не по словам, а по смыслу.
Алгоритм:
Предварительно вычислить эмбеддинги всех документов
Сохранить их (БД, файл, vector store)
Для запроса пользователя получить его эмбеддинг
Найти ближайшие векторы
С точки зрения PHP это выглядит как обычная бизнес-логика, а не ML-экзотика.
23.5 Семантический поиск
Инженерные замечания
Несколько практических наблюдений, которые обычно приходят только с опытом:
Кэшируйте эмбеддинги. Inference хоть и дешевле обучения, но не бесплатен.
Нормализуйте векторы заранее, если часто считаете сходство.
Размерность важна меньше, чем качество модели.
Для большинства задач достаточно готовых sentence-моделей.
Где эмбеддинги особенно хорошо ложатся на PHP
Эмбеддинги неожиданно хорошо сочетаются с PHP-экосистемой:
CMS и контент-платформы
корпоративные базы знаний
поиск по логам и тикетам
e-commerce каталоги
аналитические панели
PHP здесь выступает не как ML-язык, а как связующее звено между бизнес-логикой и интеллектуальными моделями.
Итог
В этой главе мы посмотрели на эмбеддинги не как на абстрактную ML-концепцию, а как на инженерный инструмент. Трансформеры в режиме inference отлично вписываются в PHP-приложения, если относиться к ним прагматично.
Вы не обучаете модель. Вы используете её.
Именно в этом месте машинное обучение перестаёт быть наукой и становится частью системы.