def METHOD_NAME(self,):
    from .ctr import Model
    user_data = self._build_data(self.train_set.matrix)
    item_data = self._build_data(self.train_set.matrix.T.tocsr())
    bow_mat = self.train_set.item_text.batch_bow(
        np.arange(self.n_item), keep_sparse=True
    )
    doc_ids, doc_cnt = self._build_data(bow_mat)  # bag of word feature
    self.model = Model(
        n_user=self.n_user,
        n_item=self.n_item,
        U=self.U,
        V=self.V,
        k=self.k,
        n_vocab=self.train_set.item_text.vocab.size,
        lambda_u=self.lambda_u,
        lambda_v=self.lambda_v,
        a=self.a,
        b=self.b,
        max_iter=self.max_iter,
        seed=self.seed,
    )
    loop = trange(self.max_iter, disable=not self.verbose)
    for _ in loop:
        cf_loss = self.model.update_cf(
            user_data=user_data, item_data=item_data
        )  # u and v updating
        lda_loss = self.model.update_theta(doc_ids=doc_ids, doc_cnt=doc_cnt)
        self.model.update_beta()
        loop.set_postfix(cf_loss=cf_loss, lda_likelihood=-lda_loss)
    if self.verbose:
        print("Learning completed!")