【李宏毅課程筆記】BERT and its family - ELMo, BERT, GPT, XLNet, MASS, BART, UniLM, ELECTRA, and more

Video: https://www.youtube.com/watch?v=1_gRK9EIQpc&feature=youtu.be
拦键,https://www.youtube.com/watch?v=Bywo7m6ySlk&feature=youtu.be
Slides: http://speech.ee.ntu.edu.tw/~tlkagk/courses/DLHLP20/BERT%20train%20(v8).pdf

Overview

過(guò)去的NLP任務(wù)通常是一個(gè)任務(wù)一個(gè)模型,但如今已然邁向希望機(jī)器在general地了解人類(lèi)語(yǔ)言之后,再去解各式各樣地任務(wù)翎朱。一個(gè)常見(jiàn)地做法是:根據(jù)大量的沒(méi)有標(biāo)注的文本訓(xùn)練一個(gè)模型侄泽,使其可以“讀懂”人類(lèi)文字懈贺,通常將這一過(guò)程稱(chēng)為Pre-train犀忱;接下來(lái),針對(duì)某個(gè)想要解決的特殊任務(wù)拜银,可以搜集相對(duì)較少的任務(wù)特定的帶有標(biāo)注的資料對(duì)剛剛訓(xùn)練好的模型進(jìn)行微調(diào)殊鞭,從而實(shí)現(xiàn)讓機(jī)器解各式各樣的任務(wù),該過(guò)程稱(chēng)為Fine-tune尼桶。

以芝麻街角色命名的模型

ELMo(Embeddings from Language Model)
BERT(Bidiractional Encoder Representations from Transformers)
ERNIE(Enhanced Representation through Knowledge Integration)
Grover(Generating aRticles by Only Viewing mEtadata Records)
BERT & PALs(Projected Attention Layers)

What is pre-train model

Why Pre-train Models

GLUE Scores(反映了模型了解人類(lèi)語(yǔ)言的能力)顯示加入Pre-train Model后操灿,在GLUE Benchmark Corpus上,機(jī)器的能力與人類(lèi)已經(jīng)不相上下了泵督。

More Reference:https://arxiv.org/abs/1908.05620

之前的Pre-train Model

期望將每一個(gè)輸入的token表示為一個(gè)embedding vector绽族,用于表示該token的語(yǔ)義没陡,意思相近的token擁有相近的embedding唯沮,embedding的某些維度應(yīng)當(dāng)可以看出與語(yǔ)義的關(guān)聯(lián)性咆蒿。

將token映射為embedding的做法包括:simply a table look-up(如Word2vec、Glove)秩冈、English word as token(如FastText本缠,以英文字母作為輸入,輸出整個(gè)單詞的向量)入问、將中文的字作為Image丹锹,通過(guò)字的偏旁部首學(xué)習(xí)字的語(yǔ)義……

以上模型均存在沒(méi)有考慮token上下文的缺點(diǎn),繼而產(chǎn)生了Contextual Word Embedding的概念芬失,ELMo卷仑、BERT都屬于這一類(lèi)。同樣都是每一個(gè)token對(duì)應(yīng)一個(gè)embedding麸折,但contextual Word Embedding會(huì)在看完整個(gè)句子之后再輸入句子中每個(gè)token特有的embedding。

Contextual Word Embedding

模型結(jié)構(gòu)類(lèi)似于Encoder粘昨,這樣的模型通常都由多層構(gòu)成垢啼,內(nèi)部可以使用LSTM(ELMo)窜锯、Self-attention layers(BERT)、Tree-based model(編碼語(yǔ)法信息芭析,但這類(lèi)方法尚未流行)锚扎。

Make model smaller

針對(duì)BERT發(fā)展而來(lái)的Smaller Model:Distill BERT、Tiny BERT馁启、Mobile BERT、Q8BERT惯疙、ALBERT

How to make model smaller翠勉?:Network pruning、knowledge distillation霉颠、Parameter Quantization对碌、Architecture Design

Excellent Reference:http://mitchgordon.me/machine/learning/2019/11/18/all-the-ways-to-compress-BERT.html

Network Architecture

大多新架構(gòu)目標(biāo)都是想讓機(jī)器可以讀更長(zhǎng)的sequence(一篇文章甚至一整本書(shū)),例如:
Transformer-XL: Segment-Level Recurrence with State Reuse

還有一些架構(gòu)期望可以減少self-attention所帶來(lái)的運(yùn)算量(n^2)蒿偎,例如:
Reformer朽们、Longformer

