2024-06-16 10:37:04 发布
网友
我有两个不同时间戳的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库来训练您的模型,每个库运行引导一个完全独立的模型,其坐标不一定与任何其他模型相当。你知道吗
word2vec
(由于算法中固有的一些随机性,或者在训练输入的多线程处理中,即使在完全相同的数据上运行两个训练会话,也会导致不同的模型。它们应该对下游应用程序同样有用,但单个令牌可以位于任意不同的位置。)
也就是说,你可以尝试综合两个模型有多大的不同。例如,您可以:
挑选一堆随机的(或有领域意义的)词对。在每个模型中分别检查每对之间的相似性,然后在模型之间比较这些值。(也就是说,将model1.similarity(token_a, token_b)与model2.similarity(token_a, token_b)进行比较)将模型之间的差异视为所有测试相似性差异的加权组合。
model1.similarity(token_a, token_b)
model2.similarity(token_a, token_b)
对于一些重要的相关令牌集,收集每个模型中最相似的前N个令牌。通过某种秩相关度量来比较这个列表,看看一个模型对每个令牌的“邻域”有多大的改变。
对于其中的每一个,我建议用一个完全相同的训练数据的基线案例来验证它们的操作,这些数据已经被洗牌和/或用不同的起始随机数训练过。它们是否显示出这些模型“几乎等同”?如果没有,您需要调整训练参数或合成度量,直到它产生预期的结果——来自相同数据的模型被判断为相似,即使令牌具有非常不同的坐标。你知道吗
另一种选择可能是从合成语料库中训练一个巨大的组合模型,其中:
foo
'foo_1'
'foo_2'
最后,原始标记'foo'将得到三个向量:'foo'、'foo_1'和'foo_2'。它们都应该非常相似,但是特定时代的变体会相对地受到特定时代背景的影响。因此,这三者之间的差异(以及现在共同坐标空间中的相对运动)将表明两个时代的数据之间发生的变化的大小和种类。你知道吗
'foo'
假设您已经使用了一个标准的
word2vec
库来训练您的模型,每个库运行引导一个完全独立的模型,其坐标不一定与任何其他模型相当。你知道吗(由于算法中固有的一些随机性,或者在训练输入的多线程处理中,即使在完全相同的数据上运行两个训练会话,也会导致不同的模型。它们应该对下游应用程序同样有用,但单个令牌可以位于任意不同的位置。)
也就是说,你可以尝试综合两个模型有多大的不同。例如,您可以:
挑选一堆随机的(或有领域意义的)词对。在每个模型中分别检查每对之间的相似性,然后在模型之间比较这些值。(也就是说,将
model1.similarity(token_a, token_b)
与model2.similarity(token_a, token_b)
进行比较)将模型之间的差异视为所有测试相似性差异的加权组合。对于一些重要的相关令牌集,收集每个模型中最相似的前N个令牌。通过某种秩相关度量来比较这个列表,看看一个模型对每个令牌的“邻域”有多大的改变。
对于其中的每一个,我建议用一个完全相同的训练数据的基线案例来验证它们的操作,这些数据已经被洗牌和/或用不同的起始随机数训练过。它们是否显示出这些模型“几乎等同”?如果没有,您需要调整训练参数或合成度量,直到它产生预期的结果——来自相同数据的模型被判断为相似,即使令牌具有非常不同的坐标。你知道吗
另一种选择可能是从合成语料库中训练一个巨大的组合模型,其中:
foo
有时在第一时代的文本中变成'foo_1'
,有时在第二时代的文本中变成'foo_2'
)。(您不希望将任何一个文本中的所有标记转换为特定于时代的标记,因为只有共同出现的标记才能相互影响,因此您希望任一时代的标记有时出现在公共/共享变体中,但也经常出现在特定于时代的变体中。)最后,原始标记
'foo'
将得到三个向量:'foo'
、'foo_1'
和'foo_2'
。它们都应该非常相似,但是特定时代的变体会相对地受到特定时代背景的影响。因此,这三者之间的差异(以及现在共同坐标空间中的相对运动)将表明两个时代的数据之间发生的变化的大小和种类。你知道吗相关问题 更多 >
编程相关推荐