论文阅读(36)Few-shot Learning: A Survey(2)

3. 数据(Data)

方法利用先验知识扩充数据,解决FSL问题,丰富E的监督信息。对于更多的样本,数据足以满足后续机器学习模型和算法所需的样本复杂性,并以较小的方差获得更可靠的R(h_I)

接下来,我们将详细介绍如何使用先验知识在FSL中扩充数据。根据先验知识的类型,我们将这些方法分为四类,如表2所示。因此,图5显示了转换的工作原理。由于对中每个类的扩充都是独立完成的,因此我们用D^{train}中的n个类别的一个示例(x^{(i)},y^{(i)})进行说明。

image.png
image.png
image.png

3.1 通过转换复制训练数据(Duplicate D^{train} with Transformation)

扩充D^{train} 的策略是通过引入变量的一些转换方式将每个(x^{(i)},y^{(i)})复制为多个样本。转换过程可以从类似的数据中学习,也可以由人类的专业知识手工制作,作为先验知识包含在经验E中。由于合成的图像容易被人评估,因此它仅适用于图像。

3.1.1 手工制作的规则(Handcrafted Rule)

在图像识别任务中,许多工作通过将手工规则用作预处理程序来转换D^{train}中的原始示例来增强D^{train},例如变换[11、62、98、104]、翻转[87、104]、剪切[104]、缩放[62、141]、反射[29、58]、裁剪[87、141]和旋转[98、125]给定示例。

3.1.2 学习转换(Learned Transformation)

与此相反,该策略通过将原始示例复制到几个样本中来增强D^{train},然后通过所学的转换对这些样本进行修改。所学的转换本身就是E中的先验知识,而当前的FSL任务既不需要其训练样本,也不需要学习过程。

关于FSL的最早论文[76]正是利用这种策略来解决FSL图像分类问题。通过迭代地将每个样本对应于其他样本,从相似的类中学习一组几何转换。然后将这个学习的转换应用于每个(x^{(i)},y^{(i)}),以形成一个可以正常学习的大数据集。

