国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

廣告行業(yè)中那些趣事系列8:詳解BERT中分類器源碼

共 12883字,需瀏覽 26分鐘

 ·

2021-09-30 02:16


摘要:BERT是近幾年NLP領(lǐng)域中具有里程碑意義的存在。因為效果好和應(yīng)用范圍廣所以被廣泛應(yīng)用于科學(xué)研究和工程項目中。廣告系列中前幾篇文章有從理論的方面講過BERT的原理,也有從實戰(zhàn)的方面講過使用BERT構(gòu)建分類模型。本篇從源碼的角度從整體到局部分析BERT模型中分類器部分的源碼。

 

目錄

01 整體模塊劃分
02 數(shù)據(jù)處理模塊
03 特征處理模塊
04 模型構(gòu)建模塊
05 模型運(yùn)行模塊
06 其他模塊
總結(jié)



整體模塊劃分


對于機(jī)器學(xué)習(xí)工程師來說,會調(diào)包跑程序應(yīng)該是萬里長征的第一步。這一步主要是幫助我們迅速將模型應(yīng)用到實際業(yè)務(wù)中,并且提升自信心,但這還遠(yuǎn)遠(yuǎn)不夠。要想根據(jù)不同的業(yè)務(wù)場景更好的使用模型,我們需要深層次的理解模型,讀點源碼才能走的更遠(yuǎn)。

 

本篇解讀的是BERT開源項目中分類器部分的源碼,從最開始的數(shù)據(jù)輸入到模型運(yùn)行整個流程主要可以分成數(shù)據(jù)處理模塊、特征處理模塊、模型構(gòu)建模塊和模型運(yùn)行模塊。具體如下圖所示:

圖1 BERT分類器整體模塊劃分

 

因為原生態(tài)BERT預(yù)訓(xùn)練模型動輒幾百甚至上千兆的大小,模型訓(xùn)練速度非常慢,對于BERT模型線上化非常不友好,所以使用目前比較火的BERT最新派生產(chǎn)品ALBERT來完成BERT線上化服務(wù)。ALBERT使用參數(shù)減少技術(shù)來降低內(nèi)存消耗從而最終達(dá)到提高BERT的訓(xùn)練速度,并且在主要基準(zhǔn)測試中均名列前茅,可謂跑的快,還跑的好。本篇解讀的BERT源碼也是基于ALBERT開源項目。


項目開源的github工程:https://github.com/wilsonlsm006/albert_zh

主要解讀分類器部分的源碼,代碼及注釋在run_classifier.py文件,歡迎小伙伴們fork。

數(shù)據(jù)處理模塊


數(shù)據(jù)處理模塊主要負(fù)責(zé)數(shù)據(jù)讀入和預(yù)處理功能。

 

數(shù)據(jù)處理主要由數(shù)據(jù)處理器DataProcessor來完成。根據(jù)不同的任務(wù)會有不同的數(shù)據(jù)處理器子類,這里的不同表現(xiàn)在數(shù)據(jù)讀入方式和數(shù)據(jù)預(yù)處理方面。

 

1. 數(shù)據(jù)讀入方式

實際項目中數(shù)據(jù)讀入的方式多種多樣,比如csv、tsvtxt等。比如有的項目是需要讀取csv文件,而有的則需要tsv或者txt格式。我們可以構(gòu)建自定義的數(shù)據(jù)處理器來完成不同的項目需求。

 

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

數(shù)據(jù)預(yù)處理是根據(jù)不同的NLP任務(wù)來完成不同的操作,比如單句分類任務(wù)我們需要的是text_alabel格式。而句子相似關(guān)系判斷任務(wù)需要的是text_a,text_b,label格式。其他任務(wù)也是類似的,根據(jù)不同的NLP任務(wù)來完成數(shù)據(jù)預(yù)處理操作。


通過一個類圖來講解源碼中的數(shù)據(jù)處理器:

圖2 數(shù)據(jù)處理器類圖


對應(yīng)到項目源碼中,我們有一個DataProcessor父類。父類中有五個方法,分別是讀取tsv文件、獲得訓(xùn)練集、獲得驗證集、獲得測試集和獲得標(biāo)簽。這里可根據(jù)業(yè)務(wù)需求增刪改獲取文件類型的函數(shù),比如讀取csv可以添加get_csv(input_file)等等。

class DataProcessor(object):    """Base class for data converters for sequence classification data sets."""    def get_train_examples(self, data_dir):        """Gets a collection of `InputExample`s for the train set."""        raise NotImplementedError()    def get_dev_examples(self, data_dir):        """Gets a collection of `InputExample`s for the dev set."""        raise NotImplementedError()    def get_test_examples(self, data_dir):        """Gets a collection of `InputExample`s for prediction."""        raise NotImplementedError()    def get_labels(self):        """Gets the list of labels for this data set."""        raise NotImplementedError()    @classmethod    def _read_tsv(cls, input_file, quotechar=None):        """Reads a tab separated value file."""        with tf.gfile.Open(input_file, "r") as f:            reader = csv.reader(f, delimiter="\t", quotechar=quotechar)            lines = []            for line in reader:                lines.append(line)            return lines


下面兩個子類,分別是處理句子關(guān)系判斷任務(wù)的SentencePairClassificationProcessor數(shù)據(jù)處理器和LCQMCPairClassificationProcessor分類的數(shù)據(jù)處理器。前面文章有講過如果需要做單句分類的任務(wù)我們可以在這里添加一個SentenceClassifierProcess進(jìn)行定制化開發(fā)。

 

對應(yīng)到項目源碼中,因為我們是句子關(guān)系判斷任務(wù),其實就是判斷兩句話是不是有關(guān)系,這里我們得到的最終數(shù)據(jù)格式是列表類型,具體數(shù)據(jù)格式如下:

[(guid,text_a,text_b,label),(guid,text_a,text_b,label),....]


其中guid作為唯一識別text_atext_b句子對的標(biāo)志,可以理解為該條樣例的唯一id


