Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Error in predict for BertClassificationPredictor - logger is None #305

Open
villalbamartin opened this issue Jan 7, 2022 · 0 comments
Open

Comments

@villalbamartin
Copy link

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant