推薦系統(tǒng):怎樣實(shí)現(xiàn)內(nèi)容相似推薦

很多產(chǎn)品想要加入推薦系統(tǒng)模塊卒煞,最簡(jiǎn)單的就是做內(nèi)容相似推薦痪宰,雖然技術(shù)簡(jiǎn)單但是效果卻很好,對(duì)于增加用戶粘性畔裕、提升用戶留存有較多的效果衣撬,甚至很多產(chǎn)品后來加入了很多推薦模塊之后,還是發(fā)現(xiàn)導(dǎo)流效果最好的依然是內(nèi)容的相似推薦扮饶。

比如看完了一片《Python怎樣讀取MySQL》之后具练,在相似推薦中看到了一片題目為《Python操作MySQL的效果優(yōu)化》的文章,很自然的就像多深入了解一下贴届,于是就點(diǎn)進(jìn)去看一看靠粪,那么對(duì)于整個(gè)網(wǎng)站來說,就會(huì)降低跳出率毫蚓,增加用戶的留存,是一個(gè)很好的用戶體驗(yàn)昔善。

實(shí)現(xiàn)一個(gè)內(nèi)容相似推薦的方案比較簡(jiǎn)單元潘,大體上包含以下步驟:

1、獲取內(nèi)容數(shù)據(jù)君仆,比如標(biāo)題翩概、關(guān)鍵字、分類返咱、甚至全文本钥庇;

一般文檔、數(shù)據(jù)等內(nèi)容都存儲(chǔ)于mysql咖摹,可以使用python/java等語(yǔ)言直接讀取mysql導(dǎo)出到文件.txt格式评姨,或者直接用shell的mysql -e sql > data.txt的方式導(dǎo)出。

一般情況下萤晴,全文本內(nèi)容太散吐句,不會(huì)作為候選字段胁后,但是有些視頻之類的實(shí)體,因?yàn)闃?biāo)題和簡(jiǎn)介文字太少嗦枢,如果有詳情全文本的話攀芯,也可以加入候選數(shù)據(jù)字段。

2文虏、對(duì)內(nèi)容數(shù)據(jù)做中文分詞侣诺;

如果是python語(yǔ)言,可以使用“結(jié)巴分詞”氧秘,地址為:https://github.com/fxsjy/jieba

或者可以直接使用百度云的中文分詞紧武,百度的NLP自然語(yǔ)言處理技術(shù)還是很厲害的。

3敏储、提取內(nèi)容數(shù)據(jù)的關(guān)鍵詞阻星;

當(dāng)分詞之后,分詞結(jié)果中包含很多“的”已添、“也”等無意義的詞語(yǔ)妥箕,這些詞語(yǔ)不能稱之為關(guān)鍵詞,一般會(huì)通過TF/IDF的方法計(jì)算每個(gè)詞語(yǔ)的權(quán)重更舞,將一個(gè)文檔的所有詞語(yǔ)的TF/IDF權(quán)重倒序排列畦幢,取TOPN個(gè)作為關(guān)鍵詞;

如果使用的是jieba分詞缆蝉,那么直接就自帶了提取關(guān)鍵詞的支持宇葱;當(dāng)然也可以自己計(jì)算,TF就是計(jì)算一篇文章中每個(gè)詞語(yǔ)出現(xiàn)的次數(shù)刊头、IDF就是這個(gè)詞語(yǔ)在所有文章中出現(xiàn)的次數(shù)黍瞧,TF除以IDF就是權(quán)重值;

4原杂、將關(guān)鍵詞映射成數(shù)字向量印颤;

我們最終的目標(biāo)是計(jì)算文檔之間的相似度,要計(jì)算相似度那就需要把內(nèi)容映射成向量穿肄,第一步就是先把每個(gè)詞語(yǔ)映射成向量年局,映射的方式有幾種:

使用one hot方法映射成向量

自己訓(xùn)練word2vec密度向量;

使用業(yè)界的訓(xùn)練好的word2vec向量

一般情況下咸产,自己的數(shù)據(jù)集比較小矢否,效果會(huì)比業(yè)界的word2vec效果差一些,比如這里推薦騰訊開源的200維度全網(wǎng)word2vec向量脑溢,地址在:https://ai.tencent.com/ailab/nlp/embedding.html

5僵朗、計(jì)算文檔粒度的數(shù)字向量;

得到每個(gè)詞語(yǔ)的向量之后,通過加權(quán)平均的方式可以計(jì)算整個(gè)文檔的向量衣迷;

