Python 如何计算2节点VEC模型之间的距离

Python 如何计算2节点VEC模型之间的距离,python,graph,nlp,word2vec,Python,Graph,Nlp,Word2vec,我有两个不同时间戳的node2vec模型。我想计算两个模型之间的距离。两个模型具有相同的vocab,我们更新了模型 我的模特是这样的 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库来训

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

我的模特是这样的

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
库来训练您的模型,每个库都会引导一个完全独立的模型,其坐标不一定与任何其他模型相比较

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

也就是说,你可以试着综合两个模型的不同程度。例如,您可以:

  • 选择一组随机(或领域重要)词对。在每个模型中分别检查每对之间的相似性,然后在模型之间比较这些值。(即,比较代码<模型1)。相似性(TokKeNa,TokKeN-B)< /C> > <代码>模型2。相似性(TokKeNa,TokKeNeB)< /C>)。将模型之间的差异视为所有被测试的相似性差异的加权组合。

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

对于其中的每一个,我建议对照一个基线情况来验证它们的操作,该基线情况下的训练数据是完全相同的,这些数据已经被洗牌和/或用不同的起始随机
种子
进行训练。它们是否显示出这些模型“几乎相等”?如果没有,则需要调整训练参数或合成度量,直到得到预期的结果——来自相同数据的模型被判断为相似,即使标记具有非常不同的坐标

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

  • 两个时代所有未经修改的原始“文本”都出现一次
  • 每一个独立时代的文本都会再次出现,但其标记的随机比例会被特定于时代的修饰语修改。(例如,
    foo
    ”有时在第一个时代的文本中变成
    “foo_1”
    ,有时在第二个时代的文本中变成
    “foo_2”
    )。(您不希望将任何一个文本中的所有标记都转换为特定于纪元的标记,因为只有共同出现的标记才会相互影响,因此您希望来自任一纪元的标记有时与公共/共享变体一起出现,但也经常与特定于纪元的变体一起出现。)
最后,原始标记
'foo'
将得到三个向量:
'foo'
'foo_1'
,和
'foo_2'
。它们应该非常相似,但特定于时代的变体将相对更受特定于时代的上下文的影响。因此,这三者之间的差异(以及现在共同坐标空间中的相对运动)将表明两个时代的数据之间发生的变化的大小和种类