碩論:應用協同過濾技術於表演藝術售票系統(五)
雖然以 NCF 為基礎搭建的深度學習推薦系統召回率比傳統的協同過濾推薦系統來得好,但也不是所有的狀況下,NCF 做出的推薦都比傳統模型來得優秀。舉四個有趣的例子如下。
一、兩個模型都表現得很好的例子:
下圖是兩個模型分別為某一會員提出的推薦清單,藍色底是這個會員後來實際購買的節目。可以看到會員買的四場節目都被選入推薦清單內了,而 NCF 的表現稍微好一點,四個節目在清單中的排序比較靠前。
這個會員過去購買的節目,多是熱門節目,所以在資料集中有非常多的資料點可供兩個推薦系統學習;會員實際購買的這四場節目也都是熱門節目,所以不意外,兩個模型都能成功預測會員的喜好、提出非常好的推薦清單。
二、NCF 表現比傳統 CF 好的例子:
這個會員只買過「偏愛 拉赫瑪尼諾夫-葛拉瓦茨基鋼琴獨奏會」這個節目,因此對 CF 來說,只有一個可以參考的資料點,也就不能怪 CF 提出的推薦清單非常的......奇怪。要我就不會推薦揚琴或琵琶音樂會給這個會員。NCF 則是有得到比較多的資訊,所以提出的推薦清單比較合理,也成功將會員購買的兩個節目納入清單中。
三、傳統 CF 表現比 NCF 好的例子:
但要說 NCF 就絕對比較好嗎?那也不一定。這個會員只聽聲樂相關的節目,過去曾購買:
某會員曾買過票的節目:
我是這樣看世界《在巴黎歌唱越南風景:Huong Thanh》
我們的詩人,我們的歌 ─ 創作歌曲發表會
愛與情的歌劇世界
【音聲相合】 2012新台灣音樂聲樂作品發表會
2018旅義女高音王秋雯獨唱會
2019女高音林玲慧獨唱會
2010 台北聲樂大賽優勝者聯合音樂會
藝術歌曲饗宴
聲協 2019 新秀音樂會
2018王望舒獨唱會~浪漫義大利
喜好相當明確吧! CF 準確地抓到這點,提出的推薦清單 10 場有至少 5 場跟聲樂有關,包含會員實際購買的 3 場節目。反觀 NCF 提出的推薦清單,只有 2 場聲樂音樂會,會員實際購買的節目,只選了 1 場。
這結果讓人挺意外的。明明從標題就可以看出來不是嗎?咦?從標題?在(四)中曾提到,音樂會標題是用別人預訓練好的 SentenceTransformer 轉換為向量。預訓練的意思是別人用大量的文章訓練模型,模型以他學到的東西為基礎,判斷我們輸入的句子之字詞字義相似度,輸出向量給我們用。但是模型認為相似的句子,跟我們認為相似的句子一樣嗎?
我讓 SentenceTransformer 判斷一些音樂會標題與「2011何君恆中提琴獨奏會」的相似度。理想上,應該是有「何君恆」老師名字的標題相似度最高,再來是有「中提琴」的標題。但模型判斷的結果不是這樣。從下面的結果來看,模型把包含「2011」的音樂會標題,判斷為比較接近的標題。
╔══════════════════════════════════════════════════╗
║ 目標標題:2011何君恆中提琴獨奏會 ║
╠══════════════════════════════════════════╦═══════╣
║ 比對音樂會標題 ║ 相似度 ║
╠══════════════════════════════════════════╬═══════╣
║ 2012何君恆中提琴獨奏會 ║ 0.916 ║
╠══════════════════════════════════════════╬═══════╣
║ 2011鄭筌小提琴獨奏會 ║ 0.888 ║
╠══════════════════════════════════════════╬═══════╣
║ 2011簡恩義低音管獨奏會 ║ 0.845 ║
╠══════════════════════════════════════════╬═══════╣
║ 2011《 歲月如歌 》 ║ 0.708 ║
╠══════════════════════════════════════════╬═══════╣
║ 2011年樊慰慈、陳伊瑜箏樂演奏會 ║ 0.676 ║
╠══════════════════════════════════════════╬═══════╣
║ 《百年中提琴經典作品》2019何君恆中提琴獨奏會 ║ 0.655 ║
╠══════════════════════════════════════════╬═══════╣
║ 2016 何君恆與他的朋友們那些年的回憶─半世紀琴緣 ║ 0.224 ║
╚══════════════════════════════════════════╩═══════╝
再看一個更明顯的例子。音樂標題文字相同,前面的年份為 2011 與 2017,相似度就有如此大的差異。
╔═══════════════════════════════════════╗
║ 目標標題:2011何君恆中提琴獨奏會 ║
╠═══════════════════════════════╦═══════╣
║ 比對音樂會標題 ║ 相似度 ║
╠═══════════════════════════════╬═══════╣
║ 2011何君恆中提琴獨奏會《思想曲》 ║ 0.970 ║
╠═══════════════════════════════╬═══════╣
║ 2017何君恆中提琴獨奏會《思想曲》 ║ 0.666 ║
╚═══════════════════════════════╩═══════╝
以上例子可以看出來, SentenceTransformer 的表現,跟我們希望的不同。這可能是造成這個例子 NCF 無法提出更好的推薦清單的原因。除了注意力放錯地方,如果我們能讓 SentenceTransformer 了解「獨唱會」、「藝術歌曲」、「歌劇」等這些詞是高度相關的,是否可以讓深度學習推薦系統提出更好的推薦清單呢?
四、兩個模型表現都不好的例子:
我們先來看看這位會員過去購買的節目。嗯。興趣真廣泛。鋼琴獨奏、弦樂室內樂、大提琴獨奏、大鍵琴、古箏、管樂室內樂、揚琴、古箏...... 這,要我推薦我都不知道該推薦什麼給這位會員,所以兩個推薦系統也一頭霧水很理所當然吧!
某會員曾買過票的節目:
《浪漫•綻放》陳冠宇2019鋼琴獨奏會
NSO 駐團音樂家系列《孟捷樂樂秀》
NSO 室內樂《當管樂遇上絃樂》
勇源 x NSO《英雄的浪漫之聲》
以絃會友 II
張正傑大提琴獨奏會~尋找羅葉–詩與音樂的對話
蔡佳璇2019年大鍵琴獨奏會
勇源 x NSO 駐團音樂家系列《其鋼樂樂秀》─ 取消
NSO 音樂與朗讀《無名者》
春雲織夢-張怡蓁古箏獨奏會
NSO 室內樂《黃金號角手與朋友們》---取消
【孤花】-台灣愛樂獨奏家系列
2019弗洛伊德室內樂集音樂會
花's Dream-花瑄懋揚琴獨奏會
楊璨如古箏獨奏會
兩個推薦系統不約而同的傾向推薦相對熱門的 NSO 節目,而且會員實際購買的節目一場都沒選到。那麼,這位會員到底買了什麼節目的票券呢?女高音艾希莉.貝克爾藝術歌曲之夜、劉冠齊小提琴獨奏會、曼陀林的傳奇、《續彈》臺師大民音所絲竹新韻II 系列音樂會。猜不到吧!
我做了一個小小的雲端展示 app,可以自己輸入會員代碼流水號,看看兩個推薦系統提出的推薦清單、這個會員過去購買的節目,以及會員實際購買的節目。傳統 CF 提出的推薦清單,雖然經常包含會員實際購買的節目,但觀察 CF 算出來的可能性分數,會發現分數都非常低,跟(四)提過的音樂會相似度低、可能性分數也低、推薦不是那麼可靠呼應。有興趣的朋友可以玩玩看:https://ntch-recommender.streamlit.app/