У меня есть два CSV-файла - обучающий и тестовый, по 18000 отзывов каждый. Мне нужно использовать файл поезда для извлечения функций и расчета метрики сходства между каждым обзором в файле поезда и каждым обзором в тестовом файле.
Я создал словарь на основе слов из набора поезда и теста - я удалил стоп-слова, но не удалил опечатки и корень.
Проблема, с которой я столкнулся, заключается в том, что я не знаю, как использовать вывод TfIdfVectorizer для генерации косинусного сходства между данными поезда и тестовыми данными.
Это фрагмент кода, который соответствует данным моего поезда vocabulary
:
vect = TfidfVectorizer(sublinear_tf=True, min_df=0.5, vocabulary=vocabulary)
X = vect.fit_transform(train_list)
vocab = vect.get_feature_names()
# train_matrix = X.todense()
train_idf = vect.idf_
print vocab
print X.todense()
Результат, который я получаю от X.todense ():
[[ 0. 0. 0. ..., 0. 0. 0.]
[ 0. 0. 0. ..., 0. 0. 0.]
[ 0. 0. 0. ..., 0. 0. 0.]
...,
[ 0. 0. 0. ..., 0. 0. 0.]
[ 0. 0. 0. ..., 0. 0. 0.]
[ 0. 0. 0. ..., 0. 0. 0.]]
Если я просто напечатаю X, это будет выглядеть так:
(0, 28137) 0.114440020953
(0, 27547) 0.238913278498
(0, 26519) 0.14777362826
(0, 26297) 0.247716207254
(0, 26118) 0.178776605168
(0, 26032) 0.15139993147
(0, 25771) 0.10334152493
(0, 25559) 0.157584788446
(0, 25542) 0.0909693864147
(0, 25538) 0.179738937276
(0, 21762) 0.112899547719
(0, 21471) 0.159940534946
(0, 21001) 0.0931693893501
(0, 13960) 0.134069984961
(0, 12535) 0.198190713402
(0, 11918) 0.142570540903
: :
(18505, 18173) 0.237810781785
(18505, 17418) 0.233931974117
(18505, 17412) 0.129587180209
(18505, 17017) 0.130917070234
(18505, 17014) 0.137794139419
(18505, 15943) 0.130040669343
(18505, 15837) 0.0790013472346
(18505, 11865) 0.158061557865
(18505, 10896) 0.0708161593204
(18505, 10698) 0.0846731116968
(18505, 10516) 0.116681527108
(18505, 8668) 0.122364898181
(18505, 7956) 0.174450779875
(18505, 1111) 0.191477939381
(18505, 73) 0.257945257626
Я не знаю, как прочитать вывод X.todense () или распечатать X, и я не уверен, как найти косинусное расстояние между тестовым набором и набором поездов (возможно, используя попарное сходство? - http://scikit-learn.org/stable/modules/generated/sklearn.metrics.pairwise.pairwise_distances.html?)
Редактировать:
Я повторил те же шаги для своих тестовых данных. Теперь у меня есть две разреженные матрицы X и Y типа scipy.sparse.csr.csr_matrix
, но поскольку они обе разреженные и имеют тип (doc, term) tf-idf
, я не могу напрямую получить косинусное сходство между X и Y прямым умножением.
Преобразование X и Y с помощью todense()
дает мне ошибку MemoryError - что означает, что это неэффективно.
Что я должен делать дальше?
Мне нужно получить какую-то матрицу с попарным косинусным сходством размеров 18000 * 18000 или разреженную матрицу, но я не знаю, как это сделать.
Это для домашнего задания, и на данном этапе мне никакое чтение документации по sklearn не помогает.