龍遠婷 王屯屯
(1.平塘民族中學 貴州省平塘縣 558300 2.黔南民族師范學院計算機與信息學院 貴州省都勻市 558000)
由于互聯(lián)網(wǎng)和智能終端設備的飛速發(fā)展,各種各樣的信息充斥著社會的每一個角落,人們無時無刻地被各個信息包圍,于是人們需要高質量的推薦系統(tǒng)來為他們定制個性化的信息[1]。
此外,隨著我國數(shù)字版權的不斷發(fā)展,大部分熱門音樂必須開通會員才能進行消費,對于非會員用戶,找到合適的音樂變得更加困難[2]?;诖耍絹碓蕉嗟难芯空邔⒆约旱难芯恐攸c放在了音樂推薦,并提出了不同的推薦算法。
王子茹等通過對比基于內容的協(xié)同過濾算法,基于聚類的協(xié)同過濾算法以及基于密度的協(xié)同過濾算法,發(fā)現(xiàn)引入用戶的信任度可以提升模型的可擴展性,并且后兩種算法更適合高維數(shù)據(jù)集[3]。
文獻[4]認為,傳統(tǒng)的協(xié)同過濾等推薦算法不能很好地適應用戶的現(xiàn)代化的個性化需求,通過分別抽取用戶端和電影端的各種特征,設計出多層神經(jīng)網(wǎng)絡模型,更好地對用戶和電影特征進行了更為深度的交互,從而實現(xiàn)基于神經(jīng)網(wǎng)絡的電影推薦。王松濤[5]提出基于項目流行度演化網(wǎng)絡的序列推薦算法,解決了循環(huán)神經(jīng)網(wǎng)絡中相鄰用戶的強依賴關系,從而避免了錯誤依賴的建立,提高了推薦準確度。文獻[6]將消費者對商品的類型偏好和商品類型之間的關聯(lián)程度建模,并計算商品間的相似性,預測用戶對候選商品的打分,最后同時用ACNN 和基于商品類型偏好進行TOPN 推薦。
學術界的研究者提出了很多有效的推薦算法,但是需要工業(yè)界的工程師將這些算法應用到具體的服務中提供給用戶,才能實現(xiàn)這些算法的價值,否則就只能停留在理論階段?;诖?,本文綜合考慮學術界的推薦算法和工業(yè)界的軟件開發(fā),設計出音樂推薦框架,不但可以幫助學術界的研究者更好地清楚算法設計的方向,更能指導工業(yè)界的工程師去進行實際開發(fā)。
完整的音樂推薦架構需要包含如圖1所示七個部分:輸入,ETL,多路召回,排序,過濾,線上更新和輸出。
圖1:系統(tǒng)架構圖
任何推薦系統(tǒng)都離不開數(shù)據(jù)的支持。將用戶的各種行為信息送到推薦系統(tǒng),該系統(tǒng)根據(jù)每個用戶的個性化動作和信息進行分析處理,得到其音樂推薦結果,并在用戶端進行呈現(xiàn)。大部分用戶行為是隱性的,用戶本身無感知,必須對音樂的播放行為,系統(tǒng)可以分析該用戶對該音樂的播放進度來判斷對該音樂的偏好程度。
對于非音樂類APP 企業(yè),無法獲取用戶的各種音樂消費行為和音樂的各種特征,需要通過爬蟲技術去獲取,但是很多網(wǎng)站采取了反爬蟲策略,導致爬取到的數(shù)據(jù)規(guī)模較小,因此只能下載有限的公開數(shù)據(jù)集,效果不理想。
用戶的信息雜亂無章且規(guī)模龐大,需要經(jīng)過ETL 處理才可以被用于推薦。我國人口規(guī)模較大,對于使用人數(shù)較多的音樂APP,每天都會有上億用戶產(chǎn)生各種各樣的動作行為,因此需要先對這些信息進行清洗、轉化等操作,形成干凈且規(guī)范化的數(shù)據(jù)格式送入到負責推薦算法的工作人員進行處理。例如,一個用戶某天播放了100 首音樂,并且發(fā)生了多次“進度拖放”或者“暫定”“刷新”等操作,并且并不是看到的所有音樂該用戶都會播放,因此會有更多的音樂被曝光。對于每一個行為,都會有一條記錄存在服務器中,如果不對這些信息預先進行處理,單純一個用戶在一個月就會產(chǎn)生大量行為記錄,當用戶規(guī)模較大時,將會產(chǎn)生數(shù)據(jù)災難,因此需要通過ETL技術,將多條數(shù)據(jù)進行清洗和聚合等操作。
ETL 主要包括三個步驟:抽取,轉換和加載。抽取是指從源數(shù)據(jù)庫獲得數(shù)據(jù)的過程,具體內容如圖2所示。
首先根據(jù)需求說明文檔確定系統(tǒng)中需要的業(yè)務字段,并確定最基本的元數(shù)據(jù)來源。業(yè)務字段經(jīng)過關聯(lián)后,送入到原始中轉模塊進行處理。元數(shù)據(jù)經(jīng)過一定的規(guī)則,送到字段管理模塊,并和關聯(lián)后的數(shù)據(jù)一起送入到中轉站。該中轉站會把全量數(shù)據(jù)經(jīng)過全量處理后,送入到“待清洗數(shù)據(jù)”模塊,等待下一流程。中轉站的數(shù)據(jù)經(jīng)過增量抽取后,同樣作為待清洗數(shù)據(jù)。
轉換步驟主要包括數(shù)據(jù)的清洗和轉換兩方面內容。如圖3所示,待清洗的數(shù)據(jù)中存在缺失數(shù)據(jù),需要經(jīng)過“數(shù)據(jù)補缺”模塊,利用某種填充算法(例如取均值,中位數(shù)),將缺失的部分進行填充,保證數(shù)據(jù)的完整性。此外,待清洗數(shù)據(jù)中還存在無效的數(shù)據(jù),需要經(jīng)過數(shù)據(jù)替換處理。例如,某個字段在所有記錄中基本保持不變,說明信息增益比較小,在算法中起到的作用不大,可以考慮對其進行刪除或者替換操作。根據(jù)上述兩個步驟后,就可以得到干凈的業(yè)務數(shù)據(jù),并將其送入“干凈的中轉站”進行處理。這樣的數(shù)據(jù)還不能保證樣本數(shù)據(jù)的可靠性,還需經(jīng)過一定的清洗規(guī)則,將數(shù)據(jù)中的部分數(shù)據(jù)進行清洗,得到規(guī)范化的數(shù)據(jù),最后將規(guī)范化處理以后的數(shù)據(jù),根據(jù)算法研究人員需要的目標格式,進行轉化,方能得到最終的有效數(shù)據(jù)。
圖3:ETL 的數(shù)據(jù)清洗過程
數(shù)據(jù)的轉化過程如圖4所示,清洗后的有效數(shù)據(jù)首先需要根據(jù)需求說明文檔進行拆分,得到各種拆分后的數(shù)據(jù)表;系統(tǒng)中經(jīng)常需要經(jīng)過大規(guī)模的復雜計算,所需計算量較大,計算所需時間較長,所以需要在正式使用這些算法產(chǎn)生的數(shù)據(jù)前,要提前對其進行計算,并將計算結果進行保存;目前主要采用分布式存儲框架,而該存儲框架中耗時最多的操作是shuffle,而經(jīng)常引起系統(tǒng)shuffle 操作的表之間的JOIN 關聯(lián),因此很多時候系統(tǒng)會提前將后續(xù)可能用到的表進行關聯(lián)并進行存儲,方便后續(xù)操作直接讀取,而不用當場進行復雜的關聯(lián)操作。經(jīng)過上述三個步驟后,根據(jù)不同的業(yè)務目標,對數(shù)據(jù)進行匹配,并發(fā)送給相應的業(yè)務模塊。
圖4:ETL 的數(shù)據(jù)轉換過程
加載步驟根據(jù)前面抽取過程中數(shù)據(jù)抽取方式的不同,對目標進行不同操作。例如,當前面對數(shù)據(jù)進行全量抽取時,對目標表進行替換動作,而當前面對數(shù)據(jù)進行增量抽取時,需要對目標表進行插入操作。
所謂的“多路召回”策略,就是指采用不同的策略、特征或簡單模型,分別召回一部分候選集,然后把候選集混合在一起供后續(xù)排序模型使用,可以明顯的看出,“多路召回策略”是在“計算速度”和“召回率”之間進行權衡的結果。其中,各種簡單策略保證候選集的快速召回,從不同角度設計的策略保證召回率接近理想的狀態(tài),不至于損傷排序效果。
召回是指為用戶生成初步的推薦列表,而多路召回是根據(jù)不同推薦策略或算法產(chǎn)生不同的推薦結果,比較常見的推薦算法有:基于用戶的協(xié)同過濾算法,基于音樂的協(xié)同過濾算法,基于圖的算法,基于聚類的算法,基于音樂多媒體信息的推薦算法和基于業(yè)務邏輯的推薦等。
基于用戶的協(xié)同過濾算法,先為目標用戶找到與其相似的候選用戶,然后從候選用戶中篩選出目標用戶未消費過的音樂進行推薦,并且根據(jù)目標用戶與候選用戶的相似程度,和候選用戶對目標音樂的喜愛程度進行打分,按照分數(shù)進行降序推薦;基于音樂的協(xié)同過濾算法,根據(jù)目標用戶歷史喜歡過的音樂,找到與歷史音樂相似的其他音樂進行推薦,并根據(jù)目標用戶對歷史音樂的喜歡程度,以及歷史音樂與候選音樂的相似程度進行打分,按照分數(shù)降序推薦;基于圖的推薦算法,分別把用戶和音樂作為二部圖上下兩部分,利用隨機游走等算法,計算圖中兩個節(jié)點的相關系數(shù),按照相關度降序排序;基于聚類的推薦算法,提取音樂的特征,構建特征向量,在N 維空間中每首音樂都可以被看做一個點,每個簇內的音樂可以被當做一個類型的音樂進行推薦;基于音樂多媒體信息的推薦算法,通過提取用戶歷史音樂的多媒體信息,比如音軌、音色以及節(jié)拍等信息,分別找到與這些多媒體信息相似的音樂進行推薦;基于業(yè)務邏輯的推薦算法,需要從消費者角度出發(fā),根據(jù)實際的業(yè)務場景進行推薦,例如,用戶A 剛關注了歌手B,從某種程度上認為該用戶喜歡該歌手,可以把歌手B 的高質量音樂推送給用戶A。
每種召回策略都會為用戶生成一個推薦列表,因此需要排序算法將這些召回池內的音樂進行統(tǒng)一排序。融合排序方式如圖5所示,每個召回池都有不同的權重,等所有召回池準備就緒后,一起送入到多路召回的融合模塊進行集中處理,最終經(jīng)過排序等操作后,得到排好序的音樂推薦列表。
圖5:多路召回和排序模塊
具體排序算法如下所示:
其中Score(Uk,Mij,t)表示t時刻用戶Uk對音樂Mij的打分;式中第一部分Score(Ri)表示召回池Ri的權重,該值需要根據(jù)具體業(yè)務進行配置;式中第二部分Sim(Uk,Mij)表示用戶Uk與音樂Mij的相似度,該值可以通過機器學習的CTR 學習得到,也可以簡單地通過余弦相似度等相似度評價指標獲得;公式最后一部分表示時間衰減函數(shù),發(fā)表時間越新的音樂,應該得到較高的推薦分數(shù),其中T 表示當前時間,t 表示音樂發(fā)表時間,λ 表示衰減系數(shù)。當用戶經(jīng)??吹桨l(fā)布時間比較新的音樂時,會更加認為系統(tǒng)能夠及時地將最新音樂推薦給自己,提高用戶對系統(tǒng)的新穎度,滿意度以及系統(tǒng)黏性,所以在設計排序算法時,給距離現(xiàn)在時間T 較為接近的音樂較高的分數(shù)。需要特別注意的是,不同的召回池的權重,應當由具體業(yè)務和某種學習算法結合起來,才能達到最好的效果,其中用到最多的簡單線性學習算法為邏輯回歸。
經(jīng)過上述步驟后,基本得到了用戶所需的個性化音樂,但是這部分音樂并不能直接分發(fā)給用戶,還需經(jīng)過過濾步驟。需要過濾的音樂大致分為以下三個部分:已經(jīng)消費過的歷史音樂;同一歌手的多首音樂(推薦結果中的高相似音樂);由于版權等原因無法上線的音樂。
對于用戶已經(jīng)消費過的音樂,一般要對其進行過濾(曝光過濾),因為一般認為音樂的推薦是為其推薦沒有聽過的音樂,這樣可以增加用戶對系統(tǒng)的新鮮度。此外,對于“同一首音樂”的認定,可以有不同程度的限制水平,例如同一個歌手在不同時間演唱的同一首音樂,有時也會被認定為不同的音樂;對于同一歌手的音樂,在一次曝光中,一般不建議重復出現(xiàn)太多首,否則會很容易使得用戶變得審美疲勞。
歷史音樂曝光過濾過程中最重要的是定義目標用戶的歷史曝光序列,比如跨場景、跨天等,而高相似度音樂過濾過程中如何定義item 的相似度、跨場景、跨session 的高相似度去重都是值得細細探究和深挖的點,將在后續(xù)進行深入研究。
在過濾的最后一步,需要檢查推薦音樂是否包含未授權音樂,或者歌詞中含有不正當言論,或者歌手存在違法亂紀等情況,必須對這些音樂進行下架或者永久封禁等操作。
隨著計算機算力的不斷提高,基本可以實現(xiàn)音樂的在線更新,但是線上仍然無法完成較為復雜算法的運行,所以需要進行音樂的線上更新。當推薦算法復雜度較高時,需要經(jīng)過線下的長時間運行才能得到推薦結果。目前應用較多的線上線下發(fā)送根據(jù)為Kafka,可以將線下的數(shù)據(jù)流當成生產(chǎn)者Producer,線上的服務器稱為消費者Consumer,兩者通過相同的主題Topic 進行交互。
從圖6 中可知,producer 就是生產(chǎn)者,是數(shù)據(jù)的入口。注意看圖中的紅色箭頭,Producer 在寫入數(shù)據(jù)的時候永遠的找leader,不會直接將數(shù)據(jù)寫入follower。生產(chǎn)者數(shù)量為M,也就是有線下有M 個用戶的音樂從線下產(chǎn)生;同理,消費者數(shù)量為N,可知線上需要更新的用戶數(shù)量為N;較為復雜的是中間的kafka 集群部分,一個集群由多個Broker 服務器組成,每個Broker 服務器上存放多個主題Topic 的多個分區(qū),并且有些分區(qū)為Leader,有些為Follower。在集群管理中,為防止某個服務器異常影響整個集群的使用,通常會設置Leader 和Follower 這兩種角色,由Zookeeper 等工具選舉產(chǎn)生,并且只有一個Leader,可以有多個Follower。正在工作的被稱為Leader,其他的Follower 處于隨時待命狀態(tài),要不斷地與Leader 進行信息交互,保證當Leader 出現(xiàn)異常,并且自己被選舉為新的Leader 時,能夠立刻正常工作,不影響集群的正常使用。
圖6:利用kafka 進行更新
為提高用戶對內容更新的滿意度,一般在凌晨開始進行數(shù)據(jù)的發(fā)送,等到用戶第二天打開音樂APP,看到更新后的結果,很大概率上認為此次更新結果較上次有較大的不同,提高對系統(tǒng)的滿意度。
當音樂推薦系統(tǒng)針對不同用戶生成新的音樂推薦列表出來后,需要對推薦結果進行評估,方能知曉該推薦算法是否有效,以及是否應該進行線上更新。實驗方法一般分為線下實驗和線上實驗,線上實驗是指直接以線上用戶為對象進行的實驗,當某個用戶長期被作為實驗對象,并且接收到糟糕的推薦結果,該用戶會認為該系統(tǒng)無法滿足其需求,可能會放棄使用該系統(tǒng),為避免該情況的發(fā)生,一般在進行線上實驗前,先進行線下實驗進行初步的評估,保證該實驗不會對線上用戶造成較大傷害后,方能進行線上實驗。
當算法研究員設計好推薦算法后,需要自己去編寫代碼去驗證想法是否與預期符合。最為快速的線下實驗方法為,拿到最為熟悉的幾個人推薦結果,分析這些推薦結果與他們平時的口味是否相符,如果不符合,說明推薦算法效果較差,需要終止實驗。如圖7所示,張三之前喜歡“我是中國人”和“愛拼才會贏”這兩首音樂,前者表示該用戶喜歡“愛國”類音樂,后者表示“閩南語”或者“粵語”類音樂,并分別給出9.5 分和5.6 分(滿分10 分)的評價,該評價由系統(tǒng)根據(jù)用戶對不同音樂的不同行為自動打分得到,行為包括:播放次數(shù),播放進度,是否下載,是否收藏,取消收藏等。如果推薦算法為張三推薦的音樂為“我愛你中國”和“酒干倘賣無”,說明推薦結果比較準確;反之,如果推薦系統(tǒng)得到的音樂為“數(shù)鴨子”和“朝陽溝”,說明推薦效果不理想。因為推薦結果中前者表示“兒歌”類音樂,“朝陽溝”表示“豫劇”類音樂。
圖7:推薦結果分析
如果發(fā)現(xiàn)利用最新算法得到的推薦結果初步來看較為滿意,就可以進行下一步離線實驗:計算相似度。
將音樂推薦列表中所有用戶的推薦結果與該用戶歷史消費音樂進行相似度對比,如果相似度比較高,證明推薦的音樂與用戶歷史喜歡音樂比較相似,是同一種口味和風格的音樂,可以進行下一步線上實驗,否則取消該對比實驗。相似度打分Score 定義如下:
其中U 表示候選用戶集合,m 表示某個用戶歷史喜歡音樂個數(shù),n 表示音樂推薦長度,Score(u,Mi)表示用戶u 對歷史喜歡音樂Mi的打分,Sim(Mj,Mi)表示推薦音樂Mj與歷史喜歡音樂Mi的相似度。系統(tǒng)需要定義某個分數(shù)閾值S,當某個算法的Score 大于該閾值時,說明該推薦算法效果較為理想,可以進行線上實驗,是否必須對該算法進行修改后方能繼續(xù)下一步操作。該相似度閾值也不是越大越好,因為當Score 特別大時,表明推薦的音樂與用戶歷史喜歡音樂過于類似,使得用戶新穎度較低,導致系統(tǒng)中的用戶長期被同一類型的音樂覆蓋,無法探索新的音樂口味。
進行線上實驗首先要確定實驗對象。應該選取最能代表大多數(shù)用戶的對象進行實驗,這樣的實驗才更加具有說服力,因此實驗對象應當具備足夠的隨機性。此外,線上對比實驗對實驗對象的活躍度有一定要求,即實驗對象在系統(tǒng)中的活躍度不能過高,也不能過低。一般對實驗的觀察期為幾個小時或者一天,如果實驗對象過于不活躍,可能導致實驗期間該用戶沒有使用該系統(tǒng),無法對其結果進行統(tǒng)計觀察;此外,實驗對象的活躍度不宜太高,這些用戶對系統(tǒng)的容忍度和信任度較高,導致這些這些用戶對效果一般的推薦結果進行較為積極的回應。
多臂老虎機是一種隨實驗進程動態(tài)分配流量的實驗,比A/B 實驗更有效率。它通過不時觀察各變體的表現(xiàn),而動態(tài)調整各變體流量比例,增加表現(xiàn)好的變體的流量,同時減少表現(xiàn)差的變體的流量,而不用等到實驗結束。但這類實驗需要兩個重要條件:評估目標是單一的OEC(多指標需融合為單指標),且該OEC 在流量重新分配時能夠被很好地測量(比如點擊率)。此外,這類實驗還存在一點風險性,即將原本處于“差”變體中的流量按不同比例分配到其他表現(xiàn)較好的變體中時可能會有潛在偏差(但我個人認為,即使是靜態(tài)流量,偏差也無法避免)。
選取好實驗對象后,應當選取數(shù)量相等的類似用戶作為對照組。注意不能將其他所有用戶作為對照組,因為這些用戶的行為習慣與實驗對象可能不同,而且同一時間可能有多個實驗在同時進行。分別統(tǒng)計實驗組和對照組的各項KPI 指標,并將這些結果以可視化的形式進行展示,可以幫助決策者更加準確地判斷推薦算法的效果,并進行后續(xù)的決策。
需要注意的是,現(xiàn)有的數(shù)據(jù)結果并不能說明一切,有可能指標定義不合理,或者其他流程出現(xiàn)問題,需要決策者綜合進行考慮。算法研究人員主要負責設計推薦算法,并用代碼去生成推薦結果并進行簡單的線下驗證,至于實驗結果是否真實有效,還需PUSH 到線上進行分析。然而線上推送、音樂過濾等流程由其他工作人員完成,可能由于這些步驟的失誤,導致實驗結果不理想。
本文針對學術界與工業(yè)界由于信息不對稱導致的算法應用效果不理想問題,提出了推薦算法在音樂系統(tǒng)中的應用框架。該框架包含從數(shù)據(jù)的處理分析,到音樂的多路召回以及對這些音樂進行統(tǒng)一排序,最終到音樂的過濾和融合,系統(tǒng)介紹了如何去開發(fā)出一個完整的音樂推薦系統(tǒng),以及各種不同的推薦算法在音樂系統(tǒng)中的實施方案。該框架可以幫助學術界科研人員更好地去開發(fā)出較為前沿的推薦算法,也可以幫助工業(yè)界和教育相關工作人員更好地去理解和應用各種算法到音樂系統(tǒng)。