Skip to content

Error in predict for BertClassificationPredictor - logger is None #305

Description

@villalbamartin

I believe I found a bug in the predict code for the BertClassificationPredictor class.

I am loading a trained model like this:

self.model = BertClassificationPredictor(model_path=model_dir,
                                         label_path=labels_dir,
                                         multi_label=True,
                                         model_type='distilbert',
                                         do_lower_case=False,
                                         device=None)

and then generating predictions like this:

pred = self.model.predict(text)

Looking at the source code, the first code sample creates a BertClassificationPredictor object that calls self.get_learner. This function then calls BertLearner.from_pretrained_model with the parameter logger=None.

When I then call predict, I am eventually led to BertLearner.predict_batch, which starts like this:

    def predict_batch(self, texts=None):
        if texts:
            self.logger.info("---PROGRESS-STATUS---: Tokenizing input texts...")
            dl = self.data.get_dl_from_texts(texts)
            self.logger.info("---PROGRESS-STATUS---: Tokenizing input texts...DONE")
        elif self.data.test_dl:
            dl = self.data.test_dl
        else:
            dl = self.data.val_dl

And because self.logger is None, the code fails with the following exception (paths redacted):

  File "/.../bert_model.py", line 192, in classify
    pred = self.model.predict(text)
  File "/.../fast_bert/prediction.py", line 79, in predict
    predictions = self.predict_batch([text])[0]
  File "/.../fast_bert/prediction.py", line 76, in predict_batch
    return self.learner.predict_batch(texts)
  File "/.../fast_bert/learner_cls.py", line 553, in predict_batch
    self.logger.info("---PROGRESS-STATUS---: Tokenizing input texts...")
AttributeError: 'NoneType' object has no attribute 'info'

As a workaround, I am currently manually setting a logger:

self.model = BertClassificationPredictor(...)
self.model.learner.logger = logging.getLogger()

But I am wondering whether this is truly a bug or whether I'm skipping an important step somewhere.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions