在產(chǎn)品算法化的時(shí)代,不了解算法,恐怕難以做好一款產(chǎn)品的設(shè)計(jì)。無(wú)論是信息流的推送還是搜索結(jié)果的展示,算法深刻塑造了用戶體驗(yàn)。因此,了解算法,是作為PM的一項(xiàng)基礎(chǔ)功課。本文總結(jié)了常見(jiàn)的一些算法知識(shí),很多來(lái)自我對(duì)網(wǎng)路大神們的分享進(jìn)行的梳理,大家一起補(bǔ)補(bǔ)課。由于文章內(nèi)容較長(zhǎng),因此會(huì)分很多天更新完,下面進(jìn)入正題。
一、熱度算法。
新聞熱度分 = 初始熱度分 + 用戶交互產(chǎn)生的熱度分 – 隨時(shí)間衰減的熱度分
Score = S0 + S(Users) – S(Time)
假如現(xiàn)在我們要給一款新聞應(yīng)用設(shè)計(jì)內(nèi)容的分發(fā)機(jī)制,請(qǐng)問(wèn)怎樣分發(fā)新聞內(nèi)容更為合理呢?在考慮算法時(shí),我們首先想到有幾個(gè)約束條件:
①不同新聞的重要性并不相同。
②用戶參與的各種行為會(huì)助推或拉低新聞熱度。
③新聞?dòng)袝r(shí)效性,熱度隨時(shí)間衰減。
④不同的人,新聞喜好是不同的。
前3個(gè)問(wèn)題,我們首先解決。
1.1初始熱度分S0
問(wèn)題1的解決方案很簡(jiǎn)單,給不同類型的新聞賦予不同的初始值S0。比如,娛樂(lè)類新聞往往比文化類的新聞的熱度更高,大家更愛(ài)看,因此初始值更大一點(diǎn)。

上圖中,0.6、0.8、1.2、1.5就是不同類別新聞的初始權(quán)重。
上述初始值的設(shè)定還有一條補(bǔ)充,就是當(dāng)天的重大頭條新聞,我們希望入庫(kù)時(shí)熱度就很高。比如馬保國(guó)老師打拳居然贏了迪迦奧特曼。為了讓新聞媒體剛發(fā)出來(lái)就有很高的熱度。我們需要提前準(zhǔn)備一個(gè)熱詞庫(kù),每天抓取各類頭部門戶網(wǎng)站或社交網(wǎng)站上的新聞熱詞。一旦平臺(tái)上有用戶發(fā)布的新聞命中了當(dāng)天的熱詞,如:“馬保國(guó)”、“奧特曼”、“迪迦”,我們就給這個(gè)用戶的內(nèi)容賦予較高的初始熱度。
思考題:如何在下述情況下篩選出當(dāng)日頭條熱詞:
①我們是第一家知道某最新頭條新聞的,頭條首曝者。
②我們是第二家知道該新聞的,頭條尾隨者。
③我們是若干家之后知道該新聞的,頭條跟進(jìn)者。
1.2用戶交互熱度分S(Users)
問(wèn)題2的解決方案,是把表征用戶喜好的各種行為拎出來(lái)。比如瀏覽、評(píng)論、點(diǎn)贊、喜歡、收藏、分享、轉(zhuǎn)發(fā)、點(diǎn)踩、舉報(bào)、截圖等等。行為越多,顆粒越細(xì)。
比如我們只取幾個(gè)指標(biāo):瀏覽(1分)、點(diǎn)贊(3分)、評(píng)論(5分)、分享(10分)
一個(gè)用戶如果在某條新聞上都命中了上述行為,那么這條新聞可以獲得的該用戶S(Users)為:18分。
但是,這種計(jì)算方法還有一個(gè)問(wèn)題要解決,那就是用戶規(guī)模的問(wèn)題。剛發(fā)出去的新聞,肯定看得人少,我們希望可以強(qiáng)化用戶行為分,讓用戶的一個(gè)點(diǎn)贊和評(píng)價(jià)可以很強(qiáng)地助推該條新聞熱度。但是隨著閱讀的人越來(lái)越多,我們希望可以弱化用戶行為分。因此,需要針對(duì)用戶規(guī)模,強(qiáng)化或者弱化用戶的行為權(quán)重。用什么數(shù)學(xué)工具去解決這一問(wèn)題?留給你思考。
思考題:如何根據(jù)參與的用戶規(guī)模不同,選擇強(qiáng)化或弱化用戶行為分。
1.3時(shí)間衰減熱度分
問(wèn)題3的解決方案需要用到一個(gè)工具。我們希望新聞的熱度是隨著時(shí)間而遞減的,這樣大家隨時(shí)看到的都是新聞而不是舊聞了。如何來(lái)度量這種隨時(shí)間遞減的熱度呢?
想像一下,房間里放了一杯熱咖啡,這杯咖啡會(huì)隨著溫度慢慢衰減,直到與房間室溫持平。新聞的熱度就像房間里的熱咖啡,隨著時(shí)間而慢慢降溫。因此,這里的工具就是牛頓冷卻定律。
牛頓冷卻定律是由英國(guó)物理學(xué)家艾薩克·牛頓爵士(1642-1727)所提出的一個(gè)經(jīng)驗(yàn)性的關(guān)系。是指物體所損失的熱的速率與物體和其周圍環(huán)境間的溫度差是成比例的。當(dāng)物體表面與周圍存在溫度差時(shí),單位時(shí)間從單位面積散失的熱量與溫度差成正比,比例系數(shù)稱為熱傳遞系數(shù)。
數(shù)學(xué)公式為:

