【问题标题】:Find most similar words to randomy initialized array找到最相似的词来随机初始化数组
【发布时间】:2020-12-10 22:28:42
【问题描述】:

使用 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

我可以做些什么来克服这个错误并找到与我的数组最相似的单词?

我检查了thisthis 页面。但是,我不清楚如何通过这些建议解决我的问题。

【问题讨论】:

    标签: python numpy typeerror gensim word2vec


    【解决方案1】:

    您正在尝试查看浮点数是否与字符串相似,但这不起作用 (cannot unpack non-iterable numpy.float64 object)。

    您需要做的是正确生成随机字符串,而不是随机浮点数。完成此操作后,您的代码将起作用。另请参阅声明 list of str (https://radimrehurek.com/gensim/models/keyedvectors.html#gensim.models.keyedvectors.WordEmbeddingsKeyedVectors.most_similar)

    的文档

    【讨论】:

    • 感谢您的回复马修。根据您发送的文档,我不清楚如何生成随机字符串,因为我看到list of str 在文档中经常出现。你能举个例子吗?
    • 您可以通过绘制一个字符串大小然后为每个字母创建一个介于 0 和 26 之间的随机整数来创建一个,这应该会给您的话。
    • Word2Vec 模型或它创建的词向量集(并保存在其.wv 属性中)中查找随机字符串是没有用的。他们极有可能生成KeyError。但是可以使用原始向量,例如问题中给出的随机位置vector,作为一组.most_similar() 结果的原点,详见我的兄弟答案。
    【解决方案2】:

    Gensim 的KeyedVectors 接口.most_similar() 方法可以 将原始向量作为其目标,但为了使其当前(至少通过gensim-3.8.3)参数类型检测不会误对于键列表的单个向量,您需要将其显式提供为命名 positive 参数的项目列表的一个成员。

    具体来说,这应该有效:

    similars = word2vec.wv.most_similar(positive=[vector,])
    

    【讨论】:

      猜你喜欢
      • 2018-10-12
      • 2012-08-30
      • 2016-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-02
      相关资源
      最近更新 更多