Способ визуализации n‑мерных эмбеддингов в трёхмерном пространстве
Эмбеддинг простыми словами — это всего лишь сопоставление некоторого объекта, с которым должна работать нейронная сеть, и набора чисел — вектора. Количество кооридинат вектора и является мерностью n пространства, в котором задан данный вектор (эмбеддинг). Более подробно про эмбеддинги можно почитать в этой статье для начинающих.
Обычно при упоминании отображения эмбеддингов (или как мы уже знаем, n‑мерных векторов) имеют в виду отображение множества этих векторов на двумерное или трёхмерное пространство с уменьшением размерности. Про основные методы отображения n‑мерных векторов рассказывается, например, в статье «Как у алгоритмов снижения размерности получается вас обмануть».
Эти методы отображения призваны показать положение нескольких векторов в пространстве и оценить, насколько вектора располагаются близко или далеко друг от друга. Также можно выделить группы векторов, которые находятся ближе (по какой‑либо формуле, вычисляющей расстояние между векторами) друг к другу, чем к остальным векторам набора.
Однако для анализа векторов человеком может быть полезно также визуализировать и отдельный вектор. В этом случае возможно сравнивать «форму» объектов, отображающих векторы и на основании похожести такой формы делать вывод о близости сравниваемых векторов. Также было бы интересно иметь возможность визуализировать вектор во время итераций обучения нейронной сети и видеть изменения «формы» вектора в ходе обучения модели. При этом мы избегаем недостатка потери данных для используемых обычно методов отображения векторов с уменьшением их размерности. Объективности ради надо сказать, что мы получаем другой недостаток — трудность визуализации большого числа векторов. Но для пары (или нескольких) векторов такой способ визуализации вполне приемлем.
В качестве основы для отображения вектора в трёхмерном пространстве было решено взять обычную трёхмерную сферу. А вот радиус данной сферы будет переменным. Его величина в каждой точке сферы и будет значением одной из координат отображаемого нами n‑мерного вектора.
В качестве источника значений координат векторов будем использовать локально запущенную модель «qwen3-embedding:latest» и библиотеку ollama. Установка и настройка локальной LLM в данной статье описываться не будет. Для формирования массивов координат будем использовать библиотеку numpy а для отрисовки трёхмерных объектов по вычисленным координатам воспользуемся библиотеками plotly и dash
Основная последовательность действий будет следующей:
Получить значение вектора для интересующего нас объекта (в случае с LLM это будут слова)
Вычислить набор трёхмерных координат объекта
Отобразить полученные координаты в трёхмерном пространстве.
Получение вектора для выбранного слова 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) — правая фигура.
Глядя на приведённое изображение можно отметить следующее:
Форма объектов напоминает форму морского ежа. Поэтому данный метод визуализации n‑мерных векторов в трёхмерном пространстве можно назвать методом «морского ежа»
У объектов есть ярко выраженные более длинные «шипы». Эти «шипы» соответствуют большим значениям координат векторов.
Количество длинных «шипов», размеры «шипов», и направления «шипов» у объектов, визуализирующих слова «смерть» и «жизнь», сильно отличается. Т.е. по форме объектов можно судить о степени их похожести и делать вывод о том насколько соответствующие объектам вектора ближе (объекты более похожи) или дальше (объекты менее похожи)
Для сравнения приводим объекты, соответствующие векторам для слов «стол» (слева) и «стул» (справа):
Видно, что данные объекты похожи — количество и направление длинных «шипов» у них практически совпадает. Отличий гораздо меньше, чем для слов «смерть» и «жизнь».
Можно сделать следующие выводы:
Описываемый метод визуализации n‑мерных векторов в трёхмерном пространстве действительно позволяет отобразить соответствующие этим векторам объекты, причем это происходит без потери координат.
Получившиеся объекты похожи на морских ежей, характеризуются наличием более длинных «шипов», отображающих координаты вектора с большими абсолютными значениями. Эти координаты, вероятно, являются более значимыми для соответствующего вектору объекту (слову в нашем примере).
Объекты можно сравнивать по формы. Чем сильнее отличаются объекты (по количеству, направлению и длине шипов) тем дальше располагаются соответствующие объектам векторы.
KioskNews shows a cleaned-up reading view extracted from the publisher’s page — the original always lives on their site, not ours.