雲音樂隱性關係鏈的探索與實踐

雲音樂技術團隊發表於2022-03-31

圖片來源:https://unsplash.com/photos/Q...

作者:左馮翊

一、專案背景

雲音樂依託音樂主站業務,衍生了不少創新業務。不管是音樂、直播還是播客等業務,都面臨著如下兩個冷啟動的問題:

  • 如何為新使用者(或不活躍使用者)分發內容
  • 如何將新內容(或冷門內容)分發給使用者

每個業務都沉澱了一些解決冷啟動的方法,比較常見的一種方法是引入使用者在其他場景的行為資料,比如在直播冷啟中,我們會引入使用者對音樂的偏好。

隨著業務的不斷髮展,越來越多的場景希望能有一種效果比較好開發成本低通用性比較強的方案適用於解決雲音樂各業務早期和中期的冷啟動。

我們調研了冷啟動的多種解決方案,如跨域推薦、新老使用者分層、元學習和關係鏈傳遞等。 最後發現基於關係鏈的傳遞比較適合做成一種通用的基礎方案,而且不少網際網路產品(如微信視訊號、拼多多等)也將其作為一種重要的冷啟動方法。

但是雲音樂沒有顯性的好友關係鏈,應該怎麼做呢?隱性關係鏈就在這樣的背景下誕生了。

那怎麼構建使用者的隱性關係鏈呢?

雲音樂以泛音樂內容為核心,通過內容連線人與人,使用者基於內容產生了一些行為偏好。那麼,我們可以通過綜合使用使用者在雲音樂各核心業務場景的行為資料(考慮到使用者隱私和資料安全,相關資料均做了脫敏處理,後續文章提到的使用者相關資料,不再特別註明),來學習使用者的向量表示,然後基於向量的相似度,來刻畫使用者的隱性關係強弱,一方面能獲得使用者的一些偏好表徵,另一方面也進一步對使用者的隱私進行了脫敏。

基於以上背景,本專案的主要目標是通過融合使用者在雲音樂的全生態行為資料,來學習使用者的向量表示,從而構建使用者的隱性關係鏈。基於隱性關係鏈,實現不同的下游推薦任務,如使用者冷啟、內容冷啟、相似召回和種子使用者 Lookalike等。

二、專案挑戰

專案遇到的挑戰主要有:

第一、資料規模大

資料規模大主要表現在3個方面,業務多、場景多、使用者互動行為類別多。

針對這個問題,我們對各業務資料情況做了一個摸底,這些使用者行為資料的總量是很大的。綜合考慮模型訓練效率和使用者興趣的時效性等,我們也沒有必要使用全量的資料。因此,我們對業務資料做了兩方面的處理:

  1. 使用業務的核心資料。比如在音樂這個業務,我們使用脫敏後的使用者音樂偏好行為
  2. 對資料做了一些脫敏、清洗、限制和過濾等,有效減少了資料量級

通過以上的一些處理,我們得到了一份質量比較高的使用者行為資料。

第二、如何建模

使用者的隱性關係鏈,不是一個具體的業務場景,缺乏明確的 label,也缺乏明確的優化目標,因此我們不能直接使用業務中的排序模型進行建模。另外,使用者的行為高度異構,由使用者和內容(指歌曲、直播、播客等)構成的圖就是異構的,並且不僅包含異構的節點(使用者和多種內容),而且包含異構的邊(使用者和內容的多種互動行為,比如點選、播放等)。

針對如何建模這個問題,我們將在第三部分進行重點介紹。

第三、如何評估

前面說到,我們不能直接使用排序模型,也就意味著我們不能直接使用 auc 等排序指標。通過分析和調研,我們綜合使用以下幾種方法進行評估:

  1. 定性評估
  • case 分析。這種方法通過分析使用者行為序列的交集個數或者 Jaccard 係數等,來判斷關係鏈是否靠譜。這種方法比較直觀,也具有一定的可解釋性。但其實也存在一個問題:如果模型判定兩個使用者的相似度是 0.8,他們的行為序列重合度是否就很高?不一定。比如,使用者 A 對歌曲 S1 和 歌曲 S2 有紅心行為,而使用者 B 對歌曲 S3 和 S4 有紅心行為,且這幾首歌曲是比較相關的歌曲(比如這幾首歌曲經常出現在很多其他使用者的行為序列中,或者來源於同一個藝人等),儘管他們的行為沒有交集,我們也可以認為這兩個使用者的興趣是有相似之處的。
  • 視覺化分析。我們得到了使用者的向量表示之後,可以通過 TensorFlow 的 Embedding Projector 等工具對 Embedding 進行視覺化,然後觀察具有相同標籤的使用者是否聚到了一起,標籤重合較少的使用者是否是分開。
  1. 定量評估
  • 上線實驗。通過 u2u、u2u2i 等方式進行召回上線,根據線上收益進行評估。這種方式比較直接,置信度比較高,但實驗成本也較高,應該先進行離線評估再確定是否上線實驗。
  • 離線評測。把使用者向量當成特徵,輸入到排序模型中,評估離線 AUC 或者 loss 等指標的收益;或者離線生成 u2i 的推薦列表,然後評估召回的精確率和召回率等。這兩種離線評測方式相對上線成本低一些,雖然不是直接對 u2u 進行評估,但也是一種可行的方法。

第四、如何對外提供服務

使用者的隱性關係鏈,是一個基礎建設,為了方便各業務場景能快速接入,我們需要做成一個線上服務,其中就涉及到一個問題:億級別使用者向量如何進行毫秒級相似檢索?

雲音樂參考業界的一些向量檢索引擎框架(如 Faiss、milvus 和 Proxima 等),自研了 Nsearch,實現了大規模向量的高效能相似檢索,支援高併發低延時、演算法複雜動態擴充套件和增量匯入等。

另外,為了支援不同業務場景定製需求的能力,我們也設計了一套比較好的服務架構,面向業務提供統一介面,支援快速接入、迭代的能力。

關於提供對外服務這個問題,我們將在第四部分重點介紹。

三、技術演進

為了構建使用者的隱性關係鏈,首先我們需要生成使用者的向量表徵。為此,我們調研和實現了多種演算法,在多個業務場景上進行了良好的實踐,也進行了許多有益的嘗試。

如圖所示,我們將調研過程按技術深度和建模方式分為 5 個階段:

第 1 個階段是摸索階段,我們調研了 SimHash 演算法。SimHash 演算法其實是用於計算文字間的相似度,在我們這裡,就是把使用者的行為序列看成一段文字。

第 2 個階段是起步階段,我們調研了 item2vec 模型。item2vec 來源於 word2vec,它的基本原理是最大化出現在中心詞附近的那些上下文詞的共現概率。

第 3 個階段是探索階段。我們在 item2vec 上面做了一些優化,比如將全域性負取樣改為約束負取樣,將 user_id 作為 global context,這些優化可以進一步增強向量的表徵能力。

第 4 個階段是發展階段。我們調研了異構圖模型 metapath2vec,它可以對多種實體關係進行建模,泛化性比較強。

第 5 個階段是創新階段。原始的 metapath2vec 沒有新增 side information,泛化效能還不夠強,因此我們正在做一些改進與優化。

下面,我們主要介紹下 SimHash、Item2vec 和 MetaPath2vec 。

SimHash

SimHash 演算法用於計算文字間的相似度,它是 Google 用於海量文字去重的一種演算法,也是一種區域性敏感雜湊(Locality Sensitive Hashing)演算法:兩個字串具有一定的相似性,在 hash 之後,仍能儲存這種相似性。

SimHash 的基本原理是將原始的文字對映為 n 位的二進位制數串,然後通過比較二進位制數串的漢明距離(Hamming distance)來度量原始內容的相似性。它的基本步驟如下:

  1. 關鍵詞抽取。將 Doc 進行分詞,去掉停用詞,然後為每個詞賦予一個權重(比如該詞的出現次數或者 TF-IDF 值等)。
  2. Hash。通過 hash 演算法把每個詞對映成 hash 值(二進位制串)。
  3. 加權。按照詞的權重計算詞的二進位制串的加權,1 的位置乘以權重,0 的位置乘以權重並取負。
  4. 合併。把各個詞算出來的加權序列值累加,變成一個序列串。
  5. 降維。把合併得到的序列串轉換成 01 串,即為最終的 SimHash 值。轉換規則:如果該位的值大於 0,則取 1,小於 0,則取 0.

如圖,是一個簡單的示例:

因此,經過 SimHash 演算法處理後,一個文字字串就變成了只有 0 和 1 的數字串,然後再通過漢明距離來判斷兩個文字的相似度,一般認為漢明距離小於 3 的兩個文字是相似的。

那麼,我們如何用 SimHash 來構建使用者的隱性關係鏈?事實上,我們通過一些規則來聚合每個使用者在各業務場景的行為序列,以此得到每個使用者的 id 序列,把每個 id 當成詞,然後賦予每個 id 權重,便可以依據 SimHash 的演算法流程得到每個使用者的 SimHash 簽名(只有 0 和 1 的數字串)。

看起來,我們的問題已經解決了。然而,在實際應用過程中,我們要檢索一個使用者與哪些使用者是比較相似的,如果和全庫的資料做比較,那效率是很低的。這裡,我們為每個使用者生成了 64 位的 01 串,那麼可以將構建隱性關係鏈這個問題抽象為:

假設有 10 億個不重複的 64 位的 01 串,給定一個 64 位的 01 串,如何快速從這 10 億個串中找出與給定串的漢明距離小於等於 3 (比較相似)的字串。

如何實現高效的檢索呢?我們可以將 64 位的 01 串,分為 4 個 16 位的段,根據抽屜原理,如果兩個字串是相似的(漢明距離在 3 以內),那麼它們必有一個段是相等的。

基於上述思想,我們可以這樣設計檢索流程:

  1. 入庫:遍歷全量的 SimHash 指紋,對於每一個 SimHash 指紋,執行如下步驟:

    1)將 64 位的 SimHash 指紋拆分成 4 個 16 位的段
    2)將每個段通過 kv 資料庫或者倒排索引儲存,比如段 1 儲存到庫 1,段 2 儲存到庫 2,讓 key 為 16 位的 01 串,value 為 key 相等時的指紋集合

  2. 檢索:對於需要檢索的 SimHash 指紋,執行如下步驟:

1)將 SimHash 指紋拆成 4 個 16 位的段
2)分別將每一個段去對應的資料庫進行等值查詢,根據上面的抽屜原理,查詢到的即是疑似相似的指紋
3)把待檢索的指紋和疑似相似的指紋進行漢明距離的比較,即可判斷是否相似

整體流程可以表示成下面的圖:

假設全庫有 2^30(約 10 億)條資料,假設資料均勻分佈,則每個 16 位 (16 個 01 數字隨機組成的組合有 2^16 個) 倒排返回的最大數量為 2^30/2^16=16384 個候選結果,4 個 16 位,則總共候選有 4*16384=65536。因此,通過上面的入庫檢索流程,原來需要約 10 億次比較,現在最多隻需要 65536 次即可得到結果,大大提升了檢索效率。

SimHash 是我們調研的第一種演算法,它簡單、快速、不用訓練,但缺點也比較明顯:

  • SimHash 結果具有一定的隨機性,兩個隨機序列的漢明距離存在一定的概率比較接近,需要通過 ensemble 降低這個概率,成本比較高
  • SimHash 對使用者相似度的表徵比較粗粒度(計算漢明距離,而漢明距離是一個整數)
  • SimHash 不能學習使用者行為上下文序列的關係,不能對 i2i、u2i 等進行建模

Item2Vec

微軟於 2016 年發表了一篇論文,Item2Vec:Neural Item Embedding for Collaborative Filtering。作者受 NLP 運用 embedding 演算法學習 word 的 latent representation 的啟發,參照了 google 的 word2vec 方法,把 item2vec 應用到推薦場景的 i2i 相似度計算中。它的主要思想是:把 item 看做 word2vec 中的 word,把使用者的行為序列看做一個 sentence,item 間的共現為正樣本,並按照 item 的頻率分佈進行負取樣。

這篇論文是微軟將 word2vec 應用於推薦領域的一篇實用性很強的文章。item2vec 方法簡單易用,極大地擴充了 word2vec 的應用範圍:從 NLP 領域直接擴充到推薦、廣告、搜尋等任何可以生成 sequence 的領域。

Item2Vec 的負取樣存在一個問題:負樣本過於簡單。比如,使用者聽了一首粵語歌,使用全域性負取樣,可能是一首英文歌,而這樣會減弱向量的表徵能力。為此,我們可以進行約束負取樣,從而提高向量的表徵能力。如圖:

注意到,Item2Vec 生成的是 item 的向量,那麼怎麼得到 user 的向量呢?事實上,在生成 item 向量之後,我們可以根據使用者歷史上與 item 的互動行為,計算 mean pooling 獲取使用者的向量表達。有了使用者的向量表達之後,我們就可以利用高維向量檢索引擎(如雲音樂自研的 nsearch、Facebook 的 Faiss 等)進行相似向量的快速檢索。

除了通過上面的方式間接得到使用者向量,我們還可以參考 Doc2Vec,當我們通過 user 與 item 的互動歷史構建出訓練的序列時,可以將 user id 作為 global context 加入到訓練中,同時學習出 user 和 item 的向量。

MetaPath2Vec

Item2Vec 是處理同構網路的方法,實際在使用的時候我們是分業務單獨建模再融合的,而 MetaPath2Vec 是
YuXiao Dong 等於 2017 年提出的一種用於學習異構資訊網路(Heterogeneous Information Network, HIN)節點表示的模型。

在論文中,異構網路被定義為圖 G=(V,E,T),其中 V 表示節點集合,E 表示邊的集合,T 表示節點型別和邊型別的集合。對於每個節點 v、每條邊 e 都有對應的對映函式,f(v): V -> T_V,g(e): E -> T_E,T_V 和 T_E 分別表示節點和邊的型別,同時 |T_V| + |T_E| > 2,即圖節點型別和邊型別的類別總量大於 2。

MetaPath2Vec 可用於學習包含不同節點型別、不同邊型別的圖節點的低維表示。MetaPath2Vec 的核心思想主要有兩點:

  • 元路徑
  • 異構 Skip-Gram

下面,我們以使用者-歌曲-藝人的網路進行說明。如圖所示,該網路有三種型別的節點,不同型別的節點以不同的顏色區分。

首先,我們看看什麼是元路徑。元路徑是在圖中選取的由節點型別構成的組合路徑,具有一定的業務含義。比如
「使用者-歌曲-使用者」,它表示兩個使用者對某首歌曲有共同行為。我們通常將元路徑設計成一種對稱的形式,這樣可以重複迴圈進行多次隨機遊走。比如基於「使用者-歌曲-使用者」的元路徑可以取樣出「使用者1-歌曲1-使用者2-歌曲2-使用者3”的序列。

與一般的隨機遊走相比,基於元路徑的隨機遊走有以下優點:

  • 避免遊走偏向於出現頻率高的節點型別
  • 避免遊走偏向於相對集中的節點(即度數高的節點)
  • 能夠捕獲不同節點型別之間的聯絡,從而可以將不同型別節點的語義關係融合到異構 Skip-Gram 模型中

接下來,我們看看異構 Skip-Gram,它的優化目標是最大化節點和其異構上下文的共現概率

異構 Skip-Gram 的目標函式如下,和普通 Skip-Gram 模型的主要區別在於中間多了個求和符號,分別對節點與其異構鄰居的關係進行建模。

四、服務部署

有了使用者的向量表徵之後,我們就可以構建隱性關係鏈服務了。服務的整體架構如圖所示,至底向上依次是演算法層、向量引擎層和服務層。

在演算法層,我們通過 simHash、item2vec 和 metapath2vec 等模型學習使用者的向量表示,在這個過程中,同時也會產出內容的向量表示,即 Embedding。

