Calculadora de similitud coseno
Mida cuánto apuntan dos vectores en la misma dirección, de -1 si son opuestos a 1 si coinciden. Como la longitud no cuenta, 1, 2, 3 y 10, 20, 30 obtienen un 1 perfecto, ideal para comparar textos, valoraciones o perfiles de encuestas. Gratis en su navegador.
- Gratis
- Funciona en su navegador
- Sin registro
- Sus datos no salen de su equipo
Ejecutar — gratis
Ejemplo resuelto
- Primer texto
- 1, 2, 3
- Segundo texto
- 4, -5, 6
- N
- 3
- Producto escalar
- 12
- Magnitud de a
- 3,7416573868
- Magnitud de b
- 8,7749643874
Usted envía las dos listas de componentes —embeddings, pesos de características, conteos de términos, puntuaciones de encuestas— y recibe el producto escalar, ambos módulos y una única puntuación de similitud entre -1 y 1: 1 significa dirección idéntica, 0 significa ortogonal y -1 significa opuesta.
Qué mide realmente la similitud coseno
La distancia euclídea indica a qué distancia están dos puntos; la similitud coseno indica si apuntan en la misma dirección. Esa distinción importa más de lo que parece. Dos documentos pueden tener longitudes muy diferentes y tratar el mismo tema; dos perfiles de cliente pueden diferir en el gasto absoluto y compartir la misma forma de preferencias.
Al dividir el producto escalar entre el producto de los módulos, la similitud coseno elimina la escala y conserva solo la dirección. El resultado siempre cae entre -1 y 1. Una puntuación de 1 significa que los vectores están perfectamente alineados, 0 significa que son ortogonales y no comparten ningún componente direccional, y -1 significa que son exactamente opuestos.
Como el módulo se elimina, un vector [1, 2, 3] y un vector [10, 20, 30] obtienen un 1 perfecto: describen las mismas proporciones con distinta intensidad, que es justo lo que buscan la mayoría de las comparaciones de texto, gustos o comportamiento.
Cómo se calcula la puntuación
Después acumula tres sumas en una sola pasada: el producto escalar Σ aᵢbᵢ y los módulos al cuadrado Σ aᵢ² y Σ bᵢ². La similitud es el producto escalar dividido entre el producto de las raíces cuadradas de los módulos, acotada en [-1, 1] para absorber el ruido de coma flotante y redondeada a doce decimales para que la respuesta sea estable byte a byte entre máquinas.
Si alguno de los vectores tiene módulo cero —todas sus componentes son cero— la división no está definida y la llamada falla con un mensaje explícito, porque un vector cero no tiene dirección que comparar. La respuesta incluye además el producto escalar, ambos módulos, una clasificación legible y los pasos intermedios para que pueda auditar cada cifra.
Dónde encaja en la práctica
La similitud coseno es la métrica de cabecera detrás de la búsqueda semántica, los motores de recomendación, la deduplicación y el control de calidad de clústeres. Si usted almacena embeddings de texto para recuperación, esta es la puntuación que ordena los candidatos; si construye perfiles de usuario como vectores de características, así es como encuentra los vecinos más cercanos.
Para equipos que comparan muchos vectores, el redondeo estable y los casos de error explícitos hacen que sea seguro usarla en pruebas y suites de regresión: las longitudes distintas y los vectores cero fallan ruidosamente en lugar de producir rankings silenciosamente incorrectos.
Qué puede hacer con ella
Ordenar candidatos de embeddings
Puntúe lo cerca que está el embedding de una consulta de cada embedding de documento y ordene los resultados por similitud direccional, no por longitud del vector.
Detectar elementos casi duplicados
Marque dos vectores de características como duplicados cuando su similitud coseno supere un umbral cercano a 1, aunque sus conteos brutos difieran.
Comparar perfiles de preferencias
Encuentre usuarios con la misma forma de gustos comparando vectores normalizados de valoraciones o comportamiento para un motor de recomendación.
Preguntas frecuentes
¿Cuánto cuesta?
También es gratis ejecutarlo en su navegador en esta página con el mismo código.
¿Qué significa una puntuación de 0?
Los vectores son ortogonales: no comparten ningún componente direccional. Una puntuación de 1 significa dirección idéntica y -1 significa direcciones exactamente opuestas.
¿Qué ocurre con un vector cero?
Un vector cuyas componentes son todas cero no tiene dirección, por lo que la similitud no está definida y la llamada falla con un error claro en lugar de devolver un número engañoso.
¿Afecta el módulo del vector a la puntuación?
No. La puntuación solo mide dirección: [1, 2, 3] y [10, 20, 30] tienen similitud coseno 1 porque sus proporciones son idénticas.
¿Qué formatos de entrada se aceptan?
Las componentes deben ser números finitos dentro de los límites publicados.
Herramientas relacionadas
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, por email y desde Telegram — y pronto también desde nuestra app.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/math/cosine-similarity \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"a":[1,2,3],"b":[4,-5,6]}'const res = await fetch("https://api.kit.forhosting.com/math/cosine-similarity", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"a": [
1,
2,
3
],
"b": [
4,
-5,
6
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/math/cosine-similarity",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"a": [
1,
2,
3
],
"b": [
4,
-5,
6
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/math/cosine-similarity", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"a":[1,2,3],"b":[4,-5,6]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"a":[1,2,3],"b":[4,-5,6]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/math/cosine-similarity", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Ejemplo de solicitud
{
"a": [
1,
2,
3
],
"b": [
4,
-5,
6
]
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "math.cosine_similarity",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Límites
max_abs | 1000000000000 |
max_dim | 1000 |
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |
Notas técnicas
La API de similitud coseno mide cuánto apuntan dos vectores en la misma dirección, independientemente de su longitud. Se ejecuta en una sola pasada determinista, de modo que el número que ve en la versión gratuita del navegador es exactamente el que devuelve la API de pago.
Cómo se calcula la puntuación
El endpoint convierte ambas entradas en vectores de números finitos, aceptando tanto arreglos JSON como texto plano separado por comas, y comprueba que ambos tengan la misma longitud: una comparación entre vectores de distinta dimensión carece de sentido matemático, por lo que se rechaza con un error invalid_input claro en lugar de truncarse en silencio.
Dónde encaja en la práctica
La capacidad se ejecuta en nuestro edge global sin conservar nada tras la petición, y el mismo código determinista que alimenta la API de pago se ejecuta gratis en su navegador en esta página, de modo que puede comprobar un par de vectores pegándolos antes de integrar la llamada en un pipeline. Solo paga cuando lo automatiza: $0.002 por petición, sin recargo por dimensión dentro de los límites publicados.
Preguntas técnicas
¿Pueden los vectores tener longitudes distintas?
No. La similitud coseno solo está definida entre vectores de la misma dimensión, por lo que las longitudes distintas se rechazan con un error invalid_input.