BGE M3
BGE-M3는 다중 언어, 다중 기능 및 다중 세분화 기능으로 명명되었습니다. 100개 이상의 언어를 지원할 수 있는 BGE-M3는 다국어 및 교차 언어 검색 작업에서 새로운 기준을 제시합니다. 단일 프레임워크 내에서 고밀도 검색, 다중 벡터 검색, 희소 검색을 수행할 수 있는 고유한 기능 덕분에 광범위한 정보 검색(IR) 애플리케이션에 이상적인 선택이 될 수 있습니다.
Milvus는 BGEM3EmbeddingFunction 클래스를 사용해 BGE M3 모델과 통합됩니다. 이 클래스는 임베딩 계산을 처리하고 색인 및 검색을 위해 Milvus와 호환되는 형식으로 임베딩을 반환합니다. 이 기능을 사용하려면 FlagEmbedding이 설치되어 있어야 합니다.
이 기능을 사용하려면 필요한 종속성을 설치하세요:
pip install --upgrade pymilvus
pip install "pymilvus[model]"
그런 다음 BGEM3EmbeddingFunction을 인스턴스화합니다:
from pymilvus.model.hybrid import BGEM3EmbeddingFunction
bge_m3_ef = BGEM3EmbeddingFunction(
model_name='BAAI/bge-m3', # Specify the model name
device='cpu', # Specify the device to use, e.g., 'cpu' or 'cuda:0'
use_fp16=False # Specify whether to use fp16. Set to `False` if `device` is `cpu`.
)
매개변수를 인스턴스화합니다:
model_name(문자열)
인코딩에 사용할 모델의 이름입니다. 기본값은 BAAI/bge-m3입니다.
장치(문자열)
사용할 디바이스(CPU의 경우 cpu, n번째 GPU 디바이스의 경우 cuda:n )입니다.
USE_FP16(부울)
16비트 부동 소수점 정밀도(fp16)를 사용할지 여부. 장치가 CPU인 경우 False를 지정합니다.
문서용 임베딩을 만들려면 encode_documents() 메서드를 사용합니다:
docs = [
"Artificial intelligence was founded as an academic discipline in 1956.",
"Alan Turing was the first person to conduct substantial research in AI.",
"Born in Maida Vale, London, Turing was raised in southern England.",
]
docs_embeddings = bge_m3_ef.encode_documents(docs)
# Print embeddings
print("Embeddings:", docs_embeddings)
# Print dimension of dense embeddings
print("Dense document dim:", bge_m3_ef.dim["dense"], docs_embeddings["dense"][0].shape)
# Since the sparse embeddings are in a 2D csr_array format, we convert them to a list for easier manipulation.
print("Sparse document dim:", bge_m3_ef.dim["sparse"], list(docs_embeddings["sparse"])[0].shape)
예상 출력은 다음과 비슷합니다:
Embeddings: {'dense': [array([-0.02505937, -0.00142193, 0.04015467, ..., -0.02094924,
0.02623661, 0.00324098], dtype=float32), array([ 0.00118463, 0.00649292, -0.00735763, ..., -0.01446293,
0.04243685, -0.01794822], dtype=float32), array([ 0.00415287, -0.0101492 , 0.0009811 , ..., -0.02559666,
0.08084674, 0.00141647], dtype=float32)], 'sparse': <3x250002 sparse array of type '<class 'numpy.float32'>'
with 43 stored elements in Compressed Sparse Row format>}
Dense document dim: 1024 (1024,)
Sparse document dim: 250002 (1, 250002)
쿼리용 임베딩을 만들려면 encode_queries() 메서드를 사용합니다:
queries = ["When was artificial intelligence founded",
"Where was Alan Turing born?"]
query_embeddings = bge_m3_ef.encode_queries(queries)
# Print embeddings
print("Embeddings:", query_embeddings)
# Print dimension of dense embeddings
print("Dense query dim:", bge_m3_ef.dim["dense"], query_embeddings["dense"][0].shape)
# Since the sparse embeddings are in a 2D csr_array format, we convert them to a list for easier manipulation.
print("Sparse query dim:", bge_m3_ef.dim["sparse"], list(query_embeddings["sparse"])[0].shape)
예상 출력은 다음과 유사합니다:
Embeddings: {'dense': [array([-0.02024024, -0.01514386, 0.02380808, ..., 0.00234648,
-0.00264978, -0.04317448], dtype=float32), array([ 0.00648045, -0.0081542 , -0.02717067, ..., -0.00380103,
0.04200587, -0.01274772], dtype=float32)], 'sparse': <2x250002 sparse array of type '<class 'numpy.float32'>'
with 14 stored elements in Compressed Sparse Row format>}
Dense query dim: 1024 (1024,)
Sparse query dim: 250002 (1, 250002)