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

$ similarityCosine (operador de expressão )

Novidades na versão 8.3.

$similarityCosine

Retorna a similaridade do cosseno entre dois vetores numéricos representados como arrays ou valores binData. A similaridade do cosseno mede o cosseno do ângulo entre dois vetores e indica quão semelhantes são suas direções, independentemente de suas magnitudes.

$similarityCosine tem dois formatos de sintaxe .

A sintaxe concisa retorna uma pontuação bruta de similaridade de cosseno:

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

A sintaxe completa aceita um parâmetro de normalização opcional:

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

Ao utilizar a sintaxe completa, o aceita os seguintes$similarityCosine campos:

Campo
Tipo
necessidade
Descrição

vectors

Array

Obrigatório

Array de exatamente duas expressões. Cada expressão deve ser resolvida para uma array de valores numéricos ou um valor binData. Ambos os vetores devem ter comprimento igual.

score

Boolean

Opcional

Quando true, retorna uma pontuação normalizada no intervalo [0, 1] usando a fórmula (1 + cosine) / 2. O padrão é false.

Para mais informações sobre expressões, consulte Expressões do .

Se qualquer um dos argumentos resultar em null ou se referir a um campo ausente, $similarityCosine nullretornará.

Se qualquer um dos vetores de entrada tiver uma magnitude de zero (ou seja, todos os elementos 0 são), $similarityCosine 0retornará.

$similarityCosine retorna double um. Quando score é false (o padrão), o resultado é o valor de similaridade do cosseno bruto no [-1, 1] intervalo:

  • 1 indica os vetores ponto em direções idênticas.

  • 0 indica que os vetores são ortogonais.

  • -1 indica que os vetores ponto em direções opostas.

Quando score é true, o resultado é normalizado para o intervalo [0, 1] utilizando a fórmula (1 + cosine) / 2.

$similarityCosine retorna um erro nos seguintes casos:

  • Qualquer argumento não resulta em uma array ou no valor binData.

  • Arrays de entrada ou valores binData têm comprimentos diferentes.

  • Qualquer array contém elementos não numéricos.

O exemplo a seguir utiliza uma coleção 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] }
] )

O pipeline de agregação a seguir calcula a similaridade do cosseno entre os campos a e b de cada documento e retorna a pontuação bruta e a pontuação normalizada:

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

A operação retorna os seguintes resultados:

{ _id: 1, raw: 1, normalized: 1 }
{ _id: 2, raw: 0.7142857142857143,
normalized: 0.8571428571428571 }
{ _id: 3, raw: 0.9746318461970762,
normalized: 0.9873159230985381 }

Voltar

$sigmoid

Nesta página