推薦系統(tǒng)(九):阿里電商推薦算法論文導(dǎo)讀(中)

上期介紹了3篇阿里的論文:推薦系統(tǒng)(八):阿里電商推薦算法論文導(dǎo)讀(上),本期將繼續(xù)介紹纳胧。

4. Learning Piece-wise Linear Models from Large Scale Data for Ad Click Prediction

4.1 算法介紹

當(dāng)前業(yè)界常用的CTR預(yù)估方法与倡、簡(jiǎn)介及其不足如下:

方法 簡(jiǎn)介 不足
邏輯回歸 使用了Sigmoid函數(shù)將函數(shù)值映射到0~1區(qū)間作為CTR的預(yù)估值。LR這種線(xiàn)性模型很容易并行化焙矛,處理上億條訓(xùn)練樣本不是問(wèn)題垛吗。 線(xiàn)性模型的學(xué)習(xí)能力有限,需要引入大量的領(lǐng)域知識(shí)來(lái)人工設(shè)計(jì)特征以及特征之間的交叉組合來(lái)間接補(bǔ)充算法的非線(xiàn)性學(xué)習(xí)能力叠艳,非常消耗人力和機(jī)器資源奶陈,遷移性不夠友好。
Kernel方法 將低維特征映射到高維特征空間 復(fù)雜度太高而不易實(shí)現(xiàn)
樹(shù)模型 如Facebook的GBDT+LR算法附较,有效地解決了LR模型的特征組合問(wèn)題 是對(duì)歷史行為的記憶吃粒,缺乏推廣性,樹(shù)模型只能學(xué)習(xí)到歷史數(shù)據(jù)中的特定規(guī)則翅睛,對(duì)于新規(guī)則缺乏推廣性
FM模型 自動(dòng)學(xué)習(xí)高階屬性的權(quán)值声搁,不用通過(guò)人工的方式選取特征來(lái)做交叉 FM模型只能擬合特定的非線(xiàn)性模式黑竞,常用的就是二階FM
深度神經(jīng)網(wǎng)絡(luò) 使用神經(jīng)網(wǎng)絡(luò)擬合數(shù)據(jù)之間的高階非線(xiàn)性關(guān)系,非線(xiàn)性擬合能力足夠強(qiáng) 適合數(shù)據(jù)規(guī)律的疏旨、具備推廣性的網(wǎng)絡(luò)結(jié)構(gòu)業(yè)界依然在探索中很魂,尤其是要做到端到端規(guī)模化上線(xiàn)檐涝,這里面的技術(shù)挑戰(zhàn)依然很大

2011-2012年期間遏匆,阿里媽媽資深專(zhuān)家蓋坤創(chuàng)新性地提出了MLR(mixed logistic regression)算法,引領(lǐng)了廣告領(lǐng)域CTR預(yù)估算法的全新升級(jí)谁榜。MLR算法創(chuàng)造地提出并實(shí)現(xiàn)了直接在原始空間學(xué)習(xí)特征之間的非線(xiàn)性關(guān)系幅聘,基于數(shù)據(jù)自動(dòng)發(fā)掘可推廣的模式,相比于人工來(lái)說(shuō)效率和精度均有了大幅提升窃植。
MLR可以看做是對(duì)LR的一個(gè)自然推廣帝蒿,它采用分而治之的思路,用分片線(xiàn)性的模式來(lái)擬合高維空間的非線(xiàn)性分類(lèi)面巷怜,其形式化表達(dá)如下:
p(y=1 | x)=g\left(\sum_{j=1}^{m} \sigma\left(u_{j}^{T} x\right) \eta\left(w_{j}^{T} x\right)\right)

其中u是聚類(lèi)參數(shù)葛超,\sigma\left(u_{j}^{T} x\right)決定了空間的劃分,w是分類(lèi)參數(shù)延塑,\eta\left(w_{j}^{T} x\right)決定空間內(nèi)的預(yù)測(cè)绣张。超參數(shù)分片數(shù)m可以較好地平衡模型的擬合與推廣能力。當(dāng)m=1時(shí)MLR就退化為普通的LR关带,m越大模型的擬合能力越強(qiáng)侥涵,但是模型參數(shù)規(guī)模隨m線(xiàn)性增長(zhǎng),相應(yīng)所需的訓(xùn)練樣本也隨之增長(zhǎng)宋雏。

MLR分類(lèi)示意

