Как рассчитать матрицу сходства косинусов на большой матрице? - PullRequest
0 голосов
/ 28 марта 2020

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

Мои необработанные данные, df, выглядят так:

bookID               features
  0       stephenking horror hotel isolation ...
  1       jkrowling harrypotter fantasy magic wizard ...
  2       leechild jackreacher crime detective novel police...
  .
  .
  .

У меня есть 40,000 строк в моей таблице.

Вот мой код:

from sklearn.feature_extraction.text import CountVectorizer
from sklearn.metrics.pairwise import cosine_similarity


vec = CountVectorizer()
count_mat = vec.fit_transform(df['features'])
cosine_sim = cosine_similarity(count_mat)

При запуске этого кода я получаю следующую ошибку.

MemoryError: Unable to allocate 1.88 GiB for an array with shape (504248935,) and data type int32

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

Я ищу способ вычисления этой матрицы, и я думаю, что смогу оптимизировать, используя тот факт, что матрица разрежена и косинусное сходство симметрично c, т.е. cosine_similarity(a,b) = cosine_similarity(b,a), но я полагаю, что все это обрабатывается в конце sklearn.

Другая мысль заключалась в том, что я мог бы создать квадратную матрицу приблизительно 40,000 строки и столбцы затем вычисляют косинусные сходства в пакетах и ​​заполняют матрицу.

Это не кажется хорошим решением, и я все равно не знаю, как его написать.

Поэтому я ищу несколько советов о том, как лучше всего добиться этого.

Спасибо.

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