Кластеризация новостных статей

Мой сценарий довольно прост: у меня есть куча статей новостей (~ 1k на данный момент), для которых я знаю, что некоторые охватывают одну и ту же историю/тему. Теперь я хотел бы сгруппировать эти статьи на основе общей истории/темы, т.е. Основываясь на их сходстве.

То, что я делал до сих пор, - это применять основные методы НЛП, включая удаление и прекращение замедленного воспроизведения. Я также вычислил вектор tf-idf для каждой статьи, и с этим можно также вычислить, например, косинус-подобие, основанное на этих tf-idf-векторах. Но теперь с группировкой статей я немного борется. Я вижу два основных способа - возможно, связанный - сделать это:

1) Machine Learning/Clustering: я уже немного играл с существующими библиотеками кластеров с большим или меньшим успехом; см. здесь. С одной стороны, алгоритмы, такие как k-mean, требуют количества кластеров в качестве входных данных, чего я не знаю. Другие алгоритмы требуют параметров, которые также не интуитивно понятны (для меня это).

2) Алгоритмы графа: я могу представить свои данные в виде графика со статьями, являющимися узлами и взвешенными адгеями, представляющими попарно (косинус) сходство между статьями. При этом, например, я могу сначала удалить все ребра, которые опускаются ниже определенного порога, а затем могут применять алгоритмы графа для поиска сильносвязанных подграфов.

Короче говоря, я не уверен, куда лучше идти отсюда - я все еще довольно новый в этой области. Интересно, есть ли для этого какие-то передовые методы или какие-то рекомендации, которые методы/алгоритмы могут (не) применяться в определенных сценариях.

(EDIT: забыл ссылаться на связанный мой вопрос)

Ответ 1

Попробуйте класс алгоритмов иерархической агломеративной кластеризации HAC с единственной и полной связью.

Эти алгоритмы не нуждаются в количестве кластеров в качестве входных данных.

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

Ответ 2

Вы также можете попробовать вариацию навеса на k-средствах, чтобы создать относительно быструю оценку количества кластеров (k).

http://en.wikipedia.org/wiki/Canopy_clustering_algorithm

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

Ответ 3

Поскольку вы можете смоделировать свой набор данных в виде графика, вы можете применить стохастическую кластеризацию на основе марковских моделей. Вот ссылка на ресурсы по алгоритму MCL:

Официальное описание тезисов и база кода

Плагин Gephi для MCL (для эксперимента и оценки метода)