{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.12.12","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"nvidiaTeslaT4","dataSources":[{"sourceType":"competition","sourceId":10737,"databundleVersionId":290346}],"dockerImageVersionId":31287,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import pandas as pd\nfrom torch.utils.data import Dataset, DataLoader\nfrom sklearn.model_selection import train_test_split\nfrom transformers import (\n    AutoTokenizer,\n    AutoModelForSequenceClassification,\n    Trainer,\n    TrainingArguments\n)\nimport torch","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"execution":{"iopub.status.busy":"2026-03-16T08:53:36.297977Z","iopub.execute_input":"2026-03-16T08:53:36.298176Z","iopub.status.idle":"2026-03-16T08:54:13.268083Z","shell.execute_reply.started":"2026-03-16T08:53:36.298155Z","shell.execute_reply":"2026-03-16T08:54:13.267466Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train = pd.read_csv('/kaggle/input/competitions/quora-insincere-questions-classification/train.csv')\ntest = pd.read_csv('/kaggle/input/competitions/quora-insincere-questions-classification/test.csv')\nsample_subm = pd.read_csv('/kaggle/input/competitions/quora-insincere-questions-classification/sample_submission.csv')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-03-16T08:54:13.268914Z","iopub.execute_input":"2026-03-16T08:54:13.269428Z","iopub.status.idle":"2026-03-16T08:54:18.009984Z","shell.execute_reply.started":"2026-03-16T08:54:13.269401Z","shell.execute_reply":"2026-03-16T08:54:18.009140Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train[train.target == 1]","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-03-16T08:54:18.011702Z","iopub.execute_input":"2026-03-16T08:54:18.011967Z","iopub.status.idle":"2026-03-16T08:54:18.077749Z","shell.execute_reply.started":"2026-03-16T08:54:18.011944Z","shell.execute_reply":"2026-03-16T08:54:18.077148Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"class MyDataset(Dataset):\n    def __init__(self, texts, labels, tokenizer, max_len=64):\n        self.texts = texts.tolist() if isinstance(texts, pd.Series) else texts\n        self.labels = labels.tolist() if isinstance(labels, pd.Series) else labels\n        self.max_len  = max_len\n        self.tokenizer = tokenizer\n\n    def __len__(self):\n        return len(self.texts)\n\n    def __getitem__(self, idx):\n        text = str(self.texts[idx])\n\n        emb = self.tokenizer(\n            text,\n            truncation=True,\n            padding='max_length',\n            max_length=self.max_len,\n            return_tensors='pt'\n        )\n\n        item = {\n            'input_ids': emb['input_ids'].squeeze(0),\n            'attention_mask': emb['attention_mask'].squeeze(0)\n        }\n        if self.labels:\n            item['labels'] = self.labels[idx]\n        return item","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-03-16T08:54:18.078702Z","iopub.execute_input":"2026-03-16T08:54:18.078980Z","iopub.status.idle":"2026-03-16T08:54:18.084911Z","shell.execute_reply.started":"2026-03-16T08:54:18.078956Z","shell.execute_reply":"2026-03-16T08:54:18.084370Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"X = train['question_text']\ny = train['target']\nX_train, X_val, y_train, y_val = train_test_split(X, y, stratify=y, test_size=0.2)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-03-16T08:54:18.085674Z","iopub.execute_input":"2026-03-16T08:54:18.085925Z","iopub.status.idle":"2026-03-16T08:54:18.848366Z","shell.execute_reply.started":"2026-03-16T08:54:18.085902Z","shell.execute_reply":"2026-03-16T08:54:18.847476Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"tokenizer = AutoTokenizer.from_pretrained('distilbert-base-uncased')\nmodel = AutoModelForSequenceClassification.from_pretrained('distilbert-base-uncased', num_labels=2)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-03-16T08:54:18.849393Z","iopub.execute_input":"2026-03-16T08:54:18.849672Z","iopub.status.idle":"2026-03-16T08:54:22.302218Z","shell.execute_reply.started":"2026-03-16T08:54:18.849647Z","shell.execute_reply":"2026-03-16T08:54:22.301463Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train_loader = MyDataset(X_train, y_train, tokenizer)\nval_loader = MyDataset(X_val, y_val, tokenizer)\ntest_loader = MyDataset(test['question_text'], labels=None, tokenizer=tokenizer)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-03-16T08:54:22.303144Z","iopub.execute_input":"2026-03-16T08:54:22.303825Z","iopub.status.idle":"2026-03-16T08:54:22.391102Z","shell.execute_reply.started":"2026-03-16T08:54:22.303792Z","shell.execute_reply":"2026-03-16T08:54:22.390270Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"args = TrainingArguments(\n    output_dir='./results',\n    num_train_epochs=1,\n    per_device_train_batch_size=128,\n    per_device_eval_batch_size=128,\n    fp16=True,\n    report_to='none',\n    save_strategy='no',\n    logging_steps=100,\n    dataloader_num_workers=4\n)\n\ntrainer = Trainer(\n    args=args,\n    model=model,\n    train_dataset=train_loader,\n    eval_dataset=val_loader\n)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-03-16T08:54:22.392045Z","iopub.execute_input":"2026-03-16T08:54:22.392325Z","iopub.status.idle":"2026-03-16T08:54:22.862395Z","shell.execute_reply.started":"2026-03-16T08:54:22.392278Z","shell.execute_reply":"2026-03-16T08:54:22.861812Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"trainer.train()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-03-16T08:54:22.864114Z","iopub.execute_input":"2026-03-16T08:54:22.864372Z","iopub.status.idle":"2026-03-16T09:40:35.971402Z","shell.execute_reply.started":"2026-03-16T08:54:22.864348Z","shell.execute_reply":"2026-03-16T09:40:35.970763Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"logits = trainer.predict(test_loader).predictions\nprobs = torch.sigmoid(torch.tensor(logits)).numpy()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-03-16T09:57:00.477773Z","iopub.execute_input":"2026-03-16T09:57:00.478066Z","iopub.status.idle":"2026-03-16T10:03:05.260399Z","shell.execute_reply.started":"2026-03-16T09:57:00.478040Z","shell.execute_reply":"2026-03-16T10:03:05.259274Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import numpy as np\npreds = np.argmax(logits, axis=1)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-03-16T10:05:58.558942Z","iopub.execute_input":"2026-03-16T10:05:58.559230Z","iopub.status.idle":"2026-03-16T10:05:58.567601Z","shell.execute_reply.started":"2026-03-16T10:05:58.559203Z","shell.execute_reply":"2026-03-16T10:05:58.566862Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# ==========================================  \n# 7. СОХРАНЕНИЕ РЕЗУЛЬТАТА (SUBMISSION)  \n# ==========================================  \nsample_subm['target'] = preds  \nsample_subm.to_csv('submission.csv', index=False)  \nprint(sample_subm.head())","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-03-16T10:06:06.694344Z","iopub.execute_input":"2026-03-16T10:06:06.694650Z","iopub.status.idle":"2026-03-16T10:06:07.129732Z","shell.execute_reply.started":"2026-03-16T10:06:06.694615Z","shell.execute_reply":"2026-03-16T10:06:07.129073Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null}]}