搜狗深度学习技术在广告推荐领域的应用

内容来源:2017年4月17日,搜狗移动搜索广告策略研究组负责人舒鹏在七牛云和QCon联合主办的深度学习论坛“深度学习最新进展与实践”上进行《搜狗深度学习技术在广告推荐领域的应用》演讲分享。

编者按

近来,深度学习成为一个流行词。深度学习可以更好地通过增加数据集的规模来改善学习结果,与传统的机器学习工具相比,深度学习挖掘了神经网络的潜力。基于强大的特征提取,它比其他工具更适合模式识别(图像、文本、音频)。深度学习应用的范畴也越来越广。这次搜狗移动搜索广告策略研究组负责人舒鹏用自身的经验分享搜狗深度学习技术在广告推荐领域的应用,以下为此次演讲内容的整理。

嘉宾演讲视频地址:http://suo.im/4G8CYm

搜索广告背景知识

图1

大家对广告多多少少都有一些了解,现在大家都用搜索引擎,从总体的覆盖率看,大家应该都会碰到广告。大家对广告多少会有些讨厌,但中国互联网领域的很多行业,都靠广告变现来生存,大家手机上有很多免费APP,但天下没有免费的午餐,很多APP都靠广告来盈利,广告是互联网商业的基石。现在也有一些新的流量变现方式,如 O2O、电商,还有直播等。在这些商业模式出现之前,广告为互联网行业提供了商业基础。

如图 1 是搜索广告的流程图,对于搜索广告来说一般有几个处理步骤:首先是查询理解,用户当前的查询到底想干什么、他有什么目的?我们进行分词,以及查询倾向的分析;然后做广告召回,有很多的客户会在搜索广告中买一些他们感兴趣的词,这些词代表了他们对不同流量的感兴趣程度,系统要对这些词进行竞价排序,所以需要先做一个广告召回,判定在当前语境下面哪些客户提供的广告比较合适。这个量比较大,搜狗的广告库在几十亿的量级,所以会做一定筛选,剩下几千几百个广告,然后进行详细评估;同时我们还会做点击率预估,即假定这个广告能够在用户面前展示,实际的点击比例会怎么样,点击率能够反映出很多因素,包括广告的质量,以及广告的价值等。此外,有的时候我们也需要花钱购买流量,如何更有效的利用这些流量,通常都要靠这些来保证;而后会有排序计价,挑选排名靠前的广告来进行结果展示;然后会有后续的日志收集功能,接下来会拿这个日志做各种各样的处理,包括 CTR预估模型的线下实验以及各种各样的事情,如此就完成了整个闭环,这是广告系统的介绍。

深度学习在搜狗搜索广告的一些应用

图2

下边介绍一下搜狗深度学习在搜索广告领域里面有哪些应用。

第一块是文本相关性计算,简单来讲就是一个广告的标题、描述等整个信息跟当前的查询词是否相关,健康性有没有问题,是否会影响用户体验?有时候一些客户买词不规矩,可能会买一些当下流行的热点词,但最后填写的标题、描述等创意信息跟这个热点词并没有关系,如果展示出来就会引起大家的反感,因此我们需要围绕相关性做一些工作,来避免这种情况。

如图2是去年做的一项工作,后来也是投了一篇论文发表在CIKM2016上面去,这个论文是关于 Question Answering的,解决如何选出和 Question 最合适答案的问题,采用了典型的深度学习网络结构。这篇论文的主要创新点在于无需分词,做一些传统的文本相关性计算时,一般会先做分词,比如你会把论文进行分词,把广告标题进行分词等,分词之后再做处理。这个分词算法设计也有很多讲究,你需要不断的更新语料库,以及其它相关性工作,当时就想能不能不做分词,把这个绕开直接搞定。就做了个实验,简单来讲就是把英文的 26 个小写字母,以及 26 个大写字母,还有 0-9这些数字,以及标点符号等,每个字符都看成是一个标记,每个标记对应一个向量,这个向量可以通过向量表查询得到,并在训练中逐步更新,这样每个句子就可以转化为一个矩阵,矩阵得到之后可通过卷积和pooling等方法最终转化成向量,这个向量通过全连接层形成一个输出值,而后和样本标注结果( 1 还是 0)进行比对和误差回传,从而形成一个网络。有了这个网络之后,就可以拿一些语料进行训练,结束之后就会得到最终每个字符的vector,用以后续的处理。这样做不需要分词,可避免外部系统的干扰。最近我们依赖的一个分词库需要进行升级,很多事情都要重新做一遍,特别麻烦。如果这个架构全面应用的话,将会避免这些问题。

