Nouvelles
Modèles
Des produits
keyboard_arrow_down
Lecteur
Lisez les URL et effectuez des recherches sur le Web pour de meilleurs LLM de base.
Intégrations
Intégrations multimodales et multilingues de classe mondiale.
Reclasseur
Récupérateur neuronal de classe mondiale pour maximiser la pertinence de la recherche.
Recherche profonde
Recherchez, lisez et raisonnez jusqu'à trouver la meilleure réponse.
Plus
keyboard_arrow_down
Classificateur
Classification à zéro plan et à quelques plans pour l'image et le texte.
Segmenteur
Coupez un long texte en morceaux et effectuez la tokenisation.

Documentation de l'API
Génération automatique de code pour votre IDE ou LLM copilote
open_in_new


Entreprise
keyboard_arrow_down
À propos de nous
Contacter le service commercial
Programme de stage
Rejoignez-nous
open_in_new
Télécharger le logo
open_in_new
termes et conditions


Se connecter
login
Délimitation de la Similarité Cosinus
Validation des Bornes
Comprendre les bornes
Implications des bornes
star
Mis en exergue
Blog technique
janvier 23, 2024

La similarité cosinus dans un sous-espace implique-t-elle une similarité cosinus dans un espace de haute dimension ?

Une forte similarité dans un sous-espace garantit-elle une forte similarité globale entre les vecteurs ? Cet article examine la théorie et les implications pratiques de la similarité dans les sous-espaces.
Diagram illustrating a neural network process with smiley faces and repeated mentions of "Similar" on a blackboard-like backg
Han Xiao
Han Xiao • 9 minutes lues
💡
Le 25 janvier 2024, OpenAI a lancé un nouveau modèle d'embedding avec une nouvelle fonctionnalité appelée « shortening », qui permet aux développeurs de réduire les embeddings — en coupant essentiellement les nombres à la fin de la séquence — sans compromettre la capacité de l'embedding à représenter efficacement les concepts. Plongez dans cet article pour une base théorique solide sur la viabilité et la logique derrière cette innovation.

Considérez ceci : lors de la mesure de la similarité cosinus de vecteurs d'embedding dans des espaces de haute dimension, comment leur similarité dans des sous-espaces de dimension inférieure implique-t-elle la similarité globale ? Existe-t-il une relation directe et proportionnelle, ou la réalité est-elle plus complexe avec des données de haute dimension ?

Plus concrètement, une forte similarité entre les vecteurs dans leurs 256 premières dimensions assure-t-elle une forte similarité dans leurs 768 dimensions complètes ? À l'inverse, si les vecteurs diffèrent significativement dans certaines dimensions, cela implique-t-il une faible similarité globale ? Ce ne sont pas de simples réflexions théoriques ; ce sont des considérations cruciales pour la recherche efficace de vecteurs, l'indexation des bases de données et la performance des systèmes RAG.

Les développeurs s'appuient souvent sur des heuristiques, supposant qu'une forte similarité dans un sous-espace équivaut à une forte similarité globale ou que des différences notables dans une dimension affectent significativement la similarité globale. La question est : ces méthodes heuristiques reposent-elles sur des bases théoriques solides, ou sont-elles simplement des hypothèses de commodité ?

Cet article se penche sur ces questions, examinant la théorie et les implications pratiques de la similarité des sous-espaces par rapport à la similarité vectorielle globale.

tagDélimitation de la Similarité Cosinus

Étant donné les vecteurs A,B∈Rd\mathbf{A}, \mathbf{B}\in \mathbb{R}^dA,B∈Rd, nous les décomposons comme A=[A1,A2]\mathbf{A}=[\mathbf{A}_1, \mathbf{A}_2]A=[A1​,A2​] et B=[B1,B2]\mathbf{B}=[\mathbf{B}_1, \mathbf{B}_2]B=[B1​,B2​], où A1,B1∈Rm\mathbf{A}_1,\mathbf{B}_1\in\mathbb{R}^mA1​,B1​∈Rm et A2,B2∈Rn\mathbf{A}_2,\mathbf{B}_2\in\mathbb{R}^nA2​,B2​∈Rn, avec m+n=dm+n=dm+n=d.

La similarité cosinus dans le sous-espace Rm\mathbb{R}^mRm est donnée par 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​​ ; de même, la similarité dans le sous-espace Rn\mathbb{R}^nRn est 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​​.

Dans l'espace original Rd\mathbb{R}^dRd, la similarité cosinus est définie comme :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​∥​​

Maintenant, soit 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​)). Alors, nous avons :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​))​

Fin de la démonstration.

