Новости
Модели
Продукты
keyboard_arrow_down
Глубокий поиск
Ищите, читайте и рассуждайте, пока не найдете лучший ответ.
Читатель
Читайте URL-адреса и ищите информацию в Интернете для получения более подходящей подготовки для получения степени магистра права.
Вложения
Мультимодальные многоязычные вложения мирового класса.
Реранкер
Нейронный ретривер мирового класса для максимального повышения релевантности поиска.
Более
keyboard_arrow_down
Классификатор
Классификация изображений и текста по нулевому и небольшому количеству кадров.
Сегментатор
Разрежьте длинный текст на куски и выполните токенизацию.

API-документы
Автоматическая генерация кода для вашего второго пилота IDE или LLM
open_in_new


Компания
keyboard_arrow_down
О нас
Связаться с отделом продаж
Стажерская программа
Присоединяйтесь к нам
open_in_new
Скачать логотип
open_in_new
Условия использования


Авторизоваться
login
Ограничение косинусного сходства
Проверка границ
Понимание границ
Следствия границ
star
Избранное
Технический блог
январь 23, 2024

Означает ли косинусное сходство в подпространстве высокую косинусную схожесть в многомерном пространстве?

Гарантирует ли высокая схожесть в подпространстве высокую общую схожесть между векторами? В этой статье рассматриваются теоретические основы и практические последствия схожести в подпространствах.
Diagram illustrating a neural network process with smiley faces and repeated mentions of "Similar" on a blackboard-like backg
Han Xiao
Han Xiao • 9 минуты чтения
💡
25 января 2024 года OpenAI представила новую модель эмбеддингов с новой функцией под названием "shortening", которая позволяет разработчикам обрезать эмбеддинги — фактически удаляя числа с конца последовательности — без ущерба для способности эмбеддинга эффективно представлять концепции. Погрузитесь в эту статью для понимания теоретической основы жизнеспособности и рациональности данной инновации.

Подумайте об этом: при измерении косинусного сходства векторов эмбеддингов в пространствах высокой размерности, как их сходство в подпространствах меньшей размерности влияет на общее сходство? Существует ли прямая пропорциональная зависимость, или реальность с данными высокой размерности более сложна?

Если конкретнее, гарантирует ли высокое сходство между векторами в их первых 256 измерениях высокое сходство во всех 768 измерениях? И наоборот, если векторы существенно различаются в некоторых измерениях, означает ли это низкое общее сходство? Это не просто теоретические размышления; это важные соображения для эффективного поиска векторов, индексирования баз данных и производительности RAG-систем.

Разработчики часто полагаются на эвристики, предполагая, что высокое сходство в подпространстве равносильно высокому общему сходству, или что заметные различия в одном измерении существенно влияют на общее сходство. Вопрос в том: основаны ли эти эвристические методы на прочном теоретическом фундаменте или это просто удобные предположения?

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

tagОграничение косинусного сходства

Для векторов A,B∈Rd\mathbf{A}, \mathbf{B}\in \mathbb{R}^dA,B∈Rd, мы разложим их как A=[A1,A2]\mathbf{A}=[\mathbf{A}_1, \mathbf{A}_2]A=[A1​,A2​] и B=[B1,B2]\mathbf{B}=[\mathbf{B}_1, \mathbf{B}_2]B=[B1​,B2​], где A1,B1∈Rm\mathbf{A}_1,\mathbf{B}_1\in\mathbb{R}^mA1​,B1​∈Rm и A2,B2∈Rn\mathbf{A}_2,\mathbf{B}_2\in\mathbb{R}^nA2​,B2​∈Rn, при m+n=dm+n=dm+n=d.

Косинусное сходство в подпространстве Rm\mathbb{R}^mRm задается как cos⁡(A1,B1)=A1⋅B1∥A1∥∥B1∥\cos(\mathbf{A}_1, \mathbf{B}_1)=\frac{\mathbf{A}_1\cdot\mathbf{B}_1}{\|\mathbf{A}_1\|\|\mathbf{B}_1\|}cos(A1​,B1​)=∥A1​∥∥B1​∥A1​⋅B1​​; аналогично, сходство в подпространстве Rn\mathbb{R}^nRn — cos⁡(A2,B2)=A2⋅B2∥A2∥∥B2∥\cos(\mathbf{A}_2, \mathbf{B}_2)=\frac{\mathbf{A}_2\cdot\mathbf{B}_2}{\|\mathbf{A}_2\|\|\mathbf{B}_2\|}cos(A2​,B2​)=∥A2​∥∥B2​∥A2​⋅B2​​.