在實(shí)際中芜飘,MLR算法常用的形式如下,使用softmax作為分片函數(shù):
p(y=1 | x)=\sum_{i=1}^{m} \frac{\exp \left(u_{i}^{T} x\right)}{\sum_{j=1}^{m} \exp \left(u_{j}^{T} x\right)} \cdot \frac{1}{1+\exp \left(-w_{i}^{T} x\right)}

在此情況下好芭,MLR模型可以看作一個(gè)FOE模型:
p(y=1 | x)=\sum_{i=1}^{m} p(z=i | x) p(y | z=i, x)

采用負(fù)似然(neg-likelihood)損失函數(shù):
\arg \min _{\Theta} f(\Theta)=\operatorname{loss}(\Theta)+\lambda\|\Theta\|_{2,1}+\beta\|\Theta\|_{1}

\operatorname{loss}(\Theta)=-\sum_{t=1}^{n}\left[y_{t} \log \left(p\left(y_{t}=1 | x_{t}, \Theta\right)\right)+\left(1-y_{t}\right) \log \left(p\left(y_{t}=0 | x_{t}, \Theta\right)\right)\right]

由于加入了正則項(xiàng)燃箭,MLR算法變的不再是平滑的凸函數(shù)冲呢,梯度下降法不再適用舍败,因此模型參數(shù)的更新使用LBFGS和OWLQN的結(jié)合。

MLR算法適合于工業(yè)級(jí)的大規(guī)模稀疏數(shù)據(jù)場(chǎng)景問(wèn)題敬拓,如廣告CTR預(yù)估邻薯。背后的優(yōu)勢(shì)體現(xiàn)在兩個(gè)方面:
端到端的非線(xiàn)性學(xué)習(xí):從模型端自動(dòng)挖掘數(shù)據(jù)中蘊(yùn)藏的非線(xiàn)性模式,省去了大量的人工特征設(shè)計(jì)乘凸,這 使得MLR算法可以端到端地完成訓(xùn)練厕诡,在不同場(chǎng)景中的遷移和應(yīng)用非常輕松。
稀疏性:MLR在建模時(shí)引入了L1和L2,1范數(shù)正則营勤,可以使得最終訓(xùn)練出來(lái)的模型具有較高的稀疏度灵嫌, 模型的學(xué)習(xí)和在線(xiàn)預(yù)測(cè)性能更好壹罚。當(dāng)然,這也對(duì)算法的優(yōu)化求解帶來(lái)了巨大的挑戰(zhàn)寿羞。

4.2 算法實(shí)踐

采用如下數(shù)據(jù)猖凛,預(yù)測(cè)一個(gè)人一年內(nèi)是否能掙到50K的錢(qián),完整代碼如下:

import tensorflow as tf
from sklearn.metrics import roc_auc_score
import pandas as pd
import numpy as np
from sklearn.preprocessing import StandardScaler
import matplotlib.pyplot as plt

def MLR(train_x, train_y, test_x, test_y):
    x = tf.placeholder(tf.float32, shape=[None, 108])
    y = tf.placeholder(tf.float32, shape=[None])
    
    m = 2
    learning_rate = 0.3
    u = tf.Variable(tf.random_normal([108,m],0.0,0.5),name='u')
    w = tf.Variable(tf.random_normal([108,m],0.0,0.5),name='w')
    
    U = tf.matmul(x,u)
    p1 = tf.nn.softmax(U)
    
    W = tf.matmul(x,w)
    p2 = tf.nn.sigmoid(W)
    pred = tf.reduce_sum(tf.multiply(p1,p2),1)
    
    cost1 = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=pred, labels=y))
    cost = tf.add_n([cost1])
    train_op = tf.train.FtrlOptimizer(learning_rate).minimize(cost)

    result = []
    
    with tf.Session() as sess:
        sess.run(tf.global_variables_initializer())
        for epoch in range(0, 10000):
            f_dict = {x:train_x, y:train_y}
            _, cost_, predict_ = sess.run([train_op, cost, pred], feed_dict=f_dict)
            
            auc = roc_auc_score(train_y, predict_)
            if epoch % 100 == 0:
                f_dict = {x:test_x, y:test_y}
                _, cost_, predict_test = sess.run([train_op, cost, pred], feed_dict=f_dict)
                test_auc = roc_auc_score(test_y, predict_test)
                print('%d  cost:%f, train_auc:%f test_auc:%f' % (epoch, cost_, auc, test_auc))
                result.append([epoch,auc,test_auc])
    pd.DataFrame(result, columns=['epoch','train_auc', 'test_auc']).to_csv("data/lr.csv")
    plt.plot(np.array(result)[:,0], np.array(result)[:,1],label='train_auc')
    plt.plot(np.array(result)[:,0],np.array(result)[:,2],label='test_auc')
    plt.xlabel('epoch')
    plt.ylabel('auc')
    plt.grid()
    plt.legend(['train_auc', 'test_auc'], loc = 'best')
              
