推薦系統(tǒng)--完整的架構(gòu)設(shè)計(jì)和算法(協(xié)同過(guò)濾、隱語(yǔ)義)

1. 什么是推薦系統(tǒng)

推薦系統(tǒng)是利用電子商務(wù)網(wǎng)站向客戶提供商品信息和建議,幫助用戶決定應(yīng)該購(gòu)買什么產(chǎn)品咏闪,模擬銷售人員幫助客戶完成購(gòu)買過(guò)程。個(gè)性化推薦是根據(jù)用戶的興趣特點(diǎn)和購(gòu)買行為摔吏,向用戶推薦用戶感興趣的信息和商品鸽嫂。

隨著電子商務(wù)規(guī)模的不斷擴(kuò)大,商品個(gè)數(shù)和種類快速增長(zhǎng)征讲,顧客需要花費(fèi)大量的時(shí)間才能找到自己想買的商品据某。這種瀏覽大量無(wú)關(guān)的信息和產(chǎn)品過(guò)程無(wú)疑會(huì)使淹沒(méi)在信息過(guò)載問(wèn)題中的消費(fèi)者不斷流失。

為了解決這些問(wèn)題诗箍,個(gè)性化推薦系統(tǒng)應(yīng)運(yùn)而生癣籽。個(gè)性化推薦系統(tǒng)是建立在海量數(shù)據(jù)挖掘基礎(chǔ)上的一種高級(jí)商務(wù)智能平臺(tái),以幫助電子商務(wù)網(wǎng)站為其顧客購(gòu)物提供完全個(gè)性化的決策支持和信息服務(wù)滤祖。

常見的推薦欄位例如:淘寶的猜你喜歡筷狼、看了又看、推薦商品匠童,美團(tuán)的首頁(yè)推薦埂材、附近推薦等庐船。

推薦系統(tǒng)是比較偏向于工程類的系統(tǒng)嵌牺,要做得更加的精確,需要的不僅僅是推薦算法水由,還有用戶意圖識(shí)別扬绪、文本分析竖独、行為分析等,是一個(gè)綜合性很強(qiáng)的系統(tǒng)挤牛。

2. 總體架構(gòu)

本節(jié)介紹的幾種推薦系統(tǒng)架構(gòu)预鬓,并不是互相獨(dú)立的關(guān)系,實(shí)際的推薦系統(tǒng)可能會(huì)用到其中一種或者幾種的架構(gòu)赊颠。在實(shí)際設(shè)計(jì)的過(guò)程中,讀者可以把本文介紹的架構(gòu)作為一個(gè)設(shè)計(jì)的起點(diǎn)劈彪,更多地結(jié)合自身業(yè)務(wù)特點(diǎn)進(jìn)行獨(dú)立思
考竣蹦,從而設(shè)計(jì)出適合自身業(yè)務(wù)的系統(tǒng)。

根據(jù)響應(yīng)用戶行為的速度不同沧奴,推薦系統(tǒng)可以大致分為基于離線訓(xùn)練和在線訓(xùn)練的推薦系統(tǒng)痘括。

2.1 離線推薦

于離線訓(xùn)練的推薦系統(tǒng)架構(gòu)是最常見的一種推薦系統(tǒng)架構(gòu)。這里的“離線”訓(xùn)練指的是使用歷史一段時(shí)間( 比如周或者幾周 )的數(shù)據(jù)進(jìn)行訓(xùn)練,模型迭代的周期較長(zhǎng)(一般 以小時(shí)為單位 )纲菌。模型擬合的是用戶的中長(zhǎng)期興趣挠日。

如下圖所示, 一個(gè)典型的基于離線訓(xùn)練的推薦系統(tǒng)架構(gòu)由數(shù)據(jù)上報(bào)翰舌、離線訓(xùn)練嚣潜、在線存儲(chǔ)、實(shí)時(shí)計(jì)算和 A/B 測(cè)試這幾個(gè)模塊組成椅贱。其中懂算,數(shù)據(jù)上報(bào)和離線訓(xùn)練組成了監(jiān)督學(xué)習(xí)中的學(xué)習(xí)系統(tǒng),而實(shí)時(shí)計(jì)算和 A/B 測(cè)試組成了預(yù)測(cè)系統(tǒng)庇麦。另外计技,除了模型之外,還有一個(gè)在線存儲(chǔ)模塊山橄,用于存儲(chǔ)模型和模型需要的特征信息供實(shí)時(shí)計(jì)算模塊調(diào)用垮媒。圖中的各個(gè)模塊組成了訓(xùn)練和預(yù)測(cè)兩條數(shù)據(jù)流,訓(xùn)練的數(shù)據(jù)流搜集業(yè)務(wù)的數(shù)據(jù)最后生成模型存儲(chǔ)于在線存儲(chǔ)模塊航棱;預(yù)測(cè)的數(shù)據(jù)流接受業(yè)務(wù)的預(yù)測(cè)請(qǐng)求睡雇,通過(guò) A/B 測(cè)試模塊訪問(wèn)實(shí)時(shí)計(jì)算模塊獲取預(yù)測(cè)結(jié)果。

