def __init__(
        self,
        df,
        doc_text_col,
        question_text_col,
        qa_id_col=None,
        answer_start_col=None,
        answer_text_col=None,
        is_impossible_col=None,
    ):
        """
        A standard dataset structure for question answering that can be processed by
        :meth:`utils_nlp.models.transformers.question_answering.QAProcessor.preprocess`

        Args:
            df (pandas.DataFrame): Input data frame.
            doc_text_col (str): Name of the column containing the document texts.
            question_text_col (str): Name of the column containing the question texts.
            qa_id_col (str, optional): Name of the column containing the unique ids
                identifying document-question-answer samples. If not provided, a
                "qa_id" column is automatically created. Defaults to None.
            answer_start_col (str, optional): Name of the column containing answer
                start indices. For testing data, each value in the column can be a list
                of integers for multiple ground truth answers. Defaults to None.
            answer_text_col (str, optional): Name of the column containing answer texts.
                For testing data, each value in the column can be a list of strings for
                multiple ground truth answers. Defaults to None.
            is_impossible_col (str, optional): Name of the column containing boolean
                values indicating if the question is impossible to answer. If not
                provided, a "is_impossible" column is automatically created and
                populated with False. Defaults to None.
        """
        self.df = df.copy()
        self.doc_text_col = doc_text_col
        self.question_text_col = question_text_col

        if qa_id_col is None:
            self.qa_id_col = "qa_id"
            self.df[self.qa_id_col] = list(range(self.df.shape[0]))
        else:
            self.qa_id_col = qa_id_col

        if is_impossible_col is None:
            self.is_impossible_col = "is_impossible"
            self.df[self.is_impossible_col] = False
        else:
            self.is_impossible_col = is_impossible_col

        if answer_start_col is not None and answer_text_col is not None:
            self.actual_answer_available = True
        else:
            self.actual_answer_available = False
        self.answer_start_col = answer_start_col
        self.answer_text_col = answer_text_col

        A standard dataset structure for question answering that can be processed by
        :meth:`utils_nlp.models.transformers.question_answering.QAProcessor.preprocess`

        Args:
            df (pandas.DataFrame): Input data frame.
            doc_text_col (str): Name of the column containing the document texts.
            question_text_col (str): Name of the column containing the question texts.
            qa_id_col (str, optional): Name of the column containing the unique ids
                identifying document-question-answer samples. If not provided, a
                "qa_id" column is automatically created. Defaults to None.
            answer_start_col (str, optional): Name of the column containing answer
                start indices. For testing data, each value in the column can be a list
                of integers for multiple ground truth answers. Defaults to None.
            answer_text_col (str, optional): Name of the column containing answer texts.
                For testing data, each value in the column can be a list of strings for
                multiple ground truth answers. Defaults to None.
            is_impossible_col (str, optional): Name of the column containing boolean
                values indicating if the question is impossible to answer. If not
                provided, a "is_impossible" column is automatically created and
                populated with False. Defaults to None.
        
utils_nlp/models/transformers/datasets.py