如何计算2个node2vec模型之间的距离

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

我有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个回答
0
投票

假设您已经使用标准的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'。它们都应该非常相似,但是特定于时代的变体将受到特定于时代的上下文的相对影响。因此,这三个时代之间的差异(以及现在共同坐标空间中的相对运动)将表明两个时代数据之间发生的变化的大小和种类。

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