image
  1. 數(shù)據(jù)上報(bào):據(jù)上報(bào)模塊的作用是搜集業(yè)務(wù)數(shù)據(jù)組成訓(xùn)練樣本丧诺。一般分為收集入桂、驗(yàn)證、清洗和轉(zhuǎn)換幾個(gè)步驟驳阎。將收集的數(shù)據(jù)轉(zhuǎn)化為訓(xùn)練所需要的樣本格式抗愁,保存到離線存儲(chǔ)模塊。

    image
  2. 離線訓(xùn)練:線訓(xùn)練模塊又細(xì)分為離線存儲(chǔ)和離線計(jì)算呵晚。實(shí)際業(yè)務(wù)中使用的推薦系統(tǒng)一般都需要處理海量的用戶行為數(shù)據(jù)蜘腌,所以離線存儲(chǔ)模塊需要有一個(gè)分布式的文件系統(tǒng)或者存儲(chǔ)平臺(tái)來(lái)存儲(chǔ)這些數(shù)據(jù)。離線計(jì)算常見的操作有:樣本抽樣饵隙、特征工程撮珠、模型訓(xùn)練、相似度計(jì)算等金矛。

  3. 在線存儲(chǔ):因?yàn)榫€上的服務(wù)對(duì)于時(shí)延都有嚴(yán)格的要求芯急。比如,某個(gè)用戶打開手機(jī) APP 驶俊,他肯定希望APP 能夠快速響應(yīng)娶耍,如果耗時(shí)過(guò)長(zhǎng),就會(huì)影響用戶的體驗(yàn)饼酿。一般來(lái)說(shuō)榕酒,這就要求推薦系統(tǒng)在幾十毫秒以內(nèi)處理完用戶請(qǐng)求返回推薦結(jié)果胚膊,所以,針對(duì)線上的服務(wù)想鹰,需要有一個(gè)專門的在線存儲(chǔ)模塊紊婉,負(fù)責(zé)存儲(chǔ)用于線上的模型和特征數(shù)據(jù) 。

  4. 實(shí)時(shí)推薦:實(shí)時(shí)推薦模塊的功能是對(duì)來(lái)自業(yè)務(wù)的新請(qǐng)求進(jìn)行預(yù)測(cè)辑舷。1.獲取用戶特征喻犁;2.調(diào)用推薦模型;3.結(jié)果排序惩妇。

    在實(shí)際應(yīng)用中株汉,因?yàn)闃I(yè)務(wù)的物品列表太大,如果實(shí)時(shí)計(jì)算對(duì)每 個(gè)物品使用復(fù)雜的模型進(jìn)行打分歌殃,就有可能耗時(shí)過(guò)長(zhǎng)而影響用戶滿意度乔妈。所以,一種常見的做法是將推薦列表生成分為召回和排序兩步氓皱。召回的作用是從大量的候選物品中(例如上百萬(wàn))篩選出一批用戶較可能喜歡的候選集 (一般是幾百)路召。排序的作用是對(duì)召回得到的相對(duì)較小的候選集使用排序模型進(jìn)行打分。更進(jìn)一步波材,在排序得到推薦列表后股淡,為了多樣性和運(yùn)
    營(yíng)的一些考慮,還會(huì)加上第三步重排過(guò)濾廷区,用于對(duì)精排后的推薦列表進(jìn)行處理唯灵。

    image
  5. A/B測(cè)試:對(duì)于互聯(lián)網(wǎng)產(chǎn)品來(lái)說(shuō), A/B 測(cè)試基本上是一個(gè)必備的模塊隙轻,對(duì)于推薦系統(tǒng)來(lái)說(shuō)也不例外埠帕,它可以幫助開發(fā)人員評(píng)估新算法對(duì)客戶行為的影響。除了 離線的指標(biāo)外玖绿,一個(gè)新的推薦算法上線之前 般都會(huì)經(jīng)過(guò) A/B 測(cè)試來(lái)測(cè)試新算法的有效性敛瓷。

下圖是與之對(duì)應(yīng)的實(shí)際系統(tǒng)中各個(gè)組件的流轉(zhuǎn)過(guò)程。需要注意的是生成推薦列表就已經(jīng)做完了召回和排序的操作斑匪,業(yè)務(wù)層直接調(diào)用API就可以得到這個(gè)推薦列表呐籽。

image

2.2 在線訓(xùn)練

對(duì)于業(yè)務(wù)來(lái)說(shuō),我們希望用戶對(duì)于上 個(gè)廣告的反饋 (喜歡或者不 歡蚀瘸,有沒(méi)有點(diǎn)擊 狡蝶,可以很快地用于下
一個(gè)廣告的推薦中。這就要求我們用另 種方法來(lái)解決這個(gè)問(wèn)題贮勃,這個(gè)方法就是在線訓(xùn)練牢酵。

基于在線訓(xùn)練的推薦系統(tǒng)架構(gòu)適合于廣告和電商等高維度大數(shù)據(jù)量且對(duì)實(shí)時(shí)性要求很高的場(chǎng)景 相比較基于離線訓(xùn)練的推薦系統(tǒng),基于在線訓(xùn)練的推薦系統(tǒng)不區(qū)分訓(xùn)練和測(cè)試階段衙猪,每個(gè)回合都在學(xué)習(xí),通過(guò)實(shí)時(shí)的反饋來(lái)調(diào)整策略。 方面垫释,在線訓(xùn)練要求其樣本丝格、特征和模型的處理都是實(shí)時(shí)的,以便推薦的內(nèi)容更快地反映用戶實(shí)時(shí)的喜好棵譬;另一方面显蝌,因?yàn)樵诰€訓(xùn)練井不需要將所有的訓(xùn)練數(shù)據(jù)都存儲(chǔ)下來(lái),所以不需要巨大的離線存儲(chǔ)開銷订咸,使得系統(tǒng)具有很好的伸縮性曼尊,可以支持超大的數(shù)據(jù)量和模型。

image
  1. 樣本處理:和基于離線訓(xùn)練的推薦系統(tǒng)相比脏嚷,在線訓(xùn)練在數(shù)據(jù)上報(bào)階段的主要不同體現(xiàn)在樣本處理上骆撇。,對(duì)于離線訓(xùn)練來(lái)說(shuō)父叙,上報(bào)后的數(shù)據(jù)先是被存儲(chǔ)到一個(gè)分布式文件系統(tǒng)神郊,然后等待離線計(jì)算任務(wù)來(lái)對(duì)樣本進(jìn)行處理;對(duì)于在線訓(xùn)練來(lái)說(shuō)趾唱,對(duì)樣本的去重涌乳、過(guò)濾和采樣等計(jì)算都需要實(shí)時(shí)進(jìn)行。
  2. 實(shí)時(shí)特性:實(shí)時(shí)特征模塊通過(guò)實(shí)時(shí)處理樣本數(shù)據(jù)拼接訓(xùn)練需要的特征構(gòu)造訓(xùn)練樣本甜癞,輸入流式訓(xùn)練模塊用于更新模型夕晓。該模塊的主要的功能是特征拼接和特征工程。
  3. 流式訓(xùn)練:悠咱、流式訓(xùn)練模塊的主要作用是使用實(shí)時(shí)訓(xùn)練樣本來(lái)更新模型蒸辆。推薦算法中增量更新部分的計(jì)算,通過(guò)流式計(jì)算的方式來(lái)進(jìn)行更新乔煞。在線訓(xùn)練的優(yōu)勢(shì)之一吁朦,是可以支持模型的稀疏存儲(chǔ)。訓(xùn)練方面渡贾,在線模型不一定都是從零開始訓(xùn)練逗宜,而是可以將離線訓(xùn)練得到的模型參數(shù)作為基礎(chǔ),在這個(gè)基礎(chǔ)上進(jìn)行增量訓(xùn)練空骚。
  4. 模型存儲(chǔ)和加載:模型一般存儲(chǔ)在參數(shù)服務(wù)器中纺讲。模型更新后,將模型文件推送到線上存儲(chǔ)囤屹,并由線上服務(wù)模塊動(dòng)態(tài)加載熬甚。