How to fine-tune

在有了Pre-train Model之后,我們希望在上面疊一些Task-specific的部分诉位,從而將這個(gè)完整的模型用于特定的NLP任務(wù)上骑脱。接下來(lái)的問(wèn)題就是對(duì)Pre-Train Model進(jìn)行適當(dāng)修改,使其可以解決不同類(lèi)型的NLP問(wèn)題苍糠。

對(duì)于輸入是multiple sentences的情況叁丧,如QA問(wèn)題中的Query-Document,NLI問(wèn)題中的Premise和Hypothesis椿息,通常做法是在兩個(gè)sentence中添加一個(gè)特殊token“<SEP>”歹袁,用作兩個(gè)語(yǔ)句之間的分割。

對(duì)于輸出one class的情況寝优,BERT中的做法是在輸入中添加token“<CLS>”条舔,在pretrain時(shí)對(duì)于<CLS>,需要在該位置輸出與整個(gè)句子有關(guān)的embedding乏矾,繼而將這個(gè)embedding輸入到task specific model(可以是簡(jiǎn)單的Linear Transform孟抗,也可以是很復(fù)雜的變換模型)中進(jìn)行分類(lèi)。也有做法是不引入特殊token钻心,而是將所有token的embedding作為輸入進(jìn)行分類(lèi)凄硼。

對(duì)于輸出是class for each token的情況,則將每個(gè)token對(duì)應(yīng)的embedding輸入Task Specific Model(可以是LSTM)中捷沸,為每一個(gè)token輸出一個(gè)class摊沉。

對(duì)于輸出需要copy from input的情況,如Extraction-based QA任務(wù)痒给,輸入Document和Query说墨,輸出兩個(gè)非負(fù)整數(shù)s和e表示問(wèn)題答案為Document中的第s個(gè)word到第e個(gè)word中的內(nèi)容骏全。BERT中的做法是分別使用兩個(gè)向量表示s和e,依次與document中的每個(gè)token的embedding向量做dot product尼斧,最終經(jīng)過(guò)softmax得到s和e的位置姜贡。

對(duì)于輸出是General Sequence的情況,即如何將pre-train model用于Seq2seq model中棺棵,最直覺(jué)的做法是將pre-train model作為encoder楼咳,將Task Specific Model作為Decoder,這樣做的缺點(diǎn)是Task Specific Model是沒(méi)有經(jīng)過(guò)Pre-Train的烛恤,因?yàn)橛糜赥ask Specific Model的帶標(biāo)注的數(shù)據(jù)沒(méi)有很多母怜,因此我們期望Task Specific越小越好,整個(gè)模型中的多數(shù)參數(shù)都是Pre-train過(guò)的棒动。另一種可行做法是糙申,在輸入input sequence后,再輸入一個(gè)特殊token“<SEP>”船惨,該token位置輸出的embedding將被輸入一個(gè)Task Specific Model中柜裸,得到output sequence的第一個(gè)詞匯,接下來(lái)再將這個(gè)詞匯丟到Pre-TrainModel中粱锐,循環(huán)往復(fù)疙挺,依次得到output sequence的所有詞匯,直到輸出“<EOS>”怜浅,從而實(shí)現(xiàn)將Pre-train Model作為Decoder使用铐然。

具體的Fine-tune過(guò)程有兩種做法:第一種是將訓(xùn)練好的Pre-trained Model作為Feature Extractor,即所有參數(shù)將被固定恶座,只對(duì)Task-specific Model進(jìn)行Fine-tune搀暑;另一種做法是對(duì)Pre-trained Model和Task-specific Model同時(shí)進(jìn)行Fine-tune。實(shí)驗(yàn)表明后者performance更佳跨琳。

然而自点,對(duì)Pre-trained Model和Task-specific Model同時(shí)Fine-tune可能會(huì)遇到以下問(wèn)題:同一個(gè)Pre-trained Model經(jīng)過(guò)不同任務(wù)下的fine-tune會(huì)變得不一樣,每一個(gè)任務(wù)都需要保存一個(gè)新模型脉让,這樣的模型如今往往非常巨大桂敛,因此產(chǎn)生了Adaptor的概念。其主要思想在于對(duì)Pre-trained Model進(jìn)行微調(diào)時(shí)溅潜,只調(diào)其中還的一部分术唬,做法是在Pre-trained Model中加入一些layers,稱(chēng)為Adaptor滚澜,只有Adaptor部分會(huì)連同Task-Specific Model進(jìn)行Fine-tune粗仓,從而大大減小了存儲(chǔ)模型所需的空間。Adaptor的架構(gòu)仍是一個(gè)值得研究的問(wèn)題。另一種做法是考慮到Pre-trained Model中的不同層可能抽取特征的側(cè)重有所不同借浊,因此對(duì)不同層的輸出做Weighted Sum眶掌,這里的權(quán)重則是下游特定任務(wù)所要學(xué)習(xí)的,加權(quán)求和后的結(jié)果輸出到Task-Specific Model中巴碗,這樣的做法稱(chēng)為Weighted Features

