Очень быстрое сходство документов - PullRequest
5 голосов
/ 13 мая 2010

Я пытаюсь определить сходство документов между одним документом и каждым из большого количества документов (n ~ = 1 миллион) как можно быстрее.Более конкретно, документы, которые я сравниваю, являются электронными письмами;они сгруппированы (т. е. есть папки или теги), и я хотел бы определить, какая группа наиболее подходит для нового электронного письма.Быстрая производительность имеет решающее значение.

Мое априорное предположение состоит в том, что подобие косинуса между векторами терминов подходит для этого приложения;пожалуйста, прокомментируйте, является ли это хорошей мерой для использования или нет!

Я уже учел следующие возможности для ускорения производительности:

  1. Предварительная нормализация всехвекторы терминов

  2. Рассчитать вектор терминов для каждой группы (n ~ = 10 000), а не для каждого электронного письма (n ~ = 1 000 000);это, вероятно, было бы приемлемо для моего заявления, но если вы можете придумать причину, чтобы не делать этого, дайте мне знать!

У меня есть несколько вопросов:

  1. Если в новом электронном письме есть новый термин, ранее не встречавшийся ни в одном из предыдущих писем, означает ли это, что мне нужно пересчитать все моих векторов терминов?Это кажется дорогим.

  2. Есть ли какой-нибудь умный способ рассматривать только векторы, которые могут быть близки к документу запроса?

  3. Есть ликакой-то способ быть более экономным относительно объема памяти, который я использую для всех этих векторов?

Спасибо!

1 Ответ

4 голосов
/ 13 мая 2010

Использование Байесовская фильтрация . Предоставленная ссылка относится к фильтрации спама, но вы можете довольно легко адаптировать алгоритм к нескольким категориям / тегам.

Есть много хороших ТАК вопрос о байесовской фильтрации тоже.

...