У меня под рукой следующая проблема: у меня есть очень длинный список слов, возможно, имен, фамилий и т. Д. Мне нужно сгруппировать этот список слов, чтобы похожие слова, например слова с одинаковым расстоянием редактирования (Левенштейна), появлялись в тот же кластер. Например, «алгоритм» и «алогритм» должны иметь высокие шансы появиться в одном кластере.
Мне хорошо известны классические неконтролируемые методы кластеризации, такие как кластеризация k-средних, EM-кластеризация в литературе по распознаванию образов. Проблема в том, что эти методы работают с точками, которые находятся в векторном пространстве. У меня есть слова струн в моей руке здесь. Похоже, что вопрос о том, как представлять строки в числовом векторном пространстве и вычислять «средние значения» кластеров струн, не получил достаточного ответа, согласно моим исследованиям до сих пор. Наивным подходом к решению этой проблемы было бы объединение кластеризации k-средних с расстоянием Левенштейна, но все еще остается вопрос «Как изобразить» средство «из строк?». Существует вес, называемый весом TF-IDF, но, похоже, он в основном относится к области кластеризации «текстовых документов», а не к кластеризации отдельных слов. http://pike.psu.edu/cleandb06/papers/CameraReady_120.pdf
Мои поиски в этой области все еще продолжаются, но я тоже хотел получить идеи. Что бы вы порекомендовали в этом случае, кто-нибудь знает какие-либо методы для такого рода проблемы?
источник
It seems that there are some special string clustering algorithms
, Если вы пришли именно из области интеллектуального анализа текста, а не из статистики / анализа данных, это утверждение оправдано. Однако, если вы изучите кластеризацию как таковую, вы обнаружите, что не существует «специальных» алгоритмов для строковых данных. «Специальный» - это то, как вы предварительно обрабатываете такие данные, прежде чем вводить их в кластерный анализ.Ответы:
Seconding @ mican рекомендация для распространения сродства .
Из статьи: Л. Фрей, Брендан Дж. И Дельберт Дуек. «Кластеризация путем передачи сообщений между точками данных». наука 315.5814 (2007): 972-976. ,
Его супер легко использовать через множество пакетов. Он работает на всем, что вы можете определить попарно сходство. Что вы можете получить, умножив расстояние Левенштейна на -1.
Я собрал быстрый пример, используя первый абзац вашего вопроса в качестве входных данных. В Python 3:
Вывод был (примеры выделены курсивом слева от кластера, примером которого они являются):
Запустив его в списке из 50 случайных имен :
Выглядит довольно здорово для меня (это было весело).
источник
Symmetric
)Используйте алгоритмы кластеризации графа, такие как кластеризация Лувена, кластеризация поиска по ограниченному району (RNSC), кластеризация по методу сходства (APC) или алгоритм кластеризации Маркова (MCL).
источник
Вы можете попробовать модель векторного пространства с n-граммами слов в качестве элементов векторного пространства. Я думаю, что вам придется использовать меру, подобную косинусному подобию в этом случае, а не редактировать расстояние.
источник