Dev48
ЯЗЫК
  • О нас
  • Услуги
  • Индустрии
  • Технологии
  • Статьи
  • Контакты
Забронировать звонок
    Главная/Статьи/Identifikatsiya modeley embeddingov po neobrabotannym chislovym znacheniyam
Dev48

© 2026 · All rights reserved.

Идентификация моделей эмбеддингов по необработанным числовым значениям

Источник: Jina AI

Идентификация моделей эмбеддингов по необработанным числовым значениям

Источник: Jina AI

Миниатюрный трансформер, который создает «отпечатки пальцев» моделей эмбеддингов, считывая необработанные числовые значения. Никакой инженерии признаков.

25 сентября 2026 г.

Демонстрация отпечатков эмбеддингов

Вставьте любой вектор эмбеддинга, чтобы определить, какая модель его создала.

Модели эмбеддингов — это «черные ящики». Вы подаете текст на вход, а на выходе получаете вектор. Это список чисел с плавающей запятой без меток, водяных знаков или метаданных, указывающих на их происхождение. Если кто-то даст вам 1024-мерный вектор, сможете ли вы сказать, был ли он создан BGE-M3, jina-embeddings-v5-text-small или Qwen3-Embedding? И даже если два вектора получены от одной и той же модели, сможете ли вы определить, были ли они сгенерированы с инструкцией для поиска (retrieval) или для классификации?

Оказывается, это возможно. Числовые паттерны в векторе эмбеддинга несут на удивление четкий «отпечаток» модели, которая его создала, и даже инструкции, использованной при инференсе. Мы обучили небольшой трансформер-классификатор (800 тыс. параметров) идентифицировать 68 различных комбинаций моделей и задач из более чем 25 моделей эмбеддингов, достигнув точности 87%, считывая только необработанные цифры с плавающей запятой. Вы можете попробовать демо-версию самостоятельно: вставьте любой вектор эмбеддинга и посмотрите, какую модель и задачу определит классификатор.

Токенизация: числа как текст

1024-мерный вектор эмбеддинга — это последовательность из 1024 чисел с плавающей запятой. Чтобы подать их в классификатор, нам нужно представление, которое не делает никаких предположений о структуре значений.

Мы выбрали смелый подход: рассматривать каждое число с плавающей запятой как строку символов-цифр и токенизировать его посимвольно. Это может показаться нерациональным по сравнению с более компактными альтернативами, но, как выяснилось, это оптимальный компромисс. Для значения вроде -0.1234 последовательность токенов выглядит так:

Размерности разделяются токеном [SEP]. Вся последовательность начинается с [CLS]. Полный словарь состоит из 15 токенов:

При точности до 4 знаков после запятой 1024-мерный вектор дает примерно 7700 токенов. 384-мерный вектор дает около 2900 токенов. Длина последовательности естественным образом варьируется в зависимости от размерности эмбеддинга, поэтому дополнение (padding) или обрезка (truncation) по размерностям не требуются. Поскольку токенизатор представляет собой прямое целочисленное отображение без обучаемых компонентов, он чрезвычайно эффективен.

Архитектура модели

Классификатор представляет собой небольшой трансформер только с энкодером, состоящий из 4 слоев, 128 размерностей, 4 голов внимания с RoPE, SwiGLU FFN и RMSNorm. Токен CLS объединяется (pooled) и проецируется в пространство вывода из 68 классов. Общее количество параметров составляет около 800 тыс.

Несмотря на крошечный словарь из 15 токенов, по своей сути это задача с длинными последовательностями. Один 1024-мерный эмбеддинг превращается в последовательность из 7700 токенов, что длиннее типичных входных данных NLP. Модель должна учитывать тысячи токенов-цифр, чтобы уловить статистические закономерности, отличающие вывод одной модели от другой. Это делает эффективное внимание и позиционное кодирование (RoPE) необходимыми даже в таком малом масштабе.

Данные

Мы использовали 10 000 многоязычных текстовых образцов, каждый из которых был преобразован в эмбеддинги более чем 25 моделями с различными префиксами задач, такими как retrieval.query, retrieval.document, classification и clustering, что дало 68 различных классов. Важно отметить, что 68 классов включают не только разные модели, но и разные инструкции (промпты), примененные к одной и той же модели. Например, jina-embeddings-v5-text-small с инструкцией для поиска и jina-embeddings-v5-text-small с инструкцией для классификации рассматриваются как отдельные классы. Цель состоит в том, чтобы обнаружить как идентичность модели, так и специфическое поведение задачи, основываясь только на необработанных выходных данных.