Notez que dans la dernière étape de la preuve, nous utilisons le fait que la similarité cosinus est toujours inférieure ou égale à 1. Cela forme notre borne supérieure. De même, nous pouvons montrer que la borne inférieure de cos⁡(A,B)\cos(\mathbf{A},\mathbf{B})cos(A,B) est donnée par :

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​∥]), où 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​)).

Notez que pour la borne inférieure, nous ne pouvons pas conclure hâtivement que cos⁡(A,B)≥t\cos(\mathbf{A},\mathbf{B}) \geq tcos(A,B)≥t. Cela est dû à l'intervalle de la fonction cosinus, qui s'étend entre [−1,1][-1, 1][−1,1]. En raison de cet intervalle, il est impossible d'établir une borne inférieure plus stricte que la valeur triviale de -1.

Donc en conclusion, nous avons la borne large suivante : −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​)). et une borne plus stricte γ⋅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​))​, où γ=cos⁡([∥A1∥,∥A2∥],[∥B1∥,∥B2∥])\gamma = \cos([\|\mathbf{A}_1\|, \|\mathbf{A}_2\|], [\|\mathbf{B}_1\|, \|\mathbf{B}_2\|]) γ=cos([∥A1​∥,∥A2​∥],[∥B1​∥,∥B2​∥]).

tagConnexion au Lemme de Johnson–Lindenstrauss

Le lemme JL affirme que pour tout 0<ϵ<10 < \epsilon < 10<ϵ<1 et tout ensemble fini de points S S S dans Rd \mathbb{R}^d Rd, il existe une application f:Rd→Rk f: \mathbb{R}^d \rightarrow \mathbb{R}^k f:Rd→Rk (avec k=O(ϵ−2log⁡∣S∣) k = O(\epsilon^{-2} \log |S|) k=O(ϵ−2log∣S∣)) telle que pour tous u,v∈S \mathbf{u}, \mathbf{v} \in S u,v∈S, les distances euclidiennes sont approximativement préservées :

(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

Pour faire fonctionner fff comme une sélection de sous-espace, nous pouvons utiliser une matrice diagonale pour la projection, comme une matrice 5×35 \times 35×3 fff, bien que non aléatoire (notez que la formulation typique du lemme JL implique des transformations linéaires qui utilisent souvent des matrices aléatoires tirées d'une distribution gaussienne). Par exemple, si nous visons à conserver les 1ère, 3ème et 5ème dimensions d'un espace vectoriel à 5 dimensions, la matrice fff pourrait être conçue comme suit : 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​​
Cependant, en spécifiant fff comme diagonale, nous limitons la classe de fonctions qui peuvent être utilisées pour la projection. Le lemme JL garantit l'existence d'un fff approprié dans la classe plus large des transformations linéaires, mais lorsque nous restreignons fff à être diagonal, un tel fff approprié peut ne pas exister dans cette classe restreinte pour appliquer les bornes du lemme JL.

tagValidation des Bornes

Pour explorer empiriquement les bornes théoriques de la similarité cosinus dans des espaces vectoriels de haute dimension, nous pouvons employer une simulation de Monte Carlo. Cette méthode nous permet de générer un grand nombre de paires de vecteurs aléatoires, de calculer leurs similarités à la fois dans l'espace original et dans les sous-espaces, puis d'évaluer comment les bornes théoriques supérieures et inférieures se comportent en pratique.

Le snippet de code Python suivant implémente ce concept. Il génère aléatoirement des paires de vecteurs dans un espace de haute dimension et calcule leur similarité cosinus. Ensuite, il divise chaque vecteur en deux sous-espaces, calcule la similarité cosinus dans chaque sous-espace, et évalue les bornes supérieures et inférieures de la similarité cosinus en dimension complète basée sur les similarités des sous-espaces.

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)))

Un validateur Monte Carlo pour valider les bornes de similarité cosinus

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

Un exemple de sortie de notre validateur Monte Carlo. Il est important de noter que la condition lower/upper bound satisfied est vérifiée pour chaque vecteur individuellement. Pendant ce temps, les avg. lower/upper bound fournissent un aperçu plus intuitif des statistiques liées à ces bornes mais n'influencent pas directement le processus de validation.

tagComprendre les bornes

En bref, lors de la comparaison de deux vecteurs de grande dimension, la similarité globale se situe entre les meilleures et les pires similarités de leurs sous-espaces, ajustées en fonction de la taille ou de l'importance de ces sous-espaces dans le schéma global. C'est ce que représentent intuitivement les bornes de similarité cosinus dans les dimensions supérieures : l'équilibre entre les parties les plus et les moins similaires, pondéré par leur taille ou importance relative.

