私は2つのCSVファイルを持っています - 列車とテスト、それぞれ18000件のレビュー。列車ファイルを使用して、特徴抽出を行い、列車ファイル内の各レビューとテストファイル内の各レビューとの間の類似性メトリックを計算する必要があります。TfidfVectorizerからコサイン類似度を計算するにはどうすればよいですか?
列車の単語とテストセットに基づいてボキャブラリを生成しました。私はストップワードを削除しましたが、タイプミスとステムは削除しませんでした。
私が直面している問題は、TfIdfVectorizerの出力を使用して電車とテストデータのコサイン類似度を生成する方法がわかりません。
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()から取得した出力は、私は単純にXを印刷する場合、それが見えます
[[ 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.]]
です:
この
はvocabulary
に私の列車のデータをフィットするコードスニペットですこのように:
(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)
編集:
私は私のテストデータに対して同じ手順を繰り返しました。 私はタイプscipy.sparse.csr.csr_matrix
の2つの疎行列のXとYを持っていますが、それらは疎でありタイプが(doc, term) tf-idf
なので、直接乗算によってXとYの間のコサイン類似度を直接得ることはできません。
todense()
でXとYを変換すると、私にはMemoryErrorが返されます。つまり、非効率です。
次に何をすればよいですか?
18000 * 18000のペアワイズコサイン類似度を持つ行列を取得する必要がありますが、その方法はわかりません。
これは宿題のためのものであり、この段階ではSklearnのドキュメントが私を助けてくれません。
ヒントありがとうございます。私はほとんど終わったと思う - pairwise_distancesは処理が重く、私のシステムはそれを処理できない。 – boltthrower
pairwise_distances(X、Y)は私にMemoryErrorを与えます。 'File" /home/bt/amzreview/local/lib/python2.7/site-packages/scipy/sparse/base.py "、1009行目、_process_toarray_args return np.zeros(self.shape、dtype = self。 dtype、order = order) ' – boltthrower