同样,Schwartz等人[2018]从一个相似的类中学习一组自动编码器,每一个都代表一个类内变化,通过将变化添加到(x^{(i)}生成新的样本。假设所有类别在样本之间共享一般的可转换可变性,则在[44]中学习单个转换函数,将从其他类中学习的样本对之间的变化转移(通过类比)。在物体识别中,物体往往是主要的瞬态属性(transient attributes),如晴天为场景,白色为雪。相比之下,Kwitt等人[2016]使用一组独立的属性强度回归器将每个样本转换为多个新样本,这些回归器是从一组带有细粒度注释的大型场景图像中学习到的,并将这些新样本指定为原始样本的标签。基于[60],Liu等人[2018]进一步提出学习连续属性子空间,方便对x插入和嵌入任何属性变化。

3.1.3 讨论。

用手工规则复制D^{train}是任务不变的。它被广泛应用于深度模型中,以降低过适应的风险[38]。然而,深度模型通常用于大规模数据集,其中样本足以估计其粗略分布(判别式模型的条件分布或生成模型的生成分布)[78]。在这种情况下,通过更多的样本增强D^{train}可以帮助更加清晰数据分布的形状。相比之下,FSL只包含少量的监督信息,因此它的分布没有显露。直接使用这种手工制作的规则,而不考虑任务或D^{train}中可用的所需数据属性,使得分布的估计很容易偏离。因此,它只能作为图像数据的预处理步骤,而不能解决FSL问题。

至于通过学习的转换进行复制D^{train},它可以在数据驱动的情况下增加更合适的样本,并利用类似于D^{train}或任务T的先验知识。但是,需要从类似的任务中提取这些先验知识,这些任务可能并不总是可用的,而且收集起来可能会很昂贵。

3.2 借用其他数据集(Borrow From Other Data Sets)

该策略从其他数据集中借用样本,并将其调整为目标输出的样本,以便增强到D^{train}监督信息中。

3.2.1 未标记的数据集(Unlabeled Data Set)

此策略使用一组未标记的样本D^{unlabeled}作为先验知识,其中可能包含与y^{(i)}相同标签的样本。关键是要找到具有相同标签的样本,并添加它们以对D^{train}进行扩充。由于这个未标记的数据集通常很大,所以它可以包含大量的样本变化。将它们添加到D^{train}可以帮助描述更精确的Var[R(h_I)]。该策略用于视频中识别手势。从D^{train}中学习到的分类器被用来从一个大而弱监督的手势库中选择相同的手势,该库包含不同人连续手势的大变化,但手势之间没有明显的中断。然后使用这些选定的样本构建最终的手势分类器。标签传播用于直接在[27]中标记D^{unlabeled}
3.2.2 类似的数据集(Similar Data Set)
此策略通过聚合来自其他具有多个样本的类似数据集的样本对来增强D^{train}。类似地,我们的意思是这些数据集中的类是相似的,例如一个不同种类的老虎的数据集和另一个不同种类的猫的数据集。基本假设是基本假设o^*适用于所有类,类x之间的相似性可以转移到类y中。因此,可以将新样本生成为相似数据集类的样本对的加权平均值,其中权重通常是一些相似度量。考虑到D^{train}的类n,这个相似性是在第n个类和相似数据集中的每个类之间测量的。通过这种方式,D^{train}可以使用来自类似数据集的聚合样本进行扩充。相似的多样本数据集是在训练经验E中有助于学习的先验知识。这种相似性可以从文本语料库等其他信息源中提取,使用层次结构[120]。但是,由于这种相似性不是为目标任务设计的,因此可能会产生误导。此外,直接通过增加聚合样本增强D^{train}可以有很高的偏差(bias),因为这些样本不是来自目标FSL类。高等人[2018]设计了一种基于生成对抗网络(gan)[39]的方法,聚合从多样本的数据集中生成的可辨别(in-discriminable)的合成\hat{x},其中多样本数据集的每个类别的平均值和协方差都用于聚合,以允许在生成过程中有更多的可变性。多样本相似数据集的类与当前类n之间的相似性仅用x来度量。

3.2.3 Discussion

由于标记不需要人工操作,因此使用D^{unlabeled}通常很便宜。然而,伴随着这种廉价性,D^{unlabeled}的质量通常较低,例如粗糙和缺乏严格的数据集收集和审查程序,从而导致合成质量不确定。此外,从这个大数据集中选取有用的样本也很昂贵。

类似的数据集与D^{train}共享一些属性,并包含足够的监督信息,使其成为一个更具信息性的数据源。然而,确定关键属性以寻找相似的数据集可以变得更有目标性,但收集相似的数据集是很困难的。

3.3 总结

通过增强D^{train},本节中的方法达到了期望的样本复杂性S,并获得了可靠的经验风险最小化h_I。第一种方法通过转换每个原始样本(x^{(i)},y^{(i)}) \in D^{train}(通过手工定义或学习的转换规则)进行复制。它在原始样本的基础上增加了D^{train},因此构建的新样本不会离D^{train}太远。但也正是由于这个原因,考虑到D^{train}的小样本和一些转换规则,可能没有太多的组合选择。第二种方法是从其他数据集中借用样本,并对其进行调整,以模拟D^{train}中的样本。考虑到要借用的大规模数据集,无论是未标记的还是类似的,都有大量的样本用于转换。然而,如何使这些样本变得像D^{train}中的样本十分困难。

一般来说,从增强D^{train}的角度解决FSL是很简单的(straightforward)。考虑到合并了简化学习的问题的目标,可以对数据进行扩充。这种增强程序对人类来说通常是合理的。如果指导扩充的先验知识是理想的,那么它可以生成尽可能多的样本以达到所需的样本复杂性,并且可以使用任何常见的机器学习模型和算法。然而,由于p(x,y)未知,一个完美的先验知识是不可能的。这意味着增强程序不精确。估计值与ground truth之间的差距很大程度上影响了数据质量,甚至导致概念漂移。

4. 模型(Model)

模型确定假设h(.;\theta)的假设空间H;通过\theta的参数化来近似从输入x到输出y的最优假设o^*

如果用一般的机器学习模型来处理小样本D^{train},则必须选择较小的假设空间H。如(4)所示,小样本H具有较小的样本复杂性S,因此需要较少的样本进行训练[78]。当学习问题很简单时,例如,特征维度很低,一个小的H确实可以获得期望的良好学习性能。然而,由于现实世界中的学习问题通常是非常复杂的,并且由于显著的\varepsilon_{app}( H)(38),不能很好地用小H中的假设h来表示。因此,FSL优先选择大的H,这使得一般的机器学习模型不可行。正如我们将在续集中看到的那样,本节中的方法通过E中的先验知识补充缺乏的样本来学习较大的H。具体地说,利用先验知识通过约束H来影响H的设计选择。这样就降低了样本的复杂性,使经验风险最小化更为可靠,并降低了过度拟合的风险。根据所使用的先验知识,属于这类的方法可进一步分为五种策略,如表3所示。

image.png

4.1 多任务学习(Multitask Learning)

多任务学习[20]自发地学习多个学习任务,利用任务之间共享的通用信息和每个任务的特定信息。这些任务通常是相关的。例如,考虑文档分类,任务是一个特定类别的分类,例如cat。它与其他任务有一些相似之处,比如对老虎或狗的分类,这些任务可以被利用。当任务来自不同的领域时,这也被称为领域适应[38]。多任务学习通常用于存在多个相关任务的应用程序,每个任务都是有限的训练样本。因此,它可以用来解决FSL问题。在这里,我们给出了使用多任务学习解决FSL问题的一些实例。有关多任务学习的全面介绍,请参阅[142]和[95]。

形式上,给定一组R个相关的任务T_t,包括小样本和多样本的任务,每个任务T_t都以数据集D_{T_t}为基础,其中
D_{T_t}=\{ D_{T_t}^{train},D_{T_t}^{test}\},D_{T_t}^{train}=\{x_{T_t}^{(i)},y_{T_t}^{(i)}\}D_{T_t}^{test}=\{x_{T_t}^{test}\}。在这些任务中,我们把小样本任务称为目标任务,而把它们称为源任务。多任务学习从D_{T_t}^{train}学习,得到每个T_t\theta_{T_t}。由于这些任务是相关的,所以假设它们具有相似或重叠的假设空间H_{T_t}。明确地说,这是通过在这些任务之间共享参数来实现的。这些共享的参数可以被看作是一种方法来约束彼此共同学习的任务H_{T_t}。在参数共享是否被明确地强制执行方面,我们将该策略中的方法分为硬参数共享和软参数共享。关于硬参数和软参数共享的插图如图6所示。

image.png
4.1.1 硬参数共享(Hard parameter sharing)

该策略明确地在任务之间共享参数,以促进重叠H_{T_t},并且还可以为每个任务学习一个特定于任务的参数,以说明任务的特殊性。在[141]中,这是通过共享两个网络的前几层来学习源任务和目标任务的一般信息,同时学习不同的最后一层来处理每个任务的不同输出。它还提出了一种方法,只从源任务中选择最相关的样本,以有助于学习。Benaim和Wolf[2018]在域适应(domain adaptation)方面的运作方式相反。它将源任务和目标任务分别嵌入到不同的域中,将它们映射到任务不变的空间中,然后学习共享分类器来对所有任务中的样本进行分类。最后,Motian等人[2017]考虑单样本(one-shot)域转换,即在目标域中根据小样本目标任务生成源域样本。与[141]类似,它首先从源域中的源任务预先训练一个可变的自动编码器,并将其用于目标任务。然后,它共享层来捕获通用信息,即编码器部分的顶层和解码器部分的底层,并让这两个任务都具有一些特定于任务的层。目标任务只能更新其特定于任务的层,而源任务可以更新共享层和特定层。它避免了使用小样本直接更新共享层,从而降低了过拟合的风险。共享层只能通过目标任务的信息进行间接调整,以便进行翻译。

4.1.2 软参数共享(Soft parameter sharing)

此策略不显式地跨任务共享参数。相反,每个任务T_t都有自己的假设空间H_{T_t}参数\theta_{T_t}。它只鼓励不同任务的参数相似,从而产生相似的H_{T_t}结果。这可以通过{\theta_{T_t}}'s正则实现。Yan等人[2015]惩罚所有组合中的{\theta_{T_t}}'s的成对差异,迫使所有{\theta_{T_t}}都以同样的方式学习。如果给出了T_t之间的关系,则该正则化器可以成为{\theta_{T_t}}'s相似度图上的拉普拉斯图正则化器,从而指导T_t之间的信息流。除了直接正则化{\theta_{T_t}}'s外,还有一种通过调整{\theta_{T_t}}'s的通损(through loss)来强制软参数共享的方法。因此,经过优化,学习者{\theta_{T_t}}'s也可以利用彼此的信息。罗等[2017]通过预先训练的CNN学习源域中的源任务,对目标域中的目标任务初始化CNN。在训练过程中,它使用一个由多个CNN层中的表示计算出的对抗性损失来强制两个CNN映射样本到一个任务不变的空间。它还利用目标任务中未标记的数据作为数据扩充。

4.1.3 讨论

多任务学习通过一组共同学习的任务约束H_{T_t}学习每个任务T_t。通过在任务之间显式或隐式地共享参数,这些任务一起消除了那些不可行的区域。硬参数共享适用于多种类似任务,如不同类别的分类。共享假设空间用于捕获共性,而每个任务在其上构建特定的模型假设空间。这种分享的方法很容易实施。相反,软参数共享只鼓励类似的假设,这是一种更灵活的方法去约束H_{T_t}。但如何实施相似性约束需要精心设计。

4.2 嵌入学习(Embedding Learning)

嵌入学习[51,107]方法学习将x^{(i)}∈X\subseteq R^d嵌入到较小的嵌入空间z^{(i)}∈Z\subseteq R^m中学习H,在这里可以很容易地识别相似和不相似的对。嵌入函数主要是通过先验知识来学习的,还可以用来引入特定于任务的信息D^{train}

嵌入学习方法有以下几个关键组成部分:嵌入样本预测x^{test} \in D^{test}Z的函数f(.),嵌入样本x^{(i)}∈D^{train}Z的函数g(.),以及Z中的相似度度量s(·,·)。注意,x^{test} \in D^{test}x^{(i)}∈D^{train}f(.)g(.)嵌入不同。这是因为x^{(i)}∈D^{train}可以在不考虑D^{test}的情况下嵌入,而x^{test} \in D^{test}通常需要根据D^{train}中的信息嵌入,以便调整比较兴趣[13,125]。然后,通过给x^{test}分配Z中最相似的x^{(i)}∈D^{train}的类进行预测。通常使用一组数据集{D_c}'s,其中D_c^{train}=\{(x_c^(i),y_c^(i))\}{D_c}^{test} = \{x_c^{test} \}。请注意,{D_c}可以是多样本或少样本的数据集。

表4详细介绍了现有的嵌入学习方法,包括f,g和s。嵌入学习策略的说明如图7所示。接下来,根据嵌入中嵌入的信息,我们将这些方法分为任务不变(换句话说,通用的)、任务特定和两者的组合。

4.2.1 特定任务(Task-specific)

特定于任务的嵌入方法学习为D定制的嵌入函数。考虑到D^{train}小样本,通过枚举作为输入对的D^{train}示例之间的所有成对比较,可以大大降低样本的复杂性S。然后学习一个模型来验证输入对是否相同或不同y。这样,每个原始样本都可以包含在多个输入对中,从而丰富了训练经验E中的监督信息。[2017]构建D^{train}中每个(x^(i),y^(i))的排序表,相同的类排名更高而其他的更低)。一个嵌入学习通过排名损失(ranking loss)在嵌入空间Z中维护这些排名列表。

