[PYTHON] nltk.MaxentClassifier.train () renvoie une erreur.

Introduction Alors que je lisais correctement le traitement du langage naturel, je me suis retrouvé dans le chapitre 6, exercice 5. Lorsque j'ai essayé de classer des documents en utilisant la classification d'entropie maximale, cela a craché des erreurs et n'a pas bougé.

# -*- coding: utf-8 -*-
#from __future__ import division
import nltk,re
import random
import numpy
#Catégoriser les critiques de films comme positives ou négatives

#Les données
from nltk.corpus import movie_reviews
documents = [(list(movie_reviews.words(fileid)),category)
             for category in movie_reviews.categories()
             for fileid in movie_reviews.fileids(category)]
random.shuffle(documents)

#Extracteur d'identité
all_words = nltk.FreqDist(w.lower() for w in movie_reviews.words())
word_features = all_words.keys()[:2000]#Mot fréquent 2000

def document_features(document):
  document_words = set(document)
  features = {}
  for w in word_features:
    features['contains(%s)' % w] = (w in document)  #Si les 2000 premiers caractères sont dans le document
  return features

#Formation et test des classificateurs
featuresets = [(document_features(d),c) for (d,c) in documents]
train_set,test_set = featuresets[100:],featuresets[:100]

#Classification d'entropie maximale
maxentclassifier = nltk.MaxentClassifier.train(train_set)

#test
print "MaxentClassifier"
print nltk.classify.accuracy(maxentclassifier,test_set)
print maxentclassifier.show_most_informative_features(5)

L'erreur ressemble à ceci

  ==> Training (100 iterations)

      Iteration    Log Likelihood    Accuracy
      ---------------------------------------
             1          -0.69315        0.498
/usr/local/lib/python2.7/site-packages/nltk/classify/maxent.py:1332: RuntimeWarning: overflow encountered in power
  exp_nf_delta = 2 ** nf_delta
/usr/local/lib/python2.7/site-packages/nltk/classify/maxent.py:1334: RuntimeWarning: invalid value encountered in multiply
  sum1 = numpy.sum(exp_nf_delta * A, axis=0)
/usr/local/lib/python2.7/site-packages/nltk/classify/maxent.py:1335: RuntimeWarning: invalid value encountered in multiply
  sum2 = numpy.sum(nf_exp_nf_delta * A, axis=0)
/usr/local/lib/python2.7/site-packages/nltk/classify/maxent.py:1341: RuntimeWarning: invalid value encountered in divide
  deltas -= (ffreq_empirical - sum1) / -sum2
         Final               nan        0.502

Apparemment, la variable par défaut dans maxent.py génère une erreur en raison d'un débordement. J'ai donc essayé différents googles, mais les informations japonaises ne sont pas sorties facilement, alors j'ai pris une note.

Il a été corrigé en faisant référence à ici.

Hello Dmitry,

will this change affect the performance? Based on my test, the improvement between iterations drops a lot, comparing to GIS algorithm with default set. the accuracy could reach to 70% after three iterations using GIS, but only 58% after using the modified IIS.

7 mai 2012 Période stellaire 1 UTC-4 18:05:38, Dmitri Sergeev Shado: It seems that changing exp_nf_delta = 2 ** nf_delta (maxent.py line ~1350) to exp_nf_delta = 2 ** numpy.sqrt(nf_delta) do the trick.

Voilà pourquoi

sudo vi /usr/local/lib/python2.7/site-packages/nltk/classify/maxent.py

maxent.py


.
.
.

for rangenum in range(MAX_NEWTON):
    nf_delta = numpy.outer(nfarray, deltas)
    #exp_nf_delta = 2 ** nf_delt        #d'ici
    exp_nf_delta = 2 ** numpy.sqrt(nf_delta)    #Changer pour cela
    nf_exp_nf_delta = nftranspose * exp_nf_delta
    sum1 = numpy.sum(exp_nf_delta * A, axis=0)
    sum2 = numpy.sum(nf_exp_nf_delta * A, axis=0)
.
.
.

J'ai essayé à nouveau et cela a réussi. C'est difficile à apprendre car il n'y a pas beaucoup d'informations en japonais, mais je veux bien apprendre le traitement du langage naturel!

Recommended Posts

nltk.MaxentClassifier.train () renvoie une erreur.
[Rust] PyO3 renvoie une erreur
OperationalError: (psycopg2.OperationalError) donne une erreur
Une erreur s'est produite dans l'imputer de scikit-learn
Que faire si psycopg2 génère une erreur lorsque pipenv se verrouille dans un environnement Pipenv
J'obtiens une erreur avec les pandas d'importation.
L'histoire d'une erreur dans PyOCR