3. 特征數(shù)據(jù)

要訓(xùn)練推薦模型,就需要先收集用戶的行為數(shù)據(jù)生成特征向量以后才能進(jìn)行訓(xùn)練肋坚,而一個(gè)特征向量由特征以及特征的權(quán)重組成乡括,在利用用戶行為計(jì)算特征向量時(shí)需要考慮以下因素肃廓。

  1. 用戶行為的種類:在一個(gè)網(wǎng)站中,用戶可以對(duì)物品產(chǎn)生很多不同種類的行為诲泌。用戶可以瀏覽物品盲赊、單擊物品的鏈接、收藏物品敷扫、給物品打分哀蘑、購(gòu)買物品、評(píng)論物品葵第、給物品打上不同的標(biāo)簽绘迁、和好友分享物品、搜索不同的關(guān)鍵詞等卒密。這些行為都會(huì)對(duì)物品特征的權(quán)重產(chǎn)生影響缀台,但不同行為的影響不同,大多時(shí)候很難確定什么行為更加重要栅受,一般的標(biāo)準(zhǔn)就是用戶付出代價(jià)越大的行為權(quán)重越高将硝。
  2. 用戶行為產(chǎn)生的時(shí)間:一般來(lái)說(shuō),用戶近期的行為比較重要屏镊,而用戶很久之前的行為相對(duì)比較次要依疼。因此,如果用戶最近購(gòu)買過(guò)某一個(gè)物品而芥,那么這個(gè)物品對(duì)應(yīng)的特征將會(huì)具有比較高的權(quán)重律罢。
  3. 用戶行為的次數(shù):有時(shí)用戶對(duì)一個(gè)物品會(huì)產(chǎn)生很多次行為。比如用戶會(huì)聽一首歌很多次棍丐,看一部電視劇的很多集等误辑。因此用戶對(duì)同一個(gè)物品的同一種行為發(fā)生的次數(shù)也反映了用戶對(duì)物品的興趣,行為次數(shù)多的物品對(duì)應(yīng)的特征權(quán)重越高歌逢。
  4. 物品的熱門程度:如果用戶對(duì)一個(gè)很熱門的物品產(chǎn)生了行為巾钉,往往不能代表用戶的個(gè)性,因?yàn)橛脩艨赡苁窃诟L(fēng)秘案,可能對(duì)該物品并沒(méi)有太大興趣砰苍,特別是在用戶對(duì)一個(gè)熱門物品產(chǎn)生了偶爾幾次不重要的行為(比如瀏覽行為)時(shí),就更說(shuō)明用戶對(duì)這個(gè)物品可能沒(méi)有什么興趣阱高,可能只是因?yàn)檫@個(gè)物品的鏈接到處都是赚导,很容易點(diǎn)到而已。反之赤惊,如果用戶對(duì)一個(gè)不熱門的物品產(chǎn)生了行為吼旧,就說(shuō)明了用戶的個(gè)性需求。因此未舟,推薦引擎在生成用戶特征時(shí)會(huì)加重不熱門物品對(duì)應(yīng)的特征的權(quán)重圈暗。
  5. 數(shù)據(jù)去燥:對(duì)樣本做去噪掂为。對(duì)于數(shù)據(jù)中混雜的刷單等類作弊行為的數(shù)據(jù),要將其排除出訓(xùn)練數(shù)據(jù),否則它會(huì)直接影響模型的效果员串;樣本中的缺失值也要做處理菩掏。
  6. 正負(fù)樣本均衡:一般我們收集用戶的行為數(shù)據(jù)都是屬于正樣本,造成了嚴(yán)重的不平衡昵济。所以對(duì)于一個(gè)用戶,從他沒(méi)有過(guò)行為的物品中采樣出一些物品作為負(fù)樣本野揪,但采樣時(shí)访忿,保證每個(gè)用戶的正負(fù)樣本數(shù)目相當(dāng)。
  7. 特征組合:我們需要考慮特征與特征之間的關(guān)系斯稳。例如在美團(tuán)酒店搜索排序中海铆,酒店的銷量、價(jià)格挣惰、用戶的消費(fèi)水平等是強(qiáng)相關(guān)的因素卧斟,用戶的年齡、位置可能是弱相關(guān)的因素憎茂,用戶的ID是完全無(wú)關(guān)的因素珍语。在確定了哪些因素可能與預(yù)測(cè)目標(biāo)相關(guān)后,我們需要將此信息表示為數(shù)值類型,即為特征抽取的過(guò)程竖幔。除此之外板乙,用戶在App上的瀏覽、交易等行為記錄中包含了大量的信息拳氢,特征抽取則主要是從這些信息抽取出相關(guān)因素募逞,用數(shù)值變量進(jìn)行表示。常用的統(tǒng)計(jì)特征有計(jì)數(shù)特征,如瀏覽次數(shù)馋评、下單次數(shù)等;比率特征放接,如點(diǎn)擊率、轉(zhuǎn)化率等;統(tǒng)計(jì)量特征留特,如價(jià)格均值纠脾、標(biāo)準(zhǔn)差、分位數(shù)磕秤、偏度乳乌、峰度等。

4. 協(xié)同過(guò)濾算法

協(xié)同過(guò)濾算法起源于 1992 年市咆,被 Xerox 公司用于個(gè)性化定制郵件系統(tǒng)汉操。Xerox 司的用戶需要在數(shù)十種主題中選擇三到五種主題,協(xié)同過(guò)濾算法根據(jù)不同的主題過(guò)濾郵件蒙兰,最終達(dá)到個(gè)性化的目的磷瘤。

