Найти лучшие K косинус подобные векторы для данного вектора эффективно - PullRequest
0 голосов
/ 05 октября 2018

Проблема:

Предположим, у меня есть группа из около 1 000 000 коротких документов D (не более 50 слов каждый), и я хочу разрешить пользователямпредоставить документ из той же группы D и получить топ K аналогичных документов из D.

Мой подход:

Мой первыйПодход заключался в предварительной обработке группы D путем применения простого tf-idf, и после того, как у меня есть вектор для каждого документа, который является чрезвычайно редким, использовать простой алгоритм ближайших соседей, основанный на косинусном подобии.Затем, во время запроса, просто использовать мою статическую таблицу ближайших соседей, размер которой составляет 1 000 000 x K, без каких-либо дальнейших вычислений.

После применения tf-idf я получил векторы размером ~ 200 000, что означает, что теперь яиметь очень разреженную таблицу (которую можно эффективно хранить в памяти с помощью разреженных векторов) размером 1 000 000 x 200 000.Однако расчет модели ближайших соседей занял у меня не один день, а все еще не закончен.Я попытался уменьшить размерность векторов, применив HashingTF, который вместо этого использует хакерский трюк , чтобы я мог установить постоянное измерение (в моем случае я использовал 2 ^ 13 для хэширования без изменений),но все равно я получаю ту же плохую производительность.

Некоторая техническая информация:

Я использую Spark 2.0 для вычисления tf-idf и sklearn NearestNeighbours для собранных данных.

Есть ли более эффективный способ достижения этой цели?

Заранее спасибо.

Редактировать:

У меня была идея попробовать Алгоритм подобия аппроксимации на основе * LSH , подобный алгоритму, реализованному в Spark, как описано здесь , но не смог найти тот, который поддерживает метрику сходства 'косинус'.

1 Ответ

0 голосов
/ 08 октября 2018

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

Вы можете найти статью здесь.

...