Эмбеддинг простыми словами — это всего лишь сопоставление некоторого объекта, с которым должна работать нейронная сеть, и набора чисел — вектора. Количество кооридинат вектора и является мерностью n пространства, в котором задан данный вектор (эмбеддинг). Более подробно про эмбеддинги можно почитать в этой статье для начинающих.

Обычно при упоминании отображения эмбеддингов (или как мы уже знаем, n‑мерных векторов) имеют в виду отображение множества этих векторов на двумерное или трёхмерное пространство с уменьшением размерности. Про основные методы отображения n‑мерных векторов рассказывается, например, в статье «Как у алгоритмов снижения размерности получается вас обмануть».

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

Однако для анализа векторов человеком может быть полезно также визуализировать и отдельный вектор. В этом случае возможно сравнивать «форму» объектов, отображающих векторы и на основании похожести такой формы делать вывод о близости сравниваемых векторов. Также было бы интересно иметь возможность визуализировать вектор во время итераций обучения нейронной сети и видеть изменения «формы» вектора в ходе обучения модели. При этом мы избегаем недостатка потери данных для используемых обычно методов отображения векторов с уменьшением их размерности. Объективности ради надо сказать, что мы получаем другой недостаток — трудность визуализации большого числа векторов. Но для пары (или нескольких) векторов такой способ визуализации вполне приемлем.

В качестве основы для отображения вектора в трёхмерном пространстве было решено взять обычную трёхмерную сферу. А вот радиус данной сферы будет переменным. Его величина в каждой точке сферы и будет значением одной из координат отображаемого нами n‑мерного вектора.

В качестве источника значений координат векторов будем использовать локально запущенную модель «qwen3-embedding:latest» и библиотеку ollama. Установка и настройка локальной LLM в данной статье описываться не будет. Для формирования массивов координат будем использовать библиотеку numpy а для отрисовки трёхмерных объектов по вычисленным координатам воспользуемся библиотеками plotly и dash

Основная последовательность действий будет следующей:

  1. Получить значение вектора для интересующего нас объекта (в случае с LLM это будут слова)

  2. Вычислить набор трёхмерных координат объекта

  3. Отобразить полученные координаты в трёхмерном пространстве.

Получение вектора для выбранного слова word с помощью обращения к API ollama может выглядеть так:

import ollama
import numpy as np

response = ollama.embed(
    model='qwen3-embedding:latest',
    input='word'
)

vector = response['embeddings'][0]

Далее полученный вектор vector надо преобразовать в матрицу для удобства вычисления координат. В нашем случае размерность вектора, который отдаёт LLM qwen3-embedding:latest составляет 4096 координат. Превращаем его в матрицу 64 х 64 (64 х 64 = 4096) значения.

r = np.reshape(vector, (64, 64))

А далее можно вычислить трёхмерные координаты объекта, который будет отображать наш вектор:

u, v = np.mgrid[0:2*np.pi:64j, -np.pi/2:np.pi/2:64j]
x = r * np.sin(u) * np.cos(v)
y = r * np.sin(u) * np.sin(v)
z = r * np.cos(u)

В приведённом выше примере мы сначала формируем набор параметров u и v (это набор значений углов — сферических координат), необходимых для вычисления трёх координат объекта x,y,z в декартовых координатах. И далее с использованием библиотеки numpy вычисляется сам набор декартовых координат точек объекта.

После этого останется только отобразить этот набор координат в трёхмерном пространстве.

Для демонстрации результатов работы описанного метода визуализации n‑мерных векторов были подготовлены несколько изображений. На первом изображении показаны визуализации слова «смерть» (death) — левая фигура и «жизнь» (life) — правая фигура.

Глядя на приведённое изображение можно отметить следующее:

  1. Форма объектов напоминает форму морского ежа. Поэтому данный метод визуализации n‑мерных векторов в трёхмерном пространстве можно назвать методом «морского ежа»

  2. У объектов есть ярко выраженные более длинные «шипы». Эти «шипы» соответствуют большим значениям координат векторов.

  3. Количество длинных «шипов», размеры «шипов», и направления «шипов» у объектов, визуализирующих слова «смерть» и «жизнь», сильно отличается. Т.е. по форме объектов можно судить о степени их похожести и делать вывод о том насколько соответствующие объектам вектора ближе (объекты более похожи) или дальше (объекты менее похожи)

Для сравнения приводим объекты, соответствующие векторам для слов «стол» (слева) и «стул» (справа):

Видно, что данные объекты похожи — количество и направление длинных «шипов» у них практически совпадает. Отличий гораздо меньше, чем для слов «смерть» и «жизнь».

Можно сделать следующие выводы:

  1. Описываемый метод визуализации n‑мерных векторов в трёхмерном пространстве действительно позволяет отобразить соответствующие этим векторам объекты, причем это происходит без потери координат.

  2. Получившиеся объекты похожи на морских ежей, характеризуются наличием более длинных «шипов», отображающих координаты вектора с большими абсолютными значениями. Эти координаты, вероятно, являются более значимыми для соответствующего вектору объекту (слову в нашем примере).

  3. Объекты можно сравнивать по формы. Чем сильнее отличаются объекты (по количеству, направлению и длине шипов) тем дальше располагаются соответствующие объектам векторы.