私はSparkit-LearnのSparkCountVectorizerとSparkTfidfVectorizerを使用して、たくさんのドキュメントをTFIDFマトリックスに変換しています。Sparkit-Learnで奇妙な転置動作
私はTFIDF行列を作成するために取得し、それが正しい寸法(496861の文書189398個の異なるトークンによる)を有する単一のベクターをスライス
>>> tfidf
<class 'splearn.rdd.SparseRDD'> from PythonRDD[20] at RDD at PythonRDD.scala:48
>>> tfidf.shape
(496861, 189398)
を返す正しい出力(189398個の別個のトークンによって1つのドキュメント):
>>> tfidf.flatMap(lambda x: x.T).take(1)
:
>>> tfidf.flatMap(lambda x: x).take(1)
[<1x189398 sparse matrix of type '<class 'numpy.float64'>'
with 49 stored elements in Compressed Sparse Row format>]
は今、私は、各文書の転置(1によって寸法189398の、すなわち、ベクトル)を取得したいです
しかし、これは私が代わりに得るものです:だから
[<1x7764 sparse matrix of type '<class 'numpy.float64'>'
with 77 stored elements in Compressed Sparse Row format>]
、代わりに189389x1ベクトルの私は1x7764ベクトルを取得します。私は7764を理解しています:私は.repartition()
のデータを64個読んだとき、496861(文書の数)を64で割ったものは7763.4です。私が理解できないのは、Sparkit-Learnが1つのケース(lambda x: x
)と別のケースのパーティション(lambda x: x.T
)でフラットな行で反復する理由です。私は全く混乱している。
私の最終目標は、TFIDF行列をフィルタリングして、特定の列(つまり特定の単語を含むドキュメントのみ)に0以外の値を持つベクトルのみを取得し、非転置1x189389ベクトルのインデックス付けが機能しないようにすることです(私がの後に入れた[0]
の数は、私はいつも同じ1x189389ベクトルを返すことに関係しません)。