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

[Code review] Sentence-Transformers 비교 hug/trans

by beeny-ds 2022. 7. 8.

Sentence-Transformers (UKPlab)

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

 

Sentence-Transformers & hug/trans 학습 방법 병합

학습 병합 유무: 불가능
학습하는 Process가 hug/trans의 Trainer class와 Sentence-Transformers의 SentenceTransformer class에서 fit 메서드와 다르기 때문.

hug/trans Trainer class 학습 process

  1. 데이터 인코딩
  2. 인코딩된 데이터를 input으로 넣어 모델에서 계산
  3. 모델의 output과 데이터 label을 비교하여 loss 계산
  4. loss를 이용한 model weight 업데이트 (backpro.)
  5. (1~4) 반복 & final model 저장

 

Sentence-Transformers SentenceTransformer class 학습 process

  1. 데이터 인코딩
  2. 모델 정의
  3. loss 정의
    • 이때 (2)에서 정의한 모델 객체를 인자로 사용하여 loss 객체 생성
  4. 검증 class 정의
  5. (2)에서 정의한 모델 객체의 fit 메서드를 이용한 학습 진행
    • 이때 (3)에서 정의한 loss 객체를 인자로 사용
  6. (1~5) 반복 & final model 저장
Loss class는 nn.Module을 받아 forward 메서드가 계산되는 형식.
즉, 객체와 객체 사이를 오가며 model weight 업데이트 되는 process…

Sentence-Transformers & hug/trans 검증&예측 방법 병합

input datasets: only one sentence
output from model: embedding vector
input과 output을 위와 같이 고정한 뒤, 성능 측정 logit을 따로 구성한다면 가능


 

Comments

Sentence-Transformers 패키지 학습 Process는 위의 사진과 같이 HuggingFace Transformers Trainer class와 다르기 때문에 병합을 위해서는 많은 수정이 필요하다.
SBERT 학습 Process를 HuggingFace Transformers Trainer class와 통일하길 원한다면 Sentence-Transformers 패키지 보다는 다른 패키지를 찾아보는 것을 권장한다.
  • 학습 Process
  • 검증 및 예측 Process
  • sentence-transformers 상세 기능
  • HuggingFace transformers와 어떻게 다른지
반응형

댓글