論文筆記 | SIGIR2019 | Warm Up Cold-start Advertisements: Improving CTR Predictions via Learning to L...

meta-embedding-title.jpg
meta-embedding-fig3.jpg

論文地址:https://arxiv.org/abs/1904.11547

官方代碼:https://github.com/Feiyang/MetaEmbedding

一 為什么讀這篇

最近在做提高時效性的工作则果,范圍放大點就是解決所謂item冷啟動問題诈乒,恰逢讀完DIN孽文,看到參考DIN的論文有這么一篇,題目就很扣題了劲够,正是瞌睡遇上枕頭,第一時間讀下层亿,參考一下思路橡娄,看看對于解手頭問題有沒有幫助。

二 截止閱讀時這篇論文的引用次數(shù)

2019.9.29 1次鳖敷。畢竟今年4月才出脖苏,另外解決的問題域也確實更細分點,所以引用很少定踱。

三 相關(guān)背景介紹

19年4月掛到arXiv上棍潘,中了19年的SIGIR。中科院出品崖媚,也有清華的唐平中老師加持亦歉,一作“肥羊”就有意思了,玩kaggle時各種屠榜畅哑,現(xiàn)在是中科院的博士生肴楷,也在螞蟻實習(xí),估計阿里星沒跑了荠呐。

四 關(guān)鍵詞

CTR

Embedding

Cold Start

meta-learning

learning to learn

五 論文的主要貢獻

1 引入元學(xué)習(xí)來解決冷啟動問題

2 給ID Embedding更好的初始化

六 詳細解讀

0 摘要

為了解決冷啟動問題赛蔫,本文提出Meta-Embedding,這是一種基于元學(xué)習(xí)的方法泥张,可以習(xí)得為新廣告ID生成理想的初始化Embedding濒募。該方法通過基于梯度的元學(xué)習(xí),利用之前習(xí)得過的廣告來為新廣告ID訓(xùn)練Embedding生成器圾结,即本文方法是學(xué)習(xí)如何更好的學(xué)習(xí)Embedding瑰剃。當(dāng)遇到一個新廣告時,訓(xùn)練生成器通過輸入它的內(nèi)容和屬性來初始化Embedding筝野。接著晌姚,生成的Embedding可以加速模型在warm up階段(當(dāng)有很少的標(biāo)簽樣本可用時)的擬合。

1 介紹

在工業(yè)界歇竟,相比沒有ID輸入的方法挥唠,一個被學(xué)得很好的廣告ID Embedding能極大提升預(yù)測準(zhǔn)確率。盡管有許多成功的方法焕议,但它們都需要相當(dāng)多的數(shù)據(jù)來學(xué)習(xí)Embedding向量宝磨。而且對于一些只有很少訓(xùn)練樣本的“小”廣告來說,它們訓(xùn)練得到的Embedding很難和“大”廣告一樣出色,這些問題就是業(yè)界所謂的冷啟動問題唤锉。

如圖1所示世囊,KDD2012的數(shù)據(jù),5%的廣告占據(jù)了超過80%的樣本窿祥。

meta-embedding-fig1.jpg

本文方法的主要理念包括株憾,利用廣告特征的參數(shù)函數(shù)作為ID Embedding生成器,通過兩階段模仿在舊ID上訓(xùn)練生成器晒衩,使用基于梯度的元學(xué)習(xí)來提升冷啟動和warm-up階段的效果嗤瞎。

本文的兩個目標(biāo):

  1. 在冷啟動階段更好
  2. 在warm-up階段更快

為了達到這兩個目標(biāo),針對手中的“大”廣告設(shè)計了冷啟動和warm-up兩個階段的模擬听系。在冷啟動階段贝奇,需要為沒有標(biāo)簽的ID賦Embedding初值,在有少量標(biāo)簽樣本的warm-up階段靠胜,通過模擬模型擬合過程來更新Embedding掉瞳,用這種方式來學(xué)習(xí)如何學(xué)習(xí)。