图3

如图 3 是广告物料推荐,假设有一张图片想知道含义,想知道跟这个图片相关的文本有哪些。图片采用 CNN 来处理,文本采用 LSTM 进行处理,最后把两者通过cosine的方式结合在一起训练以达到最终目的。

图4

深度学习的应用很广泛,具体到广告领域:如图像理解,像刚才介绍的图像物料推荐,这个是用 CNN 技术来做;还有文本相关性,通常可以来做广告召回,以及创意生成等事情,相关技术比如 LSTM,以及刚才提到的 CSR;还有CTR预估,深度学习可用来做广告排序和相关的特征挖掘,相关技术如CNN、MxNet和TensorFlow等。图 4 举的例子是一个典型应用,具体到这个广告而言,蛋糕的小图片是通过刚才的技术做上去的,有很多客户是属于中小客户,自己不具备强大的运营能力,他可能想为广告配一些图,但没有精力做这件事情,我们就会帮他自动匹配一些图片,这会影响后续的很多东西,包括订单转化等事情。广告下方的三行子标题也是自动生成,系统会判断一下当前有哪些东西用户比较感兴趣,而且和客户有关,就会放在这里,这部分涉及到文本相关性计算。这是主要介绍的三点深度学习在广告中的应用。

基于多模型融合的CTR预估

CTR预估流程

图5

下边我们重点介绍一下 CTR 预估模块。通常单个模型的能力有限,每个模型都有自己的特点,比如 LR 模型比较稳定,DNN 模型擅长做特征交叉。每个模型都有自己的特点,需要根据模型的特点去最大化利用它。我就这个领域详细介绍一下。

首先介绍一下CTR预估的流程:首先搜集原始数据,包括查询请求和点击信息,这两项每天都会实时产生并且量级很大;有这些之后就可以做特征的抽取,比如查询相关特征,用户查询词是什么?他所处哪个地域?今天是星期几?还有广告特征,广告本身的标题是什么?描述是什么?客户购买的关键词是什么,以及这个广告和查询词之间的匹配相关性。有了特征之后会进行线下模型训练。图 5 中有两类模型,一个是线性模型,一个是非线性模型,线性模型主要指LR ,非线性模型主要是指 GBDT、DNN等。模型训练完毕之后会加载到线上,同时线上 Server 会把整个特征抽取流程在线完成,而后会进行模型计算,然后形成 CTR 预估的完整结果。最后 Online 本身会产生实时日志,形成完整的流程。

CTR预估涉及技术

图6

大家知道,跟CTR预估有关的主要有三个因素,一个是数据、一个是特征、一个是模型。平台是承载这三点的基础。具体到平台而言,我们通常会用多天的数据进行训练,这种情况下单机是跑不完的,因此需要一个并行计算平台来同时处理大数据量。如图 6 左边列出来的几个平台都是较为常用的平台:第一个是 MPI,如果做科学计算的话就会比较熟悉,这是比较早期的,这个平台会偏底层一些,需要修改不少代码才能实现工作,现在大家不大会用,因为做起来比较繁琐;第二种是XgBoost,主要是做 GBDT 相关的东西;然后是 MxNet,在深度学习中的应用比较多,像亚马逊就在利用这个平台做些事情;最后是 TensorFlow,谷歌最近一两年做出来的,主要是提供跨平台的深度学习计算工具。

