ошибка значения подобия косинуса python scikit-learn: не удалось преобразовать целочисленный скаляр

Я пытаюсь создать матрицу сходства косинусов, используя текстовые описания приложений. Приведенный ниже сценарий сначала считывает файл данных csv (я могу предоставить файл данных, если это необходимо), который содержит два столбца, один с двумя категориями приложений, а другой с токенизированными описаниями для ряда приложений в каждой из этих двух категорий. Затем сценарий создает матрицу tfidf и пытается создать матрицу косинусного сходства.

Вчера я обновил 64-разрядную версию Anaconda для Windows, чтобы убедиться, что у меня установлены последние версии Python, numpy, scipy и scikit-learn.

import numpy as np
import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
import os

print ('reading file into pandas')
data = pd.read_csv(os.path.join('inputfile.csv'))
cats = np.unique(data['category'])

for i in cats:
    print ()
    print ('prepping', i)
    d2 = data[data.category == i]
    descStem = d2.descStem.tolist()

    print ('vectorizing', i)
    tfidf_vectorizer = TfidfVectorizer(ngram_range=(1,1), min_df=2, stop_words='english')
    tfidf_matrix = tfidf_vectorizer.fit_transform(descStem)
    print (tfidf_matrix.shape)

    print ('calculating cosine sim', i)
    cosOrig = cosine_similarity(tfidf_matrix, tfidf_matrix)

Скрипт отлично работает для небольшой категории комиксов с tdidf_matrix.shape = (3119, 8217). Однако я получаю приведенное ниже сообщение об ошибке для большей категории образования с tfidf_matrix.shape = (90327, 62863). Эта матрица больше 2^32.

Traceback (most recent call last):

File "<ipython-input-1-4b2586ddeca4>", line 1, in <module>

runfile('Z:/rangus/gplay/marcello/data/similarity/error/cosSimByCatScrapeError.py', wdir='Z:/rangus/gplay/marcello/data/similarity/error')

File "F:\u0137777\Continuum\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 866, in runfile
execfile(filename, namespace)

File "F:\u0137777\Continuum\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 102, in execfile
exec(compile(f.read(), filename, 'exec'), namespace)

File "Z:/rangus/gplay/marcello/data/similarity/error/cosSimByCatScrapeError.py", line 23, in <module>
cosOrig = cosine_similarity(tfidf_matrix, tfidf_matrix)

File "F:\u0137777\Continuum\Anaconda3\lib\site-packages\sklearn\metrics\pairwise.py", line 918, in cosine_similarity
K = safe_sparse_dot(X_normalized, Y_normalized.T, dense_output=dense_output)

File "F:\u0137777\Continuum\Anaconda3\lib\site-packages\sklearn\utils\extmath.py", line 186, in safe_sparse_dot
ret = ret.toarray()

File "F:\u0137777\Continuum\Anaconda3\lib\site-packages\scipy\sparse\compressed.py", line 920, in toarray
return self.tocoo(copy=False).toarray(order=order, out=out)

File "F:\u0137777\Continuum\Anaconda3\lib\site-packages\scipy\sparse\coo.py", line 258, in toarray
B.ravel('A'), fortran)

ValueError: could not convert integer scalar

Я могу преодолеть эту ошибку, запустив приведенный ниже код, но использование плотной матрицы требует большого объема памяти, и мне нужно запустить этот скрипт для более чем 40 категорий.

print ('vectorizing', i)
tfidf_vectorizer = TfidfVectorizer(ngram_range=(1,1), min_df=2, stop_words='english')
tfidf_matrix = tfidf_vectorizer.fit_transform(descStem)
tfidf_matrixD = tfidf_matrix.toarray()

print ('calculating cosine sim', i)
cosOrig = cosine_similarity(tfidf_matrixD, tfidf_matrixD)

Это ближайшая похожая проблема, которую я смог найти на StackOverflow, но я не мог понять, как это поможет моей ситуации...


person rangus    schedule 28.03.2017    source источник
comment
Здесь такая же проблема   -  person dter    schedule 03.09.2017
comment
вы пытаетесь получить попарное сходство между всеми образцами в tfidf_matrix? если да, то попробуй это cosine_similarity(tfidf_matrix)   -  person Kalsi    schedule 07.09.2018