Каждый класс разделен на 7000 обучающих и 3000 валидационных образцов. Модели охватывают пять размерностей вывода.

Только в группе 1024-мерных векторов есть 32 класса для разделения, включая модели из одного семейства с разными префиксами задач. Классификатор не может полагаться здесь на длину последовательности; он должен изучать чисто числовые паттерны.

Обучение

Обучение проводилось на A100 40GB со смешанной точностью, батчингом с группировкой по длине и оптимизатором AdamW с косинусным расписанием, достигая около 340 тыс. токенов в секунду и 23 800 шагов на эпоху.

Экспериментальные результаты

Небольшой разрыв между обучением и валидацией и постоянное улучшение результатов свидетельствуют об обобщающем обучении, а не о запоминании. При 800 тыс. параметров модель приближается к пределу своей емкости, и более крупная модель, вероятно, повысила бы точность.

Матрица ошибок

Общая точность составляет 87,0%, что в 59 раз лучше случайного угадывания (1,5%). Несколько моделей классифицируются идеально, включая GTE-large, варианты классификации jina-embeddings-v3/jina-embeddings-v5-text-small, LaBSE и Paraphrase MiniLM. Самыми сложными случаями являются варианты с разными префиксами задач для одной и той же базовой модели. Qwen3-0.6B имеет наибольшее количество внутрисемейных ошибок среди своих 4 типов задач, в то время как jina-embeddings-v5-text-small достигает 92% точности внутри семейства по 5 задачам. Тот факт, что разные инструкции для одной и той же модели создают различимые паттерны вывода, сам по себе является примечательным открытием, предполагающим, что адаптация к задаче оставляет измеримый числовой след, даже когда базовые веса идентичны.

Модели из разных семейств (BGE против Jina против E5 против Nomic) гораздо легче разделить, чем варианты задач одной и той же модели. Основная архитектура и методология обучения оставляют более сильный «подписной» след, чем специфические для задачи адаптеры. Настоящая проблема заключается в группе 1024-мерных (32 класса) и 768-мерных (24 класса) векторов, где классификатор должен полагаться исключительно на числовые паттерны, а не на длину последовательности.

Альтернативные подходы

Токенизатор с бакетами (Bucket Tokenizer)

Квантование каждой размерности в один из K бакетов (например, 256), что дает компактную последовательность длиной D, по одному токену на размерность. Этот подход используется в Embedding-Converter (ICLR 2025). Для 1024-мерного вектора вы получаете 1024 токена вместо 7700.

Бакетирование накладывает априорное распределение на значения. Вы должны определить границы бакетов до того, как увидите данные. Но разные модели распределяют свои значения принципиально разными способами. Некоторые концентрируют массу в узком диапазоне вокруг нуля, другие равномерно распределяют значения в диапазоне [-1, 1], и распределение варьируется по размерностям внутри одной модели. Любая фиксированная схема бакетирования либо тратит разрешение там, где значения кластеризуются, либо недостаточно детализирует там, где они распределены. Адаптивное бакетирование для каждой модели сводит на нет смысл подхода, так как требует знания идентичности модели заранее.

MLP с фиксированной длиной

Подача необработанного вектора эмбеддинга напрямую в классификатор MLP. Фундаментальная проблема выходит за рамки вопроса переменной размерности (наши модели создают векторы от 384 до 1536 размерностей). Даже если дополнить всё до фиксированной длины, вы неявно предполагаете, что индексы размерностей семантически выровнены между моделями, что первая размерность BGE-M3 соответствует первой размерности jina-embeddings-v5-text-small. Это предположение ложно. Разные архитектуры, обучающие данные и цели обучения создают совершенно разные внутренние представления.

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

Заключение

Модели эмбеддингов обучаются отображать семантически похожие тексты в близко расположенные векторы. Цель обучения ничего не говорит о том, чтобы сделать векторы идентифицируемыми, и ничего не говорит о кодировании сигнатуры модели. Тем не менее, сигнатура присутствует, и она достаточно выражена, чтобы ее мог обнаружить крошечный классификатор. «Стиль» модели эмбеддингов, специфические числовые паттерны, которые она использует для представления смысла, так же характерны, как почерк. Даже выбор инструкции в промпте оставляет обнаруживаемый след.

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

← Все статьи