繁体   English   中英

gensim word2vec条目大于1

[英]gensim word2vec entry greater than 1

我是NLP和gensim的新手,目前正尝试使用gensim word2vec模块解决一些NLP问题。 我目前对word2vec的理解,结果向量/矩阵的所有条目都应在-1和1之间。但是,尝试将一个简单的结果输入到具有大于1的条目的向量中。我不确定哪一部分是错误的有人给一些建议吗?

我已经使用gensim utils.simple_preprocess生成令牌列表的列表。 该列表如下所示:

[['buffer', 'overflow', 'in', 'client', 'mysql', 'cc', 'in', 'oracle', 'mysql', 'and', 'mariadb', 'before', 'allows', 'remote', 'database', 'servers', 'to', 'cause', 'denial', 'of', 'service', 'crash', 'and', 'possibly', 'execute', 'arbitrary', 'code', 'via', 'long', 'server', 'version', 'string'], ['the', 'xslt', 'component', 'in', 'apache', 'camel', 'before', 'and', 'before', 'allows', 'remote', 'attackers', 'to', 'read', 'arbitrary', 'files', 'and', 'possibly', 'have', 'other', 'unspecified', 'impact', 'via', 'an', 'xml', 'document', 'containing', 'an', 'external', 'entity', 'declaration', 'in', 'conjunction', 'with', 'an', 'entity', 'reference', 'related', 'to', 'an', 'xml', 'external', 'entity', 'xxe', 'issue']]

我相信这是gensim word2vec的正确输入格式。

word2vec = models.word2vec.Word2Vec(sentences, size=50, window=5, min_count=1, workers=3, sg=1)
vector = word2vec['overflow']
print(vector)

我希望输出是一个包含概率的向量(即,都在-1和1之间),但实际上结果是:

[ 0.12800379 -0.7405527  -0.85575     0.25480416 -0.2535793   0.142656
 -0.6361196  -0.13117172  1.1251501   0.5350017   0.05962601 -0.58876884
  0.02858278  0.46106443 -0.22623934  1.6473309   0.5096218  -0.06609935
 -0.70007527  1.0663376  -0.5668168   0.96070313 -1.180383   -0.58649933
 -0.09380565 -0.22683378  0.71361005  0.01779896  0.19778453  0.74370056
 -0.62354785  0.11807996 -0.54997736  0.10106519  0.23364201 -0.11299669
 -0.28960565 -0.54400533  0.10737313  0.3354464  -0.5992898   0.57183135
 -0.67273194  0.6867607   0.2173506   0.15364875  0.7696457  -0.24330224
  0.46414775  0.98163396]

您可以看到上述向量中有1.6473309-1.180383

不是个别字向量之间会有所有的各个尺寸的情况下, -1.01.0

也不应该将维度解释为“概率”。

而是,学习单词向量,使得内部神经网络在从周围单词预测单词时变得尽可能好。 在训练过程中没有任何约束或规范化,可以将各个维度强制限制在一个范围内,或者将各个维度解释为可命名的质量。

有时,在相互比较之前,在训练之后将这样的向量转换为标准化单位长度的向量。 此外,当您请求两个向量之间的余弦相似度时,结果将始终在-1.01.0的范围内。 并且,在执行非常常见的most_similar()操作(或类似操作)之前,具有bulk-unit-normalize向量的Word2Vec类会在内部缓存结果。

但是,根据model.wv['overflow']直接请求原始单词向量,将返回原始向量,无论原始总体大小还是来自训练的维度值。 您可以使用以下方法来请求以单位为单位的向量:

model.wv.word_vec('overflow', use_norm=True)

(另外请注意:在很小的玩具大小的数据集上测试Word2Vec通常不会获得有用或现实的结果:该算法确实需要大量不同的数据才能得出平衡且有用的字向量。例如,训练50-在维向量中,我希望词汇表中至少有2500个唯一的单词,每个单词有数十种不同的用法-因此,一个成千上万个单词的语料库;而且我可能还会使用多个默认epochs=5 ,因为仍然是一个很小的语料库。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM