Конвергенция кластеров GSDMM (кластеризация коротких текстов)

Я использую эту реализацию GSDMM python для кластеризации набора данных текстовых сообщений. GSDMM быстро сходится (около 5 итераций) в соответствии с исходным документом. У меня тоже есть сходимость к определенному количеству кластеров, но на каждой итерации передается еще очень много сообщений, поэтому очень много сообщений все равно меняют свой кластер.

Мой вывод выглядит так:

In stage 0: transferred 9511 clusters with 150 clusters populated 
In stage 1: transferred 4974 clusters with 138 clusters populated 
In stage 2: transferred 2533 clusters with 90 clusters populated
….
In stage 34: transferred 1403 clusters with 47 clusters populated 
In stage 35: transferred 1410 clusters with 47 clusters populated 
In stage 36: transferred 1430 clusters with 48 clusters populated 
In stage 37: transferred 1463 clusters with 48 clusters populated 
In stage 38: transferred 1359 clusters with 48 clusters populated

В исходной статье на рис. 3 показана та же закономерность, но количество кластеров практически постоянно.

график с бумаги

Чего я не могу понять, так это того, сколько сообщений их набора данных все еще передается. Насколько я понимаю, это число должно быть как можно меньше, в лучшем случае равно нулю (чтобы каждое сообщение «нашло» правильный кластер). Таким образом, количество кластеров может сходиться, но это мало что говорит о качестве алгоритма/кластеров. Правильно ли я понимаю?

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


person simon    schedule 04.06.2020    source источник
comment
Следуя предоставленному вами изображению, в документе говорится, что у них 500 тем и сходятся к 100-150 темам. Так что это не ноль, а вроде 20% от начального значения.   -  person Ilya Palachev    schedule 10.06.2020
comment
Да, кластеры сходятся. У меня например они тоже сходятся к 47-48 Кластеру. Но я спрашиваю о большом количестве переданных сообщений (в алгоритме называемых кластерами). Вы понимаете, что я имею в виду под этим дальнейшим объяснением?   -  person simon    schedule 10.06.2020
comment
Думаю, лучше спросить у автора. @ryan-walker, ты можешь нам помочь?   -  person Ilya Palachev    schedule 11.06.2020
comment
У меня есть другая картина. Число N в заполненном кластере N для меня не меняется и равно K (гиперпараметр числа тем). Меняется только число M в переданных M кластерах (начиная с количества документов (26000 в моем случае) и заканчивая значением 9000-10000). У вас есть идеи, почему N меняется в вашем случае? А какие у вас гиперпараметры (К, альфа, бета)? И сходится ли N в вашем случае?   -  person Ilya Palachev    schedule 11.06.2020
comment
У меня есть около 10 000 сообщений, и я начинаю с K=600, переходя к N=47-48 кластеру. Я думаю, это нормально, что он не сходится к определенному числу, просто могут быть некоторые сообщения, которые хорошо вписываются в несколько кластеров. Вы также можете увидеть это поведение на рисунке TweetSet, он немного перемещается. Мои гиперпараметры после некоторого поиска по сетке с длительным временем выполнения: альфа = 0.01, beta=0.05. Для K я думаю, важно просто, чтобы он был достаточно большим.   -  person simon    schedule 11.06.2020
comment
Исправление: alpha=0.05, beta=0.01   -  person simon    schedule 11.06.2020
comment
Извините, что не по теме, просто любопытно, по каким критериям при поиске по сетке? Вы рассчитывали согласованность темы как показатель качества или просматривали каждый вариант вручную?   -  person Ilya Palachev    schedule 11.06.2020
comment
Реализация Python GSDMM, которую я использую, имеет встроенную функцию mgp.score, где вы можете увидеть, насколько алгоритм уверен в назначении входного текста кластеру. Я использую среднее значение того, насколько алгоритм уверен во всех входных документах, чтобы сравнить различные гиперпараметры. Это метрика, которую я придумал сам, потому что у меня были такие же проблемы, как и у вас :) Я также обсуждаю подобные вещи в этот пост   -  person simon    schedule 13.06.2020
comment
Если у вас есть дополнительные сведения о том, как вы используете алгоритм или другую метрику, мне было бы очень интересно!   -  person simon    schedule 13.06.2020
comment
На самом деле у меня нет никаких конкретных инсайтов, я просто использую алгоритм из коробки.   -  person Ilya Palachev    schedule 17.06.2020
comment
Итак, какую метрику вы используете для оценки своих кластеров?   -  person simon    schedule 21.06.2020
comment
В настоящее время я не выполнил точную настройку гиперпараметров, и единственный способ, которым я пользуюсь для оценки кластеров, — это просматривать их вручную. Но я думаю, что было бы целесообразно реализовать некоторую оценку согласованности для этой модели. Для более популярных моделей (например, LDA) существует общепринятый метод оценки модели с использованием некоторых показателей согласованности. Вам интересно это направление?   -  person Ilya Palachev    schedule 22.06.2020
comment
Меня интересуют показатели когерентности для этой модели и подобных моделей, таких как LDA. Я чувствую, что часто люди используют свои наземные данные для оценки своей кластеризации, но, конечно, если вы делаете кластеризацию, у вас может не быть этого. Для оценок когерентности без наземных данных я использовал log-likelihood, u-mass и topic coherence для LDA, но не был очень доволен результатами. Что ты используешь?   -  person simon    schedule 22.06.2020


Ответы (1)


После более глубокого погружения в функциональность алгоритма GSDMM я могу поделиться новой информацией.

Вот некоторая справочная информация об алгоритме, конечно, это не полное описание того, как работает алгоритм:

• GSDMM — это алгоритм мягкой кластеризации.

• В основе распределения входных данных (например, сообщений) по кластерам лежат распределения (полиномиальные распределения с распределениями Дирихле в качестве априорных)

• Метрика «Оценка», показывающая вероятность того, что ввод принадлежит кластеру, основана на полиномиальном распределении и по всем кластерам в сумме составляет 1.

Поэтому, пока у вас нет очень четких и легко отделимых кластеров, будут входы, которые «принадлежат» к нескольким кластерам со значительной вероятностью, например. Сообщение 1 имеет значение оценки 0,5 для Кластера 1, значение оценки 0,4 для Кластера 2 и 0,1 для всех остальных объединенных кластеров. Если есть входы с такими значениями баллов, из-за назначения в зависимости от полиномиального распределения они иногда будут переходить из одного кластера в другой.

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

Другим вариантом было бы пропустить входные данные, которые сильно скачут или не имеют кластера с более высоким значением, потому что эти входные данные не подходят для кластеров (возможно, некоторые неверные данные, конечно, в зависимости от случая)

person simon    schedule 21.06.2020
comment
Собираетесь ли вы пропустить входные данные, которые сильно прыгают? Результаты были бы весьма интересными. Так что, если вы собираетесь реализовать эту идею, было бы здорово, если бы вы поделились реализацией, поскольку упоминаемый вами репозиторий GSDMM, похоже, не поддерживается автором. - person Ilya Palachev; 22.06.2020
comment
Жду результатов, буду держать вас в курсе :) - person simon; 22.06.2020