精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

自然語言處理第一番之文本分類器

大數(shù)據(jù) 自然語言處理
文本分類應(yīng)該是自然語言處理中最普遍的一個(gè)應(yīng)用,例如文章自動(dòng)分類、郵件自動(dòng)分類、垃圾郵件識(shí)別、用戶情感分類等等,在生活中有很多例子,這篇文章主要從傳統(tǒng)和深度學(xué)習(xí)兩塊來解釋下我們?nèi)绾巫鲆粋€(gè)文本分類器。

[[194511]]

前言

文本分類應(yīng)該是自然語言處理中最普遍的一個(gè)應(yīng)用,例如文章自動(dòng)分類、郵件自動(dòng)分類、垃圾郵件識(shí)別、用戶情感分類等等,在生活中有很多例子,這篇文章主要從傳統(tǒng)和深度學(xué)習(xí)兩塊來解釋下我們?nèi)绾巫鲆粋€(gè)文本分類器。

文本分類方法

傳統(tǒng)的文本方法的主要流程是人工設(shè)計(jì)一些特征,從原始文檔中提取特征,然后指定分類器如LR、SVM,訓(xùn)練模型對(duì)文章進(jìn)行分類,比較經(jīng)典的特征提取方法如頻次法、tf-idf、互信息方法、N-Gram。

深度學(xué)習(xí)火了之后,也有很多人開始使用一些經(jīng)典的模型如CNN、LSTM這類方法來做特征的提取, 這篇文章會(huì)比較粗地描述下,在文本分類的一些實(shí)驗(yàn)

傳統(tǒng)文本分類方法

這里主要描述兩種特征提取方法:頻次法、tf-idf、互信息、N-Gram。

頻次法

頻次法,顧名思義,十分簡(jiǎn)單,記錄每篇文章的次數(shù)分布,然后將分布輸入機(jī)器學(xué)習(xí)模型,訓(xùn)練一個(gè)合適的分類模型,對(duì)這類數(shù)據(jù)進(jìn)行分類,需要指出的時(shí),在統(tǒng)計(jì)次數(shù)分布時(shí),可合理提出假設(shè),頻次比較小的詞對(duì)文章分類的影響比較小,因此我們可合理地假設(shè)閾值,濾除頻次小于閾值的詞,減少特征空間維度。

TF-IDF

TF-IDF相對(duì)于頻次法,有更進(jìn)一步的考量,詞出現(xiàn)的次數(shù)能從一定程度反應(yīng)文章的特點(diǎn),即TF,而TF-IDF,增加了所謂的反文檔頻率,如果一個(gè)詞在某個(gè)類別上出現(xiàn)的次數(shù)多,而在全部文本上出現(xiàn)的次數(shù)相對(duì)比較少,我們認(rèn)為這個(gè)詞有更強(qiáng)大的文檔區(qū)分能力,TF-IDF就是綜合考慮了頻次和反文檔頻率兩個(gè)因素。

互信息方法

互信息方法也是一種基于統(tǒng)計(jì)的方法,計(jì)算文檔中出現(xiàn)詞和文檔類別的相關(guān)程度,即互信息

N-Gram

基于N-Gram的方法是把文章序列,通過大小為N的窗口,形成一個(gè)個(gè)Group,然后對(duì)這些Group做統(tǒng)計(jì),濾除出現(xiàn)頻次較低的Group,把這些Group組成特征空間,傳入分類器,進(jìn)行分類。

深度學(xué)習(xí)方法

基于CNN的文本分類方法

  • 最普通的基于CNN的方法就是Keras上的example做情感分析,接Conv1D,指定大小的window size來遍歷文章,加上一個(gè)maxpool,如此多接入幾個(gè),得到特征表示,然后加上FC,進(jìn)行最終的分類輸出。
  • 基于CNN的文本分類方法,最出名的應(yīng)該是2014 Emnlp的 Convolutional Neural Networks for Sentence Classification,使用不同filter的cnn網(wǎng)絡(luò),然后加入maxpool, 然后concat到一起。 

 

  • 這類CNN的方法,通過設(shè)計(jì)不同的window size來建模不同尺度的關(guān)系,但是很明顯,丟失了大部分的上下文關(guān)系,Recurrent Convolutional Neural Networks for Text Classification,將每一個(gè)詞形成向量化表示時(shí),加上上文和下文的信息,每一個(gè)詞的表示如下:

 

