Gensim word2vec模型输出1000维ndarray,但最大ndarray维数为32-怎么做?

乔治·吉索蒂

我正在尝试使用1000维维基百科word2vec模型来分析一些文档。

使用自省,我发现单词的向量表示是1000维numpy.ndarray,但是每当我尝试创建ndarray来查找最接近的单词时,我都会得到一个值错误:

ValueError: maximum supported dimension for an ndarray is 32, found 1000

从网上浏览的结果可以看出,32个数组的确是支持的最大维数-那有什么用呢?gensim如何输出1000维ndarray?

这是一些示例代码:

doc = [model[word] for word in text if word in model.vocab]
out = []
n = len(doc[0])
print(n)
print(len(model["hello"]))
print(type(doc[0]))
for i in range(n):
    sum = 0
    for d in doc:
        sum += d[i]
    out.append(sum/n)
out = np.ndarray(out)

输出:

1000
1000
<class 'numpy.ndarray'>
ValueError: maximum supported dimension for an ndarray is 32, found 1000

这里的目标是以一种可用于查找模型中附近单词的格式来计算语料库中所有单词的平均向量,因此欢迎任何其他替代建议。

五条魔

您正在调用numpyndarray()构造函数,其中包含一个包含1000个数字的列表-手工计算的1000个维度的平均值。

ndarray()函数期望其参数为所构造矩阵形状,因此它试图创建一个新的形状矩阵(d[0], d[1], ..., d[999])-然后,该矩阵中的每个单个值都将使用1000-int坐标集进行寻址。而且,实际上numpy数组只能具有32个独立的维。

但是,即使您将要提供的列表减少ndarray()到仅32个数字,您仍然会遇到问题,因为32个数字是浮点值,并且ndarray()期望整数。(您会得到一个TypeError。)

在您尝试采用的方法中(这将不是最佳方法,因为我们将在下文中介绍),您真的想创建一个包含1000个浮点维的向量也就是说,有1000个类似单元格的值–不能 d[0] * d[1] * ... * d[999]分开单独的类似单元格的值。

因此,按照最初方法的粗略解决方法可能是用以下任一方法替换最后一行:

result = np.ndarray(len(d))
for i in range(len(d)):
    result[i] = d[i]

但是,有很多方法可以使此方法更加高效,紧凑和惯用–尽管下面最好的方法使大多数临时步骤都不必要,但我将在下文中提及其中的许多方法。

例如,您可以使用Python的方括号索引分配选项代替上面代码中的分配循环:

result = np.ndarray(len(d))
result[:] = d  # same result as previous 3-lines w/ loop

但实际上,numpyarray()功能实际上可以从给定列表中创建必要的numpy-native ndarray,因此ndarray(),您可以只使用array()

result = np.array(d)  # same result as previous 2-lines

但是,此外,它numpy的许多本机处理数组(和类似数组的列表)的功能已经包含了一步完成多个向量平均的事情(其中甚至循环都隐藏在非常高效的编译代码或CPU中)批量向量操作)。例如,有一个mean()函数可以对数字列表进行平均,或者对数字的多维数组进行平均,或者对向量进行对齐,等等。

这样可以实现更快,更清晰,更简单的方法,该方法可以将整个原始代码替换为以下内容:

# get a list of available word-vetors
doc = [model[word] for word in text if word in model.vocab]
# average all those vectors
out = np.mean(doc, axis=0)

(不带axis参数,它将所有插槽中的所有单个维度值平均在一起,只有一个最终平均值。)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

与koa2续集不能限制记录。我能怎么做?

为什么Swing线程模型被认为是错误的,应该怎么做?

Android Oreo:我应该怎么做才能将我的应用发布为自动填充服务提供商?

怎么把Gensim Word2Vec模型转换成FastText模型?

怎么做,为这个代码做while循环?

分层-怎么做?

我应该怎么做才能导入缓存,ws,jdbc和specs2%测试

Python Gensim从向量创建Word2Vec模型(在ndarray中)

我需要将此查询限制为1000条记录,并在TOTAL字段中显示count(),该怎么做?

我该怎么做才能改善Keras CNN VGG16模型

怎么做拖放?

OAuth2调用成功后您应该怎么做?

Sublime Text 2智能感知-怎么做?

#(对于[x%,i(范围%2)] x)怎么做?

git的默认编辑器设置为nano-怎么做?

分区;Ubuntu,Kubuntu,Windows,您为它命名,我该怎么做?

脚本的输出何时会附加到文件中,我该怎么做才能规避结果?

Swift-如果按下2个按钮怎么做?

我正在尝试在python的json输出中获取与名称关联的值。我不知道该怎么做

将点击的图片保存到var中,并将其设置为背景,然后显示新的div-怎么做?

我应该怎么做才能最大程度地利用Nvidia GeForce FX 5500显卡?

如何获取numpy.ndarray中的键值对?(Gensim Word2vec)

在angular 2中我该怎么做jsonp.request以及从哪里导入jsonp

我该怎么做才能摆脱主函数 def 模型中的“int”对象不可下标错误:

怎么做分页?

patchForObject 怎么做?

我应该怎么做才能解决这个 cv2 错误?

如果输入为空,我该怎么做,什么都不会发生

乘法后,我希望输出为 2 位小数?怎么做?