image.png
image.png
4.2.2 任务不变量(Task-invariant)

任务不变嵌入方法从一组不包含D的大数据集{D_c}'s学习嵌入函数。假设是,如果许多数据集很好地被Z上的嵌入H分隔开,那么它就足够通用,可以在不进行再训练的情况下在D上很好地工作。因此,所学的嵌入是任务不变的。Fink[2005]提出了FSL的第一种嵌入方法。它从辅助{D_c}的一个内核空间学习Z,嵌入D^{test}D^{train}Zx^{test} \in D^{test}对应到D^{train}中最近邻的类。最近的一个深度模型卷积双胞胎(siamese)网[56]学习了双卷积神经网络,将大数据集{D_c}'s中样本对嵌入到一个公共嵌入空间Z。它还使用D^{train}的原始样本构造输入对,并将分类任务重新构造为验证/匹配任务,以验证输入对的结果嵌入是否属于同一类。这个想法已经在许多嵌入式学习论文中使用,例如[13,125],以减少样本的复杂性。

4.2.3 结合任务不变量和特定任务(Combine Task-invariant and Task-specific)

任务特定的嵌入方法只根据任务的特点学习每个任务的嵌入,而任务不变的嵌入方法不需要重新训练就可以快速推广到新任务。一种趋势是将上述方法中最好的点结合起来:通过包含在D^{train}中特定于任务的信息,学习适应从先验知识中学习到的通用的任务不变嵌入空间。唐等[2010]首先提出以微集(micro-sets)的名义对FSL任务的分布(distribution)进行优化。它通过逻辑投影从这些FSL任务中学习Z。然后对给定的D^{train}x^{test} \in D^{test},用Z上的最近邻分类器对x^{test} \in D^{test}进行分类。

