使用 Embedding 最重要的事情就是計算兩個向量之間的相似度, 不同的工具預設的計算方式不同, 甚至名稱一樣的計算工具計算方式也不見得一樣。如果沒有搞清楚, 就會被弄得一頭霧水, 同樣的兩個向量為什麼算出來的相似度差那麼多!
Chroma 預設是計算幾何距離的平方
計算向量相似度最精確的作法是計算向量之間的幾何距離, 不過這牽涉求平方根運算, 所以在 Chroma 資料庫中, 預設使用的是底層 hsnwlib 的 'l2', 計算向量之間幾何距離的平方。由於我們實際需要比較的是單一向量與多個向量之間的相似度, 距離平方只會加大尺度, 但不會變更相似度順序, 計算時還可以省去求平方根的運算, 可以說是效率不錯的作法。
以下以 LangChain 為例, 先匯入相關類別:
>>> from langchain.vectorstores import Chroma
>>> from langchain.embeddings.openai import OpenAIEmbeddings
>>> embeddings = OpenAIEmbeddings()