文档

基础向量检索

更新时间:

Proxima CE支持使用基础向量检索和百万TopK检索的方式检索任务,本文为您介绍Proxima CE中使用基础向量检索离线任务的方法及示例。

前提条件

已安装Proxima CE包并准备输入表,详情请参见安装Proxima CE包

导入输入表数据

如果您想先测试整个流程,可以在DataWorks的SQL节点运行以下命令,生成简单的小数据表来运行简单的检索示例。

说明

您需要自行将相关的向量数据导入已经创建好的doc表和query表中。

CREATE TABLE doc_table_float_smoke(pk STRING, vector STRING) PARTITIONED BY (pt STRING);
ALTER TABLE doc_table_float_smoke add PARTITION(pt='20221111');
INSERT OVERWRITE TABLE doc_table_float_smoke PARTITION (pt='20221111') VALUES
('1.nid','1~1~1~1~1~1~1~1'),
('2.nid','2~2~2~2~2~2~2~2'),
('3.nid','3~3~3~3~3~3~3~3'),
('4.nid','4~4~4~4~4~4~4~4'),
('5.nid','5~5~5~5~5~5~5~5'),
('6.nid','6~6~6~6~6~6~6~6'),
('7.nid','7~7~7~7~7~7~7~7'),
('8.nid','8~8~8~8~8~8~8~8'),
('9.nid','9~9~9~9~9~9~9~9'),
('10.nid','10~10~10~10~10~10~10~10');

CREATE TABLE query_table_float_smoke(pk STRING, vector STRING) PARTITIONED BY (pt STRING);
ALTER TABLE query_table_float_smoke add PARTITION(pt='20221111');
INSERT OVERWRITE TABLE query_table_float_smoke PARTITION (pt='20221111') VALUES
('q1.nid','1~1~1~1~2~2~2~2'),
('q2.nid','4~4~4~4~3~3~3~3'),
('q3.nid','9~9~9~9~5~5~5~5');

运行

您可以在DataWorks或者odpscmd中运行,请根据实际情况选择合适的运行工具。

说明

如果您已经开通Volume权限,并且成功创建了External Volume,可以使用Volume方式运行,否则需要输入AKrole_arn作为必要启动参数,由Proxima CE任务程序化的创建使用。

使用DataWorks运行

您可以在DataWorks上新建MaxCompute ODPS MR节点,通过ODPS SQL脚本来运行Proxima CE。image

