REaLTabFormer (Data Relasional dan Tabular Realistis menggunakan Transformers) menawarkan kerangka kerja terpadu untuk mensintesis data tabular dari berbagai jenis. Model sequence-to-sequence (Seq2Seq) digunakan untuk menghasilkan kumpulan data relasional sintetik. Model REaLTabFormer untuk data tabular non-relasional menggunakan GPT-2, dan dapat langsung digunakan untuk memodelkan data tabular apa pun dengan observasi independen.
REaLTabFormer: Menghasilkan Data Relasional dan Tabular yang Realistis menggunakan Transformers
Makalah tentang ArXiv
REaLTabFormer tersedia di PyPi dan dapat dengan mudah diinstal dengan pip (versi Python >= 3.7):
pip instal tabformer asli
Kami menunjukkan contoh penggunaan REaLTabFormer untuk memodelkan dan menghasilkan data sintetik dari model terlatih.
Catatan
Model ini menerapkan kriteria penghentian optimal berdasarkan distribusi data sintetik saat melatih model tabel non-relasional. Model akan menghentikan pelatihan ketika distribusi data sintetik mendekati distribusi data sebenarnya.
Pastikan untuk menyetel parameter epochs
ke angka yang besar agar model dapat menyesuaikan data dengan lebih baik. Model akan menghentikan pelatihan ketika kriteria penghentian optimal terpenuhi.
# pip install realtabformerimport pandas as pdfrom realtabformer import REaLTabFormerdf = pd.read_csv("foo.csv")# CATATAN: Hapus pengidentifikasi unik apa pun di# data yang tidak ingin Anda modelkan.# Tabel non-relasional atau induk. rtf_model = REaLTabFormer(model_type="tabular",gradient_accumulation_steps=4,logging_steps=100)# Sesuaikan model pada dataset.# Parameter tambahan dapat# diteruskan ke metode `.fit`.rtf_model.fit(df)# Simpan model ke direktori saat ini.# Direktori baru `rtf_model/` akan dibuat.# Di dalamnya, direktori dengan # id eksperimen model `idXXXX` juga akan dibuat# di mana artefak model akan disimpan.rtf_model.save("rtf_model/")# Hasilkan data sintetis dengan# jumlah pengamatan yang sama dengan kumpulan data sebenarnya.samples = rtf_model.sample(n_samples=len( df))# Muat model yang disimpan. Direktori ke# eksperimen harus disediakan.rtf_model2 = REaLTabFormer.load_from_dir(path="rtf_model/idXXXX")
# pip install realtabformerimport osimport pandas as pdfrom pathlib import Pathfrom realtabformer import REaLTabFormerparent_df = pd.read_csv("foo.csv")child_df = pd.read_csv("bar.csv")join_on = "unique_id"# Pastikan kolom kunci di # tabel induk dan tabel anak memiliki nama yang sama.menegaskan ((join_on di parent_df.columns) dan(join_on di child_df.columns))# Tabel non-relasional atau induk. Jangan sertakan# bidang Unique_id.parent_model = REaLTabFormer(model_type="tabular")parent_model.fit(parent_df.drop(join_on, axis=1))pdir = Path("rtf_parent/")parent_model.save(pdir)# # Dapatkan model induk yang terakhir disimpan,# # atau tentukan model tersimpan lainnya.# parent_model_path = pdir / "idXXX"parent_model_path = diurutkan([p untuk p di pdir.glob("id*") jika p.is_dir()],key=os.path.getmtime)[-1]child_model = REaLTabFormer(model_type="relational",parent_realtabformer_path=parent_model_path,output_max_length=None,train_size=0.8)child_model.fit(df=child_df,in_df=parent_df,join_on=join_on)# Hasilkan sampel induk.parent_samples = parent_model.sample(len(parend_df ))# Buat id unik berdasarkan indeks.parent_samples.index.name = join_onparent_samples = parent_samples.reset_index()# Hasilkan observasi relasional.child_samples = child_model.sample(input_unique_ids=parent_samples[join_on],input_df=parent_samples.drop(join_on, axis=1),gen_batch= 64)
Kerangka kerja REaLTabFormer menyediakan antarmuka untuk dengan mudah membangun validator observasi untuk memfilter sampel sintetis yang tidak valid. Kami menunjukkan contoh penggunaan GeoValidator
di bawah ini. Bagan di sebelah kiri menunjukkan distribusi lintang dan bujur yang dihasilkan tanpa validasi. Bagan di sebelah kanan menunjukkan sampel sintetik dengan observasi yang telah divalidasi menggunakan GeoValidator
dengan batas California. Namun, meskipun kami tidak melatih model secara optimal untuk menghasilkan data ini, sampel yang tidak valid (yang berada di luar batas) akan menjadi langka dari data yang dihasilkan tanpa validator.
# !pip install geopandas &> /dev/null# !pip install realtabformer &> /dev/null# !git clone https://github.com/joncutrer/geopandas-tutorial.git &> /dev/nullimport geopandasimport seaborn as snsimport matplotlib.pyplot sebagai pltfrom realtabformer impor REaLTabFormerfrom realtabformer impor rtf_validators sebagai rtf_valfrom shapely.geometry impor Poligon, LineString, Titik, MultiPoligondari sklearn.datasets impor ambil_california_housingdef plot_sf(data, sampel, judul=Tidak Ada):xlims = (-126, -113.5)ylims = (31, 43)bins = (50, 50 )dd = sampel.copy()pp = dd.loc[dd["Bujur"].between(data["Bujur"].min(), data["Bujur"].max()) &dd["Lintang"].antara(data["Lintang"] .min(), data["Lintang"].max()) ]g = sns.JointGrid(data=pp, x="Bujur", y="Lintang", marginal_ticks=True)g.plot_joint(sns.histplot,bins=bins, )negara bagian[negara bagian['NAMA'] == 'California'].boundary.plot(ax=g.ax_joint)g.ax_joint.set_xlim(*xlims)g.ax_joint.set_ylim(*ylims)g.plot_marginals(sns. histplot, elemen = "langkah", warna = "#03012d") jika title:g.ax_joint.set_title(title)plt.tight_layout()# Dapatkan file geografisstates = geopandas.read_file('geopandas-tutorial/data/usa-states-census-2014.shp')states = States.to_crs("EPSG :4326") # Proyeksi GPS# Dapatkan dataset perumahan California = ambil_california_housing(as_frame=True).frame# Kita membuat model dengan epoch kecil untuk demo, defaultnya adalah 200.rtf_model = REaLTabFormer(model_type="tabular",batch_size=64,epochs=10,gradient_accumulation_steps=4,logging_steps=100) # Sesuaikan model yang ditentukan. Kami juga mengurangi num_bootstrap, defaultnya adalah 500.rtf_model.fit(data, num_bootstrap=10)# Simpan model yang dilatihrtf_model.save("rtf_model/")# Contoh data mentah tanpa validatoramples_raw = rtf_model.sample(n_samples=10240, gen_batch= 512)# Contoh data dengan validatorobs_validator geografis = rtf_val.ObservationValidator()obs_validator.add_validator("geo_validator",rtf_val.GeoValidator(MultiPolygon(states[states['NAME'] == 'California'].geometry[0])), ("Bujur", "Lintang") )samples_validated = rtf_model.sample(n_samples=10240, gen_batch=512,validator=obs_validator, )# Visualisasikan sampleplot_sf(data, sampel_raw, title="Sampel mentah")plot_sf(data, sampel_validated, title="Sampel yang divalidasi")
Silakan kutip karya kami jika Anda menggunakan REaLTabFormer dalam proyek atau penelitian Anda.
@article{solatorio2023realtabformer, title={REALTabFormer: Menghasilkan Data Relasional dan Tabular Realistis menggunakan Transformers}, author={Solatorio, Aivin V. and Dupriez, Olivier}, journal={arXiv preprint arXiv:2302.02041}, year={2023}}
Kami berterima kasih kepada Pusat Data Gabungan Pengungsi Paksa (JDC) Bank Dunia-UNHCR yang mendanai proyek "Meningkatkan Akses Microdata yang Bertanggung Jawab untuk Meningkatkan Kebijakan dan Respon dalam Situasi Pengungsi Paksa" (KP-P174174-GINP-TF0B5124). Sebagian dari dana tersebut digunakan untuk mendukung pengembangan kerangka REaLTabFormer yang digunakan untuk menghasilkan populasi sintetis untuk penelitian tentang risiko pengungkapan dan efek mosaik.
Kami juga mengirim? ke HuggingFace? untuk semua perangkat lunak sumber terbuka yang mereka rilis. Dan untuk semua proyek sumber terbuka, terima kasih!