吳恩達Deep Learning學習筆記——第五課 序列模型

目錄鏈接:吳恩達Deep Learning學習筆記目錄

?1.循環(huán)序列模型
?2.自然語言處理與詞嵌入
?3.序列模型和注意力機制

1. 循環(huán)序列模型

??序列模型所要解決的問題是,如何來處理具有序列化特點的數(shù)據(jù)膏潮。如下圖糕簿,是序列化數(shù)據(jù)及我們需要從序列化數(shù)據(jù)中所獲取的結果呐矾。如在一段音頻中,音頻是按時序播放的纲仍,無論是音頻中的單詞還是音調(diào),都是有序的,如果希望從一段音頻中养筒,將其說說的話轉化為一個文字性的描述,這是一個序列化到序列化的過程端姚。

??1.1 符號約定

??如下圖是一個最簡單的序列描述:

x為樣本(一個句子)晕粪,y要在人名的地方輸出1,其余為0渐裸。第i個樣本標記為x(i)巫湘,第i個樣本第t個單詞標記為x(i)<t>,y同理昏鹃。Tx為樣本長度∩蟹眨現(xiàn)在解決了一個序列的表示方式,那么具體的一個x(i)<t>應該如何表述呢洞渤,也就是說阅嘶,一個單詞需要表示成什么,使得可以將句子輸入到模型中去處理(計算機只能處理數(shù)字,不能像人一樣去理解文字讯柔,所以需要將單詞轉化為數(shù)字抡蛙,但數(shù)字需要具有意義)。
??一種最粗暴的方法是魂迄,如下圖所示粗截,構建一個詞表(現(xiàn)假設10000詞),通過one-hot對每個單詞進行編碼捣炬,將單詞數(shù)字化熊昌。這樣的編碼簡單有效,但存在幾個問題遥金,①每個單詞的編碼長度與詞表長度等長浴捆,而且非常稀疏,計算代價太高稿械;②通過one-hot編碼后选泻,相鄰單詞之間距離相同,每個單詞獨立美莫,這將造成語義相近的單詞之間毫無關聯(lián)页眯。

??1.2 循環(huán)神經(jīng)網(wǎng)絡基礎

??如果采用一個標準的神經(jīng)網(wǎng)絡來處理文本序列,如下圖厢呵,相對于將每個詞向量作為一個特征窝撵,將整個句子作為一個樣本作為輸入,而輸出是一個與句子等長的向量襟铭。這樣的模型存在兩個問題:①輸入和輸出長度恒等碌奉,但在實際的文本序列中,基本上每個樣本的長度是不等的寒砖;②在文本的不同位置特征是不共享的赐劣,而在標準網(wǎng)絡中統(tǒng)計的位置信息,而這些位置上的特征類似(如可能在標準網(wǎng)絡中輸出是在2-5哩都,10-15等這些位置上大概率是人名魁兼,但在實際文本中,人名可能出現(xiàn)在任何主語漠嵌、賓語的位置咐汞,而標準網(wǎng)絡無法推斷語義結構及其語義)。

??循環(huán)神經(jīng)網(wǎng)絡用于解決上述兩個問題儒鹿。如下圖化撕,首先將一個樣本的第一個詞向量輸入計算模型,然后嘗試輸出第一個詞向量是否是人名挺身,與此同時輸出一些信息a1侯谁;隨后將下一個詞向量和上一個輸出信息共同輸入計算模型,用于預測第二個詞向量是否是人名。在模型計算過程中墙贱,每個詞向量輸入的是同一個模型热芹,也就是參數(shù)是相同的(而不是標準網(wǎng)絡中一個詞向量對應一套參數(shù))。通過這種結構惨撇,在預測某個單詞是否是人名時伊脓,將會考慮前面單詞給出的信息,在一定程度上魁衙,相對于在理解序列本身的意義报腔。但這就存在一個缺點,只考慮的前面的單詞剖淀,未考慮后面的單詞纯蛾。這個缺點通過后述的雙向循環(huán)神經(jīng)網(wǎng)絡(BRNN)來處理這個問題。
??循環(huán)神經(jīng)網(wǎng)絡中x纵隔、a翻诉、y的計算如下,首先計算a捌刮,然后計算y碰煌。每個詞向量計算參數(shù)相同。
??簡化計算公式標識绅作,如假設Waa維度為(100,100)芦圾,Wax維度為(100,10000)俄认,根據(jù)矩陣分塊優(yōu)化个少,將兩個矩陣并列組合為Wa,而a和x則并行組合:

??1.3 循環(huán)神經(jīng)網(wǎng)絡反向傳播

??首先眯杏,在前向傳播過程中稍算,將相同的參數(shù)Wa、Wy都賦予給每一步的計算役拴,向前依次計算每個詞的預測結果和loss,然后將每個詞的loss求和得到Loss钾埂。反向時河闰,通過Loss反向傳遞給每個loss,每個loss傳遞給每個預測值褥紫,每個預測值再傳遞給Wa和Wy姜性。

??1.4 不同類型循環(huán)神經(jīng)網(wǎng)絡

??前述過程中,是輸出一個與輸入序列等長的輸出髓考,而在實際問題中部念,輸出的長很可能與輸入序列長度不同。如文本情感評價中,文本是一個長序列儡炼,而輸出只是一個評分妓湘。又如將一句英語翻譯為一句漢語,輸入序列長度一般與輸出不等乌询。在人名識別中是一種多對多的結構榜贴,而在文本評分中則是一個多對一的結構(如輸入影評,對該影評預測一個評分作為對電影的評分)妹田,此外還有一對一唬党,一對多的情況。而多對多的還有一種情況鬼佣,如翻譯過程:

??1.5 語言模型和序列生成

??給出一個語料庫(包含很多句子)驶拱,基于語料庫的訓練,在輸入一個詞后晶衷,如何自動生成文本蓝纲?通過RNN可以實現(xiàn)這個功能。首先對句子的標記進行處理房铭,對于未出現(xiàn)在詞表中的單詞通過<UNK>來標記驻龟,句子結束通過<EOS>來標記。句子的單詞通過yt標記缸匪。模型在t時刻的輸入為上一時刻的輸出a和上一時刻輸出的y(y為在此位置出現(xiàn)概率最大的詞)翁狐。在訓練過程中輸入的y為訓練樣本中上一個單詞,在預測過程則為上一時刻預測輸出凌蔬。每一時刻的輸出是基于前面所有出現(xiàn)單詞的條件概率露懒。

??1.6 對新序列采樣

??前述方法中,對于每一個單詞砂心,預測的輸出是詞表中每個單詞出現(xiàn)的概率分布懈词,而此時我們選擇了概率值最大作為輸出,那么輸出只有一種情況辩诞。另一種方法是在每一時刻的輸出的概率分布中進行隨機抽樣作為該時刻的預測輸出坎弯,隨后作為下一時刻的輸入,此時生成的文本將會有很多可能性:

另一種文本生成時采用的詞表將不再是以單詞為一個預測單位译暂,而是將字符作為預測單位抠忘,這樣做的好處是,將不用處理未知的單詞或字符串外永,但缺點是可能會得到太多太長的序列崎脉,且基于字符的模型在捕捉前后文的關系上不如基于詞匯的模型。

??1.7 GRU單元