How to pre-train

Target:期望輸出每個(gè)token的contextual embedding vector即寒。

Pre-training by Translation

Context Vector(CoVe):將Pre-train Model視為T(mén)ranslation的Encoder橡淆,準(zhǔn)備另一個(gè)Model作為Decoder,實(shí)現(xiàn)Language A到Language B的翻譯母赵。選擇翻譯任務(wù)用于Pre-train直觀上便于獲得每個(gè)token的representation逸爵,但該任務(wù)需要大量的pair data(Language A和Language B的語(yǔ)句對(duì)),這樣的收集任務(wù)是比較困難的凹嘲,因此我們期望基于唾手可得的沒(méi)有標(biāo)注的文字(Text without annotation)訓(xùn)練得到pre-train model师倔。這樣的方法之前稱(chēng)為Unsupervised Learning,但近年來(lái)更常被叫做Self-supervised Learning周蹭。

Self-supervised Learning

:In self-supervised learning, the system learns to predict part of its input from other parts of its input.

Predict Next Token

Predict next Token任務(wù)是Self-supervised learning的經(jīng)典做法之一趋艘,輸入token w_t,經(jīng)過(guò)pre-trained model得到該token的representation h_t凶朗,經(jīng)過(guò)Linear Transform(也可以是更復(fù)雜的層)和softmax得到一個(gè)over token的probability distribution瓷胧,訓(xùn)練目標(biāo)是輸出得到的probability distribution和target之間的cross entropy越小越好,這里的target就是w_{t+1} 棚愤,即期望token w_{t+1}的probability為1搓萧,而其它token的probability為0。

在設(shè)計(jì)Predict next token任務(wù)的model時(shí)宛畦,需要注意不能一次性將所有的token輸入進(jìn)模型瘸洛,否則在預(yù)測(cè)時(shí)模型可能會(huì)直接將輸入中當(dāng)前token的下一token作為h_t進(jìn)行接下來(lái)的預(yù)測(cè),這樣的模型就無(wú)法學(xué)到需要的東西次和。

Predict next Token是早期的Unsupervised pre-train model反肋,而Language Model(LM)要做的事情正是Predict next token,所以上述Model正是一個(gè)Language Model斯够。早期一般采用LSTM作為模型架構(gòu)進(jìn)行pre-train囚玫,其中最著名的就是ELMo,類(lèi)似的還有Universal Language Model FIne-tuning(ULMFiT)读规。如今很多模型傾向于使用Self-attention替代LSTM抓督,例如GPT、GPT-2束亏、Megatron铃在、Turing NLG等等。但在使用self-attention時(shí),需要注意控制attention的范圍定铜,因?yàn)閟elf-attention會(huì)將整個(gè)sequence平行的讀入阳液,每一個(gè)位置都會(huì)attend到其它位置,而當(dāng)前任務(wù)的需求是只需要attend到當(dāng)前token位置來(lái)對(duì)下一位置的token進(jìn)行預(yù)測(cè)揣炕,以此避免model在attention時(shí)看到未來(lái)token的答案帘皿。

Predict Next Token除了可以獲得pre-train model繼而進(jìn)行fine-tune之外,因其作為一個(gè)Language Model畸陡,尤其適用于生成任務(wù)(do generation)鹰溜。

Predict Next Token - Bidirectional

在predict next token任務(wù)中,h_t包含了從w_1w_tw_t and its left context)的信息丁恭。ELMo額外考慮了right context的信息曹动。在ELMo中,會(huì)基于正向的LSTM由w_1,\dots,w_t得到一個(gè)embedding去預(yù)測(cè)w_{t+1}牲览,基于逆向的LSTM由w_n,\dots,w_{t+1}得到另一個(gè)embedding去預(yù)測(cè)w_t墓陈,ELMo會(huì)將這兩個(gè)embedding拼接起來(lái)作為w_t的contextual representation,由此這個(gè)representation考慮了整個(gè)sequence蘊(yùn)含的信息第献。