Comparaison illustrative de deux capuchons et corps de stylet avec sections étiquetées sur fond noir
Chaque stylo a deux composants principaux : le corps et le capuchon.

Imaginez que vous essayez de comparer deux objets composés de plusieurs parties (disons, deux stylos de luxe) en fonction de leur similarité globale. Chaque stylo a deux composants principaux : le corps et le capuchon. La similarité du stylo entier (corps et capuchon) est ce que nous essayons de déterminer :

tagBorne supérieure (γ⋅s\gamma \cdot sγ⋅s)

Pensez à sss comme la meilleure correspondance entre les parties correspondantes des stylos. Si les capuchons sont très similaires mais pas les corps, sss est la similarité des capuchons.

Maintenant, γ\gammaγ est comme un facteur d'échelle basé sur la taille (ou l'importance) de chaque partie. Si un stylo a un corps très long et un capuchon court, tandis que l'autre a un corps court et un capuchon long, γ\gammaγ ajuste la similarité globale pour tenir compte de ces différences de proportions.

La borne supérieure nous indique que quelle que soit la similarité de certaines parties, la similarité globale ne peut pas dépasser cette "meilleure similarité de partie" multipliée par le facteur de proportion.

tagBorne inférieure (γ⋅t\gamma \cdot tγ⋅t)

Ici, ttt est la similarité des parties les moins correspondantes. Si les corps des stylos sont assez différents mais les capuchons sont similaires, ttt reflète la similarité du corps.

Encore une fois, γ\gammaγ adapte cela en fonction de la proportion de chaque partie.

La borne inférieure signifie que la similarité globale ne peut pas être pire que cette "pire similarité de partie" après prise en compte de la proportion de chaque partie.

tagImplications des bornes

Pour les développeurs travaillant avec des embeddings, la recherche vectorielle, la récupération ou les bases de données, la compréhension de ces bornes a des implications pratiques, particulièrement lors du traitement de données de grande dimension. La recherche vectorielle implique souvent de trouver les vecteurs les plus proches (les plus similaires) dans une base de données pour un vecteur de requête donné, généralement en utilisant la similarité cosinus comme mesure de proximité. Les bornes que nous avons discutées peuvent fournir des insights sur l'efficacité et les limitations de l'utilisation des similarités de sous-espaces pour de telles tâches.

tagUtilisation de la similarité des sous-espaces pour le classement

Sécurité et précision : L'utilisation de la similarité des sous-espaces pour le classement et la récupération des k premiers résultats peut être efficace, mais avec précaution. La borne supérieure indique que la similarité globale ne peut pas dépasser la similarité maximale des sous-espaces. Ainsi, si une paire de vecteurs est très similaire dans un sous-espace particulier, c'est un candidat fort pour être similaire dans l'espace de grande dimension.

Pièges potentiels : Cependant, la borne inférieure suggère que deux vecteurs ayant une faible similarité dans un sous-espace pourraient toujours être assez similaires globalement. Par conséquent, se fier uniquement à la similarité des sous-espaces pourrait manquer certains résultats pertinents.

tagIdées fausses et mises en garde

Surestimation de l'importance des sous-espaces : Une idée fausse courante est de surestimer l'importance d'un sous-espace particulier. Bien qu'une haute similarité dans un sous-espace soit un bon indicateur, elle ne garantit pas une haute similarité globale en raison de l'influence des autres sous-espaces.

Ignorer les similarités négatives : Dans les cas où la similarité cosinus dans un sous-espace est négative, cela indique une relation opposée dans cette dimension. Les développeurs doivent être attentifs à la façon dont ces similarités négatives impactent la similarité globale.

Catégories:
star
Mis en exergue
Blog technique
rss_feed
Des bureaux
location_on
Sunnyvale, Californie
710 Lakeway Dr, Ste 200, Sunnyvale, CA 94085, États-Unis
location_on
Berlin, Allemagne (siège social)
Prinzessinnenstraße 19-20, 10969 Berlin, Allemagne
location_on
Pékin, Chine
Niveau 5, bâtiment 6, n° 48, rue Haidian Ouest, Pékin, Chine
location_on
Shenzhen, en Chine
402 étage 4, bâtiment technologique Fu'an, Shenzhen, Chine
Fondation Recherche
Lecteur
Intégrations
Reclasseur
Recherche profonde
Classificateur
Segmenteur
Documentation de l'API
Obtenir la clé API Jina
Limite de taux
Statut de l'API
Entreprise
À propos de nous
Contacter le service commercial
Rédaction
Programme de stage
Rejoignez-nous
open_in_new
Télécharger le logo
open_in_new
Termes
Sécurité
termes et conditions
Confidentialité
Gérer les cookies
email
Jina AI © 2020-2025.