?? RNN雖然可以處理序列問題伯顶,并在處理過程中來捕捉其他時刻的信息囚灼,但其只能捕捉到近期的信息骆膝,對于更遠的信息難以捕捉(難以記憶下來),而且隨著序列長度的增加灶体,如同深層神經(jīng)網(wǎng)絡一般阅签,容易出現(xiàn)梯度消失問題。而采用門控單元(GRU)可以有效增加捕捉信息的深度赃春、改善梯度消失問題愉择。
??GRU是通過一個增加一個記憶單元來作為門控,控制是否更新輸入到t時刻的上一時刻的輸出织中。如下圖所示锥涕,將a替換為c,作為記憶細胞狭吼,在當前時刻层坠,①根據(jù)公式(1)計算新的c;②根據(jù)公式(2)計算門控值(輸出為1或0)刁笙;③根據(jù)公式(3)破花,通過門控值來決定這一時刻計算的輸出信息是新的c還是上一時刻的c。比如在句子The cat,which already ate...,was full.中疲吸,在cat位置處門控值為1座每,表示更新c(相當于將cat的信息記錄下來,擦除之前的信息)摘悴,在中間部分峭梳,門控值均為0,表示不更新c(在這一過程中蹂喻,一直記錄的是cat的信息)葱椭,直到was位置(在此處需要使用到cat是否為單復數(shù)的信息,此后不再需要)口四,門控值為1孵运,表示更新信息c。實際上Γ的計算值并不實際為0和1蔓彩,而是逼近這兩個值治笨,但也能起到類似的效果,同時避免了梯度消失的問題赤嚼。

??1.8 LSTM

?? 在GRU中含兩個門控(更新門及在前述基礎上增加更相關性門Γr)和一個輸出單元大磺,而在LSTM中含三個門控(跟新門、遺忘門和輸出門)和輸出單元探膊,其中,遺忘門代替了GRU中的(1-Γu)待榔,同時通過輸出門來進一步控制了輸出信息逞壁。這解決GRU僅記憶某時刻信息的問題(實際上門控值不嚴格為0流济,那么實際上其他時刻的信息也會被記錄),在LSTM中通過更新門和遺忘門將不同時刻的信息記錄下來(有選擇的記憶)腌闯。

??1.9 雙向RNN

?? 前述的RNN是單向的绳瘟,其存在一個問題,僅能夠參考前面時刻的信息來作出預測姿骏,而對于后續(xù)的信息沒有加入預測糖声。即僅處理了上文,未處理下文分瘦,這是不合理的蘸泻。如下兩個句子:
He said,"Teddy bears are on sale"
He said,"Teddy Roosevelt was a great President"
?? 顯然第一個句子中Teddy不是一個人名,而在第二個句子中則是一個人名嘲玫,但是僅僅通過前三個單詞悦施,實際上是無法對Teddy是不是人名分別對兩個句子作出準確預測的。而雙向RNN則是將后續(xù)信息也加入到預測過程中來去团,從而解決這個問題抡诞。

??1.10 深層RNN

?? 類似深層神經(jīng)網(wǎng)絡,RNN也可以進行堆疊來實現(xiàn)深層的RNN:

2.自然語言處理與詞嵌入

??2.1 詞匯表征

?? 前述中詞匯的表征是通過one-hot來表示土陪,其存在一個缺點就是將每個單詞孤立起來了昼汗,對于相關性的詞泛化能力很弱,比如無法推斷男人和女人具有相關性鬼雀,如句子I want a glass of orange _____?顷窒,空格處如果學習到填juice,但是如果將orange替換為apple取刃,可能模型就不知道空格處需要填寫juice蹋肮。因為在one-hot編碼中,如果要計算兩個詞的相關性璧疗,兩個向量的內(nèi)積總是為0坯辩,所有詞匯之間相關性都為0,或者說都沒有相關性崩侠。
?? 現(xiàn)在漆魔,如果我們采用其他表征,以使得具有相關性的詞表達之間的內(nèi)積較大却音,而不具相關性的詞表達之間內(nèi)積較小改抡,那么就可以改善上述問題,如下圖系瓢,倘若阿纤,將一個詞在300個特性上進行賦值來表達一個詞(特征化):

這種方法就稱為word embedding,通過t-SNE將這個300-D的向量映射到2-D夷陋,實現(xiàn)詞向量的可視化欠拾,可以發(fā)現(xiàn)胰锌,根據(jù)詞的相關性進行了聚類:

??2.1 詞匯表征

?? (1)詞嵌入的特性:學習類比關系
??詞嵌入的方法可以另模型基于詞的相關性進行推理,如藐窄,基于學習了man和woman之間的關系资昧,能否推導出king對應什么?如下圖荆忍,設詞嵌入維度為4格带,man和woman兩個詞向量之差約為[-2,0,0,0],而我們發(fā)現(xiàn)king和queen之差刹枉,在各個維度上與man—woman相近叽唱,那么根據(jù)man-woman關系,推導出king對應queen:

要實現(xiàn)這種類比的方法嘶卧,也就是要在詞匯表中尔觉,找到一個詞向量ew,使其與eking-eman+ewoman之間的相似度最大芥吟,相似度函數(shù)一般采用余弦相似度:

?? (2)詞嵌入矩陣
??詞嵌入矩陣是一個二維的矩陣侦铜,第一個維度是特征化數(shù)量,第二個維度是詞數(shù)量钟鸵,將一個詞嵌入矩陣乘以一個詞的one-hot的編碼钉稍,即得到該詞匯的詞嵌入表達:

?? (3)學習詞嵌入
??學習詞嵌入就是學習詞嵌入矩陣。通過構建語言模型棺耍,抽取上下文與目標詞進行監(jiān)督學習以獲得詞嵌入矩陣贡未,能夠達到較好的效果。通過one-hot編碼乘以詞嵌入矩陣E得到詞向量蒙袍,一般截取需預測詞前幾個詞俊卤,將其詞向量輸入神經(jīng)網(wǎng)絡進行訓練,來優(yōu)化E害幅。
在選取目標詞的上下文時消恍,一般有選前4個詞、前后4個詞以现、前一個詞狠怨、較近的一個詞。
?? (4)Word2vec
??NNLM(生成連續(xù)詞向量后輸出一個非線性隱層和softmax層邑遏,將連續(xù)詞向量映射為長度為V(詞表數(shù)量)的概率分布向量佣赖,從而計算上下文條件概率)存在一些問題:①只能處理定長的序列(截取的上下文詞數(shù)量固定);②訓練速度太慢记盒。在NNLM模型中憎蛤,首先是通過簡單的模型來訓練出連續(xù)的詞向量,隨后將連續(xù)的詞向量輸入到神經(jīng)網(wǎng)絡中進行訓練纪吮,模型的計算耗時主要在第二步中俩檬。由于我們只想得到連續(xù)的詞向量栏豺,那么對于第二步中的神經(jīng)網(wǎng)絡則可進行簡化。
??word2vec思想中豆胸,移除了NNLM中的非線性隱層,直接將連續(xù)詞向量與softmax層連接(如上圖)巷疼,忽略上下文序列信息晚胡,將所有詞匯總得到一個Embedding layer,將特征詞納入上下文環(huán)境(選取幾個詞)嚼沿,這得到的是CBow模型估盘。CBow仍然是通過以context預測target word的過程來學習詞向量的表達。
??而skip-gram模型則是計算輸入word的詞向量表達與目標詞的輸出向量之間的余弦相似度并歸一化骡尽。個人理解為遣妥,θTt是目標詞通過softmax輸出的向量,與ec等長攀细,即計算了target word輸出詞向量與context輸入詞向量之間的相似度:

參見NLP之——Word2Vec詳解
?? (5)負采樣
??前述模型中還是存在softmax計算過慢的問題箫踩,在負采樣算法中,首先構造context-target詞對谭贪,如orange-juice將會被標記為正樣本1境钟,而orange-其他詞,則會被標記為負樣本0.

