월간 데이콘 한국어 문장 관계 분류 경진대회

알고리즘 | NLP | 분류 | 자연어 | Accuracy

  • moneyIcon 상금 : 100만원 + α
  • 1,326명 마감

 

Private 3등 |0.89915| 1. Bart Noise 3-way+BackTrans

2022.03.04 15:43 2,070 조회 language

안녕하세요 Maximalizm입니다.

이번 코드부터는 모델 학습 관련 코드들이 업로드됩니다.
최종적으로 사용한 모델의 구조는 4가지의 다른 모델이 Hard Voting된 구조인데, 그 중 첫번째 모델에 대한 코드입니다.
(이번 코드의 모델은 Public Score 기준 : 0.902입니다)

개인적으로 HyperParameter 측면에서는 그리 특별한 부분이 없다고 생각됩니다. 코드를 참고해주시고 궁금하신 점이 있으시면 질문 주시면 감사하겠습니다.
이번 모델의 차별화 전략은
- KLUE Official Dev Data를 그대로 학습에 사용하지 않고, Validation Data에 추가하여 학습을 수행하였다는 점입니다.
- 구체적으로는 Noising Augmentation이 가해진 데이터 4종류를 Train에 추가하고, 본래의 형태인 KLUE Official Dev Data를 Validation에 추가하였습니다.
- 이를 통해 Noising에 Robust한 모델을 구축하고자 했습니다.
- 5-Fold Soft Ensemble 을 사용하였습니다.


##### 모든 모델 학습 코드는 Colab Pro 환경에서 진행되었습니다 #####

---------------------------------------------------------- 공유 코드 링크-------------------------------------------------------------
0. Data Augmentation
    - https://dacon.io/competitions/official/235875/codeshare/4625?page=1&dtype=recent

코드
로그인이 필요합니다
0 / 1000
Maximalizm
2022.03.05 06:59

모델 학습에 사용한 데이터 목록 드라이브 링크로 공유드립니다.
https://drive.google.com/drive/folders/1K67vWdntZ65lq0T1KMw4sH62RPkV8LOc?usp=sharing

FENDI
2022.03.08 23:48

안녕하세요
지식과 코드 수준이 정말 뛰어나시네요.. 
정말 잘 봤습니다!
혹시 작성해주신 부분을 보면
- Noising Augmentation이 가해진 데이터 4종류를 Train에 추가하고, 본래의 형태인 KLUE Official Dev Data를 Validation에 추가하였습니다.
- 이를 통해 Noising에 Robust한 모델을 구축하고자 했습니다.
와 같은 전략을 취하셨다고 하셨는데,

1. 실례가 안된다면 어떻게 이런 아이디어를 시도하게 되었는지 과정을 여쭙고 싶습니다..!
2. KLUE Official Dev Data을 Validation이 아니라 함께 Train 에 추가하는 것은 시도를 해보셨는지, 그리고 혹시 시도해보셨다면 성능의 차이는 어땠는지 궁금합니다

답변 미리 감사합니다 ㅎㅎ

Maximalizm
2022.03.11 15:18

안녕하세요 FENDI님
좋은 질문 해주셔서 감사합니다.

1. 실례가 안된다면 어떻게 이런 아이디어를 시도하게 되었는지 과정을 여쭙고 싶습니다..!
A) 아래에서 2번의 질문에 대한 답변 중 iii) 케이스를 보시면 그 이유가 더 상세하게 이해되실 것 같습니다.
우선 간단히 설명드리자면, Noise Augmentation을 진행한 데이터만을 가지고 학습하면서, 원본 데이터가 주어졌을 경우에 정답을 맞추어야 모델이 일반화된 성능을 가질 수 있을 것이라 판단했기 때문에 위와 같은 전략을 시도했습니다.

Maximalizm
2022.03.11 15:17

2. 
A) 네 시도해보았습니다. 해당 부분은 여러가지 케이스로 나누어서 실험해보았는데요. 경우에 따라 나누어 결과 공유드리겠습니다

i) 따로 Augmentation없이 KLUE Official Dev Data만을 KFold Split 전에 학습데이터에 추가하는 방법
- 기존 Dacon 제공 데이터셋만 사용했을 때보다 Public Score 기준 0.008 상승 (대략 0.881 => 0.889)

