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

blu*_*nox 3 python nlp gensim deep-learning word-embedding

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

我还没有为此找到文档字符串,我只是想知道背后的逻辑是什么?

那么,如果syn0嵌入矩阵是syn0norm什么?那syn1将是什么,一般而言,代表什么syn呢?

goj*_*omo 6

这些名称是从该类基于的原始Google word2vec.c实现继承而来的gensim Word2Vec。(我相信,syn0只有在最新版本中才能实现向后兼容性。)

syn0数组本质上包含原始单词向量。从用于训练单词向量的神经网络的角度来看,这些向量是“投影层”,可以将单词的一键编码转换为正确维度的密集嵌入向量。

相似性运算倾向于在字向量的单位归一化版本上进行。也就是说,所有矢量都已缩放到1.0的大小。(这使余弦相似度的计算更加容易。)syn0norm数组在第一次需要时用这些单位归一化的向量填充。

syn0norm将是空的,直到你做的手术(如most_similar()需要的话),或者你明确地做一个init_sims()呼叫。如果您明确地进行init_sims(replace=True)呼叫,则实际上将使用单位归一化的向量就地破坏原始向量。这节省了存储否则每个单词都需要存储两个向量的内存。(但是,某些词向量用法可能仍会对大小不同的原始原始向量感兴趣,因此只有在确定需要most_similar()余弦相似度运算时才这样做。)

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

我相信syn前缀只是神经网络变量命名的一个约定,很可能源自“突触”。

  • 是的,该消息意味着您应该使用“.vectors”而不是“.syn0”。 (2认同)