日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Kaggle竞赛:Quora Insincere Questions Classification 总结与心得感想

發(fā)布時間:2023/12/16 编程问答 62 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Kaggle竞赛:Quora Insincere Questions Classification 总结与心得感想 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

這次Quora的文本分類題,4000支參賽隊伍中個人solo最終只在LB上達到了20%,一方面是因為第一次參加NLP方面的比賽,完全是個小白,另一方面是自己在比賽途中也有不少懈怠,因此想做一些技術上以及客觀上的總結(jié)警醒自己。

比賽是通過文本訓練集來預測Quora上的問題是真誠的還是不真誠的問題,比賽鏈接https://www.kaggle.com/c/quora-insincere-questions-classification

關于技術上的問題:

在比賽中通過學習各路大神的kernel,同時在很多問題一知半解的情況下,查閱各種文獻資料,我對NLP的文本分類有了一個大致的了解,分詞,語言模型,詞向量等有了初步認識。語言模型n-gram,預訓練詞向量word embedding,以及常用的lstm網(wǎng)絡和GRU網(wǎng)絡等等。文本預處理的各種方法,以及attention layer等模型方案。

客觀上存在的問題:

NLP的比賽和普通的數(shù)據(jù)挖掘比賽有很大的不同,普通的數(shù)據(jù)挖掘比賽最重要的需要挖掘到好的特征,其次是使用合適的模型;而NLP更注重模型本身,所以現(xiàn)有的模型中,深度學習的模型在NLP里得到廣泛應用。我自己在這個比賽途中同時也在進行另外一個數(shù)據(jù)挖掘的比賽,一心二用導致了自己不夠?qū)WⅰW龅揭欢ǔ潭鹊臅r候卡在一個地方,就發(fā)生了懈怠情緒,這也是需要自己改正的一個地方。

感悟與收獲:

最重要的收獲是感覺自己NLP終于入了門,同時了解了各種前沿的論文對于NLP建模的影響,需要的論文,因為基本上好的nlp模型都是從現(xiàn)有論文中衍生的(當然很多大神是通過比賽驗證自己的模型然后再發(fā)Paper),這和從數(shù)據(jù)中衍生的數(shù)據(jù)挖掘出的特征真的是有很大的區(qū)別。同時這次比賽借鑒了很多別人的方案,在以后更需要做的是站在巨人的肩膀上做出自己的一些想法。在這次比賽后,發(fā)現(xiàn)nlp真是一個巨大無比的坑,還有太多需要學習的地方,繼續(xù)加油,保持危機感。

以下附比賽代碼以及附注:

源碼鏈接:https://github.com/yyhhlancelot/Kaggle_Quora_Insincere_Question_Classification

首先載入需要用的包:

import numpy as np # linear algebra import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv) import keras import os import os import time import numpy as np # linear algebra import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv) from tqdm import tqdm import math import gc from sklearn.model_selection import train_test_split from sklearn import metrics from sklearn.model_selection import GridSearchCV, StratifiedKFold from sklearn.metrics import f1_score, roc_auc_score import tensorflow as tf from sklearn.preprocessing import StandardScaler from keras.preprocessing.text import Tokenizer from keras.preprocessing.sequence import pad_sequences from keras.layers import Dense, Input, CuDNNLSTM, Embedding, Dropout, Activation, CuDNNGRU, Conv1D from keras.layers import Bidirectional, MaxPooling1D, GlobalMaxPool1D, GlobalMaxPooling1D, GlobalAveragePooling1D from keras.layers import Input, Embedding, Dense, Conv2D, MaxPool2D, concatenate from keras.layers import Reshape, Flatten, Concatenate, Dropout, SpatialDropout1D, BatchNormalization, PReLU from keras.optimizers import Adam from keras.models import Model from keras import backend as K from keras.engine.topology import Layer from keras import initializers, regularizers, constraints, optimizers, layers from keras.layers import concatenate, add from keras.callbacks import *

預處理階段:

清理符號:

def clean_text(x):puncts = [',', '.', '"', ':', ')', '(', '-', '!', '?', '|', ';', "'", '$', '&', '/', '[', ']', '>', '%', '=', '#', '*', '+', '\\', '?', '~', '@', '£', '·', '_', '{', '}', '?', '^', '?', '`', '<', '→', '°', '€', '?', '?', '?', '←', '×', '§', '″', '′', '?', '█', '?', 'à', '…', '“', '★', '”', '–', '●', 'a', '?', '?', '¢', '2', '?', '?', '?', '↑', '±', '?', '?', '═', '|', '║', '―', '¥', '▓', '—', '?', '─', '?', ':', '?', '⊕', '▼', '?', '?', '■', '’', '?', '¨', '▄', '?', '☆', 'é', 'ˉ', '?', '¤', '▲', 'è', '?', '?', '?', '?', '‘', '∞', '?', ')', '↓', '、', '│', '(', '?', ',', '?', '╩', '╚', '3', '?', '╦', '╣', '╔', '╗', '?', '?', '?', '?', '1', '≤', '?', '√', ]x = str(x)for punct in "/-'":x = x.replace(punct, ' ')for punct in '&':x = x.replace(punct, f' {punct} ')for punct in '?!.,"#$%\'()*+-/:;<=>@[\\]^_`{|}~' + '“”’':x = x.replace(punct, '')for punct in puncts:x = x.replace(punct, f' {punct} ')return x

使用正則表達式清理數(shù)字:

import re def clean_numbers(x):x = re.sub('[0-9]{5,}', '#####', x)x = re.sub('[0-9]{4}', '####', x)x = re.sub('[0-9]{3}', '###', x)x = re.sub('[0-9]{2}', '##', x)return x

清理錯誤拼寫:

def _get_mispell(mispell_dict):mispell_re = re.compile('(%s)' % '|'.join(mispell_dict.keys()))return mispell_dict, mispell_remispell_dict = {'colour':'color','centre':'center','didnt':'did not','doesnt':'does not','isnt':'is not','shouldnt':'should not','favourite':'favorite','travelling':'traveling','counselling':'counseling','theatre':'theater','cancelled':'canceled','labour':'labor','organisation':'organization','wwii':'world war 2','citicise':'criticize','instagram': 'social medium','whatsapp': 'social medium','snapchat': 'social medium',"ain't": "is not", "aren't": "are not","can't": "cannot", "'cause": "because", "could've": "could have", "couldn't": "could not", "didn't": "did not", "doesn't": "does not", "don't": "do not", "hadn't": "had not", "hasn't": "has not", "haven't": "have not", "he'd": "he would","he'll": "he will", "he's": "he is", "how'd": "how did", "how'd'y": "how do you", "how'll": "how will", "how's": "how is", "I'd": "I would", "I'd've": "I would have", "I'll": "I will", "I'll've": "I will have","I'm": "I am", "I've": "I have", "i'd": "i would", "i'd've": "i would have", "i'll": "i will","i'll've": "i will have","i'm": "i am", "i've": "i have", "isn't": "is not", "it'd": "it would", "it'd've": "it would have", "it'll": "it will", "it'll've": "it will have","it's": "it is","let's": "let us", "ma'am": "madam", "mayn't": "may not", "might've": "might have","mightn't": "might not","mightn't've": "might not have", "must've": "must have", "mustn't": "must not", "mustn't've": "must not have","needn't": "need not", "needn't've": "need not have","o'clock": "of the clock", "oughtn't": "ought not","oughtn't've": "ought not have", "shan't": "shall not", "sha'n't": "shall not","shan't've": "shall not have","she'd": "she would", "she'd've": "she would have","she'll": "she will","she'll've": "she will have", "she's": "she is","should've": "should have","shouldn't": "should not","shouldn't've": "should not have", "so've": "so have","so's": "so as","this's": "this is","that'd": "that would", "that'd've": "that would have", "that's": "that is", "there'd": "there would", "there'd've": "there would have", "there's": "there is", "here's": "here is","they'd": "they would", "they'd've": "they would have","they'll": "they will", "they'll've": "they will have", "they're": "they are", "they've": "they have", "to've": "to have", "wasn't": "was not", "we'd": "we would", "we'd've": "we would have", "we'll": "we will", "we'll've": "we will have", "we're": "we are", "we've": "we have", "weren't": "were not", "what'll": "what will", "what'll've": "what will have", "what're": "what are", "what's": "what is","what've": "what have", "when's": "when is", "when've": "when have", "where'd": "where did", "where's": "where is", "where've": "where have", "who'll": "who will", "who'll've": "who will have", "who's": "who is", "who've": "who have", "why's": "why is", "why've": "why have", "will've": "will have", "won't": "will not", "won't've": "will not have", "would've": "would have", "wouldn't": "would not", "wouldn't've": "would not have", "y'all": "you all", "y'all'd": "you all would","y'all'd've": "you all would have","y'all're": "you all are","y'all've": "you all have","you'd": "you would", "you'd've": "you would have", "you'll": "you will", "you'll've": "you will have","you're": "you are", "you've": "you have", 'colour': 'color', 'centre': 'center', 'favourite': 'favorite', 'travelling': 'traveling', 'counselling': 'counseling', 'theatre': 'theater', 'cancelled': 'canceled', 'labour': 'labor', 'organisation': 'organization', 'wwii': 'world war 2', 'citicise': 'criticize', 'youtu ': 'youtube ', 'Qoura': 'Quora', 'sallary': 'salary', 'Whta': 'What', 'narcisist': 'narcissist', 'howdo': 'how do', 'whatare': 'what are', 'howcan': 'how can', 'howmuch': 'how much', 'howmany': 'how many', 'whydo': 'why do','doI': 'do I', 'theBest': 'the best', 'howdoes': 'how does', 'mastrubation': 'masturbation', 'mastrubate': 'masturbate', "mastrubating": 'masturbating', 'pennis': 'penis', 'Etherium': 'Ethereum', 'narcissit': 'narcissist', 'bigdata': 'big data', '2k17': '2017', '2k18': '2018', 'qouta': 'quota', 'exboyfriend': 'ex boyfriend', 'airhostess': 'air hostess', "whst": 'what', 'watsapp': 'whatsapp', 'demonitisation': 'demonetization', 'demonitization': 'demonetization', 'demonetisation': 'demonetization'}mispellings, mispellings_re = _get_mispell(mispell_dict)def replace_typical_misspell(text):def replace(match):return mispellings[match.group(0)]return mispellings_re.sub(replace, text)

文本預處理:

train_df = pd.read_csv("../input/train.csv")test_df = pd.read_csv("../input/test.csv")print("Train shape : ",train_df.shape) print("Test shape : ",test_df.shape) embed_size = 300 #詞向量維度 max_features = 95000 #設置詞典大小 max_len = 70 #設置輸入的長度 # lower train_df['question_text'] = train_df['question_text'].apply(lambda x : x.lower()) test_df['question_text'] = test_df['question_text'].apply(lambda x : x.lower())# clean the text train_df["question_text"] = train_df["question_text"].apply(lambda x : clean_text(x)) test_df["question_text"] = test_df["question_text"].apply(lambda x : clean_text(x))# clean numbers train_df["question_text"] = train_df["question_text"].apply(lambda x: clean_numbers(x)) test_df["question_text"] = test_df["question_text"].apply(lambda x : clean_numbers(x))# clean spellings train_df['question_text'] = train_df['question_text'].apply(lambda x: replace_typical_misspell(x)) test_df['question_text'] = test_df['question_text'].apply(lambda x: replace_typical_misspell(x))# fill up the missing values train_X = train_df['question_text'].fillna("_##_").values test_X = test_df['question_text'].fillna("_##_").values# tokenize the sentences tokenizer = Tokenizer(num_words = max_features) tokenizer.fit_on_texts(list(train_X)) train_X = tokenizer.texts_to_sequences(train_X) test_X = tokenizer.texts_to_sequences(test_X)# pad the sentences train_X = pad_sequences(train_X, maxlen = max_len) test_X = pad_sequences(test_X, maxlen = max_len)# the target values train_y = train_df['target'].values np.random.seed(666) trn_idx = np.random.permutation(len(train_X))train_X = train_X[trn_idx] train_y = train_y[trn_idx]

載入詞向量:

def load_glove(word_index): # EMBEDDING_FILE = '../input/embeddings/glove.840B.300d/glove.840B.300d.txt'EMBEDDING_FILE = 'J:/Code/kaggle/Quora_Insincere_Question_Classfication/glove.840B.300d/glove.840B.300d.txt'def get_coefs(word,*arr): return word, np.asarray(arr, dtype='float32')embeddings_index = dict(get_coefs(*o.split(" ")) for o in open(EMBEDDING_FILE, 'r', encoding = 'UTF-8'))all_embs = np.stack(embeddings_index.values())emb_mean,emb_std = all_embs.mean(), all_embs.std()embed_size = all_embs.shape[1]# word_index = tokenizer.word_indexnb_words = min(max_features, len(word_index))embedding_matrix = np.random.normal(emb_mean, emb_std, (nb_words, embed_size))for word, i in word_index.items():if i >= max_features: continueembedding_vector = embeddings_index.get(word)if embedding_vector is not None: embedding_matrix[i] = embedding_vectorreturn embedding_matrix def load_fasttext(word_index): # EMBEDDING_FILE = '../input/embeddings/wiki-news-300d-1M/wiki-news-300d-1M.vec'EMBEDDING_FILE = 'J:/Code/kaggle/Quora_Insincere_Question_Classfication/wiki-news-300d-1M/wiki-news-300d-1M.vec'def get_coefs(word,*arr): return word, np.asarray(arr, dtype='float32')embeddings_index = dict(get_coefs(*o.split(" ")) for o in open(EMBEDDING_FILE, 'r', encoding = 'UTF-8') if len(o)>100)all_embs = np.stack(embeddings_index.values())emb_mean,emb_std = all_embs.mean(), all_embs.std()embed_size = all_embs.shape[1]# word_index = tokenizer.word_indexnb_words = min(max_features, len(word_index))embedding_matrix = np.random.normal(emb_mean, emb_std, (nb_words, embed_size))for word, i in word_index.items():if i >= max_features: continueembedding_vector = embeddings_index.get(word)if embedding_vector is not None: embedding_matrix[i] = embedding_vectorreturn embedding_matrixdef load_para(word_index): # EMBEDDING_FILE = '../input/embeddings/paragram_300_sl999/paragram_300_sl999.txt'EMBEDDING_FILE = 'J:/Code/kaggle/Quora_Insincere_Question_Classfication/paragram_300_sl999/paragram_300_sl999.txt'def get_coefs(word,*arr): return word, np.asarray(arr, dtype='float32')embeddings_index = dict(get_coefs(*o.split(" ")) for o in open(EMBEDDING_FILE, encoding="utf8", errors='ignore') if len(o)>100)all_embs = np.stack(embeddings_index.values())emb_mean,emb_std = all_embs.mean(), all_embs.std()embed_size = all_embs.shape[1]# word_index = tokenizer.word_indexnb_words = min(max_features, len(word_index))embedding_matrix = np.random.normal(emb_mean, emb_std, (nb_words, embed_size))for word, i in word_index.items():if i >= max_features: continueembedding_vector = embeddings_index.get(word)if embedding_vector is not None: embedding_matrix[i] = embedding_vectorreturn embedding_matrix

注意力機制(Attention Layer):

