第三章 敲鍵式音樂檢索系統-觀音
第四節 近似比對技術
受限於不同演奏者詮釋音樂的不同方式,所以位於音樂資料庫中的音 樂片段,並不一定和查詢者想像的旋律(或節奏)完全相同,再加上查詢 者本身對音樂片段之記憶能力,及對音樂的表達能力,非常容易造成音高 不準、多個音、少個音等現象,因此近似比對演算法設計的優劣,將決定 內容式音樂檢索系統是否能擷取出查詢者期望之音樂片段。
在進行資料比對時,幾乎所有現行的內容式音樂檢索系統,比對的方 式都是在計算使用者輸入之查詢向量與資料庫中的資料向量的近似值,有 些是利用DTW 的編輯距離判斷向量的相似程度[1][2][3][4],也有 利用Direct Measure 來比較的[12],但是這些方法在比較向量中的元素值 時,只是將他們單純地視為一個個符號,比較的結果也只有吻合和不吻合
兩種結果,針對不吻合的比對沒有程度的區別,這種設計方式較適合用於
者輸入之查詢向量元素個數不等於資料向量的元素個數時該如何比對?這 有可能是在查詢時,使用者只輸入了音樂重複片段中的部分節奏,或是多 輸入了一個音符時間差,少輸入了一個音符時間差等。為了解決這種向量 長度不一致無法直接計算節奏商的問題,在觀音系統中使用n-gram[24]
方法,來解決上面所提到的問題。
q2 = P(2)/T(2) q3 = P(3)/T(3) q4 = P(4)/T(4)
(2) 再利用標準差公式,計算這 4 個值的變異離散程度。當節奏商標準 差小於顆粒離散界限值δ,則此顆粒視為相同。
3. 最後再利用 DICE function 決定整個 P 與 T 的相似度。
實際執行方式依下面演算法:
minL = min(Length(P),Length(T)) //比較時以較短之節奏字串為主
for (i=1 ; i<=minL-3 ; i++) {
q1 = P(i+0)/T(i+0) //分別將 P 和 T 對應之顆粒內的 4 個元素 q2 = P(i+1)/T(i+1) //相除得 q1、q2、q3、q4 四個節奏商值 q3 = P(i+2)/T(i+2)
q4 = P(i+3)/T(i+3)
σ = Stddev(q1,q2,q3,q4) //計算 q1、q2 、q3 、q4 之標準差值 σ StdFactor = (q1+q2+q3+q4)/4
//當 q1~q4 之商值愈大,則其 σ 允許在愈大範圍間變化。
//設定顆粒離散界限值為δ= 0.3*stdFactor,
//若節奏商標準差 σ 小於δ,則將此次顆粒比較視為相同。
If σ < ( 0.3*StdFactor) { match++
}
Similarity = 2*match / [(minL-3) + (minL-3)]
}
下面實際舉三個例子,分別計算這些顆粒之相似程度,目前觀音系統 設定之顆粒離散門檻值〝δ= 0.3*StdFactor〞,只要算出來的節奏商標準差 值σ 小於 δ,則這兩個顆粒視為相同:
1. P= 200、210、220、200 T= 220、231、242、220
圖 7:顆粒相似程度比較 1
Std factor = (0.91+0.91+0.91+0.91)/4 = 0.91 δ= 0.3*0.91 = 0.273
σ = stdev(0.91,0.91,0.91,0.91) = 0 所以這兩個顆粒可視為相同。
2. P= 435、347、350、429 T= 220、231、242、220
圖 8:顆粒相似程度比較 2
Std factor = (1.98+1.50+1.45+1.95)/4 = 1.72 δ= 0.3*1.72 = 0.516
σ = stdev(1.98,1.50,1.45,1.95) = 0.284 所以這兩個顆粒也可視為相同。
3. P= 250、190、150、300 T= 220、231、242、220
圖 9:顆粒相似程度比較 3
Std factor = (1.14+0.82+0.62+1.36)/4 = 0.99 δ= 0.3*0.99 = 0.3
σ = stdev(1.14,0.82,0.62,1.36) = 0.33 所以這兩個顆粒須視為相異。
度,目前觀音系統設定之〝向量相似度門檻值= 0.5〞,只有當向量相似度大 於50%之節奏向量,系統才會將對應之音樂片段輸出,輸出結果依向量相 似度排序,若以下面的兩個向量為例,計算向量相似度的步驟如下:
1. 查詢節奏向量 P=(200,200,600,200,300,600)
資料節奏向量 T=(100,100,300,100,100,300,200,100,100) 顆粒離散門檻值δ= 0.3*StdFactor
2. 去除資料節奏向量後面 3 個元素,讓兩各向量的元素個數相同。
T = (100,100,300,100,100,300) 3. 切割兩個向量得到的 4-gram 集合如下:
P4_gram =[(200,200,600,200),(200,600,200,300),(600,200,300,600) ] T4_gram =[(100,100,300,100),(100,300,100,100),(300,100,100,300) ] 4. 計算節奏商:
Rhythm quotient =[(2,2,2,2),(2,2,2,3),(2,2,3,2)]
5. 計算每個顆粒之顆粒離散門檻值δ:
δ= [2*0.3,2.25*0.3,2.25*0.3] = [0.6,0.675,0.675]
6. 計算每個顆粒之節奏商標準差值 σ: 需要像[1]般在比較向量前要先進行正規化(Linear Scaling)的動作,因 為正規化的動作常會因為向量中某一個異常(Outlier)音符的輸入錯誤,
而影響到整組數據的對應關係,舉例來說若以上面例子為例,分別比較查
詢節奏第五個數字輸入200 與輸入 300:
1. Case 1: 若查詢節奏第五個數字輸入 200
查詢節奏向量 P=(200,200,600,200,200,600) 資料節奏向量 T=(100,100,300,100,100,300) 正規化為0~1000 的整數後可得到
查詢節奏向量 P’=(100,100,300,100,100,300) 資料節奏向量 T’=(100,100,300,100,100,300) 故經過正規化後為相似度100%的兩個向量
2. Case 2: 若查詢節奏第五個數字輸入 300
查詢節奏向量 P=(200,200,600,200,300,600) 資料節奏向量 T=(100,100,300,100,100,300) 正規化為0~1000 的整數後可得到
查詢節奏向量 P’=(95,95,286,95,143,286) 資料節奏向量 T’=(100,100,300,100,100,300)
只有輸錯一個音符卻得到完全不同的兩個向量。