RAG : Embedding Model, Reranking Model
05 Mar 2024 | Multimodal
    
Embedding Model
Embedding Model은 Bi-encoder model이다.
  - Bi-encoder model은 두 개의 독립적인 encoder로 구성됨. 그래서 “bi” encoder.
    
      - encoder 1은 입력 query를 encoding
- encoder 2는 관련/무관 문장을 encoding
- 두 encoder는 각각 독립적으로 embedding을 생성
 
- 학습
    
      - 학습 과정에서는 query와 관련된 documnet들 간의 유사도를 최대화하는 방향으로 학습.
- query와 관련 없는 documnet들 간의 유사도는 최소화하는 방향으로 학습.
- 아래와 같은 문장 쌍 데이터를 활용하여 문장 임베딩을 생성하고, 유사한 문장은 벡터 공간에서 가깝게, 다른 문장은 멀게 위치하도록 학습
- 데이터 예시
        [
{
  "sentence1": "강아지가 공원에서 뛰어놀고 있다.",
  "sentence2": "개가 야외에서 운동하고 있습니다.", 
  "label": 1  # 유사
},
{
  "sentence1": "오늘 날씨가 좋습니다.",
  "sentence2": "내일은 비가 올 예정입니다.",
  "label": 0  # 비유사
}
]
 
 
- 유사도 점수 산정 방식(추론)
    
      - query와 각 문장 간의 유사도를 독립적으로 계산.
 
- 응용 분야
- 일반적으로 검색 엔진이나 추천 시스템과 같이 문서 검색이나 순위 지정이 주요 목표인 작업에서 사용
- 대규모 데이터셋과 컴퓨팅 리소스가 있을 때 bi-encoder를 사용한다. 유사도 점수를 독립적으로 계산할 수 있어 추론 시 더 빠른 경우가 많음.
- 쿼리와 문서 간의 복잡한 상호작용을 포착하는 것이 덜 중요한 작업에 적합하다.
Rerank Model
Rerank Model은 Cross-encoder model이다.
  - Cross-encoder model은 query와 문장이 단일 encoder에서 함께 처리된다. 즉, 두 문장에 대한 결합된 representation을 생성한다.
- 학습
    
      - bi-encoder와 비슷하게 관련된 query-문장 쌍 간의 유사도를 최대화하도록 학습된다. 하지만 쿼리와 문서를 함께 처리하기 때문에 둘 사이의 상호작용을 포착한다.
- 데이터 예시
        
          - 두 문장에 대한 label에 따라 유사도 측정 모델이 되기도하고, 분류 모델이 되기도 한다. 유사도 측정 모델도 사실 label이 매우 많은 분류 과제이기도 하다.
- (유사도 측정 모델 데이터 예시: 두 문장쌍 + 유사도 점수 (예: 0-1 사이의 연속적인 값))
            train_samples = [
    InputExample(texts=["sentence1", "sentence2"], label=0.3),
    InputExample(texts=["Another", "pair"], label=0.8)
]
 
- (분류 과제 모델 데이터 예시: 두 문장쌍 + 각 문장 관계를 지시하는 라벨(일반적으로 int 형식의 class index))
            train_samples = [
    InputExample(texts=["A man is eating pizza", "A man eats something"], label=1),
    InputExample(texts=["A black race car starts up in front of a crowd of people.", "A man is driving down a lonely road."], label=0)
]
 
 
 
- 유사도 점수 산정 방식(추론)
    
      - query와 각 문장 쌍에 대해 두 문장 embeding 간의 상호작용을 고려하여 단일 유사도 점수 생성
 
- 응용 분야
- 일반적으로 query와 문장 사이의 맥락이나 관계를 이해하는 것이 중요한 작업에 사용
- query와 문장 간의 상호작용을 포착하는 것이 중요할 때 유용
Summary
대규모 검색에서는 Bi-encoder로 후보군을 추린 후 Cross-encoder로 재순위화하는 방식을 사용하는 것이 일반적이다.이를 통해 속도와 정확도의 균형을 맞출 수 있다. 따라서 Embedding Model로는 Bi-encoder를 사용하고, Rerank Model로는 Cross-encoder를 사용한다.
  
    
        
      Bi-encoder 
      Cross-encoder 
     
  
  
    
      encoding 방식 
      - 두 문장을 독립적으로 encoding
- 각 문장에 대해 별도의 임베딩 벡터를 생성 
      - 두 문장을 동시에 입력으로 받아 함께 encoding
- 두 문장의 관계를 직접적으로 모델링 
     
    
      성능 및 정확도 
      - 일반적으로 Cross-encoder보다 정확도가 낮음
- 정보 손실이 발생할 수 있어 성능이 다소 떨어질 수 있음 
      - 비교적 높은 정확도
- 두 문장 간의 관계를 더 잘 파악 
     
    
      속도 및 확장성 
      - 빠른 처리 속도와 높은 확장성
- 대규모 데이터셋에 적합 
      - 처리 속도가 상대적으로 느리고 확장성이 제한적
- 소규모 데이터셋이나 정확도가 중요한 작업에 적합 
     
    
      응용 분야 
      - 정보 검색, 의미론적 검색, 클러스터링에 적합
- 실시간 처리가 필요한 작업에 유용 
      - 분류 작업이나 정확한 순위 매기기에 적합
