<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      BiLSTM-CRF模型理解

      適用任務(wù)

      中文分詞、詞性標(biāo)注、命名實(shí)體識(shí)別是自然語(yǔ)言理解中,基礎(chǔ)性的工作,同時(shí)也是非常重要的工作。

      在很多NLP的項(xiàng)目中,工作開(kāi)始之前都要經(jīng)過(guò)這三者中的一到多項(xiàng)工作的處理。

      在深度學(xué)習(xí)中,有一種模型可以同時(shí)勝任這三種工作,而且效果還很不錯(cuò)--那就是biLSTM_CRF。

      biLSTM,指的是雙向LSTM;CRF指的是條件隨機(jī)場(chǎng)。

       

      一些說(shuō)明

      以命名實(shí)體識(shí)別為例,我們規(guī)定在數(shù)據(jù)集中有兩類實(shí)體,人名和組織機(jī)構(gòu)名稱。

      在數(shù)據(jù)集中總共有5類標(biāo)簽:

      B-Person (人名的開(kāi)始部分)

      I- Person (人名的中間部分)

      B-Organization (組織機(jī)構(gòu)的開(kāi)始部分)

      I-Organization (組織機(jī)構(gòu)的中間部分)

      O (非實(shí)體信息)

      此外,假設(shè)x 是包含了5個(gè)單詞的一句話(w0,w1,w2,w3,w4)。

      在句子x中[w0,w1]是人名,[w3]是組織機(jī)構(gòu)名稱,其他都是“O”。

       

      BiLSTM-CRF 模型

      先來(lái)簡(jiǎn)要的介紹一下該模型。

      如下圖所示:

      首先,句中的每個(gè)單詞是一條包含詞嵌入和字嵌入的詞向量,詞嵌入通常是事先訓(xùn)練好的,字嵌入則是隨機(jī)初始化的。所有的嵌入都會(huì)隨著訓(xùn)練的迭代過(guò)程被調(diào)整。

      其次,BiLSTM-CRF的輸入是詞嵌入向量,輸出是每個(gè)單詞對(duì)應(yīng)的預(yù)測(cè)標(biāo)簽

       

      如下圖所示,BiLSTM層的輸入表示該單詞對(duì)應(yīng)各個(gè)類別的分?jǐn)?shù)。如W0,BiLSTM節(jié)點(diǎn)的輸出是1.5 (B-Person), 0.9 (I-Person), 0.1 (B-Organization), 0.08 (I-Organization) and 0.05 (O)。這些分?jǐn)?shù)將會(huì)是CRF層的輸入。 所有的經(jīng)BiLSTM層輸出的分?jǐn)?shù)將作為CRF層的輸入,類別序列中分?jǐn)?shù)最高的類別就是我們預(yù)測(cè)的最終結(jié)果。

       

       

       如果沒(méi)有CRF層會(huì)是什么樣

       

      即使沒(méi)有CRF層,我們照樣可以訓(xùn)練一個(gè)基于BiLSTM的命名實(shí)體識(shí)別模型,如下圖所示。

      因?yàn)锽iLSTM模型的結(jié)果是單詞對(duì)應(yīng)各類別的分?jǐn)?shù),我們可以選擇分?jǐn)?shù)最高的類別作為預(yù)測(cè)結(jié)果。如W0,“B-Person”的分?jǐn)?shù)最高(1.5),那么我們可以選定“B-Person”作為預(yù)測(cè)結(jié)果。同樣的,w1是“I-Person”, w2是“O”,w3是 “B-Organization” ,w4是 “O”。

      盡管我們?cè)谠摾又械玫搅苏_的結(jié)果,但實(shí)際情況并不總是這樣:

       

      顯然,這次的分類結(jié)果并不準(zhǔn)確。

       

      CRF層可以學(xué)習(xí)到句子的約束條件

      CRF層可以加入一些約束來(lái)保證最終預(yù)測(cè)結(jié)果是有效的。這些約束可以在訓(xùn)練數(shù)據(jù)時(shí)被CRF層自動(dòng)學(xué)習(xí)得到。

      可能的約束條件有:

      • 句子的開(kāi)頭應(yīng)該是“B-”或“O”,而不是“I-”。
      • “B-label1 I-label2 I-label3…”,在該模式中,類別1,2,3應(yīng)該是同一種實(shí)體類別。比如,“B-Person I-Person” 是正確的,而“B-Person I-Organization”則是錯(cuò)誤的。
      • “O I-label”是錯(cuò)誤的,命名實(shí)體的開(kāi)頭應(yīng)該是“B-”而不是“I-”。

      有了這些有用的約束,錯(cuò)誤的預(yù)測(cè)序列將會(huì)大大減少。

       

      CRF 層

      CRF層中的損失函數(shù)包括兩種類型的分?jǐn)?shù),而理解這兩類分?jǐn)?shù)的計(jì)算是理解CRF的關(guān)鍵。

      1 Emission score

      第一個(gè)類型的分?jǐn)?shù)是發(fā)射分?jǐn)?shù)(狀態(tài)分?jǐn)?shù))。這些狀態(tài)分?jǐn)?shù)來(lái)自BiLSTM層的輸出,在這里就是word預(yù)測(cè)為某個(gè)標(biāo)簽的概率。如下圖所示,w0被預(yù)測(cè)為B-Person的分?jǐn)?shù)是1.5.

       

       

      為方便起見(jiàn),我們給每個(gè)類別一個(gè)索引,如下表所示:

       

      Xiyj代表狀態(tài)分?jǐn)?shù),i是單詞的位置索引,yj是類別的索引。根據(jù)上表,

      表示單詞w1被預(yù)測(cè)為B?Organization的分?jǐn)?shù)是0.1。

       

      2 轉(zhuǎn)移分?jǐn)?shù)

      用tyiyj來(lái)表示轉(zhuǎn)移分?jǐn)?shù)。例如,tB?Person,I?Person=0.9表示從類別B?Person→I?Person的分?jǐn)?shù)是0.9。因此,有一個(gè)所有類別間的轉(zhuǎn)移分?jǐn)?shù)矩陣。

      為了使轉(zhuǎn)移分?jǐn)?shù)矩陣更具魯棒性,我們加上START 和 END兩類標(biāo)簽。START代表一個(gè)句子的開(kāi)始(不是句子的第一個(gè)單詞),END代表一個(gè)句子的結(jié)束。

      下表是加上START和END標(biāo)簽的轉(zhuǎn)移分?jǐn)?shù)矩陣。

      如上表格所示,轉(zhuǎn)移矩陣已經(jīng)學(xué)習(xí)到一些有用的約束條件:

      • 句子的第一個(gè)單詞應(yīng)該是“B-” 或 “O”,而不是“I”。(從“START”->“I-Person 或 I-Organization”的轉(zhuǎn)移分?jǐn)?shù)很低)
      • “B-label1 I-label2 I-label3…”,在該模式中,類別1,2,3應(yīng)該是同一種實(shí)體類別。比如,“B-Person I-Person” 是正確的,而“B-Person I-Organization”則是錯(cuò)誤的。(“B-Organization” -> “I-Person”的分?jǐn)?shù)很低)
      • “O I-label”是錯(cuò)誤的,命名實(shí)體的開(kāi)頭應(yīng)該是“B-”而不是“I-”。

       

      要怎樣得到這個(gè)轉(zhuǎn)移矩陣呢?

      實(shí)際上,轉(zhuǎn)移矩陣是BiLSTM-CRF模型的一個(gè)參數(shù)。在訓(xùn)練模型之前,你可以隨機(jī)初始化轉(zhuǎn)移矩陣的分?jǐn)?shù)。這些分?jǐn)?shù)將隨著訓(xùn)練的迭代過(guò)程被更新,換句話說(shuō),CRF層可以自己學(xué)到這些約束條件。

       

      CRF損失函數(shù)

      CRF損失函數(shù)由兩部分組成,真實(shí)路徑的分?jǐn)?shù) 和 所有路徑的總分?jǐn)?shù)。真實(shí)路徑的分?jǐn)?shù)應(yīng)該是所有路徑中分?jǐn)?shù)最高的。

      例如,數(shù)據(jù)集中有如下幾種類別:

       

      一個(gè)包含5個(gè)單詞的句子,可能的類別序列如下:

      • 1. START B-Person B-Person B-Person B-Person B-Person END
      • 2. START B-Person I-Person B-Person B-Person B-Person END
      • …..
      • 10. START B-Person I-Person O B-Organization O END
      • N. O O O O O O O

      每種可能的路徑的分?jǐn)?shù)為Pi,共有N條路徑,則路徑的總分是

      ,e是常數(shù)e。

      如果第十條路徑是真實(shí)路徑,也就是說(shuō)第十條是正確預(yù)測(cè)結(jié)果,那么第十條路徑的分?jǐn)?shù)應(yīng)該是所有可能路徑里得分最高的。

      根據(jù)如下?lián)p失函數(shù),在訓(xùn)練過(guò)程中,BiLSTM-CRF模型的參數(shù)值將隨著訓(xùn)練過(guò)程的迭代不斷更新,使得真實(shí)路徑所占的比值越來(lái)越大。

      現(xiàn)在的問(wèn)題是:

      1. 怎么定義路徑的分?jǐn)?shù)?
      2. 怎么計(jì)算所有路徑的總分?
      3. 當(dāng)計(jì)算所有路徑總分時(shí),是否需要列舉出所有可能的路徑?(答案是不需要

      真實(shí)路徑分?jǐn)?shù)

      計(jì)算真實(shí)路徑分?jǐn)?shù),eSi,是非常容易的。

      我們先集中注意力來(lái)計(jì)算Si:

      以“START B-Person I-Person O B-Organization O END”這條真實(shí)路徑來(lái)說(shuō):

      句子中有5個(gè)單詞,w1,w2,w3,w4,w5,加上START和END 在句子的開(kāi)始位置和結(jié)束位置,記為,w0,w6

      Si = EmissionScore + TransitionScore

      這些分?jǐn)?shù)來(lái)自BiLSTM層的輸出,至于x0,START 和x6,END ,則設(shè)為0。

      這些分?jǐn)?shù)來(lái)自于CRF層,將這兩類分?jǐn)?shù)加和即可得到Si 和 路徑分?jǐn)?shù)eSi

       

      所有路徑的總分

      如何計(jì)算所有路徑的總分呢?以一個(gè)玩具的例子詳細(xì)講解。

      Step 1

      我們定義的損失函數(shù)如下:

      現(xiàn)在我們把它變成對(duì)數(shù)損失函數(shù):

      訓(xùn)練目標(biāo)通常是最小化損失函數(shù),加負(fù)號(hào):

      前面我們已經(jīng)很清楚如何計(jì)算真實(shí)路徑得分,現(xiàn)在我們需要找到一個(gè)方法去計(jì)算

       

      Step 2:回憶一下?tīng)顟B(tài)分?jǐn)?shù) 和 轉(zhuǎn)移分?jǐn)?shù)

      為了簡(jiǎn)化問(wèn)題,假定我句子只有3個(gè)單詞組成:

      X = [w0, w1 ,w2]

      只有兩個(gè)類別:

      LabelSet = {l1, l2}

      狀態(tài)分?jǐn)?shù)如下:

       

      轉(zhuǎn)移矩陣如下:

       

      Step 3:

      目標(biāo)是:

      整個(gè)過(guò)程是一個(gè)分?jǐn)?shù)的積聚過(guò)程。它的實(shí)現(xiàn)思想有點(diǎn)像動(dòng)態(tài)規(guī)劃。首先,w0所有路徑的總分先被計(jì)算出來(lái),然后,計(jì)算w0 -> w1的所有路徑的得分,最后計(jì)算w0 -> w1 -> w2的所有路徑的得分,也就是我們需要的結(jié)果。

       

      接下來(lái),會(huì)看到兩個(gè)變量:obs和 previous。Previous存儲(chǔ)了之前步驟的結(jié)果,obs代表當(dāng)前單詞所帶的信息。

      如果句子只有一個(gè)單詞,就沒(méi)有之前步驟的結(jié)果,所以Previous 是空。只能觀測(cè)到狀態(tài)分?jǐn)?shù) obs =【x01,x02】

      W0 的所有路徑總分就是:

       

       

       

       

      為啥要擴(kuò)展previous 和 obs 矩陣呢?因?yàn)檫@樣操作可以是接下來(lái)的計(jì)算相當(dāng)高效。

       

       

       

      實(shí)際上,第二次迭代過(guò)程也就完成了。

       

      發(fā)現(xiàn)了嗎,這其實(shí)就是我們的目標(biāo),

       

       

       

      讀到這邊,差不多就大功告成了。這一步,我們?cè)僦貜?fù)一次之前的步驟。

       

      跟上一步驟一樣,用新的previous計(jì)算總分:

       

      們最終得到了我們的目標(biāo),

      ,我們的句子中共有3個(gè)單詞和兩個(gè)類別,所以共有8條路徑。

       

      biLSTM_CRF模型在tensorflow中的實(shí)現(xiàn)。

      運(yùn)行環(huán)境

      python 3.6
      tensorflow 1.2
      本文GITHUB 歡迎Star和Fork。
      使用同樣方法,構(gòu)造的中文分詞。中文分詞GITHUB

      正文

      1.數(shù)據(jù)預(yù)處理
      2.模型構(gòu)建
      3.模型訓(xùn)練與測(cè)試
      4.模型驗(yàn)證
      5.總結(jié)

      1.數(shù)據(jù)預(yù)處理

       

       

      首先是將預(yù)測(cè)數(shù)據(jù)進(jìn)行處理,轉(zhuǎn)成模型能夠識(shí)別的數(shù)字。

       
      數(shù)據(jù)原格式

      數(shù)據(jù)是以列形式存儲(chǔ),截圖翻轉(zhuǎn)了一下。

      我從訓(xùn)練文本中,抽取頻數(shù)在前5000的字,實(shí)際只抽取到了4830左右個(gè)字。加入'<PAD>','<UNK>','<NUM>',分別表示填充字符,未知字符,數(shù)字字符。一起存入字典。

       
      字典

      標(biāo)簽同樣也有對(duì)應(yīng)的字典。

      # 將tag轉(zhuǎn)換成數(shù)字
      tag2label = {"O": 0, "B-PER": 1, "I-PER": 2, "B-LOC": 3, "I-LOC": 4, "B-ORG": 5, "I-ORG": 6}
      

       

       

      依據(jù)字典與標(biāo)簽字典,將文字與標(biāo)簽分別轉(zhuǎn)成數(shù)字。第一行是文本,第二行是標(biāo)簽。

       
      文本與標(biāo)簽

      下一步是生成batch的操作。
      生成batch后,需要對(duì)batch內(nèi)句子padding到統(tǒng)一的長(zhǎng)度,并計(jì)算每句的真實(shí)長(zhǎng)度。

      2.模型構(gòu)建

      采用雙向LSTM對(duì)序列進(jìn)行處理,將輸出結(jié)果進(jìn)行拼接。輸入shape[batch,seq_Length,hidden_dim],輸出shape[batch,seq_length,2*hidden_dim]。

              with tf.name_scope('biLSTM'):
                  cell_fw = tf.nn.rnn_cell.LSTMCell(pm.hidden_dim)
                  cell_bw = tf.nn.rnn_cell.LSTMCell(pm.hidden_dim)
                  outputs, outstates = tf.nn.bidirectional_dynamic_rnn(cell_fw=cell_fw, cell_bw=cell_bw,inputs=self.embedding,
                                                                       sequence_length=self.seq_length, dtype=tf.float32)
                  outputs = tf.concat(outputs, 2)#將雙向RNN的結(jié)果進(jìn)行拼接
                  #outputs三維張量,[batchsize,seq_length,2*hidden_dim]
      

      我們從本文的第一幅圖中,可以看出,整個(gè)biLSTM完整的輸出格式是[batch,seq_length,num_tag]。num_tag是標(biāo)簽的數(shù)量,本實(shí)驗(yàn)中是標(biāo)簽數(shù)量是7。所以我們需要一個(gè)全連接層,將輸出格式處理一下。

              with tf.name_scope('output'):
                  s = tf.shape(outputs)
                  output = tf.reshape(outputs, [-1, 2*pm.hidden_dim])
                  output = tf.layers.dense(output, pm.num_tags)
                  output = tf.contrib.layers.dropout(output, pm.keep_pro)
                  self.logits = tf.reshape(output, [-1, s[1], pm.num_tags])
      

      self.logits就是需要輸入CRF層中的數(shù)據(jù)。代碼的第三行,對(duì)output的變形,表示將[batch,seq_length,2hidden_dim]變成[batchseq_length,2*hidden_dim],最后處理時(shí)再變形為[batch,seq_length,num_tag]。
      下面就是CRF層的處理:

              with tf.name_scope('crf'):
                  log_likelihood, self.transition_params = crf_log_likelihood(inputs=self.logits, tag_indices=self.input_y, sequence_lengths=self.seq_length)
                  # log_likelihood是對(duì)數(shù)似然函數(shù),transition_params是轉(zhuǎn)移概率矩陣
                  #crf_log_likelihood{inputs:[batch_size,max_seq_length,num_tags],
                                      #tag_indices:[batchsize,max_seq_length],
                                      #sequence_lengths:[real_seq_length]
                  #transition_params: A [num_tags, num_tags] transition matrix
                  #log_likelihood: A scalar containing the log-likelihood of the given sequence of tag indices.
      

      這一步,是調(diào)用from tensorflow.contrib.crf import crf_log_likelihood函數(shù),求最大似然函數(shù),以及求轉(zhuǎn)移矩陣。最大似然函數(shù)前加上"-",可以用梯度下降法求最小值;

              with tf.name_scope('loss'):
                  self.loss = tf.reduce_mean(-log_likelihood) #最大似然取負(fù),使用梯度下降
      

      轉(zhuǎn)移矩陣可以幫助維特比算法來(lái)求解最優(yōu)標(biāo)注序列。

          def predict(self, sess, seqs):
              seq_pad, seq_length = process_seq(seqs)
              logits, transition_params = sess.run([self.logits, self.transition_params], feed_dict={self.input_x: seq_pad,
                                                                                                     self.seq_length: seq_length,
                                                                                                     self.keep_pro: 1.0})
              label_ = []
              for logit, length in zip(logits, seq_length):
                  #logit 每個(gè)子句的輸出值,length子句的真實(shí)長(zhǎng)度,logit[:length]的真實(shí)輸出值
                  # 調(diào)用維特比算法求最優(yōu)標(biāo)注序列
                  viterbi_seq, _ = viterbi_decode(logit[:length], transition_params)
                  label_.append(viterbi_seq)
              return label_
      

      3.模型訓(xùn)練與測(cè)試

       

       

      訓(xùn)練時(shí),共進(jìn)行12次迭代,每迭代4次,將訓(xùn)練得到的結(jié)果,保存到checkpoints;loss的情況,保留到tensorboard中;每100個(gè)batch,輸出此時(shí)的訓(xùn)練結(jié)果與測(cè)試結(jié)果。

       
      模型訓(xùn)練

      模型的loss由最初在訓(xùn)練集54.93降到2.29,在測(cè)試集上由47.45降到1.73。我們看下,保存的模型在驗(yàn)證集上的效果。

      4.模型驗(yàn)證

       

       

      我從1998年的人民網(wǎng)的新聞素材中,隨機(jī)抽取了幾條語(yǔ)句。

       
      模型驗(yàn)證

      ORG表示組織名詞,LOC表示地理名詞,PER表示人名。從驗(yàn)證結(jié)果上看,模型在命名實(shí)體識(shí)別上,效果還可以。

       

       

       

       

      對(duì)句子的單詞詞性做預(yù)測(cè)

      Step 1:BiLSTM-CRF模型得到的發(fā)射分?jǐn)?shù)和轉(zhuǎn)移分?jǐn)?shù)

      假定我們的句子共3個(gè)單詞組成:

      并且,我們已經(jīng)從我們的模型中得到了發(fā)射分?jǐn)?shù)和轉(zhuǎn)移分?jǐn)?shù),如下:

       

       

      轉(zhuǎn)移矩陣:

       

       

      Step 2:開(kāi)始預(yù)測(cè)

      如果你熟悉Viterbi算法,理解這一步的知識(shí)點(diǎn)將會(huì)非常容易。當(dāng)然,如果你不熟悉也無(wú)所謂,整個(gè)預(yù)測(cè)過(guò)程和之前求所有路徑總分的過(guò)程非常類似。我將逐步解釋清楚,我們先從左到右的順序來(lái)運(yùn)行預(yù)測(cè)算法。

       

       

      你將會(huì)看到兩類變量:obs 和 previous。Previous存儲(chǔ)了上一個(gè)步驟的最終結(jié)果,obs代表當(dāng)前單詞包含的信息(發(fā)射分?jǐn)?shù))。

      Alpha0 是歷史最佳的分?jǐn)?shù) ,alpha1 是最佳分?jǐn)?shù)所對(duì)應(yīng)的類別索引。這兩類變量的詳細(xì)信息待會(huì)會(huì)做說(shuō)明。先來(lái)看下面的圖片:你可以把這兩類變量當(dāng)做狗狗去森林里玩耍時(shí)在路上做的標(biāo)記,這些標(biāo)記可以幫助狗狗找到回家的路。

       

       

       

       

      現(xiàn)在,我們來(lái)觀測(cè)第一個(gè)單詞W0,很顯然,W0所對(duì)應(yīng)的最佳預(yù)測(cè)類別是非常容易知道的。比如,如果

      ,顯然,最佳預(yù)測(cè)結(jié)果是l2。

       

       

       

       

      看到這里,你可能好奇這跟之前求所有路徑分?jǐn)?shù)的算法沒(méi)什么區(qū)別,別急,你馬上就會(huì)看到不同之處啦!

       

      在下一次迭代前更改previous的值:max!

       

       

      舉個(gè)例子,如果我們的得分如下:

       

       

      那么我們的previous應(yīng)該是:

       

      這是什么意思呢?其實(shí)也就是說(shuō)previous存儲(chǔ)的是當(dāng)前單詞對(duì)應(yīng)各類別的最佳路徑得分。W1被預(yù)測(cè)為L(zhǎng)1類別的最高分是0.5,路徑是L2->L1,W1被預(yù)測(cè)為L(zhǎng)2類別的最高分是0.4,路徑是L2->L2。

       

      這邊,我們有兩個(gè)變量來(lái)儲(chǔ)存歷史信息,alpha0 和 alpha1.

      在本次迭代中,我們將最佳分?jǐn)?shù)存儲(chǔ)到alpha0 :

       

       

      同時(shí),最佳分?jǐn)?shù)所對(duì)應(yīng)的類別索引存儲(chǔ)到alpha1:

       

       

      類別L1的索引是0,L2的索引是1,所以(1,1)=(L2,L2)。表示當(dāng)前最佳分?jǐn)?shù)0.5對(duì)應(yīng)的路徑是L2->L1,最佳分?jǐn)?shù)0.4對(duì)應(yīng)的路徑是L2->L2。(1,1)可以理解為前一單詞分別對(duì)應(yīng)的類別索引。

       

      上面scores有錯(cuò)誤,應(yīng)該是0.5+x21+t11 等

       

      更改previous的值:

       

       

      假如我們的得分是:

       

       

      現(xiàn)在我們的previous是:

       

       

      現(xiàn)在,我們選取previous[0] 和previous[1]中最大的分?jǐn)?shù)作為最佳路徑。也就是0.9對(duì)應(yīng)的路徑是我們的預(yù)測(cè)結(jié)果。

      同時(shí),每個(gè)類別對(duì)應(yīng)的最大得分添加到alpha0 和 alpha1中:

       

       

      Step 3:根據(jù)最大得分找到最佳路徑

      這是最后一步,alpha0 和 alpha1將被用來(lái)找到最佳路徑。

      先看alpha0,alpha0中最后一個(gè)單詞對(duì)應(yīng)的類別得分分別是0.8 和 0.9,那么0.9對(duì)應(yīng)的類別L2就是最佳預(yù)測(cè)結(jié)果。再看alpha1,L2對(duì)應(yīng)的索引是0, “0”表示之前一個(gè)單詞對(duì)應(yīng)的類別是L1,所以W1-W2的最佳路徑是: L1->L2

      接著往前推,alpha1=(1,1),我們已經(jīng)知道W1的預(yù)測(cè)結(jié)果是L1,對(duì)應(yīng)的索引是0,(1,1)[0] = 1,所以W0對(duì)應(yīng)的類別是L2。

      所以我們預(yù)測(cè)的最佳路徑是 L2-> L1 -> L2 。

       

      posted @ 2019-09-21 14:40  山竹小果  閱讀(8172)  評(píng)論(2)    收藏  舉報(bào)
      主站蜘蛛池模板: 国产成人高清在线观看视频| 国产裸体无遮挡免费精品| 国产蜜臀视频一区二区三区| 九九re线精品视频在线观看视频| 国产丰满乱子伦无码专区| 又大又紧又粉嫩18p少妇| AV喷水高潮喷水在线观看COM| 67194熟妇人妻欧美日韩| a级国产乱理伦片在线观看al| 女人与牲口性恔配视频免费| 色偷偷亚洲女人天堂观看| 欧美一区二区三区在线观看| 日韩精品人妻中文字幕| 亚洲18禁一区二区三区| 蜜芽久久人人超碰爱香蕉| 色情一区二区三区免费看| 韩国三级网一区二区三区| 国产精品一区 在线播放| 91孕妇精品一区二区三区| 亚洲深深色噜噜狠狠网站| 国产综合av一区二区三区| 欧美老熟妇乱子伦牲交视频| 人妻有码av中文字幕久久琪| 午夜福利激情一区二区三区| 巨熟乳波霸若妻在线播放| 亚洲精品成人久久av| 国产精品第一区亚洲精品| 一级国产在线观看高清| 欧美日韩中文字幕视频不卡一二区| 资源新版在线天堂偷自拍| 亚洲乱亚洲乱妇50p| 欧美色丁香| 亚洲精品揄拍自拍首页一| 思思热在线视频精品| 下面一进一出好爽视频| 亚洲欧洲精品日韩av| 亚洲国产精品无码观看久久| 精品一二三四区在线观看| 东方av四虎在线观看| 裸体美女无遮挡免费网站| 国产精品免费AⅤ片在线观看 |