近年来的研究主要采用元学习的方法,将任务不变的知识与特定于各任务的结合起来。对于这些方法,{D_c}'s是元训练数据集,新任务(new task)是元测试任务之一。我们根据核心思想进行分组,突出代表性的工作。

(1)Learnet

(1)【13】通过将每个任务的数据训练的特性结合到z来改进卷积连体网络【56】,它学习元学习者将范例映射到卷积连体网络中每个层的参数。然而,元学习者需要大量的参数来捕获映射。为了降低计算成本,Bertineto等人[2016]将卷积连网中各层权重矩阵分解,从而减少元学习者的参数空间。为了进一步减少学习者的参数个数,赵等。[2018]预先训练一组大的基础过滤器,元学习者只需将示例映射到组合权重,以线性组合这些基础过滤器,以供学习者使用。最近的著作[12]用岭回归代替了Learnet的最后一个分类层。元学习者现在学习条件卷积连体网络和岭回归中的超参数。每一个学习者只需使用他们的嵌入式计算参数岭回归封闭形式的解决方案。注意,learnet执行成对匹配,以确定提供的样本对是否来自同一类,如[56]所示。相比之下,[143]和[12]都直接对样品进行分类。这是更有效的执行预测。但是如果类的数量发生变化,模型需要重新训练。

