首页 > 解决方案 > Word2Vec 维度导致 KMeans 出现问题

问题描述

我有一个sentences包含 1000 个字符串的列表,我想使用 KMeans 进行聚类。像这样:

sentences = [
    ['I', 'received', 'an', 'email']
    ['How', 'do', 'I', 'know', 'it', 'is', 'real?'], 
    ['Ladies', 'and', 'Gentlemen'] 
]

我正在使用 word2vec 删除停用词并预处理输入。

我像这样运行 word2vec:m = Word2Vec(sentences, size=50, window=6, min_count=1, sg=1)

之后,我定义了一个向量器,它对 word2vec 生成的所有单词浮点向量进行平均。

def vectorizer(sentence, m):
    vec = []
    numw = 0
    for w in sentence:
        try:
            if numw == 0:
                vec = m[w]
            else:
                vec = np.add(vec, m[w])
            numw+=1
        except:
            pass

    return np.asarray(vec) / numw

最后,我通过这个矢量化器传递整个输入:

def vectorize(sentences, m):
    l = []
    for i in sentences:
        l.append(vectorizer(i, m))

    return np.array(l)

然后我像这样调用vectorizer方法:X = vectorize(sentences, m)

当我这样做X.shape时,输出为:[1000, 50]。由于 word2vec 中传递的大小是 50。我有 1000 条记录。

但是,当我将 word2vec 的大小更改为 100 时,则X.shape只是 [1000,]。

知道为什么会发生这种情况以及如何解决吗?

它导致我在使用 KMeans 时出现问题,因为当我通过它时出现此错误: ValueError: setting an array element with a sequence.

标签: pythonnumpymultidimensional-arrayk-meansnumpy-ndarray

解决方案


推荐阅读