5️⃣Sentence Transformers

Setence Transformer

2019년에 발표된 SentenceTransformer는 Bi-encoder아키텍처를 갖추고 있으며 효율적인 문장 임베딩을 생성하기 위해 BERT를 조정하는 역할을 수행했습니다.

최근에 Sentence Transformer는 LLM의 RAG 파이프라인에서 Embedding에 활용 합니다. 이러한 점에서 Sentence Transformer는 일반적으로 텍스트와 텍스트 간의 의미적 유사성을 측정하고 주어진 입력 텍스트를 기반으로 적절한 텍스트 조각을 검색하는 데 사용됩니다.

1. Architecture:

  • Sentence Transformer는 순차적 데이터에서 문맥 관계를 포착하는 데 탁월한 트랜스포머 아키텍처를 기반으로 합니다.

  • 트랜스포머는 Self-attention 메커니즘을 사용하여 임베딩을 생성할 때 모델이 입력 텍스트의 여러 부분에 가중치를 부여할 수 있도록 합니다. 이를 통해 장거리 종속성과 컨텍스트를 캡처하는 데 도움이 됩니다.

2. Context-Aware Embeddings:

  • 단어를 개별적으로 표현하는 기존의 단어 임베딩과 달리 문장 변환기는 문장의 전체 문맥을 고려합니다.

  • 따라서 전체 문장의 맥락에서 단어와 단어의 의미 사이의 관계를 이해할 수 있습니다.

3. Training Strategies:

  • Sentence Transformer는 비지도 또는 자가 지도 학습을 사용하여 대규모 텍스트 말뭉치에 대해 사전 학습을 거칩니다.

  • 이 사전 학습 단계에서 모델은 일반적인 언어 패턴과 의미를 학습합니다.

  • Transfer Learning이 종종 사용되어 레이블이 지정된 데이터 세트가 적은 특정 작업에 대해 사전 학습된 모델을 미세 조정할 수 있습니다.

4. Semantic Similarity:

  • 문장 또는 텍스트 구절 간의 의미적 유사성을 측정하는 데 중요한 용도로 사용됩니다.

  • 이러한 모델에 의해 생성된 임베딩은 텍스트의 의미적 내용을 캡처하여 정확한 비교 및 유사성 점수를 매길 수 있습니다.

5. Resource Efficiency:

  • Reduced Dimensionality: 문장 변환기는 더 복잡한 모델에 비해 더 낮은 차원의 임베딩을 생성하는 경우가 많습니다. 따라서 메모리와 계산 요구 사항이 줄어들어 리소스가 제한된 환경에 적합합니다.

  • Fewer Training Samples: 더 적은 수의 레이블이 지정된 샘플로도 좋은 성능을 얻을 수 있으므로 데이터가 제한되어 있을 때 효율적입니다.

  • Inference Speed: 문장 트랜스포머는 일반적으로 추론 시간이 더 빠르기 때문에 빠른 응답이 필요한 실시간 애플리케이션이나 시나리오에 적합합니다.

  • Scalability: 리소스 요구 사항이 낮기 때문에 연산 능력이 제한된 디바이스를 포함해 다양한 디바이스에 배포할 수 있습니다.

6. Multilingual Capabilities:

여러 언어로 텍스트를 처리해야 하는 애플리케이션에 다용도로 사용할 수 있어 다양한 언어 환경에서 유용하게 사용할 수 있습니다.


Sentence Transformer Tutorial 구성

여기서는 기존 NLP Embedding 라이브러리인 TF-IDF와 Sentence Transformer를 먼저 비교해 보겠다. 그리고 Text 데이터로 Sentence Transformer를 학습시는 방법과 학습 시킨 모델을 추가 데이터로 Fine-tuning하는 절차까지 알아보겠다:

  1. Sentence Transformer vs TF-IDF

  2. Sentence Transformer 모델 학습

  3. Sentence Transformer 모델 Fine-tuning

Setence Transformer vs TF-IDF

TF-IDF는 문장의 핵심 단어를 강조하는 데는 탁월하지만 문맥과 문장 구조의 미묘한 차이를 놓치는 경우가 많습니다. 이와는 대조적으로, BERT가 제공하는 SentenceTransformer는 문맥의 의미를 깊이 파고들어 텍스트를 더욱 풍부하고 미묘하게 이해할 수 있게 해줍니다. 그 여정을 통해 깨달음을 얻었습니다: TF-IDF는 빠른 표면 수준 분석이 필요한 작업에 이상적이며, SentenceTransformer는 깊은 의미론적 인사이트가 필요한 시나리오에서 빛을 발합니다.

  • tfidf: TF-IDF(용어 빈도 역 문서 빈도) 벡터화기를 사용하여 문장을 벡터로 변환하고 코사인 유사도를 계산합니다.

  • sentencetransformer: 사전 학습된 BERT 모델('bert-base-nli-mean-tokens')을 사용하여 문장 임베딩을 생성한 다음 코사인 유사도를 계산합니다.

Compute Similarity

compute_similariy 함수는 지정된 방법인 'tfidf' 또는 'sentencetransformer'를 기반으로 두 문장의 유사도를 계산하여 비교합니다.

Text Similarity

TFIDF(용어 빈도 역 문서 빈도)와 SentenceTransformer입니다.

각 방법에 따라 두 문장이 얼마나 유사한지 측정하기 위해 compute_similarity 함수를 사용하여 자연어 처리에서 의미 분석에 대한 다양한 접근 방식을 보여줍니다.

Train Sentence Transformer

주로 사용하는 Loss Function은 아래와 같다:

  1. Multiple Negative Ranking Loss (MNR Loss) : 학습 데이터에 긍정적인 관련 텍스트 쌍이 있는 경우.

  2. Triplet Loss : 앵커 텍스트에 긍정 및 부정 텍스트가 연결된 경우.

  3. Contrastive Loss :긍정과 부정 쌍이 모두 있는 경우.

Dataset

Example를 InputExamples로 변환합니다.

Loss functions

여기서는 TripletLoss를 사용하겠습니다.

Training

Push Model to Hugging Face Hub

Fine-tuning Sentence Transfomer

Model Load

Dataset

Loss & Parameters

Push to Hub

Last updated