(2)Matching Nets

将xtest∈dtest赋给z中最相似的x(i)∈dtrain,其中xtest和x(i)由和嵌入不同。元学习者从dt's学习And的参数,学习者是最近邻分类器。学习后,可以使用学习的元学习器进行新的任务和数据集,并直接执行最近邻搜索。特别是,中的信息被所谓的完全条件嵌入(fce)所利用,其中;是强加给CNN的一个LSTM,并注意其中的所有例子;是CNN之上的一个双向LSTM。然而,使用双向lstm学习隐含地在示例中强制执行一个顺序。由于消失梯度问题,相邻实例之间的影响较大。为了消除不自然的秩序,Altae Tran等人[2017]将lstm中使用的bilstm替换为关注,并进一步迭代优化和编码上下文信息。特别是,它涉及分子结构,因此预先使用GCN而不是CNN来提取样品特征。[7]中的主动学习变体扩展了匹配网络[125]和样本选择阶段,该阶段可以标记最有益的未标记样本,并将其添加到匹配网

(3)Prototypical Networks (ProtoNet)

将xtest分配给z中最相似的类原型,因此只需要在和中的每个类之间进行一次比较。N类的原型被定义为该类的嵌入的平均值,即CN=K1K KK=1,其中XI是TH类的一个例子。这样就不存在阶级失衡问题。然而,它只能捕获平均值,而方差信息会被丢弃。半监督变量[93]学习软分配相关的未标记样本以在学习过程中进行增强。Protonet既嵌入了CNN,又使用了相同的CNN,忽略了不同的CNN的特点,而LSTM在匹配网络中的应用使得很少上课变得困难。注意到,在[128]中提出了匹配网和原网的最佳组合。它使用与匹配网络中相同的方法,而计算的则会将注意力集中到LSTM中。在最近邻搜索中,为了降低计算成本,还对和进行了比较。同时考虑任务相关信息,Orsekhin等人[2018]Average’s作为任务嵌入,然后映射到Protonet中使用的CNN的缩放和偏差参数。*原型网络

