Dev.log

Hugging Face의 Sentence Transformer 본문

자연어처리

Hugging Face의 Sentence Transformer

포켓몬빵 2022. 6. 11. 01:36

Hugging Face

Hugging Face는 다양한 트랜스포머 모델과 학습스크립트를 제공하는 모듈입니다. 원래 PyTorch등과 같은 딥러닝 라이브러리 를 통해 layer나 module을 선언해주고 학습 스크립트 역시 전부 구현해야하지만 Hugging Face를 사용하면 이러한 수고를 덜 수 있다는 장점이 존재합니다. 즉, Hugging Face의 transformer를 통해 최첨단 사전 훈련 모델을 쉽게 다운로드하고 훈련할 수 있는 API를 사용할 수 있다고 이해할 수 있습니다. 또한 이런 사전 훈련된 모델을 사용하면 컴퓨팅 비용, 탄소 발자국을 줄이고 모델을 처음부터 훈련하는 시간을 절약할 수 있다는 장점이 존재합니다. Hugging Face의 transformers 모델들에서는 크게 아래와 같은 방식에서 사용할 수 있습니다.

  • 📝 텍스트: 100개 이상의 언어로 텍스트 분류, 정보 추출, 질문 답변, 요약, 번역 및 텍스트 생성.
  • 🖼️  이미지: 이미지 분류, 객체 감지 및 분할.
  • 🗣️  오디오: 음성 인식 및 오디오 분류.
  • 🐙 멀티모달: 테이블 질문 답변, 광학 문자 인식, 스캔한 문서에서 정보 추출, 비디오 분류 및 시각적 질문 답변.

Hugging Face에서는 AlBERT, BART, BARThez, BARTpho 등 다양한 모델들을 제공하여 주는데, 자세한 내용은 아래 링크에서 확인 할 수 있습니다.

 

🤗 Transformers

Fine-tune for downstream tasks

huggingface.co

본 포스팅에서는 Hugging Face에서 제공하는 Sentence Transformer를 통해 간단한 챗봇을 구현해 보도록 하겠습니다. Sentence Transformers는 최첨단 문장, 텍스트 및 이미지 임베딩을 위한 Python 프레임워크입니다. Sentence Transformers 는 SBERT (Sentence BERT)라고도 불리며, BERT의 임베딩 성능을 향상시킨 모델입니다. BERT로 부터 문장벡터를 얻을때는 BERT의 [CLS] 토큰의 출력 벡터를 문장 벡터로 간주하거나 각 task에 맞춰 모든 단어의 의미를 반영할건지 중요한 단어의 의미를 반영할건지에 따라 각각 모든 단어의 출력 벡터에 대해서 average pooling 과 max pooling을 수행하여 문장 벡터로 얻을 수 있습니다. SBERT는 이와 같은 BERT의 문장 임베딩을 응용하여 BERT에 fine tunning을 진행합니다. SBERT에 대해 자세한 설명은 아래의 논문에서 확인 할 수 있습니다.

 

Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks

BERT (Devlin et al., 2018) and RoBERTa (Liu et al., 2019) has set a new state-of-the-art performance on sentence-pair regression tasks like semantic textual similarity (STS). However, it requires that both sentences are fed into the network, which causes a

arxiv.org

SBERT는 크게 2가지 방법으로 학습이 진행된다고 할 수 있는데, NLI(Natural Language Inferencing) 문제와 같은 문장 쌍분류 테스크를 통해 fine tunning을 진행할 수 있고, STS(Semantic Textual Similarity)문제와 같이  문장 쌍으로 회귀 문제를 푸는 방식으로 Fine tuning을 진행 할 수 도 있습니다. 이러한 SBERT를 SentEval(문장 임베딩을 특징으로 사용하여 로지스틱 회귀 분류기를 훈련함으로써 다양한 문장 분류 작업에서 문장 임베딩을 평가)을 사용한 SBERT 문장 임베딩을 10-fold cross-validation를 통해 평가를 하였을때, 아래와 같은 성능을 확인 할 수 있습니다.

Hugging Face에서 제공하는 Sentence Transformer는 아래의 코드로 간단히 사용할 수 있습니다.

from sentence_transformers import SentenceTransformer
model = SentenceTransformer('paraphrase-MiniLM-L6-v2')

#Sentences we want to encode. Example:
sentence = ['This framework generates embeddings for each input sentence']

#Sentences are encoded by calling model.encode()
embedding = model.encode(sentence)
Comments