{"cells":[{"metadata":{"trusted":true},"cell_type":"code","source":"import numpy as np\nimport pandas as pd\n\nfrom pathlib import Path\nfrom typing import *\n\nimport torch\nimport torch.optim as optim\n\nfrom fastai import *\nfrom fastai.vision import *\nfrom fastai.text import *\nfrom fastai.callbacks import *\n\nimport warnings\n\nwarnings.filterwarnings(\"ignore\")\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"class Config(dict):\n    def __init__(self, **kwargs):\n        super().__init__(**kwargs)\n        for k, v in kwargs.items():\n            setattr(self, k, v)\n    \n    def set(self, key, val):\n        self[key] = val\n        setattr(self, key, val)\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"config = Config(\n    testing=False,\n    #bert_model_name=\"bert-base-uncased\",\n    bert_model_name=\"bert-base-multilingual-uncased\",\n    \n    max_lr=3e-5,\n    epochs=4,\n    use_fp16=True,\n    bs=32,\n    discriminative=False,\n    max_seq_len=256,\n)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from pytorch_pretrained_bert import BertTokenizer\nbert_tok = BertTokenizer.from_pretrained(\n    config.bert_model_name,\n)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"class FastAiBertTokenizer(BaseTokenizer):\n    \"\"\"Wrapper around BertTokenizer to be compatible with fast.ai\"\"\"\n    def __init__(self, tokenizer: BertTokenizer, max_seq_len: int=128, **kwargs):\n        self._pretrained_tokenizer = tokenizer\n        self.max_seq_len = max_seq_len\n\n    def __call__(self, *args, **kwargs):\n        return self\n\n    def tokenizer(self, t:str) -> List[str]:\n        \"\"\"Limits the maximum sequence length\"\"\"\n        return [\"[CLS]\"] + self._pretrained_tokenizer.tokenize(t)[:self.max_seq_len - 2] + [\"[SEP]\"]","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"cell_type":"code","source":"import os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"DATA_ROOT = Path(\"..\")/\"input\"/ \"jigsaw-multilingual-toxic-comment-classification/\"\n\ndf1,df2,df3,test,sample = [pd.read_csv(DATA_ROOT / fname) for fname in [\"jigsaw-toxic-comment-train.csv\",\n                                                                        \"jigsaw-unintended-bias-train.csv\",\n                                                                        \"validation.csv\",\n                                                                        \"test.csv\",\n                                                                        \"sample_submission.csv\"\n                                                                       ]]\ndf2.toxic = df2.toxic.round().astype(int)\ntrain = pd.concat([\n    df1[['comment_text', 'toxic']],\n    df2[['comment_text', 'toxic']].query('toxic==1'),\n    df2[['comment_text', 'toxic']].query('toxic==0').sample(n=200000, random_state=0)\n])\n\n# rankings_pd.rename(columns = {'test':'TEST', 'odi':'ODI', \n#                               't20':'T20'}, inplace = True) \ntest.rename(columns={\"content\":\"comment_text\"}, inplace = True)\n\nval = df3","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"test.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"if config.testing:\n    train = train.head(1024)\n    val = val.head(1024)\n    test = test.head(1024)\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"fastai_bert_vocab = Vocab(list(bert_tok.vocab.keys()))\nfastai_tokenizer = Tokenizer(tok_func=FastAiBertTokenizer(bert_tok, \n                                                          max_seq_len=config.max_seq_len), pre_rules=[], post_rules=[])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"databunch = TextDataBunch.from_df(\".\", train, val, test,\n                  tokenizer=fastai_tokenizer,\n                  vocab=fastai_bert_vocab,\n                  include_bos=False,\n                  include_eos=False,\n                  text_cols=\"comment_text\",\n                  label_cols=\"toxic\",\n                  bs=config.bs,\n                  collate_fn=partial(pad_collate, pad_first=False, pad_idx=0),\n             )","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"databunch.show_batch(10)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"**Save the Prepare DataBunch **"},{"metadata":{"trusted":true},"cell_type":"code","source":"databunch.save(file = Path(\"data-jigsaw.pkl\"))","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"**Load the DataBunch**"},{"metadata":{"trusted":true},"cell_type":"code","source":"test = load_data(path=\"/kaggle/working/\", file = Path(\"data-jigsaw.pkl\"))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"test.show_batch()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"**Get the Download Link**"},{"metadata":{"trusted":true},"cell_type":"code","source":"os.chdir(r'/kaggle/working/')\nfrom IPython.display import FileLink\nFileLink(r'data-jigsaw.pkl')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat":4,"nbformat_minor":4}