Ingeniería LLM · Fácil · 8 min

Similitud del coseno

La búsqueda semántica compara embeddings con la similitud del coseno. Impleméntala y cubre los casos límite: longitudes distintas y vectores nulos.

Escribe cosine(a, b) que devuelva el producto escalar de a y b dividido entre el producto de sus normas: dot(a, b) / (|a| * |b|). El resultado va de -1 (opuestos) a 1 (misma dirección).

Lanza un error si los vectores tienen longitudes distintas. Si alguno es el vector nulo (norma 0), devuelve 0 en lugar de NaN.

Retos 0/5

  • Mismo vector da 1, opuesto -1 y perpendicular 0
  • cosine([1,2,3],[4,5,6]) es 0,97463...
  • No depende de la escala del vector
  • Lanza un error con longitudes distintas
  • Un vector nulo devuelve 0

function cosine(a, b) {
  // producto escalar dividido entre el producto de las normas
  let dot = 0;
  for (let i = 0; i < a.length; i++) dot += a[i] * b[i];
  return dot;
}

console.log(cosine([1, 2, 3], [4, 5, 6]));
La consola aparece aquí (console.log).

Para profundizar: la guía relacionada →

¿Esto en producción, con tus datos? Hablemos 15 minutos →