Open3

機械学習、深層学習の前処理tips

schnellschnell

データの分割

利用するモジュール

pandas
sklearn.model_selection

サンプルコード

jsonlines形式のデータをtrain, test, valid = 8 : 1 : 1 で分割。正解データは'label'カラムに指定している。
それぞれのファイルの正解ラベルの割合が等しくなるように分割している。

import pandas as pd
from sklearn.model_selection import train_test_split

filename = 'raw_data.json'
df = pd.read_json(filename, orient='records', lines=True)

train, valid_test = train_test_split(df, test_size=0.2, shuffle=True, random_state=0, stratify=df['label'])
valid, test = train_test_split(valid_test, test_size=0.5, shuffle=True, random_state=0, stratify=valid_test['label'])

train.to_json('train.json', orient='records', lines=True, force_ascii=False)
test.to_json('test.json', orient='records', lines=True, force_ascii=False)
valid.to_json('valid.json', orient='records', lines=True, force_ascii=False)
schnellschnell

データの変換

TSV -> JSONLINES

import json
import csv

colums = ('sentence', 'label')
filename = 'data.tsv'
outfile = 'data.json'

with open(filename, newline='', mode='r') as f, open(outfile, newline='', mode='w') as fw:
    for row in csv.DictReader(f, colums, delimiter='\t'):
        text = json.dumps(row, ensure_ascii=False, separators=(',', ':'))
        fw.write(text + '\n')
schnellschnell

テキスト処理

連続する半角スペースを1つにする

space = re.compile('[\u3000 ]+[\u3000 ]')
re.sub(space, '', text)