• 沒有找到結果。

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

34

3.4. 重複樣式探勘

在 3.2 節問題定義我們提到希望透過重複樣式的方式減少計算量,在本節我們希 望在線性組合 SSMhybrd之上做重複樣式探勘(Repeating Pattern Mining)來達到段 落分群的目的。

[定義 3.1] 段落(Block)

給定一個歌詞 L,一個段落是由連續詞行所構成 b = (s, e),1 ≤ s ≤ e ≤ N,s 代表段落的起始行號,e 代表段落的結束行號,N 為歌詞總行數,段落的長度 len(b)

= (e – s + 1)。

[定義 3.2] Path

給定一個歌詞生成的 SSMhybrid,在 SSMhybrid中任意 SSMhybrid(i, j)到 SSMhybrid(i + L, j + L)為一條 45 度的斜線樣式,稱為一條 Path p,0 ≤ L ≤ N – max(i, j),N 為 歌詞總行數,函數 max(i, j)為在 i, j 中取較大的數值,p 長度 len(p)=L + 1。每條 Path 會對應到兩個段落 b1=(i, i+L), b2 = (j, j + L)。例如某 SSMhybrid為一 10*10 的 矩陣,Path p 從 SSMhybrid(2, 3)到 SSMhybrid(7, 8),len(p)=6,對應到段落(2, 7)與段 落(3, 8)。

[定義 3.3] Path 分數(Path Score)

給定一條 Path p = SSMhybrid(i, j)到 SSMhybrid(i + L, j + L),其 Path 分數 Ps 定義 為(3.19):

Ps p = SSMhybrid i + τ, j + τ

L

τ=0

(3.19)

到 SSMhybrid(2, 8),len(p1)=2。副歌為段落(3, 6)、段落(9, 12)與段落(13, 16)構成,

