我想用词向量创建词汇表。目的是基于单词相似度在词汇表中查询最近的单词。我们如何在neo4j上实现这一目标?
以下为示例:
假设词汇表包含以下内容:
Product Quality
Wrong Product
Product Price
Product Replacement
查询词是: Affordable Product
在单个查询中,我应该能够确定“平价产品”与“产品价格”的关系比其他任何产品都更紧密。
[请注意,我正在将单词嵌入图表中,因此对词汇表中每个单词的余弦相似度检查将帮助我实现这一目标。但是,当词汇量很大时,一一查询会阻碍速度和性能。
[如果有任何方法可以将域词汇的词嵌入存储为图形,并且可以基于余弦相似度查询最近的节点,则可能是一种解决方案。但是到目前为止,找不到类似的东西。
也期待指针。谢谢
您要做的是将嵌入结果存储到图形中。下一步是使用Neo4j Graph Data Science library,并专门运行cosine similarity algorithm。它看起来应该类似于:
MATCH (p:Word)
WITH {item:id(p), weights: p.embedding} AS wordData
WITH collect(wordData) AS data
CALL gds.alpha.similarity.cosine.write({
nodeProjection: '*',
relationshipProjection: '*',
data: data,
// here is where you define how many nearest neighbours should be stored
topK: 1,
// here you define what is the minimal similarity between a
// given pair of node to be still relevant
similarityCutoff: 0.1
})
YIELD nodes, similarityPairs, writeRelationshipType, writeProperty, min, max, mean, stdDev, p25, p50, p75, p90, p95, p99, p999, p100
RETURN nodes, similarityPairs, writeRelationshipType, writeProperty, min, max, mean, p95
您现在已经对您最近的邻居进行了预处理,可以像这样轻松查询它们:
MATCH (w:Word)-[:SIMILAR]-(other)
RETURN other
希望这会有所帮助,如果还有其他问题,请告诉我。