🚀 免費嘗試 Zilliz Cloud,完全托管的 Milvus,體驗速度提升 10 倍!立即嘗試

milvus-logo
LFAI
主頁
  • 機型

嵌入概述

嵌入(Embedding)是一種機器學習概念,用於將資料映射到高維空間,將語義相似的資料放在一起。嵌入模型通常是來自 BERT 或其他 Transformer 系列的深度神經網路,可以有效地以一系列稱為向量的數字來表示文字、影像和其他資料類型的語意。這些模型的一個主要特點是,向量之間在高維空間的數學距離可以表示原始文字或影像語義的相似性。這個特性釋放了許多資訊檢索的應用,例如 Google 和 Bing 等網路搜尋引擎、電子商務網站上的產品搜尋和推薦,以及最近在生成式人工智慧 (Generative AI) 中流行的檢索擴增生成 (Retrieval Augmented Generation, RAG) 模式。

嵌入有兩大類,各自產生不同類型的向量:

  • 密集嵌入:大多數的嵌入模型將資訊表示為數百到數千維的浮點向量。由於大部分的維度都有非零值,因此輸出的向量稱為「密集」向量。舉例來說,流行的開放原始碼嵌入模型 BAAI/bge-base-en-v1.5 會輸出 768 個浮點數的向量 (768 維浮點向量)。

  • 稀疏嵌入:相比之下,稀疏嵌入的輸出向量大多數維度為零,即「稀疏」向量。這些向量通常有更高的維度(數萬或更多),這是由標記詞彙的大小決定的。稀疏向量可以由深度神經網路或文字庫的統計分析產生。由於稀疏嵌入向量具有可解釋性及更好的域外泛化能力,因此越來越多的開發人員採用稀疏嵌入向量作為密集嵌入向量的補充。

Milvus 是專為向量資料管理、儲存和檢索而設計的向量資料庫。透過整合主流的embeddingsreranking模型,您可以輕鬆地將原始文字轉換為可搜尋的向量,或使用強大的模型對結果進行 rerank,以達到更精確的 RAG 結果。此一整合簡化了文字轉換,不需要額外的 embedding 或 reranking 元件,進而簡化 RAG 的開發與驗證。

要以實際操作建立嵌入,請參考使用 PyMilvus 的模型來產生文字嵌入

嵌入函數類型API 或開放源碼
開放密集API
句子轉換器密集開放源碼
開放源碼稀疏開放源碼
bge-m3混合開放原始碼
稠密密集型API
叢書密集API
凝聚密集API
導師密集開放源碼
Mistral AI密集API
諾米密集型API
mGTE混合型開放源碼

範例 1:使用預設的 embedding 函式產生密集向量

要在 Milvus 中使用嵌入函數,首先要安裝 PyMilvus 用戶端函式庫,並安裝model 子套件,該套件包裝了所有用於嵌入生成的實用程式。

pip install "pymilvus[model]"

model 子套件支援各種嵌入模型,從OpenAISentence TransformersBGE M3SPLADE預先訓練的模型。為了簡單起見,本範例使用DefaultEmbeddingFunction ,它是全-MiniLM-L6-v2 的句子轉換器模型,模型約 70MB,第一次使用時會下載:

from pymilvus import model

# This will download "all-MiniLM-L6-v2", a light weight model.
ef = model.DefaultEmbeddingFunction()

# Data from which embeddings are to be generated 
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.",
]

embeddings = ef.encode_documents(docs)

# Print embeddings
print("Embeddings:", embeddings)
# Print dimension and shape of embeddings
print("Dim:", ef.dim, embeddings[0].shape)

預期的輸出與以下相似:

Embeddings: [array([-3.09392996e-02, -1.80662833e-02,  1.34775648e-02,  2.77156215e-02,
       -4.86349640e-03, -3.12581174e-02, -3.55921760e-02,  5.76934684e-03,
        2.80773244e-03,  1.35783911e-01,  3.59678417e-02,  6.17732145e-02,
...
       -4.61330153e-02, -4.85207550e-02,  3.13997865e-02,  7.82178566e-02,
       -4.75336798e-02,  5.21207601e-02,  9.04406682e-02, -5.36676683e-02],
      dtype=float32)]
Dim: 384 (384,)

範例 2:使用 BGE M3 模型一次呼叫產生密集與稀疏向量

在這個範例中,我們使用BGE M3混合模型將文字嵌入到密集向量和稀疏向量中,並使用它們來擷取相關文件。整體步驟如下:

  1. 使用 BGE-M3 模型將文字嵌入為密集向量和稀疏向量;

  2. 建立一個 Milvus 集合來儲存密集向量和稀疏向量;

  3. 將資料插入 Milvus;

  4. 搜尋並檢查結果。

首先,我們需要安裝必要的相依性。

from pymilvus.model.hybrid import BGEM3EmbeddingFunction
from pymilvus import (
    utility,
    FieldSchema, CollectionSchema, DataType,
    Collection, AnnSearchRequest, RRFRanker, connections,
)

使用 BGE M3 對文件和查詢進行編碼,以便嵌入檢索。

# 1. prepare a small corpus to search
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.",
]
query = "Who started AI research?"

# BGE-M3 model can embed texts as dense and sparse vectors.
# It is included in the optional `model` module in pymilvus, to install it,
# simply run "pip install pymilvus[model]".

bge_m3_ef = BGEM3EmbeddingFunction(use_fp16=False, device="cpu")

docs_embeddings = bge_m3_ef(docs)
query_embeddings = bge_m3_ef([query])

免費嘗試托管的 Milvus

Zilliz Cloud 無縫接入,由 Milvus 提供動力,速度提升 10 倍。

開始使用
反饋

這個頁面有幫助嗎?