<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def splits(cls, text_field, label_field, parse_field=None, extra_fields={}, root='.data', train='train.jsonl', validation='val.jsonl', test='test.jsonl'):
 """Create dataset objects for splits of the SNLI dataset. This is the most flexible way to use the dataset. Arguments: text_field: The field that will be used for premise and hypothesis data. label_field: The field that will be used for label data. parse_field: The field that will be used for shift-reduce parser transitions, or None to not include them. extra_fields: A dict[json_key: Tuple(field_name, Field)] root: The root directory that the dataset's zip archive will be expanded into. train: The filename of the train data. Default: 'train.jsonl'. validation: The filename of the validation data, or None to not load the validation set. Default: 'dev.jsonl'. test: The filename of the test data, or None to not load the test set. Default: 'test.jsonl'. """

        path = cls.download(root)

        if parse_field is None:
            fields = {'sentence1': ('premise', text_field),
                      'sentence2': ('hypothesis', text_field),
                      'gold_label': ('label', label_field)}
        else:
            fields = {'sentence1_binary_parse': [('premise', text_field),
                                                 ('premise_transitions', parse_field)],
                      'sentence2_binary_parse': [('hypothesis', text_field),
                                                 ('hypothesis_transitions', parse_field)],
                      'gold_label': ('label', label_field)}

        for key in extra_fields:
            if key not in fields.keys():
                fields[key] = extra_fields[key]

        return super(NLIDataset, cls).splits(
            path, root, train, validation, test,
            format='json', fields=fields,
            filter_pred=lambda ex: ex.label != '-')