在模型方面:首先有线性模型,LR 模型又有一些细分算法,实时(FTRL)和特征自动组合(FM);非线性的模型是有GBDT,是决策树的变体,可以看作多个决策树的组合;然后是深度学习模型, 如DNN;

以及模型融合,刚才讲到怎么样能把不同模型的优点都集中在一起,具体的做法有多种:第一种是 Bagging,比较实用简单,就是有多个模型,每个模型都有个结果,怎么样把多个结果放在一起呢?直接加权平均一下就可以了,这个方法很简单;其次是级联模型,级联模型相对复杂一些,这个做法不是把最终的评估结果放在一起,而是说每一个模型中间产生的数据也可以送到另外一个模型中去,这样做起来就比较麻烦,但操作空间比较大,而且可以有多种组合方法;最后一个是 Wide&Deep,这是谷歌去年提出的思路,它跟前面两种都不一样,前面两种每个模型训练都是独立的,即使有先后顺序,但是 Wide&Deep 是针对两个模型同时交互训练,我们认为它相比其他两个效果会更好一些。

数据模块:首先要有一个日志收集模块,会收集到最原始的数据,需要进行去噪,是因为原始数据也会有一些噪声点,比如同一个用户同一个查询词连续搜索两次,第一次没点广告,但第二次点了,第一次没点到底是因为广告出的不好,还是因为用户当时不在状态,根本没有看到广告呢。

其次是特征,在搜索广告领域里面特征是非常重要的。有一个专有名词叫特征工程,主要包括特征的设计、选择、组合:所谓设计,就是概率论,你认为哪些因素对用户选择广告有影响,这时你就要把它找到并设计一些新特征出来;单单有这个还不够,我们需要判断这种新特征是否有效,这就涉及到特征选择,特征选择需要进行仔细的分析,看看能不能用;最后是特征组合,也就是交叉特征,有的时候单个因素出现并不能说明问题,而两个因素一块出现时,可能就代表了特殊的含义。

特征设计

图7

关于特征设计大体上可以分为两类:一类是离散特征,所谓离散特征是指,比如一天 24 个小时,下午16 点整,我认为 16 点整在一天 24 小时当中会占据一个位置,把时间刻画为长度为24的向量,其中 16 点就会占据这个向量中的一个位置。这种设计方法有几个特点:首先比较容易设计,不管什么样的特征,只要它有一个取值就可以映射到系统里,实现特征的产生;还有一个特点,就是特征空间非常大,百亿或者上千亿的量级,但对于任何一个样本最后只有几百个特征是有效的,其他的特征都没有取值,它的稀疏性非常明显,特征空间非常大,这样会导致模型复杂度比较受限制。如果模型过于复杂,比如你把每一个离散特征都连接到DNN输入层的话,参数就会非常多,训练时间会非常长,结果也不一定好。这是离散特征。

其次是连续特征,跟离散特征反着过来的。像上边那个时间的例子,如果说 24 个小时刻画成离散特征是 24 个点的话,连续特征就是一个值,16 点就是 16,13 点就是 13,它只会占据一个位置,但是那个位置的取值范围可以有 24 种,而不仅仅是0和1,跟离散特征正好反过来。像这种特征一般来说需要做一个比较仔细的设计才行,大家都知道连续特征每一个特征只会占一个位置,不像离散特征那样随意占据大量的空间。它的特点是定长,每个特征取值只能有一个,像离散特征中有个特征叫当前查询词分词之后的term分布,如果这个查询词比较长,它的term分布就长一些,占据的位置就多一些;如果只是一个短的查询,占据的位置就比较少,是变长的,这点和连续特征区别很大。此外,基本上每个连续特征都有值。有上面这几个特点,就会导致连续特征量相对小一些,差不多几百维的向量就搞定了,它可以用比较复杂的模型进行训练,像DNN 这种大概只有几百个输入节点,相比图像处理还是比较小儿科的。

模型类别

图8

