Proxima CE支持多类目检索方式检索任务,本文为您介绍多类目检索功能的使用方法及示例。
前提条件
已安装Proxima CE包并准备输入表,详情请参见安装Proxima CE包。
按类目查询
当您有多个类目的向量数据,并且需要在每个类目下单独进行批量查询时,就需要使用按类目查询的功能。
建表命令
create table doc_table_float_smoke(pk string,vector string, category bigint) partitioned by (pt string);
create table query_table_float_smoke(pk string,vector string, category bigint) partitioned by (pt string);
导入输入表数据
按类目查询方法的doc表和query表与基础向量检索方式相比,新增了一个BIGINT类型的category
字段。您可以在DataWorks的SQL节点运行以下命令。
重要
doc表和query表的类目要对齐,即要保证两张表category字段下的类目个数与数值一致,不能出现某个类目在一张表里出现,另一张表里没有的情况,否则会导致运行报错,需要手动处理不对齐的类目。
CREATE TABLE category_doc_table_float_smoke(pk STRING, vector STRING, category BIGINT) PARTITIONED BY (pt STRING);
ALTER TABLE category_doc_table_float_smoke add PARTITION(pt='20221111');
INSERT OVERWRITE TABLE category_doc_table_float_smoke PARTITION (pt='20221111') VALUES
('1.nid','1~1~1~1~1~1~1~1', 1),
('2.nid','2~2~2~2~2~2~2~2', 1),
('3.nid','3~3~3~3~3~3~3~3', 1),
('4.nid','4~4~4~4~4~4~4~4', 2),
('5.nid','5~5~5~5~5~5~5~5', 2),
('6.nid','6~6~6~6~6~6~6~6', 2),
('7.nid','7~7~7~7~7~7~7~7', 3),
('8.nid','8~8~8~8~8~8~8~8', 3),
('9.nid','9~9~9~9~9~9~9~9', 3),
('10.nid','10~10~10~10~10~10~10~10', 4);
-- SELECT * FROM category_doc_table_float_smoke;
CREATE TABLE category_query_table_float_smoke(pk STRING, vector STRING, category BIGINT) PARTITIONED BY (pt STRING);
ALTER TABLE category_query_table_float_smoke add PARTITION(pt='20221111');
INSERT OVERWRITE TABLE category_query_table_float_smoke PARTITION (pt='20221111') VALUES
('q1.nid','1~1~1~1~2~2~2~2', 1),
('q2.nid','4~4~4~4~3~3~3~3', 2),
('q3.nid','9~9~9~9~5~5~5~5', 3);
-- SELECT * FROM category_query_table_float_smoke;
使用DataWorks运行
本文以DataWorks运行方式为例,假设已提前创建好了External Volume。
说明
以下示例中所使用的参数配置详情请参见参考:Proxima CE全量参数说明。
命令如下:
--@resource_reference{"proxima-ce-aliyun-1.0.0.jar"}
jar -resources proxima-ce-aliyun-1.0.0.jar -- 上传的 proxima-ce jar 包
-classpath proxima-ce-aliyun-1.0.0.jar com.alibaba.proxima2.ce.ProximaCERunner -- classpath 指定 main 函数入口类
-doc_table category_doc_table_float_smoke -- 输入 doc 表
-doc_table_partition 20221111 -- 输入 doc 表 partition
-query_table category_query_table_float_smoke -- 输入 query 表
-query_table_partition 20221111 -- 输入 query 表 partition
-output_table category_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 udf_proxima_ext -- 用户提供的创建好的 volume on oss,需要底层 oss 目录也创建好,否则会运行失败
-owner_id 123456 -- 用户提供的用于标识自己的唯一id
-- -category_row_num 1 -- 按类目查询时,小类目构建索引的行数,一般无需指定,使用默认值即可
-- -category_col_num 1 -- 按类目查询时,小类目构建索引的列数,一般无需指定,使用默认值即可
-- -category_thread_num 10 -- 按类目查询时,处理大类目任务的并发度,一般无需指定,使用默认值即可
;
运行结果
+------------+------------+------------+------------+------------+
| pk | knn_result | score | category | pt |
+------------+------------+------------+------------+------------+
| q1.nid | 1.nid | 4.0 | 1 | 20221111 |
| q2.nid | 4.nid | 4.0 | 2 | 20221111 |
| q3.nid | 7.nid | 32.0 | 3 | 20221111 |
+------------+------------+------------+------------+------------+
query多类目查询
当一个query有多个类目时,query都需要在相应的类目下面进行查询,该功能和原来的一个query一个类目不冲突。
建表命令
create table doc_table_float_smoke(pk string,vector string, category bigint) partitioned by (pt string);
create table query_table_float_smoke(pk string,vector string, multicategory string) partitioned by (pt string);
导入输入表数据
query多类目查询的doc表和query表与基础向量检索方式相比,doc表新增了一个BIGINT类型的category
字段,query表新增了一个STRING类型的multicategory
字段。您可以在DataWorks的SQL节点运行以下命令。
CREATE TABLE category_doc_table_mc_float_smoke(pk STRING, vector STRING, category BIGINT) PARTITIONED BY (pt STRING);
ALTER TABLE category_doc_table_mc_float_smoke add PARTITION(pt='20221111');
INSERT OVERWRITE TABLE category_doc_table_mc_float_smoke PARTITION (pt='20221111') VALUES
('1.nid','1~1~1~1~1~1~1~1', 1),
('2.nid','2~2~2~2~2~2~2~2', 1),
('3.nid','3~3~3~3~3~3~3~3', 1),
('4.nid','4~4~4~4~4~4~4~4', 2),
('5.nid','1~1~1~1~1~1~1~1', 2),
('6.nid','7~7~7~7~7~7~7~7', 2),
('7.nid','7~7~7~7~7~7~7~7', 3),
('8.nid','8~8~8~8~8~8~8~8', 3),
('9.nid','9~9~9~9~9~9~9~9', 3),
('10.nid','10~10~10~10~10~10~10~10', 4);
-- SELECT * FROM category_doc_table_mc_float_smoke WHERE pt='20221111';
CREATE TABLE category_query_table_mc_float_smoke(pk STRING, vector STRING, multicategory string) PARTITIONED BY (pt STRING);
ALTER TABLE category_query_table_mc_float_smoke add PARTITION(pt='20221111');
INSERT OVERWRITE TABLE category_query_table_mc_float_smoke PARTITION (pt='20221111') VALUES
('q1.nid','1~1~1~1~2~2~2~2', '1,2'),
('q2.nid','4~4~4~4~3~3~3~3', '2'),
('q3.nid','9~9~9~9~5~5~5~5', '2,3');
-- SELECT * FROM category_query_table_mc_float_smoke WHERE pt='20221111';
使用DataWorks运行
本文以DataWorks运行方式为例,假设已提前创建好了External Volume。
说明
以下示例中所使用的参数配置详情请参见参考:Proxima CE全量参数说明。
命令如下:
--@resource_reference{"proxima-ce-aliyun-1.0.0.jar"}
jar -resources proxima-ce-aliyun-1.0.0.jar -- 上传的 proxima-ce jar 包
-classpath proxima-ce-aliyun-1.0.0.jar com.alibaba.proxima2.ce.ProximaCERunner -- classpath 指定 main 函数入口类
-doc_table category_doc_table_mc_float_smoke -- 输入 doc 表
-doc_table_partition 20221111 -- 输入 doc 表 partition
-query_table category_query_table_mc_float_smoke -- 输入 query 表
-query_table_partition 20221111 -- 输入 query 表 partition
-output_table category_output_table_mc_float_smoke -- 输出表
-output_table_partition 20221111 -- 输出表 partition
-data_type float -- 向量数据类型
-dimension 8 -- 向量维度
-topk 2 -- 向量检索的 topk
-job_mode train:build:seek:recall -- 指定检索任务模式,默认为 train:build:seek,加上 recall 能够计算本次检索的召回率
-external_volume_name udf_proxima_ext -- 用户提供的创建好的 volume on oss,需要底层 oss 目录也创建好,否则会运行失败
-owner_id 123456 -- 用户提供的用于标识自己的唯一id
-query_multi_label true -- 如果 query 多类目时此为必选项,设置为 true
-- -category_row_num 1 -- 按类目查询时,小类目构建索引的行数,一般无需指定,使用默认值即可
-- -category_col_num 1 -- 按类目查询时,小类目构建索引的列数,一般无需指定,使用默认值即可
-- -category_thread_num 10 -- 按类目查询时,处理大类目任务的并发度,一般无需指定,使用默认值即可
;
运行结果
+------------+------------+------------+------------+------------+
| pk | knn_result | score | category | pt |
+------------+------------+------------+------------+------------+
| q1.nid | 2.nid | 4.0 | 1 | 20221111 |
| q1.nid | 5.nid | 4.0 | 2 | 20221111 |
| q2.nid | 4.nid | 4.0 | 2 | 20221111 |
| q2.nid | 5.nid | 52.0 | 2 | 20221111 |
| q3.nid | 6.nid | 32.0 | 2 | 20221111 |
| q3.nid | 7.nid | 32.0 | 3 | 20221111 |
+------------+------------+------------+------------+------------+
文档内容是否对您有帮助?