RuTaBERT
IVMEM2024
RWT-Rutabert 데이터 세트에서 훈련 된 Bert와 함께 열 유형 주석 문제를 해결하기위한 모델.
RWT-Rutabert 데이터 세트에는 러시아어 Wikipedia 테이블의 1 441 349 열이 포함되어 있습니다. 170 dbpedia 시맨틱 유형과 일치하는 헤더. 고정 된 열차 / 테스트 분할이 있습니다.
| 나뉘다 | 열 | 테이블 | avg. 테이블 당 열 |
|---|---|---|---|
| 시험 | 115 448 | 55 080 | 2.096 |
| 기차 | 1 325 901 | 633 426 | 2.093 |
우리는 두 가지 테이블 직렬화 전략으로 Rutabert를 교육했습니다.
RWT-Rutabert 데이터 세트의 벤치 마크 결과 :
| 직렬화 전략 | Micro-F1 | 매크로 -F1 | 가중 -F1 |
|---|---|---|---|
| 멀티 컬럼 | 0.962 | 0.891 | 0.9621 |
| 이웃 열 | 0.964 | 0.904 | 0.9639 |
교육 매개 변수 :
| 매개 변수 | 값 |
|---|---|
| 배치 크기 | 32 |
| 에포크 | 30 |
| 손실 기능 | 크로스 엔트로피 |
| GD 최적화기 | ADAMW (LR = 5E-5, EPS = 1E-8) |
| GPU | 4 NVIDIA A100 (80GB) |
| 임의의 씨앗 | 2024 |
| 검증 분할 | 5% |
?RuTaBERT
┣ checkpoints
┃ ┗ Saved PyTorch models `.pt`
┣ data
┃ ┣ inference
┃ ┃ ┗ Tabels to inference `.csv`
┃ ┣ test
┃ ┃ ┗ Test dataset files `.csv`
┃ ┣ train
┃ ┃ ┗ Train dataset files `.csv`
┃ ┗ Directory for storing dataset files.
┣ dataset
┃ ┗ Dataset wrapper classes, dataloaders
┣ logs
┃ ┗ Log files (train / test / error)
┣ model
┃ ┗ Model and metrics
┣ trainer
┃ ┗ Trainer
┣ utils
┃ ┗ Helper functions
┗ Entry points (train.py, test.py, inference.py), configuration, etc.
모델 구성은 파일 config.json 에서 찾을 수 있습니다.
configuratoin 인수 매개 변수는 다음과 같습니다.
| 논쟁 | 설명 |
|---|---|
| num_labels | 분류에 사용되는 레이블 수 |
| num_gpu | 사용할 gpus 수 |
| save_period_in_epochs | 체크 포인트가 저장되는 주기성으로 특성화되는 숫자 (Epochs) |
| 메트릭 | 사용 된 분류 지표는 다음과 같습니다 |
| pretrained_model_name | Huggingface의 Bert 바로 가기 이름 |
| table_serialization_type | 테이블을 시퀀스로 직렬화하는 방법 |
| batch_size | 배치 크기 |
| num_epochs | 훈련 에포크 수 |
| random_seed | 임의의 씨앗 |
| logs_dir | 로깅을위한 디렉토리 |
| Train_LOG_FILENAME | 기차 로깅의 파일 이름 |
| test_log_filename | 테스트 로깅의 파일 이름 |
| start_from_checkpoint | 체크 포인트에서 훈련을 시작하는 플래그 |
| Checkpoint_dir | 모델의 체크 포인트 저장을위한 디렉토리 |
| Checkpoint_name | 체크 포인트의 파일 이름 (모델 상태) |
| inference_model_name | 추론 모델의 파일 이름 |
| inference_dir | 추론 테이블 저장 디렉토리 .csv |
| dataloader.valid_split | 유효성 검사 서브 세트 분할 양 |
| dataloader.num_workers | 데이터 로더 작업자 수 |
| DataSet.num_rows | 데이터 세트에서 읽을 수있는 행 수, 파일의 모든 행을 읽는 null |
| DataSet.data_dir | 열차/시험/추론 파일 저장 디렉토리 |
| DataSet.Train_Path | 열차 데이터 세트 파일을 저장하기위한 디렉토리 .csv |
| DataSet.test_path | 테스트 데이터 세트 파일을 저장하기위한 Direcotry .csv |
우리는 theese 매개 변수 만 변경하도록 권장합니다.
num_gpu 긍정적 인 잉곳 번호 + {0}. 0 CPU에서 훈련 / 테스트를위한 것입니다.save_period_in_epochs 긍정적 인 정수 번호, 시대의 측정.table_serialization_type "column_wise"또는 "table_wise".pretrained_model_name -pytorch pytorch의 사전 치료 모델.batch_size 모든 양의 정수 번호.num_epochs 모든 양의 정수 번호.random_seed 모든 정수 번호.start_from_checkpoint "true"또는 "false".checkpoint_name checkpoint 디렉토리에 저장된 모든 모델 이름.inference_model_name checkpoint 디렉토리에 저장된 모든 모델 이름. 그러나 최고의 모델을 사용하는 것이 좋습니다 : [model_best_f1_weighted.pt, model_best_f1_macro.pt, model_best_f1_micro.pt]를 사용하는 것이 좋습니다.dataloader.valid_split - 범위 내의 실수 [0.0, 1.0] (0.0은 열차 서브 세트의 0 %, 0.5는 열차 서브 세트의 50 %를 의미합니다). 또는 양수 정수 번호 (고정 된 수의 유효성 검사 서브 세트를 표시).dataset.num_rows "NULL"은 데이터 세트 파일의 모든 줄을 읽습니다. 양의 정수는 데이터 세트의 파일에서 읽을 라인 수를 의미합니다. 모델을 교육 / 테스트하기 전에 다음을 수행해야합니다.
├── src
│ ├── RuTaBERT
│ ├── RuTaBERT-Dataset
│ │ ├── move_dataset.sh
move_dataset.sh 실행하려면 데이터 세트 파일을 Rutabert data 디렉토리로 이동시킵니다. RuTaBERT-Dataset$ ./move_dataset.shconfig.json 파일을 구성하십시오. Rutabert는 로컬 및 내부 Docker 컨테이너 교육 / 테스트를 지원합니다. Slurm Workload Manager도 지원합니다.
RuTaBERT$ virtualenv venv또는
RuTaBERT$ python -m virtualenv venvRuTaBERT$ source venv/bin/activate &&
pip install -r requirements.txt &&
python3 train.py 2> logs/error_train.log &&
python3 test.py 2> logs/error_test.logcheckpoint 디렉토리에 저장됩니다.logs/ directory ( training_results.csv , train.log , test.log , error_train.log , error_test.log )에 있습니다.요구 사항 :
RuTaBERT$ sudo docker build -t rutabert .RuTaBERT$ sudo docker run -d --runtime=nvidia --gpus=all
--mount source=rutabert_logs,target=/app/rutabert/logs
--mount source=rutabert_checkpoints,target=/app/rutabert/checkpoints
rutabertRuTaBERT$ sudo cp -r /var/lib/docker/volumes/rutabert_checkpoints/_data ./checkpointsRuTaBERT$ sudo cp -r /var/lib/docker/volumes/rutabert_logs/_data ./logscheckpoint 디렉토리에 저장됩니다.logs/ directory ( training_results.csv , train.log , test.log , error_train.log , error_test.log )에 있습니다.RuTaBERT$ virtualenv venv또는
RuTaBERT$ python -m virtualenv venvRuTaBERT$ sbatch run.slurmRuTaBERT$ squeuecheckpoint 디렉토리에 저장됩니다.logs/ 디렉토리 ( train.log , test.log , error_train.log , error_test.log )에 있습니다. data/test 디렉토리에 데이터가 배치되어 있는지 확인하십시오.RuTaBERT$ ./download.sh table_wise또는
RuTaBERT$ ./download.sh column_wiseconfig.json 에서 테스트 할 모델을 구성하십시오.RuTaBERT$ source venv/bin/activate &&
pip install -r requirements.txt &&
python3 test.py 2> logs/error_test.loglogs/ 디렉토리 ( test.log , error_test.log )에 있습니다. data/inference 디렉토리에 데이터를 배치하는지 확인하십시오.RuTaBERT$ ./download.sh table_wise또는
RuTaBERT$ ./download.sh column_wiseconfig.json 에서 추론 할 모델을 구성하십시오RuTaBERT$ source venv/bin/activate &&
pip install -r requirements.txt &&
python3 inference.pydata/inference/result.csv 에 있습니다