train_data = pd.read_table('data/adult.data.txt', header=None, delimiter=',')
test_data = pd.read_table('data/adult.test.txt',header=None, delimiter=',')

all_columns = ['age','workclass','fnlwgt','education','education-num',
                        'marital-status','occupation','relationship','race','sex',
                        'capital-gain','capital-loss','hours-per-week','native-country','label','type']

continus_columns = ['age','fnlwgt','education-num','capital-gain','capital-loss','hours-per-week']
dummy_columns = ['workclass','education','marital-status','occupation','relationship','race','sex','native-country']

train_data['type'] = 1
test_data['type'] = 2

all_data = pd.concat([train_data,test_data],axis=0)
all_data.columns = all_columns
all_data = pd.get_dummies(all_data, columns=dummy_columns)

train_data = all_data[all_data['type']==1].drop(['type'],axis=1)
test_data = all_data[all_data['type']==2].drop(['type'],axis=1)

train_data['label'] = train_data['label'].map(lambda x:1 if x.strip() == '>50K' else 0)
test_data['label'] = test_data['label'].map(lambda x: 1 if x.strip() == '>50K.' else 0)

for col in continus_columns:
    train_data[col] = StandardScaler().fit_transform(train_data[[col]])
    test_data[col] = StandardScaler().fit_transform(test_data[[col]])
    
train_y = train_data['label']
train_x = train_data.drop(['label'],axis=1)
test_y = test_data['label']
test_x = test_data.drop(['label'],axis=1)

if __name__ == '__main__':
    MLR(train_x, train_y, test_x, test_y)

訓(xùn)練個(gè)測(cè)試過(guò)程中的AUC曲線(xiàn)變化如下:

5. Deep Interest Network for Click-Through Rate Prediction

5.1 背景與原理

深度學(xué)習(xí)在CTR預(yù)估領(lǐng)域已經(jīng)有了廣泛的應(yīng)用绪穆,常見(jiàn)的算法比如Wide&Deep辨泳,DeepFM等。這些方法一般的思路是:通過(guò)Embedding層玖院,將高維離散特征轉(zhuǎn)換為固定長(zhǎng)度的連續(xù)特征菠红,然后通過(guò)多個(gè)全聯(lián)接層,最后通過(guò)一個(gè)sigmoid函數(shù)轉(zhuǎn)化為0-1值难菌,代表點(diǎn)擊的概率试溯。即Sparse Features -> Embedding Vector -> MLPs -> Sigmoid -> Output.
這種方法的優(yōu)點(diǎn)在于:通過(guò)神經(jīng)網(wǎng)絡(luò)可以擬合高階的非線(xiàn)性關(guān)系,同時(shí)減少了人工特征的工作量郊酒。
阿里研究者在線(xiàn)上數(shù)據(jù)中發(fā)現(xiàn)用戶(hù)行為有兩個(gè)特征:
Diversity:用戶(hù)在瀏覽電商網(wǎng)站過(guò)程中顯示出的興趣是多樣的耍共。
Local activation:由于用戶(hù)興趣的多樣性,只有部分歷史數(shù)據(jù)會(huì)影響到當(dāng)次推薦的物品是否被點(diǎn)擊猎塞,而不是所有的歷史記錄试读。
這兩種特性是密不可分的。針對(duì)上面提到的用戶(hù)行為中存在的兩種特性荠耽,阿里將其運(yùn)用于自身的推薦系統(tǒng)中钩骇,推出了深度興趣網(wǎng)路DIN,整體框架如下:

整個(gè)過(guò)程可以描述為:
1)檢查用戶(hù)歷史行為數(shù)據(jù)铝量;
2)mactching產(chǎn)生候選ads倘屹;
3)ranking計(jì)算每個(gè)候選ads的概率并排序;
4)記錄用戶(hù)在當(dāng)前展示廣告下的反應(yīng)慢叨,作為label纽匙。
本文特征分為4個(gè)部分:用戶(hù)特征,用戶(hù)行為特征拍谐,廣告特征烛缔,上下文特征,具體如下:

以下為基本模型與DIN模型的比較轩拨,Base Model首先把one-hot或multi-hot特征轉(zhuǎn)換為特定長(zhǎng)度的embedding践瓷,作為模型的輸入,然后經(jīng)過(guò)一個(gè)DNN的part亡蓉,得到最終的預(yù)估值晕翠。特別地,針對(duì)multi-hot的特征砍濒,做了一次element-wise+的操作淋肾,這里其實(shí)就是sum-pooling硫麻,這樣,不管特征中有多少個(gè)非0值樊卓,經(jīng)過(guò)轉(zhuǎn)換之后的長(zhǎng)度都是一樣的庶香!
Base Model有一個(gè)很大的問(wèn)題,它對(duì)用戶(hù)的歷史行為是同等對(duì)待的简识,沒(méi)有做任何處理赶掖,這顯然是不合理的。一個(gè)很顯然的例子七扰,離現(xiàn)在越近的行為奢赂,越能反映你當(dāng)前的興趣。因此颈走,對(duì)用戶(hù)歷史行為基于Attention機(jī)制進(jìn)行一個(gè)加權(quán)膳灶,這就是深度興趣網(wǎng)絡(luò)(Deep Interest Network)。

基本模型與DIN模型

Attention機(jī)制簡(jiǎn)單的理解就是立由,針對(duì)不同的廣告轧钓,用戶(hù)歷史行為與該廣告的權(quán)重是不同的。這里的權(quán)重锐膜,就是Attention機(jī)制即上圖中的Activation Unit所需要學(xué)習(xí)的毕箍。
在加入Activation Unit之后,用戶(hù)的興趣表示計(jì)算如下:
V_{u}=f\left(V_{a}\right)=\sum_{i=1}^{N} w_{i} * V_{i}=\sum_{i=1}^{N} g\left(V_{i}, V_{a}\right) * V_{i}

其中道盏,V_i表示behavior id i的嵌入向量而柑,比如good_id,shop_id等。V_u是所有behavior ids的加權(quán)和荷逞,表示的是用戶(hù)興趣媒咳;V_a是候選廣告的嵌入向量;w_i是候選廣告影響著每個(gè)behavior id的權(quán)重种远,也就是Local Activation涩澡。w_i通過(guò)Activation Unit計(jì)算得出,這一塊用函數(shù)去擬合坠敷,表示為g(V_i,V_a)妙同。
模型使用的評(píng)價(jià)指標(biāo)是GAUC,計(jì)算公式如下:
\mathrm{GAUC}=\frac{\sum_{i=1}^{n} w_{i} * \mathrm{AUC}_{i}}{\sum_{i=1}^{n} w_{i}}=\frac{\sum_{i=1}^{n} i m p r e s s i o n_{i} * \mathrm{AUC}_{i}}{\sum_{i=1}^{n} i m p r e s s i o n_{i}}

6. Deep Interest Evolution Network for Click-Through Rate Prediction

6.1 背景與算法

DIN模型將用戶(hù)的歷史行為來(lái)表示興趣常拓,但存在兩個(gè)缺點(diǎn):
1)用戶(hù)的興趣是不斷進(jìn)化的渐溶,而DIN抽取的用戶(hù)興趣之間是獨(dú)立無(wú)關(guān)聯(lián)的辉浦,沒(méi)有捕獲到興趣的動(dòng)態(tài)進(jìn)化性弄抬。
2)通過(guò)用戶(hù)的顯式的行為來(lái)表達(dá)用戶(hù)隱含的興趣,這一準(zhǔn)確性無(wú)法得到保證宪郊。
基于以上兩點(diǎn)掂恕,阿里提出了深度興趣演化網(wǎng)絡(luò)DIEN來(lái)CTR預(yù)估的性能拖陆。DIEN模型的主要貢獻(xiàn)點(diǎn)在于:
1)關(guān)注電商系統(tǒng)興趣演化過(guò)程,提出新的網(wǎng)絡(luò)結(jié)構(gòu)以建模興趣進(jìn)化過(guò)程懊亡,該模型能更精確地表達(dá)用戶(hù)興趣和提高CTR預(yù)估率依啰。
2)設(shè)計(jì)興趣抽取層,通過(guò)計(jì)算一個(gè)輔助loss店枣,以提升興趣表達(dá)的準(zhǔn)確性速警;
3)設(shè)計(jì)興趣進(jìn)化層,以更加準(zhǔn)確表達(dá)用戶(hù)興趣的動(dòng)態(tài)變化性鸯两。