text_atext_b是需要判斷的兩個句子;


label字段就是標(biāo)簽,如果兩句話相似則置為1,否則為0。

 

上面四個字段guidtext_a是必須的。text_b是可選的,如果為空則變成單句分類任務(wù),不為空則是句子關(guān)系判斷任務(wù)。label在訓(xùn)練集和驗證集是必須的,在測試集中可以不提供。


具體代碼在SentencePairClassificationProcessor子類的_create_examples函數(shù):

def _create_examples(self, lines, set_type):    """Creates examples for the training and dev sets."""    examples = []    print("length of lines:", len(lines))    for (i, line) in enumerate(lines):        # print('#i:',i,line)        if i == 0:            continue        guid = "%s-%s" % (set_type, i)        try:            label = tokenization.convert_to_unicode(line[2])            text_a = tokenization.convert_to_unicode(line[0])            text_b = tokenization.convert_to_unicode(line[1])            examples.append(                InputExample(guid=guid, text_a=text_a, text_b=text_b, label=label))        except Exception:            print('###error.i:', i, line)    return examples

 

特征處理模塊


特征處理模塊主要的功能是將數(shù)據(jù)處理模塊得到的數(shù)據(jù)轉(zhuǎn)化成特征并持久化到TFRecord文件中,由file_based_convert_examples_to_features函數(shù)完成。

"""將數(shù)據(jù)處理模塊得到的數(shù)據(jù)轉(zhuǎn)化成TFRecord文件input:    examples:數(shù)據(jù)格式為[(guid,text_a,text_b,label),(guid,text_a,text_b,label),....]    label_list:標(biāo)簽列表    max_seq_length:允許的句子最大長度     tokenizer:分詞器    output_file:TFRecord文件存儲路徑output:持久化到TFRecord格式文件"""def file_based_convert_examples_to_features(        examples,         label_list,         max_seq_length,         tokenizer, output_file):


1. 預(yù)處理數(shù)據(jù)轉(zhuǎn)化成特征

數(shù)據(jù)轉(zhuǎn)化成特征的操作主要由函數(shù)convert_single_example完成。傳統(tǒng)的機(jī)器學(xué)習(xí)需要從數(shù)據(jù)中抽取特征,NLP任務(wù)是對文本進(jìn)行分詞等操作獲取特征。BERT模型中默認(rèn)每個字字就是一個詞。

"""將預(yù)處理數(shù)據(jù)加工成模型需要的特征input:    ex_index:數(shù)據(jù)條數(shù)索引    example:數(shù)據(jù)格式為[(guid,text_a,text_b,label),(guid,text_a,text_b,label),....]    label_list:標(biāo)簽列表    max_seq_length:允許的句子最大長度,這里如果輸入句子長度不足則補(bǔ)0    tokenizer:分詞器output:  feature = InputFeatures(  input_ids=input_ids:token embedding:表示詞向量,第一個詞是CLS,分隔詞有SEP,是單詞本身  input_mask=input_mask:position embedding:為了令transformer感知詞與詞之間的位置關(guān)系  segment_ids=segment_ids:segment embedding:text_a與text_b的句子關(guān)系  label_id=label_id:標(biāo)簽  is_real_example=True)"""def convert_single_example(ex_index, example,                 label_list, max_seq_length,tokenizer):    ....    feature = InputFeatures(        input_ids=input_ids,        input_mask=input_mask,        segment_ids=segment_ids,        label_id=label_id,        is_real_example=True)    return feature


論文中BERT模型的輸入轉(zhuǎn)化成特征如下圖所示:


圖3 句子輸入轉(zhuǎn)化成三層Embedding


這里需要注意下對text_atext_b的預(yù)處理操作。首先會進(jìn)行標(biāo)記化將text_atext_b轉(zhuǎn)化成tokens_atokens_b。如果tokens_b存在,那么tokens_atokens_b的長度就不能超過max_seq_length-3,因為需要加入cls,sep,seq三個符號;如果tokens_b不存在,那么tokens_a的長度不能超過 max_seq_length -2 ,因為需要加入 cls sep符號。


這里通過一條具體的數(shù)據(jù)轉(zhuǎn)化成特征說明上述流程?,F(xiàn)在我們的example中有一條數(shù)據(jù),分別有三個字段:

text_a: 這種圖片是用什么軟件制作的?

text_b: 這種圖片制作是用什么軟件呢?

label: 1

 

經(jīng)過分詞之后,我們會得到:

tokens: [CLS] [SEP] ? [SEP]


其中[CLS]是模型額外增加的開始標(biāo)志,說明這是句首位置。[SEP]代表分隔符,我們會將兩句話拼接成一句話,通過分隔符來識別。第二句話拼接完成后也會加上一個分隔符。這里需要注意的是BERT對于中文分詞是以每個字進(jìn)行切分,并不是我們通常理解的按照中文實際的詞進(jìn)行切分。

 

經(jīng)過特征提取之后變成了:

input_ids101 6821 4905 1745 4275 3221 4500 784 720 6763 816 1169 868 46388043 102 6821 4905 1745 4275 1169 868 3221 4500 784 720 6763 816 1450 8043 1020 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0


input_mask1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0


segment_ids0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0


label_id1


這里詳細(xì)說下我們真正給模型輸入的特征是什么。

input_ids代表詞向量編碼。NLP任務(wù)中我們會將文本轉(zhuǎn)化成詞向量的表征形式提供給模型。通過BERT源碼中的tokenizer將句子拆分成字,并且將字映射成id。比如上面例子中第一句話有14個字,第二句話也有14個字,再加上一個開始標(biāo)志和兩個分隔符,一種有31個字。而上面例子中的input_ids列表中前31個位置都有每個字映射的id,并且相同字的映射的id也是一樣的。其他則通過添加0進(jìn)行填充;