В исходном пространстве Rd\mathbb{R}^dRd косинусное сходство определяется как:cos⁡(A,B)=A⋅B∥A∥∥B∥=A1⋅B1+A2⋅B2∥A1∥2+∥A2∥2∥B1∥2+∥B2∥2=cos⁡(A1,B1)∥A1∥∥B1∥+cos⁡(A2,B2)∥A2∥∥B2∥∥A1∥2+∥A2∥2∥B1∥2+∥B2∥2\begin{align*}\cos(\mathbf{A},\mathbf{B})&=\frac{\mathbf{A}\cdot\mathbf{B}}{\|\mathbf{A}\|\|\mathbf{B}\|}\\&=\frac{\mathbf{A}_1\cdot\mathbf{B}_1+\mathbf{A}_2\cdot\mathbf{B}_2}{\sqrt{\|\mathbf{A}_1\|^2+\|\mathbf{A}_2\|^2}\sqrt{\|\mathbf{B}_1\|^2+\|\mathbf{B}_2\|^2}}\\&=\frac{\cos(\mathbf{A}_1, \mathbf{B}_1)\|\mathbf{A}_1\|\|\mathbf{B}_1\|+\cos(\mathbf{A}_2, \mathbf{B}_2)\|\mathbf{A}_2\|\|\mathbf{B}_2\|}{\sqrt{\|\mathbf{A}_1\|^2+\|\mathbf{A}_2\|^2}\sqrt{\|\mathbf{B}_1\|^2+\|\mathbf{B}_2\|^2}}\end{align*}cos(A,B)​=∥A∥∥B∥A⋅B​=∥A1​∥2+∥A2​∥2​∥B1​∥2+∥B2​∥2​A1​⋅B1​+A2​⋅B2​​=∥A1​∥2+∥A2​∥2​∥B1​∥2+∥B2​∥2​cos(A1​,B1​)∥A1​∥∥B1​∥+cos(A2​,B2​)∥A2​∥∥B2​∥​​

Теперь пусть s:=max⁡(cos⁡(A1,B1),cos⁡(A2,B2))s := \max(\cos(\mathbf{A}_1, \mathbf{B}_1), \cos(\mathbf{A}_2, \mathbf{B}_2))s:=max(cos(A1​,B1​),cos(A2​,B2​)). Тогда имеем:cos⁡(A,B)≤s∥A1∥∥B1∥+s∥A2∥∥B2∥∥A1∥2+∥A2∥2∥B1∥2+∥B2∥2=∥A1∥∥B1∥+∥A2∥∥B2∥∥A1∥2+∥A2∥2∥B1∥2+∥B2∥2⋅s=cos⁡([∥A1∥,∥A2∥]⏟R2,[∥B1∥,∥B2∥]⏟R2)⋅s≤1⋅s=max⁡(cos⁡(A1,B1),cos⁡(A2,B2))\begin{align*}\cos(\mathbf{A},\mathbf{B})&\leq\frac{s\|\mathbf{A}_1\|\|\mathbf{B}_1\|+s\|\mathbf{A}_2\|\|\mathbf{B}_2\|}{\sqrt{\|\mathbf{A}_1\|^2+\|\mathbf{A}_2\|^2}\sqrt{\|\mathbf{B}_1\|^2+\|\mathbf{B}_2\|^2}}\\&=\frac{\|\mathbf{A}_1\|\|\mathbf{B}_1\|+\|\mathbf{A}_2\|\|\mathbf{B}_2\|}{\sqrt{\|\mathbf{A}_1\|^2+\|\mathbf{A}_2\|^2}\sqrt{\|\mathbf{B}_1\|^2+\|\mathbf{B}_2\|^2}}\cdot s\\&=\cos(\underbrace{[\|\mathbf{A}_1\|, \|\mathbf{A}_2\|]}_{\mathbb{R}^2}, \underbrace{[\|\mathbf{B}_1\|, \|\mathbf{B}_2\|]}_{\mathbb{R}^2})\cdot s\\&\leq 1\cdot s \\&= \max(\cos(\mathbf{A}_1, \mathbf{B}_1), \cos(\mathbf{A}_2, \mathbf{B}_2))\end{align*}cos(A,B)​≤∥A1​∥2+∥A2​∥2​∥B1​∥2+∥B2​∥2​s∥A1​∥∥B1​∥+s∥A2​∥∥B2​∥​=∥A1​∥2+∥A2​∥2​∥B1​∥2+∥B2​∥2​∥A1​∥∥B1​∥+∥A2​∥∥B2​∥​⋅s=cos(R2[∥A1​∥,∥A2​∥]​​,R2[∥B1​∥,∥B2​∥]​​)⋅s≤1⋅s=max(cos(A1​,B1​),cos(A2​,B2​))​