DIEN的模型結(jié)構(gòu)如下:

DIEN結(jié)構(gòu)

與DIN相比闷旧,可以看到,DIN和DIEN的最底層都是Embedding Layer钧唐,User profile忙灼, target AD和context feature的處理方式是一致的。不同的是钝侠,DIEN將user behavior組織成了序列數(shù)據(jù)的形式该园,并把簡(jiǎn)單的使用外積完成的activation unit變成了一個(gè)attention-based GRU網(wǎng)絡(luò)。
興趣抽取層(Interest Extractor Layer)
興趣抽取層Interest Extractor Layer的主要目標(biāo)是從embedding數(shù)據(jù)中提取出interest帅韧。但一個(gè)用戶(hù)在某一時(shí)間的interest不僅與當(dāng)前的behavior有關(guān)里初,也與之前的behavior相關(guān),所以作者們使用GRU單元來(lái)提取interest忽舟。GRU單元的表達(dá)式如下:
\begin{aligned} &{u}_{t}=\sigma\left(W^{u} {i}_{t}+U^{u} {h}_{t-1}+青瀑^{u}\right)\\ &{r}_{t}=\sigma\left(W^{r} {i}_{t}+U^{r} {h}_{t-1}+^{r}\right)\\ &\begin{array}{l} \tilde{{h}}_{t}=\tanh \left(W^{h} {i}_{t}+{r}_{t} \circ U^{h}{h}_{t-1}+萧诫^{h}\right) \\ {h}_{t}=\left({1}-{u}_{t}\right) \circ {h}_{t-1}+{u}_{t} \circ \tilde{{h}}_{t} \end{array} \end{aligned}

其中h_t表示提取出的用戶(hù)興趣斥难,為說(shuō)明興趣表達(dá)的合理性,采用輔助loss帘饶。設(shè)計(jì)了一個(gè)二分類(lèi)模型來(lái)計(jì)算興趣抽取的準(zhǔn)確性哑诊,我們將用戶(hù)下一時(shí)刻真實(shí)的行為e[t+1]作為正例,負(fù)采樣得到的行為作為負(fù)例\hat {e}[t+1]及刻,分別與抽取出的興趣h_t結(jié)合輸入到設(shè)計(jì)的輔助網(wǎng)絡(luò)中镀裤,得到預(yù)測(cè)結(jié)果,并通過(guò)logloss計(jì)算一個(gè)輔助的損失:
\begin{aligned}L_{a u x}=- \frac{1}{N}\left(\sum_{i=1}^{N} \sum_{t} \log \sigma\left({h}_{t}, {e}_缴饭^{i}[t+1]\right)\right.\left.+\log \left(1-\sigma\left({h}_{t}, \hat{{e}}_暑劝^{i}[t+1]\right)\right)\right) \end{aligned}
興趣進(jìn)化層(Interest Evolution Layer)
興趣進(jìn)化層的主要目標(biāo)是刻畫(huà)用戶(hù)興趣的進(jìn)化過(guò)程。舉個(gè)簡(jiǎn)單的例子:以用戶(hù)對(duì)衣服的interest為例颗搂,隨著季節(jié)和時(shí)尚風(fēng)潮的不斷變化担猛,用戶(hù)的interest也會(huì)不斷變化。這種變化會(huì)直接影響用戶(hù)的點(diǎn)擊決策。建模用戶(hù)興趣的進(jìn)化過(guò)程有兩方面的好處:
1)追蹤用戶(hù)的interest可以使我們學(xué)習(xí)final interest的表達(dá)時(shí)包含更多的歷史信息傅联。
2)可以根據(jù)interest的變化趨勢(shì)更好地進(jìn)行CTR預(yù)測(cè)先改。
而interest在變化過(guò)程中遵循如下規(guī)律:
1)interest drift:用戶(hù)在某一段時(shí)間的interest會(huì)有一定的集中性。比如用戶(hù)可能在一段時(shí)間內(nèi)不斷買(mǎi)書(shū)蒸走,在另一段時(shí)間內(nèi)不斷買(mǎi)衣服仇奶。
2)interest individual:一種interest有自己的發(fā)展趨勢(shì),不同種類(lèi)的interest之間很少相互影響比驻,例如買(mǎi)書(shū)和買(mǎi)衣服的interest基本互不相關(guān)该溯。
為了利用這兩個(gè)時(shí)序特征,我們需要再增加一層GRU的變種别惦,并加上attention機(jī)制以找到與target AD相關(guān)的interest朗伶。
attention的計(jì)算方式如下:
a_{t}=\frac{\exp \left({h}_{t} W {e}_{a}\right)}{\sum_{j=1}^{T} \exp \left({h}_{j} W {e}_{a}\right)}

