{"cells":[{"metadata":{"_uuid":"c37d2e90-bd6e-4cb7-bf70-af96a6b49cfd","_cell_guid":"e9cfd4a1-937d-4b2b-a2b8-401dd78d26bb","trusted":true},"cell_type":"code","source":"import os\nimport time\nimport numpy as np \nimport pandas as pd \nfrom tqdm import tqdm\nimport math\nimport numpy as np\nimport pandas as pd\nfrom matplotlib import pyplot as plt\nplt.style.use('dark_background')\n\n\nfrom keras.preprocessing.text import Tokenizer\nfrom keras.preprocessing.sequence import pad_sequences\nfrom keras.utils import to_categorical\nfrom keras.models import Sequential\nfrom keras.layers import Dense, Input\nfrom keras.layers import Embedding\nfrom keras.models import Model\nfrom keras.initializers import Constant\nfrom keras.layers import LSTM","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Importar Datos"},{"metadata":{"_uuid":"cda71a75-d6bc-4124-9f6b-712926aee647","_cell_guid":"0010642c-f178-4a36-9cf1-40c02b5c0191","trusted":true},"cell_type":"code","source":"train = pd.read_csv(\"../input/quora-insincere-questions-classification/train.csv\")\ntest = pd.read_csv(\"../input/quora-insincere-questions-classification/test.csv\")\nprint(\"Train shape : \",train.shape)\nprint(\"Test shape : \",test.shape)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Separar en variable "},{"metadata":{"_uuid":"a9d10a07-63b6-4bc8-a98c-7bd2ae6477ad","_cell_guid":"f04484af-01d6-4740-988c-2038981c5101","trusted":true},"cell_type":"code","source":"x_train = train['question_text']\ny_train= train['target']\nx_test = test[\"question_text\"].fillna(\"dieter\").values","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Tokenizar el data set"},{"metadata":{"trusted":true},"cell_type":"code","source":"token = Tokenizer()\ntoken.fit_on_texts(x_train)\nseq = token.texts_to_sequences(x_train)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Padding"},{"metadata":{"trusted":true},"cell_type":"code","source":"pad_seq = pad_sequences(seq,maxlen=300)\nvocab_size = len(token.word_index)+1","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Extraer word embedding del Glove"},{"metadata":{"trusted":true},"cell_type":"code","source":"embedding_vector = {}\nf = open('../input/quora-insincere-questions-classification/embeddings/glove.840B.300d/glove.840B.300d.txt')\nfor line in tqdm(f):\n    value = line.split(' ')\n    word = value[0]\n    coef = np.array(value[1:],dtype = 'float32')\n    embedding_vector[word] = coef","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Crear Matriz de pesos "},{"metadata":{"trusted":true},"cell_type":"code","source":"embedding_matrix = np.zeros((vocab_size,300))\nfor word,i in tqdm(token.word_index.items()):\n    embedding_value = embedding_vector.get(word)\n    if embedding_value is not None:\n        embedding_matrix[i] = embedding_value","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Modelo LSTM con Embedding pre-entrenado"},{"metadata":{"trusted":true},"cell_type":"code","source":"\nmodel = Sequential()\n\nmodel.add(Embedding(vocab_size,300,weights = [embedding_matrix],input_length=300,trainable = False))\n\nmodel.add(LSTM(128, dropout=0.2, recurrent_dropout=0.2))\n\nmodel.add(Dense(1,activation = 'sigmoid'))\n\nmodel.compile(optimizer='adam',loss='binary_crossentropy',metrics = ['accuracy'])\n\n\nprint(model.summary())\n","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Entrenamiento del modelo"},{"metadata":{"trusted":true},"cell_type":"code","source":"history = model.fit(pad_seq,y_train,epochs = 4,batch_size=256,validation_split=0.2)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"plt.clf()\nloss = history.history['loss']\nval_loss = history.history['val_loss']\nepochs = range(1, len(loss) + 1)\nplt.plot(epochs, loss, 'g', label='Training loss')\nplt.plot(epochs, val_loss, 'y', label='Validation loss')\nplt.title('Training and validation loss')\nplt.xlabel('Epochs')\nplt.ylabel('Loss')\nplt.legend()\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Prediccion del modelo"},{"metadata":{"trusted":true},"cell_type":"code","source":"x_test = test['question_text']\nx_test = token.texts_to_sequences(x_test)\nx_test = pad_sequences(x_test,maxlen=300)\ny_pred = model.predict(x_test, batch_size=1024)\nyf=(y_pred > 0.5).astype(int).reshape(x_test.shape[0])","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Subir resultados"},{"metadata":{"trusted":true},"cell_type":"code","source":"submit_df = pd.DataFrame({\"qid\": test[\"qid\"], \"prediction\": yf})\nsubmit_df.to_csv(\"submission.csv\", index=False)\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"submit_df","execution_count":null,"outputs":[]}],"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":4,"nbformat_minor":1}