根据https://code.google.com/archive/p/word2vec/的说法:
最近的研究表明,矢量这个词捕捉了许多语言规律,例如向量运算矢量(‘Paris’)-向量(‘法国’)+向量(‘意大利’)产生的向量非常接近矢量(‘罗马’),向量(‘king’)-矢量(‘man’)+向量(‘woman’)接近矢量(‘queen’) 3,1。您可以通过运行演示-类比to来尝试一个简单的演示。
因此,我们可以从提供的演示脚本中尝试:
+ ../bin/word-analogy ../data/text8-vector.bin
Enter three words (EXIT to break): paris france berlin
Word: paris Position in vocabulary: 198365
Word: france Position in vocabulary: 225534
Word: berlin Position in vocabulary: 380477
Word Distance
------------------------------------------------------------------------
germany 0.509434
european 0.486505请注意,paris france berlin是演示建议的输入提示。问题是,如果我在Gensim中打开相同的单词向量并尝试自己计算向量,我就无法再现这种行为。例如:
>>> word_vectors = KeyedVectors.load_word2vec_format(BIGDATA, binary=True)
>>> v = word_vectors['paris'] - word_vectors['france'] + word_vectors['berlin']
>>> word_vectors.most_similar(np.array([v]))
[('berlin', 0.7331711649894714), ('paris', 0.6669869422912598), ('kunst', 0.4056406617164612), ('inca', 0.4025722146034241), ('dubai', 0.3934606909751892), ('natalie_portman', 0.3909246325492859), ('joel', 0.3843030333518982), ('lil_kim', 0.3784593939781189), ('heidi', 0.3782389461994171), ('diy', 0.3767407238483429)]那么,类比这个词到底在做什么呢?我该怎么复制它?
发布于 2018-09-17 13:24:52
它应该只是按元素加减矢量。和余弦距离找到最相似的。但是,如果您使用原始的word2vec嵌入,那么"paris“和"Paris”之间就会有区别(字符串没有降低或符号化)。
你也可以尝试:
v = word_vectors['France'] - word_vectors['Paris'] + word_vectors['Berlin']或
v = word_vectors['Paris'] - word_vectors['France'] + word_vectors['Germany']因为你应该比较相同的概念(城市国家+乡村->另一个城市)
发布于 2018-09-17 20:09:53
您应该清楚地知道您使用的是哪个字向量集:不同的集合将有不同的能力来很好地执行类比任务。(那些在小型text8数据集上受过训练的人可能很弱;谷歌发布的大型GoogleNews集可能会做得很好,至少在某些情况下,比如放弃低频率词。)
你对你想要解决的类比做了错误的计算。打个比方,"A是B,C是B ?“常写为:
A : B :: C : _?_你从'B‘开始,减去'A',然后添加'C’。所以这个例子是:
France : Paris :: Italy : _?_...gives摘录文本中的公式:
wv('Paris') - wv('France') + wv('Italy`) = target_coordinates # close-to wv('Rome')取而代之的是:
Paris : France :: Berlin : _?_你可以试着:
wv('France') - wv('Paris') + wv('Berlin') = target_coordinates...then看什么离target_coordinates最近。(注意操作顺序与您的尝试之间的差异。)
你可以把它想象成:
还请注意,gensim的most_similar()接受多个正负单词示例来为您做算术。所以,您可以这样做:
sims = word_vectors.most_similar(positive=['France', 'Berlin'], negative=['Paris'])https://stackoverflow.com/questions/52364632
复制相似问题