文档

多类目检索

更新时间:

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   |  
+------------+------------+------------+------------+------------+  

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