참고한 대회 솔루션
NBME - Score Clinical Patient Notes | Kaggle
www.kaggle.com
NBME - Score Clinical Patient Notes | Kaggle
www.kaggle.com
선 결론 후 내용
이전의 캐글에서도 느꼈지만 높은 점수를 내는 사람은 굉장히 많은 시도 후 피드백 과정을 통해서 성능을 검증하고, 점수를 축적해 나간다. 특히 어떠한 결과가 높은 성능을 나타냈다는 것을 기록한다는 것은, 1개의 변화마다 성능을 테스트 하고 검증한다는 것을 뜻한다.
크게 구분하면 피처 엔지니어링, 모델의 설계, 모델의 학습, 예측 정도로 나눌 수 있다.
피처엔지니어링 부분에서는 데이터, 도메인, 그리고 annotator에 대한 3단계에 대한 이해도를 높힌 상태에서 접근하는 것이 바람직하며, 특히 도메인에서 사용되는 약어에 대한 전처리를 신중하게 처리하며, 추후 학습 시킬 것에 대비하여 같은 의미이나 다르게 표현되는 text에 대해서 경우의 수를 줄이기 위한 전처리 기법이 인상 깊었다.
모델의 설계에서 우선 공통적으로 bert 계열에서 deberta가 어느정도 높은 성능을 보장하는 듯 하다. 대체로 다들 deberta 버전을 쓰거나, minor 하게 roberta-large 계열을 사용하는 것을 볼 수 있었고, 한번 학습을 마친 모델을 통해 다양한 방법으로 예측값을 뽑아내고, 확률 값에 따라 활용하는 방법이 인상깊었다.
모델의 학습에서, 우선 기본적인 대형 pretrain 모델을 다시 도메인에 맞게 pretrain 시켰으며, 이 때 해당하는 Task의 데이터셋을 활용해 pretrain 하는 방법, 또는 해당 Task 도메인에 맞는 대형 데이터셋을 가져와 pretrain 하는 방법 등을 활용하는 것이 인상 깊은 점이라 볼 수 있었다. 또한 정확하게 수치상의 표현은 없었지만 데이터셋의 크기와, 모델의 크기가 다를 경우 특히 overfit 또는 underfit 등의 우려를 더 크게 하는 점을 보아, 적합한 규모에 대한 적절한 기준을 알 수 있다면 추후 base 또는 large 모델의 선정에 있어 최적의 모델을 찾을 수 있을 것으로 보인다. 이후, finetune 된 모델을 학습 되지 않은 데이터 셋에 예측 후, 높은 수준의 확률을 보이는 데이터를 활용해 재학습을 이뤄내는 것도 성능에 유리하게 작용할 것으로 보인다. Auxiliary Target Learning(보조 목표 학습) 분야에 대해선 생소함이 있어서 추가적으로 학습할 필요가 있는 분야이다.
국내에서는 최근 KM-BERT-Korean-Medical-BERT 라는 의료 데이터를 학습한 BERT가 있는데, 특정 데이터 셋에 대해서 roberta 계열로 pretrain 한 것과 비교해서 더 좋은 성능을 내는지 검증해보면 흥미로운 비교 분석이 될 것이다.
예측의 부분에서도, 예측한 것을 단순히 argmax 해버리는 것이 아닌, 확률값 조절에 따라 다양한 결론을 낼 것이며, 기본적으로 다들 k-fold 학습을 적용하였고, 특히 5fold를 했을 때와, 그리고 10fold를 했을 때의 성능 향상이 있었던 점 또한 독특하다고 볼 수 있다. 물론 학습 데이터의 양이 늘었기 때문에 그럴 가능 성이 높다고 볼 수 있다. 이 후 fold 된 가중치들에 대해서도 한번 더 가중치를 조절해 blend 시키는 것 또한 굉장히 인상깊었다. 각 모델의 결과를 계속해서 수집한 후, cv, pb 결과 등에 따라서 조합하는 과정까지, 마지막까지 정말 섬세하게 좋은 결과를 얻기 위해 노력하는 모습에서 진정한 엔지니어의 모습을 다시 한번 체감할 수 있었다.
1. 데이터 특징
- 레이블된 데이터와 레이블 되지 않은 데이터 모두 제공( 레이블 되지 않은 데이터가 10배 ) -> 비지도 학습의 적용 여부가 굉장히 중요해질 수 있는 문제
- 주석의 일관성이 없음 ( 데이터 품질의 문제 )
- annotator의 특징을 보았을 때, 시퀸스 종속성이 있고, 이는 RNN을 사용하는 것이 합리적일 수 있음 ( annotator의 주석 다는 것의 특징까지 분석한 것이 인상적 )
- 대소문자 혼용 사용 ( 문자의 차이로 발생하는 의미 차이가 없는 것을 확인 후 소문자 적용 )
- 의학적인 약어 사용 ( 약어를 풀어서 쓰는 것을 고려했으나, 토크나이징 복잡도 우려로 패스 )
- 같은 내용이나 의미 없는 대소문자 차이 존재 ( 복잡도 감소를 위한 전처리 적용 )
- yom, yof 는 year of male, year of female 등의 약어 사용 ( 전처리를 통한 의미부여 )
2. 모델 특징
핵심은, deberta 모델이 높은 성능을 냈으며, deberta-v2-xlarge, v3-large 등에서는 성능차이가 거의 나지 않음. 비교 해볼 필요가 있음. 무조건 v3가 높은 성능을 낼지는 알 수 없음
1등의 모델 파이프라인
2등
- deberta-large, deberta-v3-large, deberta-v2-xlarge, roberta-large 등의 pretrain 모델 사용
- 데이터 크기에 비해 모델의 크기가 크므로, 과적합 등의 문제를 해결하기 위해 5개의 dropout과 classification head 사용
- linear와 dropout을 함께 사용해 모든 hidden states 가 학습하도록 설계
- annotator의 특성을 반영하기 위해 head 전에 RNN, GRU, LSTM 등의 레이어 추가
3. 모델 학습
1등, 2등 모두 pretrain을 도메인 adaptive 하게 적용했는데, 1등은 학습데이터에 pretrain을, 2등은 외부 squad 데이터셋을 가지고 온 것이 특징이며, 1등은 MLM을, 2등은 허깅페이스 트랜스포머의 run_qa 스크립트로 학습.
2등
- Squadv2 dataset에 사전 학습을 시킴 ( 데이터의 형태가 QA를 닮았으며, 의사 질문에 답변하는 방식이 적합 )
- 실제로 해당 데이터 셋으로 사전학습 후에 downstream task를 했을 때 좋은 효과를 얻었음
- 코사인 및 웜업(과 유사한) 스케쥴러 및 아담W 옵티마이저 사용
- 10% masked token
4. 모델의 사용
1등 2등 둘다 학습한 모델로 레이블 되지 않은 데이터에 pseudo labeling을 한 것이 특징
- 학습한 모델로 레이블링 되지 않은 데이터 예측
- focal loss와 BCE 적용 차이 확인 후, focal loss가 더 결과가 좋은 이유에 대한 확인
- 4fold로 finetuning
'23년 이전 글 > Kaggle' 카테고리의 다른 글
캐글로 알게 된 10가지 (0) | 2022.03.17 |
---|---|
캐글 대회간 참조할 링크 (0) | 2022.01.18 |
[upstage] 캐글 그랜드 마스터 발표 정리 (0) | 2022.01.16 |