Python 查找与随机初始化数组最相似的词

Python 查找与随机初始化数组最相似的词,python,numpy,typeerror,gensim,word2vec,Python,Numpy,Typeerror,Gensim,Word2vec,使用Gensim软件包,我在我正在使用的语料库上培训了word2vec模型,如下所示: word2vec = Word2Vec(all_words, min_count = 3, size = 512, sg = 1) 使用Numpy,我初始化了一个具有相同维度的随机数组: vector = (rand(512)-0.5) *20 现在,我想从word2vec中找到与我初始化的随机向量最相似的单词 对于word2vec中的单词,您可以运行: word2vec.most_similar('wo

使用Gensim软件包,我在我正在使用的语料库上培训了word2vec模型,如下所示:

word2vec = Word2Vec(all_words, min_count = 3, size = 512, sg = 1)
使用Numpy,我初始化了一个具有相同维度的随机数组:

vector = (rand(512)-0.5) *20
现在,我想从word2vec中找到与我初始化的随机向量最相似的单词

对于word2vec中的单词,您可以运行:

word2vec.most_similar('word')
输出是一个包含最相似单词及其相应距离的列表

我希望为初始化的数组获得类似的输出

但是,当我跑步时:

word2vec.most_similar(vector)
我得到以下错误:

Traceback (most recent call last):

  File "<ipython-input-297-3815cf183d05>", line 1, in <module>
    word2vec.most_similar(vector)

  File "C:\Users\20200016\AppData\Local\Continuum\anaconda3\lib\site-packages\gensim\utils.py", line 1461, in new_func1
    return func(*args, **kwargs)

  File "C:\Users\20200016\AppData\Local\Continuum\anaconda3\lib\site-packages\gensim\models\base_any2vec.py", line 1383, in most_similar
    return self.wv.most_similar(positive, negative, topn, restrict_vocab, indexer)

  File "C:\Users\20200016\AppData\Local\Continuum\anaconda3\lib\site-packages\gensim\models\keyedvectors.py", line 549, in most_similar
    for word, weight in positive + negative:

TypeError: cannot unpack non-iterable numpy.float64 object
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
word2vec.最相似(向量)
文件“C:\Users\20200016\AppData\Local\Continuum\anaconda3\lib\site packages\gensim\utils.py”,第1461行,新函数1
返回函数(*args,**kwargs)
文件“C:\Users\20200016\AppData\Local\Continuum\anaconda3\lib\site packages\gensim\models\base\u any2vec.py”,第1383行,大多数类似文件
返回self.wv.最相似(正、负、topn、限制、索引器)
文件“C:\Users\20200016\AppData\Local\Continuum\anaconda3\lib\site packages\gensim\models\keyedvivers.py”,第549行,大多数类似文件
对于单词,正+负的权重:
TypeError:无法解压缩不可编辑的numpy.float64对象
如何克服此错误并找到与数组最相似的单词


我查过了,翻页了。但是,我不清楚如何使用这些建议来解决我的问题。

您正在尝试查看浮点数是否类似于字符串,但这不起作用(
无法解压缩不可编辑的numpy.float64对象


您需要做的是正确地生成随机字符串,而不是随机浮点数。完成此操作后,您的代码将正常工作。另请参见说明str的
列表
()

Gensim的
键控向量
接口
。大多数类似的
方法可以
将原始向量作为其目标,但按其当前顺序(至少通过
Gensim-3.8.3
)参数类型检测要避免将单个向量误认为键列表,您需要将其显式地作为命名的
参数的项目列表的一个成员提供

具体而言,这应该是可行的:

similars=word2vec.wv.最相似(正=[vector,])

感谢您的回复,Matthieu。根据您发送的文档,我不清楚如何生成随机字符串,因为文档中经常出现str的列表。您可以提供一个例子吗?您可以通过为每个字母绘制一个字符串大小,然后为每个字母绘制一个0到26之间的随机整数来创建一个字符串,这应该会给出您的单词。在
Word2Vec
模型或它创建的单词向量集(并保存在其
.wv
属性中)中查找随机字符串是没有用的。它们极有可能产生
键错误
。但也可以使用原始向量,如问题中给出的随机位置
向量
,作为一组
结果的原点。最相似的()
结果,详见我的兄弟姐妹回答。