2015-11-18 6 views
0

Как я только знаю, в этой задаче доступны simhash и minhash. Но все эти алгоритмы должны пересекать всю текстовую базу данных, которая будет довольно сильной. Есть ли какой-либо алгоритм оптимизации или другой алгоритм, который может выполнять задачу? Все, что я придумал, разрезает текстовую базу данных на несколько частей и получает попарное сходство параллельно. Моя текстовая база данных насчитывает около 1 миллиарда записей.Как обнаружить похожий текст на большие данные?

+0

Я использую mongodb для хранения текстов. Есть ли что-нибудь в mongodb, которое может помочь уменьшить нагрузку на всю базу данных, например, преподносить хэш-код текстов, которые не очень помогают после моего судебного разбирательства. –

+0

Вам понадобится хотя бы один раз пропустить базу данных, чтобы сделать что-нибудь полезное. –

+0

@Juan Lopes, Спасибо, я перенес программу, чтобы искры для распределенных вычислений, и она работает хорошо. –

ответ

1

Вы должны пройти всю базу данных один раз (1 миллиард записей).

Преимущества minhash и simhash в том, что вам не нужно индивидуально сравнивать каждую возможную пару, чтобы увидеть, похожи ли они (примерно 500 квадриллионов возможных пар).

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

Оба simhash и minhash могут извлечь выгоду из распределенных вычислений. Генерирование хэшей может быть распределено так, как вам нравится. Хранение хешей можно разделить с помощью карты/уменьшения, если вам нравится, хотя для simhash вам, вероятно, не понадобится это, так как он достаточно компактен, чтобы соответствовать основной памяти стандартной машины.

Simhash может находить пары подобия, которые очень близки, и часто требуется хорошая настройка, чтобы работать очень хорошо. Если вы хотите найти более слабые сходства, используйте один из вариантов minhash, которые являются более прощающими. Я рекомендую проверить суперминхаш в сочетании с LSH. Superminhash - это быстро генерирующие хеши, но, возможно, что более важно, он обеспечивает лучшую точность, поэтому нужно хранить меньше хешей. LSH группирует хэши в группы, чтобы вы не сравнивали отдельные хэши; вы сравниваете всю группу за раз. Обе эти методики означают, что для поиска отдельных общих хэшей (или полос в последнем случае) требуется меньшее количество запросов, а LSH, в частности, означает, что для каждого отдельного запроса нужно будет обрабатывать меньшее количество результатов. Это должно дать вам значительное ускорение.