但ELMo存在的問(wèn)題是贡必,正反向編碼的過(guò)程彼此獨(dú)立,簡(jiǎn)單的拼接過(guò)程使得left context和right context并不存在任何交集痊硕,BERT針對(duì)這一問(wèn)題進(jìn)行了改善赊级。

Masking Input

BERT會(huì)將輸入中的部分token“蓋住”,一種做法是將要蓋住的token替換為一個(gè)特殊的token “<MASK>”岔绸,另一種做法是替換為隨機(jī)采樣的token理逊,此時(shí)pre-train model要做的就是根據(jù)被蓋住位置輸出的embedding預(yù)測(cè)被蓋住的token是什么。BERT使用的Network架構(gòu)為T(mén)ransformer盒揉,其中的self-attention每一個(gè)位置是會(huì)attend到其它所有位置的晋被,而不同于之前Predict next Token任務(wù)中需要加以限制,因?yàn)橐A(yù)測(cè)的內(nèi)容已經(jīng)過(guò)mask處理刚盈,因此不必?fù)?dān)心會(huì)看到答案羡洛。

BERT的想法和之前Word2Vec中的CBOW方法基本思想很相似,但CBOW可以看到的鄰接token受限于固定的窗口長(zhǎng)度藕漱,另外BERT采用了較復(fù)雜的模型欲侮,而CBOW只是經(jīng)過(guò)簡(jiǎn)單到的Projection和Output兩層操作,即簡(jiǎn)單的線性變換進(jìn)行預(yù)測(cè)肋联。

原始BERT中需要MASK的token是隨機(jī)決定的威蕉,但隨機(jī)決定的mask token可能無(wú)法學(xué)到特別long term的dependency,因此有人提出了新的mask方案橄仍。例如Whole Word Masking(WWM)韧涨,即每次mask的是一個(gè)完整的詞而非字或更小的單位級(jí)別牍戚。類(lèi)似的還有短語(yǔ)級(jí)別的(phrase-level)和實(shí)體級(jí)別的(Entity-level,需要先做NER)的mask方案虑粥,這便是ERNIE采用的方案如孝。還有一種MASK方案稱(chēng)為SpanBert,每次mask掉一定范圍長(zhǎng)度的token娩贷,不同的范圍長(zhǎng)度對(duì)應(yīng)不同的mask機(jī)率第晰。

SpanBert —— Span Boundary Objective(SBO)

該目標(biāo)是根據(jù)mask span的左右相鄰的兩個(gè)token,給定一個(gè)要預(yù)測(cè)的mask span的相對(duì)位置彬祖,預(yù)測(cè)該位置的token(例如被mask了范圍長(zhǎng)度為4的tokens但荤,預(yù)測(cè)這個(gè)范圍內(nèi)的第三個(gè)token)。設(shè)計(jì)這樣的目標(biāo)是期望一個(gè)span其左右兩邊的token embedding包含其內(nèi)部整個(gè)span的信息涧至,SBO會(huì)對(duì)coference類(lèi)的任務(wù)有好處。

XLNet

XL指的是Transformer-XL桑包,該架構(gòu)可以跨segment獲取信息南蓬,采用relative position embedding。XLNet強(qiáng)調(diào)原始BERT存在的一個(gè)問(wèn)題是:假設(shè)給定句子“This is New York city”哑了,原始BERT會(huì)將“New”和“York”兩個(gè)token同時(shí)蓋住赘方,從而無(wú)法學(xué)習(xí)這兩個(gè)token間的相互預(yù)測(cè),即“New”和“York”會(huì)彼此獨(dú)立的被預(yù)測(cè)出來(lái)弱左,缺少這兩個(gè)詞之間的dependency(實(shí)際上如果是random sample窄陡,該問(wèn)題應(yīng)該沒(méi)有那么嚴(yán)重)。從Language Model的角度來(lái)看拆火,XLNet通過(guò)隨機(jī)打亂sequence內(nèi)部token的順序解決一般LM中只獲取left context信息的問(wèn)題跳夭;從BERT的角度出發(fā),XLNet并非根據(jù)整個(gè)sentence去預(yù)測(cè)被mask的內(nèi)容们镜,而是根據(jù)整個(gè)sentence隨機(jī)決定的一部分以及被mask的部分的位置信息(不包含被mask的部分內(nèi)容信息)去預(yù)測(cè)被MASK的內(nèi)容币叹。