協(xié)同過(guò)濾算法分為基于物品的協(xié)同過(guò)濾和基于用戶的協(xié)同過(guò)濾芒篷,輸出結(jié)果為 TOPn 的推薦列表。

4.1 基于物品的協(xié)同過(guò)濾(ItemCF)

基于物品的協(xié)同過(guò)濾算法的核心思想:給用戶推薦那些和他們之前喜歡的物品相似的物品采缚。

基于物品的協(xié)同過(guò)濾算法首先計(jì)算物品之間的相似度针炉, 計(jì)算相似度的方法有以下幾種:

  1. 基于共同喜歡物品的用戶列表計(jì)算

    w_{ij}=\frac{|N(i)\cap{}N(j)|}{\sqrt{|N(i)|*|N(j)|}}

    在此,分母中 N(i) 是購(gòu)買物品 i 的用戶數(shù)扳抽,N(j) 是購(gòu)買物品 j 的用戶數(shù)篡帕,而分子 N(i)\cap{}N(j) 是同時(shí)購(gòu)買物品i 和物品 j 的用戶數(shù)。贸呢×眨可見上述的公式的核心是計(jì)算同時(shí)購(gòu)買這件商品的人數(shù)比例 。當(dāng)同時(shí)購(gòu)買這兩個(gè)物品人數(shù)越多楞陷,他們的相似度也就越高怔鳖。另外值得注意的是,在分母中我們用了物品總購(gòu)買人數(shù)做懲罰固蛾,也就是說(shuō)某個(gè)物品可能很熱門结执,導(dǎo)致它經(jīng)常會(huì)被和其他物品一起購(gòu)買艾凯,所以除以它的總購(gòu)買人數(shù)献幔,來(lái)降低它和其他物品的相似分?jǐn)?shù)。

  2. 基于余弦的相似度計(jì)算

    上面的方法計(jì)算物品相似度是直接使同時(shí)購(gòu)買這兩個(gè)物品的人數(shù)览芳。但是也有可能存在用戶購(gòu)買了但不喜歡的情況 所以如果數(shù)據(jù)集包含了具體的評(píng)分?jǐn)?shù)據(jù) 我們可以進(jìn)一步把用戶評(píng)分引入到相似度計(jì)算中 斜姥。

    w_{ij}=cos\theta=\frac{N_i*N_j}{||N_i||||N_j||}=\frac{\sum_{k=1}^{len}(n_{ki}*n_{kj})}{\sqrt{\sum_{k=1}^{len}n_{ki}^2}*\sqrt{\sum_{k=1}^{len}n_{kj}^2}}

    其中 n_{ki} 是用戶 k 對(duì)物品 i 的評(píng)分,如果沒(méi)有評(píng)分則為 0沧竟。

  3. 熱門物品的懲罰

    對(duì)于熱門物品的問(wèn)題铸敏,可以用如下公式解決:

    w_{ij}=\frac{|N(i)\cap{}N(j)|}{|N(i)|^\alpha*|N(j)|^{1-\alpha}}

    當(dāng) \alpha\in(0,0.5) 時(shí),N(i) 越小悟泵,懲罰得越厲害杈笔,從而會(huì)使熱 物品相關(guān)性分?jǐn)?shù)下降。

4.2 基于用戶的協(xié)同過(guò)濾(UserCF)

基于用戶的協(xié)同過(guò)濾(User CF )的原理其實(shí)是和基于物品的協(xié)同過(guò)濾類似的糕非。所不同的是蒙具,基于物品的協(xié)同過(guò)濾的原理是用戶 U 購(gòu)買了 A 物品,推薦給用戶 U 和 A 相似的物品 B朽肥、C禁筏、D。而基于用戶的協(xié)同過(guò)濾衡招,是先計(jì)算用戶 U 與其他的用戶的相似度篱昔,然后取和 U 最相似的幾個(gè)用戶,把他們購(gòu)買過(guò)的物品推薦給用戶U。

為了計(jì)算用戶相似度州刽,我們首先要把用戶購(gòu)買過(guò)物品的索引數(shù)據(jù)轉(zhuǎn)化成物品被用戶購(gòu)買過(guò)的索引數(shù)據(jù)空执,即物品的倒排索引:

image

建立好物品的倒排索引后,就可以根據(jù)相似度公式計(jì)算用戶之間的相似度:

w_{ab}=\frac{|N(a)\cap{}N(b)|}{\sqrt{|N(a)|*|N(b)|}}

其中 N(a) 表示用戶 a 購(gòu)買物品的數(shù)量穗椅,N(b) 表示用戶 b 購(gòu)買物品的數(shù)量辨绊,N(a)∩N(b) 表示用戶 a 和 b 購(gòu)買相同物品的數(shù)量。有了用戶的相似數(shù)據(jù)匹表,針對(duì)用戶 U 挑選 K 個(gè)最相似的用戶门坷,把他們購(gòu)買過(guò)的物品中,U 未購(gòu)買過(guò)的物品推薦給用戶 U 即可袍镀。

4.3 矩陣分解

上述計(jì)算會(huì)得到一個(gè)相似度矩陣拜鹤,而這個(gè)矩陣的大小和緯度都是很大的,需要進(jìn)行降維處理流椒,用到的是SVD的降維方法,具體可以參考我之前寫的降維方法:2.5 降維方法

基于稀疏自編碼的矩陣分解

