def METHOD_NAME(self, batch_size: int, shuffle: bool = None) \
        -> Generator[Tuple[List[str], List[int]], Any, None]:
    """Gen batches of documents.
    Args:
        batch_size: a number of samples in a single batch
        shuffle: whether to shuffle data during batching
    Yields:
        generated tuple of documents and their ids
    """
    if shuffle is None:
        shuffle = self.shuffle
    if shuffle:
        _doc_ids = self.random.sample(self.doc_ids, len(self.doc_ids))
    else:
        _doc_ids = self.doc_ids
    if batch_size > 0:
        batches = [_doc_ids[i:i + batch_size] for i in
                   range(0, len(_doc_ids), batch_size)]
    else:
        batches = [_doc_ids]
    for i, doc_ids in enumerate(batches):
        docs = [self.get_doc_content(doc_id) for doc_id in doc_ids]
        doc_nums = [self.doc2index[doc_id] for doc_id in doc_ids]
        yield docs, zip(doc_ids, doc_nums)