class Attention(Layer):def __init__(self, step_dim,W_regularizer=None, b_regularizer=None,W_constraint=None, b_constraint=None,bias=True, **kwargs):"""Keras Layer that implements an Attention mechanism for temporal data.Supports Masking.Follows the work of Raffel et al. [https://arxiv.org/abs/1512.08756]# Input shape3D tensor with shape: `(samples, steps, features)`.# Output shape2D tensor with shape: `(samples, features)`.:param kwargs:Just put it on top of an RNN Layer (GRU/LSTM/SimpleRNN) with return_sequences=True.The dimensions are inferred based on the output shape of the RNN.Example:model.add(LSTM(64, return_sequences=True))model.add(Attention())"""self.supports_masking = True#self.init = initializations.get('glorot_uniform')self.init = initializers.get('glorot_uniform')self.W_regularizer = regularizers.get(W_regularizer)self.b_regularizer = regularizers.get(b_regularizer)self.W_constraint = constraints.get(W_constraint)self.b_constraint = constraints.get(b_constraint)self.bias = biasself.step_dim = step_dimself.features_dim = 0super(Attention, self).__init__(**kwargs)def build(self, input_shape):assert len(input_shape) == 3self.W = self.add_weight((input_shape[-1],),initializer=self.init,name='{}_W'.format(self.name),regularizer=self.W_regularizer,constraint=self.W_constraint)self.features_dim = input_shape[-1]if self.bias:self.b = self.add_weight((input_shape[1],),initializer='zero',name='{}_b'.format(self.name),regularizer=self.b_regularizer,constraint=self.b_constraint)else:self.b = Noneself.built = Truedef compute_mask(self, input, input_mask=None):# do not pass the mask to the next layersreturn Nonedef call(self, x, mask=None):# eij = K.dot(x, self.W) TF backend doesn't support it# features_dim = self.W.shape[0]# step_dim = x._keras_shape[1]features_dim = self.features_dimstep_dim = self.step_dimeij = K.reshape(K.dot(K.reshape(x, (-1, features_dim)), K.reshape(self.W, (features_dim, 1))), (-1, step_dim))if self.bias:eij += self.beij = K.tanh(eij)a = K.exp(eij)# apply mask after the exp. will be re-normalized nextif mask is not None:# Cast the mask to floatX to avoid float64 upcasting in theanoa *= K.cast(mask, K.floatx())# in some cases especially in the early stages of training the sum may be almost zeroa /= K.cast(K.sum(a, axis=1, keepdims=True) + K.epsilon(), K.floatx())a = K.expand_dims(a)weighted_input = x * a#print weigthted_input.shapereturn K.sum(weighted_input, axis=1)def compute_output_shape(self, input_shape):#return input_shape[0], input_shape[-1]return input_shape[0], self.features_dim

膠囊網(wǎng)絡:

def squash(x, axis=-1):# s_squared_norm is really small# s_squared_norm = K.sum(K.square(x), axis, keepdims=True) + K.epsilon()# scale = K.sqrt(s_squared_norm)/ (0.5 + s_squared_norm)# return scale * xs_squared_norm = K.sum(K.square(x), axis, keepdims=True)scale = K.sqrt(s_squared_norm + K.epsilon())return x / scale# A Capsule Implement with Pure Keras class Capsule(Layer):def __init__(self, num_capsule, dim_capsule, routings=3, kernel_size=(9, 1), share_weights=True,activation='default', **kwargs):super(Capsule, self).__init__(**kwargs)self.num_capsule = num_capsuleself.dim_capsule = dim_capsuleself.routings = routingsself.kernel_size = kernel_sizeself.share_weights = share_weightsif activation == 'default':self.activation = squashelse:self.activation = Activation(activation)def build(self, input_shape):super(Capsule, self).build(input_shape)input_dim_capsule = input_shape[-1]if self.share_weights:self.W = self.add_weight(name='capsule_kernel',shape=(1, input_dim_capsule,self.num_capsule * self.dim_capsule),# shape=self.kernel_size,initializer='glorot_uniform',trainable=True)else:input_num_capsule = input_shape[-2]self.W = self.add_weight(name='capsule_kernel',shape=(input_num_capsule,input_dim_capsule,self.num_capsule * self.dim_capsule),initializer='glorot_uniform',trainable=True)def call(self, u_vecs):if self.share_weights:u_hat_vecs = K.conv1d(u_vecs, self.W)else:u_hat_vecs = K.local_conv1d(u_vecs, self.W, [1], [1])batch_size = K.shape(u_vecs)[0]input_num_capsule = K.shape(u_vecs)[1]u_hat_vecs = K.reshape(u_hat_vecs, (batch_size, input_num_capsule,self.num_capsule, self.dim_capsule))u_hat_vecs = K.permute_dimensions(u_hat_vecs, (0, 2, 1, 3))# final u_hat_vecs.shape = [None, num_capsule, input_num_capsule, dim_capsule]b = K.zeros_like(u_hat_vecs[:, :, :, 0]) # shape = [None, num_capsule, input_num_capsule]for i in range(self.routings):b = K.permute_dimensions(b, (0, 2, 1)) # shape = [None, input_num_capsule, num_capsule]c = K.softmax(b)c = K.permute_dimensions(c, (0, 2, 1))b = K.permute_dimensions(b, (0, 2, 1))outputs = self.activation(tf.keras.backend.batch_dot(c, u_hat_vecs, [2, 2]))if i < self.routings - 1:b = tf.keras.backend.batch_dot(outputs, u_hat_vecs, [2, 3])return outputsdef compute_output_shape(self, input_shape):return (None, self.num_capsule, self.dim_capsule)def capsule():K.clear_session() inp = Input(shape=(maxlen,))x = Embedding(max_features, embed_size, weights=[embedding_matrix], trainable=False)(inp)x = SpatialDropout1D(rate=0.2)(x)x = Bidirectional(CuDNNGRU(100, return_sequences=True, kernel_initializer=initializers.glorot_normal(seed=12300), recurrent_initializer=initializers.orthogonal(gain=1.0, seed=10000)))(x)x = Capsule(num_capsule=10, dim_capsule=10, routings=4, share_weights=True)(x)x = Flatten()(x)x = Dense(100, activation="relu", kernel_initializer=glorot_normal(seed=12300))(x)x = Dropout(0.12)(x)x = BatchNormalization()(x)x = Dense(1, activation="sigmoid")(x)model = Model(inputs=inp, outputs=x)model.compile(loss='binary_crossentropy', optimizer=Adam(),)return modeldef f1_smart(y_true, y_pred):args = np.argsort(y_pred)tp = y_true.sum()fs = (tp - np.cumsum(y_true[args[:-1]])) / np.arange(y_true.shape[0] + tp - 1, tp, -1)res_idx = np.argmax(fs)return 2 * fs[res_idx], (y_pred[args[res_idx]] + y_pred[args[res_idx + 1]]) / 2

建模:

通過對各路大神的模型進行比較,我找出了幾種比較高效的模型

首先是使用了注意力機制的雙向LSTM/GRU模型:

def model_lstm_atten(embedding_matrix):inp = Input(shape = (max_len,))x = Embedding(max_features, embed_size, weights = [embedding_matrix], trainable = False)(inp)x = SpatialDropout1D(0.1)(x)x = Bidirectional(CuDNNLSTM(40, return_sequences = True))(x)y = Bidirectional(CuDNNGRU(40, return_sequences = True))(x)atten_1 = Attention(max_len)(x)atten_2 = Attention(max_len)(y)avg_pool = GlobalAveragePooling1D()(y)max_pool = GlobalMaxPooling1D()(y)conc = concatenate([atten_1, atten_2, avg_pool, max_pool])conc = Dense(16, activation = "relu")(conc)conc = Dropout(0.1)(conc)outp = Dense(1, activation = "sigmoid")(conc)model = Model(inputs = inp, outputs = outp)model.compile(loss = 'binary_crossentropy', optimizer = 'adam', metrics = [f1])return model

使用了注意力機制和膠囊網(wǎng)絡的雙向LSTM/GRU模型:

def model_atten_capsule(embedding_matrix): '''0.7'''inp_x = Input(shape = (max_len, ))inp_features = Input(shape = (6, ))x = Embedding(max_features,embed_size, weights = [embedding_matrix], trainable = False)(inp_x)x = SpatialDropout1D(0.1)(x)lstm = Bidirectional(CuDNNLSTM(60, return_sequences = True, kernel_initializer = initializers.glorot_normal(seed = 12300),recurrent_initializer=initializers.orthogonal(gain=1.0, seed=10000)))(x)gru = Bidirectional(CuDNNGRU(60, return_sequences = True, kernel_initializer = initializers.glorot_normal(seed = 12300),recurrent_initializer=initializers.orthogonal(gain=1.0, seed=10000)))(lstm) # x = Bidirectional(CuDNNLSTM(64, return_sequences = True))(x)content3 = Capsule(num_capsule = 10, dim_capsule = 10, routings = 4, share_weights = True)(gru)content3 = Dropout(0.1)(content3) # content3 = Reshape(-1, )(content3)content3 = Flatten()(content3)content3 = Dense(1, activation = "relu", kernel_initializer=initializers.glorot_normal(seed=12300))(content3)### 修改了content3atten_lstm = Attention(max_len)(lstm)atten_gru = Attention(max_len)(gru)avg_pool = GlobalAveragePooling1D()(gru)max_pool = GlobalMaxPooling1D()(gru)conc = concatenate([atten_lstm, atten_gru, content3, avg_pool, max_pool, inp_features]) #### 修改了denseconc = Dense(16, activation = "relu", kernel_initializer=initializers.glorot_normal(seed=12300))(conc)x = BatchNormalization()(conc)x = Dropout(0.1)(x)outp = Dense(1)(x)model = Model(inputs = [inp_x, inp_features], outputs = outp)model.compile(loss = 'binary_crossentropy', optimizer = 'adam', metrics = [f1])return model

