为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

繁花不似锦 2021-08-17 17:14:18
我知道在gensims KeyedVectors-model 中,可以通过属性访问嵌入矩阵model.syn0。还有一个syn0norm,它似乎不适用于我最近加载的手套模型。我想我之前也曾在syn1某处看到过。我还没有为此找到文档字符串,我只是想知道这背后的逻辑是什么?那么如果syn0是嵌入矩阵,那么是syn0norm什么?那么syn1通常是什么,syn代表什么?
查看完整描述

1 回答

?
守着一只汪

TA贡献1872条经验 获得超3个赞

这些名称继承自原始 Googleword2vec.c实现,gensim Word2Vec该类基于该实现。(我相信syn0只存在于最近的版本中以实现向后兼容性。)

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

相似性操作倾向于在词向量的单位归一化版本上进行。也就是说,所有向量都被缩放到具有 1.0 的幅度。(这使得余弦相似度计算更容易。)syn0norm数组填充有这些单位归一化向量,第一次需要它们时。

syn0norm将是空的,直到您执行most_similar()需要它的操作(如),或者您明确进行init_sims()调用。如果您明确进行init_sims(replace=True)调用,您实际上将使用单位规范向量就地破坏原始向量。这节省了为每个单词存储两个向量所需的内存。(然而,一些词向量的使用可能仍然对不同量级的原始原始向量感兴趣,所以只有当你确定most_similar()余弦相似运算是你所需要的时候才这样做。)

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

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


查看完整回答
反对 回复 2021-08-17
  • 1 回答
  • 0 关注
  • 211 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信