REaLTabFormer(Realistic Relational and Tabular Data using Transformers)는 다양한 유형의 표 형식 데이터를 합성하기 위한 통합 프레임워크를 제공합니다. 합성 관계형 데이터 세트를 생성하는 데 시퀀스-시퀀스(Seq2Seq) 모델이 사용됩니다. 비관계형 표 형식 데이터에 대한 REaLTabFormer 모델은 GPT-2를 사용하며 기본적으로 사용하여 독립적인 관찰을 통해 모든 표 형식 데이터를 모델링할 수 있습니다.
REaLTabFormer: 변환기를 사용하여 현실적인 관계형 및 표 형식 데이터 생성
ArXiv에 관한 논문
REaLTabFormer는 PyPi에서 사용할 수 있으며 pip(Python 버전 >= 3.7)를 사용하여 쉽게 설치할 수 있습니다.
pip 설치 realtabformer
훈련된 모델에서 합성 데이터를 모델링하고 생성하기 위해 REaLTabFormer를 사용하는 예를 보여줍니다.
메모
이 모델은 비관계형 테이블 형식 모델을 학습할 때 합성 데이터 분포를 기반으로 최적의 중지 기준을 구현합니다. 합성 데이터 분포가 실제 데이터 분포에 가까워지면 모델 학습이 중지됩니다.
모델이 데이터에 더 잘 맞을 수 있도록 epochs
매개변수를 큰 숫자로 설정해야 합니다. 최적의 중지 기준이 충족되면 모델은 학습을 중지합니다.
# pip install realtabformerimport pandas as pdfrom realtabformer import REaLTabFormerdf = pd.read_csv("foo.csv")# 참고: 모델링하지 않으려는# 데이터에서 고유 식별자를 제거합니다.# 비관계형 또는 상위 테이블. rtf_모델 = REaLTabFormer(model_type="tabular",gradient_accumulation_steps=4,logging_steps=100)# 데이터세트에 모델을 맞춥니다.# 추가 매개변수를 # `.fit` 메소드에 전달할 수 있습니다.rtf_model.fit(df)# 모델을 다음 위치에 저장합니다. # 현재 디렉터리에 `rtf_model/`이라는 새 디렉터리가 생성됩니다.# 그 안에 모델의# 실험 ID가 `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 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"# 키 열이 # 상위 테이블과 하위 테이블 모두 동일한 이름을 갖습니다.assert((join_on in parent_df.columns) 및(child_df.columns의 Join_on))# 비관계형 또는 상위 테이블. # 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 = sorted([p for p in pdir.glob("id*") if 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 ))# 다음을 기반으로 고유 ID를 생성합니다. 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 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 as pltfrom realtabformer import REaLTabFormerfrom realtabformer import rtf_validators as rtf_valfrom shapely.geometry import Polygon, LineString, Point, MultiPolygonfrom sklearn.datasets import fetch_california_housingdef 플롯_sf(data, 샘플, title=None):xlims = (-126, -113.5)ylims = (31, 43)bins = (50 , 50)dd = 샘플.복사()pp = dd.loc[dd["경도"].between(data["경도"].min(), data["경도"].max()) &dd["위도"].between(data["위도"] .min(), 데이터["위도"].max()) ]g = sns.JointGrid(data=pp, x="경도", y="위도", marginal_ticks=True)g.plot_joint(sns.histplot,bins=bins, )states[states['NAME'] == '캘리포니아'].boundary.plot(ax=g.ax_joint)g.ax_joint.set_xlim(*xlims)g.ax_joint.set_ylim(*ylims)g.plot_marginals(sns. histplot, element="step", 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 = states.to_crs("EPSG :4326") # GPS 투영# 캘리포니아 주택 데이터세트 가져오기data = fetch_california_housing(as_frame=True).frame# 데모를 위해 작은 epoch로 모델을 생성합니다. 기본값은 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)# 학습된 모델을 저장합니다rtf_model.save("rtf_model/")# 유효성 검사기 없이 원시 데이터 샘플amples_raw = rtf_model.sample(n_samples=10240, gen_batch= 512)# 지리적 유효성 검사기를 사용한 샘플 데이터obs_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, )# 샘플플롯_sf(data, 샘플_raw, title="원시 샘플")plot_sf(data, 샘플_유효성, title="검증된 샘플") 시각화
프로젝트나 연구에서 REaLTabFormer를 사용하는 경우 당사 작업을 인용해 주세요.
@article{solatorio2023realtabformer, title={REaLTabFormer: Transformers를 사용하여 현실적인 관계형 및 표 형식 데이터 생성}, 작성자={Solatorio, Aivin V. 및 Dupriez, Olivier}, 저널={arXiv 사전 인쇄 arXiv:2302.02041}, 연도={2023}}
"강제 실향 상황에서 정책 및 대응 개선을 위한 책임 있는 마이크로데이터 접근 강화"(KP-P174174-GINP-TF0B5124) 프로젝트에 자금을 지원해준 세계은행-UNHCR 강제 실향민 공동 데이터 센터(JDC)에 감사드립니다. 기금의 일부는 공개 위험 및 모자이크 효과에 대한 연구를 위한 합성 모집단을 생성하는 데 사용되는 REaLTabFormer 프레임워크 개발을 지원하는 데 사용되었습니다.
우리는 또한 ? HuggingFace에? 그들이 출시하는 모든 오픈 소스 소프트웨어에 대해. 그리고 모든 오픈 소스 프로젝트에 감사드립니다!