Классификатор BERT с API Ktrain не может предсказать новые данные.

Вопрос или проблема

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

(x_train, y_train), (x_test, y_test), preproc = text.texts_from_csv(TWITTER,
                                                                       preprocess_mode="bert",                                                                    
                                                                       text_column = 'text', label_columns = ['target'])

model = text.text_classifier('bert', (x_train, y_train), preproc=preproc)
learner = ktrain.get_learner(model,train_data=(x_train, y_train), val_data=(x_test, y_test), batch_size=6)

learner.fit_onecycle(2e-5, 1)

predictor = ktrain.get_predictor(learner.model,preproc)

predictor.predict(['I am very happy to meet you!'])

Ошибка, которую я получаю

IndexError                                Traceback (most recent call last)
<ipython-input-28-82b8da552189> in <module>()
----> 1 predictor.predict(['I am very happy to meet you!'])

1 frames
/usr/local/lib/python3.6/dist-packages/ktrain/text/predictor.py in <listcomp>(.0)
     56                 preds = np.squeeze(preds)
     57                 if len(preds.shape) == 0: preds = np.expand_dims(preds, -1)
---> 58         result =  preds if return_proba or multilabel or not self.c else [self.c[np.argmax(pred)] for pred in preds]
     59         if multilabel and not return_proba:
     60             result =  [list(zip(self.c, r)) for r in result]

IndexError: list index out of range

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

Попробуйте без оператора списка []:

predictor.predict(‘I am very happy to meet you!’)

Автор сообщения, очевидно, сам выяснил проблему и опубликовал решение здесь.

В основном, целые числа меток классов в его наборе данных для задачи бинарной классификации отображались как [0,4] вместо [0,1]. Если метки классов – это целые числа, они должны быть последовательными значениями (например, [0,1] для двух меток, [0,1,2,3] для четырех меток).

.

Ответ или решение

Конечно! Рассмотрим вашу проблему с классификацией текста с использованием архитектуры BERT и библиотеки Ktrain, которая проявляется в виде ошибки "list index out of range" при прогнозировании новых данных.

Основная проблема:
После успешной подготовки классификатора по анализу настроений с использованием BERT, вы получаете ошибку "list index out of range" при попытке прогнозировать некоторые новые данные, в то время как другие предложения обрабатываются корректно. Наиболее вероятной причиной этой ошибки является несоответствие числовых меток классов вашему набору данных.

Анализ причин:

  1. Ошибка в метках классов: Как было обнаружено, ваш набор данных для бинарной классификации имеет метки классов не в виде [0,1], а [0,4]. Для корректной работы классификатора метки классов должны быть последовательными целыми числами, чтобы метод numpy.argmax() мог корректно определить класс из предсказаний модели.

  2. Обработка новых данных: Вы совершаете предсказания, используя метод predictor.predict(), на новых данных. Ошибка возникает, когда предсказания, которые выходят за границы существующих меток классов, не могут быть корректно обработаны.

Решение:

  • Корректировка меток классов: Убедитесь, что метки классов в вашем наборе данных последовательны и начинание с нуля, например, [0,1] для двух классов. Внесите соответствующие изменения в ваш исходный CSV-файл на этапе предобработки данных.

  • Перепроверка данных: Убедитесь, что все данные тестового набора корректно отформатированы и соответствуют структуре данных, используемой при обучении модели.

  • Оптимизация кода: После устранения проблемы с метками классов, пересмотрите и оптимизируйте код с точки зрения его читаемости. Например, вызов метода может выглядеть так:

    predictor.predict('I am very happy to meet you!')

Дополнительные рекомендации:

  • Тестирование и валидация: Протестируйте модель на небольшом подмножестве данных, чтобы убедиться, что ошибка устранена. Кроме того, рассмотрите возможность использования обучения модели на большем количестве эпох или с другой скоростью обучения для пополнения и улучшения точности.

  • Документирование процесса: Всегда документируйте изменения, внесенные в процессе достижения решения — это поможет в будущем избежать подобных проблем.

SEO Оптимизация:
При написании и публикации аналогичного контента на сайте или в блоге используйте ключевые слова: "Sentiment Analysis with BERT", "Ktrain API error resolution", "BERT classifier index error", "справление ошибок предсказания в BERT" для улучшения видимости и привлечения целевой аудитории, интересующейся работой с моделями BERT.

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

Оцените материал
Добавить комментарий

Капча загружается...