CNN模型:

def model_cnn(embedding_matrix):filter_sizes = [1, 2, 3, 5]num_filters = 36inp = Input(shape = (max_len,))x = Embedding(max_features, embed_size, weights = [embedding_matrix])(inp)x = Reshape((max_len, embed_size, 1))(x)maxpool_pool = []for i in range(len(filter_sizes)):conv = Conv2D(num_filters, kernel_size = (filter_sizes[i], embed_size), kernel_initializer = 'he_normal', activation = 'elu')(x)maxpool_pool.append(MaxPool2D(pool_size = (max_len - filter_sizes[i] + 1, 1))(conv))z = Concatenate(axis = 1)(maxpool_pool)z = Flatten()(z)z = Dropout(0.1)(z)outp = Dense(1, activation = "sigmoid")(z)model = Model(inputs = inp, outputs = outp)model.summary()model.compile(loss = 'binary_crossentropy', optimizer = 'adam', metrics = ['accuracy'])return model

以及我在網(wǎng)上找到了騰訊之前提出的dpCNN模型并進行了一些針對性的修改:

def model_dpcnn(embedding_matrix):filter_nr = 64 filter_size = 3max_pool_size = 3max_pool_strides = 2dense_nr = 256spatial_dropout = 0.1dense_dropout = 0.2train_embed = Falseconv_kern_reg = regularizers.l2(0.00001)conv_bias_reg = regularizers.l2(0.00001)inp = Input(shape = (max_len, ))emb_comment = Embedding(max_features, embed_size, weights = [embedding_matrix], trainable = False)(inp) # emb_comment = SpatialDropout1D(0.1)(emb_comment)#block1block1 = Conv1D(filter_nr, kernel_size = filter_size, padding = 'same', activation = 'linear',kernel_regularizer = conv_kern_reg, bias_regularizer = conv_bias_reg)(emb_comment)block1 = BatchNormalization()(block1)block1 = PReLU()(block1)block1 = Conv1D(filter_nr, kernel_size = filter_size, padding = 'same', activation = 'linear',kernel_regularizer = conv_kern_reg, bias_regularizer = conv_bias_reg)(block1)block1 = BatchNormalization()(block1)block1 = PReLU()(block1)#we pass embedded comment through conv1d with filter size 1 because it needs to have the same shape as block output#if you choose filter_nr = embed_size (300 in this case) you don't have to do this part and can add emb_comment directly to block1_outputresize_emb = Conv1D(filter_nr, kernel_size = 1, padding = 'same', activation = 'linear', kernel_regularizer = conv_kern_reg, bias_regularizer = conv_bias_reg)(emb_comment)resize_emb = PReLU()(resize_emb)block1_output = add([block1, resize_emb])block1_output = MaxPooling1D(pool_size = max_pool_size, strides = max_pool_strides)(block1_output)#block2block2 = Conv1D(filter_nr, kernel_size = filter_size, padding = 'same', activation = 'linear',kernel_regularizer = conv_kern_reg, bias_regularizer = conv_bias_reg)(block1_output)block2 = BatchNormalization()(block2)block2 = PReLU()(block2)block2 = Conv1D(filter_nr, kernel_size = filter_size, padding = 'same', activation = 'linear',kernel_regularizer = conv_kern_reg, bias_regularizer = conv_bias_reg)(block2)block2 = BatchNormalization()(block2)block2 = PReLU()(block2)block2_output = add([block2, block1_output])block2_output = MaxPooling1D(pool_size = max_pool_size, strides = max_pool_strides)(block2_output)#block3block3 = Conv1D(filter_nr, kernel_size = filter_size, padding = 'same', activation = 'linear',kernel_regularizer = conv_kern_reg, bias_regularizer = conv_bias_reg)(block2_output)block3 = BatchNormalization()(block3)block3 = PReLU()(block3)block3 = Conv1D(filter_nr, kernel_size = filter_size, padding = 'same', activation = 'linear',kernel_regularizer = conv_kern_reg, bias_regularizer = conv_bias_reg)(block3)block3 = BatchNormalization()(block3)block3 = PReLU()(block3)block3_output = add([block3, block2_output])block3_output = MaxPooling1D(pool_size = max_pool_size, strides = max_pool_strides)(block3_output)#block4block4 = Conv1D(filter_nr, kernel_size = filter_size, padding = 'same', activation = 'linear',kernel_regularizer = conv_kern_reg, bias_regularizer = conv_bias_reg)(block3_output)block4 = BatchNormalization()(block4)block4 = PReLU()(block4)block4 = Conv1D(filter_nr, kernel_size = filter_size, padding = 'same', activation = 'linear',kernel_regularizer = conv_kern_reg, bias_regularizer = conv_bias_reg)(block4)block4 = BatchNormalization()(block4)block4 = PReLU()(block4)block4_output = add([block4, block3_output])block4_output = MaxPooling1D(pool_size = max_pool_size, strides = max_pool_strides)(block4_output)#block5block5 = Conv1D(filter_nr, kernel_size = filter_size, padding = 'same', activation = 'linear',kernel_regularizer = conv_kern_reg, bias_regularizer = conv_bias_reg)(block4_output)block5 = BatchNormalization()(block5)block5 = PReLU()(block5)block5 = Conv1D(filter_nr, kernel_size = filter_size, padding = 'same', activation = 'linear',kernel_regularizer = conv_kern_reg, bias_regularizer = conv_bias_reg)(block5)block5 = BatchNormalization()(block5)block5 = PReLU()(block5)block5_output = add([block5, block4_output])block5_output = MaxPooling1D(pool_size = max_pool_size, strides = max_pool_strides)(block5_output)# #block6 # block6 = Conv1D(filter_nr, kernel_size = filter_size, padding = 'same', activation = 'linear', # kernel_regularizer = conv_kern_reg, bias_regularizer = conv_bias_reg)(block5_output) # block6 = BatchNormalization()(block6) # block6 = PReLU()(block6) # block6 = Conv1D(filter_nr, kernel_size = filter_size, padding = 'same', activation = 'linear', # kernel_regularizer = conv_kern_reg, bias_regularizer = conv_bias_reg)(block6) # block6 = BatchNormalization()(block6) # block6 = PReLU()(block6)# block6_output = add([block6, block5_output]) # block6_output = MaxPooling1D(pool_size = max_pool_size, strides = max_pool_strides)(block6_output)#block7block7 = Conv1D(filter_nr, kernel_size = filter_size, padding = 'same', activation = 'linear',kernel_regularizer = conv_kern_reg, bias_regularizer = conv_bias_reg)(block5_output)block7 = BatchNormalization()(block7)block7 = PReLU()(block7)block7 = Conv1D(filter_nr, kernel_size = filter_size, padding = 'same', activation = 'linear',kernel_regularizer = conv_kern_reg, bias_regularizer = conv_bias_reg)(block7)block7 = BatchNormalization()(block7)block7 = PReLU()(block7)block7_output = add([block7, block5_output])outp = GlobalMaxPooling1D()(block7_output) # output = block7_outputoutp = Dense(dense_nr, activation = 'linear')(outp)outp = BatchNormalization()(outp)outp = Dropout(0.1)(outp)outp = Dense(1, activation = 'sigmoid')(outp)model = Model(inputs = inp, outputs = outp)model.summary()model.compile(loss = 'binary_crossentropy',optimizer = 'adam',metrics = ['accuracy'])return model

同時還有一些模型,大致的思路也是用了注意力機制和膠囊網(wǎng)絡以及雙向LSTM或者GRU,只是模型的構造不同,這里就沒有舉出。

詞向量處理與訓練:

embedding_matrix_1 = load_glove(tokenizer.word_index) # embedding_matrix_2 = load_fasttext(tokenizer.word_index) embedding_matrix_3 = load_para(tokenizer.word_index)embedding_matrix = np.mean([embedding_matrix_1, embedding_matrix_3], axis = 0) # embedding_matrix = np.mean([embedding_matrix_1, embedding_matrix_2], axis = 0) # np.shape(embedding_matrix) del embedding_matrix_1, embedding_matrix_3 gc.collect()

查找最佳閾值:

