《向量数据库指南》——BGE-M3:引领多模态RAG系统新风尚!
BGE-M3
BGE-M3 是一个多功能的 Embedding 模型,能够处理多种语言的文本,并支持不同的粒度级别。例如,您可以处理短句,也可以处理长达 8192 个 Token 的长文档。这个 Embedding 模型还能够输出两种不同的向量类型:稠密向量(Dense embedding)和稀疏向量(Sparse embedding)。
稠密向量的维度比稀疏向量更紧凑,并且包含原始输入的语义表示。与此同时,正如其名,稀疏向量具有高维度,但大多数元素都是零。因此,针对稀疏向量可以使用专门的数据结构和算法实现更高效地存储和处理。
在下面的 RAG 应用中,我们将使用 BGE-M3 作为 Embedding 模型,将文本输入转换为向量。我们可以使用以下代码在 Milvus 中使用 BGE-M3:
!pip install "pymilvus[model]"
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`.
)
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)
"""
Output:
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>}
"""
如上所示,我们可以基于同一个输入获取两种不同类型的向量:稠密向量和稀疏向量。因为 Milvus 支持混合搜索(Hybrid Search),我们可以在向量搜索中同时使用这两种向量类型,从而增强 RAG 系统中检索到的上下文的准确性和质量。