본문 바로가기
Natural Language Processing/Github 훑어보기

[Code review] Sentence-Transformers 상세 기능

by beeny-ds 2022. 7. 8.

Sentence-Transformers (UKPlab)

Sentence embedding 관련 패키지 리서치 중 Sentence-Transformers Github 코드를 자세히 살펴볼 기회가 생겼다. 
해당 패키지의 구조부터 자세한 상세 기능, 그리고 BERT 모델 사용 시 HuggingFace Transformers 와의 호환성까지 살펴보려 한다.

 

Sentence-Transformers > Loss

  1. BatchAllTripletLoss
  2. BatchHardSoftMarginTripletLoss
  3. BatchHardTripletLoss
  4. BatchSemiHardTripletLoss
  5. ContrastiveLoss
    • 두 emb. vector 간 거리(유클리드, 코사인, 맨하탄)를 구해서 아래와 같이 계산
      • losses = 0.5 * (labels.float() * distances.pow(2) + (1 - labels).float() * F.relu(self.margin - distances).pow(2))
    • 데이터셋이 Binary class일 때만 사용 가능
    • input: sentence1, sentence2, label (binary class)
  6. CosineSimilarityLoss
  7. DenoisingAutoEncoderLoss
    • This loss expects as input a batch consisting of damaged sentences and the corresponding original ones → Input 형태로 (원문, 약간 변형된 원문)의 pair로 구성하는 것으로 보여짐
  8. MegaBatchMarginLoss
    • triplet과 구조는 같으나 negative 샘플을 어떻게 선택하는지 약간의 차이가 있음
  9. MarginMSELoss
    • gold sim이 필요 → 얼마나 유사한지 score값이 label에 있어야 하는 것으로 보임
  10. MSELoss
    • multilingual 모델을 만들때 새로운 언어를 확장하기 위한 목적으로 만든 loss
  11. MultipleNegativesRankingLoss
    • positive pair로만 input 데이터를 구성
    • pair외에 문장은 전부 negative로 취급함
    • label 없음
  12. OnlineContrastiveLoss
    • 계산 방식은 ContrastiveLoss와 거의 동일 ([pos or neg] distance 구하는 방식이 살짝 다름)
      데이터셋이 Binary class일 때만 사용 가능
    • input: sentence1, sentence2, label (binary class)
  13. SoftmaxLoss
    • SoftmaxLoss: loss는 아래와 같이 계산
      • loss = softmax(W_t(u, v,|u-v|))
    • 데이터셋이 Binary class일 때 + Multi class 일 때 모두 사용 가능
    • input: sentence1, sentence2, label
  14. TripletLoss
    • loss는 anchor와 pos는 가깝도록, anchor와 neg는 멀도록 구성
      • max(||anchor - pos|| - ||anchor - neg|| + margin, 0)
      • input: anchor(=standard sentence), pos_sentence, neg_sentence

 

Sentence-Transformers > evaluator

  1. BinaryClassificationEvaluator
    • (두 문장이) 유사하다 vs 유사하지 않다 → 이진 분류
    • input: sentence1, sentence2, label
    • output: cos sim, distance(유클리드, 맨해튼), metrics
      metrics list: accuracy, f1, recall, precision, acc_threshold, f1_threshold, ap(average precision score)
  2. EmbeddingSimilarityEvaluator
    • gold label과 비교하여 상관 관계 계산(스피어만, 피어슨)
      임베딩 sim 기반 모델 평가 → sts
    • input: sentence1, sentence2, score(=gold label)
    • output: cos sim, distance(유클리드, 맨해튼), metrics
      스피어만, 피어슨 상관 관계 (스피어만 맨해튼, 스피어만 유클리드, etc…)
  3. InformationRetrievalEvaluator
    • 정보 검색 설정 평가
  4. LabelAccuracyEvaluator
    • label이 있는 데이터셋 accuracy 측정
      Loss function이 있는 모델을 해당 class에 넣어 사용해야 됨
      Loss: SoftmaxLoss class를 evaluate 객체 만들 때 인자로 사용
    • input: sentence1, sentence2, label
    • output: accuracy
  5. MSEEvaluator
    • 임베딩 사이의 MSE(x100) 계산
    • input: source_sentences, target_sentences
    • output: mse
  6. MSEEvaluatorFromDataFrame
    • MSEEvaluator와 동일
  7. ParaphraseMiningEvaluator
    • 큰 문장 세트가 주어지면, 이 평가자는 패러프레이즈(중복) 마이닝을 수행하고 유사성이 가장 높은 쌍을 식별. 추출된 패러프레이즈 쌍을 비교
      gold label 사용하여 F1 점수를 계산
  8. RerankingEvaluator
    • re-rank task 위한 평가
    • input: query, positive, negative sentences
    • output: mean mrr score, mean ap score
  9. SentenceEvaluator
    • 모든 evaluator의 기본 class
      • 이 class를 확장하고 사용자 지정 evaluator를 위해 __call__ 메서드 구현
      • 다른 모든 evaluator에서 이 class를 사용하고 있음 (ex. class ~~(SentenceEvaluator))
      • SentenceEvaluator 내부에는 별 기능 없음 just format
  10. SequentialEvaluator
    • 이것도 9번처럼 format 제공용 class
  11. TranslationEvaluator
    • 번역된 sentence 간의 유사도 측정
    • input: source_sentences, target_sentences
    • output: cos_sim, acc of src2trg & trg2src)
  12. TripletEvaluator
    • 거리(문장, 양수_예시) < 거리(문장, 음수_예시)인지 확인
      true 이면 acc에 +1 / false 이면 acc에 +0
    • input: anchors, positives, negatives, main_distance_function
    • output: accuracy of each distances
  13. SimilarityFunction
    • each distance index class

 

Comments

Sentence-Transformers 학습에 사용되는 loss와 eval은 용도와 input 데이터셋의 format, 결과 metric 리스트가 다르다. 때문에 무엇을 하고자 하는지, 어떤 metric 값을 원하는지 등 미리 점검한 뒤 실험해야 한다.

다음 포스팅은 sentence-transformers의 구조가 HuggingFace transformers와 어떻게 다른지에 대해 살펴볼 예정이다.
  • 학습 Process
  • 검증 및 예측 Process
  • sentence-transformers 상세 기능
  • HuggingFace transformers와 어떻게 다른지

 

To Be Continued.....

반응형

댓글