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

2024-03-15

我有 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,...
    .
    .
    .

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

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

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

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

  • 对于一些重要的相关标记集,收集每个模型中前 N 个最相似的标记。通过某种排名相关性度量来比较此列表,以查看一个模型对每个标记的“邻域”的改变程度。

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

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何计算2个node2vec模型之间的距离 的相关文章

随机推荐