Привет, я пытаюсь вычислить матрицу сходства косинусов для системы рекомендаций книг.
Мои необработанные данные, 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
строки и столбцы затем вычисляют косинусные сходства в пакетах и заполняют матрицу.
Это не кажется хорошим решением, и я все равно не знаю, как его написать.
Поэтому я ищу несколько советов о том, как лучше всего добиться этого.
Спасибо.