整個(gè)結(jié)構(gòu)框架如下:

 

 

  • 如針對(duì)這句話”A sunset stroll along the South Bank affords an array of stunning vantage points”,stroll的表示包括c_l(stroll),pre_word2vec(stroll),c_r(stroll), c_l(stroll)編碼A sunset的語義,而c_r(stroll)編碼along the South Bank affords an array of stunning vantage points的信息,每一個(gè)詞都如此處理,因此會(huì)避免普通cnn方法的上下文缺失的信息。

基于LSTM的方法

  • 和基于CNN的方法中***種類似,直接暴力地在embedding之后加入LSTM,然后輸出到一個(gè)FC進(jìn)行分類,基于LSTM的方法,我覺得這也是一種特征提取方式,可能比較偏向建模時(shí)序的特征;
  • 在暴力的方法之上,A C-LSTM Neural Network for Text Classification,將embedding輸出不直接接入LSTM,而是接入到cnn,通過cnn得到一些序列,然后吧這些序列再接入到LSTM,文章說這么做會(huì)提高***分類的準(zhǔn)去率。

代碼實(shí)踐

語料及任務(wù)介紹

訓(xùn)練的語料來自于大概31個(gè)新聞?lì)悇e的新聞?wù)Z料,但是其中有一些新聞數(shù)目比較少,所以取了數(shù)量比較多的前20個(gè)新聞?lì)惐鹊男侣務(wù)Z料,每篇新聞稿字?jǐn)?shù)從幾百到幾千不等,任務(wù)就是訓(xùn)練合適的分類器然后將新聞分為不同類別: 

 

Bow