- 소수의 문장 쌍을 비교하는 작업에 효과적 
     
  
   
  
Embedding Model
Embedding Model은 Bi-encoder model이다.
- Bi-encoder model은 두 개의 독립적인 encoder로 구성됨. 그래서 “bi” encoder.
    - encoder 1은 입력 query를 encoding
- encoder 2는 관련/무관 문장을 encoding
- 두 encoder는 각각 독립적으로 embedding을 생성
 
- 학습
    - 학습 과정에서는 query와 관련된 documnet들 간의 유사도를 최대화하는 방향으로 학습.
- query와 관련 없는 documnet들 간의 유사도는 최소화하는 방향으로 학습.
- 아래와 같은 문장 쌍 데이터를 활용하여 문장 임베딩을 생성하고, 유사한 문장은 벡터 공간에서 가깝게, 다른 문장은 멀게 위치하도록 학습
- 데이터 예시
        [ { "sentence1": "강아지가 공원에서 뛰어놀고 있다.", "sentence2": "개가 야외에서 운동하고 있습니다.", "label": 1 # 유사 }, { "sentence1": "오늘 날씨가 좋습니다.", "sentence2": "내일은 비가 올 예정입니다.", "label": 0 # 비유사 } ]
 
- 유사도 점수 산정 방식(추론)
    - query와 각 문장 간의 유사도를 독립적으로 계산.
 
- 응용 분야
- 일반적으로 검색 엔진이나 추천 시스템과 같이 문서 검색이나 순위 지정이 주요 목표인 작업에서 사용
- 대규모 데이터셋과 컴퓨팅 리소스가 있을 때 bi-encoder를 사용한다. 유사도 점수를 독립적으로 계산할 수 있어 추론 시 더 빠른 경우가 많음.
- 쿼리와 문서 간의 복잡한 상호작용을 포착하는 것이 덜 중요한 작업에 적합하다.
Rerank Model
Rerank Model은 Cross-encoder model이다.
- Cross-encoder model은 query와 문장이 단일 encoder에서 함께 처리된다. 즉, 두 문장에 대한 결합된 representation을 생성한다.
- 학습
    - bi-encoder와 비슷하게 관련된 query-문장 쌍 간의 유사도를 최대화하도록 학습된다. 하지만 쿼리와 문서를 함께 처리하기 때문에 둘 사이의 상호작용을 포착한다.
- 데이터 예시
        - 두 문장에 대한 label에 따라 유사도 측정 모델이 되기도하고, 분류 모델이 되기도 한다. 유사도 측정 모델도 사실 label이 매우 많은 분류 과제이기도 하다.
- (유사도 측정 모델 데이터 예시: 두 문장쌍 + 유사도 점수 (예: 0-1 사이의 연속적인 값))
            train_samples = [ InputExample(texts=["sentence1", "sentence2"], label=0.3), InputExample(texts=["Another", "pair"], label=0.8) ]
- (분류 과제 모델 데이터 예시: 두 문장쌍 + 각 문장 관계를 지시하는 라벨(일반적으로 int 형식의 class index))
            train_samples = [ InputExample(texts=["A man is eating pizza", "A man eats something"], label=1), InputExample(texts=["A black race car starts up in front of a crowd of people.", "A man is driving down a lonely road."], label=0) ]
 
 
- 유사도 점수 산정 방식(추론)
    - query와 각 문장 쌍에 대해 두 문장 embeding 간의 상호작용을 고려하여 단일 유사도 점수 생성
 
- 응용 분야
- 일반적으로 query와 문장 사이의 맥락이나 관계를 이해하는 것이 중요한 작업에 사용
- query와 문장 간의 상호작용을 포착하는 것이 중요할 때 유용
Summary
대규모 검색에서는 Bi-encoder로 후보군을 추린 후 Cross-encoder로 재순위화하는 방식을 사용하는 것이 일반적이다.이를 통해 속도와 정확도의 균형을 맞출 수 있다. 따라서 Embedding Model로는 Bi-encoder를 사용하고, Rerank Model로는 Cross-encoder를 사용한다.
| Bi-encoder | Cross-encoder | |
|---|---|---|
| encoding 방식 | - 두 문장을 독립적으로 encoding - 각 문장에 대해 별도의 임베딩 벡터를 생성 | - 두 문장을 동시에 입력으로 받아 함께 encoding - 두 문장의 관계를 직접적으로 모델링 | 
| 성능 및 정확도 | - 일반적으로 Cross-encoder보다 정확도가 낮음 - 정보 손실이 발생할 수 있어 성능이 다소 떨어질 수 있음 | - 비교적 높은 정확도 - 두 문장 간의 관계를 더 잘 파악 | 
| 속도 및 확장성 | - 빠른 처리 속도와 높은 확장성 - 대규모 데이터셋에 적합 | - 처리 속도가 상대적으로 느리고 확장성이 제한적 - 소규모 데이터셋이나 정확도가 중요한 작업에 적합 | 
| 응용 분야 | - 정보 검색, 의미론적 검색, 클러스터링에 적합 - 실시간 처리가 필요한 작업에 유용 | - 분류 작업이나 정확한 순위 매기기에 적합 - 소수의 문장 쌍을 비교하는 작업에 효과적 | 
 
             
             
 
            