input_mask代表位置編碼。為了transformer感知詞與詞之間的位置關(guān)系,源碼中會將當(dāng)前位置有字的設(shè)置為1,其他用0進(jìn)行填充;


segment_ids代表句子關(guān)系編碼。如果是句子關(guān)系判斷任務(wù)則會將text_b位置對應(yīng)的句子關(guān)系編碼置為1。這里需要注意,只要是句子關(guān)系判斷任務(wù),不管兩句話到底有沒有關(guān)系,即標(biāo)簽是否為1都會將text_b位置對應(yīng)的句子關(guān)系編碼置為1


label_id就代表兩句話是不是有關(guān)系。如果有關(guān)系則標(biāo)簽置為1,否則為0

 

2. 特征存儲在TFRecord格式文件

當(dāng)我們進(jìn)行模型訓(xùn)練的時候,會將全部訓(xùn)練數(shù)據(jù)加載到內(nèi)存中。對于小規(guī)模數(shù)據(jù)集來說沒有問題,但是遇到大規(guī)模數(shù)據(jù)集時我們的內(nèi)存并不能加載全部的數(shù)據(jù),所以涉及到分批加載數(shù)據(jù)。Tensorflow給開發(fā)者提供了TFRecord格式文件。TFRecord內(nèi)部采用二進(jìn)制編碼,加載快,對大型數(shù)據(jù)轉(zhuǎn)換友好。

 

小結(jié)下,特征處理模塊主要將預(yù)處理得到的數(shù)據(jù)轉(zhuǎn)化成特征并存儲到TFRecord格式文件。BERT會將句子輸入轉(zhuǎn)化成三層Embedding編碼,第一層是詞編碼,主要表示詞本身;第二層編碼是位置編碼,主要為了transformer感知詞與詞之間的位置關(guān)系;第三層編碼則表示句與句之間關(guān)系。通過這三層編碼我們就得到了模型的特征輸入。為了方便大數(shù)據(jù)集下模型訓(xùn)練加載數(shù)據(jù),我們將特征持久化到TFRecord格式文件。


模型構(gòu)建模塊


模型構(gòu)建模塊主要分成模型構(gòu)建和模型標(biāo)準(zhǔn)輸入。


1. 模型構(gòu)建

通過函數(shù)model_fn_builder來構(gòu)建自定義模型估計器。

"""自定義模型估計器(model_fn_builder)input:bert_config:bert相關(guān)的配置      num_labels:標(biāo)簽的數(shù)量      init_checkpoint:預(yù)訓(xùn)練模型      learning_rate:學(xué)習(xí)率      num_train_steps:模型訓(xùn)練輪數(shù) = (訓(xùn)練集總數(shù)/batch_size)*epochs      num_warmup_steps:線性地增加學(xué)習(xí)率,num_warmup_steps = num_train_steps * warmup_proportion       use_tpu:是否使用TPUoutput:構(gòu)建好的模型"""def model_fn_builder(bert_config, num_labels, init_checkpoint, learning_rate,                     num_train_steps, num_warmup_steps, use_tpu,                     use_one_hot_embeddings):    """Returns `model_fn` closure for TPUEstimator."""    ......    return model_fn


這里模型構(gòu)建主要有create_model函數(shù)完成,主要完成兩件事:第一是調(diào)用modeling.py中的BertModel類創(chuàng)建模型;第二是計算交叉熵?fù)p失loss。交叉熵的值越小,兩個概率分布就越接近。

"""創(chuàng)建模型,主要完成兩件事:第一件事是調(diào)用modeling.py中國的BertModel類創(chuàng)建模型;第二件事事計算交叉熵?fù)p失loss。交叉熵的值越小,兩個概率分布就越接近。"""def create_model(bert_config, is_training, input_ids, input_mask, segment_ids,                 labels, num_labels, use_one_hot_embeddings):    """Creates a classification model."""    # 建立一個BERT分類模型(create_model)    model = modeling.BertModel(        config=bert_config,        is_training=is_training,        input_ids=input_ids,        input_mask=input_mask,        token_type_ids=segment_ids,        use_one_hot_embeddings=use_one_hot_embeddings)    ......    return (loss, per_example_loss, logits, probabilities)


2. 模型標(biāo)準(zhǔn)輸入

因為源項目是基于Tensorflow框架開發(fā),所以需要將前面得到的特征轉(zhuǎn)化成標(biāo)準(zhǔn)的Tensorflow模型輸入格式。這塊主要由函數(shù)file_based_input_fn_builder來完成。通過輸入文件的不同可以完成訓(xùn)練集、驗證集和測試集的輸入。

"""模型標(biāo)準(zhǔn)輸入從TFRecord格式文件中讀取特征并轉(zhuǎn)化成TensorFlow標(biāo)準(zhǔn)的數(shù)據(jù)輸入格式input:input_file:    input_file=train_file:輸入文件,可以是訓(xùn)練集、驗證集和預(yù)測集    seq_length=FLAGS.max_seq_length:句子最大長度    is_training=True:是否訓(xùn)練標(biāo)志    drop_remainder=True:表示在少于batch_size元素的情況下是否應(yīng)刪除最后一批 ; 默認(rèn)是不刪除。output:TensorFlow標(biāo)準(zhǔn)的格式輸入"""def file_based_input_fn_builder(input_file, seq_length, is_training,                                drop_remainder):  name_to_features = {        "input_ids": tf.FixedLenFeature([seq_length], tf.int64),        "input_mask": tf.FixedLenFeature([seq_length], tf.int64),        "segment_ids": tf.FixedLenFeature([seq_length], tf.int64),        "label_ids": tf.FixedLenFeature([], tf.int64),        "is_real_example": tf.FixedLenFeature([], tf.int64),    }  ......  return input_fn


這里需要注意的是is_training字段,對于訓(xùn)練數(shù)據(jù),需要大量的并行讀寫和打亂順序;而對于驗證數(shù)據(jù),我們不希望打亂數(shù)據(jù),是否并行也不關(guān)心。