本文方法的本質(zhì)就是將CTR預(yù)估問題轉(zhuǎn)化為元學(xué)習(xí)問題髓帽,將學(xué)習(xí)每個廣告視為任務(wù)。提出的基于梯度的訓(xùn)練算法有著“與模型無關(guān)的元學(xué)習(xí)”(Model-Agnostic Meta-Learning MAML)的優(yōu)勢脑豹。MAML在許多領(lǐng)域快速適應(yīng)上是成功的郑藏,但它對每個任務(wù)都訓(xùn)練一個模型,所以當(dāng)有上百萬個任務(wù)(廣告)時不能直接用于CTR預(yù)估瘩欺。為此必盖,本文將MAML泛化為一個基于內(nèi)容的Embedding生成器。同時構(gòu)建同統(tǒng)一的優(yōu)化目標(biāo)來平衡冷啟動和warm-up的效果俱饿。本文方法易于實現(xiàn)歌粥,可以應(yīng)用在離線和在線環(huán)節(jié)。也可以應(yīng)用在其他ID特征的冷啟動拍埠,如用戶ID失驶,廣告主ID。

本文方法也可以擴展應(yīng)用在E&E和active learning這兩個領(lǐng)域枣购。

本文貢獻主要如下:

1 提出Meta-Embedding來學(xué)習(xí)如何學(xué)習(xí)新廣告的Embedding

2 提出一個簡單有效的算法來訓(xùn)練Meta-Embedding生成器嬉探,它通過利用反向傳播時的二階導(dǎo)數(shù)來使用基于梯度的元學(xué)習(xí)

3 本文方法可以很容易的在在線冷啟動實現(xiàn)。一旦Embedding生成器訓(xùn)練好棉圈,它就可以代替簡單的隨機初始化來進行新ID的Embedding

4 在3個大規(guī)模真實數(shù)據(jù)集上驗證了本文方法的有效性涩堤。6個SOTA的CTR模型都在冷啟動上得到了極大的提升。

2 背景和公式

輸入特征x可以劃分為三部分\mathbf{x}=\left(\mathbf{i}, \mathbf{u}_{[\mathbf{i}]}, \mathbf{v}\right)分瘾,包括

1 i表示廣告ID

2 \mathbf{u}_{[\mathbf{i}]}表示特定廣告i的特征和屬性胎围,可能有多個字段

3 v表示不是必須與廣告關(guān)聯(lián)的特征,如用戶特征,上下文信息

密集矩陣\Phi通常被稱為Embedding矩陣白魂,或者查找表汽纤。給定Embedding矩陣\Phi和ID i的Embedding \phi_{[\mathbf{i}]},我們就能得到作為判別模型的參數(shù)化函數(shù):
\hat{p}=f_{\boldsymbol{\theta}}\left(\phi_{[\mathbf{i}]}, \mathbf{u}_{[\mathbf{i}]}, \mathbf{v}\right)
圖2a展示了該模型的基本結(jié)構(gòu)

meta-embedding-fig2.jpg

\boldsymbol{\theta}\Phi用SGD同時更新碧聪。

如果一個ID \mathbf{i}^{*}從未在系統(tǒng)中出現(xiàn)過會發(fā)生什么冒版?因為從沒有見過該廣告的標(biāo)簽數(shù)據(jù),所以Embedding矩陣對應(yīng)的行仍然是初始狀態(tài)逞姿,例如是零值附近的隨機數(shù)辞嗡。為了解決這個問題,本文設(shè)計的Embedding生成器結(jié)構(gòu)如圖2b所示滞造,它的初始化用公式表示如下:
\phi_{\left[i^{*}\right]}^{\text {init }}=h_{w}\left(\mathbf{u}_{\left[\mathbf{i}^{*}\right]}\right)
問題來了续室。

1 如何訓(xùn)練這種Embedding生成器

2 更新參數(shù)的目標(biāo)函數(shù)是什么

3 學(xué)習(xí)如何學(xué)習(xí)新廣告的ID Embedding

3.1 將CTR預(yù)估轉(zhuǎn)化為元學(xué)習(xí)

以元學(xué)習(xí)的視角來看,本文會引入新的符號谒养,對于給定的ID i挺狰,將預(yù)測模型寫為:
\hat{p}=g_{[\mathrm{i}]}\left(\mathbf{u}_{[\mathrm{i}]}, \mathbf{v}\right)=f_{\boldsymbol{\theta}}\left(\phi_{\mathbf{i}}, \mathbf{u}_{[\mathrm{i}]}, \mathbf{v}\right)
注意g_{[\mathrm{i}]}(\cdot, \cdot)實際上和f_{\theta}\left(\phi_{[i]}, \cdot, \cdot\right)是一樣的,參數(shù)都是\theta\phi_{[\mathbf{i}]}买窟。用這種方式丰泊,可以看到通過將學(xué)習(xí)問題視為每個廣告ID的一項任務(wù),就可以將CTR預(yù)估視為元學(xué)習(xí)的一個實例始绍。對于ID \mathbf{i}=1,2, \cdots瞳购,相應(yīng)的任務(wù)t_{1}, t_{2}, \cdots是學(xué)習(xí)特定任務(wù)的模型g_{[1]}, g_{[2]}, \cdots。它們共享來自基模型的參數(shù)\theta亏推,同時有自己任務(wù)相關(guān)的參數(shù)\phi_{[1]}, \phi_{[2]}, \cdots