矩陣分解技術(shù)在推薦領(lǐng)域的應(yīng)用比較成熟明也,但是通過(guò)上一節(jié)的介紹宣虾,我們不難發(fā)現(xiàn)矩陣分解本質(zhì)上只通過(guò)一次分解來(lái)對(duì) 原矩陣進(jìn)行逼近,特征挖掘的層次不夠深入温数。另外矩陣分解也沒(méi)有運(yùn)用到物品本身的內(nèi)容特征绣硝,例如書本的類別分類、音樂(lè)的流派分類等撑刺。隨著神經(jīng)網(wǎng)絡(luò)技術(shù)的興起鹉胖,筆者發(fā)現(xiàn)通過(guò)多層感知機(jī),可以得到更加深度的特征表示够傍,并且可以對(duì)內(nèi)容分類特征加以應(yīng)用甫菠。首先,我們介紹一下稀疏自編碼神經(jīng)網(wǎng)絡(luò)的設(shè)計(jì)思路冕屯。

  1. 基礎(chǔ)的自編碼結(jié)構(gòu)

    最簡(jiǎn)單的自編碼結(jié)構(gòu)如下圖寂诱,構(gòu)造個(gè)三層的神經(jīng)網(wǎng)絡(luò),我們讓輸出層等于輸入層安聘,且中間層的維度遠(yuǎn)低于輸入層和輸出層痰洒,這樣就得到了第一層的特征壓縮。

    image

    簡(jiǎn)單來(lái)說(shuō)自編碼神經(jīng)網(wǎng)絡(luò)嘗試學(xué)習(xí)中間層約等于輸入層的函數(shù)浴韭。換句話說(shuō)丘喻,它嘗試逼近一個(gè)恒等函數(shù)。如果網(wǎng)絡(luò)的輸入數(shù)據(jù)是完全隨機(jī)的念颈,比如每一個(gè)輸入都是一個(gè)跟其他特征完全無(wú)關(guān)的獨(dú)立同分布高斯隨機(jī)變 泉粉,那么這一壓縮表示將會(huì)非常難于學(xué)習(xí)。但是如果輸入數(shù)據(jù)中隱含著 些特定的結(jié)構(gòu)舍肠,比如某些輸入特征是彼此相關(guān)的搀继,那么這一算法就可以發(fā)現(xiàn)輸入數(shù)據(jù)中的這些相關(guān)性窘面。

  2. 多層結(jié)構(gòu)

    基于以上的單層隱藏層的網(wǎng)絡(luò)結(jié)構(gòu),我們可以擴(kuò)展至多層網(wǎng)絡(luò)結(jié)構(gòu)叽躯,學(xué)習(xí)到更高層次的抽象特征财边。

    image

5. 隱語(yǔ)義模型

5.1 基本思想

推薦系統(tǒng)中一個(gè)重要的分支,隱語(yǔ)義建模点骑。隱語(yǔ)義模型LFM:Latent Factor Model酣难,其核心思想就是通過(guò)隱含特征聯(lián)系用戶興趣和物品。

過(guò)程分為三個(gè)部分黑滴,將物品映射到隱含分類憨募,確定用戶對(duì)隱含分類的興趣,然后選擇用戶感興趣的分類中的物品推薦給用戶袁辈。它是基于用戶行為統(tǒng)計(jì)的自動(dòng)聚類菜谣。

隱語(yǔ)義模型在Top-N推薦中的應(yīng)用十分廣泛。常用的隱語(yǔ)義模型晚缩,LSA(Latent Semantic Analysis)尾膊,LDA(Latent Dirichlet Allocation),主題模型(Topic Model)荞彼,矩陣分解(Matrix Factorization)等等魁瞪。

首先通過(guò)一個(gè)例子來(lái)理解一下這個(gè)模型稚失,比如說(shuō)有兩個(gè)用戶A和B肝集,目前有用戶的閱讀列表虐先,用戶A的興趣涉及偵探小說(shuō),科普?qǐng)D書以及一些計(jì)算機(jī)技術(shù)書寞缝,而用戶B的興趣比較集中在數(shù)學(xué)和機(jī)器學(xué)習(xí)方面癌压。那么如何給A和B推薦圖書呢?

對(duì)于UserCF荆陆,首先需要找到和他們看了同樣書的其他用戶(興趣相似的用戶)措拇,然后在給他們推薦那些用戶喜歡的其他書。
對(duì)于ItemCF,需要給他們推薦和他們已經(jīng)看的書相似的書慎宾,比如用戶B 看了很多數(shù)據(jù)挖掘方面的書丐吓,那么可以給他推薦機(jī)器學(xué)習(xí)或者模式識(shí)別方面的書。

還有一種方法就是使用隱語(yǔ)義模型趟据,可以對(duì)書和物品的興趣進(jìn)行分類券犁。對(duì)于某個(gè)用戶,首先得到他的興趣分類汹碱,然后從分類中挑選他可能喜歡的物品粘衬。

5.2 模型理解

  1. 如何給物品進(jìn)行分類?
  2. 如何確定用戶對(duì)哪些類的物品感興趣,以及感興趣的程度稚新?
  3. 對(duì)于一個(gè)給定的類勘伺,選擇哪些屬于這個(gè)類的物品推薦給用戶,以及如何確定這些物品在一個(gè)類中的權(quán)重褂删?

為了解決上面的問(wèn)題飞醉,研究人員提出:為什么我們不從數(shù)據(jù)出發(fā),自動(dòng)地找到那些類屯阀,然后進(jìn)行個(gè)性化推薦缅帘,隱語(yǔ)義分析技術(shù)因?yàn)椴扇』谟脩粜袨榻y(tǒng)計(jì)的自動(dòng)聚類,較好地解決了上面的問(wèn)題难衰。隱語(yǔ)義分析技術(shù)從誕生到今天產(chǎn)生了很多著名的模型和方法钦无,其中和推薦技術(shù)相關(guān)的有pLSA,LDA盖袭,隱含類別模型(latent class model), 隱含主題模型(latent topic model), 矩陣分解(matrix factorization)失暂。

LFM通過(guò)如下公式計(jì)算用戶 u 對(duì)物品 i 的興趣:

preference(u,i)=r_{ui}=p_u^Tq_i=\sum_{f=1}^Fp_{u,k}q_{i,k}

這個(gè)公式中 p_{u,k}q_{i,k} 是模型的參數(shù),其中 p_{u,k} 度量了用戶 u 的興趣和第 k 個(gè)隱類的關(guān)系鳄虱,而q_{i,k}度量了第 k 個(gè)隱類和物品 i 之間的關(guān)系趣席。那么,下面的問(wèn)題就是如何計(jì)算這兩個(gè)參數(shù)醇蝴。

