Python/Gensim - syn0 和 syn0norm 是什么意思?
Python/Gensim - What is the meaning of syn0 and syn0norm?
我知道在gensims KeyedVectors
-model中,可以通过属性[=12访问嵌入矩阵=].还有一个syn0norm
,好像对我最近加载的glove模型不起作用。我想我之前也曾在某处看到过 syn1
。
我还没有找到这方面的文档字符串,我只是想知道这背后的逻辑是什么?
那么如果syn0
是嵌入矩阵,那么syn0norm
是什么?那么 syn1
会是什么?一般来说,syn
代表什么?
这些名称继承自最初的 Google word2vec.c
实现,gensim
Word2Vec
class 正是基于这些实现。 (我相信 syn0
只存在于最新版本中以实现向后兼容性。)
syn0
数组本质上包含原始词向量。从用于训练词向量的神经网络的角度来看,这些向量是 'projection layer' 可以将一个词的单热编码转换为正确维度的密集嵌入向量。
相似性操作倾向于在 单位规范化 版本的词向量上进行。也就是说,向量的大小都已缩放为 1.0。 (这使得余弦相似度计算更容易。) syn0norm
数组在第一次需要时填充了这些单位归一化向量。
此 syn0norm
将是空的,直到您执行需要它的操作(如 most_similar()
),或者您明确执行 init_sims()
调用。如果您显式执行 init_sims(replace=True)
调用,您实际上会用单位范数向量就地破坏原始向量。这节省了存储每个单词的两个向量的内存,否则将需要。 (但是,一些词向量的使用可能仍然对不同大小的原始原始向量感兴趣,所以只有当你确定 most_similar()
余弦相似性操作是你所需要的时才这样做。)
syn1
(或 syn1neg
在更常见的负采样训练情况下)属性,当它们存在于完整模型时(而不是普通 KeyedVectors
对象只有词向量)是模型神经网络的内部 'hidden' 权重导致输出节点。它们在模型训练期间需要,但不是训练后收集的典型词向量的一部分。
我相信 syn
前缀只是神经网络变量命名的约定,可能源自 'synapse'。
我知道在gensims KeyedVectors
-model中,可以通过属性[=12访问嵌入矩阵=].还有一个syn0norm
,好像对我最近加载的glove模型不起作用。我想我之前也曾在某处看到过 syn1
。
我还没有找到这方面的文档字符串,我只是想知道这背后的逻辑是什么?
那么如果syn0
是嵌入矩阵,那么syn0norm
是什么?那么 syn1
会是什么?一般来说,syn
代表什么?
这些名称继承自最初的 Google word2vec.c
实现,gensim
Word2Vec
class 正是基于这些实现。 (我相信 syn0
只存在于最新版本中以实现向后兼容性。)
syn0
数组本质上包含原始词向量。从用于训练词向量的神经网络的角度来看,这些向量是 'projection layer' 可以将一个词的单热编码转换为正确维度的密集嵌入向量。
相似性操作倾向于在 单位规范化 版本的词向量上进行。也就是说,向量的大小都已缩放为 1.0。 (这使得余弦相似度计算更容易。) syn0norm
数组在第一次需要时填充了这些单位归一化向量。
此 syn0norm
将是空的,直到您执行需要它的操作(如 most_similar()
),或者您明确执行 init_sims()
调用。如果您显式执行 init_sims(replace=True)
调用,您实际上会用单位范数向量就地破坏原始向量。这节省了存储每个单词的两个向量的内存,否则将需要。 (但是,一些词向量的使用可能仍然对不同大小的原始原始向量感兴趣,所以只有当你确定 most_similar()
余弦相似性操作是你所需要的时才这样做。)
syn1
(或 syn1neg
在更常见的负采样训练情况下)属性,当它们存在于完整模型时(而不是普通 KeyedVectors
对象只有词向量)是模型神经网络的内部 'hidden' 权重导致输出节点。它们在模型训练期间需要,但不是训练后收集的典型词向量的一部分。
我相信 syn
前缀只是神经网络变量命名的约定,可能源自 'synapse'。