def threshold_search(y_true, y_prob):best_thresh = 0best_score = 0for thresh in np.arange(0.1, 0.701, 0.01):thresh = np.round(thresh, 2)score = metrics.f1_score(y_true, (y_prob >= thresh).astype(int))print("F1 score at threshold {} is {}".format(thresh, metrics.f1_score(y_true, (y_prob >= thresh).astype(int))))if score > best_score : best_score = scorebest_thresh = threshreturn best_thresh def train_pred(model, dev_X, dev_y, val_X, val_y, test_X, dev_features = None, val_features = None, epochs = None, callback = None):if dev_features is None:model.fit(dev_X, dev_y, batch_size = 512, epochs = epochs, validation_data = (val_X, val_y), callbacks = callback, verbose = 0)pred_test_y_temp = model.predict(test_X, batch_size = 1024) # pred_test_y_temp = model.predict(np.concatenate((test_X, test_features), axis = 1), batch_size = 1024)else:model.fit([dev_X, dev_features], dev_y, batch_size = 512, epochs = epochs, validation_data = ([val_X, val_features], val_y), callbacks = callback, verbose = 0)pred_test_y_temp = model.predict([test_X, test_features], batch_size = 1024)return pred_test_y_temp

這里我用了四折交叉驗證,并使用了其中一個模型來訓練:

## ADDITION TRAIN lstm_atten num_splits = 4 skf = StratifiedKFold(n_splits = num_splits, shuffle = True, random_state = 2333) pred_test_y = 0 thresh_use = 0 val_score = 0 for dev_index, val_index in skf.split(train_X, train_y):dev_X, val_X = train_X[dev_index, :], train_X[val_index,:]dev_y, val_y = train_y[dev_index], train_y[val_index] # dev_features, val_features = train_features[dev_index, :], train_features[val_index, :]model = model_lstm_atten(embedding_matrix)pred_test_y_temp = train_pred(model, dev_X, dev_y, val_X, val_y, test_X, dev_features = None, val_features = None, epochs = 2, callback = [clr,])pred_val_y = model.predict(val_X, batch_size = 1024)best_thresh = threshold_search(val_y, pred_val_y)val_score_temp = metrics.f1_score(val_y, (pred_val_y > best_thresh).astype(int))print("val temp best f1 score is {0} and best thresh is {1}".format(val_score_temp, best_thresh))thresh_use += best_threshpred_test_y += pred_test_y_tempval_score += val_score_tempkeras.backend.clear_session() pred_test_y /= num_splits thresh_use /= num_splits val_score /= num_splits output.append([pred_test_y, thresh_use, val_score, 'lstm atten glove+para'])

提交

sub = pd.read_csv('../input/sample_submission.csv') sub.prediction = (pred_test_y > thresh_use).astype(int) sub.to_csv("submission.csv", index=False)

由于這個比賽的結(jié)果是通過Kernel進行線上提交,也就是說運行時間不能超過兩個小時,所以要合理利用時間,在此基礎上可能需要對策略進行修改,比如交叉驗證的折數(shù),epoch的數(shù)量的等。以上基本上就是該次比賽我的全部流程。希望下次能比這次更好。

總結(jié)

以上是生活随笔為你收集整理的Kaggle竞赛:Quora Insincere Questions Classification 总结与心得感想的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