對(duì)最優(yōu)化理論或者機(jī)器學(xué)習(xí)有所了解的讀者,可能對(duì)如何計(jì)算這兩個(gè)參數(shù)都比較清楚想罕。這兩個(gè)參數(shù)是從數(shù)據(jù)集中計(jì)算出來(lái)的悠栓。要計(jì)算這兩個(gè)參數(shù),需要一個(gè)訓(xùn)練集按价,對(duì)于每個(gè)用戶u惭适,訓(xùn)練集里都包含了用戶u喜歡的物品和不感興趣的物品,通過(guò)學(xué)習(xí)這個(gè)數(shù)據(jù)集楼镐,就可以獲得上面的模型參數(shù)癞志。

6. 排序算法

在工業(yè)應(yīng)用中,推薦系統(tǒng)通晨虿可分為兩部分凄杯,召回和排序。協(xié)同過(guò)濾屬于召回的算法秉宿,從召回中得到一個(gè)比較小的推薦列表戒突,然后經(jīng)過(guò)排序之后才會(huì)輸出到最終的推薦列表里,是一個(gè)有序的推薦列表描睦。

這個(gè)過(guò)程會(huì)從幾千萬(wàn) item 中篩選出幾百或者上千的候選集膊存,然后在排序階段選出30個(gè)給到每位用戶。這個(gè)排序可理解為一個(gè)函數(shù),F(xiàn)(user, item, context)隔崎,輸入為用戶今艺、物品、環(huán)境爵卒,輸出一個(gè)0到1之間的分?jǐn)?shù)虚缎,取分?jǐn)?shù)最高的幾首。這一過(guò)程通常稱為 CTR 預(yù)估技潘。那么 F 函數(shù)常見的運(yùn)作形式有:

  1. Logistic Regression

    最簡(jiǎn)單的是邏輯回歸(Logistic Regression)遥巴,一個(gè)廣義線性模型。拿某 user 的用戶畫像(一個(gè)向量)比如[3, 1]享幽,拼接上某 item 的物品畫像比如[4, 0]铲掐,再加上代表 context 的向量[0, 1, 1]后得到[3, 1, 4, 0, 0, 1, 1],若該 user 曾與該 item 發(fā)生過(guò)聯(lián)系則 label 為1值桩,這些加起來(lái)是一個(gè)正樣本摆霉,同時(shí)可以將用戶“跳過(guò)”的 item 或熱門的卻沒(méi)有與用戶產(chǎn)生過(guò)聯(lián)系的 item 作為負(fù)樣本,label 為0奔坟。按照這樣的輸入和輸出就可以訓(xùn)練出排序算法了携栋。詳細(xì)模型見:2. 邏輯回歸

  2. GBDT

    使用梯度提升決策樹(GBDT) 的方案也可以解決這個(gè)排序的問(wèn)題,只是模型與 LR 不一樣咳秉。GBDT作為集成模型婉支,會(huì)使用多棵決策樹,每棵樹去擬合前一棵樹的殘差來(lái)得到很好的擬合效果澜建。一個(gè)樣本輸入到一棵樹中向挖,會(huì)根據(jù)各節(jié)點(diǎn)的條件往下走到某個(gè)葉子節(jié)點(diǎn),將此節(jié)點(diǎn)值置為1炕舵,其余置為0何之。詳細(xì)模型算法見:3.2 GBDT

  3. GBDT+LR

    GBDT與LR的stacking模型相對(duì)于只用GBDT會(huì)有略微的提升,更大的好處是防止GBDT過(guò)擬合咽筋。升級(jí)為GBDT+LR后溶推,線上效果提升了約5%,并且因?yàn)槭∪チ藢?duì)新特征進(jìn)行人工轉(zhuǎn)換的步驟奸攻,增加特征的迭代測(cè)試也更容易了蒜危。

  4. GBDT+FM

    GBDT是不支持高維稀疏特征的,如果將高維特征加到LR中睹耐,一方面需要人工組合高維特征舰褪,另一方面模型維度和計(jì)算復(fù)雜度會(huì)是O(N^2)級(jí)別的增長(zhǎng)。所以設(shè)計(jì)了GBDT+FM的模型如圖所示疏橄,采用Factorization Machines模型替換LR占拍。

    image

    Factorization Machines(FM)模型如下所示:

    \hat{y}(x)=w_0+\sum_{i=1}^nw_ix_i+\sum_{i=1}^n\sum_{j=i+1}^n<v_i,v_j>x_ix_j

    具有以下幾個(gè)優(yōu)點(diǎn)
    ①前兩項(xiàng)為一個(gè)線性模型略就,相當(dāng)于LR模型的作用
    ②第三項(xiàng)為一個(gè)二次交叉項(xiàng),能夠自動(dòng)對(duì)特征進(jìn)行交叉組合
    ③通過(guò)增加隱向量晃酒,模型訓(xùn)練和預(yù)測(cè)的計(jì)算復(fù)雜度降為了O(N)
    ④支持稀疏特征表牢。

    幾個(gè)優(yōu)點(diǎn),使的GBDT+FM具有了良好的稀疏特征支持贝次,F(xiàn)M使用GBDT的葉子結(jié)點(diǎn)和稀疏特征(內(nèi)容特征)作為輸入崔兴,模型結(jié)構(gòu)示意圖如下,GBDT+FM模型上線后相比GBDT+LR在各項(xiàng)指標(biāo)的效果提升在4%~6%之間蛔翅。

  5. DNN+GBDT+FM

    GBDT+FM模型敲茄,對(duì)embedding等具有結(jié)構(gòu)信息的深度特征利用不充分,而深度學(xué)習(xí)(Deep Neural Network)能夠?qū)η度胧剑╡mbedding)特征和普通稠密特征進(jìn)行學(xué)習(xí)山析,抽取出深層信息堰燎,提高模型的準(zhǔn)確性,并已經(jīng)成功應(yīng)用到眾多機(jī)器學(xué)習(xí)領(lǐng)域笋轨。因此我們將DNN引入到排序模型中秆剪,提高排序整體質(zhì)量。

    DNN+GBDT+FM的ensemble模型架構(gòu)如圖所示爵政,F(xiàn)M層作為模型的最后一層仅讽,即融合層,其輸入由三部分組成:DNN的最后一層隱藏層钾挟、GBDT的輸出葉子節(jié)點(diǎn)洁灵、高維稀疏特征。DNN+GBDT+FM的ensemble模型架構(gòu)介紹如下所示掺出,該模型上線后相對(duì)于GBDT+FM有4%的效果提升徽千。

    image

    使用分布式的TensorFlow進(jìn)行訓(xùn)練,使用基于TensorFlow Serving的微服務(wù)進(jìn)行在線預(yù)測(cè)蛛砰,DNN+GBDT+FM的ensemble模型使用的是Adam優(yōu)化器。Adam結(jié)合了The Adaptive Gradient Algorithm(AdaGrad)和Root Mean Square Propagation(RMSProp)算法黍衙。具有更優(yōu)的收斂速率泥畅,每個(gè)變量有獨(dú)自的下降步長(zhǎng),整體下降步長(zhǎng)會(huì)根據(jù)當(dāng)前梯度進(jìn)行調(diào)節(jié)琅翻,能夠適應(yīng)帶噪音的數(shù)據(jù)位仁。實(shí)驗(yàn)測(cè)試了多種優(yōu)化器,Adam的效果是最優(yōu)的方椎。

