BAAI / bge-m3
Milvus Integrated
작업: 임베딩
형태: 텍스트
유사성 측정법: 코사인, 도트 곱
라이선스: Mit
차원: 1024
최대 입력 토큰: 8192
가격: 무료
BGE-M3 소개
BGE-M3는 다양한 언어와 작업에서 다용도로 사용할 수 있도록 맞춤화된 BAAI에서 개발한 텍스트 임베딩 모델입니다. 100개 이상의 언어를 지원하며 최대 8192개 토큰의 입력 크기를 처리합니다. 이러한 기능 덕분에 BGE-M3는 밀도, 희소, 다중 벡터 검색 작업에 탁월하여 문서 검색 및 질문에 대한 답변에 매우 효과적입니다. 이 모델의 최첨단 성능은 MKQA 및 MLDR과 같은 벤치마크에서 입증되었습니다. 이 모델의 아키텍처에는 자가 지식 증류가 포함되어 있어 다양한 데이터 세트에서 적응성과 정확성을 향상시켜 다국어 정보 검색을 위한 강력한 도구로 자리매김하고 있습니다.
BGE-M3로 임베딩을 생성하는 방법 ## 임베딩 생성 방법
벡터 임베딩을 생성하는 방법에는 두 가지가 있습니다:
- PyMilvus](https://github.com/milvus-io/pymilvus):
bge-m3모델을 원활하게 통합하는 Milvus 용 Python SDK. - 플래그 임베딩 라이브러리: 파이썬 라이브러리
FlagEmbedding.
벡터 임베딩이 생성되면, 질리즈 클라우드(밀버스에서 제공하는 완전 관리형 벡터 데이터베이스 서비스)에 저장하여 의미적 유사도 검색에 사용할 수 있습니다. 다음은 네 가지 주요 단계입니다:
- 질리즈 클라우드 계정을 무료로 가입합니다.
- 서버리스 클러스터를 설정](https://docs.zilliz.com/docs/create-cluster#set-up-a-free-cluster)하고 퍼블릭 엔드포인트 및 API 키를 발급받습니다.
- 벡터 컬렉션을 생성하고 벡터 임베딩을 삽입합니다.
- 저장된 임베딩에 대해 시맨틱 검색을 실행합니다.
파이밀버스를 통해 임베딩 생성하기
pymilvus.model.hybrid에서 BGEM3EmbeddingFunction을 가져옵니다.
pymilvus에서 밀버스 클라이언트, 데이터 타입, 앤서치 리퀘스트, 가중치 랭커를 가져옵니다.
ef = BGEM3EmbeddingFunction()
docs = [
"인공 지능은 1956년에 학문 분야로 설립되었습니다.",
"앨런 튜링은 AI 분야에서 실질적인 연구를 수행한 최초의 인물입니다.",
"런던의 메이다 베일에서 태어난 튜링은 영국 남부에서 자랐습니다.", "앨런 튜링은 인공지능을 연구한 최초의 인물입니다."
]
# 문서에 대한 임베딩 생성
docs_embedings = ef.encode_documents(docs)
queries = ["인공 지능은 언제 설립되었나요",
"앨런 튜링은 어디에서 태어났나요?"]
# 쿼리에 대한 임베딩 생성하기
쿼리_임베딩 = ef.encode_queries(쿼리)
client = 밀버스클라이언트(
uri=ZILLIZ_PUBLIC_ENDPOINT,
토큰=ZILLIZ_API_KEY)
스키마 = client.create_schema(
auto_id=True,
enable_dynamic_field=True,
)
schema.add_field(field_name="pk", datatype=DataType.INT64, is_primary=True)
schema.add_field(
field_name="dense_vector",
datatype=DataType.FLOAT_VECTOR,
dim=ef.dim["dense"],
)
schema.add_field(
field_name="sparse_vector", datatype=DataType.SPARSE_FLOAT_VECTOR
)
index_params = client.prepare_index_params()
index_params.add_index(
field_name="dense_vector", index_type="FLAT", metric_type="IP"
)
index_params.add_index(
field_name="sparse_vector",
index_type="SPARSE_INVERTED_INDEX",
metric_type="IP",
)
COLLECTION = "documents"
if client.has_collection(collection_name=COLLECTION):
client.drop_collection(collection_name=COLLECTION)
client.create_collection(
collection_name=COLLECTION,
스키마=스키마,
index_params=index_params,
enable_dynamic_field=True,
)
for i in range(len(docs)):
doc, dense_embedding, sparse_embedding = docs[i], docs_embeddings["dense"][i], docs_embeddings["sparse"][[i]]
client.insert(COLLECTION, {"text": doc, "dense_vector": dense_embedding, "sparse_vector": sparse_embedding})
k = 1
req_list = []
dense_embedding = query_embedings["dense"][0]
sparse_embedding = query_embedings["sparse"][[0]]
dense_search_param = {
"데이터": [dense_embedding],
"anns_field": "dense_vector",
"param": {"metric_type": "IP"},
"limit": k * 2,
}
dense_req = AnnSearchRequest(**dense_search_param)
req_list.append(dense_req)
sparse_search_param = {
"데이터": [스파스_임베딩],
"anns_field": "스파스_벡터",
"param": {"metric_type": "IP"},
"limit": k * 2,
}
sparse_req = AnnSearchRequest(**sparse_search_param)
req_list.append(sparse_req)
results = client.hybrid_search(
COLLECTION,
req_list,
WeightedRanker(1.0, 1.0),
k,
일관성_수준="강함",
output_fields=["text"]]
)
자세한 단계별 가이드는 파이밀버스 문서를 참조하세요.
플래그 임베딩 라이브러리를 통해 벡터 임베딩 생성하기
pymilvus에서 MilvusClient, DataType, AnnSearchRequest, WeightedRanker를 가져옵니다.
플래그 임베딩에서 BGEM3FlagModel을 가져옵니다.
model = BGEM3FlagModel('BAAI/bge-m3', use_fp16=False)
docs = [
"인공 지능은 1956년에 학문 분야로 설립되었습니다.",
"앨런 튜링은 AI 분야에서 실질적인 연구를 수행 한 최초의 사람이었습니다.",
"런던의 메이다 베일에서 태어난 튜링은 영국 남부에서 자랐습니다.", "앨런 튜링은 AI를 실질적으로 연구한 최초의 사람입니다."
]
# 문서에 대한 임베딩 생성
docs_embeddings = model.encode(docs, return_dense=True, return_sparse=True)
queries = ["인공 지능은 언제 설립되었나요",
"앨런 튜링은 어디에서 태어났나요?"]
# 쿼리에 대한 임베딩 생성하기
query_embeddings = model.encode(queries, return_dense=True, return_sparse=True)
client = 밀버스클라이언트(
uri=ZILLIZ_PUBLIC_ENDPOINT,
토큰=ZILLIZ_API_KEY)
스키마 = client.create_schema(
auto_id=True,
enable_dynamic_field=True,
)
schema.add_field(field_name="pk", datatype=DataType.INT64, is_primary=True)
schema.add_field(
field_name="dense_vector",
datatype=DataType.FLOAT_VECTOR,
dim=1024,
)
schema.add_field(
field_name="sparse_vector", datatype=DataType.SPARSE_FLOAT_VECTOR
)
index_params = client.prepare_index_params()
index_params.add_index(
field_name="dense_vector", index_type="FLAT", metric_type="IP"
)
index_params.add_index(
field_name="sparse_vector",
index_type="SPARSE_INVERTED_INDEX",
metric_type="IP",
)
COLLECTION = "documents"
if client.has_collection(collection_name=COLLECTION):
client.drop_collection(collection_name=COLLECTION)
client.create_collection(
collection_name=COLLECTION,
스키마=스키마,
index_params=index_params,
enable_dynamic_field=True,
)
for i in range(len(docs)):
doc, dense_embedding, sparse_embedding = docs[i], docs_embedings["dense_vecs"][i], docs_embedings["lexical_weights"][i]
client.insert(COLLECTION, {"text": doc, "dense_vector": dense_embedding, "sparse_vector": {int(k): sparse_embedding[k] for k in sparse_embedding}})
k = 1
req_list = []
dense_embedding = query_embedings["dense_vecs"][0]
sparse_embedding = {int(k): query_embeddings["lexical_weights"][0][k] for k in query_embeddings["lexical_weights"][0]}
dense_search_param = {
"데이터": [dense_embedding],
"anns_field": "dense_vector",
"param": {"metric_type": "IP"},
"limit": k * 2,
}
dense_req = AnnSearchRequest(**dense_search_param)
req_list.append(dense_req)
sparse_search_param = {
"데이터": [스파스_임베딩],
"anns_field": "스파스_벡터",
"param": {"metric_type": "IP"},
"limit": k * 2,
}
sparse_req = AnnSearchRequest(**sparse_search_param)
req_list.append(sparse_req)
results = client.hybrid_search(
COLLECTION,
req_list,
WeightedRanker(1.0, 1.0),
k,
일관성_수준="강함",
output_fields=["text"]]
)
추가 읽기
- 데이터에 적합한 임베딩 모델 선택하기](https://zilliz.com/blog/choosing-the-right-embedding-model-for-your-data)
- 임베딩 모델 평가하기(https://zilliz.com/learn/evaluating-your-embedding-model)_
- 나만의 텍스트 임베딩 모델 훈련하기(https://zilliz.com/learn/training-your-own-text-embedding-model)_
- RAG 애플리케이션을 위한 웹사이트 청킹 및 임베딩 초보자 가이드](https://zilliz.com/learn/beginner-guide-to-website-chunking-and-embedding-for-your-genai-applications)(https://zilliz.com/learn/beginner-guide-to-website-chunking-and-embedding-for-your-genai-applications)
- RAG란 무엇인가요?
원활한 AI 워크플로
임베딩부터 확장 가능한 AI 검색까지—Zilliz Cloud를 사용하면 비교할 수 없는 속도와 효율성으로 임베딩을 저장, 인덱싱 및 검색할 수 있습니다.
Zilliz Cloud를 무료로 사용해 보세요