(4)Relative representations

进一步嵌入xtest和从dtrain共同计算的每个cca,然后直接映射到相似得分类分类。这个想法是在专注的反复比较法(ARC)[104]和关系网[110]中独立开发的。ARC使用一个RNN来反复比较原型和每个类的不同区域,并生成相对表示,另外使用bilstm嵌入其他比较的信息作为最终嵌入。关系网first使用cnn嵌入和z,简单地将它们作为相对表示连接起来,并由另一个cnn输出相似性得分。相对表示法

(5) Relation graph

(5)取代从样本中获得的排名表[117]。这个图是用和作为节点的样本构造的,而它在节点之间的边缘是由一个已知的相似函数决定的。要建立关系图,必须使用转导学习,在培训期间提供的地方。然后利用邻域信息进行预测。在[99]中,使用GCN学习('s from)与测试示例之间的关系图,并使用节点的结果嵌入进行预测。相比之下,Liu等人[2019]meta学习了一个嵌入函数,它将每个函数映射到z,相应地在那里构建一个关系图,并通过封闭形式的标签传播规则标记。

(6) SNAIL

设计了一种特殊的嵌入网络,由交错的时间卷积层和注意层组成。时间卷积用于从过去的时间步骤中收集信息,注意有选择地关注与当前输入相关的特定时间步骤。在每个任务中,网络都会(按顺序进行,并立即进行预测)。然后对网络参数进行跨任务优化。

4.2.4 讨论

任务特定嵌入充分考虑了D的领域知识,但是,由于给定的D^{train}的中几个样本有偏差,它们可能不是合适的代表。在D^{train}上建模排名表中有很高的过度拟合风险。那么得到的模型可能不会工作得很好。此外,通过这种学习方式学习到的H不能泛化到新任务,也不容易适应。

学习任务不变嵌入是指在不重新训练的情况下,对新任务使用预先训练的一般嵌入。显然,新的FSL任务的计算成本很低。但是,所学的嵌入函数不考虑任何特定于任务的知识D。对于一般的共同任务,他们遵守共同的规则。但由于包含小样本的D^{train}具有特殊性,直接应用任务不变嵌入函数可能不太合适。

结合任务不变嵌入方法的效率和任务特定嵌入方法所集中的任务特性,通常采用元学习方法来实现。学习使用元学习可以对通用任务的分布进行建模,并捕获它们的通用信息。这样,学习者就可以提供一个良好的H,对不同的任务进行快速的泛化。学习者通常执行最近邻搜索来对x^{test} \in D^{test}分类。该非参数模型不需要从D^{train}中学习参数,适合于小样本学习。一个缺点是,元学习方法通常假定任务相似。然而,没有审查步骤来保证这一点。如何在引入负迁移(negative transfer)的无关的任务中对新的类进行泛化,以及如何避免无关的任务污染元学习者还不确定。

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