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