Векторные модели — это «черные ящики». Вы отправляете текст и получаете на выходе вектор. Список чисел с плавающей запятой без меток, водяных знаков или метаданных, сообщающих о его происхождении. Если кто-то передаст вам 1024-мерный вектор, сможете ли вы определить, был ли он создан BGE-M3, jina-embeddings-v5-text-small или Qwen3-Embedding? И даже если два вектора получены из одной и той же модели, сможете ли вы понять, были ли они сгенерированы с использованием инструкции для поиска или для классификации?
Оказывается, это возможно. Числовые закономерности в векторном представлении несут в себе удивительно четкий «отпечаток пальца» модели, которая его создала, и даже промпта инструкции, использованного при выводе. Мы обучили небольшой классификатор на базе трансформера (800 тыс. параметров) для идентификации 68 различных комбинаций моделей и задач из более чем 25 векторных моделей, достигнув точности 87%, анализируя исключительно необработанные числа. Вы можете сами попробовать интерактивное демо: вставьте любой вектор и посмотрите, какую модель и задачу определит классификатор.
tagТокенизация: обработка чисел как текста
1024-мерный вектор — это последовательность из 1024 чисел с плавающей запятой. Чтобы подать его в классификатор, нам нужно представление, которое не делает никаких предположений о структуре значений.
Мы применили смелый подход: рассматриваем каждое число как строку символов-цифр и токенизируем её посимвольно. Это может показаться неэффективным по сравнению с более компактными альтернативами, но, как выяснилось, это верный компромисс. Для такого значения, как -0.1234, последовательность токенов будет следующей:
- 0 . 1 2 3 4Измерения разделяются токеном [SEP]. Вся последовательность начинается с [CLS]. Полный словарь состоит из 15 токенов:

| Token ID | Meaning |
|---|---|
| 0-9 | Digits |
| 10 | Minus sign |
| 11 | Decimal point |
| 12 | [SEP] |
| 13 | [CLS] |
| 14 | [PAD] |
При точности в 4 знака после запятой 1024-мерный вектор генерирует примерно 7 700 токенов. 384-мерный вектор создает около 2 900 токенов. Длина последовательности естественным образом варьируется в зависимости от размерности вектора, и при этом не требуется заполнение (padding) или усечение между измерениями. Поскольку токенизатор представляет собой прямое сопоставление целых чисел без обучаемых компонентов, он чрезвычайно эффективен.
tagАрхитектура модели

Классификатор представляет собой небольшой трансформер (только энкодер) с 4 слоями, размерностью 128, 4 головами внимания с RoPE, SwiGLU FFN и RMSNorm. Токен CLS объединяется и проецируется в выходное пространство из 68 классов. Общее количество параметров составляет примерно 800 тыс.
Несмотря на крошечный словарь из 15 токенов, это принципиально задача для длинных последовательностей. Один 1024-мерный вектор превращается в последовательность из 7 700 токенов, что длиннее типичных входных данных в NLP. Модель должна анализировать тысячи токенов-цифр, чтобы уловить статистические закономерности, отличающие выходные данные одной модели от другой. Это делает эффективное внимание и позиционное кодирование (RoPE) необходимыми даже в таком малом масштабе.
tagДанные
Мы использовали 10 000 многоязычных текстовых выборок, каждая из которых была обработана более чем 25 моделями с различными префиксами задач, такими как retrieval.query, retrieval.document, classification и clustering, что в итоге дало 68 различных классов. Важно отметить, что эти 68 классов включают не только разные модели, но и разные промпты инструкций, примененные к одной и той же модели. Например, jina-embeddings-v5-text-small с инструкцией для поиска и jina-embeddings-v5-text-small с инструкцией для классификации рассматриваются как отдельные классы. Цель состоит в том, чтобы определить как саму модель, так и специфичное для задачи поведение, основываясь только на необработанных выходных данных.
Каждый класс разделен на 7 000 обучающих и 3 000 валидационных выборок. Модели охватывают пять выходных размерностей.
| Dimension | Classes | Example Models |
|---|---|---|
| 384 | 8 | BGE-small, E5-small, MiniLM, GTE-small |
| 512 | 2 | BGE-small-zh |
| 768 | 24 | BGE-base, E5-base, jina-embeddings-v5-text-nano, Nomic, INSTRUCTOR, LaBSE |
| 1024 | 32 | BGE-M3, E5-large, jina-embeddings-v3, jina-embeddings-v5-text-small, Qwen3-0.6B, Snowflake, mxbai |
| 1536 | 2 | GTE-Qwen2-1.5B |
Только в группе 1024-мерных моделей необходимо разделить 32 класса, включая модели из одного семейства с разными префиксами задач. Здесь классификатор не может полагаться на длину последовательности; он должен обучаться исключительно на числовых закономерностях.
tagОбучение
Обучение проходило на A100 40GB с использованием смешанной точности, батчинга по длине (length-bucketed batching) и AdamW с косинусным графиком обучения, достигая скорости около 340 тыс. токенов в секунду и 23 800 шагов за эпоху.
tagРезультаты экспериментов

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

