如何计算2个node2vec模型之间的距离
how calculate distance between 2 node2vec model
我有 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)
与 model2.similarity(token_a, token_b)
进行比较。)将模型之间的差异视为所有测试的相似性差异的某种加权组合。
对于一些重要的相关标记集,收集每个模型中前 N 个最相似的标记。通过某种排名相关性度量来比较此列表,以查看一个模型对每个标记的 'neighborhoods' 改变了多少。
对于其中的每一个,我建议根据完全相同的训练数据的基线案例验证它们的操作,这些数据已经被洗牌 and/or 使用不同的起始随机 seed
进行训练。他们是否将这些模型显示为 "nearly equivalent"?如果不是,您需要调整训练参数或综合度量,直到它确实具有预期结果——来自相同数据的模型被判断为相似,即使标记具有非常不同的坐标。
另一种选择可能是从合成语料库训练一个巨大的组合模型,其中:
- 两个时代的所有原始未修改'texts'全部出现一次
- 来自每个不同时代的文本再次出现,但其令牌的一些随机比例被特定时代的修饰符修改。 (例如,'
foo
' 在第一纪元的文本中有时会变成 'foo_1'
,而在第二纪元的文本中有时会变成 'foo_2'
。(你不想转换 all 任何一个文本中的标记到特定于时代的标记,因为只有彼此共同出现的标记才会相互影响,因此您希望任一时代的标记有时与 common/shared 一起出现变体,但也经常出现特定时代的变体。)
最后,原始token'foo'
会得到三个向量:'foo'
、'foo_1'
、'foo_2'
。它们应该都非常相似,但是特定时代的变体将相对更多地受到特定时代背景的影响。因此,这三者之间的差异(以及现在共同坐标 space 中的相对运动)将表明两个时代数据之间发生的变化幅度和种类。
我有 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)
与model2.similarity(token_a, token_b)
进行比较。)将模型之间的差异视为所有测试的相似性差异的某种加权组合。对于一些重要的相关标记集,收集每个模型中前 N 个最相似的标记。通过某种排名相关性度量来比较此列表,以查看一个模型对每个标记的 'neighborhoods' 改变了多少。
对于其中的每一个,我建议根据完全相同的训练数据的基线案例验证它们的操作,这些数据已经被洗牌 and/or 使用不同的起始随机 seed
进行训练。他们是否将这些模型显示为 "nearly equivalent"?如果不是,您需要调整训练参数或综合度量,直到它确实具有预期结果——来自相同数据的模型被判断为相似,即使标记具有非常不同的坐标。
另一种选择可能是从合成语料库训练一个巨大的组合模型,其中:
- 两个时代的所有原始未修改'texts'全部出现一次
- 来自每个不同时代的文本再次出现,但其令牌的一些随机比例被特定时代的修饰符修改。 (例如,'
foo
' 在第一纪元的文本中有时会变成'foo_1'
,而在第二纪元的文本中有时会变成'foo_2'
。(你不想转换 all 任何一个文本中的标记到特定于时代的标记,因为只有彼此共同出现的标记才会相互影响,因此您希望任一时代的标记有时与 common/shared 一起出现变体,但也经常出现特定时代的变体。)
最后,原始token'foo'
会得到三个向量:'foo'
、'foo_1'
、'foo_2'
。它们应该都非常相似,但是特定时代的变体将相对更多地受到特定时代背景的影响。因此,这三者之间的差异(以及现在共同坐标 space 中的相对运动)将表明两个时代数据之间发生的变化幅度和种类。