跳到主要內容

嵌入模型

先決條件
注意

此概念概述著重於基於文字的嵌入模型。

嵌入模型也可能是多模態的,但 LangChain 目前不支援此類模型。

想像一下,能夠以單一、精簡的表示形式捕捉任何文字的精髓——一則推文、文件或書籍。這就是嵌入模型的力量,它是許多檢索系統的核心。嵌入模型將人類語言轉換為機器可以理解並快速準確地比較的格式。這些模型以文字作為輸入,並產生固定長度的數字陣列,即文字語意含義的數字指紋。嵌入讓搜尋系統不僅可以根據關鍵字比對,還可以根據語意理解來尋找相關文件。

重要概念

Conceptual Overview

(1) 將文字嵌入為向量:嵌入將文字轉換為數字向量表示。

(2) 測量相似度:可以使用簡單的數學運算來比較嵌入向量。

嵌入

歷史背景

多年來,嵌入模型的發展格局發生了顯著變化。2018 年 Google 推出 BERT (Bidirectional Encoder Representations from Transformers,變革器雙向編碼器表示法),這是一個關鍵時刻。BERT 應用變革器模型將文字嵌入為簡單的向量表示,這為各種 NLP 任務帶來了前所未有的效能。然而,BERT 並未針對有效率地產生句子嵌入進行最佳化。此限制促使 SBERT (Sentence-BERT,句子-BERT) 的創建,它調整了 BERT 架構以產生語意豐富的句子嵌入,可以透過餘弦相似度等相似度指標輕鬆比較,大幅降低了尋找相似句子等任務的計算負擔。如今,嵌入模型生態系統非常多元,眾多供應商都提供自己的實作。為了應對這種多樣性,研究人員和從業者經常求助於大規模文字嵌入基準 (MTEB) 此處 等基準進行客觀比較。

延伸閱讀

介面

LangChain 提供了用於使用它們的通用介面,為常見操作提供標準方法。此通用介面透過兩種核心方法簡化了與各種嵌入供應商的互動

  • embed_documents:用於嵌入多個文字(文件)
  • embed_query:用於嵌入單個文字(查詢)

這種區別很重要,因為某些供應商對文件(要搜尋的文件)與查詢(搜尋輸入本身)採用不同的嵌入策略。為了說明,以下是一個使用 LangChain 的 .embed_documents 方法嵌入字串列表的實務範例

from langchain_openai import OpenAIEmbeddings
embeddings_model = OpenAIEmbeddings()
embeddings = embeddings_model.embed_documents(
[
"Hi there!",
"Oh, hello!",
"What's your name?",
"My friends call me World",
"Hello World!"
]
)
len(embeddings), len(embeddings[0])
(5, 1536)
API 參考:OpenAIEmbeddings

為了方便起見,您也可以使用 embed_query 方法來嵌入單個文字

query_embedding = embeddings_model.embed_query("What is the meaning of life?")
延伸閱讀

整合

LangChain 提供了許多嵌入模型整合,您可以在嵌入模型整合頁面上找到它們。

測量相似度

每個嵌入本質上都是一組座標,通常在高維空間中。在這個空間中,每個點(嵌入)的位置都反映了其對應文字的含義。正如相似的詞語可能在詞庫中彼此接近一樣,相似的概念最終在這個嵌入空間中彼此接近。這允許在不同的文字片段之間進行直觀的比較。透過將文字簡化為這些數字表示,我們可以使用簡單的數學運算來快速測量兩個文字片段的相似程度,而與它們的原始長度或結構無關。一些常見的相似度指標包括

  • 餘弦相似度:測量兩個向量之間角度的餘弦值。
  • 歐幾里得距離:測量兩點之間的直線距離。
  • 點積:測量一個向量在另一個向量上的投影。

相似度指標的選擇應根據模型選擇。例如,OpenAI 建議其嵌入使用餘弦相似度,這可以輕鬆實作

import numpy as np

def cosine_similarity(vec1, vec2):
dot_product = np.dot(vec1, vec2)
norm_vec1 = np.linalg.norm(vec1)
norm_vec2 = np.linalg.norm(vec2)
return dot_product / (norm_vec1 * norm_vec2)

similarity = cosine_similarity(query_result, document_result)
print("Cosine Similarity:", similarity)
延伸閱讀

此頁面是否對您有幫助?