bge-m3 임베딩 모델

svenskpotatis·2024년 7월 26일
post-thumbnail


하이퍼클로바 X의 임베딩 v2 모델을 사용중인데, 이 부분이 궁금해서 찾아봤다.

bge-m3 모델

기본 정보

bge-m3 모델은 BAAI(Beijing Academy of Artificial Intelligence)에서 개발한 최신 임베딩 모델이다. 다국어 지원과 뛰어난 성능으로 주목받고 있다. bge-m3는 이전 버전인 bge-large-en과 비교하여 더 넓은 언어 지원과 향상된 성능을 제공하고, 특히 검색, 분류, 클러스터링 등 다양한 NLP 태스크에서 우수한 성능을 보인다.

  • 개발사: BAAI (Beijing Academy of Artificial Intelligence)
  • 출시일: 2023년 10월
  • 지원 언어: 100개 이상의 언어 지원
  • 모델 크기: 1.8B 파라미터
  • 학습 데이터: 대규모 다국어 코퍼스 (세부 정보 비공개)
  • 주요 특징: 다국어 지원, 높은 정확도, 다양한 태스크에 적용 가능

3가지 출력 방식

  1. Sparse:
    키워드 빈도나 문서 내 단어의 중요도를 기반으로 하는 전통적인 벡터 표현이다. TF-IDF나 BM25 같은 계산을 통해 생성될 수 있으며, 전통적인 정보검색 시스템에서 널리 사용된다.

  2. Dense Output:
    D모든 문서나 쿼리를 고정된 크기의 밀집 벡터로 변환한다. 일반적으로 딥러닝 모델을 사용하여 학습되며, 문맥적 의미를 포착하는 데 효과적이다. 최근의 많은 검색 시스템에서 기본적으로 사용된다.

  3. Multi-Dense (ColBERT) Output:
    각 문서나 쿼리를 여러 개의 Dense 벡터로 표현하며, 각 벡터는 문서의 다른 단어나 구를 나타낸다. ColBERT 검색 시스템에서 사용되며, 단어 수준에서의 미묘한 의미 차이를 포착하여 더 정밀한 검색 결과를 제공할 수 있다.

FP16 및 정규화 적용

bge-m3 모델은 효율적인 연산과 메모리 사용을 위해 FP16 포맷을 지원한다. 또한, 임베딩 벡터의 정규화를 적용하여 더 안정적인 결과를 제공한다.

  • FP16 지원:
    • 메모리 사용량 감소: FP32 대비 약 50% 절감
    • 연산 속도 향상: 특히 GPU에서 큰 성능 개선
    • 정확도 유지: 대부분의 NLP 태스크에서 FP32와 유사한 정확도 유지
  • 정규화 적용:
    • L2 정규화 사용: 임베딩 벡터의 길이를 1로 조정
    • 안정적인 유사도 계산: 코사인 유사도 계산 시 일관된 결과 제공
    • 스케일 불변성: 다양한 길이의 텍스트에 대해 일관된 임베딩 생성

하이퍼클로바 임베딩v2 모델의 출력에 fp16벡터 정규화 적용

  • 임베딩v2 모델의 권장 거리 지표는 코사인 유사도이지만, 프로젝트에서 사용하는 Milvus 는 코사인 유사도를 직접 지원하지 않는다.
  • 이 문제를 해결하기 위해 벡터 정규화 기법을 사용할 수 있다.
  • 정규화된 벡터를 사용하면 내적(Inner Product, IP)으로 코사인 유사도를 근사할 수 있고, 이를 통해 Milvus에서도 효과적으로 유사도 검색을 수행할 수 있다.
# 임베딩 벡터(res['result']['embedding']) 정규화 및 FP16 변환
# -> 오픈소스 임베딩 모델은 코사인 유사도 거리 사용함
# -> milvus 는 코사인 유사도 지원하지 않지만, 벡터 정규화한 경우 IP로 코사인 유사도 근사 가능

embedding = np.array(res['result']['embedding'], dtype=np.float32) 
norm = np.linalg.norm(embedding) # 벡터의 L2 norm (유클리드 norm) 계산
normalized_embedding = embedding / norm
fp16_embedding = normalized_embedding.astype(np.float16)

0개의 댓글