Bow對(duì)語料處理,得到tokens set:

  1. def __get_all_tokens(self): 
  2.     """ get all tokens of the corpus 
  3.     ""
  4.     fwrite = open(self.data_path.replace("all.csv","all_token.csv"), 'w'
  5.     with open(self.data_path, "r"as fread: 
  6.         i = 0 
  7.         # while True
  8.         for line in fread.readlines(): 
  9.             try: 
  10.                 line_list = line.strip().split("\t"
  11.                 label = line_list[0] 
  12.                 self.labels.append(label) 
  13.                 text = line_list[1] 
  14.                 text_tokens = self.cut_doc_obj.run(text) 
  15.                 self.corpus.append(' '.join(text_tokens)) 
  16.                 self.dictionary.add_documents([text_tokens]) 
  17.                 fwrite.write(label+"\t"+"\\".join(text_tokens)+"\n") 
  18.                 i+=1 
  19.             except BaseException as e: 
  20.                 msg = traceback.format_exc() 
  21.                 print msg 
  22.                 print "=====>Read Done<======" 
  23.                 break 
  24.     self.token_len = self.dictionary.__len__() 
  25.     print "all token len "+ str(self.token_len) 
  26.     self.num_data = i 
  27.     fwrite.close()  

然后,tokens set 以頻率閾值進(jìn)行濾除,然后對(duì)每篇文章做處理來進(jìn)行向量化:

  1. def __filter_tokens(self, threshold_num=10): 
  2.     small_freq_ids = [tokenid for tokenid, docfreq in self.dictionary.dfs.items() if docfreq < threshold_num ] 
  3.     self.dictionary.filter_tokens(small_freq_ids) 
  4.     self.dictionary.compactify() 
  5.  
  6. def vec(self): 
  7.     """ vec: get a vec representation of bow 
  8.     ""
  9.     self.__get_all_tokens() 
  10.     print "before filter, the tokens len: {0}".format(self.dictionary.__len__()) 
  11.     self.__filter_tokens() 
  12.     print "After filter, the tokens len: {0}".format(self.dictionary.__len__()) 
  13.     self.bow = [] 
  14.     for file_token in self.corpus: 
  15.         file_bow = self.dictionary.doc2bow(file_token) 
  16.         self.bow.append(file_bow) 
  17.     # write the bow vec into a file 
  18.     bow_vec_file = open(self.data_path.replace("all.csv","bow_vec.pl"), 'wb'
  19.     pickle.dump(self.bow,bow_vec_file) 
  20.     bow_vec_file.close() 
  21.     bow_label_file = open(self.data_path.replace("all.csv","bow_label.pl"), 'wb'
  22.     pickle.dump(self.labels,bow_label_file) 
  23.     bow_label_file.close()  

最終就得到每篇文章的bow的向量,由于這塊的代碼是在我的筆記本上運(yùn)行的,直接跑占用內(nèi)存太大,因?yàn)槊恳黄恼略趖oken set中的表示是極其稀疏的,因此我們可以選擇將其轉(zhuǎn)為csr表示,然后進(jìn)行模型訓(xùn)練,轉(zhuǎn)為csr并保存中間結(jié)果代碼如下:

  1. def to_csr(self): 
  2.     self.bow = pickle.load(open(self.data_path.replace("all.csv","bow_vec.pl"), 'rb')) 
  3.     self.labels = pickle.load(open(self.data_path.replace("all.csv","bow_label.pl"), 'rb')) 
  4.     data = [] 
  5.     rows = [] 
  6.     cols = [] 
  7.     line_count = 0 
  8.     for line in self.bow: 
  9.         for elem in line: 
  10.             rows.append(line_count) 
  11.             cols.append(elem[0]) 
  12.             data.append(elem[1]) 
  13.         line_count += 1 
  14.     print "dictionary shape ({0},{1})".format(line_count, self.dictionary.__len__()) 
  15.     bow_sparse_matrix = csr_matrix((data,(rows,cols)), shape=[line_count, self.dictionary.__len__()]) 
  16.     print "bow_sparse matrix shape: " 
  17.     print bow_sparse_matrix.shape 
  18.     # rarray=np.random.random(size=line_count) 
  19.     self.train_set, self.test_set, self.train_tag, self.test_tag = train_test_split(bow_sparse_matrix, self.labels, test_size=0.2) 
  20.     print "train set shape: " 
  21.     print self.train_set.shape 
  22.     train_set_file = open(self.data_path.replace("all.csv","bow_train_set.pl"), 'wb'
  23.     pickle.dump(self.train_set,train_set_file) 
  24.     train_tag_file = open(self.data_path.replace("all.csv","bow_train_tag.pl"), 'wb'
  25.     pickle.dump(self.train_tag,train_tag_file) 
  26.     test_set_file = open(self.data_path.replace("all.csv","bow_test_set.pl"), 'wb'
  27.     pickle.dump(self.test_set,test_set_file) 
  28.     test_tag_file = open(self.data_path.replace("all.csv","bow_test_tag.pl"), 'wb'
  29.     pickle.dump(self.test_tag,test_tag_file)  

***訓(xùn)練模型代碼如下: 

  1. def train(self): 
  2.     print "Beigin to Train the model" 
  3.     lr_model = LogisticRegression() 
  4.     lr_model.fit(self.train_set, self.train_tag) 
  5.     print "End Now, and evalution the model with test dataset" 
  6.     # print "mean accuracy: {0}".format(lr_model.score(self.test_set, self.test_tag)) 
  7.     y_pred = lr_model.predict(self.test_set) 
  8.     print classification_report(self.test_tag, y_pred) 
  9.     print confusion_matrix(self.test_tag, y_pred) 
  10.     print "save the trained model to lr_model.pl" 
  11.     joblib.dump(lr_model, self.data_path.replace("all.csv","bow_lr_model.pl"))   

TF-IDF

TF-IDF和Bow的操作十分類似,只是在向量化使使用tf-idf的方法:

  1. def vec(self): 
  2.     """ vec: get a vec representation of bow 
  3.     ""
  4.     self.__get_all_tokens() 
  5.     print "before filter, the tokens len: {0}".format(self.dictionary.__len__()) 
  6.     vectorizer = CountVectorizer(min_df=1e-5) 
  7.     transformer = TfidfTransformer() 
  8.     # sparse matrix 
  9.     self.tfidf = transformer.fit_transform(vectorizer.fit_transform(self.corpus)) 
  10.     words = vectorizer.get_feature_names() 
  11.     print "word len: {0}".format(len(words)) 
  12.     # print self.tfidf[0] 
  13.     print "tfidf shape ({0},{1})".format(self.tfidf.shape[0], self.tfidf.shape[1]) 
  14.  
  15.     # write the tfidf vec into a file 
  16.     tfidf_vec_file = open(self.data_path.replace("all.csv","tfidf_vec.pl"), 'wb'
  17.     pickle.dump(self.tfidf,tfidf_vec_file) 
  18.     tfidf_vec_file.close() 
  19.     tfidf_label_file = open(self.data_path.replace("all.csv","tfidf_label.pl"), 'wb'
  20.     pickle.dump(self.labels,tfidf_label_file) 
  21.     tfidf_label_file.close()  

這兩類方法效果都不錯(cuò),都能達(dá)到98+%的準(zhǔn)確率。

CNN

語料處理的方法和傳統(tǒng)的差不多,分詞之后,使用pretrain 的word2vec,這里我遇到一個(gè)坑,我開始對(duì)我的分詞太自信了,***模型一直不能收斂,后來向我們組博士請(qǐng)教,極有可能是由于分詞的詞序列中很多在pretrained word2vec里面是不存在的,而我這部分直接丟棄了,所有可能存在問題,分詞添加了詞典,然后,對(duì)于pre-trained word2vec不存在的詞做了一個(gè)隨機(jī)初始化,然后就能收斂了,學(xué)習(xí)了!!!

載入word2vec模型和構(gòu)建cnn網(wǎng)絡(luò)代碼如下(增加了一些bn和dropout的手段):

  1. def gen_embedding_matrix(self, load4file=True): 
  2.     """ gen_embedding_matrix: generate the embedding matrix 
  3.     ""
  4.     if load4file: 
  5.         self.__get_all_tokens_v2() 
  6.     else
  7.         self.__get_all_tokens() 
  8.     print "before filter, the tokens len: {0}".format( 
  9.         self.dictionary.__len__()) 
  10.     self.__filter_tokens() 
  11.     print "after filter, the tokens len: {0}".format( 
  12.         self.dictionary.__len__()) 
  13.     self.sequence = [] 
  14.     for file_token in self.corpus: 
  15.         temp_sequence = [x for x, y in self.dictionary.doc2bow(file_token)] 
  16.         print temp_sequence 
  17.         self.sequence.append(temp_sequence) 
  18.  
  19.     self.corpus_size = len(self.dictionary.token2id) 
  20.     self.embedding_matrix = np.zeros((self.corpus_size, EMBEDDING_DIM)) 
  21.     print "corpus size: {0}".format(len(self.dictionary.token2id)) 
  22.     for key, v in self.dictionary.token2id.items(): 
  23.         key_vec = self.w2vec.get(key
  24.         if key_vec is not None: 
  25.             self.embedding_matrix[v] = key_vec 
  26.         else
  27.             self.embedding_matrix[v] = np.random.rand(EMBEDDING_DIM) - 0.5 
  28.     print "embedding_matrix len {0}".format(len(self.embedding_matrix)) 
  29.  
  30. def __build_network(self): 
  31.     embedding_layer = Embedding( 
  32.         self.corpus_size, 
  33.         EMBEDDING_DIM, 
  34.         weights=[self.embedding_matrix], 
  35.         input_length=MAX_SEQUENCE_LENGTH, 
  36.         trainable=False
  37.     # train a 1D convnet with global maxpooling 
  38.     sequence_input = Input(shape=(MAX_SEQUENCE_LENGTH, ), dtype='int32'
  39.     embedded_sequences = embedding_layer(sequence_input) 
  40.     x = Convolution1D(128, 5)(embedded_sequences) 
  41.     x = BatchNormalization()(x) 
  42.     x = Activation('relu')(x) 
  43.     x = MaxPooling1D(5)(x) 
  44.     x = Convolution1D(128, 5)(x) 
  45.     x = BatchNormalization()(x) 
  46.     x = Activation('relu')(x) 
  47.     x = MaxPooling1D(5)(x) 
  48.     print "before 256", x.get_shape() 
  49.     x = Convolution1D(128, 5)(x) 
  50.     x = BatchNormalization()(x) 
  51.     x = Activation('relu')(x) 
  52.     x = MaxPooling1D(15)(x) 
  53.     x = Flatten()(x) 
  54.  
  55.     x = Dense(128)(x) 
  56.     x = BatchNormalization()(x) 
  57.     x = Activation('relu')(x) 
  58.     x = Dropout(0.5)(x) 
  59.     print x.get_shape() 
  60.     preds = Dense(self.class_num, activation='softmax')(x) 
  61.     print preds.get_shape() 
  62.     adam = Adam(lr=0.0001) 
  63.     self.model = Model(sequence_input, preds) 
  64.     self.model.compile( 
  65.         loss='categorical_crossentropy', optimizer=adam, metrics=['acc']) 

 

另外一種網(wǎng)絡(luò)結(jié)構(gòu),韓國人那篇文章,網(wǎng)絡(luò)構(gòu)造如下:

  1. def __build_network(self): 
  2.     embedding_layer = Embedding( 
  3.         self.corpus_size, 
  4.         EMBEDDING_DIM, 
  5.         weights=[self.embedding_matrix], 
  6.         input_length=MAX_SEQUENCE_LENGTH, 
  7.         trainable=False
  8.     # train a 1D convnet with global maxpooling 
  9.     sequence_input = Input(shape=(MAX_SEQUENCE_LENGTH, ), dtype='int32'
  10.     embedded_sequences = embedding_layer(sequence_input) 
  11.     conv_blocks = [] 
  12.     for sz in self.filter_sizes: 
  13.         conv = Convolution1D( 
  14.             self.num_filters, 
  15.             sz, 
  16.             activation="relu"
  17.             padding='valid'
  18.             strides=1)(embedded_sequences) 
  19.         conv = MaxPooling1D(2)(conv) 
  20.         conv = Flatten()(conv) 
  21.         conv_blocks.append(conv) 
  22.     z = Merge( 
  23.         conv_blocks, 
  24.         mode='concat') if len(conv_blocks) > 1 else conv_blocks[0] 
  25.     z = Dropout(0.5)(z) 
  26.     z = Dense(self.hidden_dims, activation="relu")(z) 
  27.     preds = Dense(self.class_num, activation="softmax")(z) 
  28.     rmsprop = RMSprop(lr=0.001) 
  29.     self.model = Model(sequence_input, preds) 
  30.     self.model.compile( 
  31.         loss='categorical_crossentropy'
  32.         optimizer=rmsprop, 
  33.         metrics=['acc']) 

 

LSTM

由于我這邊的task是對(duì)文章進(jìn)行分類,序列太長(zhǎng),直接接LSTM后直接爆內(nèi)存,所以我在文章序列直接,接了兩層Conv1D+MaxPool1D來提取維度較低的向量表示然后接入LSTM,網(wǎng)絡(luò)結(jié)構(gòu)代碼如下:

  1. def __build_network(self): 
  2.     embedding_layer = Embedding( 
  3.         self.corpus_size, 
  4.         EMBEDDING_DIM, 
  5.         weights=[self.embedding_matrix], 
  6.         input_length=MAX_SEQUENCE_LENGTH, 
  7.         trainable=False
  8.     # train a 1D convnet with global maxpooling 
  9.     sequence_input = Input(shape=(MAX_SEQUENCE_LENGTH, ), dtype='int32'
  10.     embedded_sequences = embedding_layer(sequence_input) 
  11.     x = Convolution1D( 
  12.         self.num_filters, 5, activation="relu")(embedded_sequences) 
  13.     x = MaxPooling1D(5)(x) 
  14.     x = Convolution1D(self.num_filters, 5, activation="relu")(x) 
  15.     x = MaxPooling1D(5)(x) 
  16.     x = LSTM(64, dropout_W=0.2, dropout_U=0.2)(x) 
  17.     preds = Dense(self.class_num, activation='softmax')(x) 
  18.     print preds.get_shape() 
  19.     rmsprop = RMSprop(lr=0.01) 
  20.     self.model = Model(sequence_input, preds) 
  21.     self.model.compile( 
  22.         loss='categorical_crossentropy'
  23.         optimizer=rmsprop, 
  24.         metrics=['acc']) 

 

CNN 結(jié)果: 

 

C-LSTM 結(jié)果:

 

整個(gè)實(shí)驗(yàn)的結(jié)果由于深度學(xué)習(xí)這部分都是在公司資源上跑的,沒有真正意義上地去做一些trick來調(diào)參來提高性能,這里所有的代碼的網(wǎng)絡(luò)配置包括參數(shù)都僅做參考,更深地工作需要耗費(fèi)更多的時(shí)間來做參數(shù)的優(yōu)化。

PS: 這里發(fā)現(xiàn)了一個(gè)keras 1.2.2的bug, 在寫回調(diào)函數(shù)TensorBoard,當(dāng)histogram_freq=1時(shí),顯卡占用明顯增多,M40的24g不夠用,個(gè)人感覺應(yīng)該是一個(gè)bug,但是考慮到1.2.2而非2.0,可能后面2.0都優(yōu)化了。

所有的代碼都在github上:tensorflow-101/nlp/text_classifier/scripts

總結(jié)和展望

在本文的實(shí)驗(yàn)效果中,雖然基于深度學(xué)習(xí)的方法和傳統(tǒng)方法相比沒有什么優(yōu)勢(shì),可能原因有幾個(gè)方面:

  • Pretrained Word2vec Model并沒有覆蓋新聞中切分出來的詞,而且比例還挺高,如果能用網(wǎng)絡(luò)新聞?wù)Z料訓(xùn)練出一個(gè)比較精準(zhǔn)的Pretrained Word2vec,效果應(yīng)該會(huì)有很大的提升;
  • 可以增加模型訓(xùn)練收斂的trick以及優(yōu)化器,看看是否有準(zhǔn)確率的提升;
  • 網(wǎng)絡(luò)模型參數(shù)到現(xiàn)在為止,沒有做過深的優(yōu)化。
責(zé)任編輯:龐桂玉 來源: 36大數(shù)據(jù)
相關(guān)推薦

2024-02-05 14:18:07

自然語言處理

2021-05-18 07:15:37

Python

2021-09-03 12:01:07

模型自然語言

2021-05-13 07:17:13

Snownlp自然語言處理庫

2020-04-24 10:53:08

自然語言處理NLP是人工智能

2021-05-17 09:00:00

自然語言人工智能技術(shù)

2023-05-24 16:13:31

ChatGPT神經(jīng)網(wǎng)絡(luò)

2017-10-19 17:05:58

深度學(xué)習(xí)自然語言

2024-04-24 11:38:46

語言模型NLP人工智能

2021-06-28 10:10:42

人工智能AI自然語言

2017-04-17 15:03:16

Python自然語言處理

2020-02-25 12:00:53

自然語言開源工具

2021-11-12 15:43:10

Python自然語言數(shù)據(jù)

2023-05-30 14:39:34

ChatGPT-4NLP

2017-05-05 15:34:49

自然語言處理

2020-02-25 23:28:50

工具代碼開發(fā)

2022-10-09 08:00:00

機(jī)器學(xué)習(xí)文本分類算法

2023-08-04 10:18:15

2023-03-22 08:00:00

2021-03-03 09:00:00

自然語言數(shù)據(jù)科學(xué)人工智能
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

国产小视频在线播放| 黄色一级大片在线免费观看| 678在线观看视频| 丁香桃色午夜亚洲一区二区三区| 久99九色视频在线观看| 国产人妖在线观看| 日本三级在线观看网站| 极品少妇xxxx精品少妇偷拍| 欧美国产第二页| 色婷婷精品久久二区二区密| 伊人色综合一区二区三区影院视频| 91在线视频观看| 国产精品久久久久久久7电影| 国产又粗又猛又爽又黄的视频四季| 亚洲福利影视| 亚洲一二三四区不卡| 美脚丝袜一区二区三区在线观看| 亚洲中文无码av在线| 久久看人人摘| 日韩欧美高清dvd碟片| 久久精品免费一区二区| 素人av在线| av在线不卡电影| 国产在线精品播放| 亚洲精品77777| 久久av综合| 日韩精品中文字幕一区二区三区| 国产亚洲综合视频| 成人video亚洲精品| 成人黄色在线视频| 国产精品99久久久久久人| 三级影片在线看| 精品久久中文| 亚洲第一视频网| 中文字幕在线综合| av在线私库| 中文字幕日韩av资源站| 久久久亚洲综合网站| 一级特黄录像免费看| 国产精品一区亚洲| 欧美成人一区二区三区电影| 免费成人深夜天涯网站| 麻豆精品在线| 欧美午夜一区二区| 免费一级特黄特色毛片久久看| 在线激情免费视频| 国产精品日产欧美久久久久| 久久综合色一本| 无码国产精品一区二区色情男同 | 欧美aaa级| 欧美日韩亚洲视频一区| 亚洲中文字幕无码一区二区三区| a√在线中文网新版址在线| 91蜜桃婷婷狠狠久久综合9色| 成人动漫视频在线观看免费| 一起草av在线| 青青草精品视频| 欧美有码在线视频| 日本一二三区不卡| 91精品精品| 亚洲欧洲黄色网| 日韩一级视频在线观看| 美女主播精品视频一二三四| 日韩精品一区二区三区三区免费 | 欧美黄色一区二区三区| 91精品一区二区三区综合| 最近2019年日本中文免费字幕 | www.久久久久爱免| 欧美年轻男男videosbes| www在线观看免费| gogo高清在线播放免费| 亚洲国产婷婷综合在线精品| 成人在线免费高清视频| 国模私拍视频在线播放| 亚洲国产成人av好男人在线观看| 久久这里只有精品18| wwww在线观看免费视频| 亚洲国产毛片aaaaa无费看| 草草草视频在线观看| 污污的网站在线看| 亚洲国产精品久久久久秋霞影院| 国产特级淫片高清视频| 黄频免费在线观看| 日韩欧美中文在线| 国产视频一区二区三区在线播放| 亚洲高清黄色| 欧洲色大大久久| 天天干天天av| 在线精品国产亚洲| 日韩黄色av网站| 中文字幕 自拍| 色综合天天爱| 欧美极品第一页| 四虎精品永久在线| 蜜臀av一区二区| 亚洲一区二区三区乱码aⅴ蜜桃女 亚洲一区二区三区乱码aⅴ | 亚洲一区二区天堂| 国产麻豆一精品一av一免费| 国产一区二区久久久| 日产精品久久久久久久性色| 国产日韩欧美精品电影三级在线| 亚洲精品永久www嫩草| 黄色精品在线观看| 五月婷婷综合网| 999精品视频在线| 国产福利一区二区三区在线播放| 欧美在线不卡一区| 超碰中文字幕在线观看| 国产日韩三级| 日韩在线免费高清视频| 久久精品久久精品久久| 丝袜美腿高跟呻吟高潮一区| 91久久久久久久一区二区| 天堂在线视频免费| 国产精品传媒入口麻豆| 欧美一级免费播放| 欧美aaa级| 日韩精品一区二区视频| 久草手机视频在线观看| 亚洲精华国产欧美| 日韩中文字幕一区二区三区| 久久青草福利网站| 波多野结衣一区二区三区在线| 久久99精品国产麻豆婷婷| 91精品网站| 黄色在线小视频| 亚洲精品免费在线观看| 国产精品va在线观看无码| 欧美一区国产| 亚洲第一区在线| 欧美h片在线观看| 欧美国产精品| 国产精品电影一区| 好吊色一区二区三区| 国产精品国产三级国产a| 1024av视频| 亚洲精选av| 日韩在线免费视频| 日本一区二区欧美| 国产一区二区美女| 亚洲成色www久久网站| 超碰高清在线| 精品国产免费一区二区三区四区 | 亚洲区在线播放| 久久国产露脸精品国产| 蜜桃久久久久久久| 热re99久久精品国99热蜜月| 都市激情国产精品| 欧美mv日韩mv亚洲| www.xxxx日本| 麻豆精品视频在线观看免费 | 国产精品亚洲二区在线观看| 综合视频一区| 欧美成人精品三级在线观看| 亚洲自拍第二页| 欧美激情一区二区| 欧美精品无码一区二区三区| 日韩成人一级| 97免费在线视频| 人妻精品一区二区三区| 亚洲综合网站在线观看| 性一交一黄一片| 亚洲欧美在线专区| 国产欧美在线看| 日本在线观看免费| 欧美男人的天堂一二区| 国产男女猛烈无遮挡在线喷水| 日本视频在线一区| 日韩免费av电影| 欧洲av一区二区| 一区二区欧美在线| 中文字幕乱码中文字幕| 中文字幕不卡在线| 青青青国产在线视频| 欧美一二区在线观看| 国产精品第10页| 啊v视频在线| 欧美日韩国产一级片| 色噜噜噜噜噜噜| 韩国精品在线观看| 成人短视频在线观看免费| 哺乳挤奶一区二区三区免费看| 美女扒开尿口让男人操亚洲视频网站| 国产三级视频在线播放| 亚洲一区视频在线| 亚洲久久久久久| 久久久久久久尹人综合网亚洲| 欧美精品亚洲| 久久国内精品| 不卡毛片在线看| 蜜桃视频久久一区免费观看入口| 精品久久久久久久久久国产 | 国产成人夜色高潮福利影视| 韩国欧美亚洲国产| 国产精品视频二区三区| 欧美美女一区二区三区| 国产亚洲精品久久777777| 成人高清视频在线观看| 农村妇女精品一二区| 偷拍欧美精品| 久久99导航| 黄页免费欧美| 九九热这里只有在线精品视| 色视频免费在线观看| 欧美情侣在线播放| 国产亚洲欧美精品久久久久久| 91视视频在线观看入口直接观看www| 国产精品亚洲a| 希岛爱理av一区二区三区| 成人羞羞视频免费| 日韩网站中文字幕| 欧美高清电影在线看| 国产日本在线观看| 精品国产亚洲一区二区三区在线观看| 国产主播第一页| 亚洲精品菠萝久久久久久久| 色噜噜在线观看| 极品少妇xxxx精品少妇偷拍| 日本wwww视频| 午夜久久99| 日韩午夜视频在线观看| 999在线精品| 国产精品热视频| 91色在线看| 久久精品中文字幕电影| 性感美女福利视频| 4438亚洲最大| 亚洲图片在线视频| 一区二区三区四区在线播放| 波多野在线播放| 成人激情av网| 国内av免费观看| 日韩成人一区二区三区在线观看| 国产一级做a爰片久久毛片男| 成人情趣视频网站| 九九九九久久久久| 试看120秒一区二区三区| 国产精品欧美久久久| 精品极品在线| 精品中文字幕在线观看| 欧美日韩国产中文字幕在线| 欧美丰满高潮xxxx喷水动漫| 久久国产香蕉视频| 日韩欧美主播在线| 青青操免费在线视频| 亚洲一区二区视频在线观看| 欧美日韩综合一区二区| 亚洲同性gay激情无套| 天堂在线中文视频| 成人不卡免费av| 国产精品嫩草69影院| 久久成人久久爱| 国产嫩草在线观看| 麻豆精品网站| 国产99久久九九精品无码| 影音先锋日韩资源| 97久久国产亚洲精品超碰热| 影视亚洲一区二区三区| 亚洲高清视频在线观看| 国内黄色精品| 四虎一区二区| 欧美日韩老妇| 亚洲日本欧美在线| 欧美成人激情| 伊人久久婷婷色综合98网| 欧美国产美女| 中文字幕欧美日韩一区二区| 99久久综合| 国产日韩第一页| 午夜久久影院| 国产毛片久久久久久国产毛片| 韩国一区二区三区在线观看| 免费看av软件| 欧美a级片一区| 日韩 欧美 视频| 99香蕉国产精品偷在线观看 | 亚洲国产日韩在线一区| 精品综合久久久久久8888| 亚洲欧美天堂在线| 国产成人99久久亚洲综合精品| 美女伦理水蜜桃4| 国产盗摄女厕一区二区三区| 国产精品成人免费一区久久羞羞| 成人福利视频网站| 成人片黄网站色大片免费毛片| 国产人成一区二区三区影院| 性色国产成人久久久精品 | 国产精品高清无码在线观看| 国产欧美日韩视频在线观看| 国产成人在线网址| 亚洲精品日韩专区silk| 日韩成人一区二区三区| 亚洲国产精品久久久男人的天堂| 久久一区二区三区视频| 欧美日韩亚州综合| 黄色aaa毛片| 亚洲日本成人网| 麻豆网在线观看| 久久国产精品视频| 三级在线观看视频| 国产精品永久免费| 一区二区三区国产好| 精品久久久三级| 欧美岛国激情| 日韩小视频网站| 国产精品一二| 在线视频一二区| 97久久超碰精品国产| www.涩涩爱| 亚洲成a人v欧美综合天堂| 久久精品视频2| 日韩一区二区三区高清免费看看| 日本激情一区二区三区| 在线观看精品国产视频| www.8ⅹ8ⅹ羞羞漫画在线看| 国产精品精品视频一区二区三区| 久久99成人| 欧美午夜精品久久久久免费视| 一区二区三区在线电影| 国产精品亚洲αv天堂无码| 国产精品资源网| 亚洲ⅴ国产v天堂a无码二区| 亚洲国产精品视频| 91麻豆成人精品国产免费网站| 亚洲国产精品字幕| 成人video亚洲精品| 国产精品久久久久久久久久久新郎 | 亚洲男同性恋视频| 国产第一页在线观看| 精品视频—区二区三区免费| 超碰在线97国产| 99久久综合狠狠综合久久止| 91久久国产| 一道本在线免费视频| 日本一区二区成人| 国产成人a v| 国产亚洲欧洲黄色| 朝桐光一区二区| 日本不卡二区高清三区| 亚洲一区国产| 国产色视频一区二区三区qq号| 精品久久久香蕉免费精品视频| 国模无码一区二区三区| 欧美精品久久一区二区| 99这里只有精品视频| 成人免费在线网| 成人免费高清视频| 国产对白videos麻豆高潮| 精品国产91乱码一区二区三区| 黑人精品视频| 精品国产乱码一区二区三区四区 | 日本久久久久久久久久久久| 国产欧美日韩在线视频| 国产无遮挡又黄又爽又色视频| 亚洲日本欧美中文幕| 黄色成人小视频| 精品国产三级a∨在线| 国产高清精品网站| 国产香蕉在线视频| 亚洲欧美日韩网| 亚洲a∨精品一区二区三区导航| 日韩国产欧美精品| 久久9热精品视频| 深夜福利影院在线观看| 欧美精品一区视频| a一区二区三区| 亚洲一区二区在线免费观看| 国内精品视频666| 国产极品在线播放| 亚洲午夜未满十八勿入免费观看全集| 97欧美成人| 永久免费网站视频在线观看| 成人午夜av电影| 人人草在线观看| 久久精品视频va| 红杏一区二区三区| 激情视频综合网| 亚洲天堂成人网| 天天操天天干天天插| 国产精品嫩草影院久久久| 女人香蕉久久**毛片精品| 最近中文字幕无免费| 欧美日韩国产综合视频在线观看| 久色国产在线| 日本高清一区| 国产很黄免费观看久久| 9i看片成人免费看片| 久久综合免费视频| 丝袜连裤袜欧美激情日韩| 天天干天天操天天玩| 亚洲图片一区二区| av在线之家电影网站| 国产另类第一区| 日产欧产美韩系列久久99| 九九热国产在线| 一区二区在线免费视频| 成人资源在线播放| 精品亚洲一区二区三区四区| 亚洲国产一区二区在线播放| 91在线播放网站|