7

Мне нужно вычислить сходство косинусов между строками в списке. Например, у меня есть список из более чем 10 миллионов строк, каждая строка должна определять сходство между собой и каждой другой строкой в ​​списке. Каков наилучший алгоритм, который я могу использовать для эффективного и быстрого выполнения такой задачи? Используется ли алгоритм разделения и завоевания?Как эффективно вычислить сходство косинусов между миллионами строк

EDIT

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

+1

По определению вашей проблемы у вас будет сложность вычислений O (n²) вычисления подобия косинуса. – Xion345

+0

@ Xion345 Да, это приемлемо для таких больших данных? Я не думаю, что это – Kennedy

+0

Для этого вам нужно использовать динамическое программирование. См. *** [this] (http://en.wikipedia.org/wiki/Approximate_string_matching) *** link –

ответ

0

Работа с транспонированной матрицей. Это то, что Мауд делает на Hadoop, чтобы выполнить эту задачу быстро (или просто использовать Mahout).

По сути, вычислительное сходство с косинусом наивный путь является плохим. Потому что вы в конечном итоге вычислили много чего-то. Вместо этого вам лучше работать в колонках, и убрать все 0s.

0

Вы можете попробовать SimString.

Это библиотека C++ (с привязками Python или Ruby) для приближенного соответствия строк.

Он утверждает, что ищет строки с высоким коэффициентом косинуса менее 1 миллисекунды для базы данных из 13 миллионов строк.

Описанный алгоритм here основан на обрезке перевернутых списков.