BERT cannot talk?

對(duì)于傳統(tǒng)的autoregressive model(從左到右生成句子的情況模狭,不過(guò)近期已有一些non-autoaggressive的做法)颈抚,BERT相較LM而言能力有所欠缺,即BERT缺乏generation的能力嚼鹉,或許不太適合作為seq2seq任務(wù)的pre-train model贩汉,對(duì)于這類(lèi)任務(wù),bert可能只能作為encoder锚赤,decoder部分并沒(méi)有被pre-train到匹舞。為了基于self-supervised learning的方法實(shí)現(xiàn)整個(gè)seq2seq model的pretrain,首先輸入一個(gè)word sequence進(jìn)入encoder宴树,decoder通過(guò)attention從encoder中獲取信息策菜,輸出另一個(gè)word sequence,此時(shí)的目標(biāo)是reconstruct the input,即輸出的是原來(lái)的word sequence又憨。此時(shí)就需要對(duì)輸入部分進(jìn)行corrupted操作翠霍,也就是一定程度的破壞。MASS(MAsked Sequence to Sequence pre-training)BART(Bidirectional and Auto-Regressive Transformers)就是針對(duì)訓(xùn)練可以pre-train的seq2seq model時(shí)可采用的corrupt操作展開(kāi)研究蠢莺。MASS的思想類(lèi)似于原始BERT寒匙,random mask掉部分token,此時(shí)MASS只要求還原被mask的部分躏将;BART除了mask之外锄弱,還嘗試了delete、permutation祸憋、rotation会宪、Text Infilling(隨機(jī)插入不代表任何token的mask或以一個(gè)mask蓋住多個(gè)token)等操作對(duì)input進(jìn)行corrupt,實(shí)驗(yàn)結(jié)果表明permutation和rotation效果不佳蚯窥,Text Infilling效果最佳掸鹅。

UniLM可以同時(shí)作為ENcoder、Decoder和Seq2Seq拦赠,該模型同時(shí)進(jìn)行Bidirectional LM(同BERT)巍沙、Left-to-Right LM(同GPT,此時(shí)內(nèi)部的attention需要加以限制荷鼠,以避免看到未來(lái)的token)句携、Seq2Seq LM(同BART和MASS,將輸入分為兩份部分允乐,第一部分中的attention可以直接做self-attention矮嫉,而第二個(gè)部分中的token只能看到left context)三種訓(xùn)練。

ELECTRA

上述pre-train的方法都是預(yù)測(cè)某些token牍疏,這樣的預(yù)測(cè)需要的運(yùn)算量敞临、訓(xùn)練強(qiáng)度是很大的。ELECTRA(Efficiently Learning an Encoder that Classifies Tken Replacements Accurately)避開(kāi)預(yù)測(cè)任務(wù)麸澜,只回答binary的問(wèn)題挺尿。對(duì)于輸入的token sequence,ELECTRA會(huì)將其中部分token置換成其它詞匯炊邦,輸出結(jié)果則是當(dāng)前單詞是否被置換编矾。這樣做的好處是:預(yù)測(cè)yes/no會(huì)比reconstruction要簡(jiǎn)單得多,同時(shí)每一個(gè)position在輸出時(shí)都是需要的(而B(niǎo)ERT只對(duì)被mask的部分進(jìn)行預(yù)測(cè))馁害。該問(wèn)題的難點(diǎn)在于如何進(jìn)行恰當(dāng)?shù)闹脫Q窄俏,使其僅在語(yǔ)義上有所偏差,這里是使用了一個(gè)small BERT去預(yù)測(cè)將要替換的部分碘菜。

Sentence Level

上述pre-train都是給每個(gè)token一個(gè)embedding凹蜈,接下來(lái)我們希望給整個(gè)input tokens sequence一個(gè)global embedding限寞。可以采用Skip Thought的想法仰坦,輸入一個(gè)sentence履植,經(jīng)過(guò)encoder編碼為一個(gè)embedding,decoder根據(jù)這個(gè)embedding對(duì)下一句進(jìn)行預(yù)測(cè)悄晃,然而這種方法訓(xùn)練的運(yùn)算量往往比較大玫霎。另一個(gè)進(jìn)階版本稱(chēng)為Quick Thought,該方法同ELECTRA一樣盡量避開(kāi)generation這一計(jì)算量較大的工作妈橄,將兩個(gè)句子分別通過(guò)Encoder得到各自的embedding庶近,如果兩個(gè)句子是相鄰的,我們就讓它們的embedding距離越相近越好眷蚓。

