【问题标题】:How to extract vectors from a Word2Vec Model for clustering如何从 Word2Vec 模型中提取向量进行聚类
【发布时间】:2019-09-18 12:46:18
【问题描述】:

我有一个我训练过的 word2vec 模型。该模型基于约 95,000 个单词的语料库。我只想选择语料库中的那些词,例如形容词。为此,假设我有adj,这是语料库中所有形容词的列表。我希望他们保留所有语料库中的嵌入,但我想提取这些向量并仅对形容词进行某种聚类分析。

据我了解,如果我有X,这是一个 word2vec 模型的词汇表,我可以像这样提取所有形容词的向量

adj = [ 'x', 'y', 'z']
X = model1[model1.wv.vocab]
adjvsm = []
for i in adj:
    adjvsm.append([i, X[i]])

这将创建以下列表:

adjsvm[1]
['x', array([ 1.0772455 ,  0.481113  , -0.19076753, -0.31512445,  2.700769], dtype=float32)]

通常,如果我想对 word2vec 模型进行聚类,我会执行以下操作:

kclusterer = KMeansClusterer(some_number_of_cluster, distance=nltk.cluster.util.cosine_distance, repeats=25)

assigned_clusters = kclusterer.cluster(X, assign_clusters=True)
print(assigned_clusters)

如果我指定一个二元簇,它会生成如下列表:

x = 1
y = 0
z = 0

当然,这是行不通的。我能找到的一个问题是我从一个 numpy 数组中提取并放入一个列表中,而 kclustering 不使用该列表。它喜欢 numpy 数组。

我的问题是如何从 word2vec 模型中提取一组向量(基于单词 ID 列表),同时将它们保持为 numpy 数组并保持单词 ID(例如“y”)和嵌入之间的链接?

【问题讨论】:

    标签: python cluster-analysis word2vec


    【解决方案1】:

    你已经知道答案了。构建一个 numpy 数组。

    X = np.array([model1[word] for word in adj])
    

    也许你甚至可以简单地做

    X = model1[adj]
    

    像你一样构建混合数据数组是无效的。

    【讨论】:

      猜你喜欢
      • 2017-11-25
      • 2017-10-09
      • 2018-04-19
      • 2020-09-30
      • 1970-01-01
      • 2019-01-06
      • 2018-08-18
      • 2017-09-24
      • 2019-02-02
      相关资源
      最近更新 更多