REaLTabFormer (ข้อมูลเชิงสัมพันธ์ที่สมจริงและข้อมูลแบบตารางโดยใช้ Transformers) นำเสนอเฟรมเวิร์กแบบรวมสำหรับการสังเคราะห์ข้อมูลแบบตารางประเภทต่างๆ แบบจำลองลำดับต่อลำดับ (Seq2Seq) ใช้สำหรับสร้างชุดข้อมูลเชิงสัมพันธ์แบบสังเคราะห์ โมเดล REaLTabFormer สำหรับข้อมูลแบบตารางที่ไม่สัมพันธ์กันใช้ GPT-2 และสามารถนำมาใช้แบบสำเร็จรูปเพื่อสร้างแบบจำลองข้อมูลแบบตารางใดๆ ที่มีการสังเกตแบบอิสระ
REaLTabFormer: การสร้างข้อมูลเชิงสัมพันธ์และตารางที่สมจริงโดยใช้ Transformers
บทความเกี่ยวกับ ArXiv
REaLTabFormer พร้อมใช้งานบน PyPi และสามารถติดตั้งได้อย่างง่ายดายด้วย pip (เวอร์ชัน Python >= 3.7):
pip ติดตั้ง realtabformer
เราแสดงตัวอย่างการใช้ REaLTabFormer สำหรับการสร้างแบบจำลองและสร้างข้อมูลสังเคราะห์จากแบบจำลองที่ได้รับการฝึกอบรม
บันทึก
โมเดลใช้เกณฑ์การหยุดที่เหมาะสมที่สุดโดยอิงตามการกระจายข้อมูลสังเคราะห์ เมื่อฝึกโมเดลตารางที่ไม่สัมพันธ์กัน โมเดลจะหยุดการฝึกเมื่อการกระจายข้อมูลสังเคราะห์ใกล้เคียงกับการกระจายข้อมูลจริง
ตรวจสอบให้แน่ใจว่าได้ตั้งค่าพารามิเตอร์ epochs
เป็นจำนวนมากเพื่อให้โมเดลพอดีกับข้อมูลได้ดีขึ้น แบบจำลองจะหยุดการฝึกเมื่อถึงเกณฑ์การหยุดที่เหมาะสมที่สุด
# pip ติดตั้ง realtabformerimport pandas เป็น pdfrom realtabformer import REaLTabFormerdf = pd.read_csv("foo.csv")# หมายเหตุ: ลบตัวระบุที่ไม่ซ้ำกันใด ๆ ในข้อมูล # ที่คุณไม่ต้องการสร้างแบบจำลอง # ตารางที่ไม่เกี่ยวข้องหรือเป็นพาเรนต์ rtf_model = REaLTabFormer(model_type="tabular",gradient_accumulation_steps=4,logging_steps=100)# ปรับโมเดลให้พอดีกับชุดข้อมูล # สามารถส่งพารามิเตอร์เพิ่มเติมไปยัง `.fit` method.rtf_model.fit(df)# บันทึกโมเดลไปที่ ไดเร็กทอรีปัจจุบัน # ไดเร็กทอรีใหม่ `rtf_model/` จะถูกสร้างขึ้น # ในนั้น ไดเร็กทอรีที่มีรหัสการทดลอง # ของโมเดล `idXXXX` จะถูกสร้างขึ้นด้วย# โดยที่สิ่งประดิษฐ์ของโมเดลจะถูกจัดเก็บไว้rtf_model.save("rtf_model/")# สร้างข้อมูลสังเคราะห์ด้วยจำนวนการสังเกต # เดียวกันกับชุดข้อมูลจริง.samples = rtf_model.sample(n_samples=len( df))# โหลดโมเดลที่บันทึกไว้ ต้องระบุไดเร็กทอรีไปยัง # การทดลอง.rtf_model2 = REaLTabFormer.load_from_dir(path="rtf_model/idXXXX")
# pip ติดตั้ง realtabformerimport osimport pandas เป็น pdfrom pathlib import Pathfrom realtabformer import REaLTabFormerparent_df = pd.read_csv("foo.csv")child_df = pd.read_csv("bar.csv")join_on = "unique_id"# ตรวจสอบให้แน่ใจว่าคอลัมน์หลักใน ทั้ง # parent และตารางลูกมีชื่อเดียวกัน assert ((join_on ใน parent_df.columns) และ(join_on ใน child_df.columns))# ตารางที่ไม่เกี่ยวข้องหรือเป็นพาเรนต์ ไม่รวม# Unique_id field.parent_model = REaLTabFormer(model_type="tabular")parent_model.fit(parent_df.drop(join_on, axis=1))pdir = Path("rtf_parent/")parent_model.save(pdir)# # รับโมเดลหลักที่บันทึกไว้ล่าสุด # # หรือระบุโมเดลที่บันทึกไว้อื่น ๆ # parent_model_path = pdir / "idXXX"parent_model_path = เรียงลำดับ ([p สำหรับ p ใน pdir.glob("id*") ถ้า 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)# สร้างตัวอย่างพาเรนต์.parent_samples = parent_model.sample(len(parend_df ))# สร้างเอกลักษณ์ รหัสตาม index.parent_samples.index.name = join_onparent_samples = parent_samples.reset_index()# สร้างการสังเกตเชิงสัมพันธ์.child_samples = child_model.sample(input_unique_ids=parent_samples[join_on],input_df=parent_samples.drop(join_on, axis=1) ,gen_batch=64)
เฟรมเวิร์ก REaLTabFormer จัดเตรียมอินเทอร์เฟซเพื่อสร้างเครื่องมือตรวจสอบการสังเกตสำหรับการกรองตัวอย่างสังเคราะห์ที่ไม่ถูกต้องได้อย่างง่ายดาย เราแสดงตัวอย่างการใช้ GeoValidator
ด้านล่าง แผนภูมิทางด้านซ้ายแสดงการกระจายของละติจูดและลองจิจูดที่สร้างขึ้นโดยไม่มีการตรวจสอบความถูกต้อง แผนภูมิทางด้านขวาแสดงตัวอย่างสังเคราะห์พร้อมข้อสังเกตที่ได้รับการตรวจสอบโดยใช้ GeoValidator
กับขอบเขตแคลิฟอร์เนีย ถึงกระนั้น แม้ว่าเราจะไม่ได้ฝึกโมเดลอย่างเหมาะสมที่สุดสำหรับการสร้างสิ่งนี้ แต่ตัวอย่างที่ไม่ถูกต้อง (อยู่นอกขอบเขต) ก็หายากจากข้อมูลที่สร้างขึ้นโดยไม่มีเครื่องมือตรวจสอบ
# !pip ติดตั้ง geopandas &> /dev/null# !pip ติดตั้ง realtabformer &> /dev/null# !git clone https://github.com/joncutrer/geopandas-tutorial.git &> /dev/nullimport geopandasimport seaborn เป็น snsimport matplotlib.pyplot เป็น plt จากการนำเข้า realtabformer REaLTabFormer จากการนำเข้า realtabformer rtf_validators เป็น rtf_valfrom shapely.geometry นำเข้ารูปหลายเหลี่ยม, LineString, Point, MultiPolygon จาก sklearn.datasets นำเข้า fetch_california_housingdef plot_sf(ข้อมูล, ตัวอย่าง, ชื่อ=ไม่มี):xlims = (-126, -113.5)ylims = (31, 43)bins = (50 , 50)dd = ตัวอย่าง.คัดลอก()pp = dd.loc[dd["ลองจิจูด"].between(ข้อมูล["ลองจิจูด"].min(), ข้อมูล["ลองจิจูด"].max()) &dd["Latitude"].between(ข้อมูล["Latitude"] .min(), ข้อมูล["Latitude"].max()) ]g = sns.JointGrid(data=pp, x="Longitude", y="Latitude", marginal_ticks=True)g.plot_joint(sns.histplot,bins=bins, )states[states['NAME'] == 'California'].boundary.plot(ax=g.ax_joint)g.ax_joint.set_xlim(*xlims)g.ax_joint.set_ylim(*ylims)g.plot_marginals(sns. histplot, element="ขั้นตอน", color="#03012d")if title:g.ax_joint.set_title(title)plt.tight_layout()# รับไฟล์ทางภูมิศาสตร์states = geopandas.read_file('geopandas-tutorial/data/usa-states-census-2014.shp')states = state.to_crs("EPSG :4326") # GPS Projection# รับชุดข้อมูลที่อยู่อาศัยของแคลิฟอร์เนีย = fetch_california_housing(as_frame=True).frame# เราสร้างโมเดลที่มียุคเล็ก ๆ สำหรับการสาธิต ค่าเริ่มต้นคือ 200.rtf_model = REaLTabFormer(model_type="tabular",batch_size=64,epochs=10,gradient_accumulation_steps=4,logging_steps=100) #ใส่ได้ตรงรุ่นที่กำหนด นอกจากนี้เรายังลด num_bootstrap โดยค่าเริ่มต้นคือ 500.rtf_model.fit(data, num_bootstrap=10)# บันทึก modelrtf_model.save("rtf_model/")# ตัวอย่างข้อมูลดิบที่ไม่มี validatorsamples_raw = rtf_model.sample(n_samples=10240, gen_batch= 512)# ข้อมูลตัวอย่างด้วย validatorobs_validator ทางภูมิศาสตร์ = rtf_val.ObservationValidator()obs_validator.add_validator("geo_validator",rtf_val.GeoValidator(MultiPolygon(states[states['NAME'] == 'California'].geometry[0])), ("ลองจิจูด", "ละติจูด") )samples_validated = rtf_model.sample(n_samples=10240, gen_batch=512,validator=obs_validator, )# แสดงภาพ Sampleplot_sf(data, example_raw, title="Raw Samples")plot_sf(data, example_validated, title="Validated Samples")
โปรดอ้างอิงงานของเราหากคุณใช้ REaLTabFormer ในโครงการหรือการวิจัยของคุณ
@article{solatorio2023realtabformer, title={REaLTabFormer: การสร้างข้อมูลเชิงสัมพันธ์และตารางที่สมจริงโดยใช้ Transformers}, author={Solatorio, Aivin V. และ Dupriez, Olivier}, Journal={arXiv preprint arXiv:2302.02041}, year={2023}}
เราขอขอบคุณ World Bank-UNHCR Joint Data Center on Forced Displacement (JDC) ที่ให้ทุนสนับสนุนโครงการ "Enhancing Responsible Microdata Access to Improvement Policy and Response in Forced Displacement Situations" (KP-P174174-GINP-TF0B5124) ส่วนหนึ่งของกองทุนได้นำไปใช้ในการสนับสนุนการพัฒนากรอบงาน REaLTabFormer ซึ่งใช้เพื่อสร้างประชากรสังเคราะห์สำหรับการวิจัยเกี่ยวกับความเสี่ยงในการเปิดเผยข้อมูลและผลกระทบของโมเสก
เรายังส่ง? ถึง HuggingFace ? สำหรับซอฟต์แวร์โอเพ่นซอร์สทั้งหมดที่พวกเขาเผยแพร่ และสำหรับโครงการโอเพ่นซอร์สทั้งหมด ขอขอบคุณ!