关于模型,刚才提到分为线性和非线性,线性模型中最典型的就是 LR,逻辑斯特回归,这个模型比较简单,它的公式大概是一个权重分量×特征分量+偏置,而后再做一个变换得到最终结果,它比较简单,比较适合处理离散特征,而且稳定性比较好。但它有一个缺点,LR 本身没法做特征交叉,只能通过线下分析,尝试两种特征的交叉是否可以改善线下指标,这样才能得到比较好的结果。这件事情很多公司都有自动化的学习平台,会自动进行特征的交叉并评估哪个特征比较好,尽管如此,这些工作还是比较耗时间的。

非线性模型有特别明显的优点,能够自动学习特征之间的交叉关系,如哪两个特征交叉在一起比较好,模型会帮你实现。比如说 DNN 输入 100 维特征,隐藏层中每层都有交叉关联。如果两个特征之间有很强的依赖关系,且对结果有影响的话,在权重分量上会有相应的侧重,最后会达到特征自动交叉的目的,这就是为什么 DNN 出来之后用户非常广泛的原因。像刚才 LR 这种特征组合,非常耗费人力和精力,可能一个公司一个特征组有几个人或十几个人,都在做这件事情,大家都在研究哪些特征会好,或者交叉在一起会好。但如果用非线性模型的话就会相对规避这一点,从这一点来看它比较适合做新领域的探索,可能效果会好一些。

但因为有上面优点的存在,它就会有一些缺点,模型比较复杂,计算比较耗时。这点对于在线计算任务就比较关键一些,像做广告CTR预估,每天有几亿次查询,每次查询有成百上千条广告需要处理,查询配对在千亿量级,对计算资源的要求非常高。如果模型太复杂的话,就需要把计算资源扩充一些,买机器这些都要考虑,最后收益怎么样,到底值不值得,这是比较有风险的一点。

模型融合

图9

上边提到,因为每个模型都有优点,比如说 LR 模型最突出的优点是简单、可靠、文本类特征处理比较好,但又不具备交叉能力;而DNN有这种能力,但没有前边说的优点,怎么把它们融合在一起呢?因此会用到模型融合:

CTR bagging 将多个模型的输出 CTR 加权平均,实现方法简单,模型之间不会产生耦合,但是可调参数有限,改进空间相对较小。

再有模型融合,每个模型中间的结果或者是输出结果可以作为另外一个模型的输入,这个模型会学习上一个模型哪个地方处理的好或者不好,自动做出调整。实现的方法比较复杂,因为模型之间有依赖关系。但优点是实现方案较多,改进空间大一些。

图10

由于第一种方式 (CTR bagging) 的空间有限,我们就选择第二种。并针对性的做了一些设计,这些跟工程设计的关系大一些。如何做这件事情?要定一个目标,要做成什么样子来达成这个目的?首先希望这个东西能支持多个模型的加载的和计算;第二点,可支持模型之间的交叉和 CTR 的 Bagging;第三点,可通过配置项随时调整模型融合方案;第四点,避免不必要的重复操作,以降低时间复杂度。根据这 4 个要求我们做了个解决方案,核心理念是引入了ModelFeature 的概念,即把模型本身看做一个特征,模型通过计算得到新的特征,对于模型输出可作为 CTR,也可以作为特征为其它模型使用。限定 ModelFeature 的计算顺序,即可实现 Bagging 和模型交叉等功能。

但是必须要注意数据一致性,线上依赖的数据源是否跟线下完全一致,如果数据不一致,所有的结论和实验都是空中楼阁没有根基。我们之前碰到过一个问题,做了一个特征线下效果很好,但线上效果不怎么样,可能就会有数据不一致的问题。拿刚才时间的例子,如果线下计算离散值时,比如说是 0 点占到第一个位置,1 点占到第二个位置,24 点占到第 24 个位置,但是线上有一个错误,0 点占到第 24 个位置,24 点占到第一个位置,就给它反过来,虽然线下做的很好,但是线上的使用效果会很差。

第二点,流程的稳定性,如果设计一个很复杂的流程,包括融合模型操作的话,流程之间就会有很强的依赖性,任何一个前面的流程失败,后面的流程就跑不下去,所以你的流程必须要稳定,要有机制保证。