小結(jié)下,模型構(gòu)建模塊主要由模型構(gòu)建和模型標(biāo)準(zhǔn)輸入兩部分。模型構(gòu)建負(fù)責(zé)創(chuàng)建和配置BERT模型。模型標(biāo)準(zhǔn)輸入則讀取TFRecord格式文件并轉(zhuǎn)化成標(biāo)準(zhǔn)的模型輸入,根據(jù)輸入文件的不同完成訓(xùn)練集、驗證集和測試集的標(biāo)準(zhǔn)輸入。


模型運(yùn)行模塊


上面模型構(gòu)建好了之后即可運(yùn)行模型。Tensorflow中模型運(yùn)行需要構(gòu)建一個Estimator對象。主要通過源碼中tf.contrib.tpu.TPUEstimator()來構(gòu)建。

"""Estimator對象包裝由model_fn指定的模型input:給定輸入和其他一些參數(shù)    use_tpu:是否使用TPU    model_fn:前面構(gòu)建好的模型    config:模型運(yùn)行相關(guān)的配置    train_batch_size:訓(xùn)練batch大小    eval_batch_size:驗證batch大小    predict_batch_size:預(yù)測batch大小output:需要進(jìn)行訓(xùn)練、計算,或預(yù)測的操作"""estimator = tf.contrib.tpu.TPUEstimator(    use_tpu=FLAGS.use_tpu,    model_fn=model_fn,    config=run_config,    train_batch_size=FLAGS.train_batch_size,    eval_batch_size=FLAGS.eval_batch_size,    predict_batch_size=FLAGS.predict_batch_size)


1. 模型訓(xùn)練

模型訓(xùn)練通過estimator.train即可完成:

if FLAGS.do_train:    train_input_fn = file_based_input_fn_builder(        input_file=train_file,        seq_length=FLAGS.max_seq_length,        is_training=True,        drop_remainder=True)    ....    estimator.train(input_fn=train_input_fn, max_steps=num_train_steps)


2. 模型驗證

模型驗證通過estimator.evaluate即可完成:

if FLAGS.do_eval:    eval_input_fn = file_based_input_fn_builder(            input_file=eval_file,            seq_length=FLAGS.max_seq_length,            is_training=False,            drop_remainder=eval_drop_remainder)    ....    result = estimator.evaluate(input_fn=eval_input_fn, steps=eval_steps, checkpoint_path=filename)


3. 模型預(yù)測

模型預(yù)測通過estimator.predict即可完成:

if FLAGS.do_predict:    predict_input_fn = file_based_input_fn_builder(            input_file=predict_file,            seq_length=FLAGS.max_seq_length,            is_training=False,            drop_remainder=predict_drop_remainder)    ....    result = estimator.predict(input_fn=predict_input_fn)


其他模塊


1. tf日志模塊

import tensorflow as tf# 日志的顯示等級tf.logging.set_verbosity(tf.logging.INFO) # 打印提示日志tf.logging.info("***** Runningtraining *****")# 打印傳參日志tf.logging.info("  Num examples = %d", len(train_examples))

2. 外部傳參模塊

import tensorflow as tfflags = tf.flagsFLAGS = flags.FLAGSflags.DEFINE_string(   "data_dir", None,   "The input data dir. Should contain the .tsv files (or other datafiles) ""for thetask.")# 設(shè)置哪些參數(shù)是必須要傳入的flags.mark_flag_as_required("data_dir")

 

總結(jié)


本篇主要講解BERT中分類器部分的源碼。整體來看主要分成數(shù)據(jù)處理模塊、特征處理模塊、模型構(gòu)建模塊和模型運(yùn)行模塊。數(shù)據(jù)處理模塊主要負(fù)責(zé)數(shù)據(jù)讀入和預(yù)處理工作;特征處理模塊負(fù)責(zé)將預(yù)處理后的數(shù)據(jù)轉(zhuǎn)化成特征并持久化到TFRecord格式文件中;模型構(gòu)建模塊主要負(fù)責(zé)構(gòu)建BERT模型和模型標(biāo)準(zhǔn)輸入數(shù)據(jù)準(zhǔn)備;模型運(yùn)行模塊主要負(fù)責(zé)模型訓(xùn)練、驗證和預(yù)測。通過整體到局部的方式我們可以對BERT中的分類器源碼有深入的了解。后面可以根據(jù)實際的業(yè)務(wù)需求對分類器進(jìn)行二次開發(fā)。

瀏覽 24
點贊
評論
收藏
分享

手機(jī)掃一掃分享

分享
舉報
評論
圖片
表情
推薦
點贊
評論
收藏
分享

手機(jī)掃一掃分享

