Маллет: Алфавиты не соответствуют исключениям

Я пытаюсь реализовать классификатор документов с помощью Mallet в Java. У меня уже есть файл, содержащий значения функций. Поэтому я не хочу запускать весь конвейер обработки raw text.

На данный момент строка в моем файле функций выглядит так (2 функции, идентификатор и NrOfToken, метка документа «A»)

ID=3 NrofTokens=279.0 A

Я пытаюсь прочитать этот файл и поместить его в классификатор следующим образом:

Pipe instancePipe = new SerialPipes(new Pipe[] {
                new CharSequence2TokenSequence(),
                new TokenSequence2FeatureSequence(),
                new Target2Label(),
        });

        InstanceList trainData = new InstanceList(instancePipe);
        InstanceList testData = new InstanceList(instancePipe);

        Reader trainFileReader = new InputStreamReader(new FileInputStream(fileTrain), "UTF-8");
        trainData.addThruPipe(new LineGroupIterator(trainFileReader, Pattern.compile("^\\s*$"), true));

        Reader testFileReader = new InputStreamReader(new FileInputStream(fileTest), "UTF-8");
        testData.addThruPipe(new LineGroupIterator(testFileReader, Pattern.compile("^\\s*$"), true));

        // Create a classifier trainer, and use it to create a classifier
        @SuppressWarnings("rawtypes")
        ClassifierTrainer naiveBayesTrainer = new NaiveBayesTrainer();
        Classifier classifier = naiveBayesTrainer.train(trainData);

На данный момент я получаю это исключение:

java.lang.IllegalArgumentException: Alphabets don't match: Instance: [6, null], InstanceList: [6, 0]
    at cc.mallet.types.InstanceList.add(InstanceList.java:335)
    at cc.mallet.types.InstanceList.addThruPipe(InstanceList.java:267)
    at 

Кто-нибудь знает, почему Алфавит ломается?


person toobee    schedule 16.05.2016    source источник
comment
Может ли кто-нибудь помочь в этом запросе? Я также сталкиваюсь с проблемой при запуске кода моделирования тем из mallet.cs.umass.edu.   -  person Neethu Prem    schedule 26.12.2016
comment
Кто-нибудь сталкивался с той же проблемой в 2020 году с молотком версии 3.0.8? Я обнаружил, что это происходит в редких случаях. Я также искал официальную документацию, но не нашел решения.   -  person Urmay Shah    schedule 14.02.2021


Ответы (2)


На самом деле это не ответ, но я нашел исключения в Маллете пока не очень информативными. Я также получил эту ошибку, изменив свое регулярное выражение, которое анализирует строки данных, и удалив пустую строку в конце, чтобы она исчезла.

то есть регулярное выражение в этой части

CsvIterator reader = new CsvIterator(new FileReader(tempTrainPath), "(\\w+)\\s+(\\S+)\\s+(.*)", 3, 2, 1);
testInstances.addThruPipe(reader);

В конце целого дня отладки я был слишком раздражен, чтобы проверить, кто из двух был настоящим виновником. Но, возможно, эта информация поможет другим людям.

person Igor    schedule 21.03.2017

У меня была такая же ошибка при попытке оценить классификатор из командной строки. Добавление опции --use-pipe-from train_input.mallet, как описано в https://mallet-dev.cs.umass.narkive.com/NFtumW1r/mallet-2-0-7-ge-maxent-alphabets-don-t-match решил проблему .

person Artem Amirbekov    schedule 21.02.2020