如何访问gensim word2vec中的输出嵌入(输出矢量)?

Suin SEO

我想使用word2vec的输出嵌入(例如本文中的内容)(通过双重单词嵌入来提高文档排名)

我知道输入向量在syn0中,如果负采样,则输出向量在syn1和syn1neg中。

但是当我用输出向量计算most_like时,由于删除了syn1或syn1neg,我在某些范围内得到了相同的结果。

这就是我得到的。

IN[1]: model = Word2Vec.load('test_model.model')

IN[2]: model.most_similar([model.syn1neg[0]])

OUT[2]: [('of', -0.04402521997690201),
('has', -0.16387106478214264),
('in', -0.16650712490081787),
('is', -0.18117375671863556),
('by', -0.2527652978897095),
('was', -0.254993200302124),
('from', -0.2659570872783661),
('the', -0.26878535747528076),
('on', -0.27521973848342896),
('his', -0.2930959463119507)]

但是另一个syn1neg numpy向量已经是类似的输出。

IN[3]: model.most_similar([model.syn1neg[50]])

OUT[3]: [('of', -0.07884830236434937),
('has', -0.16942456364631653),
('the', -0.1771494299173355),
('his', -0.2043554037809372),
('is', -0.23265135288238525),
('in', -0.24725285172462463),
('by', -0.27772971987724304),
('was', -0.2979024648666382),
('time', -0.3547973036766052),
('he', -0.36455872654914856)]

我想获得训练期间保留的输出numpy数组(是否为负)。

让我知道如何访问纯syn1或syn1neg或代码,或者某些word2vec模块可以获取输出嵌入。

五条魔

对于负采样,syn1neg权重是每个字的权重,其顺序与相同syn0

您的两个示例给出相似结果的事实并不一定表明有什么错误。默认情况下,单词是按频率排序的,因此,早期单词(包括位置0和50的单词)是非常常见的单词,具有基于共现的含义(可能彼此接近)。

选择一个具有更独特含义的中频单词,您可能会得到更有意义的结果(如果您的语料库/设置/需求足够类似于“双词嵌入”论文的内容)。例如,您可能要比较:

model.most_similar('cousin')

...与...

model.most_similar(positive=[model.syn1neg[model.vocab['cousin'].index])

但是,在所有情况下,现有most_similar()方法仅在syn0-论文术语的“ IN”向量中查找相似向量因此,我相信上面的代码只会真正计算出论文所称的“ OUT-IN”相似度:列出了哪些IN向量与给定的OUT向量最相似。实际上,他们似乎吹捧相反的“ IN-OUT”相似性,因为它很有用。(那是与给定的IN向量最相似的OUT向量。)

gensim的最新版本引入了一个KeyedVectors类,用于表示一组由字词键控的单词向量,与特定的Word2Vec模型或其他训练方法分开。你可能会创建一个额外的KeyedVectors实例,它取代了通常syn0syn1neg,走出名单载体类似于目标向量(和由此计算前n“IN-OUT”相似,甚至“OUT-OUT”相似)。

例如,这可能有效(我没有测试过):

outv = KeyedVectors()
outv.vocab = model.wv.vocab  # same
outv.index2word = model.wv.index2word  # same
outv.syn0 = model.syn1neg  # different
inout_similars = outv.most_similar(positive=[model['cousin']])

syn1仅在使用分层抽样时才存在,并且不清楚单个单词的“输出嵌入”将在哪里。(有多个输出节点对应于预测一个单词,并且它们都需要更接近各自的正确0/1值才能预测单个单词。因此,与`syn1neg不同,没有一个地方可以读取一个向量,这意味着一个单词的输出。您可能必须计算/逼近一些hidden-> output权重集合,这会将这些多个输出节点驱动到正确的值。)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

gensim word2vec访问输入/输出向量

将 word2vec(gensim 实现)中的输出(上下文)嵌入保存为最终模型

如何解释gensim的Word2vec最相似方法的输出,并了解输出值的含义

如何从gensim Word2Vec嵌入向量中句子嵌入?

复制 gensim word2vec 的嵌入

使用 gensim word2vec 沿输出或输入向量查找单词相似性?

Gensim单词嵌入(Word2Vec和FastText)模型中的alpha值?

在Tensorboard Projector中可视化Gensim Word2vec嵌入

Gensim word2vec模型中的跟踪丢失和嵌入

如何加快Gensim Word2vec模型的加载时间?

gensim Word2Vec - 如何应用随机梯度下降?

如何另存为gensim word2vec文件?

Gensim word2vec模型输出1000维ndarray,但最大ndarray维数为32-怎么做?

Gensim的word2vec中的层大小

Gensim 如何在 Word2Vec 中实现子采样?

如何获取numpy.ndarray中的键值对?(Gensim Word2vec)

如何在Gensim Word2Vec中手动更改单词的向量尺寸

偶尔,如何使用在gensim中创建的自己的word2vec模型?

如何在gensim word2vec模型中尋找bigram相似度

gensim word2vec的培训时间

在keras中使用预训练的gensim Word2vec嵌入

在Gensim Word2Vec中将多字ngram短语与PathLineSentences嵌入

Pyspark如何从word2vec词嵌入中计算Doc2Vec?

如何仅在gensim中访问主题词

Gensim实现中DBOW doc2vec的word2vec映射来自哪里?

如何使用单词的矢量表示(从Word2Vec等获得)作为分类器的功能?

word2vec如何从向量中获取单词?

如何确定Gensim Word2Vec是否正在使用C编译器?

如何使用gensim的word2vec模型和python计算句子相似度