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 →