ii) 따로 Augmentation없이 KLUE Official Dev Data만을 KFold Split 후에 학습데이터에 추가하는 방법
- 전략 i)와 비슷한 수준의 Public Score를 보임

iii) Augmentation을 적용한 데이터와 KLUE Official Dev Data 모두 학습데이터에 추가하는 방법
- i)와 ii)보다 Public Score 기준 소폭 상승 (대략 0.001 정도)
- 원본데이터와 Noise가 가미된 데이터가 함께 학습에 사용되다 보니, 손상된 데이터의 원본을 모델이 알고 학습을 진행하게 되었던 것 같습니다.
- 이런 학습 방식을 가져가게 되면 결국 손상된 데이터를 통해 모델의 일반화 성능을 도모하려던 전략이 의미가 없어지게 된 것은 아닐까 살짝 의구심이 들었습니다.

iv) Augmentation을 적용한 데이터는 학습데이터에 추가, KLUE Official Dev Data는 Validation Set에 추가하는 방법
- i)와 ii)보다 유의미한 성능 향상을 가져다 주었습니다. (Public Score 기준 0.008 상승)
- 이후 다양한 Noise Augmentation 종류의 데이터들을 바꾸어 추가해가며 비교 실험하였고, 현재 노트북 코드에 있는 데이터들을 사용하였을 때 가장 높은 Public Score인 0.902를 기록하게 되었습니다.

Maximalizm
2022.03.11 15:18

각 케이스 별로 나머지 컨디션들은 최대한 통제하려 노력하면서 시도한 실험 비교 결과이지만, 수많은 반복실험을 거친 것은 아니기 때문에 높은 신뢰도를 가지는 결과는 아닐 것입니다. 따라서 참고만 해주시면 감사하겠습니다 
(1000자 제한이라 여러 개의 댓글로 나누어 답변드리게 되었습니다 ㅎㅎ)

한강
2022.03.07 01:26

코드를 보다 궁금한 점이 있어 질문드립니다

이 train 노트북에서 random_masking_df 함수를 사용한 부분을 2가지 발견할 수 있었고, 각각 함수의 인자가 다르게 들어가 있는 것을 확인했는데요
random_masking_df 함수는 어떤 역할을 하게 되는지 간단하게라도 설명해주시는게 가능하실까요?

* load_data_from_file_lst(args, tokenizer, file_lst) 함수 중에서,
random_masking_df(concat_dataset, tokenizer, threshold=1.0)

* train() 함수 코드 중에서,
train_data = random_masking_df(train_data, tokenizer, threshold=0.3)

Maximalizm
2022.03.11 15:19

안녕하세요 한강님
해당 함수 random_masking_df 는 
이전에 공유드렸던 코드에서 그 적용결과를 보실 수 있으십니다.
https://dacon.io/competitions/official/235875/codeshare/4625

간단히 설명드리자면, 해당 함수가 적용되면 Premise와 Hypothesis 각각 문장에 Random Masking을 취합니다.
그리고 threshold는 전체 데이터 셋 중 어느 정도 비율의 row에 해당 Random Masking을 취할 지를 결정하는 인자입니다.

말씀주신대로 threshold를 1.0으로 적용한 데이터들도 존재합니다.
이에 대한 이유는 해당 데이터들이 Augmentation이 적용되었지만 원본 데이터의 정보를 너무 많이 가지고 있기 때문에 모든 Rows에 대하여 Masking을 취해준 것이라고 이해해주시면 될 것 같습니다.

좋은 질문 감사합니다 ㅎㅎ

백소현
2022.03.07 15:05

올려주신 코드들 대부분 첨 보는 아이디어들이 정말 많네요
혹시 NLP 쪽 경력이 있으신 분인가요?

Maximalizm
2022.03.11 17:51

안녕하세요 소현님.
경력은 따로 없고, 현재 NLP 업무를 다루는 인턴으로서 재직 중에 있습니다.
리서치 중심의 공부는 대부분 개인적으로 하고 있어 아이디어와 기술적인 측면에서 아직 많이 부족하다고 생각하고,
개인적으로 이번 대회 실력자 분들의 코드 공유에 많이 배워가는 것 같습니다.

honghansol
2022.07.21 12:39

감사합니다