У меня есть набор документов (3000), каждый из которых содержит краткое описание. Я хочу использовать модель Word2Vec, чтобы посмотреть, смогу ли я кластеризовать эти документы на основе описания.
Я делаю это следующим образом, но я не уверен, что это «хороший» способ сделать это. Хотелось бы получить обратную связь.
Я использую обученную модель w2v от Google.
wv = gensim.models.KeyedVectors.load_word2vec_format('GoogleNews-vectors-negative300.bin.gz',binary=True,encoding="ISO-8859-1", limit = 100000)
Каждый документ разбит на слова, в которых удаляются стоп-слова, и я также использовал основание.
Моя первоначальная идея состояла в том, чтобы выбрать вектор слов для каждого слова в описании каждого документа, усреднить его, а затем кластеризовать на основе этого.
doc2vecs = []
for i in range(0, len(documents_df['Name'])):
vec = [0 for k in range(300)]
for j in range(0, len(documents_df['Description'][i])):
if documents_df['Description'][i][j] in wv:
vec += wv[documents_df['Description'][i][j]]
doc2vecs.append(vec/300)
Затем я нахожу сходства, используя
similarities = squareform(pdist(doc2vecs, 'cosine'))
, который возвращает матрицу косинуса между каждым вектором в doc2vec
.
Затем я пытаюськластеризовать документы.
num_clusters = 2
km = cluster.KMeans(n_clusters=num_clusters)
km.fit(doc2vecs)
В общем, мне интересно вот что:
Является ли этот метод кластеризации вектора средних слов для каждого слова в документе разумным способом кластеризации документов?