Exercices IA & Data Science Similarite cosinus avec numpy
🎉

Bravo!

Intermédiaire 🧠 Fondamentaux 25 XP 0 personnes ont réussi

Similarite cosinus avec numpy

La similarite cosinus est LA metrique de base pour comparer des vecteurs dans un système RAG. Elle mesure l'angle entre deux vecteurs, independamment de leur longueur. Un score de 1 signifie que les vecteurs pointent dans la meme direction (textes tres similaires), 0 qu'ils sont perpendiculaires (aucun rapport).

La formule :

cosine_sim(a, b) = dot(a, b) / (norm(a) * norm(b))

Avec numpy, c'est tres simple :
- np.dot(a, b) calcule le produit scalaire
- np.linalg.norm(a) calcule la norme (longueur) du vecteur

Écris une fonction cosine_matrix(vectors) qui prend une liste de vecteurs (liste de listes de floats) et renvoie la matrice de similarite cosinus. C'est une matrice carree ou l'élément [i][j] est la similarite entre le vecteur i et le vecteur j.

Renvoie le résultat sous forme de liste de listes (pas de numpy array).

Exemple :

vecs = [[1, 0], [0, 1], [1, 1]]
mat = cosine_matrix(vecs)
mat[0][0] vaut 1.0 (un vecteur est identique a lui-meme)
mat[0][1] vaut 0.0 (vecteurs perpendiculaires)

Tests (1/1)

Tests
import numpy as np
# Vecteurs orthogonaux
mat = cosine_matrix([[1, 0], [0, 1]])
assert len(mat) == 2 and len(mat[0]) == 2, 'Doit etre une matrice 2x2'
assert abs(mat[0][0] - 1.0) < 0.01, 'Similarite avec soi-meme doit etre 1'
assert abs(mat[0][1] - 0.0) < 0.01, 'Vecteurs orthogonaux doivent avoir similarite 0'
# Vecteurs identiques
mat2 = cosine_matrix([[1, 1], [1, 1]])
assert abs(mat2[0][1] - 1.0) < 0.01, 'Vecteurs identiques doivent avoir similarite 1'
# Matrice 3x3
mat3 = cosine_matrix([[1, 0, 0], [0, 1, 0], [0, 0, 1]])
assert len(mat3) == 3 and len(mat3[0]) == 3, 'Doit etre une matrice 3x3'
for i in range(3):
    assert abs(mat3[i][i] - 1.0) < 0.01, 'La diagonale doit etre 1'
    for j in range(3):
        if i != j:
            assert abs(mat3[i][j]) < 0.01, 'Les vecteurs de base sont orthogonaux'
# Renvoie des listes Python
assert isinstance(mat, list) and isinstance(mat[0], list), 'Doit renvoyer des listes Python'

Indices (3 disponibles)

solution.py