Как правильно кластеризовать имена документов и найти сходства между документами на основе модели Word2Vec? - PullRequest
0 голосов
/ 08 октября 2019

У меня есть набор документов (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)

В общем, мне интересно вот что:

Является ли этот метод кластеризации вектора средних слов для каждого слова в документе разумным способом кластеризации документов?

1 Ответ

2 голосов
/ 09 октября 2019

В 2019 году, если у вас нет серьезных ресурсных ограничений, вам не нужно векторизовать документы путем усреднения вложений слов. Вы можете использовать Universal Sentence Encoder для векторизации документов в несколько строк кода .

Большинство алгоритмов кластеризации работают лучше в низких измерениях, поэтому здесь вы хотите уменьшить размерность, а не кластеризовать. AFAIK, вы получите лучшие результаты от UMAP. Их документы объясняют, как это сделать очень четко.

...