5 votes

Former un modèle NER en évitant les erreurs de mémoire insuffisante

Je tente de former un modèle NER en utilisant la bibliothèque stanford-nlp. J'ai un fichier au format requis d'une taille de 6GB. Le fichier de configuration :

usePrevSequences=true
useClassFeature=true
useTypeSeqs2=true
useSequences=true
wordShape=chris2useLC
useTypeySequences=true
useDisjunctive=true
noMidNGrams=true
serializeTo=ner-model50.ser.gz
maxNGramLeng=6
useNGrams=true
usePrev=true
useNext=true
maxLeft=1
trainFile=trainData
map=word=0,answer=1
useWord=true
useTypeSeqs=true

Chaque phrase est divisée par une ligne vide comme suggéré dans la documentation. Donc quand j'exécute la commande avec mx25g :

java -mx25g -cp stanford-ner.jar edu.stanford.nlp.ie.crf.CRFClassifier -prop config.prop

J'ai eu l'erreur :

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

À partir de la page FAQ de la bibliothèque, il est suggéré de diviser le fichier en plusieurs fichiers en cas d'erreur de mémoire.

Pour ce faire, vous devez modifier le fichier de configuration en utilisant l'option trainFileList au lieu de l'option trainFile. Maintenant, j'ai plusieurs fichiers d'environ 250MB chacun. J'ai eu l'erreur suivante en exécutant la même commande :

Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exceeded

Il semble donc que la division des fichiers n'a pas aidé. Pensez-vous que diviser en fichiers encore plus petits aidera? ou cela n'a pas d'importance? Y a-t-il un moyen de contourner ce problème? Toute information est utile. Merci d'avance.

0voto

Saurabh Verma Points 31

J'ai également rencontré le même problème que le vôtre, l'un de mes supérieurs m'a suggéré d'utiliser -Xmx au lieu de -mx pour spécifier la taille maximale du tas en fonction de la RAM de votre machine et de la taille du swap.
Vous pouvez également réduire le nombre de classes d'entités ou fusionner les balises si vous utilisez le codage IOB car l'espace utilisé augmente de manière exponentielle avec l'augmentation des classes d'entités.

java -Xmx**g -cp stanford-ner.jar edu.stanford.nlp.ie.crf.CRFClassifier -prop ner.prop

cela a fonctionné pour moi.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X