Общая точность составляет 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 класса), где классификатор должен полагаться исключительно на числовые закономерности, а не на длину последовательности.
tagАльтернативные подходы
tagБакет-токенизатор (Bucket Tokenizer)
Квантование каждого измерения в одну из K корзин (например, 256), создающее компактную последовательность длиной D, по одному токену на измерение. Это подход, использованный в Embedding-Converter (ICLR 2025). Для 1024-мерного вектора вы получаете 1024 токена вместо 7 700.
Разбиение на корзины накладывает априорное допущение на распределение значений. Вы должны определить границы корзин до того, как увидите данные. Но разные модели распределяют свои значения принципиально по-разному. Некоторые концентрируют массу в узком диапазоне около нуля, другие равномерно распределяют значения в интервале [-1, 1], и распределение варьируется в зависимости от измерения внутри одной модели. Любая фиксированная схема разбиения либо теряет разрешение там, где значения группируются, либо недостаточно детальна там, где они распределены. Адаптивное разбиение для каждой модели лишает метод смысла, так как для этого нужно заранее знать идентичность модели.
tagMLP фиксированной длины
Подача необработанного вектора напрямую в MLP-классификатор. Фундаментальная проблема здесь выходит за рамки вопроса переменной размерности (наши модели создают векторы от 384 до 1536 измерений). Даже если вы дополните всё до фиксированной длины, вы неявно предполагаете, что индексы измерений семантически выровнены между моделями — что измерение 1 в BGE-M3 соответствует измерению 1 в jina-embeddings-v5-text-small. Это предположение ложно. Различные архитектуры, обучающие данные и цели обучения создают совершенно разные внутренние представления.
Оба альтернативных подхода накладывают структурные допущения, которые модель должна обходить. Посимвольная токенизация цифр избегает их всех. Это наиболее свободное от допущений представление, которое мы смогли найти: вот точные цифры каждого числа по порядку, разделенные маркерами. С остальным разберись сама.
tagЗаключение
Векторные модели обучаются отображать семантически похожие тексты в близкие векторы. Цель обучения ничего не говорит о том, чтобы сделать векторы идентифицируемыми или кодировать «подпись» модели. Тем не менее, эта подпись существует, и она достаточно сильна, чтобы крошечный классификатор мог её обнаружить. «Стиль» векторной модели, специфические числовые паттерны, которые она использует для представления смысла, так же индивидуальны, как почерк. Даже выбор промпта инструкции оставляет обнаруживаемый след.
Это имеет практическую ценность для аудита векторных баз данных, когда исходная модель неизвестна, для проверки того, что API действительно использует заявленную модель, и для обнаружения изменений версий моделей. Что еще более важно, это говорит нам о том, что векторные модели кодируют смысл структурно разными способами, даже когда производят векторы одинаковой размерности.