在原始BERT中鼻种,存在<CLS> token,我們正期望該位置輸出的embedding代表整個(gè)input token sequence的信息沙热,因此期望能有一個(gè)global task普舆,由此BERT采用的是NSP(Next Sequence Prediction)任務(wù),輸入兩個(gè)句子校读,用<SEP>隔開(kāi),<CLS>位置輸出的embedding會(huì)經(jīng)過(guò)一個(gè)Linear Classifier預(yù)測(cè)兩個(gè)句子是否相接祖能。但RoBERTa(Robustly optimized BERT approach)以及XLNET均提出NSP任務(wù)結(jié)果不盡如人意歉秫。另一種方法叫做SOP(Sentence order prediction),即輸入兩個(gè)相接的句子养铸,模型會(huì)輸出yes雁芙,而當(dāng)將這兩個(gè)句子調(diào)換順序輸入時(shí),模型會(huì)輸出No钞螟,該任務(wù)被用于ALBERT中兔甘。另一種方法structBERT,也稱(chēng)為Alice鳞滨,其中結(jié)合使用了NSP和SOP的方法洞焙。

如何比較各種pre-train方法?

Google提出T5(Transfer Text-to-Text Transformer)對(duì)各種pre-train方案進(jìn)行了比較試圖得到一系列結(jié)論拯啦,其中用了一個(gè)名為C4(Colossal Clean Crawled Corpus)的語(yǔ)料庫(kù)

More Model

Enhanced Language RepresentatioN with Informative Entities(ERNIE)希望在pre-train時(shí)加入external knowledge澡匪。即BERT + External Knowledge = ERNIE。

Audio BERT褒链,語(yǔ)音版的BERT唁情。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市甫匹,隨后出現(xiàn)的幾起案子甸鸟,更是在濱河造成了極大的恐慌惦费,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,602評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件抢韭,死亡現(xiàn)場(chǎng)離奇詭異薪贫,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)篮绰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)后雷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人吠各,你說(shuō)我怎么就攤上這事臀突。” “怎么了贾漏?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,878評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵候学,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我纵散,道長(zhǎng)梳码,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,306評(píng)論 1 279
  • 正文 為了忘掉前任伍掀,我火速辦了婚禮掰茶,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蜜笤。我一直安慰自己濒蒋,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評(píng)論 5 373
  • 文/花漫 我一把揭開(kāi)白布把兔。 她就那樣靜靜地躺著沪伙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪县好。 梳的紋絲不亂的頭發(fā)上围橡,一...
    開(kāi)封第一講書(shū)人閱讀 49,071評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音缕贡,去河邊找鬼翁授。 笑死,一個(gè)胖子當(dāng)著我的面吹牛晾咪,可吹牛的內(nèi)容都是我干的黔漂。 我是一名探鬼主播,決...
    沈念sama閱讀 38,382評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼禀酱,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼炬守!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起剂跟,我...
    開(kāi)封第一講書(shū)人閱讀 37,006評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤减途,失蹤者是張志新(化名)和其女友劉穎酣藻,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體鳍置,經(jīng)...
    沈念sama閱讀 43,512評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡辽剧,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了税产。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片怕轿。...
    茶點(diǎn)故事閱讀 38,094評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖辟拷,靈堂內(nèi)的尸體忽然破棺而出撞羽,到底是詐尸還是另有隱情,我是刑警寧澤衫冻,帶...
    沈念sama閱讀 33,732評(píng)論 4 323
  • 正文 年R本政府宣布诀紊,位于F島的核電站,受9級(jí)特大地震影響隅俘,放射性物質(zhì)發(fā)生泄漏邻奠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評(píng)論 3 307
  • 文/蒙蒙 一为居、第九天 我趴在偏房一處隱蔽的房頂上張望碌宴。 院中可真熱鬧,春花似錦蒙畴、人聲如沸贰镣。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,286評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至董朝,卻和暖如春鸠项,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背子姜。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,512評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工祟绊, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人哥捕。 一個(gè)月前我還...
    沈念sama閱讀 45,536評(píng)論 2 354
  • 正文 我出身青樓牧抽,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親遥赚。 傳聞我的和親對(duì)象是個(gè)殘疾皇子扬舒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評(píng)論 2 345