考慮可以訪問ID \mathbf{i} \in \mathcal{I}的先前任務(wù)t_{\mathbf{i}}学赛,這個集合是已知ID的集合,及每個任務(wù)的訓(xùn)練樣本吞杭。這個數(shù)據(jù)上原始的(預(yù))訓(xùn)練可以提供一組已經(jīng)學(xué)習(xí)好的共享參數(shù)\theta盏浇,以及對于所有先前的ID \mathbf{i} \in \mathcal{I} 特定任務(wù)的\phi_{[\mathbf{i}]}參數(shù)。然后對于新的ID \mathbf{i}^{*} \notin \boldsymbol{I}芽狗,無法得知\phi_{\left[i^{*}\right]}绢掰,因此可以考慮從那些老的ID中學(xué)習(xí)如何學(xué)習(xí)\phi_{\left[i^{*}\right]}。這就是以元學(xué)習(xí)的視角考慮CTR預(yù)估的冷啟動問題童擎。

3.2 Meta-Embedding

因為共享參數(shù)\theta通常通過相當(dāng)多的歷史數(shù)據(jù)去訓(xùn)練曼月,我們對它的效果是有信心的,所以當(dāng)訓(xùn)練Meta-Embedding時柔昼,可以在整個過程中凍結(jié)\theta哑芹,不用去更新它。本文只考慮如何學(xué)習(xí)新ID的Embedding捕透。

對于一個新ID \mathbf{i}^{*}聪姿,另
\phi_{[i]^{*}}^{\mathrm{init}}=h_{w}\left(\mathbf{u}_{\left[\mathbf{i}^{*}\right]}\right)
作為生成的初始Embedding碴萧。此時通過生成的Embedding,模型可以表示為
g_{\text {meta }}\left(\mathbf{u}_{\left[\mathbf{i}^{*}\right]}, \mathbf{v}\right)=f_{\boldsymbol{\theta}}\left(\phi_{\left[\mathbf{i}^{*}\right]}^{\text {init }}, \mathbf{u}_{\left[\mathbf{i}^{*}\right]}, \mathbf{v}\right)
所以這的g_{\text {meta }}(\cdot, \cdot)是一個模型(元學(xué)習(xí)器)末购,輸入為特征破喻,輸出為預(yù)測,并且不涉及Embedding矩陣盟榴〔苤剩可訓(xùn)練參數(shù)是來自h_{\boldsymbol{w}}(\cdot)的元參數(shù)w

考慮每個舊ID i的任務(wù)t_{\mathbf{i}}擎场,會有\mathcal{D}_{[\mathrm{i}]}=\left\{\left(\mathbf{u}_{[\mathrm{i}]}, \mathbf{v}_{j}\right)\right\}_{j=1}^{N_{\mathrm{i}}}這么多訓(xùn)練樣本羽德,其中N_{\mathbf{i}}是給定ID的樣本個數(shù)。

開始的時候迅办,隨機選擇\mathcal{D}_{[i]}^{a}宅静,\mathcal{D}_{[i]}^兩個不相交的minibatch標(biāo)簽數(shù)據(jù)站欺,每個都有K個樣本姨夹。假設(shè)K相當(dāng)小,例如K<<N_{\mathrm{i}} / 2

3.2.1 冷啟動階段

