ValueError возникает, когда я пытаюсь использовать алгоритм CG MaxentClassifier в nltk - PullRequest
0 голосов
/ 22 апреля 2011

Когда я попробовал примеры MaxentClassifier из http://nltk.googlecode.com/svn/trunk/doc/howto/classify.html,, я получил ошибку ниже:

Grad eval # 0

Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    classifier = MaxentClassifier.train(train)
  File "C:\Python27\lib\site-packages\nltk\classify\maxent.py", line 323, in train
    gaussian_prior_sigma, **cutoffs)
  File "C:\Python27\lib\site-packages\nltk\classify\maxent.py", line 1456, in train_maxent_classifier_with_scipy
    model.fit(algorithm=algorithm)
  File "C:\Python27\lib\site-packages\scipy\maxentropy\maxentropy.py", line 1026, in fit
    return model.fit(self, self.K, algorithm)
  File "C:\Python27\lib\site-packages\scipy\maxentropy\maxentropy.py", line 226, in fit
    callback=callback)
  File "C:\Python27\lib\site-packages\scipy\optimize\optimize.py", line 636, in fmin_cg
    gfk = myfprime(x0)
  File "C:\Python27\lib\site-packages\scipy\optimize\optimize.py", line 176, in function_wrapper
    return function(x, *args)
  File "C:\Python27\lib\site-packages\scipy\maxentropy\maxentropy.py", line 420, in grad
    G = self.expectations() - self.K
ValueError: operands could not be broadcast together with shapes (54) (12) 

Код Python:

train = [(dict(a=1,b=1,c=1), 'y'),
         (dict(a=1,b=1,c=1), 'x'),
         (dict(a=1,b=1,c=0), 'y'),
         (dict(a=0,b=1,c=1), 'x'),
         (dict(a=0,b=1,c=1), 'y'),
         (dict(a=0,b=0,c=1), 'y'),
         (dict(a=0,b=1,c=0), 'x'),
         (dict(a=0,b=0,c=0), 'x')]
test = [(dict(a=1,b=0,c=1)), # unseen
        (dict(a=1,b=0,c=0)), # unseen
        (dict(a=0,b=1,c=1)), # seen 3 times, labels=y,y,x
        (dict(a=0,b=1,c=0)) # seen 1 time, label=x
        ]
classifier = MaxentClassifier.train(train)

Но я не знаю, как это решить. Помоги мне, спасибо!

1 Ответ

3 голосов
/ 12 мая 2011

Это работает, если вы установите алгоритм:

>>> algorithm = nltk.classify.MaxentClassifier.ALGORITHMS[0]
>>> algorithm
'GIS'
>>> classifier = nltk.MaxentClassifier.train(train, algorithm)

  ==> Training (100 iterations)

      Iteration    Log Likelihood    Accuracy
      ---------------------------------------
             1          -0.69315        0.556
             2          -0.65164        0.778
             3          -0.62713        0.778
             4          -0.61084        0.667
             5          -0.59935        0.667
             6          -0.59096        0.667
            .................................
            .................................

(обратите внимание, что вы пропустили одну строку учебного корпуса)

Редактировать: Несколько алгоритмов nltk не работают,в том числе «CG».Проблема, вероятно, такая же, как та, о которой сообщалось здесь .Если это так, то, вероятно, это будет решено в следующих выпусках nltk.Вы также можете сообщить об ошибке в nltk, чтобы помочь разработчикам и вам самим.

Поскольку представленная ошибка, по-видимому, связана с numpy трансляцией и устаревшим использованием numpy, возможно, вы можете попробовать использовать более старую версию numpy

...