首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python/Gensim - syn0和syn0norm的含义是什么?

Python/Gensim - syn0和syn0norm的含义是什么?
EN

Stack Overflow用户
提问于 2018-11-14 13:56:33
回答 1查看 7.6K关注 0票数 8

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

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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前缀只是来自神经网络变量命名的惯例,很可能来源于‘突触’。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53301916

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档