工業(yè)界DNN ranking現(xiàn)狀

  1. Youtube于2016年推出DNN排序算法聂抢。
  2. 上海交通大學(xué)和UCL于2016年推出Product-based Neural Network(PNN)網(wǎng)絡(luò)進(jìn)行用戶點(diǎn)擊預(yù)測(cè)。PNN相當(dāng)于在DNN層做了特征交叉棠众,我們的做法是把特征交叉交給FM去做琳疏,DNN專注于深層信息的提取有决。
  3. Google于2016年推出Wide And Deep Model,這個(gè)也是我們當(dāng)前模型的基礎(chǔ)空盼,在此基礎(chǔ)上使用FM替換了Cross Feature LR书幕,簡(jiǎn)化了計(jì)算復(fù)雜度,提高交叉的泛化能力揽趾。
  4. 阿里今年使用attention機(jī)制推出了Deep Interest Network(DIN)進(jìn)行商品點(diǎn)擊率預(yù)估台汇,優(yōu)化embedding向量的準(zhǔn)確性,值得借鑒篱瞎。

7. 評(píng)估測(cè)試

7.1 A/B測(cè)試

新的推薦模型上線后要進(jìn)行A/B測(cè)試苟呐,將它和舊的算法進(jìn)行比較。

AB測(cè)試是一種很常用的在線評(píng)測(cè)算法的實(shí)驗(yàn)方法俐筋。它通過(guò)一定的規(guī)則將用戶隨機(jī)分成幾組牵素,并對(duì)不同組的用戶采用不同的算法,然后通過(guò)統(tǒng)計(jì)不同組用戶的各種不同的評(píng)測(cè)指標(biāo)比較不同算法校哎,比如可以統(tǒng)計(jì)不同組用戶的點(diǎn)擊率两波,通過(guò)點(diǎn)擊率比較不同算法的性能。對(duì)AB測(cè)試感興趣的讀者可以瀏覽一下網(wǎng)站http://www.abtests.com/ 闷哆,該網(wǎng)站給出了很多通過(guò)實(shí)際AB測(cè)試提高網(wǎng)站用戶滿意度的例子腰奋,從中我們可以學(xué)習(xí)到如何進(jìn)行合理的AB測(cè)試。

切分流量是AB測(cè)試中的關(guān)鍵抱怔,不同的層以及控制這些層的團(tuán)隊(duì)需要從一個(gè)統(tǒng)一的地方獲得自己AB測(cè)試的流量劣坊,而不同層之間的流量應(yīng)該是正交的。

“正交性”是從幾何中借來(lái)的術(shù)語(yǔ)屈留。如果兩條直線相交成直角局冰,他們就是正交的。用向量術(shù)語(yǔ)來(lái)說(shuō)灌危,這兩條直線互不依賴康二。

下圖是一個(gè)簡(jiǎn)單的AB測(cè)試系統(tǒng)。用戶進(jìn)入網(wǎng)站后勇蝙,流量分配系統(tǒng)決定用戶是否需要被進(jìn)行AB測(cè)試沫勿,如果需要的話,流量分配系統(tǒng)會(huì)給用戶打上在測(cè)試中屬于什么分組的標(biāo)簽味混。然后用戶瀏覽網(wǎng)頁(yè)产雹,而用戶在瀏覽網(wǎng)頁(yè)時(shí)的行為都會(huì)被通過(guò)日志系統(tǒng)發(fā)回后臺(tái)的日志數(shù)據(jù)庫(kù)。此時(shí)翁锡,如果用戶有測(cè)試分組的標(biāo)簽蔓挖,那么該標(biāo)簽也會(huì)被發(fā)回后臺(tái)數(shù)據(jù)庫(kù)。在后臺(tái)馆衔,實(shí)驗(yàn)人員的工作首先是配置流量分配系統(tǒng)瘟判,決定滿足什么條件的用戶參加什么樣的測(cè)試怨绣。其次,實(shí)驗(yàn)人員需要統(tǒng)計(jì)日志數(shù)據(jù)庫(kù)中的數(shù)據(jù)荒适,通過(guò)評(píng)測(cè)系統(tǒng)生成不同分組用戶的實(shí)驗(yàn)報(bào)告梨熙,并比較和評(píng)測(cè)實(shí)驗(yàn)結(jié)果。

image

當(dāng)完成了AB測(cè)試后刀诬,根據(jù)指標(biāo)結(jié)果咽扇,如果優(yōu)于之前的推薦算法,那么舊的算法就可以替換成新的了陕壹。

7.2 其它評(píng)估方法

模型準(zhǔn)備就緒后质欲,一般會(huì)先通過(guò)離線指標(biāo)來(lái)評(píng)估模型的好壞, 然后再?zèng)Q定能否上線測(cè)試糠馆。離線算法評(píng)估常見的指標(biāo)包括準(zhǔn)確率嘶伟、覆蓋度 、多樣性又碌、新穎性和 UC 等九昧。在線測(cè)試一般通過(guò) A/B 測(cè)試進(jìn)行,常見的指標(biāo)有點(diǎn)擊率毕匀、用戶停留時(shí)間铸鹰、 廣告收入等,需要注意分析統(tǒng)計(jì)顯著性皂岔。同時(shí)蹋笼,需要注意短期的指標(biāo)和長(zhǎng)期的指標(biāo)相結(jié)合, 一些短期指標(biāo)的提升有時(shí)候反而會(huì)導(dǎo)致長(zhǎng)期指標(biāo)下降 比如 躁垛,經(jīng)常推薦美女或者搞笑類的內(nèi)容會(huì)帶來(lái)短期的點(diǎn)擊率提高剖毯,但是可能會(huì)引起長(zhǎng)期的用戶粘性下降。設(shè)計(jì)者需要從自己的產(chǎn)品角度出發(fā)教馆,根據(jù)產(chǎn)品的需要制定評(píng)估指標(biāo)逊谋,這樣才能更好地指導(dǎo)推薦系統(tǒng)的優(yōu)化方向。常見的評(píng)價(jià)指標(biāo)如下:

