【问题标题】:Setting gensim wordVectors init_sim property as True error - ValueError: output array is read-only将 gensim wordVectors init_sim 属性设置为 True 错误 - ValueError:输出数组是只读的
【发布时间】:2020-07-09 03:29:56
【问题描述】:

下面是代码,我正在执行。错误出现在第 3 行 (vectors.init_sims(True))

fname = get_tmpfile(path_to_embedding_file)
vectors = KeyedVectors.load(fname, mmap='r')

vectors.init_sims(True)

这是错误堆栈-

Traceback (most recent call last):
  File "generate_pair_histograms.py", line 82, in <module>
    vectors.init_sims(True) # normalize the vectors (!), so we can use the dot product as similarity measure
  File "C:\users\janki\Anaconda3\lib\site-packages\gensim\models\keyedvectors.py", line 1354, in init_sims
    self.vectors_norm = _l2_norm(self.vectors, replace=replace)
  File "C:\users\janki\Anaconda3\lib\site-packages\gensim\models\keyedvectors.py", line 2374, in _l2_norm
    m /= dist
ValueError: output array is read-only

这是一个已知问题吗?有人可以为此提供解决方案或解决方法吗?

【问题讨论】:

    标签: nlp gensim word-embedding


    【解决方案1】:

    通过在加载 KeyedVectors 时使用可选的非默认 mmap='r' 参数,您特别请求了一个由磁盘文件的只读 ('r') 视图支持的实例,该磁盘文件不会被那个观点改变了。

    然后,通过使用True 作为.init_sims(replace=True) 调用的可选非默认参数,您已请求预先计算替换原始值的单位范数向量。您无法覆盖只读视图中的值,因此会出现错误。

    根据你真正想做的事情,不清楚,至少做以下一项:

    • 完全省略mmap 参数:您将获得一个常规的内存KeyedVectors,您可以在内存中随意修改它,然后可以选择稍后保存。 (但是,当您已经拥有原始非规范集时,您可能想要保存单位规范版本 - 您始终可以对原始向量进行单位规范化,但您不能去反之。)
    • 省略 True.init_sims():然后该步骤将使用单位规范值创建第二个数组,而不是尝试写入原始数组
    • 更改 mmap 参数以允许读写 - 您可能不想这样做。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-26
      • 1970-01-01
      • 2015-07-17
      • 1970-01-01
      相关资源
      最近更新 更多