图11

如图 11 是一个流程图,线下流程会把这些数据重组抽取特征进行训练。在线下会训练一个 LR 模型,这个结果反馈到 DNN 模型里再进行训练。到了线上之后,针对每个查询请求都会抽取这些特征,得到特征值后进行 LR 模型计算,LR 模型产生的最终结果放在特征池里面,后续的 DNN 模型也会依赖这个东西计算。通过这套架构设计,基本上保证了刚才提到的要点。这套框架在线上跑了快一年时间,比较稳定。

模型效果评估

图12

线下做实验,以及线上上线,必须要评价一下这套流程是好还是坏。所以有一套模型效果的评估方法,用来判定新特征到底是好还是坏?

一、如图 12的 AUC,这是搜索广告领域以及现在的信息流推荐中常用的指标,只要涉及到排序结果通常都会用到 AUC,这个指标表征排序能力,用于分析模型是不是把一些好的排在前面差的排在后面,它不一定能反映出数据的绝对值。AUC 还是比较稳定的,据有些人讲,只要这个指标在线下提升到一定幅度,线上一定会有效果。如果线上没有效果的话,通常来讲肯定是某一块出了问题,包括刚才讲的线上线不一致等。

二、最直接的评估方法,上线收益。如果线下发现 AUC 是有提升的,要到线上去看最终收益有没有涨,看到底多赚多少钱?这两个指标有一定的关联性,AUC 比较高的话收益一定会涨,也有一些例外的情况。为什么线下效果很好,到了线上之后没有变化?通常从两个角度来看:特征的覆盖率,你这个特征如果非常好,但覆盖的东西很有限,线上 100 个指征只覆盖了 2 个,即使这两个获得很大的提升,最终的收益也比较有限;Survival Bias,线下训练时用到的数据都是自动筛选过的结果,一般凡是能展现的广告通常都是之前系统认为比较好的广告,在这个数据集上表现比较好,不代表你在真正放到线上之后表现好。因为真正上线之后你会对所有的广告进行扫描计算,这时把坏广告干掉的能力就会显得比较关键。这两点可能会导致线上和线下不一致,其实做别的事情也会有同样的问题,一个是理论一个是实际,这两个如果不一致时,应该想一想到底哪一块出了问题?

并行化训练

图13

此外,我们还需要并行化训练,因为单机不可能处理这么大的数据量。

数据量小的时候波动很大,做的很多改进没有效果,一些小修改效果反而好。数据量变大之后,模型收益会更高而且比较可控。

我们选择的深度学习并行化训练方案是 MxNet,它支持多机多卡,使用成本比较低。我们每天都需要进行模型更新,对时效性要求很高,如果把 MxNet 直接用过来的话,效果不一定好,训练时间比较久,需要优化,比如 怎么样做调度来提升GPU的加速比等。

现状和计划

我们目前已经实现了 LR+DNN 融合模型的上线,收益比好。但是受限于线上计算资源,模型复杂度有限,线下训练流程有依赖关系,繁琐易出错。

我们针对这几点情况做了个计划。

一、做一个线上服务拆分,跟深度学习的模块独立出来,采用低功耗的 GPU 加速。这个现在做的差不多了,区别还是很明显的。按目前线上 CPU 版本的服务器,其实它做这种工作时非常吃力,负载量不够,但上了 GPU 之后,就能处理的很好。

二、支撑更宽、更深、更复杂的网络结构,GPU 在处理已有线上任务时的负载量在 5% 左右,利用率很低,未来能支撑更宽更深更复杂的网络结构。

三、采用 Wide & Deep,线下训练流程解耦,因为之前的在线计算能力有限,如果GPU 运转良好的话,可以采用 Wide&Deep 替换,使线下训练流程解耦。

Wide Deep

图14

