第五章 Top-k 近似查詢處理方法
5.1 基本處理概念
第四章所述索引結構中的群集、批次集與標籤集,皆屬於索引結構的層級
項目 ( 簡稱索引結構項目),對於一個查詢標籤集 Tq,標籤集可由距離公式計
算出與 Tq 的絕對距離值,而對於一個群集 C ( 或批次集 B ) ,我們利用雙層邊
界機制的估算方法,可算出其擁有之標籤集與 Tq 的距離上限值 U B(Tq, C) ( 或
U B(Tq, B) ) 與下限值 LB(Tq, C) ( 或 LB(Tq, B) ) 。根據這兩個值畫出一個線段
圖對應數值區間 [ LB(Tq, C) , U B(Tq, C) ],表示 C ( 或 B ) 中標籤集與 Tq距離程
度的可能範圍。如圖 5.1 所示範例,索引結構中有一個標籤集,與群集 C ,C 的
下層有兩個批次集合 B1、B2 。當定查詢標籤集 Tq = { a, b, c } ,根據計算出的
LB(Tq, C)和 U B(Tq, C)畫出 C 中標籤集和 Tq的距離區間線段,以 Range(Tq, C)
表示。由於 B1和 B2中的標籤集必在群集 C ,故 Range(Tq, B1)和 Range(Tq, B2)
的聯集必包含於 Range(Tq, C)中。我們在範例圖中將標籤集以形狀圖案表示,
依各標籤集與 Tq的距離值為座標位置,來繪製出其在距離區間圖中的位置。
表 5.1: 距離估算值之符號定義
符號 定義
LB(Tq, C) 查詢標籤集合 Tq與群集 C 中標籤集的距離估算下限值。
U B(Tq, C) 查詢標籤集合 Tq與群集 C 中標籤集的距離估算上限值。
LB(Tq, B) 查詢標籤集合 Tq與批次集 B 中標籤集的距離估算下限值。
U B(Tq, B) 查詢標籤集合 Tq與批次集 B 中標籤集的距離估算上限值。
圖 5.1: 群集(或批次集)和查詢標籤集的距離區間線段圖
一般近似查詢藉由使用者輸入的距離門檻值 δ ,將所有與 Tq 距離值小於等
於 δ 的標籤集對應的資料物件加入查詢結果。在找 Top-k 近似標籤集時,使用者
不需輸入距離門檻值,我們利用群集 ( 或批次集) 與查詢標籤集合計算得到的距
離下限值和上限值、群集 ( 或批次集) 中資料物件的個數以及標籤集與 Tq 的距離
值,來做為動態設定查詢距離門檻值的參考。圖 5.2 所示為 C1 和 C2 與 Tq的距
離區間線段圖,並將群集內的標籤集與 Tq的實際距離表示於線段圖上。先根據
LB(Tq, C1)及 LB(Tq, C2)的計算結果由小到大對群集排序,由於 LB(Tq, C1)較
LB(Tq, C2)小,因此將查詢距離門檻值 δd設為 LB(Tq, C2),並對 C1 篩選查詢結 果。C1 中深灰色區間中的標籤集合和查詢標籤集距離值小於等於 δd的部份,表
示此範圍的標籤資料物件皆可加入查詢結果,故將標籤資料 T1 對應的資料物件
加入查詢結果。
圖 5.2: 查詢距離門檻值處理示意圖
由於我們目前只知道 δd值落在群集 C1的範圍中,無法確認 C1內部的標籤
集 T1 與 T2各自與 Tq的距離值是否小於等於 δd,所以必須再對這個群集分解為
批次集 ( 或標籤集合),使用批次集與 Tq 的距離上限值與距離下限值 ( 或標籤集
與 Tq的距離值) 來判斷標籤集 T 是否小於等於 δd。
圖 5.3: 候選串列排序示意圖
將此概念擴展到有多個群集的情況:先將索引結構中各個根節點群集 C
根據 LB(Tq, C)及 U B(Tq, C)排序:依 LB(Tq, C)由小到大排序群集,若遇到
LB(Tq, C)相同者,則再依 U B(Tq, C)由小到大排序,並將排序結果存於候選串 列 ( Candidate List ,以 CL 表示) ( 如圖 5.3 (a) ) 。此候選串列的特性除了能夠
儲存所有的索引結構項目:群集、批次集以及標籤集,並且可隨著索引結構項
目的加入或刪除自動依據其所包含標籤集與查詢標籤集的距離上限值與下限值
來重新排序。批次集 B 和 Tq的距離上下限值是根據 LB(Tq, B)與 U B(Tq, B)來
大排列:LB(Tq, B1) < LB(Tq, C2) = LB(Tq, C1) < LB(Tq, T1),由於 LB(Tq, C1) =
(三) 若目前加入查詢結果的資料物件個數等於或是超過 k 個,則會把 δd的值設 定為目前查詢結果中第 k 個物件與 Tq的距離值,並以此值將所有距離值小
於等於 δd的標籤集對應之資料物件加入到查詢結果,在檢查過程中此值不
會再做更動,檢查完畢後完成查詢。
圖 5.4: 門檻值設定示意圖
再來介紹如何檢查一個索引結構的層級項目(可為群集、批次集或是標籤
集),來篩選出與 Tq的距離值小於等於 δd的標籤集合,並取出其對應的標籤資
料物件加入到查詢結果。其虛擬碼如演算法 1 : checkCandidateItem。令 xk為目
前檢查項目,根據 U B(Tq, xk)和 δd大小比較結果,可分成下列兩種情況:
(一) U B(Tq, xk)≤ δd,則 xk中的資料物件皆可加入查詢結果。(第 2 行)
(二) LB(Tq, xk)≤ δd但 U B(Tq, xk) > δd,表示 xk 中只有部分標籤集和 Tq 小於
δd,我們會將 xk 分解至其下一層更小單元的檢查項目來做篩選,能夠確保 檢查項目的標籤集和查詢標籤集的距離皆小於 δd而能夠加入查詢結果,即
U B(Tq, xk)≤ δd。令 x′k表示 xk分解出來的一個更小單元,若為子群集或是 批次集,同樣估算 x′k與 Tq 的距離下限值與上限值,並和 δd比較,再決定
是否加入到查詢結果或是需要分解到更小單元。大於 δd的部份可能為一子
群集、批次集或是標籤集,我們將這些索引結構項目存至 CL 中(如圖 5.2
中 C1 的淺灰色區域,可為群集、批次集或是標籤集合),等待下次動態調
整 δd後進行篩選。(第 4-16 行)
若目前查詢結果內的標籤資料物件個數已達 k 個以上,δd的值會設定為查詢
結果中第 k 個資料物件 rk之標籤集與 Tq 的距離值 dist(Tq, rk),用於往後其他項
目的檢查。(第 17-18 行)
Algorithm 1: checkCandidateItem Input: checkItem: xi; Threshold: δd
1 if UpperBound( Tq, xi )≤ δdthen
2 Add all TagSets in xito R;
3 else
4 if cItem is a Cluster then
5 if cItem has subCluster then
6 foreach subCluster C in cItem do
7 checkCandidateItem( C ) ;
8 else
9 foreach batch B in cItem do
10 checkCandidateItem( B ) ;
11 else if cItem is a Batch then
12 foreach tagset T in cItem do
13 if dist ( Tq, T )≤ δdthen
14 Add the objects corresponding to the tagset T to R ;
15 else
16 Add T with distance value to CL ;
17 if R.size()≥ k then