首先在第一個minibatch \mathcal{D}_{[i]}^{a}上使用g_{\text {meta }}(\cdot, \cdot)做預(yù)測矾策,如下式所示:
\hat{p}_{a j}=g_{\text {meta }}\left(\mathbf{u}_{[i]}, \mathbf{v}_{a j}\right)=f_{\boldsymbol{\theta}}\left(\phi_{[i]}^{\text {init }}, \mathbf{u}_{[\mathbf{i}]}, \mathbf{v}_{a j}\right)
其中下標(biāo)aj表示來自batch \mathcal{D}_{[i]}^{a}的第j個樣本磷账,接著計算這些樣本上的平均損失:
l_{a}=\frac{1}{K} \sum_{j=1}^{K}\left[-y_{a j} \log \hat{p}_{a j}-\left(1-y_{a j}\right) \log \left(1-\hat{p}_{a j}\right)\right]
到這里也就完成了冷啟動階段:通過生成器h_{w}(\cdot)生成了\phi_{[i]}^{\text {init }}的Embedding,并在第一個batch上評估它得到損失l_{a}

3.2.2 Warm-up階段

接著用第2個batch \mathcal{D}_{[i]}^贾虽模擬Warm-up階段的學(xué)習(xí)過程寇仓。

通過計算\phi_{[i]}^{\text {init }}初始Embedding損失l_{a}的梯度忘瓦,以及一步梯度下降忍啤,可以得到更新的Embedding:
\phi_{[i]}^{\prime}=\phi_{[i]}^{\mathrm{init}}-a \frac{\partial l_{a}}{\partial \phi_{[\mathrm{i}]}^{\mathrm{init}}}
接著可以在第2個batch上用最小數(shù)量的數(shù)據(jù)訓(xùn)練得到的新Embedding評估渡贾。與之前類似蛉抓,做預(yù)測如下:
\hat{p}_{b j}=g_{[i]}^{\prime}\left(\mathbf{u}_{[i]}, \mathbf{v}_{b j}\right)=f_{\theta}\left(\phi_{[i]}^{\prime}, \mathbf{u}_{[i]}, \mathbf{v}_{b j}\right)
同時計算平均損失:
l_庆尘=\frac{1}{K} \sum_{j=1}^{K}\left[-y_{b j} \log \hat{p}_{b j}-\left(1-y_{b j}\right) \log \left(1-\hat{p}_{b j}\right)\right]

3.2.3 統(tǒng)一優(yōu)化目標(biāo)

從兩方面來評估初始Embedding的好壞:

1 對于新廣告的CTR預(yù)估錯誤應(yīng)盡可能小

2 在收集一小部分標(biāo)簽數(shù)據(jù)后,一點梯度更新就應(yīng)該有很快的學(xué)習(xí)

驚喜的是巷送,本文發(fā)現(xiàn)l_{a}驶忌,l_兩個損失可以分別完美地適配這兩個方面笑跛。在第1個batch付魔,因為用生成的初始Embedding做預(yù)測,l_{a}是一個評估冷啟動階段生成器的天然指標(biāo)飞蹂。在第2個batch几苍,因為Embedding已經(jīng)更新過一次,所以在warm-up階段用l_陈哑評估樣本效率就相當(dāng)直接了妻坝。

為了統(tǒng)一這兩個損失伸眶,這里提出Meta-Embedding的最終損失函數(shù),即l_{a}l_刽宪的加權(quán)和:
l_{\text {meta }}=\alpha l_{a}+(1-\alpha) l_厘贼
其中系數(shù)\alpha \in[0,1]用于平衡兩個階段。

