使用通用文本向量模型可以免去您在本地部署嵌入模型与向量数据库的步骤,且按token进行计费,帮助您降低在项目初期的投入成本。
前言
通用文本向量,是通义实验室基于LLM底座的多语言文本统一向量模型,面向全球多个主流语种,提供高水准的向量服务,帮助开发者将文本数据快速转换为高质量的向量数据。
模型中文名 | 模型英文名 | 向量维度 | 单次请求文本最大行数 | 单行最大输入字符长度 | 支持语种 |
通用文本向量 | text-embedding-v1 | 1536 | 25 | 2048 | 中文、英语、西班牙语、法语、葡萄牙语、印尼语。 |
text-embedding-async-v1 | 1536 | 100000 | 2048 | 中文、英语、西班牙语、法语、葡萄牙语、印尼语。 | |
text-embedding-v2 | 1536 | 25 | 2048 | 中文、英语、西班牙语、法语、葡萄牙语、印尼语、日语、韩语、德语、俄罗斯语。 | |
text-embedding-async-v2 | 1536 | 100000 | 2048 | 中文、英语、西班牙语、法语、葡萄牙语、印尼语、日语、韩语、德语、俄罗斯语。 |
text-embedding-v2是text-embedding-v1模型的升级版本, 更新内容主要包括:
语种扩充: text-embedding-v2模型对比text-embedding-v1模型扩展日语、韩语、德语、俄罗斯语文本向量化能力。
效果提升: 预训练模型底座和SFT策略优化提升embedding模型整体效果,公开数据评测结果。
模型
MTEB
MTEB(Retrieval task)
CMTEB
CMTEB (Retrieval task)
text-embedding-v1
58.30
45.47
59.84
56.59
text-embedding-v2
60.13
49.49
62.17
62.78
归一化处理: text-embedding-v2对输出向量结果默认归一化处理。
使用注意
向量检索需保持离在线使用的向量化模型一致,使用text-embedding-v1构建离线索引数据的场景请勿使用text-embedding-v2作为query请求的向量化模型,反之亦然。
快速调用
调用前准备
已开通服务并获得API-KEY:开通DashScope并创建API-KEY
已安装最新版SDK:安装DashScope SDK。
我们推荐您将API-KEY配置到环境变量中以降低API-KEY的泄露风险,详情可参考通过环境变量配置API-KEY。
重要您也可以在代码中配置API-KEY,但是会存在泄露风险。
代码示例
同步调用示例
同步调用支持输入单条文本,对单条文本进行处理并返回结果。
import dashscope
from http import HTTPStatus
import os
def embed_with_str():
resp = dashscope.TextEmbedding.call(
model=dashscope.TextEmbedding.Models.text_embedding_v1,
api_key=os.getenv('DASHSCOPE_API_KEY'), # 如果您没有配置环境变量,请将您的APIKEY填写在这里
input='衣服的质量杠杠的,很漂亮,不枉我等了这么久啊,喜欢,以后还来这里买')
if resp.status_code == HTTPStatus.OK:
print(resp)
else:
print(resp)
if __name__ == '__main__':
embed_with_str()
import java.util.Arrays;
import com.alibaba.dashscope.embeddings.TextEmbedding;
import com.alibaba.dashscope.embeddings.TextEmbeddingParam;
import com.alibaba.dashscope.embeddings.TextEmbeddingResult;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import java.lang.System;
public final class Main {
public static void basicCall() throws ApiException, NoApiKeyException{
TextEmbeddingParam param = TextEmbeddingParam
.builder()
.model(TextEmbedding.Models.TEXT_EMBEDDING_V1)
.apiKey(System.getenv("DASHSCOPE_API_KEY"))
.texts(Arrays.asList("风急天高猿啸哀", "渚清沙白鸟飞回", "无边落木萧萧下", "不尽长江滚滚来")).build();
TextEmbedding textEmbedding = new TextEmbedding();
TextEmbeddingResult result = textEmbedding.call(param);
System.out.println(result);
}
public static void main(String[] args){
try {
basicCall();
} catch (ApiException | NoApiKeyException e) {
System.out.println(e.getMessage());
}
System.exit(0);
}
}
同步调用输出
{
"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
}
}
批处理接口调用
如果您有大批量数据需要处理,可以使用批处理接口。
from dashscope import BatchTextEmbedding
import os
def call():
result = BatchTextEmbedding.call(
model=BatchTextEmbedding.Models.text_embedding_async_v1,
api_key=os.getenv("DASHSCOPE_API_KEY"),
url="https://dashscope.oss-cn-beijing.aliyuncs.com/samples/text/text-embedding-test.txt",
text_type="document")
print(result)
if __name__ == '__main__':
call()
import com.alibaba.dashscope.embeddings.BatchTextEmbedding;
import com.alibaba.dashscope.embeddings.BatchTextEmbeddingParam;
import com.alibaba.dashscope.embeddings.BatchTextEmbeddingResult;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import java.lang.System;
public class Main {
public static void basicCall() throws ApiException, NoApiKeyException {
BatchTextEmbeddingParam param = BatchTextEmbeddingParam.builder()
.model(BatchTextEmbedding.Models.TEXT_EMBEDDING_ASYNC_V1)
.apiKey(System.getenv("DASHSCOPE_API_KEY"))
.url("https://modelscope.oss-cn-beijing.aliyuncs.com/resource/text_embedding_file.txt")
.build();
BatchTextEmbedding textEmbedding = new BatchTextEmbedding();
BatchTextEmbeddingResult result = textEmbedding.call(param);
System.out.println(result);
}
public static void main(String[] args) {
try {
basicCall();
} catch (ApiException | NoApiKeyException e) {
System.out.println(e.getMessage());
}
System.exit(0);
}
}
Python示例输出
{
"status_code": 200,
"request_id": "766b7431-22c9-9a64-9ed3-32b5049c2757",
"code": null,
"message": "",
"output": {
"task_id": "35a1b2d1-e7b6-4749-90c1-4169e2953508",
"task_status": "SUCCEEDED",
"url": "xxx",
"submit_time": "2024-06-12 11:16:22.096",
"scheduled_time": "2024-06-12 11:16:22.114",
"end_time": "2024-06-12 11:16:24.235"
},
"usage": {
"total_tokens": 384
}
}
了解更多
通用文本向量同步调用代码示例如上,有关通用文本向量模型API的详细调用文档可前往同步接口API详情页面进行了解。批量数据异步接口代码示例详见批处理接口API详情。