[PYTHON] nltk.MaxentClassifier.train () löst einen Fehler aus.

Einführung Als ich die Verarbeitung der natürlichen Sprache reibungslos las, wurde ich in Kapitel 6, Übung 5, erwischt. Als ich versuchte, Dokumente anhand der maximalen Entropieklassifizierung zu klassifizieren, wurden Fehler ausgegeben und nicht verschoben.

# -*- coding: utf-8 -*-
#from __future__ import division
import nltk,re
import random
import numpy
#Kategorisieren Sie Filmkritiken als positiv oder negativ

#Daten
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)

#Identitätsextraktor
all_words = nltk.FreqDist(w.lower() for w in movie_reviews.words())
word_features = all_words.keys()[:2000]#Häufiges Wort 2000

def document_features(document):
  document_words = set(document)
  features = {}
  for w in word_features:
    features['contains(%s)' % w] = (w in document)  #Gibt an, ob sich top2000 Zeichen im Dokument befinden
  return features

#Schulung und Prüfung von Klassifikatoren
featuresets = [(document_features(d),c) for (d,c) in documents]
train_set,test_set = featuresets[100:],featuresets[:100]

#Maximale Entropieklassifizierung
maxentclassifier = nltk.MaxentClassifier.train(train_set)

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

Der Fehler sieht so aus

  ==> 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

Anscheinend gibt die Standardvariable in maxent.py einen Fehler aufgrund eines Überlaufs aus. Also habe ich verschiedene Brillen ausprobiert, aber japanische Informationen kamen nicht leicht heraus, also machte ich mir eine Notiz.

Es wurde unter Bezugnahme auf hier korrigiert.

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.

  1. Mai 2012 Star Period 1 UTC-4 18:05:38 Uhr, Dmitry 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.

Deshalb

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        #von hier
    exp_nf_delta = 2 ** numpy.sqrt(nf_delta)    #Ändern Sie dies
    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)
.
.
.

Ich habe es erneut versucht und es ist gelungen. Es ist schwer zu lernen, weil es auf Japanisch nicht viele Informationen gibt, aber ich möchte die Verarbeitung natürlicher Sprache gut lernen!

Recommended Posts

nltk.MaxentClassifier.train () löst einen Fehler aus.
[Rust] PyO3 gibt einen Fehler zurück
OperationalError: (psycopg2.OperationalError) gibt einen Fehler aus
Beim Imputator von Scikit-Learn ist ein Fehler aufgetreten
Was tun, wenn psycopg2 einen Fehler auslöst, wenn pipenv in einer Pipenv-Umgebung gesperrt wird?
Ich erhalte eine Fehlermeldung beim Import von Pandas.
Die Geschichte eines Fehlers in PyOCR