这是接下来打算做的事情,大家如果感兴趣可以看谷歌 2016 年 6 月份发表的相应论文。大概的思路如图 14所示, Wide 部分可以理解为 LR,Deep就是 DNN,这两个模块会把它的结果同时反馈到最终输出节点上,来跟最终的结果进行差值比对,它的误差都会同时回传,回传之后进行同步更新。这样有一个好处,:LR 跟 DNN 模型是同时训练出来的,线下维护一个流程实现两个模型的训练,正确性包括各种错误率都能得到很好的保证。

该方法的优点比较明显,首先它比较稳定,一次训练出两个模型,如果两个模型同时训练的话,两个模型会互相影响,两个模型的权重分配会更好一些。大家现在都在朝这个方向发展,我们刚开始做没有多久,目前来看有好的效果,相比之前最好的效果再好一些,但因为现在的TensorFlow 平台不支持大规模训练,接下来还需要在这一块持续投入改进,如果有更新的结果会跟大家分享下。

Q & A

现场提问:论文中的方法(CSR)在英文语料上的效果怎么样?

舒鹏:效果差不多,比如说英文单词在几十万百万的量级,如果在线应用的话要加载几十万个字符和向量的映射关系,如果采用这种方法的话,大概 几十个字符,加载 几十 个vector 就实现这个功能。

现场提问:字的编码怎么编的?

舒鹏:总共 26 个字母加上大小写以及标点符号和数字不到 100 种,每个对应一个向量。汉字看哪个库,如果常用汉字大概几千个,其实这个矩阵并不大。

现场提问:你刚才说的 MxNet你能介绍一下调度的优化吗?

舒鹏:我们这边有一些工程团队支持,具体他们那边熟悉一些。总体来讲,首先I/O方面,我们的训练数量比较大,在几十亿量级,首先多台机器可以并行加载,怎么样把I/O和后面的计算错开,这是关键的。还要看网络结构怎么设计,深度学习训练也是每一个节点做完一轮BP之后会把系数拿在一起做个平均计算,怎么去设计机制来尽量缩短时间,主要是这些方面。

现场提问:我想问一下论文中使用的训练数据规模大概多少?

舒鹏:我们当时做论文时训练数据规模比较小,是基于公开的库,大概不超过一百万,比较小的库。线上训练要看应用场景,我们有好几种数据,有一种是人工标注过的。除此之外,还有自动数据,例如用户提交query之后,下面会出十条自然结果,点击哪条结果能一定程度上表征query的一些属性。query点击的数据量很大,在百亿量级。但第一种标注数据的话,量级比较小一些,主要取决于你的应用。

现场提问:请问CTR预估模型效果评估中的准确率度如何计算?

舒鹏:刚才没有列出来,直观想象下大概有个准确率计算方法。假设每个广告系统有个预估CTR,假如是 0.10,可以把所有预测CTR是 0.10 的广告放在一起,这些广告就会有实际的点击率,这个实际的点击率和 0.10 的差距会有个监控,这个就是准确率。

现场提问:你刚刚在演讲当中提到有一个 SurvivalBias 问题,想问一下具体怎么解决这个问题的?

舒鹏:这个主要是说这个模型在碰到之前没有见到的一些样本时如何处理。关键点在于特征设计,尤其是特征泛化性,所谓泛化性,比如说一个新广告,虽然广告是新的,但广告标题和旧广告差不多,只要你的特征能捕捉到这些经常出现的东西,例如查询词和广告标题的匹配度,这种泛化性能保证的话,这个 SurvivalBias 就不会很差。反过来讲,如果你的模型中所有特征都跟跟通用性特征没有关联,这个模型的 SurvivalBias 就会很差。举个例子,如果你的模型训练时依赖的特征是昨天模型的预估点击率,你的模型就会变得很简单,而且 AUC不会低,但实际上到了线上之后这个特征会缺失,然后效果就会很差,大概是这个意思。

今天就介绍到这里,谢谢!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,198评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,663评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,985评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,673评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,994评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,399评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,717评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,407评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,112评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,371评论 2 241
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,891评论 1 256
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,255评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,881评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,010评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,764评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,412评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,299评论 2 260

推荐阅读更多精彩内容