{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load in \n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\nimport matplotlib.pyplot as plt\n\n# Input data files are available in the \"../input/\" directory.\n# For example, running this (by clicking run or pressing Shift+Enter) will list the files in the input directory\n\nimport os\nprint(os.listdir(\"../input\"))\n\n# Any results you write to the current directory are saved as output.","execution_count":1,"outputs":[{"output_type":"stream","text":"['embeddings', 'train.csv', 'sample_submission.csv', 'test.csv']\n","name":"stdout"}]},{"metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","trusted":true},"cell_type":"code","source":"train_data = pd.read_csv('../input/train.csv')\nprint(train_data.shape)\ntrain_data.head()","execution_count":2,"outputs":[{"output_type":"stream","text":"(1306122, 3)\n","name":"stdout"},{"output_type":"execute_result","execution_count":2,"data":{"text/plain":"                    qid  ...   target\n0  00002165364db923c7e6  ...        0\n1  000032939017120e6e44  ...        0\n2  0000412ca6e4628ce2cf  ...        0\n3  000042bf85aa498cd78e  ...        0\n4  0000455dfa3e01eae3af  ...        0\n\n[5 rows x 3 columns]","text/html":"<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>qid</th>\n      <th>question_text</th>\n      <th>target</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>00002165364db923c7e6</td>\n      <td>How did Quebec nationalists see their province...</td>\n      <td>0</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>000032939017120e6e44</td>\n      <td>Do you have an adopted dog, how would you enco...</td>\n      <td>0</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>0000412ca6e4628ce2cf</td>\n      <td>Why does velocity affect time? Does velocity a...</td>\n      <td>0</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>000042bf85aa498cd78e</td>\n      <td>How did Otto von Guericke used the Magdeburg h...</td>\n      <td>0</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>0000455dfa3e01eae3af</td>\n      <td>Can I convert montra helicon D to a mountain b...</td>\n      <td>0</td>\n    </tr>\n  </tbody>\n</table>\n</div>"},"metadata":{}}]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_text = train_data['question_text'].values\ntrain_text","execution_count":3,"outputs":[{"output_type":"execute_result","execution_count":3,"data":{"text/plain":"array(['How did Quebec nationalists see their province as a nation in the 1960s?',\n       'Do you have an adopted dog, how would you encourage people to adopt and not shop?',\n       'Why does velocity affect time? Does velocity affect space geometry?',\n       ..., 'Is foam insulation toxic?',\n       'How can one start a research project based on biochemistry at UG level?',\n       'Who wins in a battle between a Wolverine and a Puma?'],\n      dtype=object)"},"metadata":{}}]},{"metadata":{"trusted":true},"cell_type":"code","source":"import nltk\n\nt_data = list()\n\nfor i in range(len(train_text)):\n    \n    if i % 100000 == 0:\n        print(i)\n\n    words = nltk.word_tokenize(train_text[i])\n\n    words=[word.lower() for word in words if word.isalpha()]\n    \n    # remove single character\n\n    words = [word for word in words if len(word) > 1]\n    \n    t_data.append(words)","execution_count":4,"outputs":[{"output_type":"stream","text":"0\n100000\n200000\n300000\n400000\n500000\n600000\n700000\n800000\n900000\n1000000\n1100000\n1200000\n1300000\n","name":"stdout"}]},{"metadata":{"trusted":true},"cell_type":"code","source":"from nltk.stem import WordNetLemmatizer \n  \nlemmatizer = WordNetLemmatizer()\n\ndata_l = list()\nfor i in range(len(t_data)):\n    temp = list()\n    for j in t_data[i]:\n        temp.append(lemmatizer.lemmatize(j))\n    data_l.append(temp)","execution_count":5,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"vocab = list()\n\nfor i in data_l:\n    for j in i:\n        vocab.append(j)\n# no of words in text\nlen(vocab)","execution_count":6,"outputs":[{"output_type":"execute_result","execution_count":6,"data":{"text/plain":"15636924"},"metadata":{}}]},{"metadata":{"trusted":true},"cell_type":"code","source":"# no of unique words\n\nvocab = set(vocab)\nlen(vocab)","execution_count":7,"outputs":[{"output_type":"execute_result","execution_count":7,"data":{"text/plain":"162577"},"metadata":{}}]},{"metadata":{"trusted":true},"cell_type":"code","source":"from keras.preprocessing.text import Tokenizer\n# function to build a tokenizer\n\ndef tokenization(lines):\n    tokenizer = Tokenizer()\n    tokenizer.fit_on_texts(lines)\n    return tokenizer\n\neng_tokens = tokenization(data_l)\neng_vocab_size = len(eng_tokens.word_index) + 1\nprint('English Vocabulary Size: %d' % eng_vocab_size)","execution_count":15,"outputs":[{"output_type":"stream","text":"English Vocabulary Size: 162578\n","name":"stdout"}]},{"metadata":{"trusted":true},"cell_type":"code","source":"m = list()\nfor i in range(len(data_l)):\n    m.append(len(data_l[i]))\nplt.plot(m)","execution_count":9,"outputs":[{"output_type":"execute_result","execution_count":9,"data":{"text/plain":"[<matplotlib.lines.Line2D at 0x7f5167b4b080>]"},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"<Figure size 432x288 with 1 Axes>","image/png":"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\n"},"metadata":{}}]},{"metadata":{"trusted":true},"cell_type":"code","source":"from keras.preprocessing.sequence import pad_sequences\n# encode and pad sequences\ndef encode_sequences(tokenizer,length,lines):\n    # integer encode sequences\n    seq = tokenizer.texts_to_sequences(lines)\n    # pad sequences with 0 values\n    seq = pad_sequences(seq, maxlen=length, padding='post')\n    return seq\n\nseq_data = encode_sequences(eng_tokens,60,data_l)","execution_count":10,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"EMBEDDING_FILE = '../input/embeddings/glove.840B.300d/glove.840B.300d.txt'\ndef get_coefs(word,*arr): return word, np.asarray(arr, dtype='float32')\nembeddings_index = dict(get_coefs(*o.split(\" \")) for o in open(EMBEDDING_FILE))\n\nprint('Found %s word vectors.' % len(embeddings_index))","execution_count":11,"outputs":[{"output_type":"stream","text":"Found 2196016 word vectors.\n","name":"stdout"}]},{"metadata":{"trusted":true},"cell_type":"code","source":"all_embs = np.stack(embeddings_index.values())\nemb_mean,emb_std = all_embs.mean(), all_embs.std()\nembed_size = all_embs.shape[1]\n\nword_index = eng_tokens.word_index\nnb_words = min(eng_vocab_size - 1, len(word_index))\nembedding_matrix = np.random.normal(emb_mean, emb_std, (nb_words, embed_size))\nfor word, i in word_index.items():\n    if i >= eng_vocab_size - 1: continue\n    embedding_vector = embeddings_index.get(word)\n    if embedding_vector is not None: embedding_matrix[i] = embedding_vector","execution_count":19,"outputs":[{"output_type":"stream","text":"/opt/conda/lib/python3.6/site-packages/ipykernel_launcher.py:1: FutureWarning: arrays to stack must be passed as a \"sequence\" type such as list or tuple. Support for non-sequence iterables such as generators is deprecated as of NumPy 1.16 and will raise an error in the future.\n  \"\"\"Entry point for launching an IPython kernel.\n","name":"stderr"}]},{"metadata":{"trusted":true},"cell_type":"code","source":"from keras.preprocessing.text import Tokenizer\nfrom keras.preprocessing.sequence import pad_sequences\nfrom keras.models import Sequential\nfrom keras.layers import *\nfrom keras.utils.np_utils import to_categorical\n\ntarget = train_data['target'].values\ntarget = to_categorical(target)","execution_count":20,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model = Sequential()\nmodel.add(Embedding(eng_vocab_size - 1,\n                    embed_size,\n                    weights=[embedding_matrix],\n                    input_length=60,\n                    trainable=False))\nmodel.add(SpatialDropout1D(0.2))\nmodel.add(Bidirectional(CuDNNLSTM(64, return_sequences=True)))\nmodel.add(Bidirectional(CuDNNLSTM(32)))\nmodel.add(Dropout(0.25))\nmodel.add(Dense(units=2, activation='softmax'))\nmodel.compile(loss = 'categorical_crossentropy', optimizer='adam',metrics = ['accuracy'])\nprint(model.summary())","execution_count":24,"outputs":[{"output_type":"stream","text":"_________________________________________________________________\nLayer (type)                 Output Shape              Param #   \n=================================================================\nembedding_3 (Embedding)      (None, 60, 300)           48773100  \n_________________________________________________________________\nspatial_dropout1d_2 (Spatial (None, 60, 300)           0         \n_________________________________________________________________\nbidirectional_3 (Bidirection (None, 60, 128)           187392    \n_________________________________________________________________\nbidirectional_4 (Bidirection (None, 64)                41472     \n_________________________________________________________________\ndropout_2 (Dropout)          (None, 64)                0         \n_________________________________________________________________\ndense_2 (Dense)              (None, 2)                 130       \n=================================================================\nTotal params: 49,002,094\nTrainable params: 228,994\nNon-trainable params: 48,773,100\n_________________________________________________________________\nNone\n","name":"stdout"}]},{"metadata":{"trusted":true},"cell_type":"code","source":"batch_size = 128\nhistory = model.fit(seq_data, target, epochs=5, batch_size=batch_size, verbose=1, validation_split=0.1)","execution_count":25,"outputs":[{"output_type":"stream","text":"WARNING:tensorflow:From /opt/conda/lib/python3.6/site-packages/tensorflow/python/ops/math_ops.py:3066: to_int32 (from tensorflow.python.ops.math_ops) is deprecated and will be removed in a future version.\nInstructions for updating:\nUse tf.cast instead.\nTrain on 1175509 samples, validate on 130613 samples\nEpoch 1/5\n1175509/1175509 [==============================] - 157s 134us/step - loss: 0.1185 - acc: 0.9537 - val_loss: 0.1068 - val_acc: 0.9577\nEpoch 2/5\n1175509/1175509 [==============================] - 155s 132us/step - loss: 0.1054 - acc: 0.9586 - val_loss: 0.1027 - val_acc: 0.9588\nEpoch 3/5\n1175509/1175509 [==============================] - 155s 132us/step - loss: 0.1002 - acc: 0.9604 - val_loss: 0.1006 - val_acc: 0.9594\nEpoch 4/5\n1175509/1175509 [==============================] - 156s 132us/step - loss: 0.0965 - acc: 0.9614 - val_loss: 0.1000 - val_acc: 0.9598\nEpoch 5/5\n1175509/1175509 [==============================] - 156s 133us/step - loss: 0.0935 - acc: 0.9626 - val_loss: 0.1001 - val_acc: 0.9601\n","name":"stdout"}]},{"metadata":{"trusted":true},"cell_type":"code","source":"plt.plot(history.history['acc'])\nplt.plot(history.history['val_acc'])\nplt.title('model accuracy')\nplt.ylabel('accuracy')\nplt.xlabel('epoch')\nplt.legend(['train', 'validation'], loc='upper left')\nplt.show()\n\nplt.plot(history.history['loss'])\nplt.plot(history.history['val_loss'])\nplt.title('model loss')\nplt.ylabel('loss')\nplt.xlabel('epoch')\nplt.legend(['train', 'validation'], loc='upper left')\nplt.show()","execution_count":26,"outputs":[{"output_type":"display_data","data":{"text/plain":"<Figure size 432x288 with 1 Axes>","image/png":"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\n"},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"<Figure size 432x288 with 1 Axes>","image/png":"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\n"},"metadata":{}}]},{"metadata":{"trusted":true},"cell_type":"code","source":"test_data = pd.read_csv('../input/test.csv')\nprint(test_data.shape)\ntest_data.head()","execution_count":31,"outputs":[{"output_type":"stream","text":"(375806, 2)\n","name":"stdout"},{"output_type":"execute_result","execution_count":31,"data":{"text/plain":"                    qid                                      question_text\n0  0000163e3ea7c7a74cd7  Why do so many women become so rude and arroga...\n1  00002bd4fb5d505b9161  When should I apply for RV college of engineer...\n2  00007756b4a147d2b0b3  What is it really like to be a nurse practitio...\n3  000086e4b7e1c7146103                             Who are entrepreneurs?\n4  0000c4c3fbe8785a3090   Is education really making good people nowadays?","text/html":"<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>qid</th>\n      <th>question_text</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>0000163e3ea7c7a74cd7</td>\n      <td>Why do so many women become so rude and arroga...</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>00002bd4fb5d505b9161</td>\n      <td>When should I apply for RV college of engineer...</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>00007756b4a147d2b0b3</td>\n      <td>What is it really like to be a nurse practitio...</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>000086e4b7e1c7146103</td>\n      <td>Who are entrepreneurs?</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>0000c4c3fbe8785a3090</td>\n      <td>Is education really making good people nowadays?</td>\n    </tr>\n  </tbody>\n</table>\n</div>"},"metadata":{}}]},{"metadata":{"trusted":true},"cell_type":"code","source":"sam_sub = pd.read_csv('../input/sample_submission.csv')\nsam_sub.head()","execution_count":28,"outputs":[{"output_type":"execute_result","execution_count":28,"data":{"text/plain":"                    qid  prediction\n0  0000163e3ea7c7a74cd7           0\n1  00002bd4fb5d505b9161           0\n2  00007756b4a147d2b0b3           0\n3  000086e4b7e1c7146103           0\n4  0000c4c3fbe8785a3090           0","text/html":"<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>qid</th>\n      <th>prediction</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>0000163e3ea7c7a74cd7</td>\n      <td>0</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>00002bd4fb5d505b9161</td>\n      <td>0</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>00007756b4a147d2b0b3</td>\n      <td>0</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>000086e4b7e1c7146103</td>\n      <td>0</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>0000c4c3fbe8785a3090</td>\n      <td>0</td>\n    </tr>\n  </tbody>\n</table>\n</div>"},"metadata":{}}]},{"metadata":{"trusted":true},"cell_type":"code","source":"q_id = test_data['qid'].values\nprint(q_id.shape)","execution_count":32,"outputs":[{"output_type":"stream","text":"(375806,)\n","name":"stdout"}]},{"metadata":{"trusted":true},"cell_type":"code","source":"test_text = test_data['question_text'].values\nprint(test_text.shape)","execution_count":33,"outputs":[{"output_type":"stream","text":"(375806,)\n","name":"stdout"}]},{"metadata":{"trusted":true},"cell_type":"code","source":"t_data_test = list()\n\nfor i in range(len(test_text)):\n    \n    if i % 100000 == 0:\n        print(i)\n\n    words = nltk.word_tokenize(test_text[i])\n\n    words=[word.lower() for word in words if word.isalpha()]\n    \n    # remove single character\n\n    words = [word for word in words if len(word) > 1]\n    \n    t_data_test.append(words)","execution_count":34,"outputs":[{"output_type":"stream","text":"0\n100000\n200000\n300000\n","name":"stdout"}]},{"metadata":{"trusted":true},"cell_type":"code","source":"data_l_test = list()\nfor i in range(len(t_data_test)):\n    temp = list()\n    for j in t_data_test[i]:\n        temp.append(lemmatizer.lemmatize(j))\n    data_l_test.append(temp)","execution_count":35,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"seq_data_test = encode_sequences(eng_tokens,60,data_l_test)","execution_count":36,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"pred = model.predict_classes(seq_data_test, verbose=1)","execution_count":38,"outputs":[{"output_type":"stream","text":"375806/375806 [==============================] - 54s 143us/step\n","name":"stdout"}]},{"metadata":{"trusted":true},"cell_type":"code","source":"pred.shape","execution_count":39,"outputs":[{"output_type":"execute_result","execution_count":39,"data":{"text/plain":"(375806,)"},"metadata":{}}]},{"metadata":{"trusted":true},"cell_type":"code","source":"q_id = q_id.reshape(-1,1)\nprint(q_id.shape)\npred = pred.reshape(-1,1)\nprint(pred.shape)","execution_count":42,"outputs":[{"output_type":"stream","text":"(375806, 1)\n(375806, 1)\n","name":"stdout"}]},{"metadata":{"trusted":true},"cell_type":"code","source":"output = np.array(np.concatenate((q_id, pred), 1))\n\noutput = pd.DataFrame(output,columns = [\"qid\",\"prediction\"])\n\noutput.to_csv('submission.csv',index = False)","execution_count":43,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.6.4","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat":4,"nbformat_minor":1}