【问题标题】:how calculate distance between 2 node2vec model如何计算2个node2vec模型之间的距离
【发布时间】:2019-11-28 07:57:37
【问题描述】:

我有 2 个不同时间戳的 node2vec 模型。我想计算两个模型之间的距离。两个模型具有相同的词汇,我们会更新模型。

我的模型是这样的

model1:
"1":0.1,0.5,...
"2":0.3,-0.4,...
"3":0.2,0.5,...
.
.
.    
model2:
    "1":0.15,0.54,...
    "2":0.24,-0.35,...
    "3":0.24,0.47,...
    .
    .
    .

【问题讨论】:

    标签: python graph nlp word2vec


    【解决方案1】:

    假设您使用标准 word2vec 库来训练您的模型,每次运行都会引导一个完全独立的模型,其坐标不一定与任何其他模型可比。

    (由于算法中的一些固有随机性,或在训练输入的多线程处理中,即使在完全相同的数据上运行两个训练会话也会导致不同的模型。它们应该对下游应用程序同样有用,但单个令牌可能处于任意不同的位置。)

    也就是说,您可以尝试综合一些衡量两个模型差异程度的指标。例如,您可以:

    • 选择一堆随机(或领域重要)词对。在每个模型中分别检查每对之间的相似性,然后在模型之间比较这些值。 (也就是说,比较 model1.similarity(token_a, token_b)model2.similarity(token_a, token_b)。)将模型之间的差异视为所有测试的相似性差异的加权组合。

    • 对于一些重要的相关标记集,收集每个模型中前 N 个最相似的标记。通过某种等级相关度量来比较这个列表,看看一个模型改变了每个令牌的“邻域”多少。

    对于其中的每一个,我建议根据完全相同的训练数据的基线案例来验证它们的操作,这些训练数据已被打乱和/或使用不同的起始随机 seed 进行训练。他们是否将此类模型显示为“几乎等效”?如果不是,您需要调整训练参数或综合测量,直到它确实有预期的结果——来自相同数据的模型被判断为相似,即使标记具有非常不同的坐标。

    另一种选择可能是从合成语料库中训练一个巨大的组合模型,其中:

    • 两个时代的所有原始未修改“文本”都出现一次
    • 每个单独时代的文本再次出现,但其标记的一些随机比例被特定时代的修饰符修改。 (例如,'foo' 在第一时代的文本中有时会变成 'foo_1',而在第二时代的文本中有时会变成 'foo_2'。(您不想转换 all 标记在任何一个文本中到特定时代的标记,因为只有彼此共同出现的标记才会相互影响,因此您希望任何一个时代的标记有时会出现在共同/共享的变体中,但也经常出现在时代特定的变体中.)

    最后,原始令牌'foo'会得到三个向量:'foo''foo_1''foo_2'。它们应该都非常相似,但是特定时代的变体将相对更多地受到特定时代背景的影响。因此,这三者之间的差异(以及现在共同坐标空间中的相对运动)将表明两个时代数据之间发生的变化的幅度和种类。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-05
      • 2010-09-26
      • 2014-11-27
      • 1970-01-01
      • 2016-06-15
      • 1970-01-01
      • 1970-01-01
      • 2010-09-06
      相关资源
      最近更新 更多