公式變換之后,變成下面更容易理解的公式:

其中,T0:初始溫度、T(t):物體當(dāng)前的溫度、to:初始時(shí)刻、t:某個(gè)時(shí)刻、H:周圍的溫度、α: 冷卻系數(shù)。
將公式里的溫度T換成熱度,就可以用來(lái)衡量新聞的熱度衰減了。這里面最核心的是冷卻系數(shù)α,α在控制不同類型內(nèi)容的衰減程度。有些內(nèi)容的更替速度快,我們?cè)O(shè)置的冷卻系數(shù)可以大一些,有些更替速度慢,我們可以控制得小一些。
具體計(jì)算冷卻系數(shù),可以這樣操作。假設(shè)我們認(rèn)為初始熱度分為100,24小時(shí)后,熱度分為1,那么就有:1=100*e^(-24α),得到α=0.192。從這里可以看到,當(dāng)我們希望一條內(nèi)容,用時(shí)多久,可以冷卻到何種程度時(shí),即可確定α值。需要注意的是,此處計(jì)算我們?cè)O(shè)定的t-to的差值,是按小時(shí)為單位來(lái)計(jì)算的,而不是按照分鐘或者秒。
延展閱讀:阮一峰老師的博客:基于用戶投票的排名算法(四):牛頓冷卻定律
找到了衡量新聞熱度衰減的辦法,如何用在整體的新聞熱度分呢?
開頭部分用了這個(gè)公式來(lái)大概描述我們希望達(dá)成的效果:新聞熱度分 = 初始熱度分 + 用戶交互產(chǎn)生的熱度分 – 隨時(shí)間衰減的熱度分,Score = S0 + S(Users) – S(Time)。
看了上面的牛頓冷卻定律后,該公式可以演化為Score =(S0 + S(Users))/(e^α*(t-t0))
如果只是解決了前3個(gè)問(wèn)題,即:初始熱度分、用戶行為助推熱度分、熱度分衰減,那么大家看到的新聞都是一樣的,以前的網(wǎng)易新聞、騰訊新聞不就是這樣么?現(xiàn)在我們想給不同的人推薦不同的新聞,怎么辦?這便是今日頭條解決的問(wèn)題了。需要用到個(gè)性化推薦了。
個(gè)性化推薦一般有兩種方法,方法1是根據(jù)內(nèi)容相識(shí)度推薦。比如你喜歡看科比的新聞,那么我推薦歐文的似乎也不錯(cuò)。方法2是根據(jù)用戶品味相識(shí)度推薦。比如你喜歡科比,另一個(gè)人也喜歡科比,那么我可以推薦另一個(gè)喜歡的新聞給到你。下來(lái)來(lái)說(shuō)一說(shuō)如何采取這兩種辦法來(lái)推薦。
二、基于內(nèi)容推薦
按照方法1,我們是需要計(jì)算出兩篇新聞的相似度。那么兩篇新聞的關(guān)系要怎么計(jì)算呢?
首先呢,第一步我們需要對(duì)新聞進(jìn)行分詞。比如這樣一個(gè)句子:科比是世界上最優(yōu)秀的籃球運(yùn)動(dòng)員,詹姆斯也是。這句話我們分詞后便得到了如下詞組:科比、世界、優(yōu)秀、籃球運(yùn)動(dòng)員、詹姆斯、是、也、上。
從這個(gè)詞組可以看出,“是”、“也”、“上”這類詞并沒(méi)有太多含義,需要去掉,留下的詞才有意義。因此,我們分詞的時(shí)候,需要用到兩個(gè)詞庫(kù),正常詞庫(kù)和停用詞庫(kù)。停用詞庫(kù)的內(nèi)容就是上述去掉的那類詞,而正常詞庫(kù)就是我們拆解內(nèi)容的標(biāo)準(zhǔn)。一篇新聞就是按照正常詞庫(kù)拆成一個(gè)個(gè)單獨(dú)的詞&詞組的。
那么這里有個(gè)問(wèn)題,就是分詞到底是怎么分的。一般分詞的方法有很多種,正向匹配拆分,逆向匹配拆分,最少切分。
正向匹配法是從左向右掃描尋找詞的最大匹配。一般會(huì)先規(guī)定一個(gè)詞的最大長(zhǎng)度,每次掃描的時(shí)候?qū)ふ耶?dāng)前開始的這個(gè)長(zhǎng)度的詞來(lái)和字典中的詞匹配,如果沒(méi)有找到,就縮短長(zhǎng)度繼續(xù)尋找,直到找到或者成為單字。
舉個(gè)例子。我們擬分詞的長(zhǎng)句為:科比見(jiàn)過(guò)凌晨四點(diǎn)的天空。
我們?cè)~典是這樣的:{科比、見(jiàn)過(guò)、凌晨四點(diǎn)、天空}
那么正向匹配法是怎么運(yùn)行的呢?
首先我們?cè)O(shè)定最大詞長(zhǎng)為4。我們從左到右,先試試4個(gè)字符"科比見(jiàn)過(guò)",來(lái)跟我們?cè)~典匹配,發(fā)現(xiàn)沒(méi)有匹配到的。那就縮短字符,試一試“科比見(jiàn)”,發(fā)現(xiàn)還是沒(méi)有。繼續(xù)縮短字符,試一試“科比”,詞組中出現(xiàn)了!
好了,我們分出了第一個(gè)詞,把這個(gè)詞從原句中踢掉,那么原句現(xiàn)在變?yōu)椋阂?jiàn)過(guò)凌晨四點(diǎn)的天空。
繼續(xù)按照原方法分詞。先試試最左側(cè)的4個(gè)字符“見(jiàn)過(guò)凌晨”,來(lái)跟詞典匹配,找不到匹配的詞。繼續(xù)縮短字符“見(jiàn)過(guò)凌”,來(lái)跟詞典匹配,還是匹配不到,那么繼續(xù)縮短。
依次按照上述方法,這樣長(zhǎng)句就會(huì)被分成一個(gè)個(gè)詞組了。這就是正向匹配法。
逆向匹配法是從右至左,分詞規(guī)則跟正向匹配法差不多,就不贅敘了。
最少切分法是依據(jù)最少切分原則,從幾種分詞算法切分結(jié)果中取切分詞數(shù)最少一種的。比如,從正向最大匹配和逆向最大匹配兩者中選擇詞數(shù)較少的方案,當(dāng)詞數(shù)相同時(shí),采取某種策略,選擇其中一個(gè)。