为什么对向量值求平均会导致错误?

数据挖掘 词嵌入 麻木的
2022-02-14 13:16:01

作为改进我的模型的一种方法,我想对一个句子的 GloVe 向量进行平均。但是,我无法让 np.mean 工作。以下代码在平均单词时有效。(从其他代码复制)

embeddings_dict = {}
with open("glove.6B.50d.txt", 'r') as f:
    for line in f:
        values = line.split()
        word = values[0]
        vector = np.asarray(values[1:], "float32")
        embeddings_dict[word] = vector

g = open("input.txt", 'r')

vector_lines = []

for line in g:
    clean_line = line.translate(str.maketrans('', '', string.punctuation))
    array_line = clean_line.lower().split()
    vec_line = []
    i = 0
    for word in array_line:
        i += 1
        try:
            vec_line.append(embeddings_dict[word])
        except:
            vec_line.append(embeddings_dict["unk"])
    while i < 30: //pad up to thirthy words with zero vectors
        vec_line.append(np.zeros(50))
        i += 1
    vector_lines.append(np.asarray(vec_line))

X = np.asarray(vector_lines)

为了平均单词,我正在修改一小部分代码

        try:
            vec_line.append(embeddings_dict[word])
        except:
            vec_line.append(embeddings_dict["unk"])

    #padding is not necessary anymore
    #while i < 30: 
    #    vec_line.append(np.zeros(50))
    #    i += 1

    vec_mean = np.mean(vec_line, axis=0, keepdims=True)[:,None]
    vector_lines.append(vec_mean)

X = np.asarray(vector_lines)

这给了我错误“ValueError:无法将输入数组从形状(1,50)广播到形状(1,1)”。感觉好像我已经尽我所能尝试了对这段代码的所有可能修改,但我不断遇到形状问题。是什么导致了所有这些问题?

1个回答

改变这个:

import bumpy as np
a = np.array([1,2,3])
b = np.array([4,5,6])
vec_line = [a,b]

print(np.mean(vec_line, axis=0, keepdims=True)[:,None])
>>[[[2.5 3.5 4.5]]]
np.mean(vec_line, axis=0, keepdims=True)[:,None].shape
>>(1,1,3)

对此:

print(np.mean(vec_line, axis=0))
>>[2.5 3.5 4.5]
np.mean(vec_line, axis=0).shape
>>(3,)