在向量引擎層,我們把使用者和內容的 Embedding 匯入到向量引擎進行索引構建。這裡的向量引擎,用的是雲音樂自研的 nsearch,實現了高維向量相似檢索、高併發低延時等查詢需求。

在服務層,採用的是雲音樂自研的服務框架 rtrs,實現了動態釋出、多級快取和非同步處理等工程需求。當請求來了之後,框架會對協議引數進行解析,召回模組會去配置中心載入相應的業務配置,然後執行該場景的業務召回。

通過以上這套框架,我們可以支援多種隱性關係鏈的召回方式,包括 u2u、u2i 和 i2i 等,另外,每種召回方式能夠支援不同業務場景定製需求的能力。

五、專案成果

隱性關係鏈從業務中來,最終也應該回到業務中去,服務業務,為業務創造價值

第一,隱性關係鏈從無到有,提供了隱性關係服務的能力。在這個過程中,我們除了構建使用者的隱性關係,也構建了內容和藝人等的隱性關係鏈。如圖所示,展示了藝人的隱性關係鏈。

第二,目前隱性關係鏈為音樂、播客和動態等 9 個業務的 13 個應用場景提供了隱性關係服務,取得了良好的效果。其中,在陌生人一起聽這個場景,效果提升顯著(人均連線時長 +9.4%)。

第三,目前隱性關係服務,高峰期 QPS 在 5000 以上,平均時耗在 10 毫秒。

六、總結與展望

隱性關係鏈是一個基建專案,雖然不是直接做業務,但是也和做業務殊途同歸,都需要為業務創造價值。我們已經在一些業務場景取得了一些效果,但還有不少地方需要進一步完善:

第一,隱性關係鏈基於神經網路模型,神經網路的黑箱特性使得很多模型不具有可解釋性,使得隱性關係鏈無法應用在一些需要顯性關係的業務,比如在使用者推薦場景提供推薦理由。對於這個問題,我們將引入圖資料庫輔助建模。

第二,隱性關係鏈的資料價值還沒有得到充分挖掘,比如 KOL 挖掘、社群發現等。

第三,模型的泛化能力還不夠強,還需要新增更多 side information 。

第四,模型還不夠魯棒,模型容易被活躍使用者、熱門內容帶偏,導致對不活躍使用者、長尾內容的學習不夠充分。對於這個問題,我們將引入 contrastive learning(對比學習)進行建模。

參考文獻

  • Charikar, Moses S. (2002), "Similarity estimation techniques from rounding algorithms", Proceedings of the 34th Annual ACM Symposium on Theory of Computing, p. 380, doi:10.1145/509907.509965, ISBN 978-1581134957.
  • Gurmeet Singh, Manku; Jain, Arvind; Das Sarma, Anish (2007), "Detecting near-duplicates for web crawling", Proceedings of the 16th International Conference on World Wide Web (PDF), p. 141, doi:10.1145/1242572.1242592, ISBN 9781595936547.
  • Barkan O, Koenigstein N. Item2vec: neural item embedding for collaborative filtering[C]//2016 IEEE 26th International Workshop on Machine Learning for Signal Processing (MLSP). IEEE, 2016: 1-6.
  • Dong Y, Chawla N V, Swami A. metapath2vec: Scalable representation learning for heterogeneous networks[A]. Proceedings of the 23rd ACM SIGKDD international conference on knowledge discovery and data mining[C]. 2017: 135–144.
  • Thomas N. Kipf and Max Welling. 2017. Semi-Supervised Classification with Graph Convolutional Networks. In ICLR.
  • Xiangnan He, Kuan Deng ,Xiang Wang, Yan Li, Yongdong Zhang, Meng Wang(2020). LightGCN: Simplifying and Powering Graph Convolution Network for Recommendation
本文釋出自網易雲音樂技術團隊,文章未經授權禁止任何形式的轉載。我們常年招收各類技術崗位,如果你準備換工作,又恰好喜歡雲音樂,那就加入我們 staff.musicrecruit@service.ne...

相關文章