因為l_{meta}是初始Embedding的函數(shù)圣拄,可以通過鏈?zhǔn)椒▌t來做元參數(shù)w的梯度反向傳播:
\frac{\partial l_{\text {meta }}}{\partial w}=\frac{\partial l_{\text {meta }}}{\partial \phi_{[i]}^{\text {init }}} \frac{\partial \phi_{[i]}^{\text {init }}}{\partial w}=\frac{\partial l_{\text {meta }}}{\partial \phi_{[i]}^{\text {init }}} \frac{\partial h_{w}}{\partial w}
其中:
\frac{\partial l_{\text {meta }}}{\partial \phi_{[\text {i }]}^{\text {init }}}=\alpha \frac{\partial l_{a}}{\partial \phi_{[i]}^{\text {init }}}+(1-\alpha) \frac{\partial l_嘴秸}{\partial \phi_{[i]}^{\prime}}-a(1-\alpha) \frac{\partial l_}{\partial \phi_{[\text {il }}^{\prime}} \frac{\partial^{2} l_{a}}{\partial \phi_{[i]}^{\text {init }}}
盡管有二階導(dǎo)Hessian-vector存在庇谆,也可以很有效的在TensorFlow中實現(xiàn)岳掐。

訓(xùn)練算法如下圖所示,一個ID的訓(xùn)練過程如圖4所示族铆。

meta-embedding-alg1.jpg
meta-embedding-fig4.jpg

3.3 架構(gòu)和超參

3.3.1 h_{w}(\cdot)的架構(gòu)

如圖5所示

meta-embedding-fig5.jpg

不同字段的Embedding可以用不同的pooling方式岩四。最后用于輸出的密集層是生成器唯一需要訓(xùn)練的部分。

通過在最后一層使用三個trick哥攘,可以獲得數(shù)值穩(wěn)定的輸出:

1 使用tanh激活

2 不要增加偏置項

3 使用L2正則懲罰權(quán)重

3.3.2 超參\alpha

因為實踐上warm-up階段比冷啟動階段需要更多的步數(shù)剖煌,因此推薦將\alpha設(shè)置為一個小值,使得元學(xué)習(xí)器更注意warm-up階段來加速收斂逝淹。本文所有實驗將該值設(shè)置為0.1耕姊。

4 實驗

4.1 數(shù)據(jù)集

MovieLens-1M

騰訊2018社交廣告比賽

KDD Cup 2012

4.2 基本模型

FM

Wide & Deep

PNN

DeepFM

每個輸入字段的Embedding維度固定為256。對于NLP特征栅葡,首先將每個token(word)轉(zhuǎn)化為256維的word-embedding茉兰,然后使用AveragePooling來得到字段(句子)級別的表示。

4.3 實驗設(shè)置

4.3.1 數(shù)據(jù)集劃分
meta-embedding-table1.jpg
4.3.2 實驗pipeline

開始時先使用老的廣告預(yù)訓(xùn)練基礎(chǔ)模型欣簇,用于訓(xùn)練Meta-Embedding的樣本個數(shù)可見表1规脸。完成訓(xùn)練后,在新廣告上進行測試熊咽。對于每個新廣告,一個接一個的訓(xùn)練3個mini-batch横殴,就好像它們是warm-up的數(shù)據(jù)被因,分別命名為batch-a,batch-b衫仑,batch-c梨与,每個batch有K個實例,新廣告的其他實例用于測試文狱。具體實驗步驟如下:

  1. 用老廣告數(shù)據(jù)預(yù)訓(xùn)練基模型(1 epoch)
  2. 用訓(xùn)練數(shù)據(jù)訓(xùn)練Meta-Embedding(2 epoch)
  3. 用隨機初始化或Meta-Embedding生成新廣告的初始Embedding
  4. 在測試集上評估冷啟動效果
  5. 用batch-a更新新廣告的ID Embedding粥鞋,同時計算在測試集上的評估指標(biāo)
  6. 用batch-b更新新廣告的ID Embedding,同時計算在測試集上的評估指標(biāo)
  7. 用batch-c更新新廣告的ID Embedding瞄崇,同時計算在測試集上的評估指標(biāo)
4.3.3 評估指標(biāo)

用LogLoss和AUC呻粹,同時用百分比公式來展示相對提升:
\text { LogLoss_precentage }=\left(\frac{\mathrm{LogLoss}}{\mathrm{LogLoss}_{\text {base-cold }}}-1\right) \times 100 \%

\text { AUC_precentage }=\left(\frac{\mathrm{AUC}}{\mathrm{AUC}_{\text {base-cold }}}-1\right) \times 100 \%

4.4 實驗結(jié)果

meta-embedding-table2.jpg

一個有趣的發(fā)現(xiàn)是相對提升在越小的數(shù)據(jù)集上越顯著到踏。

5 相關(guān)工作

5.1 解決冷啟動問題的方法

有兩種類型的方法,一種是通過設(shè)計決策策略尚猿,例如使用contextual-bandits窝稿,或通過為冷item或user設(shè)計interview來收集信息。本文屬于第二種類型凿掂,是將冷啟動視為在線監(jiān)督學(xué)習(xí)伴榔,它通常使用side information用于冷啟動階段,例如使用user屬性庄萎,item屬性踪少,關(guān)系數(shù)據(jù)等等。但是這些方法即沒有考慮使用ID糠涛,也沒有在warm-up階段對它們做優(yōu)化援奢。本文不僅使用了全部可用特征,此外目的也是同時提升冷啟動階段和warm-up階段的效果忍捡。

Dropout-Net通過在深度協(xié)同過濾模型上應(yīng)用dropout來處理缺失輸入集漾,可以被視為一種用于預(yù)訓(xùn)練基礎(chǔ)模型的成功訓(xùn)練方法。

5.2 元學(xué)習(xí)

本文研究的是如何warm-up冷啟動廣告砸脊,在元學(xué)習(xí)領(lǐng)域相關(guān)的問題就是few-shot learning和fast adaptation具篇。本文受到MAML的啟發(fā),用基于梯度的元學(xué)習(xí)方法來學(xué)習(xí)共享模型參數(shù)凌埂。

七 小結(jié)

本文最大的亮點就是引入元學(xué)習(xí)來解決CTR預(yù)估中的冷啟動問題驱显,meta-learning,few shot learning瞳抓,這些概念已經(jīng)在CV里有不少應(yīng)用埃疫,現(xiàn)在也遷移到推薦廣告領(lǐng)域了『⒀疲看了第三節(jié)感覺寫的是真繁瑣栓霜,說的很玄乎,看起來也很累臭笆,得一個字一個字扣叙淌,但看完后回味下秤掌,好像也沒說什么啊愁铺,就是交替訓(xùn)練更新參數(shù)?另外本文第五節(jié)相關(guān)工作的梳理很值得一看闻鉴。

素質(zhì)四連

要解決什么問題

item冷啟動問題

用了什么方法解決

引入元學(xué)習(xí)茵乱,用Meta-Embedding替代隨機初始化Embedding

效果如何

離線效果都有提升,這個某種程度上應(yīng)該也是孟岛,專門優(yōu)化過的Embedding肯定優(yōu)于隨機初始化

還存在什么問題

實驗結(jié)果那一小節(jié)瓶竭,作者也提到督勺,在騰訊的數(shù)據(jù)集上,Wide&Deep的對比實驗并沒有提升斤贰,反而有輕微下降智哀,推測原因可能是Wide部分直接使用了原始輸入。另外只給出相對提升荧恍,沒給出原始值瓷叫。還有對于線上效果如何,沒有提到送巡。

算法背后的模式和原理

引入元學(xué)習(xí)解決CTR問題摹菠,借花獻佛

八 補充

Model-Agnostic Meta-Learning (MAML)模型介紹及算法詳解 https://zhuanlan.zhihu.com/p/57864886

什么是meta-learning? https://www.zhihu.com/question/264595128/answer/743067364

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市骗爆,隨后出現(xiàn)的幾起案子次氨,更是在濱河造成了極大的恐慌,老刑警劉巖摘投,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件煮寡,死亡現(xiàn)場離奇詭異,居然都是意外死亡犀呼,警方通過查閱死者的電腦和手機洲押,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來圆凰,“玉大人杈帐,你說我怎么就攤上這事∽ǘぃ” “怎么了挑童?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長跃须。 經(jīng)常有香客問我站叼,道長,這世上最難降的妖魔是什么菇民? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任尽楔,我火速辦了婚禮,結(jié)果婚禮上第练,老公的妹妹穿的比我還像新娘阔馋。我一直安慰自己,他們只是感情好娇掏,可當(dāng)我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布呕寝。 她就那樣靜靜地躺著,像睡著了一般婴梧。 火紅的嫁衣襯著肌膚如雪下梢。 梳的紋絲不亂的頭發(fā)上客蹋,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天,我揣著相機與錄音孽江,去河邊找鬼讶坯。 笑死,一個胖子當(dāng)著我的面吹牛岗屏,可吹牛的內(nèi)容都是我干的闽巩。 我是一名探鬼主播,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼担汤,長吁一口氣:“原來是場噩夢啊……” “哼涎跨!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起崭歧,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤隅很,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后率碾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體叔营,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年所宰,在試婚紗的時候發(fā)現(xiàn)自己被綠了绒尊。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡仔粥,死狀恐怖婴谱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情躯泰,我是刑警寧澤谭羔,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站麦向,受9級特大地震影響瘟裸,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜诵竭,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一话告、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧卵慰,春花似錦沙郭、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽件相。三九已至再扭,卻和暖如春氧苍,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背泛范。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工让虐, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人罢荡。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓赡突,卻偏偏與公主長得像,于是被迫代替她去往敵國和親区赵。 傳聞我的和親對象是個殘疾皇子惭缰,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,627評論 2 350

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