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",
- " id | \n",
- " comment_text | \n",
- " toxic | \n",
- " severe_toxic | \n",
- " obscene | \n",
- " threat | \n",
- " insult | \n",
- " identity_hate | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " 0 | \n",
- " 0000997932d777bf | \n",
- " Explanation\\nWhy the edits made under my usern... | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 1 | \n",
- " 000103f0d9cfb60f | \n",
- " D'aww! He matches this background colour I'm s... | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 000113f07ec002fd | \n",
- " Hey man, I'm really not trying to edit war. It... | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 0001b41b1c6bb37e | \n",
- " \"\\nMore\\nI can't make any real suggestions on ... | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 0001d958c54c6e35 | \n",
- " You, sir, are my hero. Any chance you remember... | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- " 0 | \n",
- "
\n",
- " \n",
- "
\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": [
- "