{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import pandas as pd\nfrom sklearn.model_selection import train_test_split\nimport tensorflow as tf\nimport numpy as np","metadata":{"execution":{"iopub.status.busy":"2021-10-16T20:52:36.324552Z","iopub.execute_input":"2021-10-16T20:52:36.324816Z","iopub.status.idle":"2021-10-16T20:52:36.328680Z","shell.execute_reply.started":"2021-10-16T20:52:36.324784Z","shell.execute_reply":"2021-10-16T20:52:36.328011Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df = pd.read_csv(\"/kaggle/input/quora-insincere-questions-classification/train.csv\")\ntest_df = pd.read_csv(\"/kaggle/input/quora-insincere-questions-classification/test.csv\")\nprint(f\"Train shape: {train_df.shape}\")\nprint(f\"Test shape: {test_df.shape}\")","metadata":{"execution":{"iopub.status.busy":"2021-10-16T20:52:36.482129Z","iopub.execute_input":"2021-10-16T20:52:36.482809Z","iopub.status.idle":"2021-10-16T20:52:39.758769Z","shell.execute_reply.started":"2021-10-16T20:52:36.482780Z","shell.execute_reply":"2021-10-16T20:52:39.755686Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df = train_df.dropna(subset=[\"question_text\", \"target\"])\ntest_df = test_df.dropna(subset=[\"question_text\"])\n\ntrain_df = train_df.fillna(value={\"qid\":\"_nan_\"})\ntest_df = test_df.fillna(value={\"qid\":\"_nan_\"})","metadata":{"execution":{"iopub.status.busy":"2021-10-16T20:52:39.762411Z","iopub.execute_input":"2021-10-16T20:52:39.762699Z","iopub.status.idle":"2021-10-16T20:52:40.350879Z","shell.execute_reply.started":"2021-10-16T20:52:39.762659Z","shell.execute_reply":"2021-10-16T20:52:40.350141Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(\"Shapes after NaN valus hadled\")\nprint(f\"Train shape: {train_df.shape}\")\nprint(f\"Test shape: {test_df.shape}\")","metadata":{"execution":{"iopub.status.busy":"2021-10-16T20:52:40.352320Z","iopub.execute_input":"2021-10-16T20:52:40.352577Z","iopub.status.idle":"2021-10-16T20:52:40.360417Z","shell.execute_reply.started":"2021-10-16T20:52:40.352543Z","shell.execute_reply":"2021-10-16T20:52:40.359262Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df, val_df = train_test_split(train_df,\n                                    test_size=0.1,\n                                    random_state=2000)\n\ntraining_sentences = list(train_df[\"question_text\"].values)\nval_sentences = val_df[\"question_text\"].values\ntest_sentences = test_df[\"question_text\"].values\n\nembed_size = 300\nmax_features = 50000\nmaxlen = 100","metadata":{"execution":{"iopub.status.busy":"2021-10-16T20:52:40.362758Z","iopub.execute_input":"2021-10-16T20:52:40.363288Z","iopub.status.idle":"2021-10-16T20:52:41.123186Z","shell.execute_reply.started":"2021-10-16T20:52:40.363250Z","shell.execute_reply":"2021-10-16T20:52:41.122393Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"tokenizer = tf.keras.preprocessing.text.Tokenizer(num_words=max_features, oov_token=\"<oov>\")\ntokenizer.fit_on_texts(training_sentences)\n\nX_train = tokenizer.texts_to_sequences(training_sentences)\nX_val = tokenizer.texts_to_sequences(val_sentences)\nX_test = tokenizer.texts_to_sequences(test_sentences)\n\nX_train = tf.keras.preprocessing.sequence.pad_sequences(X_train,\n                                                        maxlen=maxlen,\n                                                        padding=\"post\",\n                                                        truncating=\"post\")\nX_val = tf.keras.preprocessing.sequence.pad_sequences(X_val,\n                                                        maxlen=maxlen,\n                                                        padding=\"post\",\n                                                        truncating=\"post\")\nX_test = tf.keras.preprocessing.sequence.pad_sequences(X_test,\n                                                        maxlen=maxlen,\n                                                        padding=\"post\",\n                                                        truncating=\"post\")","metadata":{"execution":{"iopub.status.busy":"2021-10-16T20:52:41.126404Z","iopub.execute_input":"2021-10-16T20:52:41.126606Z","iopub.status.idle":"2021-10-16T20:53:41.499308Z","shell.execute_reply.started":"2021-10-16T20:52:41.126580Z","shell.execute_reply":"2021-10-16T20:53:41.498497Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"y_train = train_df[\"target\"].values\ny_val = val_df[\"target\"].values","metadata":{"execution":{"iopub.status.busy":"2021-10-16T20:53:41.500759Z","iopub.execute_input":"2021-10-16T20:53:41.501003Z","iopub.status.idle":"2021-10-16T20:53:41.505118Z","shell.execute_reply.started":"2021-10-16T20:53:41.500968Z","shell.execute_reply":"2021-10-16T20:53:41.504401Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"inputs = tf.keras.layers.Input(shape=(maxlen,))\nx = tf.keras.layers.Embedding(max_features, embed_size)(inputs)\nx = tf.keras.layers.Bidirectional(tf.keras.layers.GRU(64, return_sequences=True))(x)\nx = tf.keras.layers.GlobalMaxPool1D()(x)\nx = tf.keras.layers.Dense(16, activation=\"relu\")(x)\nx = tf.keras.layers.Dropout(0.1)(x)\noutputs = tf.keras.layers.Dense(1, activation=\"sigmoid\")(x)\n\nmodel = tf.keras.models.Model(inputs=inputs, outputs=outputs)\nmodel.compile(loss=\"binary_crossentropy\", optimizer=\"adam\", metrics=[\"accuracy\"])\nmodel.summary()","metadata":{"execution":{"iopub.status.busy":"2021-10-16T20:53:41.506306Z","iopub.execute_input":"2021-10-16T20:53:41.506708Z","iopub.status.idle":"2021-10-16T20:53:41.980529Z","shell.execute_reply.started":"2021-10-16T20:53:41.506671Z","shell.execute_reply":"2021-10-16T20:53:41.979654Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"hist = model.fit(X_train, y_train, batch_size=4096, epochs=15, validation_data=(X_val, y_val))\ny_pred = model.predict(X_test, batch_size=1024)","metadata":{"execution":{"iopub.status.busy":"2021-10-16T20:53:41.984965Z","iopub.execute_input":"2021-10-16T20:53:41.985440Z","iopub.status.idle":"2021-10-16T21:08:12.849616Z","shell.execute_reply.started":"2021-10-16T20:53:41.985376Z","shell.execute_reply":"2021-10-16T21:08:12.848855Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(y_pred.shape)","metadata":{"execution":{"iopub.status.busy":"2021-10-16T21:08:12.851886Z","iopub.execute_input":"2021-10-16T21:08:12.852162Z","iopub.status.idle":"2021-10-16T21:08:12.856535Z","shell.execute_reply.started":"2021-10-16T21:08:12.852127Z","shell.execute_reply":"2021-10-16T21:08:12.855840Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"y_te = (y_pred[:,0] > 0.5).astype(np.int)\nsubmit_df = pd.DataFrame({\"qid\": test_df[\"qid\"], \"prediction\": y_te})\nsubmit_df.to_csv(\"submission.csv\", index=False)","metadata":{"execution":{"iopub.status.busy":"2021-10-16T21:08:12.857833Z","iopub.execute_input":"2021-10-16T21:08:12.858283Z","iopub.status.idle":"2021-10-16T21:08:13.664169Z","shell.execute_reply.started":"2021-10-16T21:08:12.858247Z","shell.execute_reply":"2021-10-16T21:08:13.663361Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}