而Attention和GRU結(jié)合起來(lái)的機(jī)制有很多,文中介紹了一下三種:
GRU with attentional input (AIGRU): 這種方式將attention直接作用于輸入步咪,無(wú)需修改GRU的結(jié)構(gòu):
i_t^{\prime}=h_t * a_t
Attention based GRU(AGRU): 這種方式需要修改GRU的結(jié)構(gòu)论皆,此時(shí)hidden state的輸出變?yōu)椋?br> {h}_{t}^{\prime}=\left(1-a_{t}\right) * {h}_{t-1}^{\prime}+a_{t} * \tilde{{h}}_{t}^{\prime}
GRU with attentional update gate (AUGRU): 這種方式需要修改GRU的結(jié)構(gòu),此時(shí)hidden state的輸出變?yōu)?
\begin{array}{l}\tilde{\mathbf{u}}_{t}^{\prime}=a_{t} * \mathbf{u}_{t}^{\prime} \\ \mathbf{h}_{t}^{\prime}=\left(1-\tilde{\mathbf{u}}_{t}^{\prime}\right) \circ \mathbf{h}_{t-1}^{\prime}+\tilde{\mathbf{u}}_{t}^{\prime} \circ \tilde{\mathbf{h}}_{t}^{\prime} \end{array}

參考資料

[1] http://www.reibang.com/p/627fc0d755b2
[2] http://www.reibang.com/p/647669169f98
[3] http://www.reibang.com/p/73b6f5d00f46

試上超然臺(tái)上看猾漫,半壕春水一城花点晴。煙雨暗千家∶踔埽——蘇軾《望江南·超然臺(tái)作》

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末粒督,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子禽翼,更是在濱河造成了極大的恐慌屠橄,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,383評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件闰挡,死亡現(xiàn)場(chǎng)離奇詭異锐墙,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)长酗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)溪北,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人夺脾,你說(shuō)我怎么就攤上這事之拨。” “怎么了咧叭?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,852評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵蚀乔,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我菲茬,道長(zhǎng)吉挣,這世上最難降的妖魔是什么派撕? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,621評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮听想,結(jié)果婚禮上腥刹,老公的妹妹穿的比我還像新娘马胧。我一直安慰自己汉买,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,741評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布佩脊。 她就那樣靜靜地躺著蛙粘,像睡著了一般。 火紅的嫁衣襯著肌膚如雪威彰。 梳的紋絲不亂的頭發(fā)上出牧,一...
    開(kāi)封第一講書(shū)人閱讀 49,929評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音歇盼,去河邊找鬼舔痕。 笑死,一個(gè)胖子當(dāng)著我的面吹牛豹缀,可吹牛的內(nèi)容都是我干的伯复。 我是一名探鬼主播,決...
    沈念sama閱讀 39,076評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼邢笙,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼啸如!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起氮惯,我...
    開(kāi)封第一講書(shū)人閱讀 37,803評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤叮雳,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后妇汗,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體帘不,經(jīng)...
    沈念sama閱讀 44,265評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,582評(píng)論 2 327
  • 正文 我和宋清朗相戀三年杨箭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了厌均。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,716評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡告唆,死狀恐怖棺弊,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情擒悬,我是刑警寧澤模她,帶...
    沈念sama閱讀 34,395評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站懂牧,受9級(jí)特大地震影響侈净,放射性物質(zhì)發(fā)生泄漏尊勿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,039評(píng)論 3 316
  • 文/蒙蒙 一畜侦、第九天 我趴在偏房一處隱蔽的房頂上張望元扔。 院中可真熱鬧,春花似錦旋膳、人聲如沸澎语。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,798評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)擅羞。三九已至,卻和暖如春义图,著一層夾襖步出監(jiān)牢的瞬間减俏,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,027評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工碱工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留娃承,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,488評(píng)論 2 361
  • 正文 我出身青樓怕篷,卻偏偏與公主長(zhǎng)得像历筝,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子匙头,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,612評(píng)論 2 350

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