型号 1000 但数量是 32 – 怎么办?

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

通过内省,我发现一个单词的向量表示是一个 1000 维的 numpy。 但每当我尝试创建一个来查找最接近的单词时,我都会收到一个值错误:

:对于 32,找到 1000

我在网上查了一下,32确实是支持的最大维度数——那么给出了什么? 如何输出1000个维度?

这是一些示例代码:

10

11

12

doc = [model[word] for word in text if word in model.vocab]

输出 = []

n = 长度(文档[0])

打印(n)

打印(len(模型[“你好”]))

打印(类型(文档[0]))

对于范围 (n) 内的 i:

总和 = 0

对于 doc 中的 d:

总和 += d[i]

输出。(总和/n)

输出 = np.(输出)

输出:

1000

1000

:对于 32,找到 1000

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

您正在使用 1000 个数字的列表调用 numpy 的 () 构造函数——您手动计算的 1000 个维度中每个维度的平均值。

() 函数期望其参数是构造矩阵的形状,因此它尝试创建形状为 (d[0], d[1], …, d[999]) 的新矩阵 – 然后在该矩阵的每个单独值都将使用 1000-int 坐标进行设置。 此外,numpy 数组确实只能有 32 个独立维度。

但是,即使您将提供给 () 的列表减少到仅 32 个数字,您仍然会遇到问题,因为您的 32 个数字是浮点值,而 () 需要整数计数。 (你会得到一个。)

按照您想要做的事情(这不是我们下面将介绍的最佳方式),您确实想要创建一个具有 1000 个浮点维度的单个向量。 也就是说,1000 个相似的单元格值 – 不是 d[0] * d[1] * … * d[999] 个单独的相似单元格值。

因此,按照原始方法的粗略解决方法可能是将最后一行替换为:

= np.(len(d))

对于范围内的 i(len(d)):

[i] = d[i]

但是有一些方法可以逐步提高效率、紧凑性和习惯用法——我将在下面提到其中一些方法,尽管最好的方法基本上是不必要的。

首先,您可以使用括号来索引赋值选项,而不是上面代码中的赋值循环:

= np.(len(d))

[:] = d # 与带循环的 3 行相同

但事实上,numpy\ 的 array() 函数本质上可以从给定列表创建必要的 numpy- ,因此您可以直接使用 array() 来代替 () :

= np.array(d) # 与 2 行相同

但更进一步,numpy 的许多用于处理数组(和类似数组的列表)的本机函数已经包含了一步对多个向量进行平均的功能(甚至循环也隐藏在非常高效的编译代码或 CPU 密集型向量操作中) )。 例如,有一个 Mean() 函数,可以对数字列表、多维数字数组或对齐的向量集等进行平均。

这允许一种更快、更干净、单行的方法,可以用以下代码替换整个原始代码:

# 获取单词列表 –

doc = [model[word] for word in text if word in model.vocab]

# 所有那些

输出 = np. 平均值(文档,轴=0)

(如果没有轴参数,它将所有槽中的所有单独维度值平均在一起以形成最终平均值。)

好了,今天的主题就讲到这里吧,不管如何,能帮到你我就很开心了,如果您觉得这篇文章写得不错,欢迎点赞和分享给身边的朋友。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注