코드 유사성 판단 시즌2 AI 경진대회

알고리즘 | 월간 데이콘 | NLP | 유사도 | Accuracy

  • moneyIcon 상금 : 인증서
  • 308명 마감

 

[Private 1위, 0.9911] GraphCodeBERT + UniXcoder

2024.04.02 21:26 449 조회 language

안녕하세요 :)

GraphCodeBERT와 UniXcoder 모델을 soft voting ensemble하여 사용했습니다. 

Negative Sampling은 BM25Plus를 사용했습니다.

학습 데이터의 개수는 다음과 같습니다.
frac: 0.01, 약 1M
frac: 0.02, 약 2M 

* single model 
- GraphCodeBERT (frac: 0.01) / pl: 0.98831, pr: 0.98859
- GraphCodeBERT (frac: 0.02) / pl: 0.98892, pr: 0.98909
- UniXcoder (frac: 0.01) / pl: 0.98911, pr: 0.98942

* ensemble model
- GraphCodeBERT(frac: 0.02)+ UniXcoder(frac: 0.01) / pl: 0.99084, pr: 0.99111

NVIDIA A100(40GB) X 2을 사용하여 학습했습니다.

최종 code 및 자세한 내용은 github를 참고해 주시기 바랍니다.
https://github.com/GNOEYHEAT/CodeSim_cpp

감사합니다.

PDF
코드
로그인이 필요합니다
0 / 1000
고세구
2024.04.02 21:59

단일 모델 similar 구하실 때
np.where(preds>0, 1, 0)
이 코드로 구하셨나요 ??

GNOEYHEAT
2024.04.02 22:12

네! 위의 code로 계산했습니다!!

GraphCodeBERT(frac:0.02, cv:5), UniXcoder(frac:0.01, cv:5) 총 10개의 모델을 앙상블 했습니다.
단일 모델과 앙상블 모델 모두 threshold는 따로 조정하지 않았습니다.

GraphCodeBERT는 text_len를 512로, UniXcoder는 text_len을 1024로 학습하였습니다.

Sampling parameter frac의 값이 다르고 stratified k-fold를 사용한 앙상블 모델이기 때문에 각 모델이 학습하는 데이터는 차이가 있습니다.

validation 경향이 일치하고 분포를 확인했을 때 특이점을 발견하지는 못했습니다.
private 비율이 높아서 threshold를 조정할 생각은 하지 않았습니다!

고세구
2024.04.02 22:23

label이 0과1이면 예측을 할때 threshold를 0.5로 두는게 조정하지 않는 것이라고 생각해 질문 드렸습니다. 상세한 답변 감사합니다 ! 
이번대회에서 성능에 가장 영향을 미친게 이 부분인 것 같네요

GNOEYHEAT
2024.04.02 22:35

손실 함수로 BCEWithLogitsLoss를 사용했습니다!
output layer에 sigmoid 함수를 사용하지 않고 계산했기 때문에 치역은 구간 [0, 1]이 아닙니다.

때문에, threshold를 0 값으로 산술평균 했습니다!

질문 감사합니다 고생하셨습니다 :)

고세구
2024.04.02 23:14

아 BCEWithLogitsLoss로 모델을 학습시키면 output이 sigmoid에 넣은 것처럼 나오니 sigmoid에서 y가 1/2이 되는 0을 기준으로 예측하신 거군요.. 이해됐습니다.. 감사합니다..