- 리랭커는 binary classification task를 수행하는 모델
- Binary classification은 주어진 입력 데이터를 두 가지 범주 중 하나로 분류하는 작업
- 리랭커는 주로 sigmoid 함수를 적용한 후, BCE(Binary Cross-Entropy) 손실 함수를 사용하여 학습
- Sigmoid 함수는 입력 값을 0과 1 사이의 확률 값으로 변환해 주는 함수
- BCE 손실 함수는 예측된 확률 값과 실제 레이블 간의 차이를 계산하여 모델의 오차를 측정
- Threshold에 대하여 출력값 자체로는 0.5라는 값 자체에 특별한 의미가 있다고 보기 어렵지만, 학습 과정에서 사용되는 sigmoid 함수와 BCE 손실 함수의 특성 상 0.5라는 값이 두 범주를 구분하는 기준점으로 해석될 수 있음
- Hard negative mining: 첫 단계 모델에서 생성된 데이터셋을 사용하여 모델을 파인튜닝. 이 데이터셋은 모델이 구분하기 어려운 부정적인 샘플(hard negatives)을 포함하고 있어, 모델의 성능 향상에 도움을 준다.
- Group-wise training: 그룹 크기를 16으로 설정하고, 그룹 내에서 positive:negative 비율을 1:15로 유지하며 학습을 진행합니다. 이는 모델이 더 다양한 negative 샘플을 학습할 수 있도록 돕는다. 목적 함수와 평가 지표로는 Group CCE(Categorical Cross-Entropy) 또는 LCE(List-wise Cross-Entropy)를 사용할 수 있다.
- 입력 시퀀스의 최대 길이는 512로 설정되며, 학습 속도 향상을 위해 Mixed precision(FP16)을 사용합니다. 데이터 증강 기법으로 질문과 인용구를 무작위로 증강하며, 기울기 체크포인팅(Gradient Checkpointing)을 사용하여 메모리 사용량을 줄인다. 데이터 증강 기법은 더 테스트해볼 수 있다.
- 배치 크기는 384(24 * 16)로 설정된다. 추론 시에는 Full FP16과 Flash Attention을 사용하는 것이 좋고, 입력 시퀀스를 1024로 늘리기 위해서는 FP16/BF16 정밀도와 flash attention을 사용하는 버전이 필요하다. 다양한 데이터 증강 기법을 활용하면 성능 향상에 큰 도움이 될 수 있다.
- scale_similarity: 주어진 코사인 유사도 점수를 특정 범위로 조정. 입력으로 받은 유사도 점수 x가 임계값 threshold 미만인 경우, 기준값 baseline을 기준으로 선형적으로 조정됩. 유사도 점수가 임계값 이상인 경우에는 baseline과 1 사이의 값으로 조정. 이를 통해 유사도 점수를 특정 범위 내에서 더 의미 있는 값으로 변환.
- calibrate_similarity_score 함수는 scale_similarity 함수를 사용하여 모델별로 유사도 점수를 조정합니다. 각 모델은 고유한 유사도 분포를 가지고 있으므로, 모델에 따라 적절한 임계값과 기준값을 설정하여 점수를 조정합니다. 예를 들어, ko_roberta_large 모델의 경우 관련 문서의 유사도는 0.3에서 0.7 사이에 분포하고, 그 외의 문서는 0.1에서 0.3 사이에 분포하므로, 임계값을 0.3으로 설정하고 기준값을 0.5로 설정하여 점수를 조정. cohere reranker 는 semantic 하지 않은 무언가의 값으로 추청해서 오히려 알 수가 힘들어서 제외. semantic 하지 않다 보다는 점수의 근거를 알 수 없다.
- get_trust_score 함수는 검색 결과 후보들 중에서 최종 신뢰도 점수를 계산. 함수는 먼저 최상위 리랭커 점수를 확인하여, 이 점수가 reranker_threshold 이상인 경우 해당 점수를 그대로 신뢰도 점수로 반환. 그렇지 않은 경우, 각 후보의 검색 점수를 calibrate_similarity_score 함수를 사용하여 조정하고, 그 중 최댓값을 최종 신뢰도 점수로 반환.