型号 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)
(如果没有轴参数,它将所有槽中的所有单独维度值平均在一起以形成最终平均值。)
好了,今天的主题就讲到这里吧,不管如何,能帮到你我就很开心了,如果您觉得这篇文章写得不错,欢迎点赞和分享给身边的朋友。