The filename format: [ { "dataset": { "dataset_name": "xxx", ... }, "column_mapping": { "text1": "sequence1", "text2": "sequence2", "label": "label", }
(filename)
| 499 | |
| 500 | |
| 501 | def build_dataset_from_file(filename): |
| 502 | """ |
| 503 | The filename format: |
| 504 | [ |
| 505 | { |
| 506 | "dataset": { |
| 507 | "dataset_name": "xxx", |
| 508 | ... |
| 509 | }, |
| 510 | "column_mapping": { |
| 511 | "text1": "sequence1", |
| 512 | "text2": "sequence2", |
| 513 | "label": "label", |
| 514 | } |
| 515 | "usage": 0.8, |
| 516 | } |
| 517 | ] |
| 518 | """ |
| 519 | from modelscope import MsDataset |
| 520 | train_set = [] |
| 521 | eval_set = [] |
| 522 | |
| 523 | with open(filename, 'r') as f: |
| 524 | ds_json = json.load(f) |
| 525 | for ds in ds_json: |
| 526 | dataset = MsDataset.load(**ds['dataset']).to_hf_dataset() |
| 527 | all_columns = dataset.column_names |
| 528 | keep_columns = ds['column_mapping'].keys() |
| 529 | remove_columns = [ |
| 530 | column for column in all_columns if column not in keep_columns |
| 531 | ] |
| 532 | from datasets import Features |
| 533 | from datasets import Value |
| 534 | from datasets import ClassLabel |
| 535 | features = [ |
| 536 | f for f in dataset.features.items() if f[0] in keep_columns |
| 537 | ] |
| 538 | new_features = {} |
| 539 | for f in features: |
| 540 | if isinstance(f[1], ClassLabel): |
| 541 | new_features[f[0]] = Value(f[1].dtype) |
| 542 | else: |
| 543 | new_features[f[0]] = f[1] |
| 544 | new_features = Features(new_features) |
| 545 | dataset = dataset.map( |
| 546 | lambda x: x, |
| 547 | remove_columns=remove_columns, |
| 548 | features=new_features).rename_columns(ds['column_mapping']) |
| 549 | usage = ds['usage'] |
| 550 | if isinstance(usage, str): |
| 551 | assert usage in ('train', 'val') |
| 552 | if usage == 'train': |
| 553 | train_set.append(dataset) |
| 554 | else: |
| 555 | eval_set.append(dataset) |
| 556 | else: |
| 557 | assert isinstance(usage, float) and 0 < usage < 1 |
| 558 | ds_dict = dataset.train_test_split(train_size=usage) |
searching dependent graphs…