Hi, I created a graph with Document nodes and Word(lemmatized) nodes which is contained in the document, so Documents are connected through common Word nodes.
I projected the part of them like this:
call gds.graph.project.cypher(
'documentRootword',
'
match (n) where (n:Document and date("20220416")<=n.datePublished<=date("20220515")) or n:RootWord
return id(n) as id
',
'
match (d)-[:FROM_DOCUMENT]->(r:RootWord) where date("20220416")<=d.datePublished<=date("20220515")
return id(d) as source, id(r) as target
'
)
Then run fastRP like this:
call gds.fastRP.write(
'documentRootword',
{
embeddingDimension: 128,
iterationWeights: [1.0, 0.5, 0.5],
normalizationStrength: 0,
writeProperty: 'embedRootword',
randomSeed: 7
}
)
I know fastRP is designed for homogeneous graph. But I can usually create embeddings in heterogeous graph like this before and get useful similarities in them when I did it with GDS last year.
match (d:Document) where date("20220416")<=d.datePublished<=date("20220515")
return d.embedRootword limit 100
d.embedRootword
[0.049813542515039444, -0.033209025859832764, -0.06641805171966553, 0.03320902958512306, 0.016604511067271233, 3.2323665966060844e-9, 0.09962708503007889, -0.08302256464958191, 0.03320902958512306, 3.2323665966060844e-9, 0.14944063127040863, 3.2323665966060844e-9, 0.033209025859832764, 0.033209025859832764, 0.016604512929916382, -0.14944063127040863, -0.09962708503007889, 0.049813542515039444, -0.049813542515039444, 0.04981353506445885, 0.049813542515039444, -0.08302256464958191, 0.049813542515039444, -0.03320903703570366, -0.11623159050941467, 0.06641805171966553, 0.049813542515039444, 0.09962708503007889, 0.049813542515039444, 3.2323665966060844e-9, 0.11623159050941467, 0.23246318101882935, 0.13283610343933105, 0.06641805171966553, 0.06641805171966553, -0.033209025859832764, -0.016604512929916382, 0.0, -0.08302255719900131, -0.01660451665520668, -0.03320902958512306, -0.19925417006015778, 0.01660451665520668, 0.14944063127040863, -0.09962708503007889, -0.03320902958512306, -0.016604511067271233, -0.16604512929916382, 0.03320903703570366, 0.049813542515039444, -0.03320902958512306, 0.03320902958512306, -0.04981353506445885, 0.0830225721001625, -0.24906770884990692, -0.049813542515039444, 0.016604511067271233, 0.1826496422290802, 0.24906770884990692, 0.0830225721001625, -0.033209025859832764, 0.016604511067271233, -0.016604511067271233, 0.21585866808891296, -0.09962708503007889, -0.049813542515039444, 9.697100011862858e-9, -0.01660451665520668, -0.03320902958512306, -0.08302256464958191, 0.03320902958512306, -0.049813542515039444, 0.03320902958512306, -0.11623158305883408, -0.06641805171966553, 0.11623159050941467, 0.06641805171966553, -0.16604512929916382, 0.09962707757949829, -0.24906770884990692, -0.11623158305883408, -0.11623159050941467, -0.049813542515039444, -0.1826496422290802, 0.049813542515039444, 0.06641805171966553, 0.01660451665520668, 0.11623158305883408, -0.016604511067271233, -0.01660451665520668, 0.03320902958512306, 0.08302255719900131, 0.0, -0.049813542515039444, 0.09962708503007889, -0.049813542515039444, 0.049813542515039444, 0.033209025859832764, 0.016604511067271233, -0.03320903703570366, -3.2323665966060844e-9, 0.016604511067271233, -0.049813542515039444, 0.016604512929916382, -0.03320902958512306, 0.049813542515039444, 0.033209025859832764, -0.09962707757949829, 0.13283610343933105, 0.06641805917024612, 0.0830225721001625, 0.08302256464958191, -0.08302256464958191, -0.03320902958512306, 3.2323665966060844e-9, 0.06641805171966553, -0.14944063127040863, -0.06641805917024612, 0.0, -0.03320903703570366, 0.16604512929916382, -0.11623159050941467, -0.06641805171966553, -0.016604511067271233, -3.2323665966060844e-9, -0.033209025859832764, -0.0830225721001625, -0.08302256464958191]
....
But now with GDS 2.0.3 or 2.0.4, I cannot get the same embeddings in the memory from mutate procedure even though I can get the embeddins by Write procedure:
call gds.fastRP.mutate(
'documentRootword',
{
embeddingDimension: 128,
iterationWeights: [1.0, 0.5, 0.5],
normalizationStrength: 0,
mutateProperty: 'embedRootword',
randomSeed: 7
}
)
call gds.graph.streamNodeProperty(
'documentRootword',
'embedRootword'
)
yield nodeId, propertyValue
return nodeId, propertyValue limit 10
==> It returns all zeros for the values in the embeddings.
nodeId | propertyValue |
---|---|
25 | [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] |
27 | [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] |
...
Am I doing something wrong?