やりたいこと
現在、18万文程度のデータを使って、ニューラルネットワークによる機械学習を行っています。
素性には、Bag-of-Wordsを使っています。
また、文章ごとに対象の単語が一つ定めてあります。
データの分かち書きはしてあり、scikit-learnのCountvectorizerを使ってBoWを構築しています。
toarray()関数を使うことでnumpy配列を得ることができると思います。
自分の場合データ数が多すぎるため(5万次元×18万文)
Memory Errorを引き起こしてしまいます。
なので以下のソースコードのように、対象単語のインデックスを 変数tmpに入れ、その部分だけを配列に変換しています。
python
1vectorizer = CountVectorizer() 2vectorizer.fit(lines) 3bag = vectorizer.transform(lines) 4features = vectorizer.get_feature_names() 5 6vec = [None] * len(tmp) 7for i,num in enumerate(tmp): 8 vec[i] = bag[num].torray()
これで得た 変数vec をChainerに入れて学習を行っています。
今回やりたいことは、上記ソースコードにおいて、bagの部分を直接Chainerに入れることができるのか知りたいということです。
つまりいちいちtoarray()する必要なく文章ごとの素性を取り出せるかどうかです。
試したこと
なにも考えずに試しに bag の部分をChainerに入れたところ下記エラーが発生しました。
python
1--------------------------------------------------------------------------- 2IndexError Traceback (most recent call last) 3<ipython-input-5-9302b54f7efd> in <module>() 4 73 #trainer.extend(extensions.ProgressBar()) 5 74 6---> 75 trainer.run() 7 76 net.to_cpu() 8 77 chainer.serializers.save_npz("sono-model.npz", net) 9 1010 frames 11/usr/local/lib/python3.6/dist-packages/scipy/sparse/_index.py in _asindices(self, idx, length) 12 162 13 163 if x.ndim not in (1, 2): 14--> 164 raise IndexError('Index dimension must be <= 2') 15 165 16 166 if x.size == 0: 17 18IndexError: Index dimension must be <= 2
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。