У меня есть модель 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
Конечно, это не работает,Одна проблема, которую я могу найти, состоит в том, что я вытаскиваю из пустого массива и помещаю в список, который kclustering не использует.Ему нравились массивы NumPy.
Мой вопрос: как извлечь набор (на основе списка идентификаторов слов) векторов из модели word2vec, сохранив их в виде массива и сохранив связь между идентификатором слова (например, 'у ') и вложения?
Спасибо за чтение!