如何使用neo4j用单词向量创建词汇图?

问题描述 投票:0回答:1

我想用词向量创建词汇表。目的是基于单词相似度在词汇表中查询最近的单词。我们如何在neo4j上实现这一目标?

以下为示例:

假设词汇表包含以下内容:

Product Quality
Wrong Product
Product Price
Product Replacement

查询词是: Affordable Product

在单个查询中,我应该能够确定“平价产品”与“产品价格”的关系比其他任何产品都更紧密。

[请注意,我正在将单词嵌入图表中,因此对词汇表中每个单词的余弦相似度检查将帮助我实现这一目标。但是,当词汇量很大时,一一查询会阻碍速度和性能。

[如果有任何方法可以将域词汇的词嵌入存储为图形,并且可以基于余弦相似度查询最近的节点,则可能是一种解决方案。但是到目前为止,找不到类似的东西。

也期待指针。谢谢

neo4j ontology word2vec vocabulary knowledge-graph
1个回答
0
投票

您要做的是将嵌入结果存储到图形中。下一步是使用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

希望这会有所帮助,如果还有其他问题,请告诉我。

© www.soinside.com 2019 - 2024. All rights reserved.