{ "cells": [ { "cell_type": "code", "execution_count": 12, "id": "45a0207c-925b-4680-8e97-a10960ade737", "metadata": { "execution": { "iopub.execute_input": "2025-04-08T10:24:11.581467Z", "iopub.status.busy": "2025-04-08T10:24:11.580094Z", "iopub.status.idle": "2025-04-08T10:24:15.120464Z", "shell.execute_reply": "2025-04-08T10:24:15.119371Z", "shell.execute_reply.started": "2025-04-08T10:24:11.581416Z" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Defaulting to user installation because normal site-packages is not writeable\n", "Requirement already satisfied: kaggle in /usr/local/lib/python3.10/dist-packages (1.5.16)\n", "Requirement already satisfied: six>=1.10 in /usr/lib/python3/dist-packages (from kaggle) (1.16.0)\n", "Requirement already satisfied: certifi in /usr/local/lib/python3.10/dist-packages (from kaggle) (2023.7.22)\n", "Requirement already satisfied: python-dateutil in /usr/local/lib/python3.10/dist-packages (from kaggle) (2.8.2)\n", "Requirement already satisfied: requests in /home/jupyter/.local/lib/python3.10/site-packages (from kaggle) (2.32.3)\n", "Requirement already satisfied: tqdm in /home/jupyter/.local/lib/python3.10/site-packages (from kaggle) (4.67.1)\n", "Requirement already satisfied: python-slugify in /usr/local/lib/python3.10/dist-packages (from kaggle) (8.0.1)\n", "Requirement already satisfied: urllib3 in /usr/local/lib/python3.10/dist-packages (from kaggle) (1.26.16)\n", "Requirement already satisfied: bleach in /usr/local/lib/python3.10/dist-packages (from kaggle) (6.0.0)\n", "Requirement already satisfied: webencodings in /usr/local/lib/python3.10/dist-packages (from bleach->kaggle) (0.5.1)\n", "Requirement already satisfied: text-unidecode>=1.3 in /usr/local/lib/python3.10/dist-packages (from python-slugify->kaggle) (1.3)\n", "Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests->kaggle) (2.0.12)\n", "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests->kaggle) (3.4)\n", "\n", "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m23.0.1\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m25.0.1\u001b[0m\n", "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpython3 -m pip install --upgrade pip\u001b[0m\n" ] } ], "source": [ "# pip install kaggle" ] }, { "cell_type": "code", "execution_count": 1, "id": "ec6b0b5e-0b4a-414b-8ce2-e5d77d22b0e6", "metadata": { "execution": { "iopub.execute_input": "2025-04-10T10:10:38.319843Z", "iopub.status.busy": "2025-04-10T10:10:38.319090Z", "iopub.status.idle": "2025-04-10T10:11:56.639570Z", "shell.execute_reply": "2025-04-10T10:11:56.638676Z", "shell.execute_reply.started": "2025-04-10T10:10:38.319807Z" }, "tags": [] }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/jupyter/.local/lib/python3.10/site-packages/transformers/utils/hub.py:105: FutureWarning: Using `TRANSFORMERS_CACHE` is deprecated and will be removed in v5 of Transformers. Use `HF_HOME` instead.\n", " warnings.warn(\n", "/usr/local/lib/python3.10/dist-packages/torchvision/io/image.py:13: UserWarning: Failed to load image Python extension: '/usr/local/lib/python3.10/dist-packages/torchvision/image.so: undefined symbol: _ZN3c1017RegisterOperatorsD1Ev'If you don't plan on using image functionality from `torchvision.io`, you can ignore this warning. Otherwise, there might be something wrong with your environment. Did you have `libjpeg` or `libpng` installed before building `torchvision` from source?\n", " warn(\n", "2025-04-10 10:11:09.359041: I tensorflow/core/util/port.cc:153] oneDNN custom operations are on. You may see slightly different numerical results due to floating-point round-off errors from different computation orders. To turn them off, set the environment variable `TF_ENABLE_ONEDNN_OPTS=0`.\n", "2025-04-10 10:11:13.083242: E external/local_xla/xla/stream_executor/cuda/cuda_fft.cc:467] Unable to register cuFFT factory: Attempting to register factory for plugin cuFFT when one has already been registered\n", "WARNING: All log messages before absl::InitializeLog() is called are written to STDERR\n", "E0000 00:00:1744279874.875999 3402 cuda_dnn.cc:8579] Unable to register cuDNN factory: Attempting to register factory for plugin cuDNN when one has already been registered\n", "E0000 00:00:1744279875.404529 3402 cuda_blas.cc:1407] Unable to register cuBLAS factory: Attempting to register factory for plugin cuBLAS when one has already been registered\n", "W0000 00:00:1744279879.393200 3402 computation_placer.cc:177] computation placer already registered. Please check linkage and avoid linking the same target more than once.\n", "W0000 00:00:1744279879.393256 3402 computation_placer.cc:177] computation placer already registered. Please check linkage and avoid linking the same target more than once.\n", "W0000 00:00:1744279879.393259 3402 computation_placer.cc:177] computation placer already registered. Please check linkage and avoid linking the same target more than once.\n", "W0000 00:00:1744279879.393262 3402 computation_placer.cc:177] computation placer already registered. Please check linkage and avoid linking the same target more than once.\n", "2025-04-10 10:11:19.630625: I tensorflow/core/platform/cpu_feature_guard.cc:210] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.\n", "To enable the following instructions: AVX2 AVX512F AVX512_VNNI FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.\n", "/usr/local/lib/python3.10/dist-packages/torchvision/datapoints/__init__.py:12: UserWarning: The torchvision.datapoints and torchvision.transforms.v2 namespaces are still Beta. While we do not expect major breaking changes, some APIs may still change according to user feedback. Please submit any feedback you may have in this issue: https://github.com/pytorch/vision/issues/6753, and you can also check out https://github.com/pytorch/vision/issues/7319 to learn more about the APIs that we suspect might involve future changes. You can silence this warning by calling torchvision.disable_beta_transforms_warning().\n", " warnings.warn(_BETA_TRANSFORMS_WARNING)\n", "/usr/local/lib/python3.10/dist-packages/torchvision/transforms/v2/__init__.py:54: UserWarning: The torchvision.datapoints and torchvision.transforms.v2 namespaces are still Beta. While we do not expect major breaking changes, some APIs may still change according to user feedback. Please submit any feedback you may have in this issue: https://github.com/pytorch/vision/issues/6753, and you can also check out https://github.com/pytorch/vision/issues/7319 to learn more about the APIs that we suspect might involve future changes. You can silence this warning by calling torchvision.disable_beta_transforms_warning().\n", " warnings.warn(_BETA_TRANSFORMS_WARNING)\n" ] } ], "source": [ "from transformers import pipeline\n", "import json\n", "import pandas as pd\n", "from sklearn.model_selection import train_test_split\n", "from transformers import DistilBertTokenizer\n", "from tqdm import tqdm\n", "import re\n", "from datasets import Dataset\n", "from transformers import AutoModelForSequenceClassification\n", "import torch\n", "import numpy as np\n", "from typing import Dict\n", "from transformers import AutoModel\n", "from torch.nn import BCEWithLogitsLoss\n", "from typing import List\n", "from transformers import TrainingArguments, Trainer\n", "from collections import defaultdict\n", "\n", "from transformers import __version__ as transformers_version" ] }, { "cell_type": "code", "execution_count": 2, "id": "053ad8a2-e87c-4bd2-bc57-273d200c97a4", "metadata": { "execution": { "iopub.execute_input": "2025-04-10T10:11:56.641992Z", "iopub.status.busy": "2025-04-10T10:11:56.641095Z", "iopub.status.idle": "2025-04-10T10:11:56.745161Z", "shell.execute_reply": "2025-04-10T10:11:56.744277Z", "shell.execute_reply.started": "2025-04-10T10:11:56.641954Z" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "cpu\n" ] } ], "source": [ "device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n", "print(device)\n", "model = \"distilbert-base-cased\"" ] }, { "cell_type": "markdown", "id": "f92d06f0-00c2-4784-967b-37904078db59", "metadata": {}, "source": [ "***Скачивание и обработка данных***" ] }, { "cell_type": "code", "execution_count": 3, "id": "28489e2a-e3fc-43db-ab6c-52fd937453b1", "metadata": { "execution": { "iopub.execute_input": "2025-04-10T10:11:56.747131Z", "iopub.status.busy": "2025-04-10T10:11:56.746233Z", "iopub.status.idle": "2025-04-10T10:11:59.650148Z", "shell.execute_reply": "2025-04-10T10:11:59.649268Z", "shell.execute_reply.started": "2025-04-10T10:11:56.747093Z" }, "tags": [] }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/tmp/ipykernel_3402/637306215.py:8: DeprecationWarning: load_dataset is deprecated and will be removed in future version.\n", " df = kagglehub.load_dataset(\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "Index(['author', 'day', 'id', 'link', 'month', 'summary', 'tag', 'title',\n", " 'year'],\n", " dtype='object')\n" ] } ], "source": [ "import kagglehub\n", "from kagglehub import KaggleDatasetAdapter\n", "\n", "# Set the path to the file you'd like to load\n", "file_path = \"arxivData.json\"\n", "\n", "# Load the latest version\n", "df = kagglehub.load_dataset(\n", " KaggleDatasetAdapter.PANDAS,\n", " \"neelshah18/arxivdataset\",\n", " file_path,\n", ")\n", "\n", "print(df.head)\n", "print(df.columns)" ] }, { "cell_type": "code", "execution_count": 4, "id": "bb24e6b3-09cb-4498-a387-edb57d17e11a", "metadata": { "execution": { "iopub.execute_input": "2025-04-10T10:11:59.652894Z", "iopub.status.busy": "2025-04-10T10:11:59.652256Z", "iopub.status.idle": "2025-04-10T10:11:59.727485Z", "shell.execute_reply": "2025-04-10T10:11:59.726475Z", "shell.execute_reply.started": "2025-04-10T10:11:59.652852Z" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "155\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
tagtopiccategory
0cs.AIArtificial IntelligenceComputer Science
1cs.ARHardware ArchitectureComputer Science
2cs.CCComputational ComplexityComputer Science
3cs.CEComputational Engineering, Finance, and ScienceComputer Science
4cs.CGComputational GeometryComputer Science
\n", "
" ], "text/plain": [ " tag topic category\n", "0 cs.AI Artificial Intelligence Computer Science\n", "1 cs.AR Hardware Architecture Computer Science\n", "2 cs.CC Computational Complexity Computer Science\n", "3 cs.CE Computational Engineering, Finance, and Science Computer Science\n", "4 cs.CG Computational Geometry Computer Science" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "arxiv_topics_df = pd.read_csv('arxiv_topics.csv')\n", "print(len(arxiv_topics_df))\n", "arxiv_topics_df.head(5)" ] }, { "cell_type": "code", "execution_count": 5, "id": "ec103ec9-db89-4b69-999a-d986a38a1a51", "metadata": { "execution": { "iopub.execute_input": "2025-04-10T10:11:59.730334Z", "iopub.status.busy": "2025-04-10T10:11:59.728675Z", "iopub.status.idle": "2025-04-10T10:11:59.746729Z", "shell.execute_reply": "2025-04-10T10:11:59.745830Z", "shell.execute_reply.started": "2025-04-10T10:11:59.730286Z" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['cs.AI' 'cs.AR' 'cs.CC' 'cs.CE' 'cs.CG' 'cs.CL' 'cs.CR' 'cs.CV' 'cs.CY'\n", " 'cs.DB' 'cs.DC' 'cs.DL' 'cs.DM' 'cs.DS' 'cs.ET' 'cs.FL' 'cs.GL' 'cs.GR'\n", " 'cs.GT' 'cs.HC' 'cs.IR' 'cs.IT' 'cs.LG' 'cs.LO' 'cs.MA' 'cs.MM' 'cs.MS'\n", " 'cs.NA' 'cs.NE' 'cs.NI' 'cs.OH' 'cs.OS' 'cs.PF' 'cs.PL' 'cs.RO' 'cs.SC'\n", " 'cs.SD' 'cs.SE' 'cs.SI' 'cs.SY' 'econ.EM' 'econ.GN' 'econ.TH' 'eess.AS'\n", " 'eess.IV' 'eess.SP' 'eess.SY' 'math.AC' 'math.AG' 'math.AP' 'math.AT'\n", " 'math.CA' 'math.CO' 'math.CT' 'math.CV' 'math.DG' 'math.DS' 'math.FA'\n", " 'math.GM' 'math.GN' 'math.GR' 'math.GT' 'math.HO' 'math.IT' 'math.KT'\n", " 'math.LO' 'math.MG' 'math.MP' 'math.NA' 'math.NT' 'math.OA' 'math.OC'\n", " 'math.PR' 'math.QA' 'math.RA' 'math.RT' 'math.SG' 'math.SP' 'math.ST'\n", " 'astro-ph.CO' 'astro-ph.EP' 'astro-ph.GA' 'astro-ph.HE' 'astro-ph.IM'\n", " 'astro-ph.SR' 'cond-mat.dis-nn' 'cond-mat.mes-hall' 'cond-mat.mtrl-sci'\n", " 'cond-mat.other' 'cond-mat.quant-gas' 'cond-mat.soft'\n", " 'cond-mat.stat-mech' 'cond-mat.str-el' 'cond-mat.supr-con' 'gr-qc'\n", " 'hep-ex' 'hep-lat' 'hep-ph' 'hep-th' 'math-ph' 'nlin.AO' 'nlin.CD'\n", " 'nlin.CG' 'nlin.PS' 'nlin.SI' 'nucl-ex' 'nucl-th' 'physics.acc-ph'\n", " 'physics.ao-ph' 'physics.app-ph' 'physics.atm-clus' 'physics.atom-ph'\n", " 'physics.bio-ph' 'physics.chem-ph' 'physics.class-ph' 'physics.comp-ph'\n", " 'physics.data-an' 'physics.ed-ph' 'physics.flu-dyn' 'physics.gen-ph'\n", " 'physics.geo-ph' 'physics.hist-ph' 'physics.ins-det' 'physics.med-ph'\n", " 'physics.optics' 'physics.plasm-ph' 'physics.pop-ph' 'physics.soc-ph'\n", " 'physics.space-ph' 'quant-ph' 'q-bio.BM' 'q-bio.CB' 'q-bio.GN' 'q-bio.MN'\n", " 'q-bio.NC' 'q-bio.OT' 'q-bio.PE' 'q-bio.QM' 'q-bio.SC' 'q-bio.TO'\n", " 'q-fin.CP' 'q-fin.EC' 'q-fin.GN' 'q-fin.MF' 'q-fin.PM' 'q-fin.PR'\n", " 'q-fin.RM' 'q-fin.ST' 'q-fin.TR' 'stat.AP' 'stat.CO' 'stat.ME' 'stat.ML'\n", " 'stat.OT' 'stat.TH']\n" ] } ], "source": [ "print(arxiv_topics_df['tag'].unique())" ] }, { "cell_type": "code", "execution_count": 6, "id": "37967cd0-1473-43c4-82d5-3ac0ec4531b7", "metadata": { "execution": { "iopub.execute_input": "2025-04-10T10:11:59.748954Z", "iopub.status.busy": "2025-04-10T10:11:59.747920Z", "iopub.status.idle": "2025-04-10T10:11:59.769861Z", "shell.execute_reply": "2025-04-10T10:11:59.769155Z", "shell.execute_reply.started": "2025-04-10T10:11:59.748916Z" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['Computer Science' 'Economics'\n", " 'Electrical Engineering and Systems Science' 'Mathematics' 'Physics'\n", " 'Quantitative Biology' 'Quantitative Finance' 'Statistics']\n" ] } ], "source": [ "category_to_ind = {\n", " 'Computer Science': 0,\n", " 'Economics': 1,\n", " 'Electrical Engineering and Systems Science': 2,\n", " 'Mathematics': 3,\n", " 'Physics': 4,\n", " 'Quantitative Biology': 5,\n", " 'Quantitative Finance': 6,\n", " 'Statistics': 7\n", "}\n", "\n", "ind_to_category = {}\n", "for k, v in category_to_ind.items(): \n", " ind_to_category[v] = k\n", "\n", "term_to_category = {}\n", "for i in range(len(arxiv_topics_df)):\n", " term_to_category[arxiv_topics_df['tag'][i]] = arxiv_topics_df['category'][i]\n", "\n", "\n", "print(arxiv_topics_df['category'].unique())" ] }, { "cell_type": "code", "execution_count": 9, "id": "f31c1f41-13e2-473f-8b53-1668d12e52fc", "metadata": { "execution": { "iopub.execute_input": "2025-04-10T10:21:54.926125Z", "iopub.status.busy": "2025-04-10T10:21:54.924983Z", "iopub.status.idle": "2025-04-10T10:21:54.960251Z", "shell.execute_reply": "2025-04-10T10:21:54.959449Z", "shell.execute_reply.started": "2025-04-10T10:21:54.926077Z" }, "tags": [] }, "outputs": [], "source": [ "import csv\n", "\n", "with open('ind_to_category.csv', mode='w', newline='') as f:\n", " writer = csv.writer(f)\n", " writer.writerow(['key', 'value']) # header\n", " for key, value in ind_to_category.items():\n", " writer.writerow([key, value])" ] }, { "cell_type": "code", "execution_count": 10, "id": "8e908332-33e2-409a-ae39-51adb59545ba", "metadata": { "execution": { "iopub.execute_input": "2025-04-10T10:22:56.251945Z", "iopub.status.busy": "2025-04-10T10:22:56.250724Z", "iopub.status.idle": "2025-04-10T10:22:56.265748Z", "shell.execute_reply": "2025-04-10T10:22:56.265049Z", "shell.execute_reply.started": "2025-04-10T10:22:56.251906Z" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'0': 'Computer Science', '1': 'Economics', '2': 'Electrical Engineering and Systems Science', '3': 'Mathematics', '4': 'Physics', '5': 'Quantitative Biology', '6': 'Quantitative Finance', '7': 'Statistics'}\n" ] } ], "source": [ "ind_to_category_copy = {}\n", "with open('ind_to_category.csv', mode='r', newline='') as f:\n", " reader = csv.reader(f)\n", " next(reader) # skip header\n", " for key, value in reader:\n", " ind_to_category_copy[key] = value\n", "\n", "print(ind_to_category_copy)" ] }, { "cell_type": "code", "execution_count": 7, "id": "96fb8526-c464-4f0e-b6df-22c2d373fc65", "metadata": { "execution": { "iopub.execute_input": "2025-04-09T16:16:03.512867Z", "iopub.status.busy": "2025-04-09T16:16:03.512371Z", "iopub.status.idle": "2025-04-09T16:16:06.859361Z", "shell.execute_reply": "2025-04-09T16:16:06.858440Z", "shell.execute_reply.started": "2025-04-09T16:16:03.512832Z" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'inp': 'Dual Recurrent Attention Units for Visual Question Answering@We propose an architecture for VQA which utilizes recurrent layers to\\ngenerate visual and textual attention. The memory characteristic of the\\nproposed recurrent attention units offers a rich joint embedding of visual and\\ntextual features and enables the model to reason relations between several\\nparts of the image and question. Our single model outperforms the first place\\nwinner on the VQA 1.0 dataset, performs within margin to the current\\nstate-of-the-art ensemble model. We also experiment with replacing attention\\nmechanisms in other state-of-the-art models with our implementation and show\\nincreased accuracy. In both cases, our recurrent attention mechanism improves\\nperformance in tasks requiring sequential or relational reasoning on the VQA\\ndataset.', 'probs': array([0.86230617, 0.01579369, 0.01579369, 0.01579369, 0.01579369,\n", " 0.01579369, 0.01579369, 0.0429317 ])}\n" ] } ], "source": [ "import ast\n", "import scipy\n", "\n", "arxiv_data = []\n", "for i in range(len(df)):\n", " cur_elem = {} \n", " cur_elem['inp'] = df['title'][i] + '@' + df['summary'][i]\n", " probs = [0] * len(category_to_ind)\n", " parsed_tags = ast.literal_eval(df['tag'][i])\n", " total_tags = len(parsed_tags)\n", " for j in range(len(parsed_tags)):\n", " term = parsed_tags[j]['term']\n", " if term not in term_to_category:\n", " continue\n", " category = term_to_category[term]\n", " ind = category_to_ind[category]\n", " probs[ind] += 1\n", " probs = scipy.special.softmax(probs)\n", " cur_elem['probs'] = probs\n", " arxiv_data.append(cur_elem)\n", " \n", " \n", "print(arxiv_data[0])" ] }, { "cell_type": "code", "execution_count": 8, "id": "3740a1bb-d0d4-4da4-aa88-e26061bda9a8", "metadata": { "execution": { "iopub.execute_input": "2025-04-09T16:16:06.860959Z", "iopub.status.busy": "2025-04-09T16:16:06.860456Z", "iopub.status.idle": "2025-04-09T16:16:06.908278Z", "shell.execute_reply": "2025-04-09T16:16:06.907361Z", "shell.execute_reply.started": "2025-04-09T16:16:06.860924Z" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'term': 'cs.AI', 'scheme': 'http://arxiv.org/schemas/atom', 'label': None}\n" ] } ], "source": [ "import ast\n", "parsed_list = ast.literal_eval(df['tag'][0])\n", "print(parsed_list[0])" ] }, { "cell_type": "code", "execution_count": 9, "id": "bee4d350-7919-4a89-a9fc-bbea804afe0a", "metadata": { "execution": { "iopub.execute_input": "2025-04-09T16:16:06.910847Z", "iopub.status.busy": "2025-04-09T16:16:06.909427Z", "iopub.status.idle": "2025-04-09T16:16:06.941781Z", "shell.execute_reply": "2025-04-09T16:16:06.940919Z", "shell.execute_reply.started": "2025-04-09T16:16:06.910806Z" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "41000\n" ] } ], "source": [ "print(len(arxiv_data))" ] }, { "cell_type": "code", "execution_count": 10, "id": "53ed96e7-eec9-4f1a-85fb-f04b5782ed92", "metadata": { "execution": { "iopub.execute_input": "2025-04-09T16:16:06.945896Z", "iopub.status.busy": "2025-04-09T16:16:06.945287Z", "iopub.status.idle": "2025-04-09T16:16:08.000266Z", "shell.execute_reply": "2025-04-09T16:16:07.999408Z", "shell.execute_reply.started": "2025-04-09T16:16:06.945856Z" }, "tags": [] }, "outputs": [], "source": [ "from transformers import DistilBertTokenizer, DistilBertModel\n", "\n", "# Load pretrained tokenizer and model\n", "tokenizer = DistilBertTokenizer.from_pretrained('distilbert-base-cased')\n" ] }, { "cell_type": "code", "execution_count": 11, "id": "f9317c52-636c-4db9-ab02-299951dec41d", "metadata": { "execution": { "iopub.execute_input": "2025-04-09T16:16:08.002380Z", "iopub.status.busy": "2025-04-09T16:16:08.001362Z", "iopub.status.idle": "2025-04-09T16:16:08.190707Z", "shell.execute_reply": "2025-04-09T16:16:08.189828Z", "shell.execute_reply.started": "2025-04-09T16:16:08.002341Z" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "torch.Size([1, 512])\n", "torch.Size([1, 512])\n" ] } ], "source": [ "MAX_LENGTH = 512\n", "tokenized_sentence = tokenizer(arxiv_data[0]['inp'], padding=\"max_length\", truncation=True, max_length=MAX_LENGTH, return_tensors=\"pt\")\n", "print(tokenized_sentence['input_ids'].shape)\n", "print(tokenized_sentence['attention_mask'].shape)\n", "\n", "# max_inp_size = 0\n", "# avg_inp_size = 0\n", "# for i in range(len(arxiv_data)):\n", "# max_inp_size = max(max_inp_size, len(arxiv_data[i]['inp']))\n", "# avg_inp_size += len(arxiv_data[i]['inp'])\n", "\n", "# avg_inp_size /= len(arxiv_data)\n", "\n", "# print(avg_inp_size)\n", "# print(max_inp_size)" ] }, { "cell_type": "code", "execution_count": 12, "id": "002fa81d-8775-4ddf-b730-db21b7db89b2", "metadata": { "execution": { "iopub.execute_input": "2025-04-09T16:16:08.193634Z", "iopub.status.busy": "2025-04-09T16:16:08.191762Z", "iopub.status.idle": "2025-04-09T16:16:08.211641Z", "shell.execute_reply": "2025-04-09T16:16:08.210798Z", "shell.execute_reply.started": "2025-04-09T16:16:08.193594Z" }, "tags": [] }, "outputs": [], "source": [ "from torch.utils.data import DataLoader, Dataset\n", "\n", "class ArxivDataset(Dataset):\n", " def __init__(self, split=\"train\"):\n", " if (split == \"train\"):\n", " self.data = arxiv_data[:39000]\n", " else:\n", " self.data = arxiv_data[-2000:]\n", " \n", " def __len__(self):\n", " return len(self.data)\n", " \n", " def __getitem__(self, idx):\n", " #обрабатываем элемент\n", " cur_elem = self.data[idx]\n", " \n", " # Tokenize input and label\n", " encoding = tokenizer(cur_elem[\"inp\"], padding=\"max_length\", truncation=True, max_length=MAX_LENGTH, return_tensors=\"pt\")\n", " labels = torch.FloatTensor(cur_elem[\"probs\"])\n", " \n", " # input_ids = encoding[\"input_ids\"].squeeze(0) # Remove batch dim\n", " # attention_mask = encoding[\"attention_mask\"].squeeze(0)\n", " input_ids = encoding[\"input_ids\"].squeeze(0) # Remove batch dim\n", " attention_mask = encoding[\"attention_mask\"].squeeze(0)\n", " \n", " \n", " return {\"input_ids\": input_ids, \"attention_mask\": attention_mask, \"labels\": labels}\n", "\n", "BATCH_SIZE = 10\n", "\n", "train_dataset = ArxivDataset(\"train\")\n", "train_dataloader = DataLoader(train_dataset, batch_size=BATCH_SIZE, shuffle=True)\n", "\n", "val_dataset = ArxivDataset(\"test\")\n", "val_dataloader = DataLoader(val_dataset, batch_size=BATCH_SIZE, shuffle=True)" ] }, { "cell_type": "markdown", "id": "04c52585-65ce-4151-856f-b0763460898e", "metadata": {}, "source": [ "***Разберемся с моделью***" ] }, { "cell_type": "code", "execution_count": 13, "id": "014e60b2-1684-4270-a81a-29cac4ea46de", "metadata": { "execution": { "iopub.execute_input": "2025-04-09T16:16:08.216322Z", "iopub.status.busy": "2025-04-09T16:16:08.212808Z", "iopub.status.idle": "2025-04-09T16:16:18.518029Z", "shell.execute_reply": "2025-04-09T16:16:18.517118Z", "shell.execute_reply.started": "2025-04-09T16:16:08.216273Z" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "torch.Size([10, 512])\n", "torch.Size([10, 512])\n", "torch.Size([10, 8])\n", "torch.Size([10, 512, 768])\n" ] } ], "source": [ "model = DistilBertModel.from_pretrained('distilbert-base-cased')\n", "model.eval()\n", "\n", "\n", "# output = model(train_dataset[0][\"input_ids\"], train_dataset[0][\"attention_mask\"])\n", "# config = model.config\n", "\n", "batch = next(iter(train_dataloader))\n", "\n", "print(batch['input_ids'].shape)\n", "print(batch['attention_mask'].shape)\n", "print(batch['labels'].shape)\n", "print(model(input_ids=batch['input_ids'], attention_mask=batch['attention_mask']).last_hidden_state.shape)" ] }, { "cell_type": "code", "execution_count": 14, "id": "cff821d0-806c-4c3b-b6d3-2b99291e65a0", "metadata": { "execution": { "iopub.execute_input": "2025-04-09T16:16:18.519553Z", "iopub.status.busy": "2025-04-09T16:16:18.519046Z", "iopub.status.idle": "2025-04-09T16:16:18.539926Z", "shell.execute_reply": "2025-04-09T16:16:18.538850Z", "shell.execute_reply.started": "2025-04-09T16:16:18.519516Z" }, "tags": [] }, "outputs": [], "source": [ "from torch import nn\n", "\n", "class ClassificationModel(nn.Module):\n", " def __init__(self, base_model):\n", " super(ClassificationModel, self).__init__()\n", " self.base_model = base_model\n", " # self.linear = nn.Linear(768, 8)\n", " # self.softmax = nn.Softmax(dim=1)\n", " self.classifier = nn.Sequential(\n", " nn.Linear(768, 256), # Optional intermediate layer\n", " nn.ReLU(),\n", " nn.Dropout(0.3),\n", " nn.Linear(256, 8), # Final layer to 8 classes\n", " nn.LogSoftmax(dim=1)\n", " )\n", "\n", " def forward(self, input_ids, attention_mask):\n", " hidden_states = self.base_model(input_ids=input_ids, attention_mask=attention_mask).last_hidden_state # shape: [batch, max_len, hidden_size]\n", " cls_output = hidden_states[:, 0, :] # Use [CLS] token\n", " probs = self.classifier(cls_output) # (batch_size, 8), now probabilities\n", " return probs\n" ] }, { "cell_type": "code", "execution_count": 15, "id": "243c7b28-fbec-4dad-9602-17691cd6e9c6", "metadata": { "execution": { "iopub.execute_input": "2025-04-09T16:16:18.541653Z", "iopub.status.busy": "2025-04-09T16:16:18.541121Z", "iopub.status.idle": "2025-04-09T16:16:27.774174Z", "shell.execute_reply": "2025-04-09T16:16:27.773344Z", "shell.execute_reply.started": "2025-04-09T16:16:18.541615Z" }, "tags": [] }, "outputs": [], "source": [ "class_model = ClassificationModel(model)\n", "\n", "# class_model = torch.load(\"model_weights.pth\")\n", "class_model.load_state_dict(torch.load(\"model_weights.pth\", weights_only=True))\n", "\n", "class_model.to(device)\n", "\n", "for param in class_model.base_model.parameters():\n", " param.requires_grad = False\n", "\n", "# print(class_model(input_ids=batch['input_ids'], attention_mask=batch['attention_mask']).shape)" ] }, { "cell_type": "code", "execution_count": 16, "id": "6e656bda-bd95-4d26-a8f4-b83841fd8ca6", "metadata": { "execution": { "iopub.execute_input": "2025-04-09T16:16:27.775874Z", "iopub.status.busy": "2025-04-09T16:16:27.775265Z", "iopub.status.idle": "2025-04-09T16:16:27.796354Z", "shell.execute_reply": "2025-04-09T16:16:27.795408Z", "shell.execute_reply.started": "2025-04-09T16:16:27.775837Z" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Trainable parameters: 198920\n" ] } ], "source": [ "def count_parameters(model):\n", " return sum(p.numel() for p in model.parameters() if p.requires_grad)\n", "\n", "print(\"Trainable parameters:\", count_parameters(class_model))" ] }, { "cell_type": "markdown", "id": "1b69303c-d240-417f-a9ba-fcebdc7fe8be", "metadata": { "execution": { "iopub.execute_input": "2025-04-09T10:15:18.556131Z", "iopub.status.busy": "2025-04-09T10:15:18.554843Z", "iopub.status.idle": "2025-04-09T10:15:18.587934Z", "shell.execute_reply": "2025-04-09T10:15:18.586812Z", "shell.execute_reply.started": "2025-04-09T10:15:18.556083Z" }, "tags": [] }, "source": [ "***Training***" ] }, { "cell_type": "code", "execution_count": 33, "id": "b1139bae-5008-418d-bad2-458f34381d2f", "metadata": { "execution": { "iopub.execute_input": "2025-04-09T16:29:57.827095Z", "iopub.status.busy": "2025-04-09T16:29:57.825931Z", "iopub.status.idle": "2025-04-09T16:29:57.863867Z", "shell.execute_reply": "2025-04-09T16:29:57.863041Z", "shell.execute_reply.started": "2025-04-09T16:29:57.827049Z" }, "tags": [] }, "outputs": [], "source": [ "from IPython.display import clear_output\n", "import warnings\n", "import time\n", "from datetime import timedelta\n", "import numpy as np\n", "from collections import defaultdict\n", "import matplotlib.pyplot as plt\n", "import torch\n", "\n", "def get_lr(optimizer):\n", " for param_group in optimizer.param_groups:\n", " return param_group['lr']\n", "\n", "def learning_loop(\n", " model,\n", " optimizer,\n", " train_dataloader,\n", " val_dataloader,\n", " criterion,\n", " scheduler=None,\n", " min_lr=None,\n", " epochs=3,\n", " val_every=100,\n", " draw_every=50,\n", " separate_show=False,\n", " model_name=None,\n", " chkp_folder=\"./chkps\",\n", " metric_names=None,\n", "):\n", "\n", " device = next(model.parameters()).device\n", " dtype = next(model.parameters()).dtype\n", "\n", " losses = {'train': [], 'val': [], 'accuracy_val': [], 'lr': []}\n", " # lrs = []\n", " best_val_loss = np.Inf\n", " if metric_names is not None:\n", " metrics = defaultdict(list)\n", " start_time = time.monotonic()\n", " \n", " # [1, 1, 0, 0, 0, 1, 1, 0, 0, 0]\n", " idx = 0\n", "\n", " for epoch in range(1, epochs + 1):\n", " model.train()\n", "\n", " for batch_idx, batch in enumerate(train_dataloader):\n", " if idx % 10 == 0:\n", " print(idx)\n", " idx += 1\n", "\n", " input_ids = batch[\"input_ids\"].to(device)\n", " attention_mask = batch[\"attention_mask\"].to(device)\n", " labels = (batch[\"labels\"]).to(device)\n", "\n", " # attention_mask = attention_mask.to(dtype=dtype)\n", "\n", " optimizer.zero_grad()\n", "\n", " model_probs = model(input_ids, attention_mask)\n", " \n", " # print(torch.sum(model_probs))\n", " # print(torch.sum(labels))\n", "\n", " model_loss = criterion(\n", " model_probs,\n", " labels\n", " )\n", " # print(model_loss.item())\n", " \n", " model_loss.backward()\n", " optimizer.step()\n", " scheduler.step()\n", " \n", " current_lr = optimizer.param_groups[0]['lr']\n", " losses['lr'].append(current_lr)\n", " losses['train'].append(model_loss.item())\n", "\n", " # validation\n", " if idx % val_every == 0:\n", " model.eval()\n", "\n", "\n", " with torch.no_grad():\n", " for idx_val, batch in enumerate(val_dataloader):\n", " if idx_val == 10:\n", " break\n", "\n", " input_ids = batch[\"input_ids\"].to(device)\n", " attention_mask = batch[\"attention_mask\"].to(device)\n", " labels = (batch[\"labels\"]).to(device)\n", "\n", " # attention_mask = attention_mask.to(dtype=dtype)\n", "\n", " model_probs_val = model(input_ids, attention_mask)\n", "\n", " val_loss = criterion(\n", " model_probs_val,\n", " labels\n", " )\n", " \n", " losses['val'].append(val_loss.item())\n", " \n", "\n", " \n", " torch.cuda.empty_cache()\n", " model.train()\n", "\n", " # plotting\n", " if idx % draw_every == 0:\n", " clear_output(True)\n", " plt.clf()\n", " plt.figure(figsize=(10, 5))\n", "\n", " plt.subplot(1, 2, 1)\n", " plt.plot(losses['train'], label='train_loss')\n", " plt.xlabel('Iter')\n", " plt.ylabel('Loss')\n", " plt.title('Training Losses')\n", " plt.legend()\n", " plt.grid(True)\n", "\n", " plt.subplot(1, 2, 2)\n", " plt.plot(losses['val'], label='val_loss')\n", " plt.xlabel('Iter')\n", " plt.ylabel('Loss')\n", " plt.title('Validation Losses')\n", " plt.legend()\n", " plt.grid(True)\n", "\n", " plt.tight_layout()\n", " plt.show()\n", "\n", " return losses" ] }, { "cell_type": "code", "execution_count": 34, "id": "7871cabe-52fc-4169-86f3-1672e73d4690", "metadata": { "execution": { "iopub.execute_input": "2025-04-09T16:30:00.983579Z", "iopub.status.busy": "2025-04-09T16:30:00.982492Z", "iopub.status.idle": "2025-04-09T16:30:01.016961Z", "shell.execute_reply": "2025-04-09T16:30:01.015926Z", "shell.execute_reply.started": "2025-04-09T16:30:00.983534Z" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "11700\n" ] } ], "source": [ "from torch.optim.lr_scheduler import CosineAnnealingLR\n", "from torch.optim.lr_scheduler import LinearLR\n", "import torch.optim as optim\n", "\n", "\n", "num_epochs = 3\n", "\n", "total_steps = num_epochs * len(train_dataloader) # Total training steps\n", "\n", "optimizer = optim.Adam(model.parameters(), lr=1e-3)\n", "\n", "scheduler = CosineAnnealingLR(optimizer, T_max=total_steps, eta_min=0)\n", "\n", "print(total_steps)" ] }, { "cell_type": "code", "execution_count": 35, "id": "b0eab979-8ec7-44e4-bfc2-f6409de09192", "metadata": { "execution": { "iopub.execute_input": "2025-04-09T16:30:03.273412Z", "iopub.status.busy": "2025-04-09T16:30:03.272346Z", "iopub.status.idle": "2025-04-09T17:19:23.714816Z", "shell.execute_reply": "2025-04-09T17:19:23.714027Z", "shell.execute_reply.started": "2025-04-09T16:30:03.273370Z" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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a5w7dw4A0LVrV5153bp108z39fXF22+/jb///hthYWEYPnw43nnnHeTk5GiWHzFiBO677z4sXLgQISEhmDBhAr766itUVlZqljl58iSKiooQGhqKFi1aaP0rLS3VtO0zJy0iInIttZ2i1bYHvnDhAnbs2IHJkydDoVAAqOnn43//+x+6dOkCX19fhISEoEWLFjh06JBZv8v1nTt3DnK5XOvlNqD/N+/69euYP38+2rZtq7XdwsJCi7dbf/tdunTRvECoVVsFvfY3tpYtzxTm5EXffjfMy0svvYRGjRqhf//+6NKlC55++mmddtfvvPMOjhw5grZt26J///54/fXXtV4KnDx5EgAwffp0nd/6L774ApWVlZpjaiotInthwE0ksvpvrmsVFhZixIgROHjwIBYtWoQ//vgDCQkJePvttwHArGHAah8QGhIEwa7rSuG5557DiRMnsHTpUvj5+WHevHno3r07Dhw4AACaMUCTk5MxZ84cXLx4EY8++iiioqJQWloKoOaYhoaGIiEhQe+/RYsWmZ0WERG5lqioKHTr1g3ff/89AOD777+HIAhavZO/+eabiIuLw/Dhw/HNN99g8+bNSEhIQM+ePa0entMc//nPf/DGG2/gwQcfxI8//ogtW7YgISEBzZs3t+t263OG54Lu3bvj+PHj+OGHHzB06FD8/PPPGDp0KBYsWKBZ5sEHH8SZM2fw0UcfoVWrVnj33XfRs2dP/P333wDqnp/effddg7/3jRo1MistInthp2lEDpCUlIT8/Hxs3LgRw4cP10w/e/ashLmqExoaCj8/P5w6dUpnnr5p1mjfvj0A4Pjx47j99tu15h0/flwzv1anTp3w/PPP4/nnn8fJkycRGRmJ999/H998841mmYEDB2LgwIF444038N1332Hq1Kn44Ycf8Pjjj6NTp07YunUrhgwZovclSEPG0iIiItczdepUzJs3D4cOHcJ3332HLl264NZbb9XM37BhA2677TZ8+eWXWusVFhYiJCTEom21b98earUap0+f1irdPX78uM6yGzZswPTp0/H+++9rplVUVKCwsFBrOUtGCGnfvj0OHToEtVqtVcpd22St4W+sPbVv317vfuvLS2BgICZNmoRJkyahqqoKEydOxBtvvIG5c+dqmp+1bNkSs2fPxuzZs5GXl4dbbrkFb7zxBsaPH6+pURAcHIzo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+A43ERERERERkRMw4SYiIiIiIiJyAibcRERERERERE7AhJuIiIiIiIjICZhwExERERERETkBE24iIiIiIiIiJ2DCTUREREREROQETLiJiIiIiIiInIAJNxEREREREZETMOEm8mLTpk3D6NGjAQADBgzA3LlzJa0PERERNQzP5UTujQk3ETlURUWF1FUgIiKiJuC5nMhxmHATEaZNm4bt27djzZo1kMlkkMlkOH36NADg4MGDGD58OPz8/BAeHo7Jkyfj0qVLhmUHDBiA2bNnY+7cuQgJCUFOTo5EURAREXkvnsuJ3BMTbiLCmjVrkJWVhXvuuQfnz5/H+fPnERMTgytXrmDQoEFIS0vDnj17sHnzZhQXF+P22283Wf6tt96CWq3Gjh07sG7dOomiICIi8l48lxO5J6XUFSAi6QUGBkKtVsPX1xcRERGG6X/729+QlpaG559/3jDt9ddfR0xMDI4dO4b27dsDABITE7FixQqX15uIiIhq8FxO5J6YcBORVfv378dXX30FPz8/s3knTpwwnKTT09NdXTUiIiKyA8/lRNJiwk1EVl27dg0jR47ECy+8YDYvMjLS8P8WLVq4slpERERkJ57LiaTFhJuIAABqtRrV1dUm07p164aPPvoIcXFxUCr5c0FEROTOeC4ncj/sNI2IAABxcXHYtWsXTp8+jUuXLkGn02HWrFn4/fffMWnSJHz//fc4ceIEvvjiC0yfPt3shE5ERETS4rmcyP0w4SYiAMAjjzwChUKBjh07IjQ0FGfOnEFUVBR27NiB6upqDB06FCkpKZg7dy6CgoIgl/Png4iIyJ3wXE7kfmRCCCF1JYiIiIiIiIg8DW9rERERERERETkBE24iIiIiIiIiJ2DCTUREREREROQETLiJiIiIiIiInIAJNxEREREREZETMOEmIiIiIiIicgIm3EREREREREROwISbiIiIiIiIyAmYcBMRERERERE5ARNuIiIiIiIiIidgwk1ERERERETkBEy4iYiIiIiIiJzg/wMp8s1AuaRI9gAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import numpy as np\n", "\n", "losses = learning_loop(\n", " class_model,\n", " optimizer,\n", " train_dataloader,\n", " val_dataloader,\n", " # nn.CrossEntropyLoss(),\n", " nn.KLDivLoss(reduction=\"batchmean\"),\n", " scheduler=scheduler,\n", " min_lr=None,\n", " epochs=num_epochs,\n", " val_every=20,\n", " draw_every=50,\n", " separate_show=False,\n", " model_name=None,\n", " chkp_folder=\"./chkps\",\n", " metric_names=None,\n", ")\n" ] }, { "cell_type": "code", "execution_count": 37, "id": "e12128f5-2809-474e-9cf8-2274833a2ae0", "metadata": { "execution": { "iopub.execute_input": "2025-04-09T17:19:32.699426Z", "iopub.status.busy": "2025-04-09T17:19:32.698525Z", "iopub.status.idle": "2025-04-09T17:19:50.895279Z", "shell.execute_reply": "2025-04-09T17:19:50.894467Z", "shell.execute_reply.started": "2025-04-09T17:19:32.699388Z" }, "tags": [] }, "outputs": [], "source": [ "torch.save(class_model.state_dict(), \"model_weights.pth\")\n", "torch.save(class_model.state_dict(), \"pytorch_model.bin\")" ] }, { "cell_type": "code", "execution_count": 38, "id": "5dbcbe7f-46f4-45bd-a645-2a90f1528f53", "metadata": { "execution": { "iopub.execute_input": "2025-04-09T17:42:37.613236Z", "iopub.status.busy": "2025-04-09T17:42:37.612271Z", "iopub.status.idle": "2025-04-09T17:42:37.656166Z", "shell.execute_reply": "2025-04-09T17:42:37.655273Z", "shell.execute_reply.started": "2025-04-09T17:42:37.613193Z" }, "tags": [] }, "outputs": [], "source": [ "def inference(\n", " title,\n", " abstract,\n", " threshold=0.50\n", "):\n", " cur_elem = title + '@' + abstract\n", "\n", " # Tokenize input and label\n", " encoding = tokenizer(cur_elem, padding=\"max_length\", truncation=True, max_length=MAX_LENGTH, return_tensors=\"pt\")\n", " input_ids = encoding[\"input_ids\"].to(device)\n", " attention_mask = encoding[\"attention_mask\"].to(device)\n", " \n", " # input_ids.to(device)\n", " attention_mask.to(device)\n", " class_model.to(device)\n", " \n", " res_probs = torch.exp(class_model(input_ids, attention_mask))\n", " \n", " print(res_probs)\n", " \n", " probs = res_probs.squeeze(0) # (8,)\n", " \n", " sorted_probs, sorted_indices = torch.sort(probs, descending=True)\n", "\n", " total = 0.0\n", " selected_indices = []\n", " \n", " for prob, idx in zip(sorted_probs, sorted_indices):\n", " total += prob.item()\n", " selected_indices.append(idx.item())\n", " if total >= threshold:\n", " break\n", "\n", " ans_themes = [ind_to_category[elem] for elem in selected_indices]\n", " return ans_themes" ] }, { "cell_type": "code", "execution_count": 39, "id": "f48d8427-7965-47d2-8431-2eb10d8ac7c5", "metadata": { "execution": { "iopub.execute_input": "2025-04-09T17:42:40.652581Z", "iopub.status.busy": "2025-04-09T17:42:40.651551Z", "iopub.status.idle": "2025-04-09T17:42:40.724918Z", "shell.execute_reply": "2025-04-09T17:42:40.724020Z", "shell.execute_reply.started": "2025-04-09T17:42:40.652541Z" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "tensor([[0.1338, 0.1863, 0.1153, 0.1085, 0.1025, 0.1116, 0.1232, 0.1188]],\n", " device='cuda:0', grad_fn=)\n" ] }, { "data": { "text/plain": [ "['Economics', 'Computer Science', 'Quantitative Finance', 'Statistics']" ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ "inference('Dual Recurrent Attention Units for Visual Question Answering', 'We propose an architecture for VQA which utilizes recurrent layers to\\ngenerate visual and textual attention. The memory characteristic of the\\nproposed recurrent attention units offers a rich joint embedding of visual and\\ntextual features and enables the model to reason relations between several\\nparts of the image and question. Our single model outperforms the first place\\nwinner on the VQA 1.0 dataset, performs within margin to the current\\nstate-of-the-art ensemble model. We also experiment with replacing attention\\nmechanisms in other state-of-the-art models with our implementation and show\\nincreased accuracy. In both cases, our recurrent attention mechanism improves\\nperformance in tasks requiring sequential or relational reasoning on the VQA\\ndataset.')" ] }, { "cell_type": "code", "execution_count": null, "id": "409c347c-c439-40ec-a405-823eb64f6ae4", "metadata": { "execution": { "iopub.status.busy": "2025-04-09T16:16:27.891909Z", "iopub.status.idle": "2025-04-09T16:16:27.892360Z", "shell.execute_reply": "2025-04-09T16:16:27.892167Z", "shell.execute_reply.started": "2025-04-09T16:16:27.892146Z" }, "tags": [] }, "outputs": [], "source": [ "print(device)" ] } ], "metadata": { "kernelspec": { "display_name": "DataSphere Kernel", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.12" } }, "nbformat": 4, "nbformat_minor": 5 }