Cosine Similarity of Neighborhoods (All Pairs, Batch)
This algorithm computes the same similarity scores as the Cosine similarity of neighborhoods, single source algorithm.
Instead of selecting a single source vertex, however, it calculates similarity scores for all vertex pairs in the graph in parallel.
Since this is a memoryintensive operation, it is split into batches to reduce peak memory usage. The user can specify how many batches it is to be split into.
Specifications
CREATE QUERY tg_cosine_nbor_ap_batch(STRING vertex_type, STRING edge_type,
STRING edge_attribute, INT top_k, BOOL print_accum = true,
STRING file_path, STRING similarity_edge, INT num_of_batches = 1)
Parameters
Name  Description 


Vertex type to calculate similarity for 

Directed edge type to traverse 

Name of the attribute on the edge type to use as the weight 

Number of top scores to report for each vertex 

If 

If provided, the similarity score will be saved to this edge. 

If not empty, write output to this file in CSV. 

Number of batches to divide the query into 
Example
Using the social10
graph, we can calculate the cosine similarity of every person to every other person connected by the Friend
edge, and print out the top k most similar pairs for each vertex.
We run tg_cosine_batch("Person", "Friend", "weight", 5, true, "", "", 1)
:
[
{
"start": [
{
"attributes": {
"start.@heap": [
{
"val": 0.49903,
"ver": "Howard"
},
{
"val": 0.43938,
"ver": "George"
},
{
"val": 0.05918,
"ver": "Alex"
},
{
"val": 0.05579,
"ver": "Ivy"
}
]
},
"v_id": "Fiona",
"v_type": "Person"
},
{
"attributes": {
"start.@heap": []
},
"v_id": "Justin",
"v_type": "Person"
},
{
"attributes": {
"start.@heap": []
},
"v_id": "Bob",
"v_type": "Person"
},
{
"attributes": {
"start.@heap": [
{
"val": 0.22361,
"ver": "Bob"
},
{
"val": 0.21213,
"ver": "Alex"
}
]
},
"v_id": "Chase",
"v_type": "Person"
},
{
"attributes": {
"start.@heap": [
{
"val": 0.57143,
"ver": "Bob"
},
{
"val": 0.12778,
"ver": "Chase"
}
]
},
"v_id": "Damon",
"v_type": "Person"
},
{
"attributes": {
"start.@heap": []
},
"v_id": "Alex",
"v_type": "Person"
},
{
"attributes": {
"start.@heap": [
{
"val": 0.64253,
"ver": "Alex"
},
{
"val": 0.63607,
"ver": "Ivy"
},
{
"val": 0.27091,
"ver": "Howard"
},
{
"val": 0.14364,
"ver": "Fiona"
}
]
},
"v_id": "George",
"v_type": "Person"
},
{
"attributes": {
"start.@heap": []
},
"v_id": "Eddie",
"v_type": "Person"
},
{
"attributes": {
"start.@heap": [
{
"val": 0.94848,
"ver": "Fiona"
},
{
"val": 0.6364,
"ver": "Alex"
},
{
"val": 0.31046,
"ver": "George"
},
{
"val": 0.1118,
"ver": "Howard"
}
]
},
"v_id": "Ivy",
"v_type": "Person"
},
{
"attributes": {
"start.@heap": [
{
"val": 1.09162,
"ver": "Fiona"
},
{
"val": 0.78262,
"ver": "Ivy"
},
{
"val": 0.11852,
"ver": "George"
}
]
},
"v_id": "Howard",
"v_type": "Person"
}
]
}
]