Ускорить сравнение текста (с разреженными матрицами)

У меня есть функция, которая принимает две строки и выдает значение сходства косинуса, которое показывает взаимосвязь между обоими текстами.

Если я хочу сравнить 75 текстов друг с другом, мне нужно сделать 5625 одиночных сравнений, чтобы все тексты сравнивались друг с другом.

Есть ли способ уменьшить это количество сравнений? Например, разреженные матрицы или k-средние?

Я не хочу говорить о своей функции или способах сравнения текстов. Как раз об уменьшении количества сравнений.


person caw    schedule 21.09.2009    source источник


Ответы (2)


Что Бен говорит, это правда, чтобы получить лучшую помощь, вы должны сказать нам, какова цель.

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

person Vinko Vrsalovic    schedule 21.09.2009
comment
Да, я хочу найти похожие строки. Более подробная информация содержится в моем комментарии к ответу Бена. Моя база данных (MySQL), похоже, имеет следующие пространственные типы: dev.mysql.com/doc/refman/5.0/en/mysql-spatial-datatypes.html Там ничего нет о дереве квадрантов!? - person caw; 21.09.2009
comment
Многие виды пространственных индексов могут вам пригодиться. Прочтите о тех, которые доступны из MySQL. - person Vinko Vrsalovic; 22.09.2009
comment
Я много читал об этих пространственных особенностях. Я добавил абзац об этом к моему вопросу. Можете ли вы оказать мне дополнительную помощь? - person caw; 22.09.2009
comment
Я предлагаю вам открыть другой вопрос о том, как использовать пространственные расширения mysql для вашего варианта использования, и оставить этот вопрос как есть на тот случай, если у кого-то есть лучший алгоритм для сравнения ваших строк. - person Vinko Vrsalovic; 22.09.2009
comment
Хорошая идея :) Вопрос о пространственных функциях MySQL теперь здесь: stackoverflow.com/questions/1460618/ Итак, в этом вопросе я ищу алгоритмы, которые могут помочь. - person caw; 22.09.2009

Если ваш алгоритм попарный, то вы, вероятно, не сможете уменьшить количество сравнений по определению.

Вам нужно будет использовать другой алгоритм или, по крайней мере, предварительно обработать ввод, если вы хотите уменьшить количество сравнений.

Без подробностей вашей функции трудно дать конкретную помощь.

person Ben S    schedule 21.09.2009
comment
Моя функция вычисляет косинусное сходство. Требуется два массива, содержащие токены/слова текстов. Я думаю, что вы можете вычислять косинусное сходство только попарно, поэтому вы не можете уменьшить количество сравнений для косинусного сходства, верно? - person caw; 21.09.2009
comment
Да, но если вас интересуют только определенные данные, вы можете избежать некоторых сравнений, как упомянул Винко для похожих строк. - person Ben S; 21.09.2009