Косинус-сходство на больших наборах данных

В настоящее время я изучаю процесс интеллектуального анализа данных, сравнения текста и нашел это: https://en.wikipedia.org/wiki/Cosine_similarity .

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

Чтобы сравнить все эти предметы, время было занято: 316.35898590088 сек, то есть, -> 5 минут, чтобы сравнить все 250 тыс. Документов!

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

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

Вопросов

  • Есть ли способ добиться лучшей производительности? Где я должен начать, с помощью алгоритма настройки (т. Е. Заранее подготовить векторы и т. Д.), Используя другие технологии и т. Д.?
  • Как и где я должен хранить результаты сравнения. Например, я хочу напечатать некоторые графики, где я могу увидеть все эти 250k-документов по счету сходства, чтобы я мог идентифицировать наиболее похожие и так далее.