Кластеры HDBSCAN объединяют в одном кластере встраивания, которые находятся слишком далеко друг от друга.
У меня есть задача группировать высказывания для чат-бота на основе сходства предложений, чтобы выяснить, какие темы задают пользователи и насколько они важны. Я конвертирую высказывания в встраивания предложений, используя «all-mpnet-base-v2». Вектор довольно большой, имеет 768 измерений и с помощью umap уменьшается до 13 измерений. Эти уменьшенные векторы затем кластеризуются с помощью HDBSCAN:
umap_embeddings = (umap.UMAP(n_neighbors = 3,
n_components = 15,
metric = 'cosine',
random_state=random_state)
.fit_transform(message_embeddings))
clusters = hdbscan.HDBSCAN(min_cluster_size = 9,
min_samples = min_samples,
metric='euclidean',
gen_min_span_tree=True,
cluster_selection_method='eom').fit(umap_embeddings)
Чтобы упростить задачу, я еще больше сократил вложения в 2D, и вы можете видеть, что в кластере есть высказывания, которые явно сюда не относятся, и я не понимаю, почему HDBSCAN кластеризует их таким образом.Неправильная кластеризация
Есть ли у кого-нибудь идеи, почему это происходит?
Я пробовал разные параметры для алгоритма umap и параметров hdbscan, но, к сожалению, проблема не устранена. И все же есть высказывания, которые здесь явно неверны.