Конец доказательства.

Отметим, что на последнем шаге доказательства мы используем тот факт, что косинусное сходство всегда меньше или равно 1. Это формирует нашу верхнюю границу. Аналогично можно показать, что нижняя граница cos⁡(A,B)\cos(\mathbf{A},\mathbf{B})cos(A,B) задается как:

cos⁡(A,B)≥t⋅cos⁡([∥A1∥,∥A2∥],[∥B1∥,∥B2∥]) \cos(\mathbf{A},\mathbf{B}) \geq t \cdot \cos([\|\mathbf{A}_1\|, \|\mathbf{A}_2\|], [\|\mathbf{B}_1\|, \|\mathbf{B}_2\|]) cos(A,B)≥t⋅cos([∥A1​∥,∥A2​∥],[∥B1​∥,∥B2​∥]), где t:=min⁡(cos⁡(A1,B1),cos⁡(A2,B2))t:= \min(\cos(\mathbf{A}_1, \mathbf{B}_1), \cos(\mathbf{A}_2, \mathbf{B}_2))t:=min(cos(A1​,B1​),cos(A2​,B2​)).

Заметим, что для нижней границы мы не можем поспешно заключить, что cos⁡(A,B)≥t\cos(\mathbf{A},\mathbf{B}) \geq tcos(A,B)≥t. Это связано с диапазоном косинусной функции, который лежит в пределах [−1,1][-1, 1][−1,1]. Из-за этого диапазона невозможно установить более тесную нижнюю границу, чем тривиальное значение -1.

Таким образом, в заключение мы имеем следующую свободную границу: −1≤cos⁡(A,B)≤max⁡(cos⁡(A1,B1),cos⁡(A2,B2)). -1\leq\cos(\mathbf{A},\mathbf{B})\leq\max(\cos(\mathbf{A}_1, \mathbf{B}_1), \cos(\mathbf{A}_2, \mathbf{B}_2)).−1≤cos(A,B)≤max(cos(A1​,B1​),cos(A2​,B2​)). и более тесную границу γ⋅t≤cos⁡(A,B)≤γ⋅sγ⋅min⁡(cos⁡(A1,B1),cos⁡(A2,B2))≤cos⁡(A,B)≤γ⋅max⁡(cos⁡(A1,B1),cos⁡(A2,B2))\begin{align*} \gamma \cdot t\leq&\cos(\mathbf{A}, \mathbf{B}) \leq\gamma\cdot s\\\gamma \cdot \min(\cos(\mathbf{A}_1, \mathbf{B}_1), \cos(\mathbf{A}_2, \mathbf{B}_2)) \leq &\cos(\mathbf{A}, \mathbf{B}) \leq \gamma \cdot \max(\cos(\mathbf{A}_1, \mathbf{B}_1), \cos(\mathbf{A}_2, \mathbf{B}_2))\end{align*}γ⋅t≤γ⋅min(cos(A1​,B1​),cos(A2​,B2​))≤​cos(A,B)≤γ⋅scos(A,B)≤γ⋅max(cos(A1​,B1​),cos(A2​,B2​))​, где γ=cos⁡([∥A1∥,∥A2∥],[∥B1∥,∥B2∥])\gamma = \cos([\|\mathbf{A}_1\|, \|\mathbf{A}_2\|], [\|\mathbf{B}_1\|, \|\mathbf{B}_2\|]) γ=cos([∥A1​∥,∥A2​∥],[∥B1​∥,∥B2​∥]).

tagСвязь с леммой Джонсона–Линденштрауса

Лемма JL утверждает, что для любого 0<ϵ<10 < \epsilon < 10<ϵ<1 и любого конечного множества точек S S S в Rd \mathbb{R}^d Rd существует отображение f:Rd→Rk f: \mathbb{R}^d \rightarrow \mathbb{R}^k f:Rd→Rk (где k=O(ϵ−2log⁡∣S∣) k = O(\epsilon^{-2} \log |S|) k=O(ϵ−2log∣S∣)) такое, что для всех u,v∈S \mathbf{u}, \mathbf{v} \in S u,v∈S евклидовы расстояния приблизительно сохраняются:

(1−ϵ)∥u−v∥2≤∥f(u)−f(v)∥2≤(1+ϵ)∥u−v∥2(1 - \epsilon) \|\mathbf{u} - \mathbf{v}\|^2 \leq \|f(\mathbf{u}) - f(\mathbf{v})\|^2 \leq (1 + \epsilon) \|\mathbf{u} - \mathbf{v}\|^2(1−ϵ)∥u−v∥2≤∥f(u)−f(v)∥2≤(1+ϵ)∥u−v∥2

Johnson–Lindenstrauss lemma - Wikipedia
Wikimedia Foundation, Inc.Contributors to Wikimedia projects

Чтобы fff работало как выбор подпространства, мы можем использовать диагональную матрицу для проекции, например, матрицу 5×35 \times 35×3 fff, хотя и не случайную (заметим, что типичная формулировка леммы JL включает линейные преобразования, которые часто используют случайные матрицы, взятые из гауссова распределения). Например, если мы хотим сохранить 1-е, 3-е и 5-е измерения из 5-мерного векторного пространства, матрица fff может быть спроектирована следующим образом: f=[100000010000001]f = \begin{bmatrix}1 & 0 & 0 \\0 & 0 & 0 \\0 & 1 & 0 \\0 & 0 & 0 \\0 & 0 & 1\end{bmatrix}f=​10000​00100​00001​​
Однако, указывая fff как диагональную матрицу, мы ограничиваем класс функций, которые могут быть использованы для проекции. Лемма JL гарантирует существование подходящей fff в более широком классе линейных преобразований, но когда мы ограничиваем fff диагональной матрицей, такая подходящая fff может не существовать в этом ограниченном классе для применения границ леммы JL.

tagПроверка границ

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

Следующий фрагмент кода на Python реализует эту концепцию. Он случайным образом генерирует пары векторов в пространстве высокой размерности и вычисляет их косинусное сходство. Затем он разделяет каждый вектор на два подпространства, вычисляет косинусное сходство внутри каждого подпространства и оценивает верхние и нижние границы косинусного сходства полной размерности на основе сходства в подпространствах.

import numpy as np


def compute_cosine_similarity(U, V):
    # Normalize the rows to unit vectors
    U_norm = U / np.linalg.norm(U, axis=1, keepdims=True)
    V_norm = V / np.linalg.norm(V, axis=1, keepdims=True)
    # Compute pairwise cosine similarity
    return np.sum(U_norm * V_norm, axis=1)


# Generate random data
num_points = 5000
d = 1024
A = np.random.random([num_points, d])
B = np.random.random([num_points, d])

# Compute cosine similarity between A and B
cos_sim = compute_cosine_similarity(A, B)

# randomly divide A and B into subspaces
m = np.random.randint(1, d)
A1 = A[:, :m]
A2 = A[:, m:]
B1 = B[:, :m]
B2 = B[:, m:]

# Compute cosine similarity in subspaces
cos_sim1 = compute_cosine_similarity(A1, B1)
cos_sim2 = compute_cosine_similarity(A2, B2)

# Find the element-wise maximum and minimum of cos_sim1 and cos_sim2
s = np.maximum(cos_sim1, cos_sim2)
t = np.minimum(cos_sim1, cos_sim2)

norm_A1 = np.linalg.norm(A1, axis=1)
norm_A2 = np.linalg.norm(A2, axis=1)
norm_B1 = np.linalg.norm(B1, axis=1)
norm_B2 = np.linalg.norm(B2, axis=1)

# Form new vectors in R^2 from the norms
norm_A_vectors = np.stack((norm_A1, norm_A2), axis=1)
norm_B_vectors = np.stack((norm_B1, norm_B2), axis=1)

# Compute cosine similarity in R^2
gamma = compute_cosine_similarity(norm_A_vectors, norm_B_vectors)

# print some info and validate the lower bound and upper bound
print('d: %d\n'
      'm: %d\n'
      'n: %d\n'
      'avg. cosine(A,B): %f\n'
      'avg. upper bound: %f\n'
      'avg. lower bound: %f\n'
      'lower bound satisfied: %s\n'
      'upper bound satisfied: %s' % (
          d, m, (d - m), np.mean(cos_sim), np.mean(s), np.mean(gamma * t), np.all(s >= cos_sim),
          np.all(gamma * t <= cos_sim)))

