diff --git a/Toxic Comments LSTM GloVe.ipynb b/Toxic Comments LSTM GloVe.ipynb deleted file mode 100644 index df199ff..0000000 --- a/Toxic Comments LSTM GloVe.ipynb +++ /dev/null @@ -1,672 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Using TensorFlow backend.\n" - ] - } - ], - "source": [ - "import re\n", - "from tqdm import tqdm_notebook\n", - "\n", - "from nltk.corpus import stopwords\n", - "\n", - "from tensorflow.keras import regularizers, initializers, optimizers, callbacks\n", - "from tensorflow.keras.preprocessing.sequence import pad_sequences\n", - "from tensorflow.keras.preprocessing.text import Tokenizer\n", - "from keras.utils.np_utils import to_categorical\n", - "from tensorflow.keras.layers import *\n", - "from tensorflow.keras.models import Model" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "MAX_NB_WORDS = 100000 # max no. of words for tokenizer\n", - "MAX_SEQUENCE_LENGTH = 200 # max length of each entry (sentence), including padding\n", - "VALIDATION_SPLIT = 0.2 # data for validation (not used in training)\n", - "EMBEDDING_DIM = 100 # embedding dimensions for word vectors (word2vec/GloVe)\n", - "GLOVE_DIR = \"glove/glove.6B.\"+str(EMBEDDING_DIM)+\"d.txt\"" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "train = pd.read_csv('data/toxic_train.csv')\n", - "test = pd.read_csv('data/toxic_test.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
idcomment_texttoxicsevere_toxicobscenethreatinsultidentity_hate
00000997932d777bfExplanation\\nWhy the edits made under my usern...000000
1000103f0d9cfb60fD'aww! He matches this background colour I'm s...000000
2000113f07ec002fdHey man, I'm really not trying to edit war. It...000000
30001b41b1c6bb37e\"\\nMore\\nI can't make any real suggestions on ...000000
40001d958c54c6e35You, sir, are my hero. Any chance you remember...000000
\n", - "
" - ], - "text/plain": [ - " id comment_text toxic \\\n", - "0 0000997932d777bf Explanation\\nWhy the edits made under my usern... 0 \n", - "1 000103f0d9cfb60f D'aww! He matches this background colour I'm s... 0 \n", - "2 000113f07ec002fd Hey man, I'm really not trying to edit war. It... 0 \n", - "3 0001b41b1c6bb37e \"\\nMore\\nI can't make any real suggestions on ... 0 \n", - "4 0001d958c54c6e35 You, sir, are my hero. Any chance you remember... 0 \n", - "\n", - " severe_toxic obscene threat insult identity_hate \n", - "0 0 0 0 0 0 \n", - "1 0 0 0 0 0 \n", - "2 0 0 0 0 0 \n", - "3 0 0 0 0 0 \n", - "4 0 0 0 0 0 " - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "train.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "id 0\n", - "comment_text 0\n", - "toxic 0\n", - "severe_toxic 0\n", - "obscene 0\n", - "threat 0\n", - "insult 0\n", - "identity_hate 0\n", - "dtype: int64" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "train.isnull().sum()" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "id 0\n", - "comment_text 0\n", - "dtype: int64" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "test.isnull().sum()" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [], - "source": [ - "labels = ['toxic', 'severe_toxic', 'obscene', 'threat', 'insult', 'identity_hate']\n", - "y = train[labels].values\n", - "comments_train = train['comment_text']\n", - "comments_test = test['comment_text']" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [], - "source": [ - "comments_train = list(comments_train)" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [], - "source": [ - "def clean_text(text, remove_stopwords = True):\n", - " output = \"\"\n", - " text = str(text).replace(\"\\n\", \"\")\n", - " text = re.sub(r'[^\\w\\s]','',text).lower()\n", - " if remove_stopwords:\n", - " text = text.split(\" \")\n", - " for word in text:\n", - " if word not in stopwords.words(\"english\"):\n", - " output = output + \" \" + word\n", - " else:\n", - " output = text\n", - " return str(output.strip())[1:-3].replace(\" \", \" \")" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "79e53157fa414fa0bca7725a5eaf5095", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "HBox(children=(IntProgress(value=0, max=159571), HTML(value='')))" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n" - ] - } - ], - "source": [ - "texts = [] \n", - "\n", - "for line in tqdm_notebook(comments_train, total=159571): \n", - " texts.append(clean_text(line))" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Sample data: aww matches background colour im seemingly stuck thanks talk 2151 january 11 2016 [0 0 0 0 0 0]\n" - ] - } - ], - "source": [ - "print('Sample data:', texts[1], y[1])" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [], - "source": [ - "tokenizer = Tokenizer(num_words=MAX_NB_WORDS)\n", - "tokenizer.fit_on_texts(texts)" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Vocabulary size: 324669\n" - ] - } - ], - "source": [ - "sequences = tokenizer.texts_to_sequences(texts)\n", - "word_index = tokenizer.word_index\n", - "print('Vocabulary size:', len(word_index))" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Shape of data tensor: (159571, 200)\n", - "Shape of label tensor: (159571, 6)\n" - ] - } - ], - "source": [ - "data = pad_sequences(sequences, padding = 'post', maxlen = MAX_SEQUENCE_LENGTH)\n", - "\n", - "print('Shape of data tensor:', data.shape)\n", - "print('Shape of label tensor:', y.shape)" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [], - "source": [ - "indices = np.arange(data.shape[0])\n", - "np.random.shuffle(indices)\n", - "data = data[indices]\n", - "labels = y[indices]" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [], - "source": [ - "num_validation_samples = int(VALIDATION_SPLIT*data.shape[0])\n", - "x_train = data[: -num_validation_samples]\n", - "y_train = labels[: -num_validation_samples]\n", - "x_val = data[-num_validation_samples: ]\n", - "y_val = labels[-num_validation_samples: ]" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Number of entries in each category:\n", - "training: [12226 1278 6716 381 6280 1110]\n", - "validation: [3068 317 1733 97 1597 295]\n" - ] - } - ], - "source": [ - "print('Number of entries in each category:')\n", - "print('training: ', y_train.sum(axis=0))\n", - "print('validation: ', y_val.sum(axis=0))" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Tokenized sentences: \n", - " [34381 763 522 4 6 2445 1221 65 2143 56458 45 17\n", - " 3100 763 1868 249 80 65 4524 107 506 474 1676 4522\n", - " 21 353 282 92 52 222 6 1787 4 22 534 4\n", - " 51 493 60 693 183 503 5 39 14 284 151 228\n", - " 21 1530 1601 25 208 39 246 4602 8025 22218 4843 56458\n", - " 393 5248 16415 12717 1530 39 169 20 744 25 2410 39\n", - " 1276 11 86 48058 3547 15 197 28 128 354 5145 1738\n", - " 46 107 128 768 2033 25 1092 3 502 1 144 157\n", - " 11207 2122 18 39 182 472 39 1607 23 234 225 3685\n", - " 0 0 0 0 0 0 0 0 0 0 0 0\n", - " 0 0 0 0 0 0 0 0 0 0 0 0\n", - " 0 0 0 0 0 0 0 0 0 0 0 0\n", - " 0 0 0 0 0 0 0 0 0 0 0 0\n", - " 0 0 0 0 0 0 0 0 0 0 0 0\n", - " 0 0 0 0 0 0 0 0 0 0 0 0\n", - " 0 0 0 0 0 0 0 0 0 0 0 0\n", - " 0 0 0 0 0 0 0 0]\n", - "One hot label: \n", - " [0 0 0 0 0 0]\n" - ] - } - ], - "source": [ - "print('Tokenized sentences: \\n', data[10])\n", - "print('One hot label: \\n', labels[10])" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Loading GloVe from: glove/glove.6B.100d.txt ...Done.\n", - " Proceeding with Embedding Matrix... Completed!\n" - ] - } - ], - "source": [ - "embeddings_index = {}\n", - "f = open(GLOVE_DIR)\n", - "print('Loading GloVe from:', GLOVE_DIR,'...', end='')\n", - "for line in f:\n", - " values = line.split()\n", - " word = values[0]\n", - " embeddings_index[word] = np.asarray(values[1:], dtype='float32')\n", - "f.close()\n", - "print(\"Done.\\n Proceeding with Embedding Matrix...\", end=\"\")\n", - "\n", - "embedding_matrix = np.random.random((len(word_index) + 1, EMBEDDING_DIM))\n", - "for word, i in word_index.items():\n", - " embedding_vector = embeddings_index.get(word)\n", - " if embedding_vector is not None:\n", - " embedding_matrix[i] = embedding_vector\n", - "print(\" Completed!\")" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": {}, - "outputs": [], - "source": [ - "sequence_input = Input(shape=(MAX_SEQUENCE_LENGTH,), dtype='int32')\n", - "embedding_layer = Embedding(len(word_index) + 1,\n", - " EMBEDDING_DIM,\n", - " weights = [embedding_matrix],\n", - " input_length = MAX_SEQUENCE_LENGTH,\n", - " trainable=False,\n", - " name = 'embeddings')\n", - "embedded_sequences = embedding_layer(sequence_input)" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "metadata": {}, - "outputs": [], - "source": [ - "x = LSTM(60, return_sequences=True,name='lstm_layer')(embedded_sequences)\n", - "x = GlobalMaxPool1D()(x)\n", - "x = Dropout(0.1)(x)\n", - "x = Dense(50, activation=\"relu\")(x)\n", - "x = Dropout(0.1)(x)\n", - "preds = Dense(6, activation=\"sigmoid\")(x)" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Model: \"model\"\n", - "_________________________________________________________________\n", - "Layer (type) Output Shape Param # \n", - "=================================================================\n", - "input_1 (InputLayer) [(None, 200)] 0 \n", - "_________________________________________________________________\n", - "embeddings (Embedding) (None, 200, 100) 32467000 \n", - "_________________________________________________________________\n", - "lstm_layer (UnifiedLSTM) (None, 200, 60) 38640 \n", - "_________________________________________________________________\n", - "global_max_pooling1d (Global (None, 60) 0 \n", - "_________________________________________________________________\n", - "dropout (Dropout) (None, 60) 0 \n", - "_________________________________________________________________\n", - "dense (Dense) (None, 50) 3050 \n", - "_________________________________________________________________\n", - "dropout_1 (Dropout) (None, 50) 0 \n", - "_________________________________________________________________\n", - "dense_1 (Dense) (None, 6) 306 \n", - "=================================================================\n", - "Total params: 32,508,996\n", - "Trainable params: 41,996\n", - "Non-trainable params: 32,467,000\n", - "_________________________________________________________________\n" - ] - } - ], - "source": [ - "model = Model(sequence_input, preds)\n", - "model.compile(loss = 'binary_crossentropy',\n", - " optimizer='adam',\n", - " metrics = ['accuracy'])\n", - "model.summary()" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Training progress:\n", - "Train on 127657 samples, validate on 31914 samples\n", - "Epoch 1/2\n", - "127657/127657 [==============================] - 537s 4ms/sample - loss: 0.1277 - accuracy: 0.9650 - val_loss: 0.1040 - val_accuracy: 0.9699\n", - "Epoch 2/2\n", - "127657/127657 [==============================] - 533s 4ms/sample - loss: 0.0967 - accuracy: 0.9720 - val_loss: 0.0890 - val_accuracy: 0.9734\n" - ] - } - ], - "source": [ - "print('Training progress:')\n", - "history = model.fit(x_train, y_train, epochs = 2, batch_size=32, validation_data=(x_val, y_val))" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "loss = history.history['loss']\n", - "val_loss = history.history['val_loss']\n", - "\n", - "epochs = range(1, len(loss)+1)\n", - "\n", - "plt.plot(epochs, loss, label='Training loss')\n", - "plt.plot(epochs, val_loss, label='Validation loss')\n", - "plt.title('Training and validation loss')\n", - "plt.xlabel('Epochs')\n", - "plt.ylabel('Loss')\n", - "plt.legend()\n", - "plt.show();" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "accuracy = history.history['accuracy']\n", - "val_accuracy = history.history['val_accuracy']\n", - "\n", - "plt.plot(epochs, accuracy, label='Training accuracy')\n", - "plt.plot(epochs, val_accuracy, label='Validation accuracy')\n", - "plt.title('Training and validation accuracy')\n", - "plt.ylabel('Accuracy')\n", - "plt.xlabel('Epochs')\n", - "plt.legend()\n", - "plt.show();" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.7" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -}