1. 程式人生 > >Feed流及其常見演算法簡介

Feed流及其常見演算法簡介

什麼是Feed?

Feed是一個網際網路早起概念,本意是RSS中用來接收資訊來源更新的介面。普遍對feed的解釋是:

a web feed (or news feed) is a data format used for providing users with frequently updated content. Content distributors syndicate a web feed, thereby allowing users to subscribe to it

即feed實際上是一種資料格式,給使用者持續提供更新的內容。我們刷微博、朋友圈、知乎、各大門戶媒體,我們所看到的內容,都是一種feed流,我們獲取的內容好不誇張的說,是被這些feed流所控制了。內容分發機制能夠控制使用者在合適的時間看到“規定”的內容。

早期的feed流是以時間線來控制的,即timeline,新浪微博早期就是以timeline的形式進行內容展示的。如今feed流進行了多種變革,不再是單純的timeline,各大網際網路公司都有自己的內容分發機制。

如同搜尋一樣,內容分發機制的設計也始終關注兩大核心問題:

1.給使用者分發(展示)哪些內容

2.對分發的內容怎麼進行排序

不同的內容分發機制其實對這兩個問題所給出的解決方式是不一樣的。不同的網際網路公司為了自己的商業利益或者其他戰略層面的考慮,所設計的feed流設計方案也是不同。

(1)永恆的Timeline

Timeline是Feed流設計中最原始、最基本也是最直覺的展示形式。timeline,所謂的“時間線”,內容的分發完全按照時間進行排序和展示的。比如說早期的微博,使用者關注(訂閱)了一些“大V”,在微博首頁看到的內容按照所關注的人所發微博的時間順序進行展示的。再比如現在的微信朋友圈,也是按照朋友釋出內容的時間順序進行展示的。

其實微信朋友圈、早期的微博很好的回答了feed流設計兩大核心問題:

1.給使用者分發(展示)哪些內容:微博是關注的使用者、微信是相互專注的好友

2.對分發的內容怎麼進行排序:按照時間的先後順序,最新的內容越靠前

Timeline有簡單粗暴的優點:利於使用者對呈現的內容進行理解,時間的先後順序嘛,另外由於是按照時間順序,每次更新都能最大化的保證使用者能夠看到更新的內容。當時timeline也有致命的弱點:內容呈現的效率極為底下,甚至可能會出現大量的垃圾內容。需要內容提供方十分克制,也需要使用者對這些內容足夠關注。可以想象一下,一個平臺每天釋出上千條內容,如果按照timeline的內容分發機制,這麼多資訊一下子給使用者展示,必定給使用者造成了嚴重的干擾。現在的新浪微博就放棄了timeline這種feed流設計,這裡不去探討微博為什麼放棄timeline,可以肯定的是timeline這種內容分發機制日益不能滿足使用者的需求。(ps:實際上,很多使用者也開始懷念ttimeline,如今的微博內容分發機制也引起了使用者大量吐槽)

(2)重力排序法——兼顧熱度和更新時間

其實一個平臺大了之後,每天將會產生大量的內容,既有大量的feed流,這些feed流中大部分內容其實對使用者是沒有太大的價值的。這種場景其實是很常見的。微信朋友圈之所以現在還保持timeline的內容分發機制,是因為朋友圈每天產生的feed其實不多,使用timeline對微信使用者會更加友好。但微博、知乎、今日頭條不一樣,每天產生的feed流比微信朋友圈大得多,遇到這種棘手的問題該如何解決也是考驗產品經理的能力。

何為重力排序法,對於一個feed流中的內容而言,有兩種力量:重力和拉力。重力就是讓內容持續往下路的力,即時間,時間越久,掉的越快;拉力就是讓內容往前排的力,比如知乎的點贊、門戶新聞的閱讀數等。重力和拉力,兩者相斥,共同決定內容的排序機制。

這裡有一個重力演算法的排序公式,來自於Reddit的核心排序演算法:

score(H,T)=logH + (T-t)/A

這個公式裡面有一些因子,代表如下含義。H表示內容的熱度,比如內容的瀏覽量、點贊數,也可以是經過加權(降權)處理過的一些值,H的值越大,排名自然靠前;T表示內容的釋出時間;t表示一個時間的起始值,只要比釋出的時間早就成。T-t用來衡量一個內容的的新舊程度,T-t的值越大,表示內容越新;A表示一個係數,A越大,T-t的影響力就越小,即按照時間進行排序的影響就越小,內容更新的速度也越慢。一般來說,A的初始值為10個小時,36000秒,後面不斷迭代調整引數。

(3)智慧排序法——在唾罵中前行

對於智慧排序的演算法,由於牽涉到複雜的模型構建和機器學習,已超出了我的能力範圍,這裡只是簡單的闡述一下智慧排序的機制,比較通俗的講解可以參考“純銀”的一篇文章,淺顯易懂。(http://www.jianshu.com/p/4b51126fe930)

什麼是智慧排序?

首先,系統需要知道什麼是一個內容被展示的目標值。比如微博,一個內容被展示的目標值是轉發、評論、點讚的次數。那麼通過大量的樣本機器學習,系統對於什麼是好的內容會有一個預測。這對於一個內容的預測,則是智慧排序的基礎。

其次,系統會遮蔽一些違規的內容,比如涉及到政治、敏感事件

再次,為了使用者內容質量,系統會在使用者的feed中增加一些熱門的內容

最後,考慮內容和使用者的親密度,系統認為內容受到歡迎的程度,內容事件衰減等因素後,系統進行綜合排序。

智慧排序聽起來是個很好的主意。但是也是一把雙刃劍,從微博的排序法被罵可以看出,也有很大一部分使用者其實不滿這個智慧排序法。但為什麼微博要一意孤行呢?也許是商業利益、也許是戰略,這裡不去探究裡面的動機,畢竟好多探究是經不起推敲的,只是一本正經的胡扯。

就像文章開頭所提出的兩個核心問題:1.給使用者分發(展示)哪些內容;2.對分發的內容怎麼進行排序。我們在設計內容分發機制的時候,不管選擇何種機制,作為產品經理,需要根據使用者實際的場景來進行feed流的設計。