?? (6)GloVe詞向量
??不同于word2vec俭识,GloVe是基于全局詞頻統(tǒng)計的慨削。Xij表示單詞i和congtext單詞j在特定大小context window內(nèi)共同出現(xiàn)的次數(shù),對于距離越遠的兩個單詞所占的總計算的權重越小套媚。詞向量和共現(xiàn)矩陣之間的近似關系如下:
w即詞向量缚态,b為偏置項。損失函數(shù)為:

GloVe希望實現(xiàn)的是:
共現(xiàn)次數(shù)很多的詞的權重要大于很少共現(xiàn)的詞堤瘤;
但這個權重不應過大玫芦,應達到一定程度后不再增加;
如果兩個單詞沒有共現(xiàn)宙橱,即Xij=0姨俩,那么將不參與loss計算,即f(x)=0师郑。
GloVe作者采樣了下述分段函數(shù)來滿足上述條件:
參見GloVe詳解
?? (7)情緒分類
??

?? (8)詞嵌入除偏
??根據(jù)語料庫來學習詞嵌入环葵,實際上是一個學習單詞語義類比的過程(個人認為,錯誤求改)宝冕≌旁猓基于語料庫的詞嵌入表達會造成很明顯的偏見,如Man對應computer programmer地梨,Woman對應homemaker菊卷。明顯的反應了現(xiàn)實中的性別缔恳、種族、年齡等偏見歧視:
現(xiàn)如今洁闰,AI應用在生活歉甚、經(jīng)濟、政治等方方面面扑眉,有的還起到了提供決策的作用纸泄,如果存在這種偏見歧視,對于決策有著巨大的影響腰素。而詞嵌入會很容易的學到這種偏見歧視聘裁,所以需要消除詞嵌入里這種偏見歧視。參見Man is to Computer Programmer as Woman is to Homemaker? Debiasing Word Embeddings

3. 序列模型和注意力機制

??3.1 基礎模型

??(1)Seq2Seq
??在機器翻譯中采用的模型就是Seq2Seq弓千,通過編碼→解碼的方式來進行序列到序列的轉換:

??(2)Image captioning
??

??3.2 選擇最可能的句子

??相對于語言模型衡便,Seq2Seq中的Decoder與語言模型相近,不同之處是初始輸入的a被替換為Encoder的輸出洋访,所以Seq2Seq是計算一個句子基于被翻譯句子的條件概率镣陕。在語言模型的生成文本中,希望的是生成各種各樣的文本捌显,而在機器翻譯中則希望翻譯足夠準確茁彭,所以在Seq2Seq模型中不是隨機采樣輸出,而是輸出概率最大的句子扶歪。

在生成文本中理肺,每一時刻輸出會通過隨機采樣后再輸入到下一時刻。如果采用這種方式來選取每一時刻最大概率詞善镰,這種方式稱為貪心搜索法妹萨。但是在機器翻譯中貪心法不一定是最優(yōu)解,如下圖going在英語中出現(xiàn)的頻率一般高于visiting炫欺,所以在貪心法中很可能會得到下圖第二個句子的翻譯(相比第一個較差):

??3.3 Beam search

??既然不能使用貪心法乎完,也不能使用隨機法,也不可能將所有可能的組合都計算一遍(計算量太大)品洛。那么树姨。在第一時刻的輸出的詞,選取概率top B的詞桥状,在第二時刻輸出時帽揪,將這B個詞與詞表中其他詞配對,再計算其概率辅斟,輸出其中概率top B的組合转晰,重復下去,如下圖,B=3:

注:如上圖中查邢,如果在某一時刻蔗崎,輸出的概率top B的序列中,不再包含上一時刻選取的某一詞扰藕,那么上一時刻以這個詞結尾的所有序列將直接拋棄缓苛。如第二時刻,top3 為in september邓深、jane is他嫡、jane visiting那么,第一時刻中以September結尾的所有組合都拋棄庐完。

??3.4 改善Beam search

