本文为您介绍多类目测试的结论及测试过程。

测试结论

Proxima CE对于多类目场景的按类目检索、类目多标签检索符合预期。

测试过程

  • 测试方法。
    • case1: 生成一批多类目数据,各类目对应的文档数量为1、5、10、20、30,query数据中各类目对应的数量为5、10、20、 5、10,类目阈值假定为15,小类目的行数为2,列数为3,大类目并发度为3,topk为5,数据类型为float,维数2,距离为欧式距离, 验证最终的结果数目,以及正确性。
      各类目对应的文档数量query数据中各类目对应的数量类目阈值小类目的行数小类目的列数大类目并发度TopK数据类型维度距离
      1、5、10、20、305、10、20、5、10152335FLOAT2欧式距离
    • case2: 只有小类目,没有大类目时,正确性验证。数据是上面case1的数据,CATEGORY_THREASHOLD默认就是100万,也就是只有小类目。距离为计算欧式距离。
      各类目对应的文档数量query数据中各类目对应的数量类目阈值小类目的行数小类目的列数大类目并发度TopK数据类型维度距离
      1、5、10、20、305、10、20、5、10100W23-5FLOAT2欧式距离
    • case3: 和case2一致,距离为计算内积。
      各类目对应的文档数量query数据中各类目对应的数量类目阈值小类目的行数列数大类目并发度TopK数据类型维度距离
      1、5、10、20、305、10、20、5、10100W23-5FLOAT2计算内积
    • case4: 只有小类目,没有大类目,文档数量为1、5、10,query数量1、5、10,数据类型是binary,距离为hamming距离。验证最终结果数目,以及正确性。类目阈值1000000。
      各类目对应的文档数量query数据中各类目对应的数量类目阈值小类目的行数小类目的列数大类目并发度TopK数据类型维度距离
      1、5、101、5、10100000023-5BINARY4Hamming距离
    • case5: 只有大类目,没有小类目时,正确性验证。数据是上面case1的数据,去掉类目1,5,10。
      各类目对应的文档数量query数据中各类目对应的数量类目阈值大类目的行数列数大类目并发度TopK数据类型维度距离
      20、305、10152335FLOAT2欧式距离
    • case6: query为multicategory多类目,doc数据和case1一致。
      各类目对应的文档数量query数据中各类目对应的数量类目阈值小类目的行数列数大类目并发度TopK数据类型维度距离
      1、5、10、20、30multicategory数据152335FLOAT2欧式距离
  • 对比测试。
    • Case1:输入数据:类目1、5、10、20、30对应的文档数分别为1、5、10、20、30,query数据中类目1、5、10、20、30对应的query数目分别为5、10、20、5和10。数据类型为float,维数为2。距离为欧式距离。
      1. 数据准备。

        各类目数据生成规则为key+类目id-idx,idx~idx,类目id,例如:key1-1,1~1,1

        doc数据如下:
         key1-1,1~1,1
         key5-1,1~1,5
         ... ...
         key5-5,5~5,5
         key10-1,1~1,10
         key10-2,2~2,10
         ... ...
         key10-9,9~9,10
         key10-10,10~10,10
         key20-1,1~1,20
         ... ...
         key20-20,20~20,20
         key30-1,1~1,30
         ... ...
         key30-30,30~30,30
        query数据如下:
         key1-1,1~1,1
         ... ...
         key1-5,5~5,1
         key5-1,1~1,5
         ... ...
         key5-10,10~10,5
         key10-1,1~1,10
         ... ...
         key10-20,20~20,10
         key20-1,1~1,20
         ... ...
         key20-5,5~5,20
         key30-1,1~1,30
         ... ...
         key30-10,10~10,30
      2. 运行结果。
        将类目阈值假定为15,小类目的行数为2,列数为3,大类目并发度为3,topn为5,则小类目数目为3,大类目数目为2,观察最终执行结果如下,符合预期。
        +----+------------+-------+------------+----+
        | pk | knn_result | score | category   | pt |
        +----+------------+-------+------------+----+
        | key30-1 | key30-1    | 0.0   | 30         | 20210712 |
        | key30-1 | key30-2    | 2.0   | 30         | 20210712 |
        | key30-1 | key30-3    | 8.0   | 30         | 20210712 |
        | key30-1 | key30-4    | 18.0  | 30         | 20210712 |
        | key30-1 | key30-5    | 32.0  | 30         | 20210712 |
        ... ...
        | key20-5 | key20-5    | 0.0   | 20         | 20210712 |
        | key20-5 | key20-6    | 2.0   | 20         | 20210712 |
        | key20-5 | key20-4    | 2.0   | 20         | 20210712 |
        | key20-5 | key20-3    | 8.0   | 20         | 20210712 |
        | key20-5 | key20-7    | 8.0   | 20         | 20210712 |
        
        jar 命令:odpscmd -e "jar -resources proxima-ce-xl-222.jar -classpath ./proxima-ce-xl-222.jar com.alibaba.proxima2.ce.ProximaCERunner -doc_table cat_doc_table -doc_table_partition 20210712 -query_table cat_query_table -query_table_partition 20210712 -output_table cat_result_table -output_table_partition 20210712 -data_type int8 -dimension 2 -app_id 201220 -category_row_num 2 -category_col_num 3 -topk 5 -category_thread_num 3 -category_threshold 15;
    • Case2: 所有类目都是小类目,计算欧式距离,预期结果和case1的结果一致。
      1. 数据准备:与case1一致。
      2. 运行结果。
        预期结果和case1的结果一致,经过验证,符合预期。结果如下:
        +----+------------+-------+------------+----+
        | pk | knn_result | score | category   | pt |
        +----+------------+-------+------------+----+
        | key10-18 | key10-10   | 128.0 | 10         | 20210712 |
        | key10-18 | key10-9    | 162.0 | 10         | 20210712 |
        | key10-18 | key10-8    | 200.0 | 10         | 20210712 |
        | key10-18 | key10-7    | 242.0 | 10         | 20210712 |
        | key10-18 | key10-6    | 288.0 | 10         | 20210712 |
        ...
        | key30-8 | key30-8    | 0.0   | 30         | 20210712 |
        | key30-8 | key30-9    | 2.0   | 30         | 20210712 |
        | key30-8 | key30-7    | 2.0   | 30         | 20210712 |
        | key30-8 | key30-6    | 8.0   | 30         | 20210712 |
        | key30-8 | key30-10   | 8.0   | 30         | 20210712 |
        | key5-5 | key5-5     | 0.0   | 5          | 20210712 |
        | key5-5 | key5-4     | 2.0   | 5          | 20210712 |
        | key5-5 | key5-3     | 8.0   | 5          | 20210712 |
        | key5-5 | key5-2     | 18.0  | 5          | 20210712 |
        | key5-5 | key5-1     | 32.0  | 5          | 20210712 |
        +----+------------+-------+------------+----+
        
        jar命令:odpscmd -e "jar -resources proxima-ce-xl-222.jar -classpath ./proxima-ce-xl-222.jar com.alibaba.proxima2.ce.ProximaCERunner -doc_table cat_doc_table -doc_table_partition 20210712 -query_table cat_query_table -query_table_partition 20210712 -output_table cat_result_table -output_table_partition 20210712 -data_type int8 -dimension 2 -app_id 201220 -category_row_num 2 -category_col_num 3 -topk 5 -category_thread_num 3 -category_threshold 100;"
    • Case3: 输入数据和case2一致,区别在于case3距离为计算内积。
      1. 数据准备:和case1一致。
      2. 运行结果:符合预期。结果如下:
        +----+------------+-------+------------+----+
        | pk | knn_result | score | category   | pt |
        +----+------------+-------+------------+----+
        | key10-10 | key10-1    | 20.0  | 10         | 20210712 |
        | key10-10 | key10-2    | 40.0  | 10         | 20210712 |
        | key10-10 | key10-3    | 60.0  | 10         | 20210712 |
        | key10-10 | key10-4    | 80.0  | 10         | 20210712 |
        | key10-10 | key10-5    | 100.0 | 10         | 20210712 |
        | key10-19 | key10-1    | 38.0  | 10         | 20210712 |
        | key10-19 | key10-2    | 76.0  | 10         | 20210712 |
        | key10-19 | key10-3    | 114.0 | 10         | 20210712 |
        | key10-19 | key10-4    | 152.0 | 10         | 20210712 |
        | key10-19 | key10-5    | 190.0 | 10         | 20210712 |
        ... ...
        | key10-17 | key10-1    | 34.0  | 10         | 20210712 |
        | key10-17 | key10-2    | 68.0  | 10         | 20210712 |
        | key10-17 | key10-3    | 102.0 | 10         | 20210712 |
        | key10-17 | key10-4    | 136.0 | 10         | 20210712 |
        | key10-17 | key10-5    | 170.0 | 10         | 20210712 |
        | key30-8 | key30-16   | 256.0 | 30         | 20210712 |
        | key30-8 | key30-17   | 272.0 | 30         | 20210712 |
        | key30-8 | key30-18   | 288.0 | 30         | 20210712 |
        | key30-8 | key30-19   | 304.0 | 30         | 20210712 |
        | key30-8 | key30-20   | 320.0 | 30         | 20210712 |
        +----+------------+-------+------------+----+
        
        jar命令:odpscmd -e "jar -resources proxima-ce-xl-222.jar -classpath ./proxima-ce-xl-222.jar com.alibaba.proxima2.ce.ProximaCERunner -doc_table cat_doc_table -doc_table_partition 20210712 -query_table cat_query_table -query_table_partition 20210712 -output_table cat_result_table -output_table_partition 20210712 -data_type float -dimension 2 -app_id 201220 -category_row_num 2 -category_col_num 3 -topk 5 -category_thread_num 3 -category_threshold 100 -distance_method InnerProduct;"
    • Case4: 输入数据:类目1、5、10对应的文档数分别为1、5、10,query数据中类目1、5、10。对应的query数目分别为1、5、10。数据类型为binary,维数为4。距离为欧式距离。doc和query的数据一致。
      1. 数据准备。
        key1-1,1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1,1
        key5-1,0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0,5
        key5-2,0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0,5
        key5-3,0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1,5
        key5-4,1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1,5
        key5-5,1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1,5
        key10-1,0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0,10
        key10-2,0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0,10
        key10-3,0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1,10
        key10-4,0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1,10
        key10-5,1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1,10
        key10-6,1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1,10
        key10-7,1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1,10
        key10-8,1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1,10
        key10-9,1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1,10
        key10-10,1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1~1,10
      2. 运行结果:符合预期。结果如下:
        +----+------------+-------+------------+----+
        | pk | knn_result | score | category   | pt |
        +----+------------+-------+------------+----+
        | key10-9 | key10-8    | 0.0   | 10         | 20210712 |
        | key10-9 | key10-9    | 0.0   | 10         | 20210712 |
        | key10-9 | key10-10   | 0.0   | 10         | 20210712 |
        | key10-9 | key10-5    | 0.0   | 10         | 20210712 |
        | key10-9 | key10-7    | 0.0   | 10         | 20210712 |
        | key5-4 | key5-5     | 0.0   | 5          | 20210712 |
        | key5-4 | key5-4     | 0.0   | 5          | 20210712 |
        | key5-4 | key5-3     | 15.0  | 5          | 20210712 |
        | key5-4 | key5-1     | 32.0  | 5          | 20210712 |
        | key5-4 | key5-2     | 32.0  | 5          | 20210712 |
        ...
        | key10-3 | key10-7    | 15.0  | 10         | 20210712 |
        | key1-1 | key1-1     | 0.0   | 1          | 20210712 |
        | key10-4 | key10-4    | 0.0   | 10         | 20210712 |
        | key10-4 | key10-3    | 0.0   | 10         | 20210712 |
        | key10-4 | key10-7    | 15.0  | 10         | 20210712 |
        | key10-4 | key10-6    | 15.0  | 10         | 20210712 |
        | key10-4 | key10-5    | 15.0  | 10         | 20210712 |
        +----+------------+-------+------------+----+
        
        jar命令:odpscmd -e "jar -resources proxima-ce-xl-222.jar -classpath ./proxima-ce-xl-222.jar com.alibaba.proxima2.ce.ProximaCERunner -doc_table cat_doc_table -doc_table_partition 20210712 -query_table cat_query_table -query_table_partition 20210712 -output_table cat_result_table -output_table_partition 20210712 -data_type binary -dimension 32 -app_id 201220 -category_row_num 2 -category_col_num 3 -topk 5 -category_thread_num 3 -category_threshold 100 -distance_method hamming;"
    • Case5: 所有类目都是大类目,预期结果和case1的结果一致,经过验证,符合预期。大类目的阈值是15,query和case1数据一致。doc数据将类目1、5、10去掉,只保留20、30。doc_table数据如下。
      1. 数据准备。
        query数据和case1一致,doc数据如下:
        key20-1   1~1   20
        key20-2   2~2   20
        ... ...
        key20-19   19~19   20
        key20-20   20~20   20
        key30-1   1~1   30
        key30-2   2~2   30
        ... ...
        key30-28   28~28   30
        key30-29   29~29   30
        key30-30   30~30   30
      2. 运行结果:符合预期。结果如下:
        +----+------------+-------+------------+----+
        | pk | knn_result | score | category   | pt |
        +----+------------+-------+------------+----+
        | key30-1 | key30-1    | 0.0   | 30         | 20210712 |
        | key30-1 | key30-2    | 2.0   | 30         | 20210712 |
        | key30-1 | key30-3    | 8.0   | 30         | 20210712 |
        | key30-1 | key30-4    | 18.0  | 30         | 20210712 |
        | key30-1 | key30-5    | 32.0  | 30         | 20210712 |
        | key30-2 | key30-2    | 0.0   | 30         | 20210712 |
        | key30-2 | key30-3    | 2.0   | 30         | 20210712 |
        | key30-2 | key30-1    | 2.0   | 30         | 20210712 |
        | key30-2 | key30-4    | 8.0   | 30         | 20210712 |
        | key30-2 | key30-5    | 18.0  | 30         | 20210712 |
        ... ...
        | key20-1 | key20-1    | 0.0   | 20         | 20210712 |
        | key20-1 | key20-2    | 2.0   | 20         | 20210712 |
        | key20-1 | key20-3    | 8.0   | 20         | 20210712 |
        | key20-1 | key20-4    | 18.0  | 20         | 20210712 |
        | key20-1 | key20-5    | 32.0  | 20         | 20210712 |
        ... ...
        | key20-5 | key20-5    | 0.0   | 20         | 20210712 |
        | key20-5 | key20-6    | 2.0   | 20         | 20210712 |
        | key20-5 | key20-4    | 2.0   | 20         | 20210712 |
        | key20-5 | key20-7    | 8.0   | 20         | 20210712 |
        | key20-5 | key20-3    | 8.0   | 20         | 20210712 |
        +----+------------+-------+------------+----+
        
        jar命令:odpscmd -e "jar -resources proxima-ce-xl-222.jar -classpath ./proxima-ce-xl-222.jar com.alibaba.proxima2.ce.ProximaCERunner -doc_table cat_doc_table -doc_table_partition 20210712 -query_table cat_query_table -query_table_partition 20210712 -output_table cat_result_table -output_table_partition 20210712 -data_type int8 -dimension 2 -app_id 201220 -category_row_num 2 -category_col_num 3 -topk 5 -category_thread_num 3 -category_threshold 15;"
    • Case6: query为multicategory数据,doc数据和case1一致,数据如下。
      1. 数据准备。
        doc数据和case1一致,query数据如下:
        key1-1;1~1;1,5,10
        key1-2;2~2;1,5,10
        key1-3;3~3;1
        key1-4;4~4;1
        key1-5;5~5;1
      2. 运行结果:符合预期。结果如下:
        +----+------------+-------+------------+----+
        | pk | knn_result | score | category   | pt |
        +----+------------+-------+------------+----+
        | key1-1 | key1-1     | 0.0   | 1          | 20210712 |
        | key1-1 | key5-1     | 0.0   | 5          | 20210712 |
        | key1-1 | key10-1    | 0.0   | 10         | 20210712 |
        | key1-1 | key10-2    | 2.0   | 10         | 20210712 |
        | key1-1 | key5-2     | 2.0   | 5          | 20210712 |
        | key1-2 | key5-2     | 0.0   | 5          | 20210712 |
        | key1-2 | key10-2    | 0.0   | 10         | 20210712 |
        | key1-2 | key5-3     | 2.0   | 5          | 20210712 |
        | key1-2 | key5-1     | 2.0   | 5          | 20210712 |
        | key1-2 | key10-1    | 2.0   | 10         | 20210712 |
        | key1-3 | key1-1     | 8.0   | 1          | 20210712 |
        | key1-4 | key1-1     | 18.0  | 1          | 20210712 |
        | key1-5 | key1-1     | 32.0  | 1          | 20210712 |
        +----+------------+-------+------------+----+
        
        jar命令:odpscmd -e "jar -resources proxima-ce-xl-222.jar -classpath ./proxima-ce-xl-222.jar com.alibaba.proxima2.ce.ProximaCERunner -doc_table cat_doc_table -doc_table_partition 20210712 -query_table cat_query_table -query_table_partition 20210712 -output_table cat_result_table -output_table_partition 20210712 -data_type int8 -dimension 2 -app_id 201220 -category_row_num 2 -category_col_num 3 -topk 5 -category_thread_num 3 -category_threshold 15  -query_multi_label true;"