KorSciDeBERTa 환경 설치 & 파인튜닝
[참고] Deberta-native (github)
https://github.com/microsoft/DeBERTa
KorSciDeBERTa-native 설치
- 추후 모델 제출시 결과 재현을 위해 아래 환경 파일 생성 후 동봉 요망
- conda env export > deberta.yaml
- pip freeze > requirements.txt
#아래 명령을 순서대로 실행하면서 에러 확인
git clone https://huggingface.co/kisti/korscideberta; cd korscideberta; unzip korscideberta.zip -d korscideberta; cd korscideberta
conda create -n deberta python=3.8 --quiet --yes
#conda init bash; source ~/.bashrc
#파이썬 3.8~3.9(3.10 미지원). torch 1.10(1.13이상 미지원)
conda activate deberta; pip3 install -r requirements.txt; pip install --upgrade nltk; pip uninstall -y torch torchtext torch-tensorrt; pip install --upgrade pip; pip install torch==1.10.1+cu111 torchvision==0.11.2+cu111 torchaudio==0.10.1 -f https://download.pytorch.org/whl/cu111/torch_stable.html --default-timeout=100; pip install setuptools_scm six mlflow; pip install "numpy<1.24.0"; pip install .
#pip설치 안될 시 kakao 서버 이용
#pip install six mlflow -i http://ftp.daumkakao.com/pypi/simple --trusted-host ftp.daumkakao.com; pip install "numpy<1.24.0" -i http://ftp.daumkakao.com/pypi/simple --trusted-host ftp.daumkakao.com; pip install -r requirements.txt -i http://ftp.daumkakao.com/pypi/simple --trusted-host ftp.daumkakao.com; pip install --upgrade nltk i http://ftp.daumkakao.com/pypi/simple --trusted-host ftp.daumkakao.com; pip install .
mecab 설치
- cd mecab
- bash <(curl -s https://raw.githubusercontent.com/konlpy/konlpy/master/scripts/mecab.sh); cd mecab-0.996-ko-0.9.2;
- chmod 775 ./configure; ./configure; make; chmod 775 tests/*.sh; make check; make install
(권한 에러시 sudo 사용 버전) sudo chmod 775 ./configure; ./configure; make; sudo chmod 775 tests/*.sh; sudo make check; sudo make install
- make 에러 발생 사례 및 해결
- (make 에러 및 해결법)
- make 에러 발생 사례 및 해결
에러 1:
libtool: Version mismatch error. This is libtool 2.4.2 Debian-2.4.2-1ubuntu1, but the
libtool: definition of this LT_INIT comes from libtool 2.4.6.
libtool: You should recreate aclocal.m4 with macros from libtool 2.4.2 Debian-2.4.2-1ubuntu1
libtool: and run autoconf again.
해결법:
autoreconf --force --install; ./configure; make
에러 2:
configure.in:23: error: required file './compile' not found
configure.in:23: 'automake --add-missing' can install 'compile'
configure.in:6: error: required file './missing' not found
configure.in:6: 'automake --add-missing' can install 'missing'
* * * (make 에러 2 발생시 아래를 실행 후 재시도) * 해결법 * apt-get install automake perl; apt-get update; apt-get upgrade; apt install build-essential automake dh-autoreconf libusb-1.0-0-dev cmake g++; apt-get install libtool; automake --add-missing; autoreconf; [autogen.sh](http://autogen.sh/); make clean * (sudo 사용 버전) sudo apt-get install automake perl; sudo apt-get update; sudo apt-get upgrade; sudo apt install build-essential automake dh-autoreconf libusb-1.0-0-dev cmake g++; sudo apt-get install libtool; automake --add-missing; autoreconf; [autogen.sh](http://autogen.sh/); make clean * 대처 이후에도 에러 사례
make[2]: *** [Makefile:559: install-libLTLIBRARIES] Error 1
make[2]: Leaving directory '/home/work/DeBERTa/mecab/mecab-0.996-ko-0.9.2/src'
make[1]: *** [Makefile:761: install-am] Error 2
make[1]: Leaving directory '/home/work/DeBERTa/mecab/mecab-0.996-ko-0.9.2/src'
make: *** [Makefile:515: install-recursive] Error 1
* * * #Cmake 없는 경우 설치 방법 * [https://mong9data.tistory.com/124](https://mong9data.tistory.com/124)
###2. mecab-ko-dic 설치
cd ../mecab-ko-dic-2.1.1-20180720; chmod 775 ./autogen.sh; ./autogen.sh; ./configure; make
(sudo 사용 버전) cd ../mecab-ko-dic-2.1.1-20180720; sudo chmod 775 ./autogen.sh; ./autogen.sh; ./configure; make
- 갱신할 내용이 없는 경우에는 "make: Nothing to be done for 'all'." 출력됨
* ###3. 사용자 사전파일을 user-dic 폴더로 복사 & 설치
- cp ../pa* ./user-dic/; chmod 775 ./tools/add-userdic.sh; ./tools/add-userdic.sh; make install
- (sudo 사용 버전) cp ../pa* ./user-dic/; sudo chmod 775 ./tools/add-userdic.sh; ./tools/add-userdic.sh; sudo make install
- 수 분 소요됨
* ###4. 설치 확인법
- mecab -d /usr/local/lib/mecab/dic/mecab-ko-dic
- 곧바로 콘솔에 '원천기술' 타이핑하여 입력시 원천 / 기술로 나누어지지 않고 원천기술로 출력되면 정상 설치(Ctrl+C로 나가기)
- 구동부 입력시 구동/부 가 아닌 구동부
- cd ../..
- ###5. 설치 중/후 문제 발생시 아래 명령어 실행 후 상기 설치 재확인
- pip install mecab-python3; apt-get install mecab mecab-ipadic-utf8 libmecab-dev swig; bash <(curl -s https://raw.githubusercontent.com/konlpy/konlpy/master/scripts/mecab.sh)
- (sudo 사용 버전) pip install mecab-python3; sudo apt-get install mecab mecab-ipadic-utf8 libmecab-dev swig; bash <(curl -s https://raw.githubusercontent.com/konlpy/konlpy/master/scripts/mecab.sh)
학습
주제분류 학습
conda activate deberta
cd korscideberta/experiments/glue; chmod 777 *.sh;
(학습 실행) ./mnli.sh
: mnli.sh 내에서 tag=1575000ntis1tier 에 학습된 모델 등을 출력할 폴더명을 지정
(모델 경로) init="checkpoint0324/pytorch.model.bin"
(최신 체크포인트) init="korscideberta/pytorch_model.bin"
(OOM시) train_batch_size를 64 ➝ 32로 변경하여 해결
(입력) glue_tasks/MNLI/train.tsv, test_matched.tsv, dev_matched.tsv
: glue_tasks 하위폴더에 MNLI-ntis3tier(소분류), MNLI-ntis2tier, MNLI-ntis1tier(대분류)와 같이 학습 데이터가 준비되어 있고,
실제 학습은 'MNLI'폴더 데이터가 이용되므로 학습할 데이터 폴더를 'MNLI'로 수동으로 바꾸어 주어야 함.
10-fold를 구현하려면 10개의 학습 데이터를 준비해 놓고, 기준 'MNLI'폴더 대신 10-fold 학습데이터 폴더를 조회하도록 변경해야 함.
(입력 데이터 설명)
premise, hypothesis = 원본 mnli태스크에서 문장1, 문장2
현 태스크에서는
premise = 제목+저널명+서론
hypothesis = 빈칸
RCMN = 정답 레이블,
top1-3 = 예측 레이블
label = 분류 학습할때 쓰이는 라벨명(대/중/소 선택)
label2tier = 사용하지 않음
acc = 3개중에 2개 맞았으면 2
(출력-모델 파일) out/157500ntis1tier/pytorch.model-001673.bin
(학습 스크린샷)
주제분류 추론, 평가
추론
(추론 실행) mnli-pred.sh
: 추론 시행 후, 학습시와 동일하게 tag= 에서 지정한 출력폴더에 레이블별 추론 확률을 저장함.
(입력) 테스트 데이터 glue_tasks/MNLI/test_matched.tsv
(확률값 출력) out/1575000ntis1tier-test/test_logits_matched_1575000ntis1tier-test.txt
: out/$tag/test_logits_matched_$tag.txt
[첨부]
평가 준비
(평가 준비) eval/3testlogitstsvTestonlyTotop3.ipynb
: 예측 확률값을 예측 레이블로 바꿈
(입력) tier = 1(대분류)
테스트 데이터: filename = 'MNLI-ntis1/test_matched.tsv'
학습했던 데이터: trainlabelfile = 'MNLI-ntis1/train.tsv'
확률값 파일: probfile = 'MNLI-ntis1/test_logits_matched_1575000ntis1tier-test.txt'
(출력)
outfile = 'MNLI-ntis1/20230607_debertaTier1test.tsv'
: tsv 파일로, 다음 컬럼에 정답 레이블과 예측 레이블 코드 리스트가 출력됨. [5,6,7], [12,13,14]
(출력 예)
Klue/Glue 벤치마크 학습
cd experiments/glue;
chmod 777 *.sh; export CUDA_VISIBLE_DEVICES=0; ./stsb-glue.sh
chmod 777 *.sh; ./mnli.sh
chmod 777 *.sh; export CUDA_VISIBLE_DEVICES=0,1; ./ner-dp.sh
chmod 777 *.sh; export CUDA_VISIBLE_DEVICES=0,1; ./record.sh
chmod 777 *.sh; export CUDA_VISIBLE_DEVICES=0,1; ./cola.sh
chmod 777 *.sh; export CUDA_VISIBLE_DEVICES=0,1; ./cola.sh