Здесь я имею дело с данными о тикете, где описание представляет собой столбец, который содержит сводку о тикете или инциденте. Моя задача - создать метки двух уровней для каждого тикета, инцидента или документа на основе соответствующего краткого описания.
Я попробовал кластеризацию с помощью k-средних и пометил каждый документ, используя метод центроида и триграмму, но это неправильная маркировка для тех документов, которые находятся за пределами центроида. Я также попробовал LDA, но мне сложно определить кластер, если данные формируют более 10 кластеров. Сейчас я пробую контекстные метки центроидов, но, поскольку я новичок в python, пожалуйста, помогите, как реализовать в python. Пожалуйста, дайте мне знать, если есть другое решение для этого.
vectorizer = TfidfVectorizer(stop_words='english', ngram_range=(3,3))
X = vectorizer.fit_transform(summary['Description'])
true_k = 20
model = KMeans(n_clusters=true_k, init='k-means++', max_iter=100,
n_init=1)
model.fit(X)
clustering = model.labels_
print (clustering)
words=[]
print("Top terms per cluster:")
order_centroids = model.cluster_centers_.argsort()[:, ::-1]
terms = vectorizer.get_feature_names()
for i in range(true_k):
print ("Cluster %d:" % i),
for ind in order_centroids[i, :1]:
print (' %s' % terms[ind]),
words.append(' %s' % terms[ind])
Я хочу, чтобы вывод был таким