4

NaiveBayesclassifier選択した特定のテーマに従って、テキスト分析にTextBlob を使用しています。

データは膨大です (約 3000 エントリ)。

結果を得ることができましたが、その関数を再度呼び出して処理が完了するまで何時間も待たずに、将来の使用のために保存することはできません。

以下の方法で漬けてみました

ab = NaiveBayesClassifier(data)

import pickle

object = ab
file = open('f.obj','w') #tried to use 'a' in place of 'w' ie. append
pickle.dump(object,file)

次のようなエラーが発生しました。

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python27\lib\pickle.py", line 1370, in dump
    Pickler(file, protocol).dump(obj)
  File "C:\Python27\lib\pickle.py", line 224, in dump
    self.save(obj)
  File "C:\Python27\lib\pickle.py", line 331, in save
    self.save_reduce(obj=obj, *rv)
  File "C:\Python27\lib\pickle.py", line 419, in save_reduce
    save(state)
  File "C:\Python27\lib\pickle.py", line 286, in save
    f(self, obj) # Call unbound method with explicit self
  File "C:\Python27\lib\pickle.py", line 649, in save_dict
    self._batch_setitems(obj.iteritems())
  File "C:\Python27\lib\pickle.py", line 663, in _batch_setitems
    save(v)
  File "C:\Python27\lib\pickle.py", line 286, in save
    f(self, obj) # Call unbound method with explicit self
  File "C:\Python27\lib\pickle.py", line 600, in save_list
    self._batch_appends(iter(obj))
  File "C:\Python27\lib\pickle.py", line 615, in _batch_appends
    save(x)
  File "C:\Python27\lib\pickle.py", line 286, in save
    f(self, obj) # Call unbound method with explicit self
  File "C:\Python27\lib\pickle.py", line 562, in save_tuple
    save(element)
  File "C:\Python27\lib\pickle.py", line 286, in save
    f(self, obj) # Call unbound method with explicit self
  File "C:\Python27\lib\pickle.py", line 649, in save_dict
    self._batch_setitems(obj.iteritems())
  File "C:\Python27\lib\pickle.py", line 662, in _batch_setitems
    save(k)
  File "C:\Python27\lib\pickle.py", line 286, in save
    f(self, obj) # Call unbound method with explicit self
  File "C:\Python27\lib\pickle.py", line 501, in save_unicode
    self.memoize(obj)
  File "C:\Python27\lib\pickle.py", line 247, in memoize
    self.memo[id(obj)] = memo_len, obj
MemoryError

sPickle も試してみましたが、次のようなエラーも発生しました。

#saving object with function sPickle.s_dump
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python27\lib\site-packages\sPickle.py", line 22, in s_dump
    for elt in iterable_to_pickle:
TypeError: 'NaiveBayesClassifier' object is not iterable

#saving object with function sPickle.s_dump_elt
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python27\lib\site-packages\sPickle.py", line 28, in s_dump_elt
    pickled_elt_str = dumps(elt_to_pickle)
MemoryError: out of memory

オブジェクトを保存するために私がしなければならないことを誰か教えてもらえますか?

それとも、将来の使用のために分類器の結果を保存する方法はありますか?

4

3 に答える 3

5

私は自分で問題を解決しました。

まず、Python の 64 ビット バージョンを使用します (2.6 から 3.4 までのすべてのバージョン)。

64 ビット バージョンはすべてのメモリの問題を解決します

cPickle を使用する

import cPickle as pickle

次に、urファイルを次のように開きます

file = open('file_name.pickle','wb') #same as what Robert said in the above post

オブジェクトをファイルに書き込む

pickle.dump(object,file)

ur オブジェクトはファイルにダンプされます。ただし、オブジェクトが使用しているメモリを確認する必要があります。pickle 化もメモリ スペースを消費するため、オブジェクトを pickle 化するために少なくとも 25% のメモリを使用する必要があります。

私の場合、ラップトップには 8 GB の RAM が搭載されていたため、メモリはオブジェクトの 1 つだけに十分でした。

(私の分類子は 3000 個の文字列インスタンスで非常に重く、各文字列には約 15 ~ 30 語の文が含まれていました。感情/テーマの数は 22 でした。)

したがって、ラップトップがデッドロックした場合 (または、一般的に言えば、動作を停止した場合)、電源をオフにして最初からやり直し、より少ない番号を使用してみる必要がある場合があります。インスタンスの数または少ない数。感情/テーマの。

ここで、cPickle は非常に役に立ちます。bcz は他のどの pickle-ing モジュールよりもはるかに高速であり、tht を使用することをお勧めします。

于 2014-07-02T07:26:25.913 に答える