Неэффективность тематического моделирования для кластеризации текста

Я попытался сделать кластеризацию текста с использованием LDA, но это не дает мне четких кластеров. Ниже мой код

#Import libraries
from gensim import corpora, models
import pandas as pd
from gensim.parsing.preprocessing import STOPWORDS
from itertools import chain

#stop words
stoplist = list(STOPWORDS)
new = ['education','certification','certificate','certified']
stoplist.extend(new)
stoplist.sort()

#read data
dat = pd.read_csv('D:\data_800k.csv',encoding='latin').Certi.tolist()
#remove stop words
texts = [[word for word in document.lower().split() if word not in stoplist] for document in dat]
#dictionary
dictionary = corpora.Dictionary(texts)
#corpus
corpus = [dictionary.doc2bow(text) for text in texts]
#train model
lda = models.LdaMulticore(corpus, id2word=dictionary, num_topics=25, workers=4,minimum_probability=0)
#print topics
lda.print_topics(num_topics=25, num_words=7)
#get corpus
lda_corpus = lda[corpus]
#calculate cutoff score
scores = list(chain(*[[score for topic_id,score in topic] \
                      for topic in [doc for doc in lda_corpus]]))


#threshold
threshold = sum(scores)/len(scores)
threshold
**0.039999999971137644**

#cluster1
cluster1 = [j for i,j in zip(lda_corpus,dat) if i[0][1] > threshold]

#cluster2
cluster2 = [j for i,j in zip(lda_corpus,dat) if i[1][1] > threshold]

Проблема в том, что в cluster1 есть перекрывающиеся элементы, которые обычно присутствуют в cluster2 и так далее.

Я также пытался вручную увеличить порог до 0,5, однако это вызывает у меня ту же проблему.

1 ответ

Это просто реально.

Ни документы, ни слова обычно однозначно не назначаются одному кластеру.

Если вы вручную пометите некоторые данные, вы также быстро найдете некоторые документы, которые нельзя четко пометить как один или другой. Так что хорошо, что алгоритм не притворяется, что было хорошее уникальное задание.

Другие вопросы по тегам