分享
舉報

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 欧美精产国品一二三产品动漫| 中文字幕一区三区三A片密月 | 中文字幕有码在线视频| 俺来射| 亚洲日韩精品成人无码专区AV| 日本老妇操屄视频| 尻屄网站| 狠狠狠狠干| 日日艹夜夜艹| 欧美日韩性色无码免费| 国产成人高清在线| 最新中文字幕在线观看| 国产在线观看| 少妇bbw搡bbbb搡bbbb| 好男人av| 精品国产一级| 青青操人人操| 香蕉婷婷亚洲丁香| 免费看无码一级A片放24小时| 国产性爱在线视频| 在线看91| 日韩性生活网| 免费看黄色的网站| 午夜mm| 欧美性爱永久| 六月婷| 足交在线观看| 豆花视频logo进入官网| 国产精品国三级国产a11| 青娱乐精品在线视频| 一道本激情视频| 这里只有精品91| 97国产视频| 人人妻人人澡人人爽人人DVD| 国产三级在线观看视频| 河南熟妇搡BBBB搡BBBB| 亚洲天堂无| 91日韩无码| 国产AV久| 亚洲精品中文字幕在线| 五月丁香婷婷综合| 日韩一级特黄A片免费观| 亚洲av免费在线| 久久99国产精品| 无码导航| 亚洲欧美在线视频观看| 开心五月色婷婷综合开心网| 18+免费网站| 中文字幕在线观看辣文| 热久久免费视频| 五月伊人网| 一本道在线无码| 国内自拍av| 一二三四区视频| 国产欧美日韩视频| 狼友视频免费在线观看| 日本特黄视频| 婷婷中文| 亚洲视频1区| 色淫视频| 中文字幕不卡AV在线观看| 熟妇无码| 久久精品6| 操逼高清无码| 亚洲操b| 国产午夜福利在线| 五月丁香婷婷在线| 日本高清无码视频| 亚洲无码一二三| 欧美操b视频| 婷婷五月天丁香网| 色吧av| P站免费版-永久免费的福利视频平台| 亚洲成人无码高清| 成人中文字幕无码| 国产精品国内自产| 国产一级a毛一级a做免费的视频| 欧美久久国产精品| 人人操人人看人人摸| 91久久| 99在线精品视频| 搡BBB| 国产高清精品软件丝瓜软件| 国产在线视频你懂的| 草久视频| 67194熟女| 黄片久久久| 日本免费在线观看| 琪琪色在线视频| 久久丝袜视频| 97黄片| 人妻精品在线| 亚洲偷拍网| 无码国产一区二区三区四区五区| Japanese在线观看| 国产嫩草精品A88AV| 日本高清无码在线观看| 久久99久久99久久99| 久久成人三级片| 夜夜爽妓女77777毛片A片| 91无码人妻精品一区二区蜜桃| 秘亚洲国产精品成人网站| 亚洲男女网站| 日韩精品成人av| jlzzzjlzzz国产免费观看| 黄色动漫在线免费观看| 亚洲AV无码久久寂寞少妇多毛| 国产无码影视| 欧美激情精品| 中文一线二线视频| 国产精品一区二区在线观看| 久久足交| JULIA超乳JULIA无码| 亚洲中文欧美| 青青草免费观看视频| 国产精品98| 囯产精品久久久久久久久久辛辛| 亚洲AV无码| 国产精品久久毛片A片| 色色777| 国产亚洲激情| 亚洲AV永久无码精品| 天天操天天干天天射| 欧美日韩成人在线视频| 成人电影久久| 18禁在线播放| 天天狠狠| 国产精品后入| 婷婷五月电影| 天天日穴| 无码人妻中文| 成人在线无码视频| 91无码人妻精品1国产四虎| 丁香花激情网| av中文字幕无码| 性生活黄色视频| 一道本高清无码视频| 爱搞搞就要搞搞| 操久久久| 久草手机在线| 大香蕉国产视频| 成人小说视频在线社区| 长腿女神打扫偷懒被主人猛操惩罚| 先锋影音资源站av每日资源在线| 秋霞网一区二区| 瑟瑟免费视频| 日韩超清无码| 草久免费视频| 成人黄色视频免费| 91久久久久久久| 在线观看国产黄色| 黄色精品视频| 黑人AV七| 欧美综合视频在线观看| 热re99久久精品国产99热| 丝袜久久| 色播一区| 91精品内射| 日韩在线精品| 中文字幕在线观看av| 亚洲日韩在线视频| 大香蕉精品欧美色综合2025| 中文字幕www一区| 久久久国产AV| 国产又粗又猛又爽又黄91精品 | 亚洲精品国产精品乱码视99| 中文字幕高清视频| 无码一区二区区| 色吧av| 超碰成人网| 再深点灬好爽灬轻点久久国产| 青青草超碰在线| 日韩动态图| 夜夜骚AV一二三区无码| 中文字幕淫乱视频欧美| 精品视频导航| 人人摸天天| 亚洲GV成人无码久久精品| 婷婷狠狠操| 精品无码专区| 国产操逼逼| 久久精品一区二区三区四区五区| 黄色3A片在线观看| 天天拍夜夜爽| 精品一区三区| 青青草社区| AV网站免费观看| 日韩五码| 麻豆性爱| 日韩欧美中文在线观看| 丁香五月在线播放| 一级特黄妇女高潮AA片免费播放| 亚洲高清无码在线免费观看| 涩久久| 青草免费视频| 亚洲香蕉av| 成人性爱视频免费在线观看| 亚洲视频福利| 黄色片一区二区| 亚洲在线视频播放| 91香蕉视频在线| 亚洲欧美手机在线| 骚色综合| 成人爱爱免费视频| www国产精品| 亚洲国产高清视频| 97男人的天堂| av一区在线| 国产探花在线观看| 草逼视频网| 西西888WWW大胆无码| 开心四房播播第四婷婷| 性欧美xxxx| 无码国产精品一区二区视频| 狠狠色婷婷777| A级成人网站| 另类av| 精品交换一区二区三区无码| 欧美午夜激情视频| 无码一区二区三区在线观看| av一区在线| 成人婷婷五月天| 国产一级二级在线观看| 伊人久久影院| 最美孕交vivoestv另类| 成人H视频| 欧美精产国品一二三产品价格| 日韩在线视频91| 日日干夜夜操| 一级国产黄色视频| av一区二区在线观看| 黄色电影天堂| 亚洲AV无码成人精品区国产| 九九久久影院| 中文无码AV在线| 日韩人妻码一区二区三区| 91乱子伦国产乱子伦海的味道| 99re在线| 大香蕉青青| 狠狠狠狠狠操| 在线h片| 亚洲中文视频| 日本高清免费视频| 国产精品AV在线观看| 午夜成人在线观看| 国产精品久久| 夜夜嗨av一区二区三区| 黄色免费观看网站| 欧美精品在线播放| 人人妻人人澡人人爽久久| 欧美色图俺去了| 99久久婷婷国产综合精品漫| 国产第一页在线| 11孩岁女精品A片BBB| 日韩美在线| 日韩大香蕉在线| 国产激情视频在线观看| 欧美操日本| 看免费黄色视频| 日韩高清av| 日韩欧美在线视频| 午夜操逼逼| 97日日| 91麻豆成人| 一区二区高清无码视频| 91香蕉国产视频| 亚洲色欲色欲www在线成人网| 免费观看色情视频| 人人妻人人躁人人DVD| 狠狠躁18三区二区一区免费人| www.婷婷五月天| 国产三级片视频在线观看| 夸克看成人片一级A片| 91九色91蝌蚪91窝成人| 欧美日韩中文字幕| 欧美v在线观看| 日本成人无码| 欧美黄片网站| 操逼网123首页| 国产精品视频免费在线观看| 欧美一区二区三区视频| 黄色性爱网址| 天堂资源中文在线| 亚洲AV免费在线观看| 国产福利免费视频| 大香久久| 亚洲黄色视频网站| 18禁在线看| 国产免费高清视频| 午夜性爱福利| 国产探花自拍| 在线播放一区| 蜜桃精品一区二区三区美女| 新超碰97| 国产精品96久久久| 国产一级性爱视频| www.97色| 日本不卡一区二区| 中文字幕+乱码+中文字幕一区| aⅴ无码| 中文字幕AV在线播放| 亚洲操屄| A片免费在线播放| 中文字幕无码在线观看| 国产精品小电影| 亚洲精品一二三区| 色淫视频| 亚洲AV无码成人专区| 爱爱毛片| 亚洲无码在线资源| 最新日韩无码| 日韩视频免费观看高清完整版在线观| 色吧av| 伊人东京热| 亚洲一区二区三区免费视频| 特级艺体西西444WWw| 精品九九| 日本啪啪网站| 在线观看黄色电影| 日本成人黄色| 日韩av免费看| 久久免费操| 99re6热在线精品视频| 日本成人视频| 91逼| A毛片| 91视频青青草| 91无码高清| 日韩综合在线| 99精品视频网站| www.黄色在线观看| 大学生18一19GAY169| 18久久| 色卻A| 好吊顶亚洲AV大香蕉色色| 色婷五月天| 亚洲欧美成人片| 91精品免费视频| 性欧美成人播放77777| 色婷婷小说| 国产成人在线播放| 欧美一级免费A片| 日本黄色一级视频| 久久高潮| 亚洲第一免费视频| 亚洲精品乱码久久久久久蜜桃欧美 | 一区二区三区四区在线播放| 亚洲美女喷水视频| 色视频在线播放| 爱爱网址| 午夜黄色视频在线观看| 亚洲第一福利视频| 午夜美女福利视频| 在线观看者亚洲| 婷婷日韩在线| 欧美日韩三区| 干少妇视频| 91久久婷婷国产| 日本在线不卡一区| 69国产精品成人无码视频色| 一级a片激情啪啪免费观| 欧美成人高清无码| 一级片在线播放| www.97av| 日韩天堂| 噜噜影院| 看毛片网站| 国产成人网站免费观看| 精品91| 欧美亚洲成人在线观看| 日本免费一级片| 日日夜夜无码| 爱爱视频日本| 嫩BBB槡BBBB槡BBBB免费视频 | 亚洲免费中文字幕| 欧美V亚洲| 一级黄色a片| 热久久久久久| 在线免费看毛片| 东北A片| 国产精品无码永久免费不卡 | 日韩成人观看| 日本的黄色视频| 欧美日韩激情视频| 国产乱婬片视频| 台湾一区二区| 亚洲国产精品自| 人人操人人干人人爽| 成人777777| 亚洲AV无码电影| 竹菊av一区二区三区四区五区| 四虎884| av老鸭窝| 精品在线免费观看| 美女超碰| 中文字幕在线视频观看| H片免费在线观看| 久久丁香五月婷婷五月天激情视频 | ThePorn精品无码| 久免费视频| 成人伊人综合网| 人人操在线| 99er在线观看视频| 三级片在线看片AV| 91在线无码精品秘入口国战| 久久久无码人妻精品无码| 天天操天天插| 日韩无码乱码| 2014天堂网| 嫩BBB搡BBBB搡BBBB-百度| 免费观看无码视频| 天堂在线观看av| 38D蜜桃臀| 青娱乐老视频| 精品免费黄色视频| 无码AV在线观看| 伊人大香蕉网站| 久久一本| 三级网站视频| 一级做a爰片毛片A片| 日韩怡春院| 国产激情内射| 偷拍视频网站| 综合伊人大香蕉| 91水蜜桃| a级网站| 亚州精品成人片| 久操视频在线播放| 黄色A片免费| 国产AV福利| 欧美深夜福利| 中文字幕日韩欧美在线| av超碰| 国产网站视频| 国产精品久久久久久久久| 日韩中文字幕免费在线观看| 亚洲va欧美va天堂v国产综合 | 操逼一区| 国产2页| 人人干AV| 国产乱轮视频| AV黄色在线| 色天使色天堂| 亚洲福利网站| 高清无码直接看| 久精品视频| 免费中文字幕av| 国产在线内射| 91免费视频在线| 亚洲AV一二三区| 免费中文字幕| 北条麻妃日B视频| 国产黄色在线看| 成人视频网站在线观看| 日皮在线观看| 欧美性生活视频| 苍井空一区| 日韩三级一区| 国产激情内射| 伊人色五月| 色婷婷国产精品综合在线观看 | a√天堂资源中文8| 淫荡五月天视频导航| 天天插天天狠天天透| 揉BBB搡BBB搡BBB| 亚洲成人毛片| 国产精品福利小视频| 91大屁股| 久久久一区二区| 美女黄色网| 亚洲AV无码黑人专区| 国产第1页| 国产草草| 伊人色综合网| 97视频| 国产成人高潮毛片| 久久97人妻AⅤ无码一区| 欧美黄色大香蕉| 中文在线字幕免费观看电视剧大全| 亚洲淫秽视频| 亚洲激情网址| 午夜丁香| 欧美囗交大荫蒂免费| AAA级片| 在线成人| 影音先锋av无码| 免费无码婬片AAAAA片| www.色婷婷| 91欧美精品| 丁香五月天激情网| 一本一道vs波多野结衣| 婷婷丁香激情| 中文在线无码| 内射学生妹J亅| 欧美日韩毛| 欧美成人视屏| 91无码精品国产AⅤ| 极品美女援交在线| 国产永久免费| 嘉兴少妇按摩69XX| 先锋av资源在线| 久草天堂| 国产精品a久久久久| 亚洲欧美在线视频观看| 手机看片福利一区二区| 婷婷精品国产a久久综合| 一本一本久久a久久精品牛牛影视| 日日碰狠狠躁久久躁婷婷| 国产91无码精品秘入口在线观看 | 国产777777| 国产麻豆性爱视频| 一本久道无码| 91人妻无码一区二区久久| 国产AV一区二区三区四区| 97亚洲综合| 中文字幕在线无码观看| 无码一区二区三区四区| 亚洲精品成人无码毛片| 久久婷婷国产麻豆91天堂| 人人操天天| 日韩福利| seseav| 婷婷久久综合久| 亚洲天堂一| 午夜成人小视频| 日韩成人中文字幕| 91污| 中文字幕电影| 嫩BBB搡BBBB搡BBBB| 日韩精品成人| 91视频内射| 国产黄色视频在线看| 日本免费在线观看视频| 东京热综合影院| 亚洲综合电影| AV大全在线观看| 青青草原在线视频免费观看| 五月人妻| 青春草视频| 无码专区视频| 亚洲色偷精品一区二区三区| 东京热视频网址| 丁香视频| 玖玖在线视频| 一本道高清| 亚洲综合精品| 天堂网一区二区三区| av三级片在线播放| 精品操逼| 激情久久婷婷| 中文字幕手机在线视频| 九九成人精品| 日韩aaaa| 蜜桃久久| 欧美精品一二三| 69xx视频| 高清无码视频免费在线观看| 国产午夜福利视频在线观看| 欧美经典自拍狼友| 国产色AV| 国产精品tv| 亚洲午夜久久久久久久久| 欧美一级A片免费看视频小说| www.国产豆花精品区| 亚洲热在线| 黄片久久久| 国产多人搡BBBB槡BBBB| 性色A| 91综合色| 2012天天夜夜| 人妻少妇视频| 西西人体大胆ww4444| 亚洲欧美高清| 国产手机拍视频推荐2023| 日本成人免费| 日本一本视频| 国产一级婬女AAAA片季秀英| 一级A片60分钟免费看| 成人无码区免费A片久久| 天堂网久久| 欧美狠狠插| 狼友视频在线看| 91大神免费在线观看| 亚洲国产精品视频| 99伊人| 国产三级在线观看视频| 黄色三级电影| 欧美日韩婷婷| 国产日韩欧美久久| 日本高清中文字幕| 大香蕉现在视频中心一| 淫色视频| 熟女人妻人妻の视频| 欧美成人精品激情在线视频| 亚洲自拍小说| 性爱91视频| 热久久久久久| 国产精品无码一区二区三| 黄频免费观看| 日韩一区二区在线观看| 国产高清无码自拍| 777免费视频| 青草视频在线免费观看| 日日艹夜夜艹| 欧美女人日逼视频| 国产尤物在线观看| 91视频熟女| 91狠狠爱| 免费高清无码| 天堂a√中文8| 国产精成人品| 日韩人妻无码中文字幕| 最新国产在线| 亚洲视频免费在线播放| 91人妻人人澡人人爽人妻| 国产毛片精品一区二区色欲黄A片| 日韩无码视频播放| 亚洲国产成人av| 五月婷婷免费视频| 女人特级毛片18| 国产成人秘一区二区三区东京热 | 成人特级毛片全部免费播放| 69成人免费视频| 国产操逼电影| 男人天堂久久| 国产精品99视频| 国产精品扒开腿做爽爽爽视频| 欧美色图俺去了| 91丨熟女丨露脸| 52妺嘿嘿午夜福利在线| 亚洲激情视频网站| 国产91探花系列在线观看| 蜜桃av.38| 高清无码在线视频| 2025精品偷拍视频| 91成人18| 亚洲a在线观看| 无码婷婷| 中文字幕在线不卡| 天天看天天日| 在线免费看a| 国产女人18毛片水18精| 亚洲爱| 视频一区18| 日本欧美在线播放中文| 色欲网址| 天天操夜夜爱| 亚洲午夜久久久久久久久| 青青草小视频| 九色PORNY丨自拍蝌蚪| 中国美女一级黄片| 日本中文字幕在线免费观看| 伊人大久久| 亚洲精品少妇| 国产a片视频| 在线免费观看成人视频| 1024手机在线观看| 欧美在线A| 免费AV影片| 91狠狠综| 日韩精品成人无码| 五月天激情爱爱| 日日夜夜超碰| 免费在线看A| 亚洲高清无码在线免费观看| 99视频在线播放| 黄色天堂天天看| 久久国产一区二区| 婷婷俺也去| 黄a网站| 欧美无人区码suv| 久久综合加勒比| 精产国品一区二区三区| 成人毛片在线播放| 狼友视频在线观看18| 求毛片网址| 成人免费乱码大片a毛片蜜芽 | 日韩黄片免费看| 国产AA| 久久三级片电影| 久久视频一区| 毛片在线观看网站| 成人视频18| 亚洲精品福利视频导航| 囯产精品一区二区三区线一牛影视1 | 91网站免费看| 国产欧美日韩| 高清毛片AAAAAAAAA郊外| 极品美鮑20p| 伊人久久影院| 欧美日韩AV| 色香蕉影院| 在线观看黄色电影| 91麻豆国产福利精品| 成人先锋影音| 加勒比无码| 东京热综合影院| 久久色片| 日韩精品一二三| 极品美女扒开粉嫩小泬高潮一| 麻豆国产91| 91亚洲国产AⅤ精品一区二区 | 性欧美69| 欧美一区| 免费涩涩无遮挡18国产| 黄片一区二区三区| 高清欧美日韩第一摸| 在线观看18s| 三级高清无码| 大香蕉伊人丁香五月| 无码福利视频| 国产高清无码免费| 五月婷网| 777视频在线观看| 日韩成人网站| 91久久婷婷亚洲精品成人| 影音先锋资源站| 水多多成人网站A片| 2021国产视频| 国产成人一区二区| 黄色国产在线| 在线黄色小视频| 中文字幕一区三区三A片密月| 亚洲成人免费在线| 大香蕉伊在线观看| 亚洲Av无码午夜国产精品色软件| 青娱乐欧美| 午夜免费播放观看在线视频| 777中文字幕| 一夲道无码专区av无码A片| 黄色片网站视频| 欧美女人操逼| 国产成人97精品免费看片| h片网站在线观看| 精品免费视频| 美女超碰| 狠狠操在线视频| 免费黄视频在线观看| 久久视频精品| 西西444WWW无码视频软件功能介绍| 三级黄色毛片| 老太奶性BBwBBw侧所| 国产麻豆性爱视频| 柒私黄片| 人人草在线观看| 欧美日逼视频| 婷婷看片| 欧美一级a| 欧美日韩人妻| 新亚洲天堂男子Av-| 无码免费毛片一区二区三区古代| 天堂视频在线| 91搞| 欧美天天干| 少妇搡BBBB搡BBB搡HD(| 日韩A片一级无码免费蜜桃| 亚洲GV成人无码久久精品| av毛片| 国产网站免费| 日本一级A片| 91吴梦梦一区二区传媒| 蜜臀av一区二区三区| 久久久久久97| 国产AV一区二区三区四区五区 | 特级爱爱视频| 亚洲日韩国产AV无码无码精品 | 久久精品视频观看| 九九精品在线观看| 嫩BBB槡BBBB槡BBB小号| 青青艹在线视频| 亚洲无码高清免费| 日日夜夜精品视频| jlzzzjlzzz国产免费观看 | 久久国产性爱| 激情国产精品| 亚洲无码免费在线观看| 中文字幕日本精品5| 四虎国产精品成人久久| 中文最新天堂8√| 日韩精品免费一区二区在线观看| 欧美在线一区二区三区| 一本色道久久无码人妻精品69| 欧美国产日韩综合在线观看170 | 国产剧情一区二区三区| 亚洲视频免费观看| 999一区二区三区| 欧美日韩国产成人在线观看| 欧美成人一级| 精品超碰| 人人草人人看人人摸| 国产91精品看黄网站在线观看| 最近最火中文字幕mv歌词| 国产精品123区| 免费黄色视频网址| 制服.丝袜.亚洲.中文.豆花| 日韩在线视频一区| 成人免费视频网| 成人亚洲天堂| 西西人体大胆ww4444| 亚洲精品一区二区三区无码电影| 麻豆传媒猫爪| 西西4444www大胆无| 亚洲AV无码国产精品久久不卡| 老鸭窝av免费入口在线观看| 久久视频免费| 91国产精品在线| 欧美不卡在线视频| 五月天激情电影| 黄色片在线观看视频| 精品人人人| 看毛片网站| 操逼在线播放| 国产精品理论片| 99re6热在线精品视频功能| 亚洲欧洲中文字幕| 天堂a√在线8| 成人亚洲天堂| 精品视频在线播放| 欧美黄色网址| 国产色色视频| 欧美日韩一区二区三区在线电影| 亚洲性爱视频在线观看| 黄片无遮挡| 揉BBB搡BBB搡BBB| 日本一节片在线播放| 中文字幕第83页| 久久私人影院| 韩国无码中文| 大吊妞| 蜜桃av秘无码一区二区三区| 九九热re99re6在线精品| 婷婷丁香五月网| aa无码视频| 色天堂视频| 中文字幕第10页| 狠狠噜噜| 狠狠色狠狠操| 黄色视频在线观看网站| 国产一级婬片A片AAA樱花| 性BBW| 日本欧美成人片AAAA| 欧美日韩免费在线播放电影在线播放电影在线播放电影免费 | 欧美成人中文字幕| 你懂的视频| 免费v片在线观看| 柠檬AV导航| 欧美AAA大片| 亚洲情在线| 欧亚无码| 亚洲卡一卡二| 国产aⅴ激情无码久久久无码| 日韩无码黄| 91视频网站入口| 国产在线在线| 国产自偷自拍| 日本激情网| 久久久久久性爱| 97中文字幕在线| 翔田千里无码免费播放| 亚洲国产A片| 伊人成人视频在线观看| 西西人体444大胆高清张悠雨| av黄色在线| 一级黄色视频免费看| 一级特黄妇女高潮AA片免费播放 | 欧美亚洲黄片| 欧美成人午夜视频| 蜜臀99久久精品久久久懂爱| 国产精品秘ThePorn| 欧美成人A片AAA片在线播放| 九九九色视频| 青青操国产乱伦| 国产黄色录像| 婷婷五月亚洲| 成人在线中文字幕| V天堂在线| 蜜桃AV在线播放| 亚洲欧美高清| 欧美亚洲综合在线| 蜜桃系列一区二区精品| 国产精品自拍在线观看| 日韩欧美中文字幕视频| 老鸭窝久久| 特级特黄A级高潮播放| 日韩中文毛片| 日韩东京热中文字幕| 亚洲麻豆| 五月丁香婷婷综合| 超碰大香蕉| 天天干天天操天天| 无码成人片| 国产无遮挡又黄又爽免费网站| 今天成全在线观看高清| 亚洲AV永久无码精品| 91蝌蚪在线| 国产精品无码白浆高潮| 欧美夜夜爽| 日本精品在线| 俺也干| 久久精品国产亚洲|