Валидатор Монте-Карло для проверки границ косинусного сходства

d: 1024
m: 743
n: 281
avg. cosine(A,B): 0.750096
avg. upper bound: 0.759080
avg. lower bound: 0.741200
lower bound satisfied: True
upper bound satisfied: True

Пример вывода нашего валидатора Монте-Карло. Важно отметить, что условие lower/upper bound satisfied проверяется для каждого вектора индивидуально. В то же время, avg. lower/upper bound предоставляет более интуитивный обзор статистики, связанной с этими границами, но не влияет напрямую на процесс валидации.

tagПонимание границ

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

Illustrative comparison of two stylus pen caps and bodies with labeled sections on a black background
У каждой ручки есть два основных компонента: корпус и колпачок.

Представьте, что вы пытаетесь сравнить два составных объекта (скажем, две дорогие ручки) по их общему сходству. У каждой ручки есть два основных компонента: корпус и колпачок. Сходство всей ручки (и корпуса, и колпачка) - это то, что мы пытаемся определить:

tagВерхняя граница (γ⋅s\gamma \cdot sγ⋅s)

Думайте о sss как о наилучшем соответствии между соответствующими частями ручек. Если колпачки очень похожи, но корпуса нет, sss - это сходство колпачков.

А γ\gammaγ - это как масштабирующий фактор, основанный на размере (или важности) каждой части. Если у одной ручки очень длинный корпус и короткий колпачок, а у другой короткий корпус и длинный колпачок, γ\gammaγ корректирует общее сходство с учетом этих различий в пропорциях.

Верхняя граница говорит нам, что независимо от того, насколько похожи некоторые части, общее сходство не может превысить это "сходство лучшей части", масштабированное пропорциональным фактором.

tagНижняя граница (γ⋅t\gamma \cdot tγ⋅t)

Здесь ttt - это сходство наименее совпадающих частей. Если корпуса ручек сильно различаются, но колпачки похожи, ttt отражает сходство корпусов.

Опять же, γ\gammaγ масштабирует это на основе пропорции каждой части.

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

tagСледствия границ

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

tagИспользование сходства подпространств для ранжирования

Безопасность и точность: Использование сходства подпространств для ранжирования и получения топ-k результатов может быть эффективным, но с осторожностью. Верхняя граница указывает, что общее сходство не может превысить максимальное сходство подпространств. Таким образом, если пара векторов имеет высокое сходство в определенном подпространстве, это сильный кандидат на сходство в многомерном пространстве.

Потенциальные ловушки: Однако нижняя граница предполагает, что два вектора с низким сходством в одном подпространстве все еще могут быть довольно похожими в целом. Поэтому опора только на сходство подпространств может пропустить некоторые релевантные результаты.

tagЗаблуждения и предостережения

Переоценка важности подпространства: Распространенным заблуждением является переоценка важности определенного подпространства. Хотя высокое сходство в одном подпространстве является хорошим индикатором, оно не гарантирует высокого общего сходства из-за влияния других подпространств.

Игнорирование отрицательных сходств: В случаях, когда косинусное сходство в подпространстве отрицательное, это указывает на противоположные отношения в этом измерении. Программисты должны быть осторожны с тем, как эти отрицательные сходства влияют на общее сходство.

Категории:
star
Избранное
Технический блог
rss_feed
Офисы
location_on
Саннивейл, Калифорния
710 Lakeway Dr, Ste 200, Саннивейл, Калифорния 94085, США
location_on
Берлин, Германия (штаб-квартира)
Prinzessinnenstraße 19-20, 10969 Берлин, Германия
location_on
Пекин, Китай
Уровень 5, здание 6, ул. Хайдянь Вест, д. 48, Пекин, Китай
location_on
Шэньчжэнь, Китай
402, этаж 4, здание Fu'an Technology, Шэньчжэнь, Китай
Поиск Фонда
Глубокий поиск
Читатель
Вложения
Реранкер
Классификатор
Сегментатор
API-документация
Получить API-ключ Jina
Ограничение скорости
Статус API
Компания
О нас
Связаться с отделом продаж
отдел новостей
Стажерская программа
Присоединяйтесь к нам
open_in_new
Скачать логотип
open_in_new
Условия
Безопасность
Условия использования
Конфиденциальность
Управление файлами cookie
email
Jina AI © 2020-2025.