本文主要介绍向量的基本概念,包括向量维度、距离度量方式、数据类型等,通过基本概念快速了解什么是向量,以及如何更好地使用向量检索服务。
向量的基本概念
在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 表示向量的维度。
常见模型及向量参数设置参考
模型名称 | 向量维度 | 向量数据类型 | 距离度量方式(建议) |
1536 | Float(32) | Cosine | |
1536 | Float(32) | Cosine | |
OpenAI 文本向量 | 1536 | Float(32) | Cosine |
在创建Collection时,可根据您使用的模型,选择对应的参数。