我知道在gensims KeyedVectors_-模型中,可以通过属性model.syn0访问嵌入矩阵。还有一个syn0norm,它似乎不适用于我最近加载的手套模型。我想我以前也在某个地方见过syn1。
我还没有找到这方面的文档字符串,我只是想知道这背后的逻辑是什么?
那么,如果syn0是嵌入矩阵,那么syn0norm是什么?那么syn1是什么呢?一般来说,syn代表什么?
发布于 2018-11-16 07:12:51
这些名称是从最初的Google word2vec.c实现继承的,gensim Word2Vec类是基于这个实现的。(我认为syn0只存在于最近的版本中,用于向后兼容性。)
syn0数组本质上包含原始的字向量。从用于训练单词向量的神经网络的角度来看,这些向量是一个“投影层”,可以将一个单词的一次热编码转换为一个正确维数的密集嵌入向量。
相似操作倾向于对单词向量的单位规范化版本进行操作。也就是说,所有的向量都被缩放到有1.0的大小。(这使得余弦相似度的计算更容易。)当第一次需要这些单元归一化向量时,syn0norm数组将被填充。
此syn0norm将为空,直到您执行需要它的操作(如most_similar()),或者显式地执行init_sims()调用。如果您显式地执行一个init_sims(replace=True)调用,那么实际上您将使用单元赋范向量就地关闭原始向量。这节省了存储每个单词的两个向量所需的内存。(然而,一些字向量用法可能仍然对原始的不同大小的原始向量感兴趣,所以只有当您确信most_similar()余弦-相似性操作是您所需要的全部时,才能这样做。)
当syn1存在于一个完整的模型(而不是一个普通的KeyedVectors对象仅为字向量)上时,它的属性是模型神经网络的内部“隐藏”权重,导致输出节点。它们是在模型训练中需要的,但不是训练后收集到的典型单词向量的一部分。
我相信syn前缀只是来自神经网络变量命名的惯例,很可能来源于‘突触’。
https://stackoverflow.com/questions/53301916
复制相似问题