Алгоритм сходства (по теме) новостей

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

Так что, если статья была о Саддаме Хусейне, то алгоритм мог бы порекомендовать что-нибудь о деловых отношениях Дональда Рамсфелда в Ираке.

Если вы можете просто набросать ключевые слова, такие как k-ближайшие соседи, и немного объяснить, почему они работают (если можете), я сделаю остальную часть исследования и настрою алгоритм. Просто ищу место для начала, так как я знаю, что кто-то там уже пробовал нечто подобное раньше.

2 ответа

Решение

Первые мысли:

  • выбросить шумовые слова (и, вы, некоторые,...).
  • сосчитать все остальные слова и отсортировать по количеству.
  • для каждого слова в двух статьях добавьте оценку в зависимости от суммы (или продукта или некоторой другой формулы) количеств.
  • оценка представляет сходство.

Похоже, что в статье, в первую очередь о Дональде Рамсфелде, этих слов было бы совсем немного, поэтому я и взвесил их в этой статье.

Тем не менее, может быть одна статья, в которой упоминается Уоррен Баффет много раз с Биллом Гейтсом, а в другой - Билл Гейтс и Microsoft много раз. Корреляция там будет минимальной.

На основании вашего комментария:

Так что, если статья была о Саддаме Хусейне, то алгоритм мог бы порекомендовать что-нибудь о деловых отношениях Дональда Рамсфелда в Ираке.

это было бы не так, если бы в статье Саддама также не упоминался Ирак (или Дональд).

Вот где я бы начал, и я уже вижу потенциальные дыры в теории (статья о Билле Гейтсе будет близко соответствовать статье о Билле Клинтоне, если их имена будут часто упоминаться). Об этом вполне могут позаботиться все остальные слова (Microsoft для одного Билла, Хиллари для другого).

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

Еще одним возможным улучшением будет поддержание "жестких" ассоциаций (например, добавление слова "Афганистан" к статьям с Усамой бен Ладеном). Но опять же, это требует дополнительного обслуживания для, возможно, сомнительной ценности, поскольку в статьях об Усаме почти наверняка упоминается и Афганистан.

На данный момент я думаю о чем-то вроде этого.

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

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

Baaah Я думаю, что, набрав его, я решил свою проблему. Конечно, только на очень высоком уровне, я уверен, что когда я приступлю к этому, я найду проблемы... дьявол всегда в деталях.

Но комментарии и улучшения по-прежнему высоко ценятся.

Другие вопросы по тегам