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

Существует ли общий онлайн-алгоритм для динамической классификации новостей? У меня есть огромный набор данных новостей, классифицированных по темам. Я рассматриваю каждую из этих тем как кластер. Теперь мне нужно классифицировать экстренные новости. Возможно, мне нужно будет создавать новые темы или новые кластеры динамически.

Алгоритм, который я использую, следующий:

1) Я просматриваю группу лент с новостных сайтов и узнаю новостные ссылки.

2) Для каждой новой ссылки я извлекаю контент с помощью dragnet, а затем токенизирую его.

3) Нахожу векторное представление всех старых новостей и последней с помощью TfidfVectorizer от sklearn.

4) Я нахожу ближайшего соседа в своем наборе данных, вычисляя евклидово расстояние от последнего векторного представления новостей и всех векторных представлений старых новостей.

5) Если это расстояние меньше порога, я помещаю его в кластер, которому принадлежит сосед. В противном случае я создаю новый кластер с последними новостями.

Каждый раз, когда приходят новости, я подгоняю все данные с помощью TfidfVectorizer, потому что можно создавать новые измерения. Я не могу дождаться повторной подгонки один раз в день, потому что мне нужно обнаруживать критические события, которые могут быть связаны с неизвестными темами. Есть ли общий подход, более эффективный, чем тот, который я использую?


person Federico Caccia    schedule 03.04.2018    source источник
comment
Он не работает надежно даже в автономном режиме, а вы уже хотите онлайн-алгоритм?   -  person Has QUIT--Anony-Mousse    schedule 06.04.2018
comment
да, алгоритм, который я использую, работает в автономном режиме. Векторизация tfidf с кластеризацией knn является распространенным подходом, и хорошо известно, что он отлично работает. Я не понимаю, почему вы отрицательно оцениваете мой вопрос, я изучаю другую тему, онлайн-кластеризацию, и мне нужны некоторые идеи.   -  person Federico Caccia    schedule 06.04.2018
comment
Нет кластеризации knn. Только классификация kNN.   -  person Has QUIT--Anony-Mousse    schedule 06.04.2018
comment
хорошо, спасибо за ваши комментарии!   -  person Federico Caccia    schedule 06.04.2018
comment
Я проголосовал против, потому что вопрос не был самодостаточным и, следовательно, вероятно, бесполезен для будущих посетителей. Вы улучшили вопрос сейчас, поэтому я не проголосовал. Тем не менее, кластеризация, которую вы делаете, по-прежнему невоспроизводима. Второй документ будет иметь первый в качестве ближайшего соседа, и все будет одним и тем же кластером (в любом случае, какой бы кластер здесь ни был)   -  person Has QUIT--Anony-Mousse    schedule 06.04.2018
comment
хорошо, я объясню это лучше   -  person Federico Caccia    schedule 06.04.2018


Ответы (1)


Если вы построите векторизацию самостоятельно, добавление новых данных будет намного проще.

  1. Вы можете тривиально добавлять новые слова в качестве новых столбцов, которые просто равны 0 для всех более ранних документов.
  2. Не применяйте веса IDF, а используйте их только как динамические веса.

Существуют хорошо известные и очень быстрые реализации этого.

Например, Apache Lucene. Он может добавлять новые документы онлайн и использует вариант tfidf для поиска.

person Has QUIT--Anony-Mousse    schedule 06.04.2018
comment
Хорошо, этот подход может быть очень полезным! - person Federico Caccia; 06.04.2018