我有一个受过训练的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')和嵌入?
感谢阅读!
答案 0 :(得分:0)
您已经知道答案了。构建一个numpy数组。
X = np.array([model1[word] for word in adj])
也许您甚至可以简单地做
X = model1[adj]
像以前那样构建混合数据数组是无效的。