Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /

$similarityDotProduct (operador de expresión)

Nuevo en la versión 8.3.

$similarityDotProduct

Devuelve el producto escalar de dos vectores numéricos representados como matrices o valores binData. El producto escalar es igual a la suma de los productos de los elementos correspondientes.

$similarityDotProduct tiene dos formas sintácticas.

La sintaxis concisa devuelve una puntuación de producto escalar sin procesar:

{ $similarityDotProduct: [ <vector1>, <vector2> ] }

La sintaxis completa acepta un parámetro de normalización opcional:

{
$similarityDotProduct: {
vectors: [ <vector1>, <vector2> ],
score: <boolean>
}
}

Al utilizar la sintaxis completa, acepta los siguientes$similarityDotProduct campos:

Campo
Tipo
Necesidad
Descripción

vectors

Arreglo

Requerido

Matriz de exactamente dos expresiones. Cada expresión debe resolverse en una matriz de valores numéricos o en un valor binData. Ambos vectores deben tener la misma longitud.

score

Booleano

Opcional

Cuando true, devuelve una puntuación normalizada usando la fórmula (1 + dotProduct) / 2. Por defecto es false.

Para obtener más información sobre expresiones, vea expresión.

Si alguno de los argumentos se resuelve en null o hace referencia a un campo faltante, $similarityDotProduct nulldevuelve.

$similarityDotProduct devuelve double un. Cuando score es false (el valor predeterminado), el resultado es el producto escalar sin procesar. El valor depende de la magnitud de los vectores de entrada. Los vectores con mayor magnitud producen valores de producto escalar mayores.

Cuando score es true, el resultado se normaliza mediante la fórmula (1 + dotProduct) / 2. Esta normalización presupone vectores de entrada unitarios (normalizados). Para vectores unitarios, el producto escalar sin procesar se encuentra en el rango [-1, 1] y la puntuación normalizada en el rango [0, 1].

$similarityDotProduct Devuelve un error en los siguientes casos:

  • Ninguno de los argumentos se resuelve en una matriz o en un valor binData.

  • Los arrays de entrada o los valores binData tienen longitudes diferentes.

  • Ambos arrays contienen elementos no numéricos.

El siguiente ejemplo utiliza una colección vectors:

db.vectors.insertMany( [
{ _id: 1, a: [1, 2, 3], b: [1, 2, 3] },
{ _id: 2, a: [1, 2, 3], b: [3, 2, 1] },
{ _id: 3, a: [1, 2, 3], b: [4, 5, 6] }
] )

La siguiente canalización de agregación calcula el producto escalar entre los campos a y b para cada documento y devuelve tanto la puntuación bruta como la puntuación normalizada:

db.vectors.aggregate( [
{
$project: {
raw: { $similarityDotProduct: [ "$a", "$b" ] },
normalized: {
$similarityDotProduct: {
vectors: [ "$a", "$b" ],
score: true
}
}
}
}
] )

La operación devuelve los siguientes resultados:

{ _id: 1, raw: 14, normalized: 7.5 }
{ _id: 2, raw: 10, normalized: 5.5 }
{ _id: 3, raw: 32, normalized: 16.5 }

Volver

$similarityCosine

En esta página