Closed jagaldol closed 1 month ago
postprocess_qa_predictions 함수의 작동 과정을 완벽하게 숙지한건 아닌데
�수정하신 부분은, 모든 features에 대해 null prediction이 나와야 no answer를 최종 예측값으로 내보내는 것으로 이해했습니다.
일단 approve하고 나중에 시간될 때 더 자세히 확인해도 괜찮을까요?
로직 이해하신거 맞습니다.
만약 features가 2개 있고, 각 결과가 다음과 같습니다.
첫번째의 null: 100점
첫번째의 최고 pred: 95점
---
두번째의 null: 90점
두번째의 최고 pred: 80점
기존 로직은 위와 같은 상황에서 전부 features를 전부 합쳐 계산하기 때문에 min_null
이 90점이 되고, max_pred
는 95점이 되어 no_answer
이 아닌 첫번째의 최고 pred
를 최종예측으로 판단합니다.
개선한 로직은 위와 같은 상황에서 각각의 feature를 확인하기 때문에 첫번째에서 null이 우세함을 파악, 두번째에서도 null이 우세함을 파악하여 최종적으로 no_answer
이라고 판단 내립니다.
Summary
기존 정답이 찾을 수 없음에 대한 로직을 개선하였으며
<no_answer>
출력 여부를--use_no_answer
로 설정 가능하게 개선하였습니다.Description
로직 개선
하나의 데이터로 부터 최대길이 문제로 인해 여러개로 나눠진 context에 대한 처리가 기존 로직은 다음과 같습니다.
min_null
값보다 작은 경우<no_answer>
로 판단개선한 로직은 다음과 같습니다.
<no_answer>
로 판단성능 평가
train.py
를 사용하여 mrc에 대해서만 evaluation을 했을 때의 성능 비교입니다.--use_no_answer
사용하지 않은 경우--use_no_answer
사용(로직 개선 전)--use_no_answer
사용(로직 개선 후)inference.py
를 사용하여 전체 파이프라인에 대해train_dataset
전체를 평가할 때의 결과입니다.--use_no_answer
사용하지 않은 경우--use_no_answer
사용(로직 개선 전)--use_no_answer
사용(로직 개선 후)모델이
no_answer
라고 판단을 내렸더라도 그다음으로 예측된 단어를 결과로 가져오는게 점수 측면에서는 당연하게도 도움이 됩니다. 따라서--use_no_answer
를 사용하면 score가 내려가게됩니다.이외에 로직 개선 후
--use_no_answer
에서의 성능 증가를 기대하였지만, 현재 데이터셋으로는 해당 edge case는 발생하지 않아 성능 변화를 확인 할 수 없었습니다.--use_no_answer
잘못된 문서를 가져왔을 때의 MRC 모델의 예측 결과 분석을 하고 싶어를 출력하게 하고 싶다면 아래와 같이 실행할 수 있습니다.
단순히 기존 명령어에
--use_no_answer
를 붙이기만 하면<no_answer>
모드로 동작하게됩니다.Related Issue
Issue Number: #11