说明
  • Volume方式。

    --@resource_reference{"proxima-ce-aliyun-1.0.1.jar"}  -- 引用上传的 proxima-ce jar 包,在左侧「业务流程——MaxCompute——资源」,右击刚刚上传的 jar 包,选择「引用资源」即可生成该行注释
    jar -resources proxima-ce-aliyun-1.0.1.jar  -- 上传的 proxima-ce jar 包
    -classpath proxima-ce-aliyun-1.0.1.jar com.alibaba.proxima2.ce.ProximaCERunner  -- classpath 指定 main 函数入口类
    -doc_table doc_table_float_smoke  -- 输入 doc 表
    -doc_table_partition 20221111  -- 输入 doc 表 partition
    -query_table query_table_float_smoke  -- 输入 query 表
    -query_table_partition 20221111  -- 输入 query 表 partition
    -output_table output_table_float_smoke  -- 输出表
    -output_table_partition 20221111  -- 输出表 partition
    -data_type float  -- 向量数据类型
    -dimension 8  -- 向量维度
    -topk 1  -- 向量检索的 topk
    -job_mode train:build:seek:recall  -- 指定检索任务模式,默认为 train:build:seek,加上 recall 能够计算本次检索的召回率
    -external_volume_name xxx_volume_name -- 用户提供的创建好的 volume on oss,需要底层 oss 目录也创建好,否则会运行失败
    -owner_id 123456  -- 用户提供的用于标识自己的唯一id
    ; -- 注意不要丢掉分号,这是 odps sql 结束的标志
  • AK方式。

    --@resource_reference{"proxima-ce-aliyun-1.0.1.jar"}  -- 引用上传的 proxima-ce jar 包,在左侧「业务流程——MaxCompute——资源」,右击刚刚上传的 jar 包,选择「引用资源」即可生成该行注释
    jar -resources proxima-ce-aliyun-1.0.1.jar  -- 上传的 proxima-ce jar 包
    -classpath proxima-ce-aliyun-1.0.1.jar com.alibaba.proxima2.ce.ProximaCERunner  -- classpath 指定 main 函数入口类
    -doc_table doc_table_float_smoke  -- 输入 doc 表
    -doc_table_partition 20221111  -- 输入 doc 表 partition
    -query_table query_table_float_smoke  -- 输入 query 表
    -query_table_partition 20221111  -- 输入 query 表 partition
    -output_table output_table_float_smoke  -- 输出表
    -output_table_partition 20221111  -- 输出表 partition
    -data_type float  -- 向量数据类型
    -dimension 8  -- 向量维度
    -topk 1  -- 向量检索的 topk
    -job_mode train:build:seek:recall  -- 指定检索任务模式,默认为 train:build:seek,加上 recall 能够计算本次检索的召回率
    -oss_access_id xxx -- 用户提供的 oss access key id
    -oss_access_key xxx -- 用户提供的 oss access key secret
    -oss_endpoint xxx -- 用户提供的 oss endpoint
    -oss_bucket xxx -- 用户提供的创建好的 oss bucket
    -owner_id 123456  -- 用户提供的用于标识自己的唯一id
    ; -- 注意不要丢掉分号,这是 odps sql 结束的标志
  • role_arn方式。

    --@resource_reference{"proxima-ce-aliyun-1.0.1.jar"}  -- 引用上传的 proxima-ce jar 包,在左侧「业务流程——MaxCompute——资源」,右击刚刚上传的 jar 包,选择「引用资源」即可生成该行注释
    jar -resources proxima-ce-aliyun-1.0.1.jar  -- 上传的 proxima-ce jar 包
    -classpath proxima-ce-aliyun-1.0.1.jar com.alibaba.proxima2.ce.ProximaCERunner  -- classpath 指定 main 函数入口类
    -doc_table doc_table_float_smoke  -- 输入 doc 表
    -doc_table_partition 20221111  -- 输入 doc 表 partition
    -query_table query_table_float_smoke  -- 输入 query 表
    -query_table_partition 20221111  -- 输入 query 表 partition
    -output_table output_table_float_smoke  -- 输出表
    -output_table_partition 20221111  -- 输出表 partition
    -data_type float  -- 向量数据类型
    -dimension 8  -- 向量维度
    -topk 1  -- 向量检索的 topk
    -job_mode train:build:seek:recall  -- 指定检索任务模式,默认为 train:build:seek,加上 recall 能够计算本次检索的召回率
    -oss_role_arn xxx -- 用户提供的云账号下可以访问 oss 的 role_arn,形如 `acs:ram::1234xxx5678:role/xxx-role`
    -oss_endpoint xxx -- 用户提供的 oss endpoint
    -oss_bucket xxx -- 用户提供的创建好的 oss bucket
    -owner_id 123456  -- 用户提供的用于标识自己的唯一id
    ; -- 注意不要丢掉分号,这是 odps sql 结束的标志

使用odpscmd运行

如果您使用odpscmd运行,可以在启动odpscmd之后执行如下脚本:

说明

