從B站 (嗶哩嗶哩) 泄露的源碼裏發現了B站視頻推薦的祕密

這兩天閒來無事,回顧了一下年前B站沸沸揚揚的代碼泄露事件,大致翻閱了一些泄露的代碼發現了一些有意思的事情,其中就包括 B站視頻推薦 加權部分算法 的相關代碼。

不過後期 B站官方闢謠說是老版本代碼,並且已經進行相應的防禦措施,但是後端大體的架構還是不會變化太多,所以就仁者見仁智者見智了,僅供喫瓜參考。

姊妹篇:   B站 (嗶哩嗶哩) 泄露源碼中的有趣片段(彩蛋)

 

首先回顧一下B站源碼泄露事件始末

北京時間 2019年4月22日下午16點左右,一個名叫“openbilibili”的用戶在Github上創建了“go-common”代碼庫,而那顯然就是B站網站後臺工程源碼。B站在技術圈炸鍋,其後端源碼被惡意“開源”,被上傳至 GitHub 供全球用戶下載。

通俗一點來解釋,這就好像是有人把你家的房子圖紙發在了微博上,門在哪鎖在哪甚至鑰匙在哪都標得一清二楚。雖然單憑這個還不至於讓所有人都能進你家門,但其實也足夠頭疼了。

結果就是截至北京時間17:04,該項目已獲得6597個標星。fork數量已經突破6000(這個操作會將被Fork的代碼倉庫中所有的信息,包括源代碼、原倉庫中的issus、歷史提交等全部複製到你的賬號中),issues已經成了彈幕,場面已經失控。

最終B站官方也是就此做出了 “迴應”,這一代碼庫已被GitHub「封殺」,微博上已經看不到此事的蹤影,知乎上關於該事件的話題也基本被刪。

不過總的來說次此泄露對B站的影響也是不可估量的,也是導致了B站股價直接下跌4%.

 

有關B站的推薦和加權算法

抱着喫瓜的心理在翻看後臺代碼時,發現了這麼一段代碼,注意上面的註釋。

//countArcHot 視頻=硬幣*0.4+收藏*0.3+彈幕*0.4+評論*0.4+播放*0.25+點贊*0.4+分享*0.6 最新視頻(一天內發佈)提權[總值*1.5]
func countArcHot(t *api.Stat, ptime int64) int64 {
    if t == nil {
        return 0
    }
    hot := float64(t.Coin)*0.4 +
        float64(t.Fav)*0.3 +
        float64(t.Danmaku)*0.4 +
        float64(t.Reply)*0.4 +
        float64(t.View)*0.25 +
        float64(t.Like)*0.4 +
        float64(t.Share)*0.6
    if ptime >= time.Now().AddDate(0, 0, -1).Unix() && ptime <= time.Now().Unix() {
        hot *= 1.5
    }
    return int64(math.Floor(hot))
}

// countArtHot 專欄=硬幣*0.4+收藏*0.3+評論*0.4+閱讀*0.25+點贊*0.4+分享*0.6 最新專欄(一天內發佈)提權[總值*1.5]
func countArtHot(t *model.Meta) int64 {
    if t.Stats == nil {
        return 0
    }
    hot := float64(t.Stats.Coin)*0.4 +
        float64(t.Stats.Favorite)*0.3 +
        float64(t.Stats.Reply)*0.4 +
        float64(t.Stats.View)*0.25 +
        float64(t.Stats.Like)*0.4 +
        float64(t.Stats.Share)*0.6
    if int64(t.PublishTime) >= time.Now().AddDate(0, 0, -1).Unix() && int64(t.PublishTime) <= time.Now().Unix() {
        hot *= 1.5
    }
    return int64(math.Floor(hot))
}

接下來就是對這段代碼的解讀:

首先像大多數的推薦算法一樣,小破站的視頻推薦也是通過對各項數據進行加權求得視頻權重然後在進行再區分,提高視頻出現概率;

我們能幫助提高視頻在哪些地方的出現概率呢?
① b站『搜索』時出現的默認結果頁面
② 對該視頻話題感興趣的其他用戶的首頁
③ 任何會有推薦視頻的地方,比如用戶看完一個視頻後網站自動推薦一組視頻

其中影響權重的主要是以下因素:

視頻是: 硬幣、收藏、彈幕、評論、播放量、點贊數、分享數、更新時間。

專欄文章是:硬幣、收藏、評論、閱讀量、點贊數、分享數、更新時間。

總結:

  • 視頻多了一個彈幕加成。
  • 在2個內容裏,分享都佔到了最高權重,有0.6,這個可以理解,大部分平臺都是分享權重無限高。
  • 播放量和閱讀量真的是弟弟,兩邊都是最低權重,不過相比評論這些二次互動,權重低可以理解。
  • 評論比收藏的權重要高,這個有點特殊。因爲不少平臺是收藏權重大於評論的。爲什麼呢?因爲一般來說,很多人看見內容都會評論,但是隻有感覺特別好的內容,纔會收藏。

收藏權重高,意味着重視內容質量,更重視大家覺得好的乾貨。

評論權重高,則意味着注重互動,更重視能吸引大家討論的內容。

目前B站在代碼上的思路來看,更重視能引發討論熱議的內容。

 

那麼對於我們來說這段代碼有什麼實際意義呢?

在如今的流量時代,高曝光就意味着能有更多的人看到,從而轉化爲 高流量、高粉絲,高收益

如果你是UP主 : 

那麼想要提高自己視頻/文章的曝光度,儘可能增加 分享,評論,彈幕的數量 會是更有效的方法,而去刷播放量則意義不大(這樣就很好的解釋了爲什麼有些UP老是騙彈幕 ~)

如果你是用戶 :   

點贊、硬幣、閱讀量 可能更多的影響的是你所看UP的收益,想要爲喜歡的UP增加曝光不如多刷幾條彈幕和評論

如何搞定自己的首頁推薦內容  ——— 對視頻點擊不感興趣能極大的減少相關話題的權重。

首頁看到不感興趣的視頻,首頁視頻縮略圖下面右邊按鈕點擊,選擇不感興趣,調教一段時間就好了。

 

如果有什麼要補充的,歡迎下方👇評論區留言

1份讚許 = 100分的認可,如果感覺還不錯,點個贊👍 支持一下吧 ~

不定期分享 有趣、有料、有營養內容,歡迎 訂閱關注 👌 我的博客 ,期待在這裏與你相遇 ~

好文推薦:   20秒 一鍵配置 VSCode (Visual Studio Code) C/C++開發環境 !

                     一道微軟面試題引出的 int與unsigned隱式轉換問題

                     Facebook前身 哈佛“選美”網站Facemash核心算法 --- ELO等級分制度(附源碼)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章