image

8. 推薦系統(tǒng)冷啟動(dòng)問(wèn)題

冷啟動(dòng)( cold start )在推薦系統(tǒng)中表示該系統(tǒng)積累數(shù)據(jù)量過(guò)少土铺,無(wú)法給新用戶作個(gè)性化推薦的問(wèn)題胶滋,這是產(chǎn)品推薦的一大難題。每個(gè)有推薦功能的產(chǎn)品都會(huì)遇到冷啟動(dòng)的問(wèn)題舒憾。一方面镀钓,當(dāng)新商品時(shí)上架 會(huì)遇到冷啟動(dòng)的問(wèn)題穗熬,沒(méi)有收集到任何一個(gè)用戶對(duì)其瀏覽镀迂、點(diǎn)擊或者購(gòu)買的行為,也無(wú)從判斷如何將商品進(jìn)行推薦唤蔗;另一方面探遵,新用戶到來(lái)的時(shí)候窟赏,如果沒(méi)有他在應(yīng)用上的行為數(shù)據(jù),也無(wú)法預(yù)測(cè)其興趣箱季,如果給用戶的推薦千篇律涯穷,沒(méi)有亮點(diǎn),會(huì)使用戶在一開始就對(duì)產(chǎn)品失去興趣藏雏,從而放棄使用拷况。所以在冷啟動(dòng)的時(shí)候要同時(shí)考慮用戶的冷啟動(dòng)和物品的冷啟動(dòng)。

基本上掘殴,冷啟動(dòng)題可以分為以下三類赚瘦。

8.1 用戶冷啟動(dòng)

用戶冷啟動(dòng)主要解決如何給新用戶作個(gè)性化推薦的問(wèn)題。當(dāng)新用戶到來(lái)時(shí)奏寨,我 沒(méi)有他的行為數(shù)據(jù)起意,所以也無(wú)法根據(jù)他的歷史行為預(yù) 其興趣,從而無(wú)法借此給他做個(gè)性化推薦病瞳。解決方法參考以下:

  1. 利用用戶的賬號(hào)信息揽咕。
  2. 利用用戶的手機(jī) IMEI 號(hào)進(jìn)行冷啟動(dòng)。
  3. 制造選工頁(yè)套菜,讓用戶選擇自己感興趣的點(diǎn)后亲善,即時(shí)生成粗粒度的推薦。

8.2 物品冷啟動(dòng)

物品冷啟動(dòng)主要解決如何將新的物品推薦給可能對(duì)它感興趣的用戶這一問(wèn)題笼踩。解決方法參考以下:

  1. 利用物品的內(nèi)容逗爹、分類信息。
  2. 利用專家標(biāo)注的數(shù)據(jù)嚎于。

8.3 系統(tǒng)冷啟動(dòng)

系統(tǒng)冷啟動(dòng)主要解決如何在一個(gè)新開發(fā)的網(wǎng)站上(還沒(méi)有用戶掘而,也沒(méi)有用戶行為,只有一些物品的信息)設(shè)計(jì)個(gè)性推薦系統(tǒng)于购,從而在產(chǎn)品剛上線時(shí)就讓用戶體驗(yàn)到個(gè)性 推薦服務(wù)這一問(wèn)題袍睡。

9. 參考文獻(xiàn)

  1. 推薦系統(tǒng)實(shí)踐--項(xiàng)亮
  2. 推薦系統(tǒng)與深度學(xué)習(xí)
  3. 美團(tuán)機(jī)器學(xué)習(xí)實(shí)踐

機(jī)器學(xué)習(xí)通俗易懂系列文章

image

作者:@mantchs

GitHub:https://github.com/NLP-LOVE/ML-NLP

歡迎大家加入討論!共同完善此項(xiàng)目肋僧!群號(hào):【541954936】點(diǎn)擊加入

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末斑胜,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子嫌吠,更是在濱河造成了極大的恐慌止潘,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件辫诅,死亡現(xiàn)場(chǎng)離奇詭異凭戴,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)炕矮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門么夫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)者冤,“玉大人,你說(shuō)我怎么就攤上這事档痪∩娣悖” “怎么了?”我有些...
    開封第一講書人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵腐螟,是天一觀的道長(zhǎng)愿汰。 經(jīng)常有香客問(wèn)我,道長(zhǎng)乐纸,這世上最難降的妖魔是什么尼桶? 我笑而不...
    開封第一講書人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮锯仪,結(jié)果婚禮上泵督,老公的妹妹穿的比我還像新娘。我一直安慰自己庶喜,他們只是感情好小腊,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著久窟,像睡著了一般秩冈。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上斥扛,一...
    開封第一講書人閱讀 51,708評(píng)論 1 305
  • 那天入问,我揣著相機(jī)與錄音,去河邊找鬼稀颁。 笑死芬失,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的匾灶。 我是一名探鬼主播棱烂,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼阶女!你這毒婦竟也來(lái)了颊糜?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤秃踩,失蹤者是張志新(化名)和其女友劉穎衬鱼,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體憔杨,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鸟赫,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片惯疙。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖妖啥,靈堂內(nèi)的尸體忽然破棺而出霉颠,到底是詐尸還是另有隱情,我是刑警寧澤荆虱,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布鸟整,位于F島的核電站掠廓,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜赎婚,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望铃芦。 院中可真熱鬧涮较,春花似錦、人聲如沸啤誊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蚊锹。三九已至瞳筏,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間牡昆,已是汗流浹背姚炕。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留丢烘,地道東北人柱宦。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像播瞳,于是被迫代替她去往敵國(guó)和親捷沸。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355

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