Image Searchを使ってみる#4 評価スコア編

画像検索サービスのImage Searchですが、類似しているかどうかの評価スコアはどこを確認すればよいのでしょうか?

答えは”“sortExprValues”が評価スコアです。

具体的にはInternationalサイトのImage SearchのFAQに記載がありました。

How to interpret the SortExprValues value in the search result?

The SortExprValues value is a pair of two values, separated with a semicolon (;). The first value is a score that indicates the relevance. The higher the value, the more relevant the found image is to the search image. The relevance value falls in the range of [0, 7.33136443711219e+24]. When the result image is identical to the search image, the relevance value is the maximum value 7.33136443711219e+24. The second value is the Hamming distance between the search image and the result image in terms of their feature vectors. The higher the value, the less relevant the found image is to the search image. The sorting algorithm is based on the first value. Image Search does not provide an empirical threshold value for you to determine whether two images are generally relevant.

https://www.alibabacloud.com/help/doc-detail/66610.htm?spm=a2c63.l28256.b99.46.32e73015cykqjy

拙い英語力ですが訳してみます。

  • SortExprValuesの値は、セミコロン(;)で区切られた2つの値のペア
  • 1番目の値は関連性を示すスコア
    • 値が高いほど関連性が高い
    • ”0~7.33136443711219e + 24”の範囲内
    • 検索キーとした画像と結果の画像が同一の場合は最大値の”7.33136443711219e + 24”となる
    • 検索結果は1番目の値で決めている
  • 2番目の値はそれらの特徴ベクトルに関する検索画像と結果画像の間のハミング距離
    • 値が高いほど関連性が低い
  • Image Searchでは2つの画像が一般的に関連性があるかどうかを判断するための経験的なしきい値は提供されません。

ポイントは SortExprValuesは2つの値のペアで、1番目の値が高いほど検索キーの画像と結果の画像の関連性が高く、また、検索結果の順位も高くなるとのこと。

この観点で再度、Image Searchの戻り値を確認してみます。

以下のの記事で最初のテストの結果は以下でした。

{
“data”: {
“result”: {
“auctions”: [
{
“catId”: “8”,
“custContent”: “k1:v1,k2:v2,k3:v3”,
“itemId”: “16”,
“picName”: “16.jpg”,
“sortExprValues”: “5.37633353624177e+24;0”
},
{
“catId”: “8”,
“custContent”: “k1:v1,k2:v2,k3:v3”,
“itemId”: “15”,
“picName”: “15.jpg”,
“sortExprValues”: “85.3700790405273;176”
},
{
“catId”: “8”,
“custContent”: “k1:v1,k2:v2,k3:v3”,
“itemId”: “14”,
“picName”: “14.jpg”,
“sortExprValues”: “35.7254829406738;171”
},
{
“catId”: “8”,
“custContent”: “k1:v1,k2:v2,k3:v3”,
“itemId”: “13”,
“picName”: “13.jpg”,
“sortExprValues”: “25.9466323852539;175”
},
{
“catId”: “8”,
“custContent”: “k1:v1,k2:v2,k3:v3”,
“itemId”: “17”,
“picName”: “17.jpg”,
“sortExprValues”: “4.06835699081421;220”
},
{
“catId”: “8”,
“custContent”: “k1:v1,k2:v2,k3:v3”,
“itemId”: “12”,
“picName”: “12.jpg”,
“sortExprValues”: “4.00491619110107;225”
},
{
“catId”: “8”,
“custContent”: “k1:v1,k2:v2,k3:v3”,
“itemId”: “19”,
“picName”: “19.jpg”,
“sortExprValues”: “3.7469220161438;218”
},
{
“catId”: “8”,
“custContent”: “k1:v1,k2:v2,k3:v3”,
“itemId”: “18”,
“picName”: “18.jpg”,
“sortExprValues”: “3.5771472454071;225”
},
{
“catId”: “8”,
“custContent”: “k1:v1,k2:v2,k3:v3”,
“itemId”: “21”,
“picName”: “21.jpg”,
“sortExprValues”: “3.56994247436523;240”
},
{
“catId”: “8”,
“custContent”: “k1:v1,k2:v2,k3:v3”,
“itemId”: “3”,
“picName”: “3.jpg”,
“sortExprValues”: “3.37384438514709;201”
}
],
“code”: 0,
“head”: {
“docsFound”: 21,
“docsReturn”: 10,
“searchTime”: 183
},
“message”: “success”,
“picInfo”: {
“allCategory”: [
{
“id”: “0”,
“name”: “Tops”
},
{
“id”: “1”,
“name”: “Dress”
},
{
“id”: “2”,
“name”: “Bottoms”
},
{
“id”: “3”,
“name”: “Bag”
},
{
“id”: “4”,
“name”: “Shoes”
},
{
“id”: “5”,
“name”: “Accessories”
},
{
“id”: “6”,
“name”: “Snack”
},
{
“id”: “7”,
“name”: “Makeup”
},
{
“id”: “8”,
“name”: “Bottle”
},
{
“id”: “9”,
“name”: “Furniture”
},
{
“id”: “20”,
“name”: “Toy”
},
{
“id”: “21”,
“name”: “Underwear”
},
{
“id”: “22”,
“name”: “Digital device”
},
{
“id”: “88888888”,
“name”: “Other”
}
],
“category”: “8”,
“region”: “26,178,27,289”
},
“requestId”: “8E22BB97-F36C-47C0-94D9-ECF4D9ED2C84”,
“success”: true
}
},
“success”: true
}

まず、最初に見るべきは以下です。

  • docsFoundはImage Searchに登録されている画像総数
  • docsReturnは検索で関連性があると判断された画像数
  • searchTimeは検索時間
“head”: {
“docsFound”: 21,
“docsReturn”: 10,
“searchTime”: 183
},

つまり、 21個の総数から10個が関連性があると判断されています。 この10個の画像について、”sortExprValues”を並べて比較してみます。

Search RankitemIdsortExprValuesの1番目の値
1165.37633353624177e+24
21585.3700790405273
31435.7254829406738
41325.9466323852539
5174.06835699081421
6124.00491619110107
7193.7469220161438
8183.5771472454071
9213.56994247436523
1033.37384438514709

表にしてみると一目瞭然なのですが検索結果の1位と2位とではsortExprValuesの値は大きな差異があります。1位は約5.4e+24、2位は85.3です。 検索結果として10個の応答がありましたがその順位はそのまま受け取るわけにはいかないようです。 上記の結果でいえば、1位と2位の間にはとてつもない差があるわけです(e+24)。

前回の記事ではImage Searchから応答がされた画像を単純に1位、2位、3位としていました。しかし、実際の利用シーンでは sortExprValuesの値を判断し、クライアントに表示するかどうかのロジックの追加が必要と言えます。 また、このときの閾値はPoCや利用用途に応じてサービス提供者側で判断、チューニングが必要そうです。