丁香网五月天 | 欧美资源 | 欧美精品久久久久久久亚洲调教 | 色婷婷激婷婷情综天天 | 久久都是精品 | 日日干天天爽 | 久久国产精品久久国产精品 | 日韩欧美高清一区二区三区 | 国产一区免费在线观看 | 操久在线 | 中文字幕国语官网在线视频 | 在线观看免费 | 中文字幕一区二区在线播放 | 99久久精品国产免费看不卡 | 国产日韩欧美中文 | 亚洲国产精品影院 | 成人高清在线观看 | 香蕉视频在线免费 | 91视频午夜 | 色香com.| 精品在线播放视频 | 99久久精品午夜一区二区小说 | 99精品在线观看 | 五月天激情电影 | 国产综合视频在线观看 | 亚洲香蕉视频 | 午夜视频亚洲 | 激情开心网站 | 国产精国产精品 | 日韩在线免费电影 | 99在线国产 | 久久激情五月激情 | 国内视频在线 | 亚洲精品黄网站 | 91免费高清 | 欧美一区二区在线刺激视频 | 中文字幕在线观看视频一区二区三区 | 麻豆视频免费入口 | 天天操天天玩 | 国产在线日本 | 成人a免费看 | 最近最新最好看中文视频 | 日日干av | www.久热| 香蕉视频导航 | 五月婷婷久久综合 | 99国产视频在线 | 81精品国产乱码久久久久久 | 中文字幕一区二区三区四区久久 | 毛片a级片 | av电影免费| 中文字幕中文中文字幕 | 色久网| 天天鲁一鲁摸一摸爽一爽 | 四虎成人精品永久免费av | 97高清视频 | 婷香五月 | 午夜久久久久久久久 | 欧美日韩免费在线视频 | 日本爽妇网| 中文字幕中文字幕在线一区 | 香蕉久久国产 | 日本黄色免费大片 | 亚洲精品字幕在线 | 黄色av在 | 91自拍视频在线 | 91精品蜜桃 | 人人看97 | 日韩在线视频免费看 | 国产精品久久久久久久久免费看 | av网站手机在线观看 | 久久久亚洲影院 | 91在线影院| 国产亚洲视频在线观看 | 国产精品毛片一区二区 | 狠狠操狠狠干2017 | av在线短片 | 婷婷久月| 国产精品一区二区av麻豆 | 午夜影院一级 | 狠狠色网 | 欧美一二在线 | 免费高清无人区完整版 | 91福利区一区二区三区 | 久久激情视频 久久 | www..com毛片 | 九九av | 综合网天天 | 国内精品国产三级国产aⅴ久 | 国产精品国产三级在线专区 | 99国产一区二区三精品乱码 | 亚洲国产精品传媒在线观看 | 日韩在线观看一区二区三区 | 国产区在线| 麻豆免费观看视频 | 亚洲电影网站 | 国产一级免费av | 九九在线高清精品视频 | 国产999精品视频 | 干狠狠| 久久99中文字幕 | 99色资源 | wwwwww国产 | 日本一区二区三区视频在线播放 | 中文字幕精品一区久久久久 | 日本韩国在线不卡 | 在线a人v观看视频 | 色久网 | 免费成人短视频 | 欧美日韩一区二区三区在线免费观看 | 婷婷色综合色 | 精品国产aⅴ麻豆 | 亚洲午夜精品一区二区三区电影院 | 久久综合干 | 亚洲成人免费在线观看 | 久久综合影视 | 国产精品手机在线观看 | 97在线视频免费观看 | 人人网av| 久久99精品一区二区三区三区 | 摸bbb搡bbb搡bbbb | 精品在线视频播放 | 久久99国产综合精品免费 | 日本精品视频在线 | 狠狠干天天 | 天天天天色综合 | 精品福利在线观看 | 欧美精品久久久久久久久久白贞 | 国产日韩欧美在线免费观看 | 99热在线国产 | 欧美另类网站 | 久草五月 | 国外成人在线视频网站 | 国产精品久久久久久吹潮天美传媒 | 亚洲va欧美va国产va黑人 | 国模视频一区二区 | 天天天天天干 | 韩国精品一区二区三区六区色诱 | 国产精品毛片一区二区 | 午夜性盈盈 | 最近av在线 | 精品毛片在线 | 中文字幕在线专区 | av免费福利| 国产精品一区二区三区久久久 | 色婷婷天天干 | 欧美一级黄色片 | 99精品网站 | 日韩精品久久久久久中文字幕8 | 香蕉视频网站在线观看 | 国产va在线 | 亚洲国产黄色 | 国产精品 中文在线 | 911香蕉视频 | 日本中文字幕免费观看 | 国产精品综合久久久久久 | 亚洲黄色av网址 | 福利网在线 | 久久久久久久久久久久久9999 | 99久久99久国产黄毛片 | 三级黄色在线观看 | 亚洲午夜精品在线观看 | 激情婷婷在线观看 | 超碰97国产在线 | 久久久久免费 | 国产区高清在线 | 91 中文字幕 | 色吧av色av | 五月天亚洲婷婷 | 在线视频亚洲 | 人人玩人人添人人澡超碰 | 99视频在线看 | 亚洲黄色一级电影 | 国产色道 | 久久欧美综合 | 国产美女网站在线观看 | 日本公乱妇视频 | 黄色的网站免费看 | 国产 日韩 在线 亚洲 字幕 中文 | 99精品视频在线观看免费 | 成人污视频在线观看 | 狠狠色丁香久久婷婷综合五月 | 最新日韩精品 | 亚洲精品午夜一区人人爽 | 在线观看一 | av中文字幕电影 | 一区二区三区在线观看免费视频 | 欧美最猛性xxxxx(亚洲精品) | 中文字幕在线久一本久 | 99在线观看视频 | 日产中文字幕 | 91精品国产麻豆国产自产影视 | 久久久久亚洲精品 | 久久久亚洲影院 | 色婷婷久久久 | av电影免费看 | 久久不见久久见免费影院 | 日韩综合一区二区 | 黄色av免费电影 | 黄色片毛片 | 狠狠的操狠狠的干 | 国产69精品久久99的直播节目 | 天天射天天干天天操 | 九九久久久 | 日日干天天射 | 亚洲黄色激情小说 | 三级a毛片| 看片一区二区三区 | 欧美极度另类性三渗透 | 91九色在线观看视频 | 国产馆在线播放 | 久久久久久久久久久福利 | 国产美女在线免费观看 | 亚洲精品中文在线 | 久久99精品久久久久久秒播蜜臀 | 欧美成人影音 | 中文av不卡| 最近日本韩国中文字幕 | 99久久99热这里只有精品 | 久久久穴 | 在线视频 影院 | 亚洲精品视频在线观看网站 | 久草视频在线免费播放 | 久久国产精品99久久久久 | 99视频在线观看视频 | 欧美孕交vivoestv另类 | 狠狠天天 | 成人午夜电影网站 | 色综合久久88色综合天天 | 亚洲一区av | 国产毛片在线 | 亚洲精品中文字幕视频 | 亚州精品天堂中文字幕 | 久草网视频| 国产福利免费在线观看 | 中文字幕在线观看免费高清完整版 | 特级西西444www大精品视频免费看 | 亚洲第二色 | 在线成人免费av | 在线观看中文字幕2021 | 久久国产精品99国产精 | 在线观看中文 | 国产精品成久久久久三级 | 奇米影视777影音先锋 | 日韩在线视频不卡 | 免费黄色a级毛片 | 色婷婷 亚洲| 欧美精彩视频在线观看 | av天天色 | 中文在线中文a | 久久麻豆视频 | 国产成人免费 | 欧美国产一区二区 | 久久久久久欧美二区电影网 | 午夜精品视频福利 | 在线观看成年人 | 在线黄色免费 | 久久久久 免费视频 | 超碰大片| 亚洲黄色软件 | 97色噜噜| 久久久免费高清视频 | 色网站在线免费观看 | 国产黄a三级三级三级三级三级 | 韩国在线一区二区 | 91亚洲国产成人久久精品网站 | 日韩v在线91成人自拍 | 中文字幕av免费观看 | 久久视频国产精品免费视频在线 | 日韩高清一区二区 | 久久99久久99精品免观看粉嫩 | 草久久影院 | 欧美日韩三级 | 夜又临在线观看 | 88av色| 波多野结衣在线观看一区 | 久久香蕉电影网 | 国产精品精品国产 | 久久精品视频免费播放 | 中文av免费| 99精品欧美一区二区蜜桃免费 | 亚洲精品乱码久久久久久蜜桃不爽 | 99精品在线视频观看 | 国产色视频123区 | 天天综合网国产 | 欧美日韩在线视频观看 | 人人草人 | 91精品一区国产高清在线gif | 操操操夜夜操 | 亚洲国产久| 黄色毛片视频免费观看中文 | 成人亚洲精品国产www | 天天射天天射天天 | 日本精品视频在线 | 国产专区精品 | 激情综合网五月 | 久久人人做 | 天堂av高清 | 久久久久久久影视 | 亚洲.www | 久久线视频| 国产91精品久久久久久 | 亚洲日本国产精品 | 激情五月播播久久久精品 | 久久艹在线 | 久久精品91久久久久久再现 | 久久久免费毛片 | jizz999| 国产精品九九久久久久久久 | 99免费在线 | 国产精品刺激对白麻豆99 | 人人干人人搞 | 五月开心婷婷 | 国产精品久久久久久久久软件 | 麻豆传媒视频在线免费观看 | 四虎5151久久欧美毛片 | 成人性生交大片免费观看网站 | 国产高清av | 欧美亚洲精品一区 | 日韩系列 | av在线收看 | 亚洲精品播放 | 亚洲欧美日韩精品一区二区 | 在线成人免费电影 | ,午夜性刺激免费看视频 | 麻豆影视网 | 视频99爱 | 欧美午夜精品久久久久 | 999精品| 成人91av| 91自拍视频在线 | 亚洲综合色网站 | 久久av中文字幕片 | 日韩免费中文字幕 | 国产亚洲久久 | 91精品蜜桃 | 亚洲天堂香蕉 | 国产精品原创av片国产免费 | 久久乐九色婷婷综合色狠狠182 | 国产精品视频线看 | 日韩美女免费线视频 | 国产精品久久99 | 99久e精品热线免费 99国产精品久久久久久久久久 | 国产麻豆精品一区 | 四虎影视成人永久免费观看视频 | 一区三区视频 | 国产一区久久久 | 国产成人一级电影 | 日韩亚洲国产中文字幕 | 五月天久久综合网 | 欧美一级片免费在线观看 | 久操操 | 成年人免费在线观看网站 | 国产999精品久久久影片官网 | 中文字幕在线视频一区二区 | 91精品久久久久久综合乱菊 | 亚洲国产成人精品久久 | 国产亚洲婷婷免费 | 在线视频久 | 狠狠色狠狠综合久久 | 在线欧美a| 国产精品欧美激情在线观看 | 国产视频在线免费 | 午夜精品一区二区三区视频免费看 | 91视频在线观看下载 | 日韩精品一区二区三区第95 | 99热在线这里只有精品 | 天堂va欧美va亚洲va老司机 | 91大神精品视频在线观看 | 久草在线综合网 | 国产一性一爱一乱一交 | 欧美精品在线观看免费 | 国产精品自产拍在线观看蜜 | 日韩精品一区二区三区水蜜桃 | 久久精品国产免费看久久精品 | 99久久99视频 | 国产1区2 | 精品亚洲免费 | 亚洲美女精品 | 国产精品免费观看久久 | 玖玖玖影院 | 精品91视频 | 精品视频在线免费观看 | 9色在线视频 | 国产精品刺激对白麻豆99 | 91在线免费播放 | www.久久久久 | 精品999国产| 伊人干综合 | 成人黄色片在线播放 | 国产精品久久久久久久久久久久午夜片 | 国产福利在线免费 | 精品一区二区在线播放 | 欧美韩日在线 | 国产99免费 | 99久久综合狠狠综合久久 | 91爱爱中文字幕 | 久久久久国产a免费观看rela | 日韩欧美精品一区二区三区经典 | 日韩欧美成人网 | 久久大片 | av亚洲产国偷v产偷v自拍小说 | 婷婷综合在线 | 色的网站在线观看 | 国产99久久久国产精品免费看 | 五月婷婷综合激情网 | 狠狠操电影网 | 激情五月网站 | 丁香六月婷婷开心婷婷网 | 欧美中文字幕第一页 | 精品久久精品久久 | 国产亚洲精品中文字幕 | 国产午夜麻豆影院在线观看 | 免费日韩精品 | 在线视频 一区二区 | 玖玖在线看 | 最近2019年日本中文免费字幕 | 夜夜骑日日操 | 91色九色 | 日韩久久片 | 成人性生爱a∨ | 久久伦理电影网 | 日韩xxxx视频 | 欧洲黄色片 | 日韩成人免费观看 | 在线中文字幕一区二区 | 2019天天干夜夜操 | 国产a国产a国产a | 黄色在线免费观看网址 | 亚洲1区在线 | 欧美专区亚洲专区 | 天天操天天操天天操天天 | 国产精品久久人 | 久99久视频 | 一区二区三区中文字幕在线 | 五月婷婷一区 | 欧美贵妇性狂欢 | 特级a老妇做爰全过程 | av三区在线| 天天射网站 | 高清精品久久 | 亚洲黄色高清 | 久久这里只有精品23 | 国产男女免费完整视频 | 91人人网 | 九九精品久久 | 91精品一区二区三区蜜桃 | 国产高清在线免费视频 | 激情丁香在线 | 黄色在线成人 | 欧美国产三区 | 色婷婷导航 | 免费人成网ww44kk44 | 精品久久久久久亚洲综合网站 | 精品亚洲成a人在线观看 | 日日夜夜爱 | 亚洲天堂网在线视频 | 美女久久久久久久 | 黄色小说在线免费观看 | 国产丝袜一区二区三区 | 97成人在线观看视频 | 日韩精品一区二区三区免费观看视频 | 久久区二区 | av一区二区三区在线 | 欧美成人基地 | 97日日碰人人模人人澡分享吧 | 99九九免费视频 | 激情欧美一区二区三区免费看 | 日日摸日日碰 | 日韩三级视频在线观看 | 97超碰色 | 又黄又爽免费视频 | 婷婷亚洲五月色综合 | 一区二区三区四区精品 | 欧美在线视频一区二区三区 | 亚洲黄色小说网 | 国产午夜精品理论片在线 | 奇米网网址 | 天天操天天谢 | 成人h视频在线 | 九色福利视频 | 一区二区精品视频 | 国产精品久久久999 国产91九色视频 | 美女视频久久 | 精品999在线观看 | 美女福利视频 | 激情电影影院 | 人人干狠狠操 | 91视频一8mav| 国产成视频在线观看 | 国产精品igao视频网入口 | av免费观看高清 | 中文乱码视频在线观看 | 国产91九色蝌蚪 | 国产精品1000 | 日韩国产精品一区 | 日本在线中文在线 | 色欧美成人精品a∨在线观看 | 久久中文字幕在线视频 | 日韩精品在线播放 | 免费视频一二三区 | 国产美女久久 | 中文字幕三区 | 国产伦精品一区二区三区在线 | 在线成人欧美 | 欧美性色黄大片在线观看 | 亚洲黄色网络 | 福利网址在线观看 | 免费看久久| 91丨九色丨国产在线 | 久草热视频 | 在线观看 国产 | 在线视频在线观看 | 久久无码精品一区二区三区 | 激情www| 91 在线视频 | 日韩精品不卡在线 | 中文字幕a在线 | 97精品国产97久久久久久久久久久久 | 精品96久久久久久中文字幕无 | 成人作爱视频 | 婷婷伊人网 | 久久久久亚洲精品 | 91精品国自产拍天天拍 | 国产91av视频在线观看 | 国产高清精品在线观看 | 成人aⅴ视频 | 91秒拍国产福利一区 | 色网站免费在线观看 | 五月天天天操 | 国产精品久久久久婷婷 | 成人小视频免费在线观看 | 国产一性一爱一乱一交 | 五月天开心 | 国产精品久久一区二区无卡 | 99久久99久国产黄毛片 | 亚洲精品一区二区三区新线路 | 国产精品va在线观看入 | 亚洲日日射 | 久久午夜国产 | 又黄又爽又湿又无遮挡的在线视频 | 欧美视频一区二 | 亚洲精品成人av在线 | 亚洲精品国产成人av在线 | 91亚洲精品久久久 | 国产网站av | 青草视频在线 | 91欧美国产| 久草在线免费看视频 | 在线亚洲欧美日韩 | 成人黄色免费在线观看 | 国内精品99 | 黄色片网站 | 玖玖综合网 | 中文字幕在线免费观看视频 | 日韩高清 一区 | 精品国产片 | 黄污在线观看 | 欧美精品久久久久久久久久丰满 | 免费av黄色 | 综合激情伊人 | 91av资源网 | 四虎永久免费网站 | 欧美日产一区 | 国产特级毛片aaaaaa高清 | 亚洲一级国产 | 综合婷婷丁香 | 丁香六月久久综合狠狠色 | 五月婷婷综合网 | 人人看人人做人人澡 | 丁香综合激情 | 欧美色精品天天在线观看视频 | 国产亚洲精品久久久久久移动网络 | 91视频三区| 精品国产乱子伦一区二区 | 亚洲精品麻豆 | 99视频在线播放 | 国产在线中文 | 亚洲日本精品视频 | 久久久精品欧美 | 国产精品久久久久久久久久免费看 | 一区二区精品在线视频 | 99高清视频有精品视频 | 最近中文国产在线视频 | 久久艹国产视频 | 成人黄色在线视频 | 亚州国产精品视频 | 日韩av电影一区 | 91探花在线视频 | 久久视频在线观看 | 伊人国产在线播放 | av字幕在线 | 久草免费新视频 | av丝袜天堂| 久久视频精品 | 国产精品美女久久久久久 | 久久久久福利视频 | 91精品视频网站 | 久久草 | 成人一级片在线观看 | 欧美一级片免费播放 | 精品视频中文字幕 | 黄色软件在线观看视频 | 国产原创91| 亚洲欧美乱综合图片区小说区 | 日日操网| 国产精品久久久久久久久久久免费 | 国产精品毛片久久久久久 | 亚洲国内精品视频 | 欧美一区二区免费在线观看 | 天天干天天弄 | 久久精品这里精品 | 人人爽人人做 | 日本在线观看中文字幕 | 精品日韩视频 | 国产久草在线观看 | 992tv又爽又黄的免费视频 | 国产色网 | 三级黄色大片在线观看 | 免费在线一区二区三区 | 蜜桃视频精品 | 在线中文字幕av观看 | 国产精品资源在线观看 | 2019精品手机国产品在线 | 国产精品毛片一区视频 | 日日夜夜狠狠操 | 人人揉人人揉人人揉人人揉97 | 日韩在线电影观看 | 欧美日本在线视频 | 日韩 在线a | 欧美一区二区日韩一区二区 | 天天干夜夜爽 | 亚洲精品美女 | 成人欧美一区二区三区在线观看 | 日本三级不卡视频 | 精品在线观看一区二区三区 | 日韩激情在线视频 | 国产亚洲成人网 | 国产精品一区二区三区99 | 国产高清视频在线播放 | 亚洲欧洲一区二区在线观看 | 婷婷色在线资源 | 免费中文字幕视频 | 玖玖999 | 日韩一区二区三区免费电影 | 麻豆视频91 | 久久国产精品免费一区二区三区 | 黄色一区二区在线观看 | 伊人五月 | 国产中文字幕一区二区三区 | 国际精品久久久 | 91香蕉视频好色先生 | 97精品国产91久久久久久 | 色噜噜在线观看 | 91视频国产免费 | 中文在线√天堂 | 黄色一及电影 | 免费一级日韩欧美性大片 | 美女视频久久黄 | 亚洲午夜av | 视频一区视频二区在线观看 | 久久专区 | 成人中心免费视频 | 亚洲午夜久久久久久久久 | 亚洲激情小视频 | 久久成人国产 | 亚洲日本在线一区 | 久久人人精品 | 国产精品一区二区免费在线观看 | 狠狠的操你 | 亚洲国产美女久久久久 | 一区二区三区免费在线观看视频 | www.99在线观看 | 国产成人一区在线 | 久久五月婷婷丁香 | 91精品国产99久久久久久久 | 国产日韩中文字幕在线 | 国产精品福利在线观看 | 国产亚洲激情视频在线 | 狠狠操夜夜 | 欧美日韩精品免费观看 | 欧美a级片网站 | 日韩精品一区二区三区外面 | 91麻豆精品国产91久久久更新时间 | 色窝资源 | 中文字幕色在线 | 国产成人av一区二区三区在线观看 | 一级做a爱片性色毛片www | 国产日韩欧美视频 | av在线收看 | 国产视频久久久久 | 三级黄色理论片 | 三级视频国产 | 97**国产露脸精品国产 | 欧美日韩视频在线观看免费 | 91大神在线看 | 在线视频 91 | 国产日韩视频在线 | 日日爽| 成人黄色在线看 | 久久久首页 | av综合在线观看 | 在线观看国产麻豆 | 丁香久久综合 | 成人黄色大片网站 | 免费黄色网址网站 | 91精品啪在线观看国产 | 天天综合网久久综合网 | 日韩av看片 | 免费男女羞羞的视频网站中文字幕 | 国产一区二区视频在线 | 国产一区二区在线观看免费 | 久久99国产精品免费 | 久草网站在线 | 亚洲精品五月天 | 免费a网址 | 日韩欧美视频在线播放 | 麻豆影视在线播放 | 国产精品视频全国免费观看 | 亚洲精品www久久久 www国产精品com | 欧美一级特黄高清视频 | 91九色老 | 丝袜少妇在线 | 精品国产乱码一区二 | 99精品国自产在线 | 免费看片网站91 | 天天操天天操 | 欧美精品国产综合久久 | 怡红院成人在线 | 日韩在线电影一区二区 | 免费毛片aaaaaa | 国产精品久久久毛片 | 99精品视频在线免费观看 | 激情五月婷婷综合 | 一区二区精品在线观看 | 96久久精品 | 国产尤物视频在线 | 久久精品8| 一级一片免费视频 | 特级毛片爽www免费版 | 婷婷在线视频 | 国内精品久久久精品电影院 | 日韩v在线91成人自拍 | 成人精品久久久 | 亚洲国产wwwccc36天堂 | 国产精品日韩精品 | 在线观看中文字幕视频 | 久久国产精品久久精品 | 毛片在线网 | 国产精彩在线视频 | 在线精品在线 | 狠狠色狠狠色综合日日小说 | 久久av网址 | 婷婷精品在线视频 | 免费视频你懂得 | 亚洲精品乱码久久久久久9色 | 91精品视频免费 | 中文字幕日韩精品有码视频 | www.com在线观看 | 免费看色的网站 | 久热超碰| 亚洲成av人片 | 天天干天天搞天天射 | 国产又粗又猛又黄视频 | 亚洲va综合va国产va中文 | 欧美激情视频一区二区三区免费 | 国产在线观看99 | 深爱综合网 | 久久人人做 | 国产成人久久77777精品 | 国产区精品在线观看 | 激情五月综合网 | 91丨九色丨高潮丰满 | 日韩欧美视频免费观看 | 欧美激情在线网站 | 五月婷婷丁香 | 国产精品久久久久久一区二区三区 | 青青河边草免费观看 | 久久久精品视频成人 | 三级黄色在线观看 | 国产破处在线视频 | 国产一区不卡在线 | 高清精品在线 | 在线观看色网 | 久久久精品在线观看 | 又黄又爽又刺激视频 | 精品一区二区av | 亚洲欧美在线观看视频 | 五月天婷婷在线视频 | 久久综合久久鬼 | 高清在线一区二区 | 中文永久字幕 | 亚洲人成人在线 | 免费看的黄色的网站 | 国产在线a | 亚洲在线 | 欧美福利在线播放 | 国产精品99久久久久久武松影视 | 人成免费网站 | 欧美一区二区免费在线观看 | 国产一级在线看 | 久久久久电影 | 日韩免费福利 | 日韩视频一区二区三区在线播放免费观看 | 日韩精品免费一区 | 激情久久久久久久久久久久久久久久 | 超碰99人人 | 丁香激情五月 | 黄色网在线免费观看 | 人人爽人人澡人人添人人人人 | 99久久99久国产黄毛片 | 日韩在线短视频 | 99久久er热在这里只有精品15 | 国产小视频在线 | 黄污网| 国产日韩亚洲 | 中文字幕资源网在线观看 | 亚洲天天摸日日摸天天欢 | 国产黄色大片免费看 | 综合网久久 | 欧美日韩在线播放 | 欧美在线视频一区二区三区 | 亚洲久在线 | 国产不卡视频在线 | 久久久久国产精品免费免费搜索 | 香蕉视频国产在线 | 欧美日韩xxx| 狠狠色噜噜狠狠狠狠 | 亚洲在线免费视频 | 日韩在线视频看看 | 97在线视频免费看 | 国产高清中文字幕 | 激情影院在线观看 | 国产二区精品 | 国产一区网 | 久久视了| 国产伦理精品一区二区 | 欧美在线视频第一页 | 精品xxx| 99成人免费视频 | 一区二区三区精品在线视频 | 亚洲综合色婷婷 | 四季av综合网站 | 国产一区二区日本 | 国产精品国产亚洲精品看不卡15 | 黄色美女免费网站 | 久久第四色 | 欧美色图一区 | 99热99re6国产在线播放 | 久草干| 伊人婷婷综合 | 狠狠干在线 | 99精品一区 | 99精品国产福利在线观看免费 | 日韩动漫免费观看高清完整版在线观看 | 天天操夜夜曰 | 亚洲自拍偷拍色图 | 96看片 | 在线亚洲欧美日韩 | 亚洲视频免费在线观看 | 成人av久久| 91麻豆高清视频 | 国产视频中文字幕 | 久久国语露脸国产精品电影 | 亚洲高清在线视频 | 99精品久久久 | 国产视频精选 | 国产精品人成电影在线观看 | 热re99久久精品国产66热 | 91香蕉视频黄色 | 五月婷婷综合在线 | 亚州欧美视频 | 韩国av电影在线观看 | 九九免费精品视频 | 日韩中文在线视频 | 久久99精品视频 | 亚洲国产精品电影 | 天天草视频| 国产精品99久久久久人中文网介绍 | 婷婷av网| 精品毛片一区二区免费看 | 欧美日韩国产综合一区二区 | 久久成人人人人精品欧 | 日本精品免费看 | 欧美日韩久久 | 日韩午夜在线观看 | 精品免费在线视频 | 亚洲美女视频在线观看 | 福利一区在线视频 | 五月综合在线观看 | 欧美视频不卡 | 中文字幕一区二区三区在线视频 | 日本韩国精品一区二区在线观看 | 国产人成一区二区三区影院 | 亚洲在线观看av | 国产h在线播放 | 久久九九国产精品 | 99久久精品免费看国产麻豆 | 婷婷综合av | 91精品高清| 久久久久久国产精品 | 国产一区二区免费在线观看 | 亚洲精品国产片 | 6080yy午夜一二三区久久 | 久久99久久99精品免费看小说 | 日韩精品视频免费看 | 亚洲一区二区黄色 | 在线看成人 | 午夜三级福利 | 一区二区三区影院 | aaa亚洲精品一二三区 | 五月综合激情婷婷 | 91视频在线免费下载 | 亚洲涩涩涩 | 成人影音av| 国产高清精品在线 | 欧美一级片在线观看视频 | 国产一级片免费视频 | 特级黄色一级 | 精品色999| a久久免费视频 | 免费国产ww | 国产精品一区二区精品视频免费看 | 综合黄色网 | 欧美天堂视频在线 | 成人毛片100免费观看 | 欧美成人猛片 | 九九久久成人 | 999ZYZ玖玖资源站永久 | 香蕉久草在线 | 久久久亚洲精华液 | 日韩精品一区电影 | 亚洲在线观看av | 亚洲欧美成人综合 | 日日干日日色 | 狠狠gao | 国产精品成人一区二区三区吃奶 | 色网免费观看 | 伊人国产在线观看 | 国产精品成人一区二区三区吃奶 | 免费十分钟 | 中文字幕国产一区二区 | 国产视频久久久久 | 亚洲色图27p | 国产99精品 | 久久久久国产精品视频 | 久久精品电影网 | 最新国产在线观看 | 91久久人澡人人添人人爽欧美 | 香蕉久久久久 | 六月丁香婷婷久久 | 免费 在线 中文 日本 | 黄色免费在线视频 | 亚洲九九爱 | 欧美在线视频不卡 | 悠悠av资源片| 国产精品欧美 | 91夫妻视频| 亚洲日本va午夜在线电影 | 国产专区在线 | 日日夜夜网 | 亚洲精品tv | 精品在线观看一区二区 | 在线免费观看国产黄色 | 成人免费一级片 | 国产视频一二区 | 久久久久久麻豆 | 国产一区二区三区免费观看视频 | av在线a | 探花视频网站 | av在线电影免费观看 | 亚洲黄色高清 | 中文字幕在线影院 | 欧美成人一二区 | 国产高h视频 | 亚洲人人网 | 日韩精品黄 | 国产高清日韩欧美 | 国产福利91精品一区二区三区 | 免费视频久久久久 | 欧美成人精品在线 | 久久久久激情 | 日韩视频图片 | 在线观看av黄色 | 国内丰满少妇猛烈精品播 | 超碰97免费观看 | 日韩二区三区 | 伊人干综合 | 黄色一级大片在线免费看产 | av在线日韩 | 久久免费成人网 | www.夜夜操.com | 久久久国产一区二区三区 | 欧美地下肉体性派对 | 久久久久| 成人一级片在线观看 | 最近日韩中文字幕中文 | 国产午夜三级一二三区 |