Как организовать кластеризацию десятков миллионов текстов?

С новым годом, дамы и господа!

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

"Статья 1" -> {"Политика": 99%, "Общество": 85%}
"Статья 2" -> {"Спорт": 58%, "Общество": 13%}

И так далее. Здесь "Статья 1" - это заголовок статьи (у нее есть и текст, разумеется). Данные в фигурных скобках - это пара-тройка максимальных категорий. Т.е. необходимо вычислять, к какой категории вероятнее всего относится статья, и этот коэффициент "вероятности", или скорее "похожести", выражать в процентах.

Категорий будет несколько десятков. Статей - десятки миллионов.

Я знаком с machine learning самую малость, к сожалению. Логически понимаю, что нужна тестовая выборка для "обучения" кластеризатора. Тестовая выборка у нас есть - десятки тысяч статей, уже имеющих определенную категорию (новостной сайт). Т.е. весь программный комплекс должен вначале пробежаться по тестовой выборке, "обучиться" (выявить какие-то слова-маркеры), а затем отклассифицировать наши "сырые" данные.

Времени у меня на обучение, просмотр длинных видео, написание своего кода и т.п. - нет. К сожалению, т.к. тема интересная. Но факт остается фактом - очень прошу скидывать ссылки на уже готовые решения для данной задачи (кластеризаторы), чтобы на допиливание не пришлось тратить уйму времени. Наверняка что-то подобное уже написано и выложено на гитхаб или еще куда-то. Но я к сожалению не нагуглил ничего.

Очень надеюсь на помощь хабрасообщества, которое уже выручало меня не раз.
  • Вопрос задан
  • 3884 просмотра
Пригласить эксперта
Ответы на вопрос 6
@andyN Автор вопроса
P.S. Задача выглядит как классика для нейросетей, но 1) мои практические познания в этой области стремятся к нулю, 2) я опасаюсь, что нейросеть будет работать слишком медленно.
Ответ написан
Комментировать
Задача отклонения статьи от корпуса. Решается буквально одной формулой при наличии готовых корпусов по тематике (а они у Вас есть, как я понимаю) :

habrahabr.ru/post/204104
(вместо НКРЯ - тематическая выборка уже классифицированных статей,
вместо Хабра - конкретная изучаемая статья)

Могу предложить программный код, к сожалению на ретро-языке.
Ответ написан
Вам нужна классификация, а не кластеризация, это разные методы. Т. е. если будете гуглить, то ищите именно про автоматическую классификацию. В качестве готового решения можно попробовать взять что-нибудь типа Weka (www.cs.waikato.ac.nz/~ml/weka), но я не знаю, насколько хорошо оно работает с русскими текстами.
Ответ написан
begemot_sun
@begemot_sun
Программист в душе.
А попробуйте мой велосипед: https://github.com/loguntsov/bayes
Ответ написан
Комментировать
@iHun
Для похожих задач я использую реализованный в gensim алгоритм LDA. Автоматически создаётся определённое количество тем и вычисляется вероятность, с которой каждый документ относится к какой-либо теме
Ответ написан
Комментировать
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
andyN это ни похожесть, и ни кластеризация, а это - СЕГМЕНТАЦИЯ.
Делается так: берется слово и ставится по всем необходимым типам веса.
Например, "президент":
[политика]:0.5
[закон]:0.5
[общество]: 0.4
[досуг]:0.1
[дети]:0.1
и т.д. для каждого КОРНЯ слова. Также, делается словарь синонимов, который будет линковать слова-синонимы к известным весам в таблице. Повторы КОРНЕЙ - не учитываем при суммировании веса.
После этого текст преобразуем по словарю синонимов и далее подсчитываем веса по каждой категории.
Профит!
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы