このトピックでは、マルチカテゴリテストのテスト結論と手順について説明します。
テストの結論
プロキシマCEは、マルチカテゴリシナリオにおけるカテゴリによる検索およびカテゴリによるマルチラベル検索に適している。
テストの実行手順
テスト方法
ケース1: このテストケースは、マルチカテゴリデータのバッチを生成します。 docテーブルの各カテゴリのドキュメントの数は、1、5、10、20、および30です。 クエリテーブルの各カテゴリのドキュメント数は、5、10、20、5、10です。 カテゴリしきい値は15に設定されます。 小さなカテゴリの行数は2で、小さなカテゴリの列数は3です。 大きなカテゴリの並列度は3です。 トップKの値は5である。 データ型はFLOATです。 次元の数は2である。 距離測定タイプはユークリッド距離です。 このテストケースは、テスト結果の正しさを確認することを目的としています。
docテーブルの各カテゴリのドキュメント数
クエリテーブルの各カテゴリのドキュメント数
カテゴリのしきい値
小さなカテゴリの行数
小さなカテゴリの列数
大規模カテゴリの並列度
トップK
データ型
Number of dimensions
距離測定タイプ
1、5、10、20、および30
5、10、20、5、および10
15
2
3
3
5
FLOAT
2
ユークリッド距離
ケース2: このテストケースは、小さなカテゴリしか存在しない場合のテスト結果の正当性をチェックすることを目的としています。 テストデータは、ケース1のテストデータと同じである。 カテゴリのしきい値は1000000です。 この値は、小さなカテゴリのみが存在することを示します。 距離測定タイプはユークリッド距離です。
docテーブルの各カテゴリのドキュメント数
クエリテーブルの各カテゴリのドキュメント数
カテゴリのしきい値
小さなカテゴリの行数
小さなカテゴリの列数
大規模カテゴリの並列度
トップK
データ型
Number of dimensions
距離測定タイプ
1、5、10、20、および30
5、10、20、5、および10
1000000
2
3
-
5
FLOAT
2
ユークリッド距離
ケース3: テストデータは、ケース2のテストデータと同じである。 距離測定タイプは内積です。
docテーブルの各カテゴリのドキュメント数
クエリテーブルの各カテゴリのドキュメント数
カテゴリのしきい値
小さなカテゴリの行数
小さなカテゴリの列数
大規模カテゴリの並列度
トップK
データ型
Number of dimensions
距離測定タイプ
1、5、10、20、および30
5、10、20、5、および10
1000000
2
3
-
5
FLOAT
2
内部プロダクト
ケース4: このテストケースは、小さなカテゴリしか存在しない場合のテスト結果の正当性をチェックすることを目的としています。 docテーブルの各カテゴリのドキュメント数は、1、5、10です。 クエリテーブルの各カテゴリのドキュメント数は、1、5、10です。 データ型はBINARYです。 距離測定タイプはハミング距離です。 カテゴリのしきい値は1000000です。
docテーブルの各カテゴリのドキュメント数
クエリテーブルの各カテゴリのドキュメント数
カテゴリのしきい値
小さなカテゴリの行数
小さなカテゴリの列数
大規模カテゴリの並列度
トップK
データ型
Number of dimensions
距離測定タイプ
1、5、および10
1、5、および10
1000000
2
3
-
5
BINARY
4
ハミング距離
ケース5: このテストケースは、大きなカテゴリのみが存在する場合のテスト結果の正しさをチェックすることを目的としています。 テストデータは、カテゴリ1、5、および10を除いたケース1のテストデータと同じである。
docテーブルの各カテゴリのドキュメント数
クエリテーブルの各カテゴリのドキュメント数
カテゴリのしきい値
大きなカテゴリの行数
大きなカテゴリの列数
大規模カテゴリの並列度
トップK
データ型
Number of dimensions
距離測定タイプ
20および30
5および10
15
2
3
3
5
FLOAT
2
ユークリッド距離
ケース6: このテストケースは、マルチカテゴリごとにクエリテーブル内のデータをテストするために使用されます。 このテストケースのdocテーブルのデータは、ケース1のdocテーブルのデータと同じです。
docテーブルの各カテゴリのドキュメント数
クエリテーブルの各カテゴリのドキュメント数
カテゴリのしきい値
小さなカテゴリの行数
小さなカテゴリの列数
大規模カテゴリの並列度
トップK
データ型
Number of dimensions
距離測定タイプ
1、5、10、20、および30
マルチカテゴリデータ
15
2
3
3
5
FLOAT
2
ユークリッド距離
比較テスト
ケース1: 入力データ: docテーブルのカテゴリ1、5、10、20、30のドキュメントの数は、1、5、10、20、30です。 クエリテーブルのカテゴリ1、5、10、20、および30のドキュメントの数は、5、10、20、5、および10です。 データ型はFLOATで、ディメンション数は2です。 距離測定タイプはユークリッド距離です。
データを準備します。
マルチカテゴリデータは、
key1-1、1〜1、1のようなキー + カテゴリID − idx、idx〜idx、カテゴリIDフォーマットで生成される。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クエリテーブルには、次のデータが含まれます。
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テスト結果を取得します。
たとえば、カテゴリしきい値は15であり、小カテゴリの行数は2であり、小カテゴリの列数は3であり、大カテゴリの並列度は3であり、上位Kの値は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 command: 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;
ケース2: すべてのカテゴリは小さなカテゴリです。 距離測定タイプはユークリッド距離です。 このテストケースの期待結果は、ケース1の期待結果と同じである。
データを準備します。 このテストケースのデータは、ケース1のデータと同じである。
テスト結果を取得します。
このテストケースの期待結果は、ケース1の期待結果と同じである。 テスト結果は正しく、期待を満たしています。 次の応答が返されます。
+----+------------+-------+------------+----+ | 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 command: 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;"
ケース3: このテストケースの入力データは、ケース2の入力データと同じである。 距離測定タイプは、ケース3の内積である。
データを準備します。 このテストケースのデータは、ケース1のデータと同じである。
テスト結果を取得します。 結果は期待に応えます。 次の応答が返されます。
+----+------------+-------+------------+----+ | 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 command: 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;"
ケース4: 入力データ: docテーブルのカテゴリ1、5、10のドキュメントの数は1、5、10です。 クエリテーブルのカテゴリ1、5、および10のドキュメントの数は、1、5、および10です。 データ型はBINARYで、ディメンション数は4です。 距離測定タイプはユークリッド距離です。 docテーブルのデータは、クエリテーブルのデータと一致しています。
データを準備します。
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テスト結果を取得します。 結果は期待に応えます。 次の応答が返されます。
+----+------------+-------+------------+----+ | 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 command: 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;"
ケース5: すべてのカテゴリは大きなカテゴリです。 このテストケースの期待結果は、ケース1の期待結果と同じである。 テスト結果は正しく、期待を満たしています。 大きなカテゴリのしきい値は15で、このテストケースのクエリテーブルのデータはケース1のクエリテーブルのデータと同じです。 カテゴリ1、5、および10はdocテーブルのデータから削除され、カテゴリ20および30のみが保持されます。
データを準備します。
このテストケースのクエリテーブル内のデータは、ケース1のクエリテーブル内のデータと同じである。 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テスト結果を取得します。 結果は期待に応えます。 次の応答が返されます。
+----+------------+-------+------------+----+ | 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 command: 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;"
ケース6: このテストケースは、マルチカテゴリごとにクエリテーブル内のデータをテストするために使用されます。 このテストケースのdocテーブルのデータは、ケース1のdocテーブルのデータと同じです。
データを準備します。
このテストケースのdocテーブルのデータは、ケース1のdocテーブルのデータと同じです。 クエリテーブルには、次のデータが含まれます。
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テスト結果を取得します。 結果は期待に応えます。 次の応答が返されます。
+----+------------+-------+------------+----+ | 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 command: 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;"