權(quán)重可以使用每個(gè)詞語(yǔ)的頻率次數(shù)歸一化畏鼓,或者直接平均即可;

6壶谒、計(jì)算文檔之間的相似度云矫;

使用cosin算法就能夠計(jì)算文檔向量之間的相似度;

cosin算法很簡(jiǎn)單汗菜,java让禀、python自己實(shí)現(xiàn)就可以,也可用https://scikit-learn.org或者h(yuǎn)ttp://surpriselib.com/中的相似度計(jì)算模塊直接調(diào)用實(shí)現(xiàn)陨界。

計(jì)算完之后巡揍,對(duì)于每個(gè)文檔,將它跟每個(gè)文檔的相似度做倒序排列菌瘪,比如TOP 30個(gè)作為推薦的結(jié)果集合腮敌。

7、將文檔的相似度關(guān)系存入mysql/redis等緩存俏扩;

第6步驟會(huì)得到一個(gè)這樣的結(jié)果:(文檔ID糜工、相似文檔ID列表),將這樣的數(shù)據(jù)直接存入mysql或者redis录淡,key就是文檔ID捌木,value是相似文檔ID列表即可。

8嫉戚、當(dāng)頁(yè)面展示一個(gè)內(nèi)容的時(shí)候刨裆,提取相似推薦進(jìn)行展示;

當(dāng)用戶訪問一個(gè)頁(yè)面的時(shí)候彬檀,后端服務(wù)python/java從緩存redis或者mysql中根據(jù)展示的頁(yè)面的文檔ID帆啃,提取相似ID列表;

因?yàn)榍皫撞襟E是提前計(jì)算好的列表凤覆,這里也可能做一些過濾已下線的事情链瓦,然后根據(jù)ID提取對(duì)應(yīng)的標(biāo)題、簡(jiǎn)介等信息盯桦,組裝成相似推薦列表返回給前端即可;

總結(jié)

以上就是離線計(jì)算相似推薦的步驟渤刃,其實(shí)還可以用在線的方式進(jìn)行拥峦,把這個(gè)問題按照搜索的架構(gòu)實(shí)現(xiàn)即可,新來一個(gè)文檔就分詞卖子、計(jì)算關(guān)鍵詞列表存儲(chǔ)略号,然后每次訪問的時(shí)候根據(jù)關(guān)鍵詞列表查詢相同關(guān)鍵詞列表的文檔也可以實(shí)現(xiàn)。

當(dāng)相似內(nèi)容推薦上線后,就能夠不斷積累一些用戶點(diǎn)擊玄柠、查看文檔的行為數(shù)據(jù)突梦,基于行為數(shù)據(jù)就能訓(xùn)練協(xié)同過濾的模型,實(shí)現(xiàn)內(nèi)容不相似但是行為相似的協(xié)同過濾推薦羽利。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末宫患,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子这弧,更是在濱河造成了極大的恐慌娃闲,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件匾浪,死亡現(xiàn)場(chǎng)離奇詭異皇帮,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)蛋辈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門属拾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人冷溶,你說我怎么就攤上這事渐白。” “怎么了挂洛?”我有些...
    開封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵礼预,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我虏劲,道長(zhǎng)托酸,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任柒巫,我火速辦了婚禮励堡,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘堡掏。我一直安慰自己应结,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開白布泉唁。 她就那樣靜靜地躺著鹅龄,像睡著了一般。 火紅的嫁衣襯著肌膚如雪亭畜。 梳的紋絲不亂的頭發(fā)上扮休,一...
    開封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音拴鸵,去河邊找鬼玷坠。 笑死蜗搔,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的八堡。 我是一名探鬼主播樟凄,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼兄渺!你這毒婦竟也來了缝龄?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤溶耘,失蹤者是張志新(化名)和其女友劉穎二拐,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體凳兵,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡百新,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了庐扫。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片饭望。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖形庭,靈堂內(nèi)的尸體忽然破棺而出铅辞,到底是詐尸還是另有隱情,我是刑警寧澤萨醒,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布斟珊,位于F島的核電站,受9級(jí)特大地震影響富纸,放射性物質(zhì)發(fā)生泄漏囤踩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一晓褪、第九天 我趴在偏房一處隱蔽的房頂上張望堵漱。 院中可真熱鬧,春花似錦涣仿、人聲如沸勤庐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)愉镰。三九已至,卻和暖如春钧汹,著一層夾襖步出監(jiān)牢的瞬間岛杀,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工崭孤, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留类嗤,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓辨宠,卻偏偏與公主長(zhǎng)得像遗锣,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子嗤形,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容