我正在尝试使用KMeans
中的scikit learn
算法对多个单词进行聚类。
特别是,我使用预训练的字嵌入(300维向量)来用数字向量映射每个单词,然后我将这些向量提供给KMeans并提供簇的数量。
我的问题是我的输入语料库中有一些单词,我在预训练的单词嵌入字典中找不到。这意味着在这些情况下,我得到一个充满nan
值的numpy数组,而不是向量。这不适用于kmeans算法,因此我必须排除这些数组。但是,我有兴趣看到嵌入这个词中没有找到的所有这些案例,如果可能的话,将它们放在一个只包含它们的单独集群中。
我的想法是设置一个条件,如果从嵌入索引返回带有纳米值数组的单词,则为其分配一个任意向量。嵌入向量的每个维度都在[-1,1]
之内。因此,如果我将以下向量[100000]*300
分配给所有nan字,我创建了一组异常值。实际上,这可以按预期工作,因为这组特定的向量被强制在一个单独的集群中。然而,kmeans质心的初始化受到这些异常值的影响,因此我的所有其余群集也会混乱。作为一个遗憾,我尝试使用init = k-means++
启动kmeans,但首先,执行需要更长的时间,其次改进并不是更好。
有关如何处理此问题的任何建议吗?
谢谢。
答案 0 :(得分:0)
如果您没有单词数据,请跳过它。
您可以尝试根据上下文动态计算单词向量,但这与跳过它基本相同。