第三章 研究方法與步驟
3.6 協同式過濾
本 論 文 採 用 以 使 用 者 為 基 礎 的 協 同 式 過 濾 (User-based Collaborative filtering)[26],User-based CF 的概念為找到評分行為與當前使用者評分行為相似 的其他使用者們,用他們對其它項目的評分來預測當前使用者喜歡的項目[30]。
User-based CF 的方法是先將其他使用者們與當前使用者做相似度計算,把相似 度大於門檻值的其他使用者們,成為與當前使用者相似的鄰居,再利用鄰居的評 分來預測當前使用者對其他項目的評分,最後將預測之評分最高的前幾個項目推 薦給當前使用者。
相似度
我們提出三個相似度,結合此三個相似度來做棋手(使用者)之間的相似度計 算。提出的相似度有以下三個:
A. 棋手開局相似度(Players’ opening similarity, POS) B. 風格相似度(Style similarity, SS)
C. 棋力相似度(Rating similarity, RS)
A.棋手開局相似度
棋手開局相似度(Players’ opening similarity),為計算兩個棋手在下棋時,開 局使用上的相似度。兩個棋手 u 和 v 的棋手開局相似度表示為:
𝐏𝐎𝐒(𝐮, 𝐯) = 𝐏
𝒖× 𝐎𝐒𝐌 × 𝐏
𝐯𝐭(公式 9)Pu和 Pv為棋手使用每個開局 的比率之 k 維向量,k 是開局庫開局的總數。如表五所示,假設 k 為 3,Player u 對每個開局的值為使用過每個開局的次數除以總共使用過的開局數量,假設 Player u 使用過 3 次 opening A、7 次 opening C,所以 Player u 對 Opening A 的 值為 0.3、對 Opening C 的值為 0.7。
31
表 五、Player 對 Opening 的向量表示 Opening A Opening B Opening C Player u 0.3 0 0.7
OS 開局相似度(公式 8),為所有開局間在棋步上的相似度。OS 表示表示為 開局對開局的 k x k 矩陣,k 為所有開局個個數,每個開局對開局的開局相似度 數值,由系統中的開局相似度計算得到。
因為有些不同開局之間棋步非常近似,如下表六所示,開局代碼 A12 的棋 步包含了開局代碼 A11 的棋步,假如我們直接把棋手向量 u 和 v 做內積計算相 似度,會忽略很多不同但是相似的開局,所以我們在中間加入了每個開局間的相 似度 OS 一起做計算。
表 六、開局代碼與棋步 開局代碼(ECO codes) 棋步(moves)
A11 c4, c6
A12 c4, c6, Nf3, d5, b3
以下為棋手開局相似度計算的例子,假設所有開局的開局只有 Opening A、
Opening B、Opening C 三個開局,棋手對開局的使用比率如表七,開局間的相似 度如表八,依據公式 9,棋手開局相似度為 1x3 的 Player u 矩陣乘上 3x3 的 OS 矩陣,再乘上 3x1 的 Player v 矩陣,得到棋手 u 和 v 的棋手開局相似度為 0.44382。
表 七、棋手對開局的使用比率
表 八、開局間的相似度
32
[0.3 0 0.7] × [ 1 0.603 0.189 0.603 1 0.114
0.189 0.114 1 ] × [0.2 0.5 0.3]t = 0.44382
B.風格相似度
風格相似度(Style similarity)代表兩個棋手在下棋風格上的相似度,我們使用 由系統中的風格分析(style analysis)所產生之棋手屬於戰術型風格的機率𝐏𝐓𝐀𝐂(公 式 7)來計算風格相似度。風格相似度(Style similarity, SS)的範圍介於 0 到 1 之間,
式子如下:
𝐒𝐒(𝐮, 𝐯) = 𝟏 − |𝐏
𝐓𝐀𝐂(𝐮) − 𝐏
𝐓𝐀𝐂(𝐯)|
(公式 10)兩個棋手 u 和 v 之間的棋手之戰術型風格機率𝐏𝐓𝐀𝐂差距越小,代表風格相似度越 高。
C.棋力相似度
棋力相似度(Rating similarity, RS)是計算兩個棋手間棋力程度的相似度,我們 使用計算棋手棋力程度的 Elo rating system[46]來幫助我們計算兩個棋手的棋力 相似度。
Elo rating system 會計算兩位棋手比賽一盤棋後,依照不同比賽結果的棋力變 動,算出棋手新的棋力。Elo rating system 計算棋力的步驟如下:
1. 將棋手 A 與棋手 B 的棋力分數做正規化
𝑄𝐴 = 10𝑅𝐴⁄400 , 𝑄𝐵= 10𝑅𝐵⁄400 (公式 11) 其中 RA是棋手 A 的原始棋力分數,RB是棋手 B 的原始棋力分數。
2. 計算棋手 A 與棋手 B 對奕,雙方棋手贏棋的期望值
E(A) =
QAQA+QB
, E(B) =
QBQA+QB
(公式 12) E(A)是棋手 A 贏棋的期望值,E(B)是棋手 B 贏棋的期望值。
33
3. 計算棋手新的棋力分數
𝑅′𝐴 = 𝑅𝐴+ 𝐾( 𝑆𝐴 − 𝐸(𝐴) ) , 𝑅′𝐵= 𝑅𝐵+ 𝐾( 𝑆𝐵− 𝐸(𝐵) ) (公式 13) SA和 SB是棋手 A 與棋手 B 對奕完得到的分數,贏棋者得 1 分,輸棋者得 0 分,
和棋者得 0.5 分。K 值是決定一場對局變動分數幅度的最大值參數,一般對於大 師級棋手設為 16,對於普通棋手設為 32。
對於棋力相似度,我們使用兩位棋手贏棋期望值的差值來計算,公式如下:
RS(u, v) = {1 − (𝐸 (𝑣) − 𝐸(𝑢)) , 𝑖𝑓 𝐸(𝑣) ≥ 𝐸(𝑢)
0 , 𝑜𝑡ℎ𝑒𝑟𝑤𝑖𝑠𝑒
(公式 14) Where E(v) =𝑄𝑄𝑣𝑣+𝑄𝑢 , E(u) =𝑄𝑄𝑢
𝑣+𝑄𝑢
And 𝑄𝑣 = 10𝑅𝑣⁄400 , 𝑄𝑢 = 10𝑅𝑢⁄400
以學習的角度,希望找比使用者 u 棋力還要高的棋手 v 來學習,因此,若 𝐸(𝑣) < 𝐸(𝑢),則棋力相似度𝑅𝑆(𝑢, 𝑣)設為 0
。
若兩位棋手 u 與 v 的棋力相似,雙 方贏棋期望值的差值小,則棋力相似度就高。反之,若兩位棋手 u 與 v 的棋力相 差大,雙方贏棋期望值的差值就大,則棋力相似度就低。D. 相似度計算
棋手之間的相似度(Similarity, Sim)計算,我們結合上述的棋手開局相似度 (POS)、風格相似度(SS)、棋力相似度(RS)做計算,式子如下:
𝐒𝐢𝐦(𝐮, 𝐯) = 𝐏𝐎𝐒(𝐮, 𝐯) × 𝐒𝐒(𝐮, 𝐯) × 𝐑𝐒(𝐮, 𝐯)
(公式 15)棋手相似度計算,我們將三個數值範圍介於 0 到 1 之間的開局相似度、風格相似 度,以及棋力相似度相乘。也就是說,若兩個棋手的相似度高,代表兩者的開局 選擇相近、下棋風格相似,還有棋力程度接近。
34
E. 計算預測
對於當前棋手對於其他開局的相關性,我們使用加權平均的方法,也是 CF 常用的方法[13, 15]。預測公式(Prediction function)如下:
𝐩𝐫𝐞𝐝(𝐮, 𝐨) =
∑ 𝐬𝐢𝐦(𝐮,𝐯)×𝐫𝐯 𝐯,𝐨∑ 𝐬𝐢𝐦(𝐮,𝐯)𝐯
(公式 16)
pred(u, o)為 Player u 對 opening o 的相關性,𝑟𝑣,𝑜為與棋手 u 相似的鄰居 v 對 opening o 的使用比率。
Collaborative filtering(協同式過濾)將計算出來當前棋手對其他開局的相關性 排序,推薦相關性最高的的前 N 個開局,把此推薦清單傳給內容式過濾 (Content-based filtering)做進一步的推薦。