??如果直接采用條件概率累乘的方式來最大化整個序列的概率,會存在兩個問題:①通常每一個條件概率都很小徘熔,累乘后得到的整體概率值將會非常小门躯,會造成數(shù)值下溢問題;②由于每個條件概率都小于1酷师,那么隨著序列長度增加讶凉,整體概率是減小的,所以翻譯會傾向于較短的翻譯山孔;
??解決第一個問題的方法是將概率取對數(shù)求和懂讯,以避免上述兩個問題,但依然存在傾向短翻譯問題:由于每一條件概率都小于1台颠,取對數(shù)后的值將為負數(shù)褐望,且隨序列增長,值越來越小串前,對數(shù)值越負瘫里,所以得到的整體結果是越來越負。

??解決第二個問題的方法是將其除以輸出序列的長度來緩解:

??3.5 Beam search誤差分析

??

??3.5 注意力模型

??在翻譯過程中荡碾,如果是人工翻譯谨读,并不會像機器一樣通讀整個句子,然后記憶里面的東西坛吁,再去從0開始翻譯劳殖。而是會通過記憶句子部分,然后翻譯一部分拨脉。在前述的翻譯模型中哆姻,對于所需翻譯序列長度,其性能如下:

即對于較短和較長的序列女坑,性能都較低填具,而通過注意力機制,可以達到類似人工翻譯的效果,在長序列中性能也較高劳景。
??注意力機制誉简,將不再單獨使用Encoder的輸出直接整體輸入到Decoder中,如下圖盟广,將會使Decoder中每一單元與Encoder中鄰近的一些單元相連闷串,并添加注意力權重α:
??如下圖所示,a<t'>表示t時刻雙向RNN傳來的隱藏信息筋量,如果Decoder某一單元的輸出與t‘個Encoder單元相關烹吵,則賦予這t’個隱藏信息注意力權重,權重和為1桨武,計算a的加權作為Decoder這一單元的輸入C:

??完結肋拔。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市呀酸,隨后出現(xiàn)的幾起案子凉蜂,更是在濱河造成了極大的恐慌,老刑警劉巖性誉,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件窿吩,死亡現(xiàn)場離奇詭異,居然都是意外死亡错览,警方通過查閱死者的電腦和手機纫雁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進店門潮尝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來绿店,“玉大人,你說我怎么就攤上這事举庶⌒吆#” “怎么了闲勺?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長扣猫。 經(jīng)常有香客問我菜循,道長,這世上最難降的妖魔是什么申尤? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任癌幕,我火速辦了婚禮,結果婚禮上昧穿,老公的妹妹穿的比我還像新娘勺远。我一直安慰自己,他們只是感情好时鸵,可當我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布胶逢。 她就那樣靜靜地躺著厅瞎,像睡著了一般。 火紅的嫁衣襯著肌膚如雪初坠。 梳的紋絲不亂的頭發(fā)上和簸,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天,我揣著相機與錄音碟刺,去河邊找鬼锁保。 笑死,一個胖子當著我的面吹牛半沽,可吹牛的內(nèi)容都是我干的爽柒。 我是一名探鬼主播,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼者填,長吁一口氣:“原來是場噩夢啊……” “哼浩村!你這毒婦竟也來了?” 一聲冷哼從身側響起占哟,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤穴亏,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后重挑,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡棠涮,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年谬哀,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片严肪。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡史煎,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出驳糯,到底是詐尸還是另有隱情篇梭,我是刑警寧澤,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布酝枢,位于F島的核電站恬偷,受9級特大地震影響,放射性物質發(fā)生泄漏帘睦。R本人自食惡果不足惜袍患,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望竣付。 院中可真熱鬧诡延,春花似錦、人聲如沸古胆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至惹恃,卻和暖如春夭谤,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背座舍。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工沮翔, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人曲秉。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓采蚀,卻偏偏與公主長得像,于是被迫代替她去往敵國和親承二。 傳聞我的和親對象是個殘疾皇子榆鼠,可洞房花燭夜當晚...
    茶點故事閱讀 44,871評論 2 354

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