以下示例中所使用的参数配置详情请参见参考:Proxima CE全量参数说明

  • Volume方式。

    odpscmd -e "
    jar -resources proxima-ce-aliyun-1.0.1.jar  -- 上传的 proxima-ce jar 包
    -classpath proxima-ce-aliyun-1.0.1.jar com.alibaba.proxima2.ce.ProximaCERunner  -- classpath 指定 main 函数入口类,注意这里的 proxima-ce-aliyun-1.0.1.jar 是指的该 jar 包所在的本地路径,这里直接使用 proxima-ce-aliyun-1.0.1.jar 名称表示该 jar 与执行脚本位于同一目录下
    -doc_table doc_table_float_smoke  -- 输入 doc 表
    -doc_table_partition 20221111  -- 输入 doc 表 partition
    -query_table query_table_float_smoke  -- 输入 query 表
    -query_table_partition 20221111  -- 输入 query 表 partition
    -output_table output_table_float_smoke  -- 输出表
    -output_table_partition 20221111  -- 输出表 partition
    -data_type float  -- 向量数据类型
    -dimension 8  -- 向量维度
    -topk 1  -- 向量检索的 topk
    -job_mode train:build:seek:recall  -- 指定检索任务模式,默认为 train:build:seek,加上 recall 能够计算本次检索的召回率
    -external_volume_name xxx_volume_name -- 用户提供的创建好的 volume on oss,需要底层 oss 目录也创建好,否则会运行失败
    -owner_id 123456  -- 用户提供的用于标识自己的唯一id
    ; -- 注意不要丢掉分号,这是 odps sql 结束的标志
    "
  • AK方式。

    odpscmd -e "
    jar -resources proxima-ce-aliyun-1.0.1.jar  -- 上传的 proxima-ce jar 包
    -classpath proxima-ce-aliyun-1.0.1.jar com.alibaba.proxima2.ce.ProximaCERunner  -- classpath 指定 main 函数入口类,注意这里的 proxima-ce-aliyun-1.0.1.jar 是指的该 jar 包所在的本地路径,这里直接使用 proxima-ce-aliyun-1.0.1.jar 名称表示该 jar 与执行脚本位于同一目录下
    -doc_table doc_table_float_smoke  -- 输入 doc 表
    -doc_table_partition 20221111  -- 输入 doc 表 partition
    -query_table query_table_float_smoke  -- 输入 query 表
    -query_table_partition 20221111  -- 输入 query 表 partition
    -output_table output_table_float_smoke  -- 输出表
    -output_table_partition 20221111  -- 输出表 partition
    -data_type float  -- 向量数据类型
    -dimension 8  -- 向量维度
    -topk 1  -- 向量检索的 topk
    -job_mode train:build:seek:recall  -- 指定检索任务模式,默认为 train:build:seek,加上 recall 能够计算本次检索的召回率
    -oss_access_id xxx -- 用户提供的 oss access key id
    -oss_access_key xxx -- 用户提供的 oss access key secret
    -oss_endpoint xxx -- 用户提供的 oss endpoint
    -oss_bucket xxx -- 用户提供的创建好的 oss bucket
    -owner_id 123456  -- 用户提供的用于标识自己的唯一id
    ; -- 注意不要丢掉分号,这是 odps sql 结束的标志
    "
  • role_arn方式。

    odpscmd -e "
    jar -resources proxima-ce-aliyun-1.0.1.jar  -- 上传的 proxima-ce jar 包
    -classpath proxima-ce-aliyun-1.0.1.jar com.alibaba.proxima2.ce.ProximaCERunner  -- classpath 指定 main 函数入口类,注意这里的 proxima-ce-aliyun-1.0.1.jar 是指的该 jar 包所在的本地路径,这里直接使用 proxima-ce-aliyun-1.0.1.jar 名称表示该 jar 与执行脚本位于同一目录下
    -doc_table doc_table_float_smoke  -- 输入 doc 表
    -doc_table_partition 20221111  -- 输入 doc 表 partition
    -query_table query_table_float_smoke  -- 输入 query 表
    -query_table_partition 20221111  -- 输入 query 表 partition
    -output_table output_table_float_smoke  -- 输出表
    -output_table_partition 20221111  -- 输出表 partition
    -data_type float  -- 向量数据类型
    -dimension 8  -- 向量维度
    -topk 1  -- 向量检索的 topk
    -job_mode train:build:seek:recall  -- 指定检索任务模式,默认为 train:build:seek,加上 recall 能够计算本次检索的召回率
    -oss_role_arn xxx -- 用户提供的云账号下可以访问 oss 的 role_arn,形如 `acs:ram::1234xxx5678:role/xxx-role`
    -oss_endpoint xxx -- 用户提供的 oss endpoint
    -oss_bucket xxx -- 用户提供的创建好的 oss bucket
    -owner_id 123456  -- 用户提供的用于标识自己的唯一id
    ; -- 注意不要丢掉分号,这是 odps sql 结束的标志
    "

运行结果

  • 标准输出结果样例。

    向量检索  数据类型:4 , 向量维度:8 , 检索方式:HNSW , 计算方法:SquaredEuclidean , 构建模式:train:build:seek:recall
    doc表信息 表名: doc_table_float_smoke , 分区:20221111 , doc数量:10 , 向量分隔符:~
    query表信息 表名: query_table_float_smoke , 分区:20221111 , query数量:3 , 向量分隔符:~
    输出表信息 表名: output_table_float_smoke , 分区:20221111
    行列信息  行数: 1 , 列数:1 , 每列索引doc数量:1000000
    是否清除Volume索引:false
    
    各个worker的耗时(单位:秒):
       SegmentationWorker:      1
       TmpTableWorker:      0
       KmeansGraphWorker:       0
       BuildJobWorker:      120
       SeekJobWorker:       60
       TmpResultJoinWorker:     0
       RecallWorker:        60
       CleanUpWorker:       1
    总耗时(单位:分钟):
    
    实际召回率
        Recall@1:   1.0
    
  • output table结果样例。

    +------------+------------+------------+------------+
    | pk         | knn_result | score      | pt         |
    +------------+------------+------------+------------+
    | q1.nid     | 1.nid      | 4.0        | 20221111   |
    | q2.nid     | 3.nid      | 4.0        | 20221111   |
    | q3.nid     | 7.nid      | 32.0       | 20221111   |

百万TopK检索

得益于proxima2.x内核的性能提升,Proxima CE能支持百万量级的TopK检索召回,直接设置启动参数-topk即可。

  • 本页导读 (1)
文档反馈