Python/Gensim syn0和syn0norm是什么意思?

2024-10-01 09:21:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道在gensimsKeyedVectors-模型中,可以通过属性model.syn0访问嵌入矩阵。还有一个syn0norm,它似乎不适用于我最近加载的手套模型。我想我以前也在某处见过{}。在

我还没有找到一个doc字符串,我只是想知道这背后的逻辑是什么?在

如果syn0是嵌入矩阵,那么{}是什么?那么syn1是什么,一般来说,syn代表什么?在


Tags: 字符串模型docmodel属性代表矩阵逻辑
1条回答
网友
1楼 · 发布于 2024-10-01 09:21:59

这些名称是从最初的Google word2vec.c实现继承而来的,gensimWord2Vec类就是基于这个实现的。(我相信syn0只存在于最近的版本中,以便向后兼容。)

syn0数组基本上保存原始字向量。从用于训练单词向量的神经网络的角度来看,这些向量是一个“投影层”,它可以将一个单词的一个热编码转换成一个高密度、高维的嵌入向量。在

相似性操作倾向于在词向量的单位规范化版本上进行。也就是说,所有向量都已缩放为1.0。(这使得余弦相似性计算更容易。)syn0norm数组第一次被这些单位规范化向量填充。在

syn0norm将为空,直到您执行需要它的操作(如most_similar()),或者显式执行init_sims()调用。如果显式地执行一个init_sims(replace=True)调用,实际上将用单位赋范的向量来替换原始向量。这节省了存储每个单词的两个向量所需的内存。(但是,有些词向量的用法可能仍然对大小不同的原始向量感兴趣,因此只有在确定most_similar()余弦相似性操作是您需要的全部时才这样做。)

syn1(或syn1neg在更常见的负采样训练情况下)属性存在于一个完整的模型上(而不是仅针对单词向量的普通KeyedVectors对象),是模型神经网络通向输出节点的内部“隐藏”权重。在模型训练过程中需要它们,但不是训练后收集的典型词向量的一部分。在

我相信syn前缀只是神经网络变量命名的惯例,很可能是从“synapse”派生出来的。在

相关问题 更多 >