反應在 p2 = SSMhybrid(3, 9)到 SSMhybrid(6, 12)、p3 = SSMhybrid(3, 13)到 SSMhybrid(6,

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

36

圖 3.14 為趙傳《我很醜,可是我很溫柔》歌詞產生的 SSMhybrid,在其歌詞 的詞式,主歌為段落(1, 4)與段落(9, 12)構成,副歌為段落(5, 8)、段落(13, 16)與 段落(17, 20)構成。p2 = SSMhybrid(1, 9)到 SSMhybrid(4, 12),Ps(p2) < 1,這表示即使 段落(1, 4)與段落(9 ,12)同為主歌,但兩段落可能也只有部份相似度(灰色)。即使 如此,p3 的整體的顏色還是較 p2 深,這表示 Ps(p2) > Ps(p3)。相同的 p1 =

SSMhybrid(5, 13)到 SSMhybrid(8, 16),段落(5, 8)與段落(13, 16)雖然同為副歌,可是

歌詞中第 6 行與第 14 行、第 8 行與第 16 行也是只有部分相似度存在,相似度呈 現一種跳躍式的樣式。圖 3.15 為此兩段落的歌詞對照。

圖 3.14 《我很醜,可是我很溫柔》SSMhybrid

圖 3.15《我很醜,可是我很溫柔》段落(5, 8)與段落(13, 16)歌詞

5. 我很醜 可是我很溫柔

6. 外表冷漠 內心狂熱 那就是我 7. 我很醜 可是我有音樂和啤酒 8. 一點卑微 一點懦弱 可是從不退縮

13. 我很醜 可是我很溫柔

14. 白天黯淡 夜晚不朽 那就是我 15. 我很醜 可是我有音樂和啤酒 16. 有時激昂 有時低首 非常善於等候

p1 p2 p3

辛曉琪《領悟》歌詞的副歌為段落(15, 22)、段落(32, 38)與段落(39, 46)構成。

雖然同為副歌,可是段落(32, 38)長度為 7 行,而另外兩個段落長度為 8 行,有

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

38

[定義 3.6] 實體 Path 矩陣(IPM)

給定一個 SSMhybrid與樣式段落 Bp = (sp, ep),其所有實體 Path 可以出現範圍 矩陣為 SSMhybrid的ㄧ個子矩陣(submatrix)IPM = SSMhybrid(sp~ep, ep~N),N 為歌詞 總行數。則 IPM 稱為段落 Bp的實體 Path 矩陣。

[定義 3.7] 實體段落(Instance Block)

給定一個樣式段落 Bp = (sp, ep)與一條 Bp的實體 Path p,則此 p 對應的兩個 段落,其中一段落 I = (sI, eI),滿足 sI > ep,則此段落 I 稱為樣式段落 BP的實體段 落。

圖 3.17 為樣式段落 Bp=(5, 8)其實體 Path 矩陣、實體 Path 與實體段落說明的 例子。圖 3.17 最左方紅框為一個樣式段落 Bp=(5, 8),右方在對角線下的矩形紅 框為 Bp的實體 Path 矩陣,因此 Path1 到 Path4 皆為 Bp的實體 Path,而 Path 5、

Path6 不為 Bp的實體 Path。Path 1 與 Path 2 的實體段落皆為(10, 11),長度為 2。

Path 3 的實體段落為(17, 20),長度為 4。Path 4 的實體段落為(14, 14),長度為 1。

圖 3.17 樣式段落(5, 8)的實體段落例子 Path 1 Path 2

Path 3 Path 4 Path 5 Path 6

Search 的一般性的遞迴關係為(3.20)、(3.21),初始化關係為(3.22):

Score i, j = IPM i, j + max Score k, j − 1 + Ts k, i (3.20)

Ts k, i = Sdiag, if i = k + 1

Sother , otherwise (3.21)

Score i, 0 = IPM i, 0 , ∀i ∈ {0,1, … , len Bp − 1} (3.22) 其中 i, j 出現的位置皆在樣式段落 Bp的實體 Path 矩陣內。此演算法的想法來自 Viterbi Algorithm,我們可以把 i 想像成狀態(state),j 則是時間,所以總共有 len(Bp) 種狀態。因此 Score(i, j)代表在時間狀態 i 的在時間 j 時的最大可能性分數。IPM(i, j)可以想像成觀察分數(Observation Score)。Ts(k, i)可以想像成從狀態 k 到狀態 i 的轉移分數(Transition Score)。圖 3.18 為一個轉移分數的說明示意圖,實線箭頭 代表 Ts(k, i) = Sdiag的情況,虛線箭頭代表 Ts(k, i) = Sother的情況。我們將轉移分

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

40

在此 Instance Path Search 演算法我們利用填表法求遞迴關係解。演算法虛擬碼如 圖 3.19。

Algorithm Instance Path Search Input: 樣式段落 Bp=(sp, ep), IPM Output: Score Matrix(分數累積矩陣)

Procedure IPS(Bp):

Score = matrix(len(Bp), (N – ep)) /*宣告一個大小為 len(Bp)*(N-ep)的矩陣 */

for i = 0 to len(Bp) - 1 : /*Score 矩陣初始化*/

Score(i, 0) = IPM(i, 0) for j = 1 to len(Bp) - 1:

for i = 0 to len(Bp) – 1:

score = 0

for k = 0 to len(Bp) – 1:

if k + 1 = i and Score(k, j - 1) + Pdiag > score:

score = IPM(i, j) + Score(k, j - 1) + Pdiag else:

score = IPM(i, j) + Score(k, j - 1) + Pother Score(i, j) = score

圖 3.19 Instance Path Search 演算法

我們利用經過 Instance Path Search 演算法的計算後,我們可以得到實體 Path,

p1, p2, …,pM的最佳 Path 分數加總,接下來我們要做 Instance Path Tracking,來得 到 p1, p2, …,pM,演算法如圖 3.20。

Algorithm Instance Path Tracking Input: Score Matrix

Output: Instance Path List

Procedure InstancePathTracking(Score):

IPL = <∅>

nowState = argmax(Score(sp~ep, N)) /* N 為歌詞行數,取分數最大的狀態*/

path = < (nowState, N) >

for j = (N -1) to (ep + 2)

comeScoreList = ComeScore(nowState, j, Score) prevState = argmax(comeScoreList)

if prevState + 1 == nowState:

path.append( (prevState, j) ) else:

IPS.append(path)

path = < (prevState, j) >

nowState = prevState return IPL

Procedure ComeScore(nowState, j, Score):

comeScoreList = <∅>

for i = sp to ep :

if i + 1 == nowState:

comeScoreList.append(Score(i, j - 1) + Pdiag) else:

comeScoreList.append(Score(i, j - 1) + Pother) return comeScoreList

圖 3.20 Instance Path Tracking 演算法

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

42

圖 3.21 為兩個 Instance Path Tracking 在趙傳《我很醜,可是我很溫柔》所 找出實體 Path 的例子。圖 3.21(a)下方為給定的樣式段落 Bp=(5, 8) Instance Path Tracking 在實體 Path 矩陣(紅色框)搜尋的結果,上方為 Instance Path Tracking 搜 尋對應到的實體 Path,總共有 3 條長度為 4 的實體 Path。圖 3.21(b)下方為給定 的樣式段落 Bp=(6, 9) Instance Path Tracking 在實體 Path 矩陣(紅色框)搜尋的結果,

上方為 Instance Path Tracking 搜尋對應到的實體 Path,總共有 6 條,長度有 1、2 或 3。可以發現圖 3.21(b)找到的實體 Path 相較於圖 3.21 (a)來的多,並且長度都 小於給定的樣式段落長度 4,如此也便為一個找出的實體 Path 較為零碎的例子。

(a) (b)

圖 3.21 Instance Path Tracking 的兩個例子 (a) 樣式段落 Bp=(5, 8) (b) 樣式段落 Bp=(6, 9)

針對此樣式段落 Bp完成 Instance Path Tracking 之後,我們將得到的實體 Path p1, p2,…,pM,若這些 Path 同時滿足:(1)Ps(pi) / len(pi) ≥ Tsim,1 ≤ i ≤ M;(2) len(pi)

≥ Tsim,1 ≤ i ≤ M,則將其 Path 保留下來,pk1, pk2,…, pkm,km ≤ M,最後取出這 些實體 Path 對應的實體段落,Ik1, Ik2,…, Ikm,稱之為 Bp的有效實體段落,我們 將樣式段落 Bp與其有效實體段落稱為一個 Family f(Bp)={Bp, Ik1, Ik2,…, Ikm },一 個 Family 也就相當於達到了段落分群的目的。

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

43

給定一個 Bp 我們可以找到其 Family,接著我們對各種可能的 Bp 產生其 Family,希望尋找最佳的 Family 組合方式,首先我們先建立一個 Family 內聚力 矩陣做為搜尋最佳 Family 組合的資料結構。

給定一個 Family f(Bp),其中所有的段落(包含樣式段落) f(Bp)={b1,b2,…,bn},

任意兩兩段落 bi, bj之間的相似度定義為(3.23):

Bsim bi, bj = max Ps P (3.23)

為了一般性設 len(bi) ≤ len(bj),其中 P 為一個 Path 的集合,集合 P 是由輸入的 bi=(si, ei), bj=(sj, ej)所形成的子矩陣 SSMhybrid(si~ei, sj~ej)中,所有長度為 len(bi)的 Path 構 成。圖 3.22 為給定段落 bi=(4, 6), bj=(7, 10)所形成的子矩陣,總共有兩條 Path,

len(Path1) = len(Path2) = 3。最後 Bsim(bi, bj)選 Ps(Path1)、Ps(Path2)最大的分數做 為 bi, bj的段落間的相似度。

圖 3.22 有效實體段落間相似度例子

有了段落間的相似度 Bsim,我們將給定 Family f(Bp)的內聚力 Co 定義為(3.24):

Co 𝑓(Bp) = n−1i=1 nj=i+1Bsim bi, bj

n ∗ (n − 1) 2 (3.24) 其中 n 為 Family f(Bp)中段落的總個數。

6 5 4

7 8 9 10

Path 1 Path 2

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

44

現在給定一個 N 乘 N 的 SSMhybrid我們將產生所有滿足 2 ≤ len(Bpi) ≤ N/2 的 樣式段落 Bp1 = (sp1, ep1), Bp2 = (sp2, ep2),…,Bpk= (spk, epk),1 ≤ i ≤ k,並且產生各自 的 Family f(Bp1), f(Bp2),.., f(Bpk)。最後形成一個 Family 內聚力矩陣 F:

F = ∀i ∈ {1,2, … , k}: F len Bpi , spi = Co f Bpi 。

圖 3.23 為一個趙傳《我很醜,可是我很溫柔》所形成的 Family 內聚力矩陣 F,橫軸數線代表 Family f(Bpi)中 Bpi的起始行號 spi,縱軸代表長度 len(Bpi),每一 個仍素代表 f(Bpi)的內聚力,右方的白色倒三角形為無填值的區塊。F 中顏色樂 白表示 f(Bpi)的內聚力越高,反之越暗則 f(Bpi)的內聚力越低,內聚力值介在[0, 1]。

可以發現有很多內聚力為 0(黑色)的 f(Bpi),那就代表此 f(Bpi)沒有重複樣式存在。

圖 3.23 趙傳《我很醜,可是我很溫柔》的 Family 內聚力矩陣

我們認為歌曲中最重要的就是主歌與副歌這兩種樣式,因此接下來我們利用 Family 內聚力矩陣 F 做任意兩兩 Family 的組合,其中兩個 Family f(Bpi), f(Bpj)可 以組合的條件為,滿足 A = f(Bpi) ∪ f(Bpj),集合 A 中的兩兩段落之間不能有範圍 重疊即可做組合。為了要取得最佳化的組合分數,我們將任兩個 Family f(Bpi)與

f(B

pj)的組合分數 CS 參考[17]定義為:

CS 𝑓 Bpi , 𝑓 Bpj = 2 ∗ precision ∗ recall

precision + recall (3.25) CS 的計算方式是源自 f-score,接下來定義 precision 與 recall 為(3.26)與(3.27):

無填值

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

45

precision 𝑓 B

pi

, 𝑓 B

pj

= Co 𝑓 B

pi

∗ len(b

x

) len b

x

+ len b

y

+ Co 𝑓 B

pj

∗ len(b

y

)

len(b

x

) + len(b

y

)

(3.26)

recall

𝑓 B

pi

, 𝑓 B

pj

= len(b

x

) + len(b

y

)

N

(3.27)

其中(3.26)與(3.27)中的 bx代表 Family f(Bpi)中任一段落,by代表 Family f(Bpj)中任 一段落。(3.27)中的 N 代表歌詞總行數。

在此 precision 的意義為希望找出來的 Family 組合結果的內聚力依長度 Family 段落總長度比例的總和越高越好。可是長度較短的 Family 出現內聚力高 的可能性較大,因此 recall 在此是希望此 Family 組合對於歌詞總行數的覆蓋率越 高越好,用以帄衡兩者之間的關係。

圖 3.24 為一個組合分數計算的例子。輸入的歌詞總共 10 行,上方的編號為 行號。段落樣式 Bp1=(1, 3)、Bp2=(4,5)。Family f(Bp1) = {(1, 3), (7, 9)}(藍色區塊)、

f(B

p2) = {(4, 5), (10, 11)}(橘色區塊)。假設 Co(f(Bp1)) = 0.7、Co(f(Bp2)) = 0.6,則 precision = 0.7 *6 / 10 + 0.6 * 4 / 10 = 0.66,recall = 10 / 11 = 0.91。最後組合分數 CS(f(Bp1), f(Bp2)) = 2 * 0.66 * 0.91 / (0.66 + 0.91) = 0.76。

1 2 3 4 5 6 7 8 9 10 11

圖 3.24 可能性分數計算例子

我們將計算所有 Family 組合的可能性,取最大組合分數的 Family 組合做為 最佳的組合。我們利用 Family 內聚力矩陣 F 可以減少部分的組合計算量。例如 F(4, 3)代表長度為 4,起始行為 3 的 f(Bpi),可以推斷在 F 矩陣上第 3 到 6 欄的 f(Bpj)

Algorithm Optimal Family Combination Search(OFCS) Input: Family Cohesion Matrix (F)

Output: Optimal Family Combination (OFC) bestCombination = <∅>

bestScore = 0 Procedure OFCS( F):

combineList = <∅>

Combination(F, 1, 0, combineList) return bestCombination

Procedure Combination(F, length, start, combineList):

if combineList.length == 2: /* 確定已經組合兩種 Family */

score = CS(combineList) /*計算此 Family 組合的分數*/

if score > bestScore:

bestScore = score

bestCombination = combineList maxStart = N

if combineList.length == 0:

maxStart = N/2 nextStart = start + length

for nextLength = 2 to N/2 : /*N 為歌詞總行數*/

for nextStart = nextStart to maxStart:

isOverlap = overlap(combineList, f(F(nextLength, nextStart) ))/*檢查重疊*/

if !isOverlap:

combineList.append(f(F(nextLength, nextStart)) 圖 3.25 Family 最佳組合搜尋演算法

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

47

相關文件