[Python] NLTK memory error.

Massimiliano Modena xam8re a gmail.com
Lun 31 Lug 2017 12:20:09 CEST



Il 31/07/2017 12:08, Valerio Maggio ha scritto:
>
>
> 2017-07-31 11:07 GMT+02:00 Massimiliano Modena <xam8re a gmail.com 
> <mailto:xam8re a gmail.com>>:
>
>
>
>     Il 31/07/2017 10:58, Valerio Maggio ha scritto:
>>     Oppure: se capisco bene quello che persisti è l'oggetto
>>     "classificatore" - aka: oggetto Python con i parametri risultanti
>>     dal training.
>>     Cosa più leggera potrebbe essere salvarti esclusivamente i valori
>>     dei parametri e ogni volta ricreare oggetto con i parametri
>>     giusti.. per questo basterebbe un formato qualsiasi a tua
>>     scelta.. da csv a JSON a whatever ;)
>>
>>     HTH
>>     Valerio
>
>     Il problema si presenta ben prima di arrivare a fare
>     /pickle.dump(classifier, f).
>     /
>
>
> ok, allora non ho capito io il problema... oppure non ti sei spiegato :D
La procedura e':
Ottengo i dati dal database:
trainbase=[]
for item in 
session.query(Nltrainingdatum).filter(Nltrainingdatum.group==pcategory).order_by(Nltrainingdatum.category):
     tokens = nltk.word_tokenize(item.description)
     words_filtered = [e.lower() for e in tokens if len(e) >= 1]
     trainbase.append((words_filtered, item.category))

che costruisce il trainbase.
Terminato questo, applico i calcoli statistici:
training_set = nltk.classify.apply_features(extract_features, trainbase)
extract_features e' un metodo.

in ultimo creo l'oggetto classificatore:
classifier = nltk.NaiveBayesClassifier.train(training_set)
quest'ultima operazione e' quella che va in errore. L'ho appena 
terminata su una workstation piu' performante, ci ha messo 30 minuti 
generando un oggetto di 1.5gb. L'uso della ram si attestava attorno ai 
20gb per tutto il tempo. \
Dopo di questa operazione ne effettuo il pickle ma non ci arrivo.
f = open(config[categoria], 'wb')
pickle.dump(classifier, f)
f.close()
che mi permette di NON rieffettuare il training, dato che i dati hanno 
validita' di una settimana (ed infatti, anche i 30 minuti di 
elaborazione, non sono un problema).


>     //Json non e' un formato adatto, troppo overhead, potrei provare
>     jsonB. Ma al momento, non e' questa l'urgenza.
>
>
> Io sto parlando della memorizzazione dei **soli** parametri (e valori) 
> non dell'oggetto Python... per cui, non capisco JSONB... parliamo di 
> cose che starebbero in un file di testo...
Questi stanno gia' su database, e cosi' mi basta.
>
>     Vedo se riesco a creare un mokup del programma che ho fatto e
>     postarlo (devo stare attento perché sui dati ho firmato un NDA).
>
>
> direi che non serve, se ci spieghi *bene* quale sia il tuo problema 
> allora.. leggendo avevo capito che il tuo problema era con Pickle 
> (cosa alquanto probabile...)
> Ciao,
> Valerio
>
> P.s. Manteniamo la discussione sulla ML.
scusa, ho fatto rispondi senza guardare, convinto che rispondesse in 
automatico alla mailing list. Mea culpa.

-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20170731/621d6c94/attachment.html>


Maggiori informazioni sulla lista Python