{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "name": "toxicity_simple_transformers.ipynb",
      "provenance": [],
      "include_colab_link": true
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    },
    "accelerator": "GPU"
  },
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "view-in-github",
        "colab_type": "text"
      },
      "source": [
        "<a href=\"https://colab.research.google.com/github/mrm8488/shared_colab_notebooks/blob/master/toxicity_simple_transformers.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "52vxTjPp0PcZ",
        "colab_type": "text"
      },
      "source": [
        "# Toxicity comments classification with simple transformers"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "mOK_oeoS0Yg0",
        "colab_type": "code",
        "outputId": "6afcfb8f-6c31-472b-ff0b-11c816a385bb",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 128
        }
      },
      "source": [
        "from google.colab import drive\n",
        "drive.mount('/content/drive')"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Go to this URL in a browser: https://accounts.google.com/o/oauth2/auth?client_id=947318989803-6bn6qk8qdgf4n4g3pfee6491hc0brc4i.apps.googleusercontent.com&redirect_uri=urn%3aietf%3awg%3aoauth%3a2.0%3aoob&response_type=code&scope=email%20https%3a%2f%2fwww.googleapis.com%2fauth%2fdocs.test%20https%3a%2f%2fwww.googleapis.com%2fauth%2fdrive%20https%3a%2f%2fwww.googleapis.com%2fauth%2fdrive.photos.readonly%20https%3a%2f%2fwww.googleapis.com%2fauth%2fpeopleapi.readonly\n",
            "\n",
            "Enter your authorization code:\n",
            "··········\n",
            "Mounted at /content/drive\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "LF62LypT0v9B",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "!mkdir data"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "IrsZNYiP1gzr",
        "colab_type": "code",
        "outputId": "9801a5c1-3967-4db5-ba16-417dc363bb73",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 108
        }
      },
      "source": [
        "!unzip \"/content/drive/My Drive/toxic-comment-classification-challenge.zip\" -d ./data"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Archive:  /content/drive/My Drive/toxic-comment-classification-challenge.zip\n",
            "  inflating: ./data/test_labels.csv  \n",
            "  inflating: ./data/sample_submission.csv  \n",
            "  inflating: ./data/test.csv         \n",
            "  inflating: ./data/train.csv        \n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "UPauE5mZ16Ew",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "DATA_PATH = \"/content/data/\""
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "kc7UqQZM2JCf",
        "colab_type": "code",
        "outputId": "190e54e9-b886-431e-d744-107b2b7622ea",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 108
        }
      },
      "source": [
        "!ls -l $DATA_PATH"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "total 137136\n",
            "-rw-r--r-- 1 root root  6279782 Jun 19  2018 sample_submission.csv\n",
            "-rw-r--r-- 1 root root 60354593 Jun 19  2018 test.csv\n",
            "-rw-r--r-- 1 root root  4976930 Jun 19  2018 test_labels.csv\n",
            "-rw-r--r-- 1 root root 68802655 Jun 19  2018 train.csv\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "oJkH6Bq12cEk",
        "colab_type": "code",
        "outputId": "5cd905ef-6ee4-4261-e176-d77549d9e68c",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 1000
        }
      },
      "source": [
        "!pip install transformers\n",
        "!pip install seqeval\n",
        "!pip install tensorboardx\n",
        "!pip install simpletransformers"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Collecting transformers\n",
            "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/fd/f9/51824e40f0a23a49eab4fcaa45c1c797cbf9761adedd0b558dab7c958b34/transformers-2.1.1-py3-none-any.whl (311kB)\n",
            "\u001b[K     |████████████████████████████████| 317kB 9.7MB/s \n",
            "\u001b[?25hCollecting sentencepiece\n",
            "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/14/3d/efb655a670b98f62ec32d66954e1109f403db4d937c50d779a75b9763a29/sentencepiece-0.1.83-cp36-cp36m-manylinux1_x86_64.whl (1.0MB)\n",
            "\u001b[K     |████████████████████████████████| 1.0MB 38.0MB/s \n",
            "\u001b[?25hCollecting regex\n",
            "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/e3/8e/cbf2295643d7265e7883326fb4654e643bfc93b3a8a8274d8010a39d8804/regex-2019.11.1-cp36-cp36m-manylinux1_x86_64.whl (643kB)\n",
            "\u001b[K     |████████████████████████████████| 645kB 57.0MB/s \n",
            "\u001b[?25hCollecting sacremoses\n",
            "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/1f/8e/ed5364a06a9ba720fddd9820155cc57300d28f5f43a6fd7b7e817177e642/sacremoses-0.0.35.tar.gz (859kB)\n",
            "\u001b[K     |████████████████████████████████| 860kB 61.1MB/s \n",
            "\u001b[?25hRequirement already satisfied: numpy in /usr/local/lib/python3.6/dist-packages (from transformers) (1.17.4)\n",
            "Requirement already satisfied: tqdm in /usr/local/lib/python3.6/dist-packages (from transformers) (4.28.1)\n",
            "Requirement already satisfied: boto3 in /usr/local/lib/python3.6/dist-packages (from transformers) (1.10.14)\n",
            "Requirement already satisfied: requests in /usr/local/lib/python3.6/dist-packages (from transformers) (2.21.0)\n",
            "Requirement already satisfied: six in /usr/local/lib/python3.6/dist-packages (from sacremoses->transformers) (1.12.0)\n",
            "Requirement already satisfied: click in /usr/local/lib/python3.6/dist-packages (from sacremoses->transformers) (7.0)\n",
            "Requirement already satisfied: joblib in /usr/local/lib/python3.6/dist-packages (from sacremoses->transformers) (0.14.0)\n",
            "Requirement already satisfied: jmespath<1.0.0,>=0.7.1 in /usr/local/lib/python3.6/dist-packages (from boto3->transformers) (0.9.4)\n",
            "Requirement already satisfied: botocore<1.14.0,>=1.13.14 in /usr/local/lib/python3.6/dist-packages (from boto3->transformers) (1.13.14)\n",
            "Requirement already satisfied: s3transfer<0.3.0,>=0.2.0 in /usr/local/lib/python3.6/dist-packages (from boto3->transformers) (0.2.1)\n",
            "Requirement already satisfied: idna<2.9,>=2.5 in /usr/local/lib/python3.6/dist-packages (from requests->transformers) (2.8)\n",
            "Requirement already satisfied: urllib3<1.25,>=1.21.1 in /usr/local/lib/python3.6/dist-packages (from requests->transformers) (1.24.3)\n",
            "Requirement already satisfied: chardet<3.1.0,>=3.0.2 in /usr/local/lib/python3.6/dist-packages (from requests->transformers) (3.0.4)\n",
            "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.6/dist-packages (from requests->transformers) (2019.9.11)\n",
            "Requirement already satisfied: python-dateutil<2.8.1,>=2.1; python_version >= \"2.7\" in /usr/local/lib/python3.6/dist-packages (from botocore<1.14.0,>=1.13.14->boto3->transformers) (2.6.1)\n",
            "Requirement already satisfied: docutils<0.16,>=0.10 in /usr/local/lib/python3.6/dist-packages (from botocore<1.14.0,>=1.13.14->boto3->transformers) (0.15.2)\n",
            "Building wheels for collected packages: sacremoses\n",
            "  Building wheel for sacremoses (setup.py) ... \u001b[?25l\u001b[?25hdone\n",
            "  Created wheel for sacremoses: filename=sacremoses-0.0.35-cp36-none-any.whl size=883999 sha256=0da932d0862d9f644147e802ebf276d903594a9dbe71d99a795da459d952af63\n",
            "  Stored in directory: /root/.cache/pip/wheels/63/2a/db/63e2909042c634ef551d0d9ac825b2b0b32dede4a6d87ddc94\n",
            "Successfully built sacremoses\n",
            "Installing collected packages: sentencepiece, regex, sacremoses, transformers\n",
            "Successfully installed regex-2019.11.1 sacremoses-0.0.35 sentencepiece-0.1.83 transformers-2.1.1\n",
            "Collecting seqeval\n",
            "  Downloading https://files.pythonhosted.org/packages/34/91/068aca8d60ce56dd9ba4506850e876aba5e66a6f2f29aa223224b50df0de/seqeval-0.0.12.tar.gz\n",
            "Requirement already satisfied: numpy>=1.14.0 in /usr/local/lib/python3.6/dist-packages (from seqeval) (1.17.4)\n",
            "Requirement already satisfied: Keras>=2.2.4 in /usr/local/lib/python3.6/dist-packages (from seqeval) (2.2.5)\n",
            "Requirement already satisfied: six>=1.9.0 in /usr/local/lib/python3.6/dist-packages (from Keras>=2.2.4->seqeval) (1.12.0)\n",
            "Requirement already satisfied: pyyaml in /usr/local/lib/python3.6/dist-packages (from Keras>=2.2.4->seqeval) (3.13)\n",
            "Requirement already satisfied: keras-applications>=1.0.8 in /usr/local/lib/python3.6/dist-packages (from Keras>=2.2.4->seqeval) (1.0.8)\n",
            "Requirement already satisfied: keras-preprocessing>=1.1.0 in /usr/local/lib/python3.6/dist-packages (from Keras>=2.2.4->seqeval) (1.1.0)\n",
            "Requirement already satisfied: h5py in /usr/local/lib/python3.6/dist-packages (from Keras>=2.2.4->seqeval) (2.8.0)\n",
            "Requirement already satisfied: scipy>=0.14 in /usr/local/lib/python3.6/dist-packages (from Keras>=2.2.4->seqeval) (1.3.2)\n",
            "Building wheels for collected packages: seqeval\n",
            "  Building wheel for seqeval (setup.py) ... \u001b[?25l\u001b[?25hdone\n",
            "  Created wheel for seqeval: filename=seqeval-0.0.12-cp36-none-any.whl size=7424 sha256=e5509de4d55c1e7dcf23077e975f8bcb3fa0706d2aab4f72821f22081822d927\n",
            "  Stored in directory: /root/.cache/pip/wheels/4f/32/0a/df3b340a82583566975377d65e724895b3fad101a3fb729f68\n",
            "Successfully built seqeval\n",
            "Installing collected packages: seqeval\n",
            "Successfully installed seqeval-0.0.12\n",
            "Collecting tensorboardx\n",
            "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/a6/5c/e918d9f190baab8d55bad52840d8091dd5114cc99f03eaa6d72d404503cc/tensorboardX-1.9-py2.py3-none-any.whl (190kB)\n",
            "\u001b[K     |████████████████████████████████| 194kB 9.0MB/s \n",
            "\u001b[?25hRequirement already satisfied: numpy in /usr/local/lib/python3.6/dist-packages (from tensorboardx) (1.17.4)\n",
            "Requirement already satisfied: six in /usr/local/lib/python3.6/dist-packages (from tensorboardx) (1.12.0)\n",
            "Requirement already satisfied: protobuf>=3.8.0 in /usr/local/lib/python3.6/dist-packages (from tensorboardx) (3.10.0)\n",
            "Requirement already satisfied: setuptools in /usr/local/lib/python3.6/dist-packages (from protobuf>=3.8.0->tensorboardx) (41.4.0)\n",
            "Installing collected packages: tensorboardx\n",
            "Successfully installed tensorboardx-1.9\n",
            "Collecting simpletransformers\n",
            "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/2d/94/623ebb991fa1abf6a132a69a7d31572842918e7e4b9d9183051ded88674b/simpletransformers-0.7.0-py3-none-any.whl (58kB)\n",
            "\u001b[K     |████████████████████████████████| 61kB 4.4MB/s \n",
            "\u001b[?25hRequirement already satisfied: numpy in /usr/local/lib/python3.6/dist-packages (from simpletransformers) (1.17.4)\n",
            "Requirement already satisfied: requests in /usr/local/lib/python3.6/dist-packages (from simpletransformers) (2.21.0)\n",
            "Requirement already satisfied: scikit-learn in /usr/local/lib/python3.6/dist-packages (from simpletransformers) (0.21.3)\n",
            "Requirement already satisfied: regex in /usr/local/lib/python3.6/dist-packages (from simpletransformers) (2019.11.1)\n",
            "Requirement already satisfied: transformers in /usr/local/lib/python3.6/dist-packages (from simpletransformers) (2.1.1)\n",
            "Requirement already satisfied: seqeval in /usr/local/lib/python3.6/dist-packages (from simpletransformers) (0.0.12)\n",
            "Requirement already satisfied: tqdm in /usr/local/lib/python3.6/dist-packages (from simpletransformers) (4.28.1)\n",
            "Requirement already satisfied: scipy in /usr/local/lib/python3.6/dist-packages (from simpletransformers) (1.3.2)\n",
            "Requirement already satisfied: urllib3<1.25,>=1.21.1 in /usr/local/lib/python3.6/dist-packages (from requests->simpletransformers) (1.24.3)\n",
            "Requirement already satisfied: chardet<3.1.0,>=3.0.2 in /usr/local/lib/python3.6/dist-packages (from requests->simpletransformers) (3.0.4)\n",
            "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.6/dist-packages (from requests->simpletransformers) (2019.9.11)\n",
            "Requirement already satisfied: idna<2.9,>=2.5 in /usr/local/lib/python3.6/dist-packages (from requests->simpletransformers) (2.8)\n",
            "Requirement already satisfied: joblib>=0.11 in /usr/local/lib/python3.6/dist-packages (from scikit-learn->simpletransformers) (0.14.0)\n",
            "Requirement already satisfied: sacremoses in /usr/local/lib/python3.6/dist-packages (from transformers->simpletransformers) (0.0.35)\n",
            "Requirement already satisfied: boto3 in /usr/local/lib/python3.6/dist-packages (from transformers->simpletransformers) (1.10.14)\n",
            "Requirement already satisfied: sentencepiece in /usr/local/lib/python3.6/dist-packages (from transformers->simpletransformers) (0.1.83)\n",
            "Requirement already satisfied: Keras>=2.2.4 in /usr/local/lib/python3.6/dist-packages (from seqeval->simpletransformers) (2.2.5)\n",
            "Requirement already satisfied: click in /usr/local/lib/python3.6/dist-packages (from sacremoses->transformers->simpletransformers) (7.0)\n",
            "Requirement already satisfied: six in /usr/local/lib/python3.6/dist-packages (from sacremoses->transformers->simpletransformers) (1.12.0)\n",
            "Requirement already satisfied: botocore<1.14.0,>=1.13.14 in /usr/local/lib/python3.6/dist-packages (from boto3->transformers->simpletransformers) (1.13.14)\n",
            "Requirement already satisfied: s3transfer<0.3.0,>=0.2.0 in /usr/local/lib/python3.6/dist-packages (from boto3->transformers->simpletransformers) (0.2.1)\n",
            "Requirement already satisfied: jmespath<1.0.0,>=0.7.1 in /usr/local/lib/python3.6/dist-packages (from boto3->transformers->simpletransformers) (0.9.4)\n",
            "Requirement already satisfied: keras-applications>=1.0.8 in /usr/local/lib/python3.6/dist-packages (from Keras>=2.2.4->seqeval->simpletransformers) (1.0.8)\n",
            "Requirement already satisfied: keras-preprocessing>=1.1.0 in /usr/local/lib/python3.6/dist-packages (from Keras>=2.2.4->seqeval->simpletransformers) (1.1.0)\n",
            "Requirement already satisfied: h5py in /usr/local/lib/python3.6/dist-packages (from Keras>=2.2.4->seqeval->simpletransformers) (2.8.0)\n",
            "Requirement already satisfied: pyyaml in /usr/local/lib/python3.6/dist-packages (from Keras>=2.2.4->seqeval->simpletransformers) (3.13)\n",
            "Requirement already satisfied: python-dateutil<2.8.1,>=2.1; python_version >= \"2.7\" in /usr/local/lib/python3.6/dist-packages (from botocore<1.14.0,>=1.13.14->boto3->transformers->simpletransformers) (2.6.1)\n",
            "Requirement already satisfied: docutils<0.16,>=0.10 in /usr/local/lib/python3.6/dist-packages (from botocore<1.14.0,>=1.13.14->boto3->transformers->simpletransformers) (0.15.2)\n",
            "Installing collected packages: simpletransformers\n",
            "Successfully installed simpletransformers-0.7.0\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "_4g-UGhf2t9G",
        "colab_type": "code",
        "outputId": "1f11e45f-c830-409b-df84-3f43c6ebfbdc",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 65
        }
      },
      "source": [
        "import numpy as np\n",
        "import pandas as pd\n",
        "from sklearn.model_selection import train_test_split\n",
        "from simpletransformers.classification import MultiLabelClassificationModel\n"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<p style=\"color: red;\">\n",
              "The default version of TensorFlow in Colab will soon switch to TensorFlow 2.x.<br>\n",
              "We recommend you <a href=\"https://www.tensorflow.org/guide/migrate\" target=\"_blank\">upgrade</a> now \n",
              "or ensure your notebook will continue to use TensorFlow 1.x via the <code>%tensorflow_version 1.x</code> magic:\n",
              "<a href=\"https://colab.research.google.com/notebooks/tensorflow_version.ipynb\" target=\"_blank\">more info</a>.</p>\n"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "w0iz1m7G3Bp7",
        "colab_type": "code",
        "outputId": "2e78a153-3624-4d26-f4ad-c187040d4150",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 198
        }
      },
      "source": [
        "df = pd.read_csv(DATA_PATH + 'train.csv')\n",
        "df.head()"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "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>id</th>\n",
              "      <th>comment_text</th>\n",
              "      <th>toxic</th>\n",
              "      <th>severe_toxic</th>\n",
              "      <th>obscene</th>\n",
              "      <th>threat</th>\n",
              "      <th>insult</th>\n",
              "      <th>identity_hate</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>0000997932d777bf</td>\n",
              "      <td>Explanation\\nWhy the edits made under my usern...</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>000103f0d9cfb60f</td>\n",
              "      <td>D'aww! He matches this background colour I'm s...</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>000113f07ec002fd</td>\n",
              "      <td>Hey man, I'm really not trying to edit war. It...</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>0001b41b1c6bb37e</td>\n",
              "      <td>\"\\nMore\\nI can't make any real suggestions on ...</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>0001d958c54c6e35</td>\n",
              "      <td>You, sir, are my hero. Any chance you remember...</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>"
            ],
            "text/plain": [
              "                 id  ... identity_hate\n",
              "0  0000997932d777bf  ...             0\n",
              "1  000103f0d9cfb60f  ...             0\n",
              "2  000113f07ec002fd  ...             0\n",
              "3  0001b41b1c6bb37e  ...             0\n",
              "4  0001d958c54c6e35  ...             0\n",
              "\n",
              "[5 rows x 8 columns]"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 9
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "qpQXOs2i3Ql-",
        "colab_type": "code",
        "outputId": "44d9746a-2ccd-4d9f-8cd1-a06b3634b30f",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 254
        }
      },
      "source": [
        "df.info()"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "<class 'pandas.core.frame.DataFrame'>\n",
            "RangeIndex: 159571 entries, 0 to 159570\n",
            "Data columns (total 8 columns):\n",
            "id               159571 non-null object\n",
            "comment_text     159571 non-null object\n",
            "toxic            159571 non-null int64\n",
            "severe_toxic     159571 non-null int64\n",
            "obscene          159571 non-null int64\n",
            "threat           159571 non-null int64\n",
            "insult           159571 non-null int64\n",
            "identity_hate    159571 non-null int64\n",
            "dtypes: int64(6), object(2)\n",
            "memory usage: 9.7+ MB\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "I5HgHzO_3xYv",
        "colab_type": "code",
        "outputId": "80d6077c-a2b0-4b8f-8280-a12f5e36c1ce",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 181
        }
      },
      "source": [
        "df.isnull().sum()"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "execute_result",
          "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"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 11
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "mzD8j5GA3m1X",
        "colab_type": "code",
        "outputId": "80407677-50ca-4bd4-a95c-6dfb2b60cbb4",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 288
        }
      },
      "source": [
        "df.describe()"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "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>toxic</th>\n",
              "      <th>severe_toxic</th>\n",
              "      <th>obscene</th>\n",
              "      <th>threat</th>\n",
              "      <th>insult</th>\n",
              "      <th>identity_hate</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>count</th>\n",
              "      <td>159571.000000</td>\n",
              "      <td>159571.000000</td>\n",
              "      <td>159571.000000</td>\n",
              "      <td>159571.000000</td>\n",
              "      <td>159571.000000</td>\n",
              "      <td>159571.000000</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>mean</th>\n",
              "      <td>0.095844</td>\n",
              "      <td>0.009996</td>\n",
              "      <td>0.052948</td>\n",
              "      <td>0.002996</td>\n",
              "      <td>0.049364</td>\n",
              "      <td>0.008805</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>std</th>\n",
              "      <td>0.294379</td>\n",
              "      <td>0.099477</td>\n",
              "      <td>0.223931</td>\n",
              "      <td>0.054650</td>\n",
              "      <td>0.216627</td>\n",
              "      <td>0.093420</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>min</th>\n",
              "      <td>0.000000</td>\n",
              "      <td>0.000000</td>\n",
              "      <td>0.000000</td>\n",
              "      <td>0.000000</td>\n",
              "      <td>0.000000</td>\n",
              "      <td>0.000000</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>25%</th>\n",
              "      <td>0.000000</td>\n",
              "      <td>0.000000</td>\n",
              "      <td>0.000000</td>\n",
              "      <td>0.000000</td>\n",
              "      <td>0.000000</td>\n",
              "      <td>0.000000</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>50%</th>\n",
              "      <td>0.000000</td>\n",
              "      <td>0.000000</td>\n",
              "      <td>0.000000</td>\n",
              "      <td>0.000000</td>\n",
              "      <td>0.000000</td>\n",
              "      <td>0.000000</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>75%</th>\n",
              "      <td>0.000000</td>\n",
              "      <td>0.000000</td>\n",
              "      <td>0.000000</td>\n",
              "      <td>0.000000</td>\n",
              "      <td>0.000000</td>\n",
              "      <td>0.000000</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>max</th>\n",
              "      <td>1.000000</td>\n",
              "      <td>1.000000</td>\n",
              "      <td>1.000000</td>\n",
              "      <td>1.000000</td>\n",
              "      <td>1.000000</td>\n",
              "      <td>1.000000</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>"
            ],
            "text/plain": [
              "               toxic   severe_toxic  ...         insult  identity_hate\n",
              "count  159571.000000  159571.000000  ...  159571.000000  159571.000000\n",
              "mean        0.095844       0.009996  ...       0.049364       0.008805\n",
              "std         0.294379       0.099477  ...       0.216627       0.093420\n",
              "min         0.000000       0.000000  ...       0.000000       0.000000\n",
              "25%         0.000000       0.000000  ...       0.000000       0.000000\n",
              "50%         0.000000       0.000000  ...       0.000000       0.000000\n",
              "75%         0.000000       0.000000  ...       0.000000       0.000000\n",
              "max         1.000000       1.000000  ...       1.000000       1.000000\n",
              "\n",
              "[8 rows x 6 columns]"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 12
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "n-8cgQfV5HsV",
        "colab_type": "code",
        "outputId": "5e4687be-f4dc-4636-bcad-f780e2f27cc8",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 35
        }
      },
      "source": [
        "print(np.sum(df['toxic'] > 0),\n",
        "np.sum(df['severe_toxic'] > 0),\n",
        "np.sum(df['obscene'] > 0),\n",
        "np.sum(df['threat'] > 0),\n",
        "np.sum(df['insult'] > 0),\n",
        "np.sum(df['identity_hate'] > 0))"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "15294 1595 8449 478 7877 1405\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "uC3FaDQX74Uw",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "import matplotlib.pyplot as plt\n",
        "import seaborn as sns"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "t-lTOIUR65id",
        "colab_type": "code",
        "outputId": "98bb3326-1a93-478e-8154-a7586f1f7e38",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 543
        }
      },
      "source": [
        "%matplotlib inline\n",
        "\n",
        "df2 = df[['toxic','severe_toxic', 'obscene', 'threat', 'insult', 'identity_hate']]\n",
        "categories = list(df2.columns.values)\n",
        "sns.set(font_scale = 2)\n",
        "plt.figure(figsize=(15,8))\n",
        "\n",
        "ax= sns.barplot(categories, df2.sum().values)\n",
        "\n",
        "plt.title(\"Comments in each category\", fontsize=24)\n",
        "plt.ylabel('Number of comments', fontsize=18)\n",
        "plt.xlabel('Comment Type ', fontsize=18)\n",
        "#adding the text labels\n",
        "rects = ax.patches\n",
        "labels = df2.sum().values\n",
        "for rect, label in zip(rects, labels):\n",
        "    height = rect.get_height()\n",
        "    ax.text(rect.get_x() + rect.get_width()/2, height + 5, label, ha='center', va='bottom', fontsize=18)\n",
        "plt.show()"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\nI66oqEjo2bOnWEcmk2nU+frrr7XGV1ZWiomntmsWBEG4fv264O7uLnTr1k24deuW1n7NnDlT632f\nO3euIJVKhaVLl2qUPSzhTUxMFP8gV33x8Kj0SXh79OghZGRkaJRHRUWJn7HaJNkFBQWCh4eH4Obm\nJn7J8aD4+HihS5cuQp8+fWrVtupzpe161q1bJ0ilUqFv376CXC7Xqz3V/ZFKpcLy5cu11lF98aPt\nc16TuvTnYWq6fn0S3kd5b3744Qcx8czMzNSIS0hIEL/webAPWVlZwjPPPCNIpVIhPDxcI7a4uFjw\n9vYWpFKp8N5776mV3f8eLVq0SOe17dq1S5BKpcJLL72ktXzRokWCVCoV3n//fZ1tENHTSb+HhIiI\n6F+lmlLYrFmzOj9bqFq919XVFYMGDdIob9myJV555RUAwC+//KK1DVNTU7z22msax3v27ClOu/Xx\n8YGNjY1GHdVq0VeuXNHZxzlz5mgca9KkiTjF2tPTE3369NG7bZlMhpycHEilUq3XDADt2rWDu7s7\nKisrIZPJtNYJCAjQet9Vz/jWdE26NG3aFABQUVEhvr//hlGjRml9dnL48OGQSCQoLy9HZmam3u0d\nPXoUxcXFGDBgAJ555hmtdTw9PdG2bVsUFBQgJSVF77Z79+4NGxsb5OTk4NatW2plhw4dAlA9Jbgu\n2zDNnTtX6/G6vqeP2h9tarp+fTzKe3Ps2DEA1Z8XZ2dnjTh3d3d4eXlpbTM6OhpKpRL29vaYMmWK\nRrmlpSVmz54tnqeqqkprO/7+/jqv7aWXXoKpqSlSU1PFRzRU7t27J/af05mJ6EF8hpeIyECp/ih8\ncDGb+/Xr1w/btm1DRkYGiouL0aRJE7VyJycnWFlZacQZGRmhefPmkMvl6Ny5s9a27ezsAFT/MaqL\nVCrVerxFixY1lrds2VJr2/Hx8QCAjIwMDBw4UOd5CwsLAQA3b97UWu7m5qb1uCqxqemadHFxcYGL\niwsyMjIwdepUTJ8+HYMGDULHjh3r/KWGPnRdi6mpKezs7HD79m0UFBTo3d5ff/0FADh79myN91jV\n5s2bN+Hp6alW9ssvv+DIkSO4ePEi7ty5g7KyMo34f/75R7zf2dnZuH37NgCIi5nVhq2trdYkDqjb\ne/qo/ant9evrUd4b1e+LXr166Yzr3bs3/vzzT43jqsS5V69eOhcc69evH4DqRb6uXbuGTp06qZVb\n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\nB3Do0AGN+NDQYISGBmPNms8wbJjmAmdERERERPT4YMJLj4WSkhIYGRlpbDV0+fIlnDwZDReXDmpb\nHAmCgHXrPkZk5BH4+s5EQMC8Wp/zzJnT+OOPM3j++RfFUWRHRyesWfOZRt1r19Kxc+d2jB79AgYO\nHARX1x61Ph8REREREf27mPBSg4qK+hly+U0AQH5+PioqKhAcvANA9VTl0aNfAABkZ2fi3XffxKBB\nQ9G2rfP/X6X5CiIjD8PIyAjvvbdcrd0tW77Ezz8fRqdOUri4dMDRo5Fq5U5ObdWS0rVrP4IgCOjc\nuQvMzc1x4UICjh2LQteu3fDWW++K9aysrLSO3DZrVr2Xb8eOnTiyS0RERET0hGDCSw0qIuKQuPWP\nyo4d3wAAPDx6iglvixZ26N3bC/Hx5/Drr1EoKyuFnV1LDB8+Er6+M9G+vYtaG5cuXQQAXL16GWvW\nrNA47/PPv6iW8Hbt2h2HD/+E06dPoKKiEm3btoW//1xMnToN5uaa+/MSEREREdGTj9sSPaGexG2J\niIiIiIiIHhW3JSIiIiIiIqKnHhNeIiIiIiIiMkh8hvcpYm1jAQtz08buBtVRaVkFCu+VNnY3iIiI\niIieGEx4nyIW5qaYtmRvY3eD6ihs/asoBBNeIiIiIiJ9cUozERERERERGSQmvERERERERGSQmPAS\nERERERGRQWLCS0RERERERAaJCS8REREREREZJCa8REREREREZJCY8BIREREREZFBYsJLRERERERE\nBokJLxERERERERkkJrxERERERERkkJjwEhERERERkUFiwktEREREREQGiQkvERERERERGSQmvERE\nRERERGSQmPASERERERGRQWLCS0RERERERAaJCS8REREREREZJCa8REREREREZJCY8BIREREREZFB\nYsJLREREREREBokJLxERERERERkkJrxERERERERkkJjwEhERERERkUFiwktEREREREQGiQkvERER\nERERGSQmvERERERERGSQTBq7A+np6fjtt9+QlJSE5ORkZGRkQBAEfPnllxg9erTe7WzcuBHbtm0D\nACxZsgT+/v466x45cgTh4eFIS0uDUqlEhw4dMGnSJPj4+MDISPd3ADExMQgODkZycjLKysrg7OyM\nF154Af7+/jAzM9MZl5iYiO3btyM+Ph4KhQKOjo7w9vbGvHnzYG1trfc1EhERERERkf4aPeENDw/H\n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\ntNYvKCgQXycnJyM5OVlrPS8vL50Jb69evbB3717IZDIolUp07NgRkyZNgo+Pj8borkpAQAC6dOmC\nXbt2ISkpCWVlZXB2doavry/8/f1hZmamNe7FF1+Es7Mztm3bhvj4eCQmJsLR0RH+/v6YN28erK25\nVRAREREREVFDaPQRXqobjvA+fTjCS0RERET0FO7DS0RERERERPQgJrxERERERERkkOol4S0vL6+P\nZoiIiIiIiIjqjd4J7+nTp/HVV1+pHdu7dy969uwJDw8PLF68GBUVFfXeQSIiIiIiIqK60Dvh/fbb\nb5Geni7+/Pfff+PTTz9Fq1atMGDAAERGRmLvXi6IRERERERERI8HvRPe9PR0uLq6ij9HRkbC3Nwc\nP/zwA3bs2IExY8bg4MGDDdJJIiIiIiIiotrSO+EtKChA8+bNxZ//+OMP9OvXD1ZW1ctBe3l5ITs7\nu/57SERERERERFQHeie8zZs3x40bNwAACoUCSUlJ6N27t1heWVmJqqqq+u8hERERERERUR2Y6FvR\nw8MD3333HTp16oSYmBhUVVVh8ODBYvn169fRqlWrBukkERERERERUW3pPcL75ptvQqlU4u2338aB\nAwcwfvx4dOrUCQAgCAKio6PRs2fPBusoERERERERUW3oPcLbqVMnREZGIj4+HtbW1ujTp49Ydu/e\nPcyYMQN9+/ZtkE4SERERERER1ZbeI7xxcXFQKpUYPny4WrILAM2aNcPYsWNRWFhY7x0kIiIiIiIi\nqgu9E14/Pz/8/vvvOsvPnj0LPz+/eukUERERERER0aPSO+EVBKHG8qqqKhgZ6d0cERERERERUYOq\nVYYqkUh0lv31119q+/QSERERERERNaYaF60KCQnB7t27xZ8//fRTbNq0SaPevXv3oFAoMGnSpPrv\nIREREREREVEd1Jjw2tjYoE2bNgCAnJwc2Nraws7OTq2ORCJB586d4eHhgddee63BOkpERERERERU\nGzUmvBMmTMCECRMAAMOHD8fixYsxYsSIf6VjRERERERERI9C7314T5w40ZD9ICIiIiIiIqpXeie8\n9yspKUF+fr7WlZtVU6CJiIiIiIiIGpPeCa9SqcSOHTuwZ88e3L59W2e91NTUeukYERERERER0aPQ\nO+ENDAzEzp070blzZ4waNQq2trYN2S8iIiIiIiKiR6J3wnv48GEMGjQIQUFBDdkfIiIiIiIionph\n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\nWOC8CQnx2rcvSo0bN5WX14O3zWPDhrWSJF/fXoX9CMB9weKCNyEhQbVq1cq339PTU/Hx8VZJCgAA\nALiX7dgRoZs3b6pbtx4qU6aMob116za6deumZswI0okTx3Xlyu/69ddIffbZXNWpU1c+PvkvIEnS\nv/+9XtnZ2fL1fa7AcZJ069Yt/fhjhKpXd1erVo/d8WcCSiOLb2m2t7fX77//nm//lStXZGtrcf1s\nFQkJCQoJCdGePXsUHx+vnJwcubu7q02bNgoMDJSnp+leC0nasGGDwsPDdezYMWVnZ6tu3brq27ev\n/Pz8CvwMu3fv1vLly3Xo0CGlpaXJ09NT3bt3V0BAgBwKOLAlJiZGS5cu1f79+5WcnCx3d3f5+Pho\n5MiRJr/+AQAA4N63ceM62djYqHt344Ok/P2H6o8//tCmTeu1bdtmQ3vbtu0VFDRD5ctXyHfO7Oxs\nbdq0QY6O5dWpU8GFsST9+OM2paTckp/foH/83+FASWHxfxkPP/ywtmzZovT0dJO+jIwMbd68WQ0a\nNLBqcgU5fPiwfH19tWrVKqWmpurxxx/XE088odTUVH399dfq2bOn9u/fbxI3ZcoUjRs3TocOHVLL\nli3Vrl07nTlzRlOnTtXrr7+u7Oxss+8XEhKiwMBA/fLLL2rUqJE6duyoxMREzZ07V/7+/kpJSTEb\nt3HjRvn5+SkiIkJ16tRR586dlZGRoc8//1x9+/ZVYmKiVb8XAAAAFK9z587o4MEDevTRVqpRo6ZR\nn62trVxdXdWyZWu98867mjHjY/XvP0j79kXp/fcnKjMzM995o6N/1eXLCerc+WmVL1/+tnls2LBO\ntra2evbZgk9vBu5nFq/wDho0SGPGjNGIESP0f//3f2rQoIFsbGx09OhRzZkzRydPntTs2bOLM1cj\nU6dOVVJSkvr166fJkyfL3t5eUm7x/f777+vbb79VUFCQ1q9fb4jZunWrwsLC5OrqqlWrVqlOnTqS\npKtXr2rw4MHavn27Vq5cqSFDhhi9V2xsrGbPni1HR0etWLFC3t7eknL3aIwYMULR0dGaM2eOJk6c\naBSXkJCgSZMmKScnRwsWLJCPj4+k3BOv33rrLW3atEmTJ0/WggULiutrAgAAgJVt3LhOkszedvzB\nB1MUG3tQq1Z9rbJly0mSOnZ8Sh4eHgoOnqXNmzfmu982b94ePW6/H/f06d8UFxer1q3bqnr16kX9\n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\nluKSLDExWdnZOYWK4aJT8l258ufdTgEwwbWl5OPagnsR15aSj2sLioutrY3FC4AW7+G9l+StqEpS\nv379TPqbNm2qxo0bKycnR1FRUZL+t5qakpKS77x5q7J/nd+SuLwV2sLGmXs/AAAAAIB1lMiC18PD\nw+xrc2OuXr0qSapZs6Yk6dKlS/nOm5CQYDTWGnHx8fH5xuX1/TUOAAAAAGAd+d7SbM7+/fu1evVq\nnT17VtevX1dOjvEttTY2NoqIiLBqguY0atTI8Pr69etmD4b6448/JP1vpTUvJjY21uycKSkpOnHi\nhMn8ea9PnDih1NRUsyc1583ZsGFDQ5uXl5fKlSun69ev69y5c2Zvqz548KBJHAAAAADAOixe4V2z\nZo0GDhyo7du3KyMjQ+7u7qpRo4bRn4JOJLamatWqydvbW5IUGRlp0n/jxg3Do36aNGkiSWrevLkq\nV66shIQERUdHm8Rs2bJFGRkZatq0qapVq2Zod3d3V+PGjZWRkaEtW7aYxEVFRSkhIUGurq5q3ry5\nod3BwUEdOnSQJK1fv94k7vz58zpw4IDs7e315JNPFuLTAwAAAAAsYXHBu3jxYjVs2FA7d+7UunXr\ntHLlSrN//imvvPKKJGnJkiVGq7ZpaWkKCgrSn3/+qcaNGxuK0DJlyujll1+WJAUFBSkxMdEQc+bM\nGc2ePdto3r8aPny4JCk4OFhnz541tCcmJmrKlCmSpMDAQNnaGn+dgYGBsrGxUWhoqGE1V8rd8ztx\n4kRlZ2drwIABcnFxKfoXAQAAAAAwy+JbmhMTExUQEKDKlSsXZz4W69Spk4YNG6YvvvhCfn5+8vb2\nVqVKlXTw4EH9/vvvqlatmj755BPZ2NgYYl566SVFR0drx44d6tKli9q2bavMzEz9/PPPSktLk7+/\nv3x8fEzeq2vXrvLz81N4eLh8fX3Vrl072dnZKTIyUsnJyfLx8dGgQYNM4po1a6axY8cqODhY/fv3\nV5s2beTs7Kzo6GglJibK29tbb775ZrF+TwAAAABwv7K44H3wwQeVlJRUnLkU2ttvv63mzZtr1apV\nOnLkiFJSUlSjRg0NHTpUw4cPNynOy5Qpo4ULFyosLEzfffed9uzZI1tbWzVu3FgDBgyQr69vvu8V\nFBSkFi1aaPXq1YqKilJ2dra8vLzUt29f+fn5mazu5gkMDFSDBg20bNkyxcbGKi0tTZ6envL391dA\n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\nLFkgF5eKeuihBkpO/tOimPfem2rS1rBhE6O/nz17RiNGDFVWVpb69HlB7u41FBcXq+XLQxUXd0iz\nZ8+XjY1NkeYGAADA3VciC97badSokSTp8uXLhraEhATFxcXJ3t5eXbt2NYlp3bq1qlWrpsuXL+vA\ngQN69NFHJUnp6enavXu3JKlnz54mcZ6ennrkkUe0f/9+7dq1S76+voa+iIiIfOOcnJz01FNPacOG\nDYqIiKDgBQrw9ddrVbOmhyTJ37+fUlJSbhvzzDPP3nbM4sWf6ubNZC1cGKqmTXN/zOrVq69q1aqt\nJUsWaNu2zWbnsWRuAAAA3H2l8pTmM2fOSMrd35vn8OHDkqT69eurXLlyZuOaNm0qSTpy5Iih7fTp\n00pJSVGlSpVUq1atAuPy3kOSkpOTde7cOaN+S+IAmMordgsjJydHN28mKzs7O98x+/fvk6dnLUOx\nm6dbt9wfrjZtMn/btCVzAwAA4O4rdSu8V65c0ffffy9J6tKli6H9woULkqQaNWrkG+vu7m409q+v\n8/rMyZvz4sWLJnEuLi5ycnIqMO6v7wfAOp555kndunVT9vb28vZursDAV9W4sfFtxxkZGWZ/AMtr\nO3w4Tjk5OSa3NVsyNwAAAO6+UlXw5h0G9eeff6pt27bq1KmToe/WrVuSZPYk5TwVKlSQlHsYVWHi\nypcvb7U4S1WpYr6IRunm6spjrOzsyqhMGdt8vwsPD3e99NJLaty4scqXL6+jR49qxYoVeu21QC1d\nulTt2rUzjK1fv75OnjwpKdXojpCYmF8lSSkpt+TgkK1KlSoVem6gJOHaAqA43K/XliVLliguLk5x\ncXG6cOGCatasqR9//NGi2I8//lihoaEqX768/vvf/5r0p6ena9GiRVq3bp1+//13Va9eXX369FFg\nYKDs7e2Nxnbq1MloQe6vIiMjVbly5cJ/uBKoVBW877//viIjI+Xu7q6PP/74bqdTrBITk5WdnVOo\nmPv1olOaXLli2YFNpVlmZpaysrLz/S6GDBlh9Hdv78fUrt1TGjp0gN57b7K++up7Q1/fvn6aOvVd\nBQaO0Kuvvv7/D606pPnzg2VnZ6fMzExdvHhVGRllCj33/YRrS8nHtQX3Iq4tJd/9em355JNPDIdt\n3riRVOC/W/7qxIljWrZsmRwdyysnJ8dszIQJY/XTT7vUvXtPNWnSTIcOHdS8efN0/PgpTZoUZDQ2\nKytbtWvX0eDBw0zmSUkxP39JYWtrY/ECYKkpeKdPn65vvvlGrq6uWr58udFqjfS/1dSCDrvJW2nN\nW+m1NC5vNdcacQCsz9Ozljp1elqbNm3QuXNnVatWbUlSly5dlZR0XaGhizV6dG4xa29vL3//oYqM\n3KMjRw7f9r/P/OYGAAD3p6IctpmVlaUPP5yhNm3a6ebNmzp27IjJmMjIPfrpp1168cWBGj36TUmS\nr28vOTk56+uvV6tnz94m55I88EDl+/6wzVJxaNWsWbO0cuVKVa5cWcuXLzd65FCemjVrSpIuXbqU\n7zwJCQlGY//6Oj4+Pt+4vD5zcUlJSUpOTi4wzsOj8AfyACic6tVz9+HfuHHdqP355/tr/fptCg39\nUgsXhmr9+m0aNmy44uPjVaVKVVWocPtfD/ObGwAA3H+KctjmN998pTNnftObb47Pd8z27VslSf36\n+Rm15/1969bNZuMyMzN186b5euR+UOIL3o8++kjLli1TpUqVtGzZsnwf75P3qKITJ04oNTXV7JjY\n2FhJUsOGDQ1tXl5eKleunK5fv244dfnvDh48aBLn7OxsONU5b15L4gAUjwsXzkuSKleuYtLn4OCg\nhx9upGbNHpGzs7OOHj2s69f/UNu27e94bgAAgIIkJMQrNHSxhg4NNPyIbs6RI3FydXVTtWrVjdqr\nVauuqlVddfSo6ZNfDh+Ok4/P43rmmSfVteuTmj79fV29esXqn+FeVqIL3uDgYH3++eeqWLGili1b\npocffjjfse7u7mrcuLEyMjK0ZcsWk/6oqCglJCTI1dVVzZs3N7Q7ODioQ4cOkqT169ebxJ0/f14H\nDhyQvb29nnzySaO+zp075xuXnJysHTt2SJKefvrp239YALeVkpKitLQ0k/bjx49qx44I1alT97a/\nuqalpWnevNlycHCQn5+/VecGAAD4u+DgmapRo6ZefHFggeOuXr2qqlVdzfa5urrqypXfjdrq1vXS\n4MFDFRQ0Q0FBM9S5cxdt375FgYFD7quit8Tu4Z0zZ45CQkLk4uKiL774wrCCW5Dhw4drzJgxCg4O\nVvPmzVW7du5eu8TERE2ZMkWSFBgYKFtb498BAgMDtX37doWGhqpDhw5q1qyZpNw9vxMnTlR2drb8\n/f3l4uJiFDdkyBCFh4dr7dq18vHxMRTAmZmZmjx5spKTk+Xj45PvqjSAXFu2/FsJCblbAK5fv66M\n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\naIZhw7xLtVxIyG4AQJ8+/ZXG6+npoUWLlujc2RlWVm2RlpaCnTu3Ye7cmZg/fxE6dvzgrfNORETy\nOIaXiIiI6P8dOnQAFy6cx5dfToemZsnfC6SmpuD06RNo2rQZbGxsFeLv3YvGp5/6omNHB/j7/xfO\nzi746KMB+O23Vahduy6CguYhPz+/LItCRERgg5eIiIgIAJCTk4MlS36Go2Mn1KlTB7GxMYiNjUFC\nQjwA4OXLdMTGxiAtLU1h2cOHDyInJ0fl290tWzYiJycbLi7ucuG6urpwcuqEhIR4aTtERFR22KWZ\niIiICEB2djaSk5Nw9mwozp4NVYg/dOggDh06iAkT/ovhw33k4vbt2wtNTU18+GEfpet+9iwRwKvv\n8b5O9mY3Pz/vbYtARESvYYOXiIiICK/G2H777XyF8OTkZCxaNB8ODk746KN+aNnSXC7+zp1biI6O\ngrOzC2rVqq103c2aNUd4+DkcOBCCESM+lsLT0tJw+vRJGBnVgJlZ47ItEBERscFLREREBACampoK\nXY4BSLM0m5mZKY3ft28PAOCjjwaoXPeQIcPx998HsGzZUty/Hw1raxukpqYiJGQ3nj9/hsmTp0JD\nQ6OMSkJERDJs8BIRERG9oezsLBw9eggmJvXh4OCoMl2DBqZYuXId1qxZiUuXLuDo0cPQ0dGFubmA\niRM/h7OzawXmmojo/cEGLxEREVERTE0bIjT0otI4HR1d/P33iRKtx8ysEWbNmluGOSMiouJwlmYi\nIiIiIiKqltjgJSIiIiIiomqJXZqJiIiowtQ00oaWrk5lZ4PeQG5WNpLTcio7G0REpcIGLxEREVUY\nLV0dHBg5urKzQW+g959rADZ4iegdwy7NREREREREVC2xwUtERERERETVEhu8REREREREVC2xwUtE\nRERERETVEietqiAhISHYvHkzIiMjUVBQgObNm2PgwIHw8vKCujqfOxAREREREZU1NngrwNy5c7Fp\n0ybo6OjA0dERmpqaCAsLQ2BgIMLCwhAcHMxGLxERERERURljg7ecHTp0CJs2bUK9evWwYcMGNGvW\nDADw7NkzjBw5EkeOHMH69evx8ccfV25GiYiIiIiIqhm+Vixny5cvBwAEBARIjV0AqFu3LubMmQMA\nWLlyJQoKCiohd0RERERERNUXG7zlKCEhATdv3oSWlhZ69eqlEG9vb4/69esjMTERERERlZBDIiIi\n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\n/wcRYQp/wn6a4QAAAABJRU5ErkJggg==\n",
            "text/plain": [
              "<Figure size 1080x576 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "Lxl9eZnpH1fQ",
        "colab_type": "code",
        "outputId": "a71efb57-eaa0-4e11-b8b2-88f4222074fa",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 994
        }
      },
      "source": [
        "df['labels'] = list(zip(df.toxic.tolist(), df.severe_toxic.tolist(), df.obscene.tolist(), df.threat.tolist(),  df.insult.tolist(), df.identity_hate.tolist()))\n",
        "df['text'] = df['comment_text'].apply(lambda x: x.replace('\\n', ' '))\n",
        "\n",
        "df.head(20)"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "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>id</th>\n",
              "      <th>comment_text</th>\n",
              "      <th>toxic</th>\n",
              "      <th>severe_toxic</th>\n",
              "      <th>obscene</th>\n",
              "      <th>threat</th>\n",
              "      <th>insult</th>\n",
              "      <th>identity_hate</th>\n",
              "      <th>labels</th>\n",
              "      <th>text</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>0000997932d777bf</td>\n",
              "      <td>Explanation\\nWhy the edits made under my usern...</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>(0, 0, 0, 0, 0, 0)</td>\n",
              "      <td>Explanation Why the edits made under my userna...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>000103f0d9cfb60f</td>\n",
              "      <td>D'aww! He matches this background colour I'm s...</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>(0, 0, 0, 0, 0, 0)</td>\n",
              "      <td>D'aww! He matches this background colour I'm s...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>000113f07ec002fd</td>\n",
              "      <td>Hey man, I'm really not trying to edit war. It...</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>(0, 0, 0, 0, 0, 0)</td>\n",
              "      <td>Hey man, I'm really not trying to edit war. It...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>0001b41b1c6bb37e</td>\n",
              "      <td>\"\\nMore\\nI can't make any real suggestions on ...</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>(0, 0, 0, 0, 0, 0)</td>\n",
              "      <td>\" More I can't make any real suggestions on im...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>0001d958c54c6e35</td>\n",
              "      <td>You, sir, are my hero. Any chance you remember...</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>(0, 0, 0, 0, 0, 0)</td>\n",
              "      <td>You, sir, are my hero. Any chance you remember...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>5</th>\n",
              "      <td>00025465d4725e87</td>\n",
              "      <td>\"\\n\\nCongratulations from me as well, use the ...</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>(0, 0, 0, 0, 0, 0)</td>\n",
              "      <td>\"  Congratulations from me as well, use the to...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>6</th>\n",
              "      <td>0002bcb3da6cb337</td>\n",
              "      <td>COCKSUCKER BEFORE YOU PISS AROUND ON MY WORK</td>\n",
              "      <td>1</td>\n",
              "      <td>1</td>\n",
              "      <td>1</td>\n",
              "      <td>0</td>\n",
              "      <td>1</td>\n",
              "      <td>0</td>\n",
              "      <td>(1, 1, 1, 0, 1, 0)</td>\n",
              "      <td>COCKSUCKER BEFORE YOU PISS AROUND ON MY WORK</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>7</th>\n",
              "      <td>00031b1e95af7921</td>\n",
              "      <td>Your vandalism to the Matt Shirvington article...</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>(0, 0, 0, 0, 0, 0)</td>\n",
              "      <td>Your vandalism to the Matt Shirvington article...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>8</th>\n",
              "      <td>00037261f536c51d</td>\n",
              "      <td>Sorry if the word 'nonsense' was offensive to ...</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>(0, 0, 0, 0, 0, 0)</td>\n",
              "      <td>Sorry if the word 'nonsense' was offensive to ...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>9</th>\n",
              "      <td>00040093b2687caa</td>\n",
              "      <td>alignment on this subject and which are contra...</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>(0, 0, 0, 0, 0, 0)</td>\n",
              "      <td>alignment on this subject and which are contra...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>10</th>\n",
              "      <td>0005300084f90edc</td>\n",
              "      <td>\"\\nFair use rationale for Image:Wonju.jpg\\n\\nT...</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>(0, 0, 0, 0, 0, 0)</td>\n",
              "      <td>\" Fair use rationale for Image:Wonju.jpg  Than...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>11</th>\n",
              "      <td>00054a5e18b50dd4</td>\n",
              "      <td>bbq \\n\\nbe a man and lets discuss it-maybe ove...</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>(0, 0, 0, 0, 0, 0)</td>\n",
              "      <td>bbq   be a man and lets discuss it-maybe over ...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>12</th>\n",
              "      <td>0005c987bdfc9d4b</td>\n",
              "      <td>Hey... what is it..\\n@ | talk .\\nWhat is it......</td>\n",
              "      <td>1</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>(1, 0, 0, 0, 0, 0)</td>\n",
              "      <td>Hey... what is it.. @ | talk . What is it... a...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>13</th>\n",
              "      <td>0006f16e4e9f292e</td>\n",
              "      <td>Before you start throwing accusations and warn...</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>(0, 0, 0, 0, 0, 0)</td>\n",
              "      <td>Before you start throwing accusations and warn...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>14</th>\n",
              "      <td>00070ef96486d6f9</td>\n",
              "      <td>Oh, and the girl above started her arguments w...</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>(0, 0, 0, 0, 0, 0)</td>\n",
              "      <td>Oh, and the girl above started her arguments w...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>15</th>\n",
              "      <td>00078f8ce7eb276d</td>\n",
              "      <td>\"\\n\\nJuelz Santanas Age\\n\\nIn 2002, Juelz Sant...</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>(0, 0, 0, 0, 0, 0)</td>\n",
              "      <td>\"  Juelz Santanas Age  In 2002, Juelz Santana ...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>16</th>\n",
              "      <td>0007e25b2121310b</td>\n",
              "      <td>Bye! \\n\\nDon't look, come or think of comming ...</td>\n",
              "      <td>1</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>(1, 0, 0, 0, 0, 0)</td>\n",
              "      <td>Bye!   Don't look, come or think of comming ba...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>17</th>\n",
              "      <td>000897889268bc93</td>\n",
              "      <td>REDIRECT Talk:Voydan Pop Georgiev- Chernodrinski</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>(0, 0, 0, 0, 0, 0)</td>\n",
              "      <td>REDIRECT Talk:Voydan Pop Georgiev- Chernodrinski</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>18</th>\n",
              "      <td>0009801bd85e5806</td>\n",
              "      <td>The Mitsurugi point made no sense - why not ar...</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>(0, 0, 0, 0, 0, 0)</td>\n",
              "      <td>The Mitsurugi point made no sense - why not ar...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>19</th>\n",
              "      <td>0009eaea3325de8c</td>\n",
              "      <td>Don't mean to bother you \\n\\nI see that you're...</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>(0, 0, 0, 0, 0, 0)</td>\n",
              "      <td>Don't mean to bother you   I see that you're w...</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>"
            ],
            "text/plain": [
              "                  id  ...                                               text\n",
              "0   0000997932d777bf  ...  Explanation Why the edits made under my userna...\n",
              "1   000103f0d9cfb60f  ...  D'aww! He matches this background colour I'm s...\n",
              "2   000113f07ec002fd  ...  Hey man, I'm really not trying to edit war. It...\n",
              "3   0001b41b1c6bb37e  ...  \" More I can't make any real suggestions on im...\n",
              "4   0001d958c54c6e35  ...  You, sir, are my hero. Any chance you remember...\n",
              "5   00025465d4725e87  ...  \"  Congratulations from me as well, use the to...\n",
              "6   0002bcb3da6cb337  ...       COCKSUCKER BEFORE YOU PISS AROUND ON MY WORK\n",
              "7   00031b1e95af7921  ...  Your vandalism to the Matt Shirvington article...\n",
              "8   00037261f536c51d  ...  Sorry if the word 'nonsense' was offensive to ...\n",
              "9   00040093b2687caa  ...  alignment on this subject and which are contra...\n",
              "10  0005300084f90edc  ...  \" Fair use rationale for Image:Wonju.jpg  Than...\n",
              "11  00054a5e18b50dd4  ...  bbq   be a man and lets discuss it-maybe over ...\n",
              "12  0005c987bdfc9d4b  ...  Hey... what is it.. @ | talk . What is it... a...\n",
              "13  0006f16e4e9f292e  ...  Before you start throwing accusations and warn...\n",
              "14  00070ef96486d6f9  ...  Oh, and the girl above started her arguments w...\n",
              "15  00078f8ce7eb276d  ...  \"  Juelz Santanas Age  In 2002, Juelz Santana ...\n",
              "16  0007e25b2121310b  ...  Bye!   Don't look, come or think of comming ba...\n",
              "17  000897889268bc93  ...   REDIRECT Talk:Voydan Pop Georgiev- Chernodrinski\n",
              "18  0009801bd85e5806  ...  The Mitsurugi point made no sense - why not ar...\n",
              "19  0009eaea3325de8c  ...  Don't mean to bother you   I see that you're w...\n",
              "\n",
              "[20 rows x 10 columns]"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 16
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "ws-XQLVh_1xu",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "train_df, eval_df = train_test_split(df, test_size=0.2)"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "kc5-mdSRPh-S",
        "colab_type": "code",
        "outputId": "a222612e-cc1a-4157-e821-a4249a47df45",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 35
        }
      },
      "source": [
        "try:\n",
        "  # %tensorflow_version only exists in Colab.\n",
        "  %tensorflow_version 2.x\n",
        "except Exception:\n",
        "  pass\n",
        "\n",
        "!pip install -U tensorboard >piplog 2>&1"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "TensorFlow is already loaded. Please restart the runtime to change versions.\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "fNUprAdbAE9E",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "LABELS = 6\n",
        "BATCH_SIZE = 2\n",
        "TRAIN_EPOCHS = 3\n",
        "MAX_SEQ_LEN = 512"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "ht58BnXmAVn7",
        "colab_type": "code",
        "outputId": "6b749bc1-7d2e-42ae-c5f1-b7db30ba471b",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 90
        }
      },
      "source": [
        "model = MultiLabelClassificationModel('roberta', 'roberta-base', num_labels=LABELS, args={'train_batch_size':BATCH_SIZE, 'gradient_accumulation_steps':16, 'learning_rate': 3e-5, 'num_train_epochs': TRAIN_EPOCHS, 'max_seq_length': MAX_SEQ_LEN})"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "100%|██████████| 898823/898823 [00:00<00:00, 1677635.37B/s]\n",
            "100%|██████████| 456318/456318 [00:00<00:00, 1277182.00B/s]\n",
            "100%|██████████| 473/473 [00:00<00:00, 144043.11B/s]\n",
            "100%|██████████| 501200538/501200538 [00:17<00:00, 28348011.20B/s]\n"
          ],
          "name": "stderr"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "vr6WqRxPB4gt",
        "colab_type": "code",
        "outputId": "a00851f0-802d-4ba7-91c7-e756c51456c4",
        "colab": {
          "resources": {
            "http://localhost:8080/nbextensions/google.colab/colabwidgets/controls.css": {
              "data": "[encoded data, 167132 characters]",
              "ok": true,
              "headers": [
                [
                  "content-type",
                  "text/css"
                ]
              ],
              "status": 200,
              "status_text": ""
            }
          },
          "base_uri": "https://localhost:8080/",
          "height": 254
        }
      },
      "source": [
        "%time model.train_model(train_df)"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Features loaded from cache at cache_dir/cached_train_roberta_512_binary\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "application/vnd.jupyter.widget-view+json": {
              "model_id": "b116a5fb7c5a4c9ba877c34525929f91",
              "version_minor": 0,
              "version_major": 2
            },
            "text/plain": [
              "HBox(children=(IntProgress(value=0, description='Epoch', max=3, style=ProgressStyle(description_width='initial…"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "application/vnd.jupyter.widget-view+json": {
              "model_id": "b89e4c953c934d2297158169e166053b",
              "version_minor": 0,
              "version_major": 2
            },
            "text/plain": [
              "HBox(children=(IntProgress(value=0, description='Current iteration', max=63828, style=ProgressStyle(descriptio…"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "stream",
          "text": [
            "Running loss: 0.039481"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "application/vnd.jupyter.widget-view+json": {
              "model_id": "21bd84e23a12488a898d57c8cc87d151",
              "version_minor": 0,
              "version_major": 2
            },
            "text/plain": [
              "HBox(children=(IntProgress(value=0, description='Current iteration', max=63828, style=ProgressStyle(descriptio…"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "stream",
          "text": [
            "Running loss: 0.009909"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "application/vnd.jupyter.widget-view+json": {
              "model_id": "fe1c5990555e4d43a6a4a76ad6635e1f",
              "version_minor": 0,
              "version_major": 2
            },
            "text/plain": [
              "HBox(children=(IntProgress(value=0, description='Current iteration', max=63828, style=ProgressStyle(descriptio…"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "stream",
          "text": [
            "Running loss: 0.300623Training of roberta model complete. Saved to outputs/.\n",
            "CPU times: user 5h 22min 5s, sys: 2h 6min 1s, total: 7h 28min 6s\n",
            "Wall time: 7h 35min 59s\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "WoyGxqhdCHOq",
        "colab_type": "code",
        "outputId": "44a3f154-f133-4841-e162-ad5fbd3b81cb",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 35
        }
      },
      "source": [
        "result, model_outputs, wrong_predictions = model.eval_model(eval_df)"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Converting to features started.\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "application/vnd.jupyter.widget-view+json": {
              "model_id": "f519ba37de504fb2aac79f0f52a0b96a",
              "version_minor": 0,
              "version_major": 2
            },
            "text/plain": [
              "HBox(children=(IntProgress(value=0, max=31915), HTML(value='')))"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "application/vnd.jupyter.widget-view+json": {
              "model_id": "442d8c168b1b4cfdb55560146f141b2c",
              "version_minor": 0,
              "version_major": 2
            },
            "text/plain": [
              "HBox(children=(IntProgress(value=0, max=3990), HTML(value='')))"
            ]
          },
          "metadata": {
            "tags": []
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "z9YqgZLL_jND",
        "colab_type": "code",
        "outputId": "763f90d9-c161-4f46-c0dc-4e20d83d9de9",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 35
        }
      },
      "source": [
        "result"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "{'LRAP': 0.9963951729420162, 'eval_loss': 0.038346445133354785}"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 26
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "sQP38fbU_vuN",
        "colab_type": "code",
        "outputId": "7b4cbc60-5383-488c-8e51-7fcbfab58d6c",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 254
        }
      },
      "source": [
        "model_outputs"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "array([[3.52941424e-04, 1.01941114e-04, 1.35820534e-04, 7.63346252e-05,\n",
              "        1.63937031e-04, 9.23321568e-05],\n",
              "       [3.01254448e-04, 1.16612813e-04, 1.33582318e-04, 8.97430655e-05,\n",
              "        1.74120461e-04, 1.06487845e-04],\n",
              "       [2.96371902e-04, 1.16844225e-04, 1.41191864e-04, 8.92457974e-05,\n",
              "        1.76046960e-04, 1.05648862e-04],\n",
              "       ...,\n",
              "       [3.19540966e-04, 1.10628374e-04, 1.38251984e-04, 8.37866028e-05,\n",
              "        1.65511461e-04, 1.00111247e-04],\n",
              "       [2.87870498e-04, 1.23055361e-04, 1.38322663e-04, 9.39216261e-05,\n",
              "        1.75944762e-04, 1.07437940e-04],\n",
              "       [2.89761927e-04, 1.21842553e-04, 1.42827907e-04, 9.19385566e-05,\n",
              "        1.74931396e-04, 1.05993269e-04]], dtype=float32)"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 27
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "gDA1AbI0_0Lc",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "wrong_predictions"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "FFk1s7oOAQW7",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "test_df = pd.read_csv(DATA_PATH + 'test.csv')"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "gyT2kzm8Ad4r",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "to_predict = test_df.comment_text.apply(lambda x: x.replace('\\n', ' ')).tolist()"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "63PriSNAAkmR",
        "colab_type": "code",
        "outputId": "f7b7a87d-afaa-4094-d115-dc728137cd28",
        "colab": {
          "resources": {
            "http://localhost:8080/nbextensions/google.colab/colabwidgets/controls.css": {
              "data": "[encoded data, 167132 characters]",
              "ok": true,
              "headers": [
                [
                  "content-type",
                  "text/css"
                ]
              ],
              "status": 200,
              "status_text": ""
            }
          },
          "base_uri": "https://localhost:8080/",
          "height": 99
        }
      },
      "source": [
        "preds, outputs = model.predict(to_predict)"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Converting to features started.\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "application/vnd.jupyter.widget-view+json": {
              "model_id": "c2656b7518f848b59442f64c54616272",
              "version_minor": 0,
              "version_major": 2
            },
            "text/plain": [
              "HBox(children=(IntProgress(value=0, max=153164), HTML(value='')))"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "application/vnd.jupyter.widget-view+json": {
              "model_id": "8820e3ad1f994ce1bc36f9dc5f7ff799",
              "version_minor": 0,
              "version_major": 2
            },
            "text/plain": [
              "HBox(children=(IntProgress(value=0, max=19146), HTML(value='')))"
            ]
          },
          "metadata": {
            "tags": []
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "ROVLipmoNaLs",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "preds"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "3Qg3CSgxNfRa",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "sub_df = pd.DataFrame(outputs, columns=['toxic','severe_toxic','obscene','threat','insult','identity_hate'])"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "Nra6ggefNiBi",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "sub_df['id'] = test_df['id']\n",
        "sub_df = sub_df[['id', 'toxic','severe_toxic','obscene','threat','insult','identity_hate']]"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "AIPY2AfWNzLd",
        "colab_type": "code",
        "outputId": "067ca0a1-724e-4356-a747-0354dc8feb9e",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 198
        }
      },
      "source": [
        "sub_df.head()"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "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>id</th>\n",
              "      <th>toxic</th>\n",
              "      <th>severe_toxic</th>\n",
              "      <th>obscene</th>\n",
              "      <th>threat</th>\n",
              "      <th>insult</th>\n",
              "      <th>identity_hate</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>00001cee341fdb12</td>\n",
              "      <td>0.997462</td>\n",
              "      <td>0.324958</td>\n",
              "      <td>0.989660</td>\n",
              "      <td>0.086769</td>\n",
              "      <td>0.969285</td>\n",
              "      <td>0.521797</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>0000247867823ef7</td>\n",
              "      <td>0.000332</td>\n",
              "      <td>0.000106</td>\n",
              "      <td>0.000138</td>\n",
              "      <td>0.000080</td>\n",
              "      <td>0.000166</td>\n",
              "      <td>0.000096</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>00013b17ad220c46</td>\n",
              "      <td>0.000337</td>\n",
              "      <td>0.000107</td>\n",
              "      <td>0.000144</td>\n",
              "      <td>0.000079</td>\n",
              "      <td>0.000162</td>\n",
              "      <td>0.000093</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>00017563c3f7919a</td>\n",
              "      <td>0.000285</td>\n",
              "      <td>0.000124</td>\n",
              "      <td>0.000144</td>\n",
              "      <td>0.000092</td>\n",
              "      <td>0.000178</td>\n",
              "      <td>0.000109</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>00017695ad8997eb</td>\n",
              "      <td>0.000359</td>\n",
              "      <td>0.000106</td>\n",
              "      <td>0.000122</td>\n",
              "      <td>0.000084</td>\n",
              "      <td>0.000161</td>\n",
              "      <td>0.000099</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>"
            ],
            "text/plain": [
              "                 id     toxic  severe_toxic  ...    threat    insult  identity_hate\n",
              "0  00001cee341fdb12  0.997462      0.324958  ...  0.086769  0.969285       0.521797\n",
              "1  0000247867823ef7  0.000332      0.000106  ...  0.000080  0.000166       0.000096\n",
              "2  00013b17ad220c46  0.000337      0.000107  ...  0.000079  0.000162       0.000093\n",
              "3  00017563c3f7919a  0.000285      0.000124  ...  0.000092  0.000178       0.000109\n",
              "4  00017695ad8997eb  0.000359      0.000106  ...  0.000084  0.000161       0.000099\n",
              "\n",
              "[5 rows x 7 columns]"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 36
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "XiE6o7cxN9bK",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "sub_df.to_csv('./submission.csv', index=False)"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "qzNglsp0OKTm",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "!mkdir -p ~/.kaggle\n",
        "!cp kaggle.json ~/.kaggle/"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "XpiWn1koOayB",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "!pip install kaggle"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "J033FWZbOiCf",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "!chmod 600 /root/.kaggle/kaggle.json"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "Zuyt_3G0Okb0",
        "colab_type": "code",
        "outputId": "dae0f44d-ac08-4ef0-dc3f-55c4d5829e18",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 72
        }
      },
      "source": [
        "!kaggle competitions submit -c jigsaw-toxic-comment-classification-challenge -f submission.csv -m \"My first submission\""
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Warning: Looks like you're using an outdated API Version, please consider updating (server 1.5.6 / client 1.5.4)\n",
            "100% 13.9M/13.9M [00:04<00:00, 3.12MB/s]\n",
            "Successfully submitted to Toxic Comment Classification Challenge"
          ],
          "name": "stdout"
        }
      ]
    }
  ]
}