本文主要介紹向量的基本概念,包括向量維度、距離度量方式、資料類型等,通過基本概念快速瞭解什麼是向量,以及如何更好地使用向量檢索服務。
向量的基本概念
在AI領域,向量是描述對象特徵的抽象表達。以DashScope上的通用文本向量模型為例,通過輸入一段文本,通用文本向量模型會將這段文本變成一個向量,將文本變成向量的過程叫 Embedding
。
調用樣本
輸入文本:“衣服的品質杠杠的,很漂亮,不枉我等了這麼久啊,喜歡,以後還來這裡買”
import dashscope
from dashscope import TextEmbedding
dashscope.api_key = {YOUR API KEY}
def embed_with_str():
resp = TextEmbedding.call(
model=TextEmbedding.Models.text_embedding_v1,
input='衣服的品質杠杠的,很漂亮,不枉我等了這麼久啊,喜歡,以後還來這裡買')
print(resp)
if __name__ == '__main__':
embed_with_str()
調用輸出
{
"status_code": 200,
"request_id": "617b3670-6f9e-9f47-ad57-997ed8aeba6a",
"code": "",
"message": "",
"output": {
"embeddings": [
{
"embedding": [
0.09393704682588577,
2.4155092239379883,
-1.8923076391220093,
.,
.,
.
],
"text_index": 0
}
]
},
"usage": {
"total_tokens": 23
}
}
在返回中embedding
欄位中的內容就是一條向量。
[
0.09393704682588577,
2.4155092239379883,
-1.8923076391220093,
.,
.,
.
]
什麼是向量維度和向量資料類型
從上文中可以看出,向量實際上是一串數位組合,也就是一個數組,這個數組代表了這段文本的特徵。向量的維度即為這個數組中元素的個數,例如,這個數組中有100個元素,那麼向量就是100維的。仍以DashScope上的通用文本向量為例,通用文本向量返回的向量中都有1536個元素,則向量的維度為1536維,且返回的向量維度是不變的。從通用文本向量的說明文檔中也可以查看向量的維度,如下表所示。
模型中文名 | 模型英文名 | 向量維度 | 單次請求文本最大行數 | 單行最大輸入字元長度 | 支援語種 |
通用文本向量 | text-embedding-v1 | 1536 | 25 | 2048 | 中文、英語、西班牙語、法語、葡萄牙語、印尼語。 |
而向量的資料類型指的是向量數組中元素的資料類型。還是以DashScope上通用文本向量為例,返迴向量的元素均為Float型,則向量的資料類型為Float型。換言之,如果向量為[1,2,3,4],向量中的元素都為整數型,那麼這個向量則為4維的INT型向量。
向量的維度和資料類型,取決於您使用的Embedding的模型,不同的Embedding模型,向量的維度和資料類型可能也是不一樣的。
什麼是向量的距離度量方式
上文中講到向量實際上是一個數組,那麼向量與向量之間的相似性,通常使用向量之間的距離這個參數來衡量。向量檢索服務(DashVector)支援三種典型的距離度量方式。
餘弦距離 Cosine
餘弦相似性是指兩個向量之間的夾角餘弦值,它的計算公式為:
其中,A 和 B 分別表示兩個向量,n 表示向量的維度,· 表示向量的點積,||A||,||B||分別表示兩個向量的模長。
而在DashVector中使用餘弦距離來表示相似性,餘弦距離=1-餘弦相似性,所以餘弦距離取值範圍為[0, 2],越接近 0 表示越相似,越接近 2 表示越不相似。餘弦距離度量的計算公式如下:
歐式距離 Euclidean
歐幾裡得距離是指兩個向量之間的距離,歐式距離越小,表示兩個向量越相似,它的計算公式為:
其中, A 和 B 分別表示兩個向量,n 表示向量的維度。
點積 DotProduct
向量的點積相似性是指兩個向量之間的點積值,也稱內積。點積(內積)結果越大,代表越相似,它的計算公式為:
其中,A 和 B 分別表示兩個向量,n 表示向量的維度。
常見模型及向量參數設定參考
模型名稱 | 向量維度 | 向量資料類型 | 距離度量方式(建議) |
DashScope通用文本向量 | 1536 | Float(32) | Cosine |
DashScope OnePeace多模態向量表徵 | 1536 | Float(32) | Cosine |
OpenAI 文本向量 | 1536 | Float(32) | Cosine |
在建立Collection時,可根據您使用的模型,選擇對應的參數。