diff --git a/notebooks/02_semantic_search.ipynb b/notebooks/02_semantic_search.ipynb index f070dea..b43e1d7 100644 --- a/notebooks/02_semantic_search.ipynb +++ b/notebooks/02_semantic_search.ipynb @@ -1,7274 +1,7757 @@ { - "cells": [ - { - "cell_type": "markdown", - "id": "9b088054-daa2-4dbe-a71c-3a3dd58ab3b5", - "metadata": {}, - "source": [ - "# Part 1: Setting up a basic semantic search system" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "aGixSoAgIzLo", - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "aGixSoAgIzLo", - "outputId": "cfcad5a5-3d39-4b79-a0ef-c33107ad1972" - }, - "outputs": [ + "cells": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "Successfully installed datasets-2.18.0 dill-0.3.8 h11-0.14.0 httpcore-1.0.5 httpx-0.27.0 multiprocess-0.70.16 nvidia-cublas-cu12-12.1.3.1 nvidia-cuda-cupti-cu12-12.1.105 nvidia-cuda-nvrtc-cu12-12.1.105 nvidia-cuda-runtime-cu12-12.1.105 nvidia-cudnn-cu12-8.9.2.26 nvidia-cufft-cu12-11.0.2.54 nvidia-curand-cu12-10.3.2.106 nvidia-cusolver-cu12-11.4.5.107 nvidia-cusparse-cu12-12.1.0.106 nvidia-nccl-cu12-2.19.3 nvidia-nvjitlink-cu12-12.4.127 nvidia-nvtx-cu12-12.1.105 openai-1.17.0 pinecone-client-3.2.2 sentence-transformers-2.6.1 tiktoken-0.6.0 xxhash-3.4.1\n" - ] - } - ], - "source": [ - "!pip install pinecone-client openai sentence-transformers tiktoken datasets" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "c12182ab", - "metadata": { - "id": "c12182ab" - }, - "outputs": [], - "source": [ - "from openai import OpenAI\n", - "from datetime import datetime\n", - "import hashlib\n", - "import re\n", - "import os\n", - "from sentence_transformers import CrossEncoder\n", - "\n", - "\n", - "from tqdm import tqdm\n", - "import numpy as np\n", - "from torch import nn\n", - "\n", - "import logging\n", - "from pinecone import Pinecone, ServerlessSpec\n", - "\n", - "logger = logging.getLogger()\n", - "logger.setLevel(logging.CRITICAL)\n" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "f0289c54", - "metadata": { - "id": "f0289c54" - }, - "outputs": [], - "source": [ - "pinecone_key = os.environ.get('PINECONE_API_KEY')\n", - "client = OpenAI(\n", - " api_key=os.environ.get(\"OPENAI_API_KEY\")\n", - ")\n", - "\n", - "INDEX_NAME = 'semantic-search-test'\n", - "NAMESPACE = 'default'\n", - "ENGINE = 'text-embedding-3-large' # has vector size 3072\n", - "\n", - "pc = Pinecone(\n", - " api_key=pinecone_key\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "3cf993a3-6d51-49f4-8968-60f654d6202d", - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "3cf993a3-6d51-49f4-8968-60f654d6202d", - "outputId": "12a29199-9a84-4855-f07f-7979b15a718b" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "(3072, 2)" + "cell_type": "markdown", + "id": "9b088054-daa2-4dbe-a71c-3a3dd58ab3b5", + "metadata": { + "id": "9b088054-daa2-4dbe-a71c-3a3dd58ab3b5" + }, + "source": [ + "# Part 1: Setting up a basic semantic search system" ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# helper functions to get lists of embeddings from the OpenAI API\n", - "def get_embeddings(texts, engine=ENGINE):\n", - " response = client.embeddings.create(\n", - " input=texts,\n", - " model=engine\n", - " )\n", - "\n", - " return [d.embedding for d in list(response.data)]\n", - "\n", - "def get_embedding(text, engine=ENGINE):\n", - " return get_embeddings([text], engine)[0]\n", - "\n", - "len(get_embedding('hi')), len(get_embeddings(['hi', 'hello']))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ea70672a", - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "ea70672a", - "outputId": "7ba237ca-f93f-4a8b-83a1-5133a33b3080" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Creating index semantic-search-test\n" - ] }, { - "data": { - "text/plain": [ - "" + "cell_type": "markdown", + "id": "722572bc", + "metadata": {}, + "source": [ + "A big thank you to [David on Github](https://github.com/gypsydave5) for finding a bug in my analysis code and bringing it to my attention. The bug was resolved! \n", + "\n", + "Some numbers might be different from what is reported in the book/video course but the overall gist is the same: re-ranking helps our semantic search and fine-tuning the re-ranking cross encoder yielded even better results." ] - }, - "execution_count": 160, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "if INDEX_NAME not in pc.list_indexes().names():\n", - " print(f'Creating index {INDEX_NAME}')\n", - " pc.create_index(\n", - " name=INDEX_NAME, # The name of the index\n", - " dimension=3072, # The dimensionality of the vectors for our OpenAI embedder\n", - " metric='cosine', # The similarity metric to use when searching the index\n", - " spec=ServerlessSpec(\n", - " cloud='aws',\n", - " region='us-west-2'\n", - " )\n", - " )\n", - "\n", - "# Store the index as a variable\n", - "index = pc.Index(name=INDEX_NAME)\n", - "index" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b6103d6c", - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" }, - "id": "b6103d6c", - "outputId": "549365a0-a4ee-4dff-b20e-8d2e07c97e13" - }, - "outputs": [ { - "data": { - "text/plain": [ - "{'dimension': 3072,\n", - " 'index_fullness': 0.0,\n", - " 'namespaces': {},\n", - " 'total_vector_count': 0}" + "cell_type": "code", + "execution_count": 1, + "id": "aGixSoAgIzLo", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "collapsed": true, + "id": "aGixSoAgIzLo", + "outputId": "ba5a2fd2-f4ad-4723-d499-5824bd94d28a" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: pinecone-client in /usr/local/lib/python3.11/dist-packages (5.0.1)\n", + "Requirement already satisfied: openai in /usr/local/lib/python3.11/dist-packages (1.61.1)\n", + "Requirement already satisfied: sentence-transformers in /usr/local/lib/python3.11/dist-packages (3.4.1)\n", + "Requirement already satisfied: tiktoken in /usr/local/lib/python3.11/dist-packages (0.8.0)\n", + "Requirement already satisfied: datasets in /usr/local/lib/python3.11/dist-packages (3.2.0)\n", + "Requirement already satisfied: certifi>=2019.11.17 in /usr/local/lib/python3.11/dist-packages (from pinecone-client) (2025.1.31)\n", + "Requirement already satisfied: pinecone-plugin-inference<2.0.0,>=1.0.3 in /usr/local/lib/python3.11/dist-packages (from pinecone-client) (1.1.0)\n", + "Requirement already satisfied: pinecone-plugin-interface<0.0.8,>=0.0.7 in /usr/local/lib/python3.11/dist-packages (from pinecone-client) (0.0.7)\n", + "Requirement already satisfied: tqdm>=4.64.1 in /usr/local/lib/python3.11/dist-packages (from pinecone-client) (4.67.1)\n", + "Requirement already satisfied: typing-extensions>=3.7.4 in /usr/local/lib/python3.11/dist-packages (from pinecone-client) (4.12.2)\n", + "Requirement already satisfied: urllib3>=1.26.0 in /usr/local/lib/python3.11/dist-packages (from pinecone-client) (2.3.0)\n", + "Requirement already satisfied: anyio<5,>=3.5.0 in /usr/local/lib/python3.11/dist-packages (from openai) (3.7.1)\n", + "Requirement already satisfied: distro<2,>=1.7.0 in /usr/local/lib/python3.11/dist-packages (from openai) (1.9.0)\n", + "Requirement already satisfied: httpx<1,>=0.23.0 in /usr/local/lib/python3.11/dist-packages (from openai) (0.28.1)\n", + "Requirement already satisfied: jiter<1,>=0.4.0 in /usr/local/lib/python3.11/dist-packages (from openai) (0.8.2)\n", + "Requirement already satisfied: pydantic<3,>=1.9.0 in /usr/local/lib/python3.11/dist-packages (from openai) (2.10.6)\n", + "Requirement already satisfied: sniffio in /usr/local/lib/python3.11/dist-packages (from openai) (1.3.1)\n", + "Requirement already satisfied: transformers<5.0.0,>=4.41.0 in /usr/local/lib/python3.11/dist-packages (from sentence-transformers) (4.48.2)\n", + "Requirement already satisfied: torch>=1.11.0 in /usr/local/lib/python3.11/dist-packages (from sentence-transformers) (2.5.1+cu124)\n", + "Requirement already satisfied: scikit-learn in /usr/local/lib/python3.11/dist-packages (from sentence-transformers) (1.6.1)\n", + "Requirement already satisfied: scipy in /usr/local/lib/python3.11/dist-packages (from sentence-transformers) (1.13.1)\n", + "Requirement already satisfied: huggingface-hub>=0.20.0 in /usr/local/lib/python3.11/dist-packages (from sentence-transformers) (0.28.1)\n", + "Requirement already satisfied: Pillow in /usr/local/lib/python3.11/dist-packages (from sentence-transformers) (11.1.0)\n", + "Requirement already satisfied: regex>=2022.1.18 in /usr/local/lib/python3.11/dist-packages (from tiktoken) (2024.11.6)\n", + "Requirement already satisfied: requests>=2.26.0 in /usr/local/lib/python3.11/dist-packages (from tiktoken) (2.32.3)\n", + "Requirement already satisfied: filelock in /usr/local/lib/python3.11/dist-packages (from datasets) (3.17.0)\n", + "Requirement already satisfied: numpy>=1.17 in /usr/local/lib/python3.11/dist-packages (from datasets) (1.26.4)\n", + "Requirement already satisfied: pyarrow>=15.0.0 in /usr/local/lib/python3.11/dist-packages (from datasets) (17.0.0)\n", + "Requirement already satisfied: dill<0.3.9,>=0.3.0 in /usr/local/lib/python3.11/dist-packages (from datasets) (0.3.8)\n", + "Requirement already satisfied: pandas in /usr/local/lib/python3.11/dist-packages (from datasets) (2.2.2)\n", + "Requirement already satisfied: xxhash in /usr/local/lib/python3.11/dist-packages (from datasets) (3.5.0)\n", + "Requirement already satisfied: multiprocess<0.70.17 in /usr/local/lib/python3.11/dist-packages (from datasets) (0.70.16)\n", + "Requirement already satisfied: fsspec<=2024.9.0,>=2023.1.0 in /usr/local/lib/python3.11/dist-packages (from fsspec[http]<=2024.9.0,>=2023.1.0->datasets) (2024.9.0)\n", + "Requirement already satisfied: aiohttp in /usr/local/lib/python3.11/dist-packages (from datasets) (3.11.11)\n", + "Requirement already satisfied: packaging in /usr/local/lib/python3.11/dist-packages (from datasets) (24.2)\n", + "Requirement already satisfied: pyyaml>=5.1 in /usr/local/lib/python3.11/dist-packages (from datasets) (6.0.2)\n", + "Requirement already satisfied: idna>=2.8 in /usr/local/lib/python3.11/dist-packages (from anyio<5,>=3.5.0->openai) (3.10)\n", + "Requirement already satisfied: aiohappyeyeballs>=2.3.0 in /usr/local/lib/python3.11/dist-packages (from aiohttp->datasets) (2.4.4)\n", + "Requirement already satisfied: aiosignal>=1.1.2 in /usr/local/lib/python3.11/dist-packages (from aiohttp->datasets) (1.3.2)\n", + "Requirement already satisfied: attrs>=17.3.0 in /usr/local/lib/python3.11/dist-packages (from aiohttp->datasets) (25.1.0)\n", + "Requirement already satisfied: frozenlist>=1.1.1 in /usr/local/lib/python3.11/dist-packages (from aiohttp->datasets) (1.5.0)\n", + "Requirement already satisfied: multidict<7.0,>=4.5 in /usr/local/lib/python3.11/dist-packages (from aiohttp->datasets) (6.1.0)\n", + "Requirement already satisfied: propcache>=0.2.0 in /usr/local/lib/python3.11/dist-packages (from aiohttp->datasets) (0.2.1)\n", + "Requirement already satisfied: yarl<2.0,>=1.17.0 in /usr/local/lib/python3.11/dist-packages (from aiohttp->datasets) (1.18.3)\n", + "Requirement already satisfied: httpcore==1.* in /usr/local/lib/python3.11/dist-packages (from httpx<1,>=0.23.0->openai) (1.0.7)\n", + "Requirement already satisfied: h11<0.15,>=0.13 in /usr/local/lib/python3.11/dist-packages (from httpcore==1.*->httpx<1,>=0.23.0->openai) (0.14.0)\n", + "Requirement already satisfied: annotated-types>=0.6.0 in /usr/local/lib/python3.11/dist-packages (from pydantic<3,>=1.9.0->openai) (0.7.0)\n", + "Requirement already satisfied: pydantic-core==2.27.2 in /usr/local/lib/python3.11/dist-packages (from pydantic<3,>=1.9.0->openai) (2.27.2)\n", + "Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.11/dist-packages (from requests>=2.26.0->tiktoken) (3.4.1)\n", + "Requirement already satisfied: networkx in /usr/local/lib/python3.11/dist-packages (from torch>=1.11.0->sentence-transformers) (3.4.2)\n", + "Requirement already satisfied: jinja2 in /usr/local/lib/python3.11/dist-packages (from torch>=1.11.0->sentence-transformers) (3.1.5)\n", + "Requirement already satisfied: nvidia-cuda-nvrtc-cu12==12.4.127 in /usr/local/lib/python3.11/dist-packages (from torch>=1.11.0->sentence-transformers) (12.4.127)\n", + "Requirement already satisfied: nvidia-cuda-runtime-cu12==12.4.127 in /usr/local/lib/python3.11/dist-packages (from torch>=1.11.0->sentence-transformers) (12.4.127)\n", + "Requirement already satisfied: nvidia-cuda-cupti-cu12==12.4.127 in /usr/local/lib/python3.11/dist-packages (from torch>=1.11.0->sentence-transformers) (12.4.127)\n", + "Requirement already satisfied: nvidia-cudnn-cu12==9.1.0.70 in /usr/local/lib/python3.11/dist-packages (from torch>=1.11.0->sentence-transformers) (9.1.0.70)\n", + "Requirement already satisfied: nvidia-cublas-cu12==12.4.5.8 in /usr/local/lib/python3.11/dist-packages (from torch>=1.11.0->sentence-transformers) (12.4.5.8)\n", + "Requirement already satisfied: nvidia-cufft-cu12==11.2.1.3 in /usr/local/lib/python3.11/dist-packages (from torch>=1.11.0->sentence-transformers) (11.2.1.3)\n", + "Requirement already satisfied: nvidia-curand-cu12==10.3.5.147 in /usr/local/lib/python3.11/dist-packages (from torch>=1.11.0->sentence-transformers) (10.3.5.147)\n", + "Requirement already satisfied: nvidia-cusolver-cu12==11.6.1.9 in /usr/local/lib/python3.11/dist-packages (from torch>=1.11.0->sentence-transformers) (11.6.1.9)\n", + "Requirement already satisfied: nvidia-cusparse-cu12==12.3.1.170 in /usr/local/lib/python3.11/dist-packages (from torch>=1.11.0->sentence-transformers) (12.3.1.170)\n", + "Requirement already satisfied: nvidia-nccl-cu12==2.21.5 in /usr/local/lib/python3.11/dist-packages (from torch>=1.11.0->sentence-transformers) (2.21.5)\n", + "Requirement already satisfied: nvidia-nvtx-cu12==12.4.127 in /usr/local/lib/python3.11/dist-packages (from torch>=1.11.0->sentence-transformers) (12.4.127)\n", + "Requirement already satisfied: nvidia-nvjitlink-cu12==12.4.127 in /usr/local/lib/python3.11/dist-packages (from torch>=1.11.0->sentence-transformers) (12.4.127)\n", + "Requirement already satisfied: triton==3.1.0 in /usr/local/lib/python3.11/dist-packages (from torch>=1.11.0->sentence-transformers) (3.1.0)\n", + "Requirement already satisfied: sympy==1.13.1 in /usr/local/lib/python3.11/dist-packages (from torch>=1.11.0->sentence-transformers) (1.13.1)\n", + "Requirement already satisfied: mpmath<1.4,>=1.1.0 in /usr/local/lib/python3.11/dist-packages (from sympy==1.13.1->torch>=1.11.0->sentence-transformers) (1.3.0)\n", + "Requirement already satisfied: tokenizers<0.22,>=0.21 in /usr/local/lib/python3.11/dist-packages (from transformers<5.0.0,>=4.41.0->sentence-transformers) (0.21.0)\n", + "Requirement already satisfied: safetensors>=0.4.1 in /usr/local/lib/python3.11/dist-packages (from transformers<5.0.0,>=4.41.0->sentence-transformers) (0.5.2)\n", + "Requirement already satisfied: python-dateutil>=2.8.2 in /usr/local/lib/python3.11/dist-packages (from pandas->datasets) (2.8.2)\n", + "Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.11/dist-packages (from pandas->datasets) (2025.1)\n", + "Requirement already satisfied: tzdata>=2022.7 in /usr/local/lib/python3.11/dist-packages (from pandas->datasets) (2025.1)\n", + "Requirement already satisfied: joblib>=1.2.0 in /usr/local/lib/python3.11/dist-packages (from scikit-learn->sentence-transformers) (1.4.2)\n", + "Requirement already satisfied: threadpoolctl>=3.1.0 in /usr/local/lib/python3.11/dist-packages (from scikit-learn->sentence-transformers) (3.5.0)\n", + "Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.11/dist-packages (from python-dateutil>=2.8.2->pandas->datasets) (1.17.0)\n", + "Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.11/dist-packages (from jinja2->torch>=1.11.0->sentence-transformers) (3.0.2)\n" + ] + } + ], + "source": [ + "!pip install pinecone-client openai sentence-transformers tiktoken datasets" ] - }, - "execution_count": 161, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "index.describe_index_stats()" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "7f2fdfe7", - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 35 }, - "id": "7f2fdfe7", - "outputId": "4c41491f-5ce8-415e-f792-e149e470b267" - }, - "outputs": [ { - "data": { - "text/plain": [ - "'ae76cc4dfd345ecaeea9b8ba0d5c3437'" + "cell_type": "code", + "execution_count": 2, + "id": "c12182ab", + "metadata": { + "id": "c12182ab" + }, + "outputs": [], + "source": [ + "from openai import OpenAI\n", + "from datetime import datetime\n", + "import hashlib\n", + "import re\n", + "import os\n", + "from sentence_transformers import CrossEncoder\n", + "\n", + "\n", + "from tqdm import tqdm\n", + "import numpy as np\n", + "from torch import nn\n", + "\n", + "import logging\n", + "from pinecone import Pinecone, ServerlessSpec\n", + "\n", + "logger = logging.getLogger()\n", + "logger.setLevel(logging.CRITICAL)\n" ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "def my_hash(s):\n", - " # Return the MD5 hash of the input string as a hexadecimal string\n", - " return hashlib.md5(s.encode()).hexdigest()\n", - "\n", - "my_hash('I love to hash it')" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "ecd86f51", - "metadata": { - "id": "ecd86f51" - }, - "outputs": [], - "source": [ - "def prepare_for_pinecone(texts, engine=ENGINE):\n", - " # Get the current UTC date and time\n", - " now = datetime.utcnow()\n", - "\n", - " # Generate vector embeddings for each string in the input list, using the specified engine\n", - " embeddings = get_embeddings(texts, engine=engine)\n", - "\n", - " # Create tuples of (hash, embedding, metadata) for each input string and its corresponding vector embedding\n", - " # The my_hash() function is used to generate a unique hash for each string, and the datetime.utcnow() function is used to generate the current UTC date and time\n", - " return [\n", - " (\n", - " my_hash(text), # A unique ID for each string, generated using the my_hash() function\n", - " embedding, # The vector embedding of the string\n", - " dict(text=text, date_uploaded=now) # A dictionary of metadata, including the original text and the current UTC date and time\n", - " )\n", - " for text, embedding in zip(texts, embeddings) # Iterate over each input string and its corresponding vector embedding\n", - " ]\n" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "4c40d99a", - "metadata": { - "id": "4c40d99a" - }, - "outputs": [], - "source": [ - "texts = ['hi']" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "3e1b73f3", - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "3e1b73f3", - "outputId": "eeba3b54-c2e5-481c-f340-3e3802c79b38" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "ID: 49f68a5c8493ec2c0bf489821c21fc3b \n", - "LEN: 3072 \n", - "META: {'text': 'hi', 'date_uploaded': datetime.datetime(2024, 7, 1, 16, 33, 16, 847362)}\n" - ] - } - ], - "source": [ - "_id, embedding, metadata = prepare_for_pinecone(texts)[0]\n", - "\n", - "print('ID: ',_id, '\\nLEN: ', len(embedding), '\\nMETA:', metadata)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b49debd5", - "metadata": { - "id": "b49debd5" - }, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "bf47aabd", - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" }, - "id": "bf47aabd", - "outputId": "0cdc3643-d204-4d4f-9ed4-3f632a4328fb" - }, - "outputs": [], - "source": [ - "def upload_texts_to_pinecone(texts, namespace=NAMESPACE, batch_size=None, show_progress_bar=False):\n", - " # Call the prepare_for_pinecone function to prepare the input texts for indexing\n", - " total_upserted = 0\n", - " if not batch_size:\n", - " batch_size = len(texts)\n", - "\n", - " _range = range(0, len(texts), batch_size)\n", - " for i in tqdm(_range) if show_progress_bar else _range:\n", - " batch = texts[i: i + batch_size]\n", - " prepared_texts = prepare_for_pinecone(batch)\n", - "\n", - " # Use the upsert() method of the index object to upload the prepared texts to Pinecone\n", - " total_upserted += index.upsert(\n", - " vectors=prepared_texts,\n", - " namespace=namespace\n", - " )['upserted_count']\n", - "\n", - "\n", - " return total_upserted\n", - "\n", - "# Call the upload_texts_to_pinecone() function with the input texts\n", - "upload_texts_to_pinecone(texts)\n" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "id": "V0XI6RAom-Ln", - "metadata": { - "id": "V0XI6RAom-Ln" - }, - "outputs": [], - "source": [ - "def query_from_pinecone(query, top_k=3, include_metadata=True):\n", - " # get embedding from THE SAME embedder as the documents\n", - " query_embedding = get_embedding(query, engine=ENGINE)\n", - "\n", - " return index.query(\n", - " vector=query_embedding,\n", - " top_k=top_k,\n", - " namespace=NAMESPACE,\n", - " include_metadata=include_metadata # gets the metadata (dates, text, etc)\n", - " ).get('matches')" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "id": "84a0871f", - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "84a0871f", - "outputId": "cf32ed08-348f-4be0-a647-cf0546ca0c2d" - }, - "outputs": [], - "source": [ - "def delete_texts_from_pinecone(texts, namespace=NAMESPACE):\n", - " # Compute the hash (id) for each text\n", - " hashes = [hashlib.md5(text.encode()).hexdigest() for text in texts]\n", - "\n", - " # The ids parameter is used to specify the list of IDs (hashes) to delete\n", - " return index.delete(ids=hashes, namespace=namespace)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "a6a5172f-a0c6-4692-ab77-83321e141679", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "4523cab6-0bc3-4791-9c73-7bd7d7e5858b", - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "4523cab6-0bc3-4791-9c73-7bd7d7e5858b", - "outputId": "768dff70-122a-458d-b26b-ef915dee80e5" - }, - "outputs": [ { - "data": { - "text/plain": [ - "DatasetDict({\n", - " test: Dataset({\n", - " features: ['id', 'title', 'context', 'question', 'answers'],\n", - " num_rows: 1148\n", - " })\n", - " train: Dataset({\n", - " features: ['id', 'title', 'context', 'question', 'answers'],\n", - " num_rows: 11590\n", - " })\n", - "})" + "cell_type": "code", + "execution_count": 4, + "id": "f0289c54", + "metadata": { + "id": "f0289c54" + }, + "outputs": [], + "source": [ + "pinecone_key = os.environ.get('PINECONE_API_KEY')\n", + "client = OpenAI(\n", + " api_key=os.environ.get(\"OPENAI_API_KEY\")\n", + ")\n", + "\n", + "INDEX_NAME = 'semantic-search-test'\n", + "NAMESPACE = 'default'\n", + "ENGINE = 'text-embedding-3-large' # has vector size 3072\n", + "\n", + "pc = Pinecone(\n", + " api_key=pinecone_key\n", + ")" ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "from datasets import load_dataset\n", - "\n", - "dataset = load_dataset(\"xtreme\", \"MLQA.en.en\")\n", - "\n", - "# rename test -> train and val -> test (as we will use it in later in this chapter)\n", - "dataset['train'] = dataset['test']\n", - "dataset['test'] = dataset['validation']\n", - "del dataset['validation']\n", - "\n", - "dataset" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "e622fbfa-2dde-4711-9c46-1390eb3430f9", - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" }, - "id": "e622fbfa-2dde-4711-9c46-1390eb3430f9", - "outputId": "8e7d6133-76ce-493a-963f-f29e05c6e0ba" - }, - "outputs": [ { - "data": { - "text/plain": [ - "({'id': 'a4968ca8a18de16aa3859be760e43dbd3af3fce9',\n", - " 'title': 'Area 51',\n", - " 'context': 'In 1994, five unnamed civilian contractors and the widows of contractors Walter Kasza and Robert Frost sued the USAF and the United States Environmental Protection Agency. Their suit, in which they were represented by George Washington University law professor Jonathan Turley, alleged they had been present when large quantities of unknown chemicals had been burned in open pits and trenches at Groom. Biopsies taken from the complainants were analyzed by Rutgers University biochemists, who found high levels of dioxin, dibenzofuran, and trichloroethylene in their body fat. The complainants alleged they had sustained skin, liver, and respiratory injuries due to their work at Groom, and that this had contributed to the deaths of Frost and Kasza. The suit sought compensation for the injuries they had sustained, claiming the USAF had illegally handled toxic materials, and that the EPA had failed in its duty to enforce the Resource Conservation and Recovery Act (which governs handling of dangerous materials). They also sought detailed information about the chemicals to which they were allegedly exposed, hoping this would facilitate the medical treatment of survivors. Congressman Lee H. Hamilton, former chairman of the House Intelligence Committee, told 60 Minutes reporter Lesley Stahl, \"The Air Force is classifying all information about Area 51 in order to protect themselves from a lawsuit.\"',\n", - " 'question': 'Who analyzed the biopsies?',\n", - " 'answers': {'answer_start': [457],\n", - " 'text': ['Rutgers University biochemists']}},\n", - " {'id': 'f251ea56c4f1aa1df270137f7e6d89c0cc1b6ef4',\n", - " 'title': 'Area 51',\n", - " 'context': 'In 1994, five unnamed civilian contractors and the widows of contractors Walter Kasza and Robert Frost sued the USAF and the United States Environmental Protection Agency. Their suit, in which they were represented by George Washington University law professor Jonathan Turley, alleged they had been present when large quantities of unknown chemicals had been burned in open pits and trenches at Groom. Biopsies taken from the complainants were analyzed by Rutgers University biochemists, who found high levels of dioxin, dibenzofuran, and trichloroethylene in their body fat. The complainants alleged they had sustained skin, liver, and respiratory injuries due to their work at Groom, and that this had contributed to the deaths of Frost and Kasza. The suit sought compensation for the injuries they had sustained, claiming the USAF had illegally handled toxic materials, and that the EPA had failed in its duty to enforce the Resource Conservation and Recovery Act (which governs handling of dangerous materials). They also sought detailed information about the chemicals to which they were allegedly exposed, hoping this would facilitate the medical treatment of survivors. Congressman Lee H. Hamilton, former chairman of the House Intelligence Committee, told 60 Minutes reporter Lesley Stahl, \"The Air Force is classifying all information about Area 51 in order to protect themselves from a lawsuit.\"',\n", - " 'question': 'who represented robert frost and walter kasza in their suit?',\n", - " 'answers': {'answer_start': [218],\n", - " 'text': ['George Washington University law professor Jonathan Turley']}})" + "cell_type": "code", + "execution_count": 5, + "id": "3cf993a3-6d51-49f4-8968-60f654d6202d", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "3cf993a3-6d51-49f4-8968-60f654d6202d", + "outputId": "26e4b864-5bc3-4fd5-d250-1eba18b3b7f4" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(3072, 2)" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# helper functions to get lists of embeddings from the OpenAI API\n", + "def get_embeddings(texts, engine=ENGINE):\n", + " response = client.embeddings.create(\n", + " input=texts,\n", + " model=engine\n", + " )\n", + "\n", + " return [d.embedding for d in list(response.data)]\n", + "\n", + "def get_embedding(text, engine=ENGINE):\n", + " return get_embeddings([text], engine)[0]\n", + "\n", + "len(get_embedding('hi')), len(get_embeddings(['hi', 'hello']))" ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "dataset['train'][0], dataset['train'][1]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "0221343a", - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" }, - "id": "0221343a", - "outputId": "5ab7c522-23ea-467c-be72-fe031432fbdc" - }, - "outputs": [ { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████| 31/31 [01:28<00:00, 2.87s/it]\n" - ] - } - ], - "source": [ - "unique_passages = list(set(dataset['test']['context']))\n", - "for idx in tqdm(range(0, len(unique_passages), 32)):\n", - " passages = unique_passages[idx:idx + 32]\n", - " upload_texts_to_pinecone(passages)\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "796a7c80-7149-430e-b22c-9926c0d1daee", - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "796a7c80-7149-430e-b22c-9926c0d1daee", - "outputId": "5fc883f2-230a-4fbf-d186-a60f5dd3573a" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "978" + "cell_type": "code", + "execution_count": 6, + "id": "ea70672a", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "ea70672a", + "outputId": "f7fa123a-079a-4c38-d43c-f8b4a760440d" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "if INDEX_NAME not in pc.list_indexes().names():\n", + " print(f'Creating index {INDEX_NAME}')\n", + " pc.create_index(\n", + " name=INDEX_NAME, # The name of the index\n", + " dimension=3072, # The dimensionality of the vectors for our OpenAI embedder\n", + " metric='cosine', # The similarity metric to use when searching the index\n", + " spec=ServerlessSpec(\n", + " cloud='aws',\n", + " region='us-west-2'\n", + " )\n", + " )\n", + "\n", + "# Store the index as a variable\n", + "index = pc.Index(name=INDEX_NAME)\n", + "index" ] - }, - "execution_count": 163, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(unique_passages)" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "id": "33yf7QrWtwt-", - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" }, - "id": "33yf7QrWtwt-", - "outputId": "9e8d30a5-b1b3-43f7-ad6d-bec8135fc5ee" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "{'dimension': 3072,\n", - " 'index_fullness': 0.0,\n", - " 'namespaces': {'default': {'vector_count': 978}},\n", - " 'total_vector_count': 978}" - ] - }, - "execution_count": 21, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "index.describe_index_stats()" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "id": "432b021b-2cdb-4d73-a2c6-f2e0d1eb5ffc", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'id': '569666f4dc3983dab5624e989212c1d9d0cd1798',\n", - " 'title': 'Pappataci fever',\n", - " 'context': 'Pappataci fever is prevalent in the subtropical zone of the Eastern Hemisphere between 20°N and 45°N, particularly in Southern Europe, North Africa, the Balkans, Eastern Mediterranean, Iraq, Iran, Pakistan, Afghanistan and India.The disease is transmitted by the bites of phlebotomine sandflies of the Genus Phlebotomus, in particular, Phlebotomus papatasi, Phlebotomus perniciosus and Phlebotomus perfiliewi. The sandfly becomes infected when biting an infected human in the period between 48 hours before the onset of fever and 24 hours after the end of the fever, and remains infected for its lifetime. Besides this horizontal virus transmission from man to sandfly, the virus can be transmitted in insects transovarially, from an infected female sandfly to its offspring.Pappataci fever is seldom recognised in endemic populations because it is mixed with other febrile illnesses of childhood, but it is more well-known among immigrants and military personnel from non-endemic regions.',\n", - " 'question': 'Does an infection for Sandflies go away over time?',\n", - " 'answers': {'answer_start': [571],\n", - " 'text': ['remains infected for its lifetime']}}" - ] - }, - "execution_count": 27, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "dataset['test'][0]" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "id": "36e13316-2295-4a72-8f2a-b459f0e7826a", - "metadata": { - "scrolled": true - }, - "outputs": [ { - "data": { - "text/plain": [ - "[{'id': '2f90090e21f19450887d5f3ff781e541',\n", - " 'metadata': {'date_uploaded': '2024-02-04T15:47:20.914703',\n", - " 'text': 'Pappataci fever is prevalent in the subtropical zone of '\n", - " 'the Eastern Hemisphere between 20°N and 45°N, '\n", - " 'particularly in Southern Europe, North Africa, the '\n", - " 'Balkans, Eastern Mediterranean, Iraq, Iran, Pakistan, '\n", - " 'Afghanistan and India.The disease is transmitted by the '\n", - " 'bites of phlebotomine sandflies of the Genus '\n", - " 'Phlebotomus, in particular, Phlebotomus papatasi, '\n", - " 'Phlebotomus perniciosus and Phlebotomus perfiliewi. The '\n", - " 'sandfly becomes infected when biting an infected human '\n", - " 'in the period between 48 hours before the onset of '\n", - " 'fever and 24 hours after the end of the fever, and '\n", - " 'remains infected for its lifetime. Besides this '\n", - " 'horizontal virus transmission from man to sandfly, the '\n", - " 'virus can be transmitted in insects transovarially, '\n", - " 'from an infected female sandfly to its '\n", - " 'offspring.Pappataci fever is seldom recognised in '\n", - " 'endemic populations because it is mixed with other '\n", - " 'febrile illnesses of childhood, but it is more '\n", - " 'well-known among immigrants and military personnel from '\n", - " 'non-endemic regions.'},\n", - " 'score': 0.436064631,\n", - " 'values': []},\n", - " {'id': '00661b04eb84a4664717245513ea30cd',\n", - " 'metadata': {'date_uploaded': '2024-02-04T15:46:50.126453',\n", - " 'text': 'Paratyphoid fever, also known simply as paratyphoid, is '\n", - " 'a bacterial infection caused by one of the three types '\n", - " 'of Salmonella enterica. Symptoms usually begin 6–30 '\n", - " 'days after exposure and are the same as those of '\n", - " 'typhoid fever. Often, a gradual onset of a high fever '\n", - " 'occurs over several days. Weakness, loss of appetite, '\n", - " 'and headaches also commonly occur. Some people develop '\n", - " 'a skin rash with rose-colored spots. Without treatment, '\n", - " 'symptoms may last weeks or months. Other people may '\n", - " 'carry the bacteria without being affected; however, '\n", - " 'they are still able to spread the disease to others. '\n", - " 'Both typhoid and paratyphoid are of similar severity. '\n", - " 'Paratyphoid and typhoid fever are types of enteric '\n", - " 'fever.Paratyphoid is caused by the bacterium Salmonella '\n", - " 'enterica of the serotypes Paratyphi A, Paratyphi B, or '\n", - " 'Paratyphi C growing in the intestines and blood. They '\n", - " 'are usually spread by eating or drinking food or water '\n", - " 'contaminated with the feces of an infected person. They '\n", - " 'may occur when a person who prepares food is infected. '\n", - " 'Risk factors include poor sanitation as is found among '\n", - " 'poor crowded populations. Occasionally, they may be '\n", - " 'transmitted by sex. Humans are the only animals '\n", - " 'infected. Diagnosis may be based on symptoms and '\n", - " 'confirmed by either culturing the bacteria or detecting '\n", - " 'the bacterial DNA in the blood, stool, or bone marrow. '\n", - " 'Culturing the bacteria can be difficult. Bone-marrow '\n", - " 'testing is the most accurate. Symptoms are similar to '\n", - " 'that of many other infectious diseases. Typhus is an '\n", - " 'unrelated disease.While no vaccine is available '\n", - " 'specifically for paratyphoid, the typhoid vaccine may '\n", - " 'provide some benefit. Prevention includes drinking '\n", - " 'clean water, better sanitation, and better handwashing. '\n", - " 'Treatment of the disease is with antibiotics such as '\n", - " 'azithromycin. Resistance to a number of other '\n", - " 'previously effective antibiotics is common.Paratyphoid '\n", - " 'affects about six million people a year. It is most '\n", - " 'common in parts of Asia and rare in the developed '\n", - " 'world. Most cases are due to Paratyphi A rather than '\n", - " 'Paratyphi B or C. In 2015, paratyphoid fever resulted '\n", - " 'in about 29,200 deaths, down from 63,000 deaths in '\n", - " '1990. The risk of death is between 10 and 15% without '\n", - " 'treatment, while with treatment, it may be less than '\n", - " '1%.'},\n", - " 'score': 0.325077146,\n", - " 'values': []},\n", - " {'id': '24d322a7ce10e9e2fa12fcf54f50c651',\n", - " 'metadata': {'date_uploaded': '2024-02-04T15:47:04.001270',\n", - " 'text': 'Although Aronson isolated this mycobacterium in 1926 '\n", - " 'from a fish, it was not until 1951 that it was found to '\n", - " 'be the cause of human disease by Linell and Norden. '\n", - " 'Large outbreaks of infection due to this atypical '\n", - " 'mycobacterium have been described in association with '\n", - " 'swimming. Infections related to swimming pools have now '\n", - " 'drastically fallen due to the improvements in the '\n", - " 'construction and maintenance of these facilities.The '\n", - " 'first case of M. marinum infection associated with a '\n", - " \"fish-tank ('fish-tank granuloma') was reported in 1962 \"\n", - " 'by Swift and Cohen. M. marinum infection may be an '\n", - " 'occupational hazard for certain professions such as pet '\n", - " 'shop workers, but most infections occur in fish '\n", - " 'fanciers who keep an aquarium at home. Although '\n", - " 'infection may be caused by direct injury from the fish '\n", - " 'fins or bites, most are acquired during the handling of '\n", - " 'the aquariums such as cleaning or changing the water. '\n", - " 'Indirect infection has also been described related to a '\n", - " 'child’s bathing utensils that had been used to clean a '\n", - " 'fish tank. Due to an increased awareness of the disease '\n", - " 'and improved isolation methods, more and more cases are '\n", - " 'being recognized and reported worldwide.'},\n", - " 'score': 0.301440448,\n", - " 'values': []}]" + "cell_type": "code", + "execution_count": 8, + "id": "7f2fdfe7", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 35 + }, + "id": "7f2fdfe7", + "outputId": "7d863252-0f5c-47b7-ec90-881aedf7102d" + }, + "outputs": [ + { + "data": { + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "string" + }, + "text/plain": [ + "'ae76cc4dfd345ecaeea9b8ba0d5c3437'" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def my_hash(s):\n", + " # Return the MD5 hash of the input string as a hexadecimal string\n", + " return hashlib.md5(s.encode()).hexdigest()\n", + "\n", + "my_hash('I love to hash it')" ] - }, - "execution_count": 28, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "query_from_pinecone('Does an infection for Sandflies go away over time?')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "5b92699e-2d92-4083-9508-ae47355c9c1a", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "206ab80e-f4b4-48d2-8aef-b522024f6658", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "7e180a25-37e4-47a8-8ae8-a49f39c106ab", - "metadata": {}, - "source": [ - "# Part 2: Making results more relevant with a cross-encoder" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "id": "074fab6f", - "metadata": { - "id": "074fab6f" - }, - "outputs": [], - "source": [ - "# if you didn't import before\n", - "\n", - "from sentence_transformers.cross_encoder import CrossEncoder\n", - "import numpy as np\n", - "from torch import nn" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "id": "414fc2d5", - "metadata": { - "id": "414fc2d5" - }, - "outputs": [], - "source": [ - "from copy import copy\n", - "\n", - "def get_results_from_pinecone(query, top_k=3, re_rank_model=None, verbose=True, correct_hash=None):\n", - " results_from_pinecone = query_from_pinecone(query, top_k=top_k)\n", - " if not results_from_pinecone:\n", - " return []\n", - " if verbose:\n", - " print(\"Query:\", query)\n", - " final_results = []\n", - "\n", - " retrieved_correct_position, reranked_correct_position = None, None\n", - " for idx, result_from_pinecone in enumerate(results_from_pinecone):\n", - " if correct_hash and result_from_pinecone['id'] == correct_hash:\n", - " retrieved_correct_position = idx\n", - "\n", - " if re_rank_model is not None:\n", - " if verbose:\n", - " print('Document ID (Hash)\\t\\tRetrieval Score\\tCE Score\\tText')\n", - "\n", - " sentence_combinations = [[query, result_from_pinecone['metadata']['text']] for result_from_pinecone in results_from_pinecone]\n", - "\n", - " # Compute the similarity scores for these combinations\n", - " similarity_scores = re_rank_model.predict(sentence_combinations, activation_fct=nn.Sigmoid())\n", - "\n", - " # Sort the scores in decreasing order\n", - " sim_scores_argsort = list(reversed(np.argsort(similarity_scores)))\n", - " sim_scores_sort = list(reversed(np.sort(similarity_scores)))\n", - " top_re_rank_score = sim_scores_sort[0]\n", - "\n", - " # Print the scores\n", - " for idx in sim_scores_argsort:\n", - " result_from_pinecone = results_from_pinecone[idx]\n", - " if correct_hash and result_from_pinecone['id'] == correct_hash:\n", - " reranked_correct_position = idx\n", - " final_results.append({'score': similarity_scores[idx], 'id': result_from_pinecone['id'], 'metadata': result_from_pinecone['metadata']})\n", - " if verbose:\n", - " print(f\"{result_from_pinecone['id']}\\t{result_from_pinecone['score']:.2f}\\t{similarity_scores[idx]:.6f}\\t{result_from_pinecone['metadata']['text'][:50]}\")\n", - " return {'final_results': final_results, 'retrieved_correct_position': retrieved_correct_position, 'reranked_correct_position': reranked_correct_position, 'results_from_pinecone': results_from_pinecone, 'top_re_rank_score': top_re_rank_score}\n", - "\n", - " if verbose:\n", - " print('Document ID (Hash)\\t\\tRetrieval Score\\tText')\n", - " for result_from_pinecone in results_from_pinecone:\n", - " final_results.append(result_from_pinecone)\n", - " if verbose:\n", - " print(f\"{result_from_pinecone['id']}\\t{result_from_pinecone['score']:.2f}\\t{result_from_pinecone['metadata']['text'][:50]}\")\n", - "\n", - " return {'final_results': final_results, 'retrieved_correct_position': retrieved_correct_position, 'reranked_correct_position': reranked_correct_position}" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "118a061c-db0a-4903-8260-46c6f15189ae", - "metadata": { - "id": "118a061c-db0a-4903-8260-46c6f15189ae" - }, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 36, - "id": "b25a8a8f-e873-43e7-9f56-b57bdf328416", - "metadata": { - "id": "b25a8a8f-e873-43e7-9f56-b57bdf328416" - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/opt/homebrew/lib/python3.11/site-packages/huggingface_hub/file_download.py:1132: FutureWarning: `resume_download` is deprecated and will be removed in version 1.0.0. Downloads always resume when possible. If you want to force a new download, use `force_download=True`.\n", - " warnings.warn(\n" - ] - } - ], - "source": [ - "# Pre-trained cross encoder\n", - "cross_encoder = CrossEncoder('cross-encoder/ms-marco-MiniLM-L-12-v2', num_labels=1)\n", - "\n", - "q_to_hash = {data['question']: my_hash(data['context']) for data in dataset['test']}" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "id": "vptFN0wPw0uS", - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" }, - "id": "vptFN0wPw0uS", - "outputId": "72a9e946-3b3a-429b-b476-a945e94e26ec" - }, - "outputs": [ { - "data": { - "text/plain": [ - "1148" - ] - }, - "execution_count": 32, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "unique_inputs = list(set(dataset['test']['question']))\n", - "len(unique_inputs)" - ] - }, - { - "cell_type": "code", - "execution_count": 60, - "id": "dc56237c-f9d6-4b3d-a8ac-31098cf4f904", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "How close did John make it to Johnston Atoll?\n", - "The origins of Hurricane John were thought by the United States National Hurricane Center (NHC) to be from a tropical wave that moved off the coast of Africa on July 25, 1994. The wave subsequently moved across the Atlantic Ocean and Caribbean without distinction, before it crossed Central America and moved into the Eastern Pacific Ocean on or around August 8. Upon entering the Eastern Pacific the wave gradually developed, before the NHC initiated advisories on the system and designated it as Tropical Depression Ten-E during August 11. The system was at this time moving westwards and located around 345 miles (555 km) to the south-southeast of Acapulco, Mexico. Quickly developing banding features and well-defined outflow, it was upgraded to a tropical storm and named John later that day.A strong ridge of high pressure over the northeastern Pacific Ocean forced John westward, where upper level wind shear kept John a tropical storm. Intensity fluctuated considerably, however, as shear levels varied. More than once, shear cleared away most of the clouds above John and nearly caused it to weaken to a tropical depression. However, after eight days of slow westward movement across the Pacific Ocean, shear lessened greatly on August 19, and John intensified significantly and was designated as a hurricane at 17:00 PDT. During an eighteen-hour period between August 19 and August 20, John further strengthened from a weak Category 1 hurricane to a Category 3 major hurricane. Around 1100 PDT on August 20, John crossed into the central Pacific, the first of three basin crosses John would make.After entering the central Pacific, John left the area monitored by the NHC and was instead monitored by the Central Pacific Hurricane Center (CPHC). As the storm moved slowly westward, Hurricane John continued to strengthen considerably in an increasingly favorable environment well south of the Hawaiian Islands; on August 22, John was designated a Category 5 hurricane on the Saffir–Simpson hurricane scale (the highest classification for hurricanes) and later that day (by Hawaii Standard Time) reached its peak intensity, with 1-minute sustained winds of 175 miles per hour (280 km/h) and a minimum central pressure of 929 millibars (27.4 inHg). Also, on August 22 (by Hawaii Standard Time), John made its closest approach to the Hawaiian Islands, 345 miles (500 km) to the south. John had threatened to turn north and affect the islands days before, but the ridge of high pressure that typically shields the islands from hurricanes kept John on its southerly path. Nonetheless, heavy rains and wind from the outer bands of John affected the islands.With the Hawaiian Islands behind it, John began a slow turn to the north, taking near-direct aim at Johnston Atoll, a small group of islands populated only by a United States military base. The storm slowly weakened from its peak as a Category 5 hurricane in the face of increasing shear, dropping down to a Category 1 hurricane with 90 miles per hour (145 km/h) maximum winds. On August 25 local time, John made its closest approach to the Johnston Atoll only 15 miles (24 km) to the north. On Johnston Atoll, sustained winds were reported up to 60 miles per hour (95 km/h), the equivalent of a strong tropical storm, and gusts up to 75 miles per hour (120 km/h) were recorded.\n" - ] - } - ], - "source": [ - "query = unique_inputs[0]\n", - "print(query)\n", - "\n", - "for t in dataset['test']:\n", - " if t['question'] == query:\n", - " print(t['context'])" - ] - }, - { - "cell_type": "code", - "execution_count": 61, - "id": "4b0da5ac-0345-45e2-9913-188590a31522", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(None, None)" - ] - }, - "execution_count": 61, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "query_result = get_results_from_pinecone(\n", - " query, \n", - " top_k=2, # grab 2 results\n", - " re_rank_model=cross_encoder, \n", - " correct_hash=q_to_hash[query],\n", - " verbose=False\n", - " )\n", - "\n", - "query_result['retrieved_correct_position'], query_result['reranked_correct_position']" - ] - }, - { - "cell_type": "code", - "execution_count": 62, - "id": "dfbb3b3c-9baa-4298-abd8-0e7b75dd24ec", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "{'final_results': [{'score': 0.99843186,\n", - " 'id': 'a76b6a3dfcbdb1ca832bbf40710ad2c8',\n", - " 'metadata': {'date_uploaded': '2024-02-04T15:46:32.060499',\n", - " 'text': \"John affected both the Hawaiian Islands and Johnston Atoll, but only lightly. While John passed over 345 miles (550 km) to the south of Hawaiʻi, the islands did experience strengthened trade winds and rough surf along the southeast- and south-facing shores, and, while moving westward, on west-facing shores as well. The waves, ranging from 6 to 10 ft (1.8 to 3.0 m) in height, flooded beach parks in Kailua-Kona. Additionally, heavy rains on the Big Island of Hawaiʻi caused minor, localized flooding and some short-term road closures. No deaths, injuries or significant damages were reported in Hawaiʻi.Although John passed within 25 km (16 mi) of Johnston Atoll, it had weakened greatly to a Category 1 system by closest approach. Prior to the storm's arrival, waves between 20 and 30 ft (6.1 and 9.1 m) were reported on the island. Additionally, in the Northern Hemisphere, the strongest winds and heaviest rain lie to the north of a tropical cyclone, so the atoll, which lay to the south of the storm's path, was spared the brunt of the storm. Nonetheless, the 1,100-man personnel for the United States military base on Johnston Atoll had been evacuated to Honolulu as a precaution while John approached. Damage to structures was considerable, but the size of the island and relative functionality of the base led to low damage; monetary losses were estimated at close to $15 million (1994 US$).The remnants of John moved through the Aleutian Islands, producing a wind gust of 46 mph (74 km/h) in Unalaska. The storm brought a plume of warm air, and two stations recorded a high temperature of 66 °F (19 °C).\"}},\n", - " {'score': 0.991396,\n", - " 'id': '8f3fd30f7d46c05089f7f84d71806b77',\n", - " 'metadata': {'date_uploaded': '2024-02-04T15:46:41.323346',\n", - " 'text': \"Clearing Johnston Atoll, John turned to the northwest and began strengthening again as shear decreased. On August 27 local time, John reached a secondary peak strength of 135 miles per hour (210 km/h), and shortly thereafter it crossed the International Date Line at approximately 22° N and came under the surveillance of the Guam branch of the Joint Typhoon Warning Center (JTWC). By crossing into the western Pacific, John also became a typhoon and was referred to as Typhoon John during its time in the western Pacific. Immediately after crossing the Date Line, John again weakened and its forward motion stalled. By September 1, John had weakened to a tropical storm and was nearly motionless just west of the Date Line. There, John lingered for six days while performing a multi-day counterclockwise loop. On September 7, a trough moved into the area and quickly moved John to the northeast. John crossed the Date Line again on September 8 and reentered the central Pacific.After reentering the central Pacific, John briefly reached a tertiary peak strength of 90 miles per hour (145 km/h), a strong Category 1 hurricane, well to the north of Midway Island. However, the trough was rapidly pulling apart John's structure, and the cold waters of the northern central Pacific were not conducive to a tropical cyclone. On September 10, the 120th advisory was released on the system, finally declaring John to have become extratropical approximately 1,000 miles (1600 km) south of Unalaska Island.\"}}],\n", - " 'retrieved_correct_position': None,\n", - " 'reranked_correct_position': None,\n", - " 'results_from_pinecone': [{'id': 'a76b6a3dfcbdb1ca832bbf40710ad2c8',\n", - " 'metadata': {'date_uploaded': '2024-02-04T15:46:32.060499',\n", - " 'text': 'John affected both the Hawaiian Islands and Johnston '\n", - " 'Atoll, but only lightly. While John passed over 345 '\n", - " 'miles (550 km) to the south of Hawaiʻi, the islands did '\n", - " 'experience strengthened trade winds and rough surf '\n", - " 'along the southeast- and south-facing shores, and, '\n", - " 'while moving westward, on west-facing shores as well. '\n", - " 'The waves, ranging from 6 to 10 ft (1.8 to 3.0 m) in '\n", - " 'height, flooded beach parks in Kailua-Kona. '\n", - " 'Additionally, heavy rains on the Big Island of Hawaiʻi '\n", - " 'caused minor, localized flooding and some short-term '\n", - " 'road closures. No deaths, injuries or significant '\n", - " 'damages were reported in Hawaiʻi.Although John passed '\n", - " 'within 25 km (16 mi) of Johnston Atoll, it had weakened '\n", - " 'greatly to a Category 1 system by closest approach. '\n", - " \"Prior to the storm's arrival, waves between 20 and 30 \"\n", - " 'ft (6.1 and 9.1 m) were reported on the island. '\n", - " 'Additionally, in the Northern Hemisphere, the strongest '\n", - " 'winds and heaviest rain lie to the north of a tropical '\n", - " 'cyclone, so the atoll, which lay to the south of the '\n", - " \"storm's path, was spared the brunt of the storm. \"\n", - " 'Nonetheless, the 1,100-man personnel for the United '\n", - " 'States military base on Johnston Atoll had been '\n", - " 'evacuated to Honolulu as a precaution while John '\n", - " 'approached. Damage to structures was considerable, but '\n", - " 'the size of the island and relative functionality of '\n", - " 'the base led to low damage; monetary losses were '\n", - " 'estimated at close to $15 million (1994 US$).The '\n", - " 'remnants of John moved through the Aleutian Islands, '\n", - " 'producing a wind gust of 46 mph (74 km/h) in Unalaska. '\n", - " 'The storm brought a plume of warm air, and two stations '\n", - " 'recorded a high temperature of 66 °F (19 °C).'},\n", - " 'score': 0.593409777,\n", - " 'values': []},\n", - " {'id': '8f3fd30f7d46c05089f7f84d71806b77',\n", - " 'metadata': {'date_uploaded': '2024-02-04T15:46:41.323346',\n", - " 'text': 'Clearing Johnston Atoll, John turned to the northwest '\n", - " 'and began strengthening again as shear decreased. On '\n", - " 'August 27 local time, John reached a secondary peak '\n", - " 'strength of 135 miles per hour (210 km/h), and shortly '\n", - " 'thereafter it crossed the International Date Line at '\n", - " 'approximately 22° N and came under the surveillance of '\n", - " 'the Guam branch of the Joint Typhoon Warning Center '\n", - " '(JTWC). By crossing into the western Pacific, John also '\n", - " 'became a typhoon and was referred to as Typhoon John '\n", - " 'during its time in the western Pacific. Immediately '\n", - " 'after crossing the Date Line, John again weakened and '\n", - " 'its forward motion stalled. By September 1, John had '\n", - " 'weakened to a tropical storm and was nearly motionless '\n", - " 'just west of the Date Line. There, John lingered for '\n", - " 'six days while performing a multi-day counterclockwise '\n", - " 'loop. On September 7, a trough moved into the area and '\n", - " 'quickly moved John to the northeast. John crossed the '\n", - " 'Date Line again on September 8 and reentered the '\n", - " 'central Pacific.After reentering the central Pacific, '\n", - " 'John briefly reached a tertiary peak strength of 90 '\n", - " 'miles per hour (145 km/h), a strong Category 1 '\n", - " 'hurricane, well to the north of Midway Island. However, '\n", - " \"the trough was rapidly pulling apart John's structure, \"\n", - " 'and the cold waters of the northern central Pacific '\n", - " 'were not conducive to a tropical cyclone. On September '\n", - " '10, the 120th advisory was released on the system, '\n", - " 'finally declaring John to have become extratropical '\n", - " 'approximately 1,000 miles (1600 km) south of Unalaska '\n", - " 'Island.'},\n", - " 'score': 0.564386189,\n", - " 'values': []}],\n", - " 'top_re_rank_score': 0.99843186}" + "cell_type": "code", + "execution_count": 9, + "id": "ecd86f51", + "metadata": { + "id": "ecd86f51" + }, + "outputs": [], + "source": [ + "def prepare_for_pinecone(texts, engine=ENGINE):\n", + " # Get the current UTC date and time\n", + " now = datetime.utcnow()\n", + "\n", + " # Generate vector embeddings for each string in the input list, using the specified engine\n", + " embeddings = get_embeddings(texts, engine=engine)\n", + "\n", + " # Create tuples of (hash, embedding, metadata) for each input string and its corresponding vector embedding\n", + " # The my_hash() function is used to generate a unique hash for each string, and the datetime.utcnow() function is used to generate the current UTC date and time\n", + " return [\n", + " (\n", + " my_hash(text), # A unique ID for each string, generated using the my_hash() function\n", + " embedding, # The vector embedding of the string\n", + " dict(text=text, date_uploaded=now) # A dictionary of metadata, including the original text and the current UTC date and time\n", + " )\n", + " for text, embedding in zip(texts, embeddings) # Iterate over each input string and its corresponding vector embedding\n", + " ]\n" ] - }, - "execution_count": 62, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "query_result # the right context isn't there!" - ] - }, - { - "cell_type": "code", - "execution_count": 63, - "id": "caa66ac8-d69c-49a1-9f55-e9ef93379fec", - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" }, - "id": "caa66ac8-d69c-49a1-9f55-e9ef93379fec", - "outputId": "575fa7f5-32dc-4a03-8f31-01df1ee11cc4" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "(2, 2)" - ] - }, - "execution_count": 63, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "query_result = get_results_from_pinecone(\n", - " query, \n", - " top_k=10, # grab 10 results\n", - " re_rank_model=cross_encoder, correct_hash=q_to_hash[query],\n", - " verbose=False\n", - " )\n", - "\n", - "query_result['retrieved_correct_position'], query_result['reranked_correct_position']" - ] - }, - { - "cell_type": "code", - "execution_count": 64, - "id": "de1c0500-db49-4be2-8f3b-73ba96ec096b", - "metadata": {}, - "outputs": [ { - "data": { - "text/plain": [ - "{'final_results': [{'score': 0.998432,\n", - " 'id': 'a76b6a3dfcbdb1ca832bbf40710ad2c8',\n", - " 'metadata': {'date_uploaded': '2024-02-04T15:46:32.060499',\n", - " 'text': \"John affected both the Hawaiian Islands and Johnston Atoll, but only lightly. While John passed over 345 miles (550 km) to the south of Hawaiʻi, the islands did experience strengthened trade winds and rough surf along the southeast- and south-facing shores, and, while moving westward, on west-facing shores as well. The waves, ranging from 6 to 10 ft (1.8 to 3.0 m) in height, flooded beach parks in Kailua-Kona. Additionally, heavy rains on the Big Island of Hawaiʻi caused minor, localized flooding and some short-term road closures. No deaths, injuries or significant damages were reported in Hawaiʻi.Although John passed within 25 km (16 mi) of Johnston Atoll, it had weakened greatly to a Category 1 system by closest approach. Prior to the storm's arrival, waves between 20 and 30 ft (6.1 and 9.1 m) were reported on the island. Additionally, in the Northern Hemisphere, the strongest winds and heaviest rain lie to the north of a tropical cyclone, so the atoll, which lay to the south of the storm's path, was spared the brunt of the storm. Nonetheless, the 1,100-man personnel for the United States military base on Johnston Atoll had been evacuated to Honolulu as a precaution while John approached. Damage to structures was considerable, but the size of the island and relative functionality of the base led to low damage; monetary losses were estimated at close to $15 million (1994 US$).The remnants of John moved through the Aleutian Islands, producing a wind gust of 46 mph (74 km/h) in Unalaska. The storm brought a plume of warm air, and two stations recorded a high temperature of 66 °F (19 °C).\"}},\n", - " {'score': 0.991396,\n", - " 'id': '8f3fd30f7d46c05089f7f84d71806b77',\n", - " 'metadata': {'date_uploaded': '2024-02-04T15:46:41.323346',\n", - " 'text': \"Clearing Johnston Atoll, John turned to the northwest and began strengthening again as shear decreased. On August 27 local time, John reached a secondary peak strength of 135 miles per hour (210 km/h), and shortly thereafter it crossed the International Date Line at approximately 22° N and came under the surveillance of the Guam branch of the Joint Typhoon Warning Center (JTWC). By crossing into the western Pacific, John also became a typhoon and was referred to as Typhoon John during its time in the western Pacific. Immediately after crossing the Date Line, John again weakened and its forward motion stalled. By September 1, John had weakened to a tropical storm and was nearly motionless just west of the Date Line. There, John lingered for six days while performing a multi-day counterclockwise loop. On September 7, a trough moved into the area and quickly moved John to the northeast. John crossed the Date Line again on September 8 and reentered the central Pacific.After reentering the central Pacific, John briefly reached a tertiary peak strength of 90 miles per hour (145 km/h), a strong Category 1 hurricane, well to the north of Midway Island. However, the trough was rapidly pulling apart John's structure, and the cold waters of the northern central Pacific were not conducive to a tropical cyclone. On September 10, the 120th advisory was released on the system, finally declaring John to have become extratropical approximately 1,000 miles (1600 km) south of Unalaska Island.\"}},\n", - " {'score': 0.32219857,\n", - " 'id': '29f43cf2a1e4b7da49f726bbf846044f',\n", - " 'metadata': {'date_uploaded': '2024-02-04T15:46:58.291507',\n", - " 'text': 'The origins of Hurricane John were thought by the United States National Hurricane Center (NHC) to be from a tropical wave that moved off the coast of Africa on July 25, 1994. The wave subsequently moved across the Atlantic Ocean and Caribbean without distinction, before it crossed Central America and moved into the Eastern Pacific Ocean on or around August 8. Upon entering the Eastern Pacific the wave gradually developed, before the NHC initiated advisories on the system and designated it as Tropical Depression Ten-E during August 11. The system was at this time moving westwards and located around 345 miles (555 km) to the south-southeast of Acapulco, Mexico. Quickly developing banding features and well-defined outflow, it was upgraded to a tropical storm and named John later that day.A strong ridge of high pressure over the northeastern Pacific Ocean forced John westward, where upper level wind shear kept John a tropical storm. Intensity fluctuated considerably, however, as shear levels varied. More than once, shear cleared away most of the clouds above John and nearly caused it to weaken to a tropical depression. However, after eight days of slow westward movement across the Pacific Ocean, shear lessened greatly on August 19, and John intensified significantly and was designated as a hurricane at 17:00 PDT. During an eighteen-hour period between August 19 and August 20, John further strengthened from a weak Category 1 hurricane to a Category 3 major hurricane. Around 1100 PDT on August 20, John crossed into the central Pacific, the first of three basin crosses John would make.After entering the central Pacific, John left the area monitored by the NHC and was instead monitored by the Central Pacific Hurricane Center (CPHC). As the storm moved slowly westward, Hurricane John continued to strengthen considerably in an increasingly favorable environment well south of the Hawaiian Islands; on August 22, John was designated a Category 5 hurricane on the Saffir–Simpson hurricane scale (the highest classification for hurricanes) and later that day (by Hawaii Standard Time) reached its peak intensity, with 1-minute sustained winds of 175 miles per hour (280 km/h) and a minimum central pressure of 929 millibars (27.4 inHg). Also, on August 22 (by Hawaii Standard Time), John made its closest approach to the Hawaiian Islands, 345 miles (500 km) to the south. John had threatened to turn north and affect the islands days before, but the ridge of high pressure that typically shields the islands from hurricanes kept John on its southerly path. Nonetheless, heavy rains and wind from the outer bands of John affected the islands.With the Hawaiian Islands behind it, John began a slow turn to the north, taking near-direct aim at Johnston Atoll, a small group of islands populated only by a United States military base. The storm slowly weakened from its peak as a Category 5 hurricane in the face of increasing shear, dropping down to a Category 1 hurricane with 90 miles per hour (145 km/h) maximum winds. On August 25 local time, John made its closest approach to the Johnston Atoll only 15 miles (24 km) to the north. On Johnston Atoll, sustained winds were reported up to 60 miles per hour (95 km/h), the equivalent of a strong tropical storm, and gusts up to 75 miles per hour (120 km/h) were recorded.'}},\n", - " {'score': 0.00035284052,\n", - " 'id': '29d27c6f43d083d4c282bdb5e7ab51a2',\n", - " 'metadata': {'date_uploaded': '2024-02-04T15:45:56.884103',\n", - " 'text': 'At the same time, however, two separate ship reports indicated that John had sustained winds of at least 55 knots (100 km/h, 65 mph), far stronger than the advisory strength of 35 knots (65 km/h, 40 mph). John would go on to restrengthen into a strong Category 1 hurricane after reentering the Central North Pacific, defying all JTWC predictions. After later reanalysis, the JTWC raised the estimated wind speeds of John for every advisory from 1200 UTC September 1 to its final advisory exactly a week later by at least 5 knots (9 km/h, 6 mph) and as much as 25 knots (46 km/h, 29 mph).'}},\n", - " {'score': 0.00029191337,\n", - " 'id': '86b032a63e2f13222643295ae9a96fcc',\n", - " 'metadata': {'date_uploaded': '2024-02-04T15:45:56.884103',\n", - " 'text': \"During John's time in the Western North Pacific, the Joint Typhoon Warning Center (JTWC) had particular difficulty in forecasting and even estimating the strength of John. John weakened considerably after entering the Western North Pacific, and, before estimates were later revised, four consecutive advisories were issued that declared John a tropical depression. Each of these advisories called for imminent dissipation. As John persisted and did not dissipate as the JTWC had predicted, it was upgraded to a minimal tropical storm in the next advisory.\"}},\n", - " {'score': 8.675499e-05,\n", - " 'id': '757483e06a54900810afc0ab86b020c4',\n", - " 'metadata': {'date_uploaded': '2024-02-04T15:46:52.938765',\n", - " 'text': \"Johnston was born and raised in Ontario, studying there before enrolling at Harvard University and later Cambridge and Queen's universities. He went on to work as a professor at various post-secondary institutions in Canada, eventually serving administrative roles as dean of law at the University of Western Ontario, principal of McGill University, and president of the University of Waterloo. At the same time, Johnston involved himself with politics and public service, moderating political debates and chairing commissions in both the federal and provincial spheres, his most renowned position in that field being the chairmanship of the inquiry into the Airbus affair. He was in 2010 appointed as governor general by Queen Elizabeth II, on the recommendation of then Prime Minister of Canada Stephen Harper, to replace Michaëlle Jean as viceroy and he occupied the post until succeeded by Julie Payette in 2017. At the time, Johnston was predominantly praised as a worthy choice for the Queen's representative, though his appointment was denounced by some Quebec sovereigntists.\"}},\n", - " {'score': 8.4590385e-05,\n", - " 'id': 'c31dd2e7e6cbe2ab80361f321e57d725',\n", - " 'metadata': {'date_uploaded': '2024-02-04T15:47:15.201237',\n", - " 'text': \"Hurricane Norman originated from a broad area of low pressure that formed several hundred miles south-southwest of Acapulco, Mexico on August 25. Traveling west-northwest, the system coalesced into a tropical depression by at 15:00 UTC on August 28 while situated approximately 420 miles (675 km) south-southwest of the southern tip of Baja California. A subtropical ridge steered the system west for several days. Early on August 29, the depression intensified into a tropical storm and received the name Norman. Favorable environmental conditions enabled quick intensification, and the system achieved hurricane strength early on August 30. Rapid intensification ensued throughout the day, culminating with Norman attaining its peak intensity at 15:00 UTC, with sustained winds of 150 mph (240 km/h) and a central pressure of 937 mbar (27.67 inHg). During a 24-hour period, the hurricane's winds increased by 80 mph (130 km/h), the largest such increase since Hurricane Patricia in 2015.The combination of an eyewall replacement cycle and increasing wind shear induced weakening beginning on August 31. At 03:00 UTC on August 31, Norman turned to the west-southwest due to a deep-layer ridge to the north. Norman fell to Category 2 status for a period, before unexpectedly rapidly intensifying back to a Category 4 hurricane on September 2. The storm attained a secondary peak with winds of 140 mph (235 km/h) and a pressure of 947 mbar (28.00 inHg). Initially proving resilient to adverse conditions, Norman succumbed to increasing wind shear and lower sea surface temperatures on September 3. Its central dense overcast warmed and its eye filled. At the same time, Norman took a turn to a more westerly direction. On September 4, the hurricane crossed west of 140°W, and warning responsibility shifted to the Central Pacific Hurricane Center (CPHC). On the next day, another bout of unexpected intensification ensued and Norman regained major hurricane status. However, wind shear increased once again thereafter, and Norman weakened into a Category 1 hurricane on September 6. On September 7, Norman weakened further to a tropical storm as it began to lose its tropical characteristics. The CPHC issued its final advisory on Norman at 21:00 UTC on September 8, as it was rapidly becoming extratropical; Norman subsequently completed its extratropical transition on the next day.\"}},\n", - " {'score': 7.123619e-05,\n", - " 'id': '7ac86164fe9f53c7ce92529fa5904f4e',\n", - " 'metadata': {'date_uploaded': '2024-02-04T15:46:26.299391',\n", - " 'text': \"On 18 August 1916, Kronprinz took part in an operation to bombard Sunderland. Admiral Scheer attempted a repeat of the original 31 May plan; the two serviceable German battlecruisers—Moltke and Von der Tann—supported by three dreadnoughts, were to bombard the coastal town of Sunderland in an attempt to draw out and destroy Beatty's battlecruisers. The rest of the fleet, including Kronprinz, would trail behind and provide cover. The British were aware of the German plans and sortied the Grand Fleet to meet them. By 14:35, Admiral Scheer had been warned of the Grand Fleet's approach and, unwilling to engage the whole of the Grand Fleet just eleven weeks after the decidedly close call at Jutland, turned his forces around and retreated to German ports.Kronprinz participated in two uneventful fleet operations, one a month prior on 16 July to the north of Helgoland, and one into the North Sea on 18–20 October. Kronprinz and the rest of III Squadron were sent to the Baltic directly afterward for training, which lasted until 2 November. Upon returning from the Baltic, Kronprinz and the rest of III Squadron were ordered to cover the retrieval of a pair of U-boats that were stranded on the Danish coast. On the return trip, on 5 November 1916, Kronprinz was torpedoed by the British submarine J1 near Horns Reef. The torpedo struck the ship beneath the forward-most gun turret and allowed approximately 250 metric tons (250 long tons; 280 short tons) of water into the ship. Kronprinz maintained her speed and reached port. The following day she was placed in drydock at the Imperial Dockyard in Wilhelmshaven for repairs, which lasted from 6 November to 4 December. During this period, Bernhard Rösing took command of the vessel.After returning to III Squadron, Kronprinz took part in squadron training in the Baltic before conducting defensive patrols in the German Bight. In early 1917, the ship became the flagship of the deputy commander of the squadron, at that time Rear Admiral Karl Seiferling. During training maneuvers on 5 March 1917, Kronprinz was accidentally rammed by her sister ship Grosser Kurfürst in the Heligoland Bight. The collision caused minor flooding in the area abreast of her forward superfiring turret; Kronprinz shipped some 600 t (590 long tons; 660 short tons) of water. She again went into the drydock in Wilhelmshaven, from 6 March to 14 May. On 11 September, Kronprinz was detached for training in the Baltic. She then joined the Special Unit for Operation Albion.\"}},\n", - " {'score': 1.6988468e-05,\n", - " 'id': 'b38a1c1b709975f51326970267e67bb7',\n", - " 'metadata': {'date_uploaded': '2024-02-04T15:47:20.914703',\n", - " 'text': \"Kennedy was born in Brookline, Massachusetts and graduated from Harvard University in 1940 before joining the U.S. Naval Reserve the following year. During World War II, he commanded a series of PT boats in the Pacific theater and earned the Navy and Marine Corps Medal for his service. After the war, Kennedy represented the 11th congressional district of Massachusetts in the U.S. House of Representatives from 1947 to 1953. He was subsequently elected to the U.S. Senate and served as the junior Senator from Massachusetts from 1953 to 1960. While in the Senate, he published his book Profiles in Courage, which won a Pulitzer Prize for Biography. In the 1960 presidential election, Kennedy narrowly defeated Republican opponent Richard Nixon, who was the incumbent vice president. At age 43, he became the second-youngest person to serve as president, the youngest person to be elected as U.S. president, as well as the only Roman Catholic to occupy that office. He was also the first president to have served in the U.S. Navy.Kennedy's time in office was marked by high tensions with communist states in the Cold War. He increased the number of American military advisers in South Vietnam by a factor of 18 over President Dwight D. Eisenhower. In April 1961, he authorized a failed joint-CIA attempt to overthrow the Cuban government of Fidel Castro in the Bay of Pigs Invasion. He subsequently rejected Operation Northwoods plans by the Joint Chiefs of Staff to orchestrate false flag attacks on American soil in order to gain public approval for a war against Cuba. However his administration continued to plan for an invasion of Cuba in the summer of 1962. In October 1962, U.S. spy planes discovered that Soviet missile bases had been deployed in Cuba; the resulting period of tensions, termed the Cuban Missile Crisis, nearly resulted in the breakout of a global thermonuclear conflict. Domestically, Kennedy presided over the establishment of the Peace Corps and supported the civil rights movement, but was only somewhat successful in passing his New Frontier domestic policies.\"}},\n", - " {'score': 1.4858122e-05,\n", - " 'id': '413ce9a56e49699b6057daed5a44f81e',\n", - " 'metadata': {'date_uploaded': '2024-02-04T15:45:56.884103',\n", - " 'text': 'On August 29, an upper-level low absorbed the remnants of Hurricane Lane to the west-northwest of Hawaii. The storm was assigned the designation 96C by the United States Naval Research Laboratory (NRL). Traversing an area with sea surface temperatures 2 °C (3.6 °F) above-normal, the system coalesced into a subtropical storm by August 31. On September 2, the system reached its peak intensity and began to display an eye. Afterward, the system gradually began to weaken, while accelerating northward into colder waters. On September 3, the system weakened below tropical depression intensity, back into an extratropical low. On September 4, the system was absorbed by a larger extratropical storm in the Bering Sea.'}}],\n", - " 'retrieved_correct_position': 2,\n", - " 'reranked_correct_position': 2,\n", - " 'results_from_pinecone': [{'id': 'a76b6a3dfcbdb1ca832bbf40710ad2c8',\n", - " 'metadata': {'date_uploaded': '2024-02-04T15:46:32.060499',\n", - " 'text': 'John affected both the Hawaiian Islands and Johnston '\n", - " 'Atoll, but only lightly. While John passed over 345 '\n", - " 'miles (550 km) to the south of Hawaiʻi, the islands did '\n", - " 'experience strengthened trade winds and rough surf '\n", - " 'along the southeast- and south-facing shores, and, '\n", - " 'while moving westward, on west-facing shores as well. '\n", - " 'The waves, ranging from 6 to 10 ft (1.8 to 3.0 m) in '\n", - " 'height, flooded beach parks in Kailua-Kona. '\n", - " 'Additionally, heavy rains on the Big Island of Hawaiʻi '\n", - " 'caused minor, localized flooding and some short-term '\n", - " 'road closures. No deaths, injuries or significant '\n", - " 'damages were reported in Hawaiʻi.Although John passed '\n", - " 'within 25 km (16 mi) of Johnston Atoll, it had weakened '\n", - " 'greatly to a Category 1 system by closest approach. '\n", - " \"Prior to the storm's arrival, waves between 20 and 30 \"\n", - " 'ft (6.1 and 9.1 m) were reported on the island. '\n", - " 'Additionally, in the Northern Hemisphere, the strongest '\n", - " 'winds and heaviest rain lie to the north of a tropical '\n", - " 'cyclone, so the atoll, which lay to the south of the '\n", - " \"storm's path, was spared the brunt of the storm. \"\n", - " 'Nonetheless, the 1,100-man personnel for the United '\n", - " 'States military base on Johnston Atoll had been '\n", - " 'evacuated to Honolulu as a precaution while John '\n", - " 'approached. Damage to structures was considerable, but '\n", - " 'the size of the island and relative functionality of '\n", - " 'the base led to low damage; monetary losses were '\n", - " 'estimated at close to $15 million (1994 US$).The '\n", - " 'remnants of John moved through the Aleutian Islands, '\n", - " 'producing a wind gust of 46 mph (74 km/h) in Unalaska. '\n", - " 'The storm brought a plume of warm air, and two stations '\n", - " 'recorded a high temperature of 66 °F (19 °C).'},\n", - " 'score': 0.593409777,\n", - " 'values': []},\n", - " {'id': '8f3fd30f7d46c05089f7f84d71806b77',\n", - " 'metadata': {'date_uploaded': '2024-02-04T15:46:41.323346',\n", - " 'text': 'Clearing Johnston Atoll, John turned to the northwest '\n", - " 'and began strengthening again as shear decreased. On '\n", - " 'August 27 local time, John reached a secondary peak '\n", - " 'strength of 135 miles per hour (210 km/h), and shortly '\n", - " 'thereafter it crossed the International Date Line at '\n", - " 'approximately 22° N and came under the surveillance of '\n", - " 'the Guam branch of the Joint Typhoon Warning Center '\n", - " '(JTWC). By crossing into the western Pacific, John also '\n", - " 'became a typhoon and was referred to as Typhoon John '\n", - " 'during its time in the western Pacific. Immediately '\n", - " 'after crossing the Date Line, John again weakened and '\n", - " 'its forward motion stalled. By September 1, John had '\n", - " 'weakened to a tropical storm and was nearly motionless '\n", - " 'just west of the Date Line. There, John lingered for '\n", - " 'six days while performing a multi-day counterclockwise '\n", - " 'loop. On September 7, a trough moved into the area and '\n", - " 'quickly moved John to the northeast. John crossed the '\n", - " 'Date Line again on September 8 and reentered the '\n", - " 'central Pacific.After reentering the central Pacific, '\n", - " 'John briefly reached a tertiary peak strength of 90 '\n", - " 'miles per hour (145 km/h), a strong Category 1 '\n", - " 'hurricane, well to the north of Midway Island. However, '\n", - " \"the trough was rapidly pulling apart John's structure, \"\n", - " 'and the cold waters of the northern central Pacific '\n", - " 'were not conducive to a tropical cyclone. On September '\n", - " '10, the 120th advisory was released on the system, '\n", - " 'finally declaring John to have become extratropical '\n", - " 'approximately 1,000 miles (1600 km) south of Unalaska '\n", - " 'Island.'},\n", - " 'score': 0.564386189,\n", - " 'values': []},\n", - " {'id': '29f43cf2a1e4b7da49f726bbf846044f',\n", - " 'metadata': {'date_uploaded': '2024-02-04T15:46:58.291507',\n", - " 'text': 'The origins of Hurricane John were thought by the '\n", - " 'United States National Hurricane Center (NHC) to be '\n", - " 'from a tropical wave that moved off the coast of Africa '\n", - " 'on July 25, 1994. The wave subsequently moved across '\n", - " 'the Atlantic Ocean and Caribbean without distinction, '\n", - " 'before it crossed Central America and moved into the '\n", - " 'Eastern Pacific Ocean on or around August 8. Upon '\n", - " 'entering the Eastern Pacific the wave gradually '\n", - " 'developed, before the NHC initiated advisories on the '\n", - " 'system and designated it as Tropical Depression Ten-E '\n", - " 'during August 11. The system was at this time moving '\n", - " 'westwards and located around 345 miles (555 km) to the '\n", - " 'south-southeast of Acapulco, Mexico. Quickly developing '\n", - " 'banding features and well-defined outflow, it was '\n", - " 'upgraded to a tropical storm and named John later that '\n", - " 'day.A strong ridge of high pressure over the '\n", - " 'northeastern Pacific Ocean forced John westward, where '\n", - " 'upper level wind shear kept John a tropical storm. '\n", - " 'Intensity fluctuated considerably, however, as shear '\n", - " 'levels varied. More than once, shear cleared away most '\n", - " 'of the clouds above John and nearly caused it to weaken '\n", - " 'to a tropical depression. However, after eight days of '\n", - " 'slow westward movement across the Pacific Ocean, shear '\n", - " 'lessened greatly on August 19, and John intensified '\n", - " 'significantly and was designated as a hurricane at '\n", - " '17:00 PDT. During an eighteen-hour period between '\n", - " 'August 19 and August 20, John further strengthened from '\n", - " 'a weak Category 1 hurricane to a Category 3 major '\n", - " 'hurricane. Around 1100 PDT on August 20, John crossed '\n", - " 'into the central Pacific, the first of three basin '\n", - " 'crosses John would make.After entering the central '\n", - " 'Pacific, John left the area monitored by the NHC and '\n", - " 'was instead monitored by the Central Pacific Hurricane '\n", - " 'Center (CPHC). As the storm moved slowly westward, '\n", - " 'Hurricane John continued to strengthen considerably in '\n", - " 'an increasingly favorable environment well south of the '\n", - " 'Hawaiian Islands; on August 22, John was designated a '\n", - " 'Category 5 hurricane on the Saffir–Simpson hurricane '\n", - " 'scale (the highest classification for hurricanes) and '\n", - " 'later that day (by Hawaii Standard Time) reached its '\n", - " 'peak intensity, with 1-minute sustained winds of 175 '\n", - " 'miles per hour (280 km/h) and a minimum central '\n", - " 'pressure of 929 millibars (27.4 inHg). Also, on August '\n", - " '22 (by Hawaii Standard Time), John made its closest '\n", - " 'approach to the Hawaiian Islands, 345 miles (500 km) to '\n", - " 'the south. John had threatened to turn north and affect '\n", - " 'the islands days before, but the ridge of high pressure '\n", - " 'that typically shields the islands from hurricanes kept '\n", - " 'John on its southerly path. Nonetheless, heavy rains '\n", - " 'and wind from the outer bands of John affected the '\n", - " 'islands.With the Hawaiian Islands behind it, John began '\n", - " 'a slow turn to the north, taking near-direct aim at '\n", - " 'Johnston Atoll, a small group of islands populated only '\n", - " 'by a United States military base. The storm slowly '\n", - " 'weakened from its peak as a Category 5 hurricane in the '\n", - " 'face of increasing shear, dropping down to a Category 1 '\n", - " 'hurricane with 90 miles per hour (145 km/h) maximum '\n", - " 'winds. On August 25 local time, John made its closest '\n", - " 'approach to the Johnston Atoll only 15 miles (24 km) to '\n", - " 'the north. On Johnston Atoll, sustained winds were '\n", - " 'reported up to 60 miles per hour (95 km/h), the '\n", - " 'equivalent of a strong tropical storm, and gusts up to '\n", - " '75 miles per hour (120 km/h) were recorded.'},\n", - " 'score': 0.516601801,\n", - " 'values': []},\n", - " {'id': '29d27c6f43d083d4c282bdb5e7ab51a2',\n", - " 'metadata': {'date_uploaded': '2024-02-04T15:45:56.884103',\n", - " 'text': 'At the same time, however, two separate ship reports '\n", - " 'indicated that John had sustained winds of at least 55 '\n", - " 'knots (100 km/h, 65 mph), far stronger than the '\n", - " 'advisory strength of 35 knots (65 km/h, 40 mph). John '\n", - " 'would go on to restrengthen into a strong Category 1 '\n", - " 'hurricane after reentering the Central North Pacific, '\n", - " 'defying all JTWC predictions. After later reanalysis, '\n", - " 'the JTWC raised the estimated wind speeds of John for '\n", - " 'every advisory from 1200 UTC September 1 to its final '\n", - " 'advisory exactly a week later by at least 5 knots (9 '\n", - " 'km/h, 6 mph) and as much as 25 knots (46 km/h, 29 '\n", - " 'mph).'},\n", - " 'score': 0.448611259,\n", - " 'values': []},\n", - " {'id': '86b032a63e2f13222643295ae9a96fcc',\n", - " 'metadata': {'date_uploaded': '2024-02-04T15:45:56.884103',\n", - " 'text': \"During John's time in the Western North Pacific, the \"\n", - " 'Joint Typhoon Warning Center (JTWC) had particular '\n", - " 'difficulty in forecasting and even estimating the '\n", - " 'strength of John. John weakened considerably after '\n", - " 'entering the Western North Pacific, and, before '\n", - " 'estimates were later revised, four consecutive '\n", - " 'advisories were issued that declared John a tropical '\n", - " 'depression. Each of these advisories called for '\n", - " 'imminent dissipation. As John persisted and did not '\n", - " 'dissipate as the JTWC had predicted, it was upgraded to '\n", - " 'a minimal tropical storm in the next advisory.'},\n", - " 'score': 0.446436226,\n", - " 'values': []},\n", - " {'id': 'b38a1c1b709975f51326970267e67bb7',\n", - " 'metadata': {'date_uploaded': '2024-02-04T15:47:20.914703',\n", - " 'text': 'Kennedy was born in Brookline, Massachusetts and '\n", - " 'graduated from Harvard University in 1940 before '\n", - " 'joining the U.S. Naval Reserve the following year. '\n", - " 'During World War II, he commanded a series of PT boats '\n", - " 'in the Pacific theater and earned the Navy and Marine '\n", - " 'Corps Medal for his service. After the war, Kennedy '\n", - " 'represented the 11th congressional district of '\n", - " 'Massachusetts in the U.S. House of Representatives from '\n", - " '1947 to 1953. He was subsequently elected to the U.S. '\n", - " 'Senate and served as the junior Senator from '\n", - " 'Massachusetts from 1953 to 1960. While in the Senate, '\n", - " 'he published his book Profiles in Courage, which won a '\n", - " 'Pulitzer Prize for Biography. In the 1960 presidential '\n", - " 'election, Kennedy narrowly defeated Republican opponent '\n", - " 'Richard Nixon, who was the incumbent vice president. At '\n", - " 'age 43, he became the second-youngest person to serve '\n", - " 'as president, the youngest person to be elected as U.S. '\n", - " 'president, as well as the only Roman Catholic to occupy '\n", - " 'that office. He was also the first president to have '\n", - " \"served in the U.S. Navy.Kennedy's time in office was \"\n", - " 'marked by high tensions with communist states in the '\n", - " 'Cold War. He increased the number of American military '\n", - " 'advisers in South Vietnam by a factor of 18 over '\n", - " 'President Dwight D. Eisenhower. In April 1961, he '\n", - " 'authorized a failed joint-CIA attempt to overthrow the '\n", - " 'Cuban government of Fidel Castro in the Bay of Pigs '\n", - " 'Invasion. He subsequently rejected Operation Northwoods '\n", - " 'plans by the Joint Chiefs of Staff to orchestrate false '\n", - " 'flag attacks on American soil in order to gain public '\n", - " 'approval for a war against Cuba. However his '\n", - " 'administration continued to plan for an invasion of '\n", - " 'Cuba in the summer of 1962. In October 1962, U.S. spy '\n", - " 'planes discovered that Soviet missile bases had been '\n", - " 'deployed in Cuba; the resulting period of tensions, '\n", - " 'termed the Cuban Missile Crisis, nearly resulted in the '\n", - " 'breakout of a global thermonuclear conflict. '\n", - " 'Domestically, Kennedy presided over the establishment '\n", - " 'of the Peace Corps and supported the civil rights '\n", - " 'movement, but was only somewhat successful in passing '\n", - " 'his New Frontier domestic policies.'},\n", - " 'score': 0.282856554,\n", - " 'values': []},\n", - " {'id': '413ce9a56e49699b6057daed5a44f81e',\n", - " 'metadata': {'date_uploaded': '2024-02-04T15:45:56.884103',\n", - " 'text': 'On August 29, an upper-level low absorbed the remnants '\n", - " 'of Hurricane Lane to the west-northwest of Hawaii. The '\n", - " 'storm was assigned the designation 96C by the United '\n", - " 'States Naval Research Laboratory (NRL). Traversing an '\n", - " 'area with sea surface temperatures 2 °C (3.6 °F) '\n", - " 'above-normal, the system coalesced into a subtropical '\n", - " 'storm by August 31. On September 2, the system reached '\n", - " 'its peak intensity and began to display an eye. '\n", - " 'Afterward, the system gradually began to weaken, while '\n", - " 'accelerating northward into colder waters. On September '\n", - " '3, the system weakened below tropical depression '\n", - " 'intensity, back into an extratropical low. On September '\n", - " '4, the system was absorbed by a larger extratropical '\n", - " 'storm in the Bering Sea.'},\n", - " 'score': 0.278695226,\n", - " 'values': []},\n", - " {'id': 'c31dd2e7e6cbe2ab80361f321e57d725',\n", - " 'metadata': {'date_uploaded': '2024-02-04T15:47:15.201237',\n", - " 'text': 'Hurricane Norman originated from a broad area of low '\n", - " 'pressure that formed several hundred miles '\n", - " 'south-southwest of Acapulco, Mexico on August 25. '\n", - " 'Traveling west-northwest, the system coalesced into a '\n", - " 'tropical depression by at 15:00 UTC on August 28 while '\n", - " 'situated approximately 420 miles (675 km) '\n", - " 'south-southwest of the southern tip of Baja California. '\n", - " 'A subtropical ridge steered the system west for several '\n", - " 'days. Early on August 29, the depression intensified '\n", - " 'into a tropical storm and received the name Norman. '\n", - " 'Favorable environmental conditions enabled quick '\n", - " 'intensification, and the system achieved hurricane '\n", - " 'strength early on August 30. Rapid intensification '\n", - " 'ensued throughout the day, culminating with Norman '\n", - " 'attaining its peak intensity at 15:00 UTC, with '\n", - " 'sustained winds of 150 mph (240 km/h) and a central '\n", - " 'pressure of 937 mbar (27.67 inHg). During a 24-hour '\n", - " \"period, the hurricane's winds increased by 80 mph (130 \"\n", - " 'km/h), the largest such increase since Hurricane '\n", - " 'Patricia in 2015.The combination of an eyewall '\n", - " 'replacement cycle and increasing wind shear induced '\n", - " 'weakening beginning on August 31. At 03:00 UTC on '\n", - " 'August 31, Norman turned to the west-southwest due to a '\n", - " 'deep-layer ridge to the north. Norman fell to Category '\n", - " '2 status for a period, before unexpectedly rapidly '\n", - " 'intensifying back to a Category 4 hurricane on '\n", - " 'September 2. The storm attained a secondary peak with '\n", - " 'winds of 140 mph (235 km/h) and a pressure of 947 mbar '\n", - " '(28.00 inHg). Initially proving resilient to adverse '\n", - " 'conditions, Norman succumbed to increasing wind shear '\n", - " 'and lower sea surface temperatures on September 3. Its '\n", - " 'central dense overcast warmed and its eye filled. At '\n", - " 'the same time, Norman took a turn to a more westerly '\n", - " 'direction. On September 4, the hurricane crossed west '\n", - " 'of 140°W, and warning responsibility shifted to the '\n", - " 'Central Pacific Hurricane Center (CPHC). On the next '\n", - " 'day, another bout of unexpected intensification ensued '\n", - " 'and Norman regained major hurricane status. However, '\n", - " 'wind shear increased once again thereafter, and Norman '\n", - " 'weakened into a Category 1 hurricane on September 6. On '\n", - " 'September 7, Norman weakened further to a tropical '\n", - " 'storm as it began to lose its tropical characteristics. '\n", - " 'The CPHC issued its final advisory on Norman at 21:00 '\n", - " 'UTC on September 8, as it was rapidly becoming '\n", - " 'extratropical; Norman subsequently completed its '\n", - " 'extratropical transition on the next day.'},\n", - " 'score': 0.273503363,\n", - " 'values': []},\n", - " {'id': '7ac86164fe9f53c7ce92529fa5904f4e',\n", - " 'metadata': {'date_uploaded': '2024-02-04T15:46:26.299391',\n", - " 'text': 'On 18 August 1916, Kronprinz took part in an operation '\n", - " 'to bombard Sunderland. Admiral Scheer attempted a '\n", - " 'repeat of the original 31 May plan; the two serviceable '\n", - " 'German battlecruisers—Moltke and Von der Tann—supported '\n", - " 'by three dreadnoughts, were to bombard the coastal town '\n", - " 'of Sunderland in an attempt to draw out and destroy '\n", - " \"Beatty's battlecruisers. The rest of the fleet, \"\n", - " 'including Kronprinz, would trail behind and provide '\n", - " 'cover. The British were aware of the German plans and '\n", - " 'sortied the Grand Fleet to meet them. By 14:35, Admiral '\n", - " \"Scheer had been warned of the Grand Fleet's approach \"\n", - " 'and, unwilling to engage the whole of the Grand Fleet '\n", - " 'just eleven weeks after the decidedly close call at '\n", - " 'Jutland, turned his forces around and retreated to '\n", - " 'German ports.Kronprinz participated in two uneventful '\n", - " 'fleet operations, one a month prior on 16 July to the '\n", - " 'north of Helgoland, and one into the North Sea on 18–20 '\n", - " 'October. Kronprinz and the rest of III Squadron were '\n", - " 'sent to the Baltic directly afterward for training, '\n", - " 'which lasted until 2 November. Upon returning from the '\n", - " 'Baltic, Kronprinz and the rest of III Squadron were '\n", - " 'ordered to cover the retrieval of a pair of U-boats '\n", - " 'that were stranded on the Danish coast. On the return '\n", - " 'trip, on 5 November 1916, Kronprinz was torpedoed by '\n", - " 'the British submarine J1 near Horns Reef. The torpedo '\n", - " 'struck the ship beneath the forward-most gun turret and '\n", - " 'allowed approximately 250 metric tons (250 long tons; '\n", - " '280 short tons) of water into the ship. Kronprinz '\n", - " 'maintained her speed and reached port. The following '\n", - " 'day she was placed in drydock at the Imperial Dockyard '\n", - " 'in Wilhelmshaven for repairs, which lasted from 6 '\n", - " 'November to 4 December. During this period, Bernhard '\n", - " 'Rösing took command of the vessel.After returning to '\n", - " 'III Squadron, Kronprinz took part in squadron training '\n", - " 'in the Baltic before conducting defensive patrols in '\n", - " 'the German Bight. In early 1917, the ship became the '\n", - " 'flagship of the deputy commander of the squadron, at '\n", - " 'that time Rear Admiral Karl Seiferling. During training '\n", - " 'maneuvers on 5 March 1917, Kronprinz was accidentally '\n", - " 'rammed by her sister ship Grosser Kurfürst in the '\n", - " 'Heligoland Bight. The collision caused minor flooding '\n", - " 'in the area abreast of her forward superfiring turret; '\n", - " 'Kronprinz shipped some 600 t (590 long tons; 660 short '\n", - " 'tons) of water. She again went into the drydock in '\n", - " 'Wilhelmshaven, from 6 March to 14 May. On 11 September, '\n", - " 'Kronprinz was detached for training in the Baltic. She '\n", - " 'then joined the Special Unit for Operation Albion.'},\n", - " 'score': 0.269413084,\n", - " 'values': []},\n", - " {'id': '757483e06a54900810afc0ab86b020c4',\n", - " 'metadata': {'date_uploaded': '2024-02-04T15:46:52.938765',\n", - " 'text': 'Johnston was born and raised in Ontario, studying there '\n", - " 'before enrolling at Harvard University and later '\n", - " \"Cambridge and Queen's universities. He went on to work \"\n", - " 'as a professor at various post-secondary institutions '\n", - " 'in Canada, eventually serving administrative roles as '\n", - " 'dean of law at the University of Western Ontario, '\n", - " 'principal of McGill University, and president of the '\n", - " 'University of Waterloo. At the same time, Johnston '\n", - " 'involved himself with politics and public service, '\n", - " 'moderating political debates and chairing commissions '\n", - " 'in both the federal and provincial spheres, his most '\n", - " 'renowned position in that field being the chairmanship '\n", - " 'of the inquiry into the Airbus affair. He was in 2010 '\n", - " 'appointed as governor general by Queen Elizabeth II, on '\n", - " 'the recommendation of then Prime Minister of Canada '\n", - " 'Stephen Harper, to replace Michaëlle Jean as viceroy '\n", - " 'and he occupied the post until succeeded by Julie '\n", - " 'Payette in 2017. At the time, Johnston was '\n", - " 'predominantly praised as a worthy choice for the '\n", - " \"Queen's representative, though his appointment was \"\n", - " 'denounced by some Quebec sovereigntists.'},\n", - " 'score': 0.265240133,\n", - " 'values': []}],\n", - " 'top_re_rank_score': 0.998432}" + "cell_type": "code", + "execution_count": 10, + "id": "4c40d99a", + "metadata": { + "id": "4c40d99a" + }, + "outputs": [], + "source": [ + "texts = ['hi']" ] - }, - "execution_count": 64, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "query_result # the 2nd position has the right context \"The origins of Hurricane John were...\"" - ] - }, - { - "cell_type": "code", - "execution_count": 52, - "id": "a63ec53e", - "metadata": { - "id": "a63ec53e" - }, - "outputs": [], - "source": [ - "test_sample = dataset['test']" - ] - }, - { - "cell_type": "code", - "execution_count": 53, - "id": "21a3a147", - "metadata": { - "id": "21a3a147" - }, - "outputs": [], - "source": [ - "TOP_K=50" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b98413a3", - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" }, - "id": "b98413a3", - "outputId": "c6557744-6998-492f-db27-98b94ed7ec31", - "scrolled": true - }, - "outputs": [ { - "name": "stderr", - "output_type": "stream", - "text": [ - " 9%|▊ | 100/1148 [02:39<27:57, 1.60s/it]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Accuracy without re-ranking: 0.78\n", - "Accuracy with re-ranking: 0.84\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - " 17%|█▋ | 200/1148 [05:19<24:58, 1.58s/it]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Accuracy without re-ranking: 0.765\n", - "Accuracy with re-ranking: 0.835\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - " 26%|██▌ | 300/1148 [07:59<22:08, 1.57s/it]" - ] + "cell_type": "code", + "execution_count": 11, + "id": "3e1b73f3", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "3e1b73f3", + "outputId": "4bb8f973-72ad-4b18-f5d9-e090c88475cc" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ID: 49f68a5c8493ec2c0bf489821c21fc3b \n", + "LEN: 3072 \n", + "META: {'text': 'hi', 'date_uploaded': datetime.datetime(2025, 2, 9, 1, 36, 34, 26529)}\n" + ] + } + ], + "source": [ + "_id, embedding, metadata = prepare_for_pinecone(texts)[0]\n", + "\n", + "print('ID: ',_id, '\\nLEN: ', len(embedding), '\\nMETA:', metadata)" + ] }, { - "name": "stdout", - "output_type": "stream", - "text": [ - "Accuracy without re-ranking: 0.7666666666666667\n", - "Accuracy with re-ranking: 0.8166666666666667\n" - ] + "cell_type": "code", + "execution_count": 11, + "id": "b49debd5", + "metadata": { + "id": "b49debd5" + }, + "outputs": [], + "source": [] }, { - "name": "stderr", - "output_type": "stream", - "text": [ - " 35%|███▍ | 400/1148 [12:10<19:30, 1.56s/it]" - ] + "cell_type": "code", + "execution_count": 12, + "id": "bf47aabd", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "bf47aabd", + "outputId": "30615424-73cb-4f4e-9f54-67a42f05f095" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "1" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def upload_texts_to_pinecone(texts, namespace=NAMESPACE, batch_size=None, show_progress_bar=False):\n", + " # Call the prepare_for_pinecone function to prepare the input texts for indexing\n", + " total_upserted = 0\n", + " if not batch_size:\n", + " batch_size = len(texts)\n", + "\n", + " _range = range(0, len(texts), batch_size)\n", + " for i in tqdm(_range) if show_progress_bar else _range:\n", + " batch = texts[i: i + batch_size]\n", + " prepared_texts = prepare_for_pinecone(batch)\n", + "\n", + " # Use the upsert() method of the index object to upload the prepared texts to Pinecone\n", + " total_upserted += index.upsert(\n", + " vectors=prepared_texts,\n", + " namespace=namespace\n", + " )['upserted_count']\n", + "\n", + "\n", + " return total_upserted\n", + "\n", + "# Call the upload_texts_to_pinecone() function with the input texts\n", + "upload_texts_to_pinecone(texts)\n" + ] }, { - "name": "stdout", - "output_type": "stream", - "text": [ - "Accuracy without re-ranking: 0.7625\n", - "Accuracy with re-ranking: 0.825\n" - ] + "cell_type": "code", + "execution_count": 13, + "id": "V0XI6RAom-Ln", + "metadata": { + "id": "V0XI6RAom-Ln" + }, + "outputs": [], + "source": [ + "def query_from_pinecone(query, top_k=3, include_metadata=True):\n", + " # get embedding from THE SAME embedder as the documents\n", + " query_embedding = get_embedding(query, engine=ENGINE)\n", + "\n", + " return index.query(\n", + " vector=query_embedding,\n", + " top_k=top_k,\n", + " namespace=NAMESPACE,\n", + " include_metadata=include_metadata # gets the metadata (dates, text, etc)\n", + " ).get('matches')" + ] }, { - "name": "stderr", - "output_type": "stream", - "text": [ - " 44%|████▎ | 500/1148 [14:50<17:13, 1.59s/it]" - ] + "cell_type": "code", + "execution_count": 14, + "id": "84a0871f", + "metadata": { + "id": "84a0871f" + }, + "outputs": [], + "source": [ + "def delete_texts_from_pinecone(texts, namespace=NAMESPACE):\n", + " # Compute the hash (id) for each text\n", + " hashes = [hashlib.md5(text.encode()).hexdigest() for text in texts]\n", + "\n", + " # The ids parameter is used to specify the list of IDs (hashes) to delete\n", + " return index.delete(ids=hashes, namespace=namespace)" + ] }, { - "name": "stdout", - "output_type": "stream", - "text": [ - "Accuracy without re-ranking: 0.764\n", - "Accuracy with re-ranking: 0.834\n" - ] + "cell_type": "code", + "execution_count": 14, + "id": "a6a5172f-a0c6-4692-ab77-83321e141679", + "metadata": { + "id": "a6a5172f-a0c6-4692-ab77-83321e141679" + }, + "outputs": [], + "source": [] }, { - "name": "stderr", - "output_type": "stream", - "text": [ - " 52%|█████▏ | 600/1148 [17:29<14:38, 1.60s/it]" - ] + "cell_type": "code", + "execution_count": 15, + "id": "4523cab6-0bc3-4791-9c73-7bd7d7e5858b", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "4523cab6-0bc3-4791-9c73-7bd7d7e5858b", + "outputId": "5d3a7742-7dd8-49ac-da15-85a70b4ed6ef" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "DatasetDict({\n", + " test: Dataset({\n", + " features: ['id', 'title', 'context', 'question', 'answers'],\n", + " num_rows: 1148\n", + " })\n", + " train: Dataset({\n", + " features: ['id', 'title', 'context', 'question', 'answers'],\n", + " num_rows: 11590\n", + " })\n", + "})" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from datasets import load_dataset\n", + "\n", + "dataset = load_dataset(\"xtreme\", \"MLQA.en.en\")\n", + "\n", + "# rename test -> train and val -> test (as we will use it in later in this chapter)\n", + "dataset['train'] = dataset['test']\n", + "dataset['test'] = dataset['validation']\n", + "del dataset['validation']\n", + "\n", + "dataset" + ] }, { - "name": "stdout", - "output_type": "stream", - "text": [ - "Accuracy without re-ranking: 0.7683333333333333\n", - "Accuracy with re-ranking: 0.8466666666666667\n" - ] + "cell_type": "code", + "execution_count": 16, + "id": "e622fbfa-2dde-4711-9c46-1390eb3430f9", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "e622fbfa-2dde-4711-9c46-1390eb3430f9", + "outputId": "2b2df7a8-15e1-4285-95a5-627fb6249d31" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "({'id': 'a4968ca8a18de16aa3859be760e43dbd3af3fce9',\n", + " 'title': 'Area 51',\n", + " 'context': 'In 1994, five unnamed civilian contractors and the widows of contractors Walter Kasza and Robert Frost sued the USAF and the United States Environmental Protection Agency. Their suit, in which they were represented by George Washington University law professor Jonathan Turley, alleged they had been present when large quantities of unknown chemicals had been burned in open pits and trenches at Groom. Biopsies taken from the complainants were analyzed by Rutgers University biochemists, who found high levels of dioxin, dibenzofuran, and trichloroethylene in their body fat. The complainants alleged they had sustained skin, liver, and respiratory injuries due to their work at Groom, and that this had contributed to the deaths of Frost and Kasza. The suit sought compensation for the injuries they had sustained, claiming the USAF had illegally handled toxic materials, and that the EPA had failed in its duty to enforce the Resource Conservation and Recovery Act (which governs handling of dangerous materials). They also sought detailed information about the chemicals to which they were allegedly exposed, hoping this would facilitate the medical treatment of survivors. Congressman Lee H. Hamilton, former chairman of the House Intelligence Committee, told 60 Minutes reporter Lesley Stahl, \"The Air Force is classifying all information about Area 51 in order to protect themselves from a lawsuit.\"',\n", + " 'question': 'Who analyzed the biopsies?',\n", + " 'answers': {'answer_start': [457],\n", + " 'text': ['Rutgers University biochemists']}},\n", + " {'id': 'f251ea56c4f1aa1df270137f7e6d89c0cc1b6ef4',\n", + " 'title': 'Area 51',\n", + " 'context': 'In 1994, five unnamed civilian contractors and the widows of contractors Walter Kasza and Robert Frost sued the USAF and the United States Environmental Protection Agency. Their suit, in which they were represented by George Washington University law professor Jonathan Turley, alleged they had been present when large quantities of unknown chemicals had been burned in open pits and trenches at Groom. Biopsies taken from the complainants were analyzed by Rutgers University biochemists, who found high levels of dioxin, dibenzofuran, and trichloroethylene in their body fat. The complainants alleged they had sustained skin, liver, and respiratory injuries due to their work at Groom, and that this had contributed to the deaths of Frost and Kasza. The suit sought compensation for the injuries they had sustained, claiming the USAF had illegally handled toxic materials, and that the EPA had failed in its duty to enforce the Resource Conservation and Recovery Act (which governs handling of dangerous materials). They also sought detailed information about the chemicals to which they were allegedly exposed, hoping this would facilitate the medical treatment of survivors. Congressman Lee H. Hamilton, former chairman of the House Intelligence Committee, told 60 Minutes reporter Lesley Stahl, \"The Air Force is classifying all information about Area 51 in order to protect themselves from a lawsuit.\"',\n", + " 'question': 'who represented robert frost and walter kasza in their suit?',\n", + " 'answers': {'answer_start': [218],\n", + " 'text': ['George Washington University law professor Jonathan Turley']}})" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dataset['train'][0], dataset['train'][1]" + ] }, { - "name": "stderr", - "output_type": "stream", - "text": [ - " 61%|██████ | 700/1148 [20:08<12:14, 1.64s/it]" - ] + "cell_type": "code", + "execution_count": 17, + "id": "0221343a", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "0221343a", + "outputId": "8b46cfc0-60da-488d-8b39-d4cb2cbe589f" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 31/31 [00:40<00:00, 1.30s/it]\n" + ] + } + ], + "source": [ + "unique_passages = list(set(dataset['test']['context']))\n", + "for idx in tqdm(range(0, len(unique_passages), 32)):\n", + " passages = unique_passages[idx:idx + 32]\n", + " upload_texts_to_pinecone(passages)\n" + ] }, { - "name": "stdout", - "output_type": "stream", - "text": [ - "Accuracy without re-ranking: 0.7471428571428571\n", - "Accuracy with re-ranking: 0.8285714285714286\n" - ] + "cell_type": "code", + "execution_count": 18, + "id": "796a7c80-7149-430e-b22c-9926c0d1daee", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "796a7c80-7149-430e-b22c-9926c0d1daee", + "outputId": "32378891-b767-455e-9251-e5aa2518d5cd" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "978" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(unique_passages)" + ] }, { - "name": "stderr", - "output_type": "stream", - "text": [ - " 70%|██████▉ | 800/1148 [22:46<09:11, 1.58s/it]" - ] + "cell_type": "code", + "execution_count": 19, + "id": "33yf7QrWtwt-", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "33yf7QrWtwt-", + "outputId": "69eb488e-f99b-45ca-dcc2-d2f9bc8b8586" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{'dimension': 3072,\n", + " 'index_fullness': 0.0,\n", + " 'namespaces': {'default': {'vector_count': 979}},\n", + " 'total_vector_count': 979}" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "index.describe_index_stats()" + ] }, { - "name": "stdout", - "output_type": "stream", - "text": [ - "Accuracy without re-ranking: 0.74875\n", - "Accuracy with re-ranking: 0.82125\n" - ] + "cell_type": "code", + "execution_count": 20, + "id": "432b021b-2cdb-4d73-a2c6-f2e0d1eb5ffc", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "432b021b-2cdb-4d73-a2c6-f2e0d1eb5ffc", + "outputId": "840217b3-de53-4f7c-de10-09afc58ba15c" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{'id': '569666f4dc3983dab5624e989212c1d9d0cd1798',\n", + " 'title': 'Pappataci fever',\n", + " 'context': 'Pappataci fever is prevalent in the subtropical zone of the Eastern Hemisphere between 20°N and 45°N, particularly in Southern Europe, North Africa, the Balkans, Eastern Mediterranean, Iraq, Iran, Pakistan, Afghanistan and India.The disease is transmitted by the bites of phlebotomine sandflies of the Genus Phlebotomus, in particular, Phlebotomus papatasi, Phlebotomus perniciosus and Phlebotomus perfiliewi. The sandfly becomes infected when biting an infected human in the period between 48 hours before the onset of fever and 24 hours after the end of the fever, and remains infected for its lifetime. Besides this horizontal virus transmission from man to sandfly, the virus can be transmitted in insects transovarially, from an infected female sandfly to its offspring.Pappataci fever is seldom recognised in endemic populations because it is mixed with other febrile illnesses of childhood, but it is more well-known among immigrants and military personnel from non-endemic regions.',\n", + " 'question': 'Does an infection for Sandflies go away over time?',\n", + " 'answers': {'answer_start': [571],\n", + " 'text': ['remains infected for its lifetime']}}" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dataset['test'][0]" + ] }, { - "name": "stderr", - "output_type": "stream", - "text": [ - " 78%|███████▊ | 900/1148 [25:26<06:36, 1.60s/it]" - ] + "cell_type": "code", + "execution_count": 21, + "id": "36e13316-2295-4a72-8f2a-b459f0e7826a", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "36e13316-2295-4a72-8f2a-b459f0e7826a", + "outputId": "0859f356-06d6-420d-e605-33530ef96497", + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[{'id': '2f90090e21f19450887d5f3ff781e541',\n", + " 'metadata': {'date_uploaded': '2025-02-09T01:36:44.647948',\n", + " 'text': 'Pappataci fever is prevalent in the subtropical zone of '\n", + " 'the Eastern Hemisphere between 20°N and 45°N, '\n", + " 'particularly in Southern Europe, North Africa, the '\n", + " 'Balkans, Eastern Mediterranean, Iraq, Iran, Pakistan, '\n", + " 'Afghanistan and India.The disease is transmitted by the '\n", + " 'bites of phlebotomine sandflies of the Genus '\n", + " 'Phlebotomus, in particular, Phlebotomus papatasi, '\n", + " 'Phlebotomus perniciosus and Phlebotomus perfiliewi. The '\n", + " 'sandfly becomes infected when biting an infected human '\n", + " 'in the period between 48 hours before the onset of '\n", + " 'fever and 24 hours after the end of the fever, and '\n", + " 'remains infected for its lifetime. Besides this '\n", + " 'horizontal virus transmission from man to sandfly, the '\n", + " 'virus can be transmitted in insects transovarially, '\n", + " 'from an infected female sandfly to its '\n", + " 'offspring.Pappataci fever is seldom recognised in '\n", + " 'endemic populations because it is mixed with other '\n", + " 'febrile illnesses of childhood, but it is more '\n", + " 'well-known among immigrants and military personnel from '\n", + " 'non-endemic regions.'},\n", + " 'score': 0.436177373,\n", + " 'values': []},\n", + " {'id': '00661b04eb84a4664717245513ea30cd',\n", + " 'metadata': {'date_uploaded': '2025-02-09T01:37:00.096215',\n", + " 'text': 'Paratyphoid fever, also known simply as paratyphoid, is '\n", + " 'a bacterial infection caused by one of the three types '\n", + " 'of Salmonella enterica. Symptoms usually begin 6–30 '\n", + " 'days after exposure and are the same as those of '\n", + " 'typhoid fever. Often, a gradual onset of a high fever '\n", + " 'occurs over several days. Weakness, loss of appetite, '\n", + " 'and headaches also commonly occur. Some people develop '\n", + " 'a skin rash with rose-colored spots. Without treatment, '\n", + " 'symptoms may last weeks or months. Other people may '\n", + " 'carry the bacteria without being affected; however, '\n", + " 'they are still able to spread the disease to others. '\n", + " 'Both typhoid and paratyphoid are of similar severity. '\n", + " 'Paratyphoid and typhoid fever are types of enteric '\n", + " 'fever.Paratyphoid is caused by the bacterium Salmonella '\n", + " 'enterica of the serotypes Paratyphi A, Paratyphi B, or '\n", + " 'Paratyphi C growing in the intestines and blood. They '\n", + " 'are usually spread by eating or drinking food or water '\n", + " 'contaminated with the feces of an infected person. They '\n", + " 'may occur when a person who prepares food is infected. '\n", + " 'Risk factors include poor sanitation as is found among '\n", + " 'poor crowded populations. Occasionally, they may be '\n", + " 'transmitted by sex. Humans are the only animals '\n", + " 'infected. Diagnosis may be based on symptoms and '\n", + " 'confirmed by either culturing the bacteria or detecting '\n", + " 'the bacterial DNA in the blood, stool, or bone marrow. '\n", + " 'Culturing the bacteria can be difficult. Bone-marrow '\n", + " 'testing is the most accurate. Symptoms are similar to '\n", + " 'that of many other infectious diseases. Typhus is an '\n", + " 'unrelated disease.While no vaccine is available '\n", + " 'specifically for paratyphoid, the typhoid vaccine may '\n", + " 'provide some benefit. Prevention includes drinking '\n", + " 'clean water, better sanitation, and better handwashing. '\n", + " 'Treatment of the disease is with antibiotics such as '\n", + " 'azithromycin. Resistance to a number of other '\n", + " 'previously effective antibiotics is common.Paratyphoid '\n", + " 'affects about six million people a year. It is most '\n", + " 'common in parts of Asia and rare in the developed '\n", + " 'world. Most cases are due to Paratyphi A rather than '\n", + " 'Paratyphi B or C. In 2015, paratyphoid fever resulted '\n", + " 'in about 29,200 deaths, down from 63,000 deaths in '\n", + " '1990. The risk of death is between 10 and 15% without '\n", + " 'treatment, while with treatment, it may be less than '\n", + " '1%.'},\n", + " 'score': 0.325614125,\n", + " 'values': []},\n", + " {'id': '24d322a7ce10e9e2fa12fcf54f50c651',\n", + " 'metadata': {'date_uploaded': '2025-02-09T01:37:14.510155',\n", + " 'text': 'Although Aronson isolated this mycobacterium in 1926 '\n", + " 'from a fish, it was not until 1951 that it was found to '\n", + " 'be the cause of human disease by Linell and Norden. '\n", + " 'Large outbreaks of infection due to this atypical '\n", + " 'mycobacterium have been described in association with '\n", + " 'swimming. Infections related to swimming pools have now '\n", + " 'drastically fallen due to the improvements in the '\n", + " 'construction and maintenance of these facilities.The '\n", + " 'first case of M. marinum infection associated with a '\n", + " \"fish-tank ('fish-tank granuloma') was reported in 1962 \"\n", + " 'by Swift and Cohen. M. marinum infection may be an '\n", + " 'occupational hazard for certain professions such as pet '\n", + " 'shop workers, but most infections occur in fish '\n", + " 'fanciers who keep an aquarium at home. Although '\n", + " 'infection may be caused by direct injury from the fish '\n", + " 'fins or bites, most are acquired during the handling of '\n", + " 'the aquariums such as cleaning or changing the water. '\n", + " 'Indirect infection has also been described related to a '\n", + " 'child’s bathing utensils that had been used to clean a '\n", + " 'fish tank. Due to an increased awareness of the disease '\n", + " 'and improved isolation methods, more and more cases are '\n", + " 'being recognized and reported worldwide.'},\n", + " 'score': 0.3016873,\n", + " 'values': []}]" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "query_from_pinecone('Does an infection for Sandflies go away over time?')" + ] }, { - "name": "stdout", - "output_type": "stream", - "text": [ - "Accuracy without re-ranking: 0.7388888888888889\n", - "Accuracy with re-ranking: 0.8188888888888889\n" - ] + "cell_type": "code", + "execution_count": 21, + "id": "5b92699e-2d92-4083-9508-ae47355c9c1a", + "metadata": { + "id": "5b92699e-2d92-4083-9508-ae47355c9c1a" + }, + "outputs": [], + "source": [] }, { - "name": "stderr", - "output_type": "stream", - "text": [ - " 87%|████████▋ | 1000/1148 [28:05<04:05, 1.66s/it]" - ] + "cell_type": "code", + "execution_count": 21, + "id": "206ab80e-f4b4-48d2-8aef-b522024f6658", + "metadata": { + "id": "206ab80e-f4b4-48d2-8aef-b522024f6658" + }, + "outputs": [], + "source": [] }, { - "name": "stdout", - "output_type": "stream", - "text": [ - "Accuracy without re-ranking: 0.741\n", - "Accuracy with re-ranking: 0.819\n" - ] + "cell_type": "markdown", + "id": "7e180a25-37e4-47a8-8ae8-a49f39c106ab", + "metadata": { + "id": "7e180a25-37e4-47a8-8ae8-a49f39c106ab" + }, + "source": [ + "# Part 2: Making results more relevant with a cross-encoder" + ] }, { - "name": "stderr", - "output_type": "stream", - "text": [ - " 96%|█████████▌| 1100/1148 [30:45<01:16, 1.60s/it]" - ] + "cell_type": "code", + "execution_count": 22, + "id": "074fab6f", + "metadata": { + "id": "074fab6f" + }, + "outputs": [], + "source": [ + "# if you didn't import before\n", + "\n", + "from sentence_transformers.cross_encoder import CrossEncoder\n", + "import numpy as np\n", + "from torch import nn" + ] }, { - "name": "stdout", - "output_type": "stream", - "text": [ - "Accuracy without re-ranking: 0.7509090909090909\n", - "Accuracy with re-ranking: 0.8272727272727273\n" - ] + "cell_type": "code", + "execution_count": 23, + "id": "414fc2d5", + "metadata": { + "id": "414fc2d5" + }, + "outputs": [], + "source": [ + "from copy import copy\n", + "\n", + "def get_results_from_pinecone(query, top_k=3, re_rank_model=None, verbose=True, correct_hash=None):\n", + "\n", + " results_from_pinecone = query_from_pinecone(query, top_k=top_k)\n", + "\n", + " if not results_from_pinecone:\n", + " return []\n", + "\n", + " if verbose:\n", + " print(\"Query:\", query)\n", + "\n", + "\n", + " final_results = []\n", + "\n", + " retrieved_correct_position, reranked_correct_position = None, None\n", + " for idx, result_from_pinecone in enumerate(results_from_pinecone):\n", + " if correct_hash and result_from_pinecone['id'] == correct_hash:\n", + " retrieved_correct_position = idx\n", + "\n", + " if re_rank_model is not None:\n", + " if verbose:\n", + " print('Document ID (Hash)\\t\\tRetrieval Score\\tCE Score\\tText')\n", + "\n", + " sentence_combinations = [[query, result_from_pinecone['metadata']['text']] for result_from_pinecone in results_from_pinecone]\n", + "\n", + " # Compute the similarity scores for these combinations\n", + " similarity_scores = re_rank_model.predict(sentence_combinations, activation_fct=nn.Sigmoid())\n", + "\n", + " # Sort the scores in decreasing order\n", + " sim_scores_argsort = list(reversed(np.argsort(similarity_scores)))\n", + " sim_scores_sort = list(reversed(np.sort(similarity_scores)))\n", + " top_re_rank_score = sim_scores_sort[0]\n", + "\n", + " # Print the scores\n", + " # print(list(zip(sim_scores_argsort, sim_scores_sort)))\n", + " for idx, _ in enumerate(sim_scores_argsort):\n", + " result_from_pinecone = results_from_pinecone[_]\n", + " if correct_hash and retrieved_correct_position == _:\n", + " reranked_correct_position = idx\n", + " final_results.append({'score': similarity_scores[idx], 'id': result_from_pinecone['id'], 'metadata': result_from_pinecone['metadata']})\n", + " if verbose:\n", + " print(f\"{result_from_pinecone['id']}\\t{result_from_pinecone['score']:.2f}\\t{similarity_scores[idx]:.6f}\\t{result_from_pinecone['metadata']['text'][:50]}\")\n", + " return {'final_results': final_results, 'retrieved_correct_position': retrieved_correct_position, 'reranked_correct_position': reranked_correct_position, 'results_from_pinecone': results_from_pinecone, 'top_re_rank_score': top_re_rank_score}\n", + "\n", + " if verbose:\n", + " print('Document ID (Hash)\\t\\tRetrieval Score\\tText')\n", + " for result_from_pinecone in results_from_pinecone:\n", + " final_results.append(result_from_pinecone)\n", + " if verbose:\n", + " print(f\"{result_from_pinecone['id']}\\t{result_from_pinecone['score']:.2f}\\t{result_from_pinecone['metadata']['text'][:50]}\")\n", + "\n", + " return {'final_results': final_results, 'retrieved_correct_position': retrieved_correct_position, 'reranked_correct_position': reranked_correct_position}" + ] }, { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████| 1148/1148 [32:01<00:00, 1.67s/it]\n" - ] - } - ], - "source": [ - "logger.setLevel(logging.CRITICAL)\n", - "\n", - "predictions = []\n", - "\n", - "for question in tqdm(test_sample['question']):\n", - " r = get_results_from_pinecone(\n", - " question, top_k=TOP_K, re_rank_model=cross_encoder, correct_hash=q_to_hash[question],\n", - " verbose=False\n", - " )\n", - "\n", - " r['retrieved_correct_position'], r['reranked_correct_position']\n", - " predictions.append(r)\n", - " if len(predictions) % 100 == 0:\n", - " retrieved_accuracy = sum([_['retrieved_correct_position'] == 0 for _ in predictions])/len(predictions)\n", - " re_ranked_accuracy = sum([_['reranked_correct_position'] == 0 for _ in predictions])/len(predictions)\n", - "\n", - " print(f'Accuracy without re-ranking: {retrieved_accuracy}')\n", - " print(f'Accuracy with re-ranking: {re_ranked_accuracy}')\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "a2ff94e7-0b78-40ca-8cf0-42e345439e8b", - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" + "cell_type": "code", + "execution_count": 23, + "id": "_GPhx4MMIVqU", + "metadata": { + "id": "_GPhx4MMIVqU" + }, + "outputs": [], + "source": [] }, - "id": "a2ff94e7-0b78-40ca-8cf0-42e345439e8b", - "outputId": "a2cd7fd3-ae14-43dd-cab8-559f7878fd6f" - }, - "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "Accuracy without re-ranking: 0.7543554006968641\n", - "Accuracy with re-ranking: 0.8327526132404182\n" - ] - } - ], - "source": [ - "retrieved_accuracy = sum([_['retrieved_correct_position'] == 0 for _ in predictions])/len(predictions)\n", - "re_ranked_accuracy = sum([_['reranked_correct_position'] == 0 for _ in predictions])/len(predictions)\n", - "\n", - "print(f'Accuracy without re-ranking: {retrieved_accuracy}')\n", - "print(f'Accuracy with re-ranking: {re_ranked_accuracy}')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "fT4FuVcf9ONw", - "metadata": { - "id": "fT4FuVcf9ONw" - }, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "6649afac-9434-440b-b332-de9149a7ebfa", - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 206 + "cell_type": "code", + "execution_count": 24, + "id": "b25a8a8f-e873-43e7-9f56-b57bdf328416", + "metadata": { + "id": "b25a8a8f-e873-43e7-9f56-b57bdf328416" + }, + "outputs": [], + "source": [ + "# Pre-trained cross encoder\n", + "cross_encoder = CrossEncoder('cross-encoder/ms-marco-MiniLM-L-12-v2', num_labels=1)\n", + "\n", + "q_to_hash = {data['question']: my_hash(data['context']) for data in dataset['test']}" + ] }, - "id": "6649afac-9434-440b-b332-de9149a7ebfa", - "outputId": "17b2e526-cd7e-409e-e0f3-2ae4afd29160" - }, - "outputs": [ { - "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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
final_resultsretrieved_correct_positionreranked_correct_positionresults_from_pinecone
0{'final_results': [{'score': 0.8746502, 'id': ...0.00.0[{'id': '2f90090e21f19450887d5f3ff781e541',\n", - " '...
1{'final_results': [{'score': 0.8746502, 'id': ...0.00.0[{'id': '49201636ad4102735125e146c0dbafa4',\n", - " '...
2{'final_results': [{'score': 0.8746502, 'id': ...0.00.0[{'id': '80d92494d2b06f341842f1855d2938cf',\n", - " '...
3{'final_results': [{'score': 0.8746502, 'id': ...0.02.0[{'id': 'e3fd54f33b021ea3cf88b438fefcada7',\n", - " '...
4{'final_results': [{'score': 0.8746502, 'id': ...0.00.0[{'id': '37ed40c20d4e1b9cc8d6cc27a4d0fff3',\n", - " '...
\n", - "
\n", - "
\n", - "\n", - "
\n", - " \n", - "\n", - " \n", - "\n", - " \n", - "
\n", - "\n", - "\n", - "
\n", - " \n", - "\n", - "\n", - "\n", - " \n", - "
\n", - "\n", - "
\n", - "
\n" + "cell_type": "code", + "execution_count": 25, + "id": "vptFN0wPw0uS", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "vptFN0wPw0uS", + "outputId": "b2fb5f17-7c9d-4ffb-ff00-7bf532fa683a" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "1148" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } ], - "text/plain": [ - " final_results \\\n", - "0 {'final_results': [{'score': 0.8746502, 'id': ... \n", - "1 {'final_results': [{'score': 0.8746502, 'id': ... \n", - "2 {'final_results': [{'score': 0.8746502, 'id': ... \n", - "3 {'final_results': [{'score': 0.8746502, 'id': ... \n", - "4 {'final_results': [{'score': 0.8746502, 'id': ... \n", - "\n", - " retrieved_correct_position reranked_correct_position \\\n", - "0 0.0 0.0 \n", - "1 0.0 0.0 \n", - "2 0.0 0.0 \n", - "3 0.0 2.0 \n", - "4 0.0 0.0 \n", - "\n", - " results_from_pinecone \n", - "0 [{'id': '2f90090e21f19450887d5f3ff781e541',\n", - " '... \n", - "1 [{'id': '49201636ad4102735125e146c0dbafa4',\n", - " '... \n", - "2 [{'id': '80d92494d2b06f341842f1855d2938cf',\n", - " '... \n", - "3 [{'id': 'e3fd54f33b021ea3cf88b438fefcada7',\n", - " '... \n", - "4 [{'id': '37ed40c20d4e1b9cc8d6cc27a4d0fff3',\n", - " '... " + "source": [ + "unique_inputs = list(set(dataset['test']['question']))\n", + "len(unique_inputs)" ] - }, - "execution_count": 285, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import pandas as pd\n", - "\n", - "predictions_df = pd.DataFrame(predictions)\n", - "predictions_df.head()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "831397d3-606a-4c7f-b77f-6ee85bd24f7e", - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" }, - "id": "831397d3-606a-4c7f-b77f-6ee85bd24f7e", - "outputId": "041c1a5c-cdef-4668-bb59-2700997c67ab" - }, - "outputs": [ { - "data": { - "text/plain": [ - "retrieved_correct_position 1.311052\n", - "reranked_correct_position 0.682709\n", - "dtype: float64" + "cell_type": "code", + "execution_count": 26, + "id": "dc56237c-f9d6-4b3d-a8ac-31098cf4f904", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "dc56237c-f9d6-4b3d-a8ac-31098cf4f904", + "outputId": "5270a095-bb39-4c6e-8da7-bb771c6eda7d" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "What was the year range?\n", + "Of Natures Obvious Laws & Processes in Vegetation (unpublished, c. 1671–75)\n" + ] + } + ], + "source": [ + "query = unique_inputs[0]\n", + "print(query)\n", + "\n", + "for t in dataset['test']:\n", + " if t['question'] == query:\n", + " print(t['context'])" ] - }, - "execution_count": 288, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "predictions_df[['retrieved_correct_position', 'reranked_correct_position']].mean() # lower is better" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "eyv-6pPIEy0r", - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "eyv-6pPIEy0r", - "outputId": "4d82a213-bd82-44e4-d933-8d39870c2f4d" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "1 866 956\n", - "3 1009 1057\n", - "5 1048 1077\n", - "10 1072 1094\n", - "25 1108 1120\n", - "50 1122 1122\n" - ] - } - ], - "source": [ - "# do recall @ 1, 3, 5, 10\n", - "for k in (1, 3, 5, 10, 25, 50):\n", - " embedding_only_recall = predictions_df[predictions_df['retrieved_correct_position'] < k].shape[0]\n", - " reranked_recall = predictions_df[predictions_df['reranked_correct_position'] < k].shape[0]\n", - " print(k, embedding_only_recall, reranked_recall)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "bd9aef05-e271-41e0-a8ce-88b6c81bed4c", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "3f14809e", - "metadata": { - "id": "3f14809e" - }, - "source": [ - "## OPEN SOURCE ALTERNATIVE TO EMBEDDING" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "bfa9c8c7-4d9c-4217-b226-bc376394716d", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 67, - "id": "8ed58d3a-bed5-4f70-a4d6-3d624ab98868", - "metadata": {}, - "outputs": [], - "source": [ - "from sentence_transformers import SentenceTransformer" - ] - }, - { - "cell_type": "code", - "execution_count": 98, - "id": "99138055", - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 67, - "referenced_widgets": [ - "c7800a5a8f1b4c3fa541df6b5ba6281f", - "9d726c5753564258bbe1c281fa8bfefa", - "ea3f511248734bbab197277b68346826", - "3838d1bfccb5402d91ecf96f51f9c2d7", - "ecc8ed6e869d4b01b7905ca951d0068c", - "66f8508878e94e4296e2ffb009afdb75", - "999f219c7c9449f0a48feb59eddd23eb", - "7ab68b0af00248f5bbc15a39bbf38166", - "b6ecc1cc5b2e4332b56fdc1614823d3e", - "e732511315484861b39d0efb86b9cfb5", - "3df968e9ff654de7bfc95f08c88a99c6" - ] }, - "id": "99138055", - "outputId": "2414eff0-be1c-44fb-be4c-a77d11ae4c57" - }, - "outputs": [ { - "name": "stderr", - "output_type": "stream", - "text": [ - "/opt/homebrew/lib/python3.11/site-packages/huggingface_hub/file_download.py:1132: FutureWarning: `resume_download` is deprecated and will be removed in version 1.0.0. Downloads always resume when possible. If you want to force a new download, use `force_download=True`.\n", - " warnings.warn(\n" - ] - } - ], - "source": [ - "# load up our open source embedding model\n", - "bi_encoder = SentenceTransformer(\"sentence-transformers/all-mpnet-base-v2\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "a1140c18", - "metadata": { - "id": "a1140c18" - }, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 69, - "id": "be37c48b", - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 49, - "referenced_widgets": [ - "0caf250cdae643479160eedc708ffeea", - "fa6089718c574ee19bd3c378e356ea6b", - "f78b642ffb784f9097e0cbf97c44b9bd", - "7c322a232739486a937883ac787f8750", - "1bc5237b0db94f4aa124c8c79a891955", - "2c83393c2b7745889765d8efb4890763", - "6854fe2978954c7b9e30202a6ea34b57", - "4f4986d008434fc9912c496636b40b38", - "348701c9256e4eb48b8ffb0d9c0d6c83", - "11e5c44fa73c4d5d88561036f2a0a070", - "9781773e5d4d4e0ab8e3ff3140bd0983" - ] - }, - "id": "be37c48b", - "outputId": "aeec917e-853f-4b24-facc-c8c42468f3fd" - }, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "8aff0c10ce584f27b0989168c1c302e9", - "version_major": 2, - "version_minor": 0 + "cell_type": "code", + "execution_count": 27, + "id": "4b0da5ac-0345-45e2-9913-188590a31522", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "4b0da5ac-0345-45e2-9913-188590a31522", + "outputId": "5edf7712-a789-4974-e115-ba78a8877dbb" }, - "text/plain": [ - "Batches: 0%| | 0/36 [00:00\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", - "
retrieved_correct_positionreranked_correct_position
00.00.0
10.00.0
20.00.0
31.00.0
40.00.0
\n", - "" + "cell_type": "code", + "execution_count": 28, + "id": "dfbb3b3c-9baa-4298-abd8-0e7b75dd24ec", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "dfbb3b3c-9baa-4298-abd8-0e7b75dd24ec", + "outputId": "df6f1cdd-1779-499b-fd66-91e1fd314860", + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{'final_results': [{'score': 0.00039841508,\n", + " 'id': '7760dbdfeaf1828b780539812180a8a3',\n", + " 'metadata': {'date_uploaded': '2025-02-09T01:36:58.059608',\n", + " 'text': \"In the middle of the 18th century, a series of colonial conflicts began between France and Britain, which ultimately resulted in the destruction of most of the first French colonial empire and the near-complete expulsion of France from the Americas. These wars were the War of the Austrian Succession (1740–1748), the Seven Years' War (1756–1763), the American Revolution (1765–1783), the French Revolutionary Wars (1793–1802) and the Napoleonic Wars (1803–1815). It may even be seen further back in time to the first of the French and Indian Wars. This cyclic conflict is sometimes known as the Second Hundred Years' War.\"}},\n", + " {'score': 0.0002454633,\n", + " 'id': '517f23b9677bddd92be1e469c9182d88',\n", + " 'metadata': {'date_uploaded': '2025-02-09T01:37:12.088736',\n", + " 'text': 'From 1972, the National Park Service began allowing natural fires in Yellowstone to burn under controlled conditions. Fires of this type were referred to as prescribed natural fires. Between 1972 and 1987, a total of 235 prescribed natural fires burned a relatively small 33,759 acres (137 km2) under the directives of the new policy. Of these, only 15 spread to more than 100 acres (0.4 km2). The five years prior to 1988 were much wetter than normal and this may have reduced the area of the fires during that period. The prescribed natural fire policy appeared to be an effective way to manage fires, especially in the Yellowstone region.'}}],\n", + " 'retrieved_correct_position': None,\n", + " 'reranked_correct_position': None,\n", + " 'results_from_pinecone': [{'id': '7760dbdfeaf1828b780539812180a8a3',\n", + " 'metadata': {'date_uploaded': '2025-02-09T01:36:58.059608',\n", + " 'text': 'In the middle of the 18th century, a series of colonial '\n", + " 'conflicts began between France and Britain, which '\n", + " 'ultimately resulted in the destruction of most of the '\n", + " 'first French colonial empire and the near-complete '\n", + " 'expulsion of France from the Americas. These wars were '\n", + " 'the War of the Austrian Succession (1740–1748), the '\n", + " \"Seven Years' War (1756–1763), the American Revolution \"\n", + " '(1765–1783), the French Revolutionary Wars (1793–1802) '\n", + " 'and the Napoleonic Wars (1803–1815). It may even be '\n", + " 'seen further back in time to the first of the French '\n", + " 'and Indian Wars. This cyclic conflict is sometimes '\n", + " \"known as the Second Hundred Years' War.\"},\n", + " 'score': 0.270442665,\n", + " 'values': []},\n", + " {'id': '517f23b9677bddd92be1e469c9182d88',\n", + " 'metadata': {'date_uploaded': '2025-02-09T01:37:12.088736',\n", + " 'text': 'From 1972, the National Park Service began allowing '\n", + " 'natural fires in Yellowstone to burn under controlled '\n", + " 'conditions. Fires of this type were referred to as '\n", + " 'prescribed natural fires. Between 1972 and 1987, a '\n", + " 'total of 235 prescribed natural fires burned a '\n", + " 'relatively small 33,759 acres (137 km2) under the '\n", + " 'directives of the new policy. Of these, only 15 spread '\n", + " 'to more than 100 acres (0.4 km2). The five years prior '\n", + " 'to 1988 were much wetter than normal and this may have '\n", + " 'reduced the area of the fires during that period. The '\n", + " 'prescribed natural fire policy appeared to be an '\n", + " 'effective way to manage fires, especially in the '\n", + " 'Yellowstone region.'},\n", + " 'score': 0.244492292,\n", + " 'values': []}],\n", + " 'top_re_rank_score': 0.00039841508}" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } ], - "text/plain": [ - " retrieved_correct_position reranked_correct_position\n", - "0 0.0 0.0\n", - "1 0.0 0.0\n", - "2 0.0 0.0\n", - "3 1.0 0.0\n", - "4 0.0 0.0" + "source": [ + "query_result # the right context isn't there!" ] - }, - "execution_count": 107, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "os_predictions_df = pd.DataFrame(os_predictions)\n", - "os_predictions_df.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 108, - "id": "88419a17-598b-4b3e-b314-e1c5ef3475eb", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Accuracy without re-ranking: 0.5017421602787456\n", - "Accuracy with re-ranking: 0.6202090592334495\n" - ] - } - ], - "source": [ - "raw_accuracy = sum([p['retrieved_correct_position'] == 0 for p in os_predictions])/len(os_predictions)\n", - "reranked_accuracy = sum([p['reranked_correct_position'] == 0 for p in os_predictions])/len(os_predictions)\n", - "\n", - "print(f'Accuracy without re-ranking: {raw_accuracy}')\n", - "print(f'Accuracy with re-ranking: {reranked_accuracy}')\n" - ] - }, - { - "cell_type": "code", - "execution_count": 114, - "id": "cf6fc44d-6af1-48b6-b859-01a1698c7dd9", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "1 576 712\n", - "3 887 1009\n", - "5 948 1055\n", - "10 1008 1082\n", - "25 1073 1104\n", - "50 1107 1107\n" - ] - } - ], - "source": [ - "# do recall @ 1, 3, 5, 10\n", - "OPEN_SOURCE_RETRIEVAL = []\n", - "OPEN_SOURCE_RETRIEVAL_PLUS_PRE_CE = []\n", - "for k in (1, 3, 5, 10, 25, 50):\n", - " embedding_only_recall = os_predictions_df[os_predictions_df['retrieved_correct_position'] < k].shape[0]\n", - " reranked_recall = os_predictions_df[os_predictions_df['reranked_correct_position'] < k].shape[0]\n", - " print(k, embedding_only_recall, reranked_recall)\n", - " OPEN_SOURCE_RETRIEVAL.append(embedding_only_recall / os_predictions_df.shape[0])\n", - " OPEN_SOURCE_RETRIEVAL_PLUS_PRE_CE.append(reranked_recall / os_predictions_df.shape[0])" - ] - }, - { - "cell_type": "code", - "execution_count": 118, - "id": "f733061c-eb98-40cb-b116-602e1c0dcd3e", - "metadata": {}, - "outputs": [ + }, { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA3sAAAIjCAYAAAC6ZwLNAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAADd0UlEQVR4nOzdd3wUZf7A8c+2bHpCOoHQEgWpQZDQ8RRBERQbxQacYMWGDVQELMfZODxF0bP+rID1TgVFFJUiKE269E56L1uf3x+b3WSTTbJpbEi+79crr+zOPDPzzOzM7Hz3aRqllEIIIYQQQgghRLOi9XUGhBBCCCGEEEI0PAn2hBBCCCGEEKIZkmBPCCGEEEIIIZohCfaEEEIIIYQQohmSYE8IIYQQQgghmiEJ9oQQQgghhBCiGZJgTwghhBBCCCGaIQn2hBBCCCGEEKIZkmBPCCGEEEIIIZohCfaaGI1Gw9y5c32djUZ14YUX0r179zOyLW+P59y5c9FoNG7TOnTowOTJkxsnY03chRdeyIUXXlinZVvycfMlT+fwmbJ69Wo0Gg2rV6/2yfbLW7FiBcnJyfj7+6PRaMjJyWHy5Ml06NDB11k7K9Tn2m9Mdrud7t2788wzz9R6WU/nZ1M/J5p6/qDpnitNhS8/w8OHD6PRaHjhhRd8sv3mzPldm5GR0WjbcH5+7777rmvazJkzSUlJqdP6mlywd+DAAW677TY6deqEv78/oaGhDBo0iJdeeoni4mJfZ08IIeqkqKiIuXPnNomAqLnKzMxk3LhxBAQEsGjRIt5//32CgoJ8mqd169Yxd+5ccnJyfJqPxmCz2XjnnXe48MILiYiIwGg00qFDB6ZMmcIff/zhSvfuu++i0Wiq/Pvtt99q3NbHH3/MsWPHmD59emPuUoOT694RFHr63C+99NJKaU0mE4888gjx8fEEBASQkpLCypUrfZDrhtcY58K3337b7AsIhMN9993Htm3b+O9//1vrZfWNkJ86++abb7juuuswGo3cfPPNdO/eHbPZzJo1a3jooYfYuXMnb7zxhq+z2aiKi4vR65vUx9Ji7d27F622yf0eIs5SRUVFzJs3D6BRfg1//PHHmTlzZoOv92zy+++/k5+fz1NPPcXw4cNd0//zn/9gt9t9kqd169Yxb948Jk+eTHh4uE/y0BiKi4u5+uqrWbFiBUOHDuXRRx8lIiKCw4cPs3TpUt577z2OHj1K27ZtXcs8+eSTdOzYsdK6kpKSatze888/z4QJEwgLC2vQ/Whsdb3ufXnONoa2bdsyf/58t2nx8fGV0k2ePJlPP/2U++67j3POOYd3332XUaNG8dNPPzF48OAzld1G0RjfAd9++y2LFi2SgK8FiIuL48orr+SFF17giiuuqNWyTSaqOHToEBMmTKB9+/b8+OOPtG7d2jXvrrvuYv/+/XzzzTc+zGHjsdvtmM1m/P398ff393V2RCmj0ejrLIgKJk+ezOHDh8/4r+RFRUUEBgae0W0WFhbWqlRKr9e3+B+K0tLSACoFVQaDwQe5ad4eeughVqxYwb/+9S/uu+8+t3lz5szhX//6V6VlLrvsMvr27VvrbW3ZsoVt27bx4osv1jW7DUYpRUlJCQEBAY2yfud139zO2bCwMG688cZq02zcuJFPPvmE559/ngcffBDA9cP/ww8/zLp162q9XV/cu4X3avs9563yz9XNybhx47juuus4ePAgnTp18nq5JlNs8dxzz1FQUMBbb73lFug5JSUlce+997reW61WnnrqKRITE11VRx599FFMJpPbch06dGD06NGsXr2avn37EhAQQI8ePVwPi59//jk9evTA39+fPn36sGXLFrflJ0+eTHBwMAcPHmTkyJEEBQURHx/Pk08+iVLKLe0LL7zAwIEDiYyMJCAggD59+vDpp59W2heNRsP06dP58MMP6datG0ajkRUrVrjmlf+Fxlk3eP/+/a5fhsPCwpgyZQpFRUVu6y0uLuaee+4hKiqKkJAQrrjiCk6cOOF1uzWTycScOXNISkrCaDSSkJDAww8/XOmYOvO/bNkyunbtSkBAAAMGDGD79u0AvP766yQlJeHv78+FF17I4cOHPW5v06ZNDBw4kICAADp27MjixYvrnCeTycT9999PdHS0a9+PHz/ucbtr1qzhggsuwN/fn8TERF5//XWP6Sq2PXNWRVq7di0zZswgOjqaoKAgrrrqKtLT092WtdvtzJ07l/j4eAIDA/nb3/7Grl27vGrPVr6u/aJFi+jUqROBgYGMGDGCY8eOoZTiqaeeom3btgQEBHDllVeSlZVVaT2vvvqq6/yKj4/nrrvu8liV7I033iAxMZGAgAD69evHr7/+6jFf3n4WFVksFubNm8c555yDv78/kZGRDB48+IxWzXG22VmyZAmPPvoocXFxBAUFccUVV3Ds2DG3tM42pZs2bWLo0KEEBgby6KOPAnU/BocPHyY6OhqAefPmuaoxOa9L533mwIEDjBo1ipCQEG644QYAfv31V6677jratWvn2ub9999fqVq7pzZ7zmv1yy+/pHv37hiNRrp16+a635R34sQJ/v73vxMbG+tK9/bbb1dKd/z4ccaOHUtQUBAxMTHcf//9Ne4/wKeffopGo+Hnn3+uNO/1119Ho9GwY8cOAE6fPs2UKVNo27YtRqOR1q1bc+WVV1Z5LwHH5zZp0iQALrjgAjQajetaq9h2pvw15jz/jUYjF1xwAb///nulde/Zs4drr72WiIgI/P396du3r1dVaebOnctDDz0EQMeOHV2f++HDhz22yXCqz/cAwAcffECfPn0ICAggIiKCCRMmVDrPwftrv6Ljx4/z+uuvc8kll1QK9AB0Oh0PPvigW6lefXz55Zf4+fkxdOhQt+lHjhzhzjvvpHPnzgQEBBAZGcl1111X7XlSW85niO+++871DOH8zsjJyeG+++4jISEBo9FIUlISzz77rKtErj7Xvaf2Xna7nYULF9KtWzf8/f2JjY3ltttuIzs725Vm9OjRVT4EDhgwoFKw3djnSnlWq5WCgoIq53/66afodDpuvfVW1zR/f39uueUW1q9f7zFf5TXEvXvlypUMHjyY8PBwgoOD6dy5s2sdUPYcUPEcq6ndck3nQl3ueZMnT2bRokUAbtVjK2qoe1xtnoGqym9V57s353Z1qnuuru2zuTfflxUdOXKEpKQkunfvTmpqKlDz/cHJ2a48LCyM8PBwJk2aVGW1f2eNla+++sqr4+LUZH4G/t///kenTp0YOHCgV+mnTp3Ke++9x7XXXssDDzzAhg0bmD9/Prt37+aLL75wS7t//36uv/56brvtNm688UZeeOEFxowZw+LFi3n00Ue58847AZg/fz7jxo2rVH3PZrNx6aWX0r9/f5577jlWrFjBnDlzsFqtPPnkk650L730EldccQU33HADZrOZTz75hOuuu46vv/6ayy+/3C1PP/74I0uXLmX69OlERUXV2Ih33LhxdOzYkfnz57N582befPNNYmJiePbZZ11pJk+ezNKlS7npppvo378/P//8c6XtVsVut3PFFVewZs0abr31Vs477zy2b9/Ov/71L/766y++/PJLt/S//vor//3vf7nrrrtcx2706NE8/PDDvPrqq9x5551kZ2fz3HPP8fe//50ff/zRbfns7GxGjRrFuHHjmDhxIkuXLuWOO+7Az8+Pv//977XO09SpU/nggw+4/vrrGThwID/++KPHfd++fTsjRowgOjqauXPnYrVamTNnDrGxsV4dJ4C7776bVq1aMWfOHA4fPszChQuZPn06S5YscaWZNWsWzz33HGPGjGHkyJFs27aNkSNHUlJS4vV2PvzwQ8xmM3fffTdZWVk899xzjBs3josuuojVq1fzyCOPsH//fl5++WUefPBBtwfzuXPnMm/ePIYPH84dd9zB3r17ee211/j9999Zu3at61fjt956i9tuu42BAwdy3333cfDgQa644goiIiJISEhwra+250d5c+fOZf78+UydOpV+/fqRl5fHH3/8webNm7nkkku8Ph4N4ZlnnkGj0fDII4+QlpbGwoULGT58OFu3bnX7pT4zM5PLLruMCRMmcOONNxIbG1uvYxAdHc1rr73GHXfcwVVXXcXVV18NQM+ePV1prFYrI0eOZPDgwbzwwguuX6OXLVtGUVERd9xxB5GRkWzcuJGXX36Z48ePs2zZshr3ec2aNXz++efceeedhISE8O9//5trrrmGo0ePEhkZCUBqair9+/d3fdlFR0ezfPlybrnlFvLy8lwP9MXFxVx88cUcPXqUe+65h/j4eN5///1K17cnl19+OcHBwSxdupRhw4a5zVuyZAndunVzddx0zTXXsHPnTu6++246dOhAWloaK1eu5OjRo1XeKx977DE6d+7MG2+84aoumJiYWG2ePvroI/Lz87ntttvQaDQ899xzXH311Rw8eNB1jezcuZNBgwbRpk0bZs6cSVBQEEuXLmXs2LF89tlnXHXVVVWu/+qrr+avv/7i448/5l//+hdRUVGA43zw5uGoIm++B5555hlmz57NuHHjmDp1Kunp6bz88ssMHTqULVu2uEo9vb32PVm+fDlWq5WbbrqpVvnPzc2t1KmBRqNxnYdVWbduHd27d69U2vX777+zbt06JkyYQNu2bTl8+DCvvfYaF154Ibt27WqwEp29e/cyceJEbrvtNqZNm0bnzp0pKipi2LBhnDhxgttuu4127dqxbt06Zs2axalTp1i4cGG9rntPbrvtNt59912mTJnCPffcw6FDh3jllVfYsmWL674+fvx4br75Zn7//XcuuOAC17JHjhzht99+4/nnn3dNOxPnitNff/1FUFAQZrOZ2NhYpk2bxhNPPOH2mW7ZsoVzzz2X0NBQt2X79esHwNatW2vcXn3u3Tt37mT06NH07NmTJ598EqPRyP79+1m7dq1X+1idms6FutzzbrvtNk6ePMnKlSt5//33PaZpjHucN89AVanqfPfm3K5JVc/VtXk29+b7sqIDBw5w0UUXERERwcqVK4mKivLq/gCOmgJXXnkla9as4fbbb+e8887jiy++cP1wWVFYWBiJiYmsXbuW+++/v8Zj4qKagNzcXAWoK6+80qv0W7duVYCaOnWq2/QHH3xQAerHH390TWvfvr0C1Lp161zTvvvuOwWogIAAdeTIEdf0119/XQHqp59+ck2bNGmSAtTdd9/tmma329Xll1+u/Pz8VHp6umt6UVGRW37MZrPq3r27uuiii9ymA0qr1aqdO3dW2jdAzZkzx/V+zpw5ClB///vf3dJdddVVKjIy0vV+06ZNClD33XefW7rJkydXWqcn77//vtJqterXX391m7548WIFqLVr17rl0Wg0qkOHDrmmOY9dXFycysvLc02fNWuWAtzSDhs2TAHqxRdfdE0zmUwqOTlZxcTEKLPZXKs8Oc+HO++80y3d9ddfX2nfx44dq/z9/d0+9127dimdTqcqXg7t27dXkyZNcr1/5513FKCGDx+u7Ha7a/r999+vdDqdysnJUUopdfr0aaXX69XYsWPd1jd37lwFuK3Tk0OHDilARUdHu9apVNmx7NWrl7JYLK7pEydOVH5+fqqkpEQppVRaWpry8/NTI0aMUDabzZXulVdeUYB6++23lVKO8zMmJkYlJycrk8nkSvfGG28oQA0bNsw1rTbnR8Xj1qtXL3X55ZdXu8/emjRpklu+vPXTTz8pQLVp08bt/Fy6dKkC1EsvveSa5jw/Fy9e7LaO2hwDT9LT06u8Fp33mZkzZ1aaV/G+opRS8+fPVxqNxu08dt4rygOUn5+f2r9/v2vatm3bFKBefvll17RbbrlFtW7dWmVkZLgtP2HCBBUWFubKw8KFCxWgli5d6kpTWFiokpKSKt07PZk4caKKiYlRVqvVNe3UqVNKq9WqJ598UimlVHZ2tgLU888/X+26PHFeo7///rvb9EmTJqn27du73juvscjISJWVleWa/tVXXylA/e9//3NNu/jii1WPHj1c15dSju+AgQMHqnPOOafGPD3//POV7oHl8/DOO+9UWqau3wOHDx9WOp1OPfPMM27ptm/frvR6vWt6ba59T+6//34FqC1btlSbzsn5uXj6MxqNNS7ftm1bdc0111Sa7unaWL9+vQLU//3f/7mmOa//it/t5c+JqjifIVasWOE2/amnnlJBQUHqr7/+cps+c+ZMpdPp1NGjR5VSdb/uK+bv119/VYD68MMP3dKtWLHCbXpubq4yGo3qgQcecEv33HPPud0zztS5opRSf//739XcuXPVZ599pv7v//5PXXHFFQpQ48aNc0vXrVu3Ss9LSim1c+dOj/fkiup77/7Xv/6lALfnuoqc53LF69mbc6yqc6E+97y77rqr0n1fqca5x3n7DFSVqs53b8/t6lT3XF2bZ3Nvvi+d9+P09HS1e/duFR8fry644AK34+zt/eHLL79UgHruuedcaaxWqxoyZEiV3w8jRoxQ5513Xo3HpLwmUY0zLy8PgJCQEK/Sf/vttwDMmDHDbfoDDzwAUKltX9euXRkwYIDrvbPr0osuuoh27dpVmn7w4MFK2yzfA5jz12+z2cwPP/zgml6+ZCA7O5vc3FyGDBnC5s2bK61v2LBhdO3atYY9LXP77be7vR8yZAiZmZmuY+csZnaWUjrdfffdXq1/2bJlnHfeeXTp0oWMjAzX30UXXQTATz/95Jb+4osvdvu1yXnsrrnmGrfPsapjqtfrue2221zv/fz8uO2220hLS2PTpk21ypPzfLjnnnvctlGxepHNZuO7775j7Nixbp/7eeedx8iRI704Sg633nqrW1WJIUOGYLPZOHLkCACrVq3CarXW+bNwuu6669w6I3AeyxtvvNGtbVZKSgpms5kTJ04A8MMPP2A2m7nvvvvcSqinTZtGaGio6/r4448/SEtL4/bbb8fPz8+VzlmdoLzanh/lhYeHs3PnTvbt21er/bfb7W7bysjIwGQyYbFYKk23WCxerfPmm292Oz+vvfZaWrdu7TqHnIxGI1OmTHGbVp9j4K077rij0rTy95XCwkIyMjIYOHAgSqlK1c49GT58uFsJV8+ePQkNDXVdk0opPvvsM8aMGYNSym3fRo4cSW5uruse9u2339K6dWuuvfZa1/oCAwPdql1VZ/z48aSlpblVdfr000+x2+2MHz/etb9+fn6sXr3a6yo8dTV+/HhatWrlej9kyBCg7H6VlZXFjz/+yLhx48jPz3cdl8zMTEaOHMm+fftc192ZUNP3wOeff47dbmfcuHFun2NcXBznnHOO6xytzbXvSW2/s50WLVrEypUr3f6WL19e43KZmZlun5NT+WvDYrGQmZlJUlIS4eHhHr9366pjx46VviOWLVvGkCFDaNWqlduxHj58ODabjV9++cXr9Xu67itatmwZYWFhXHLJJW7b69OnD8HBwa7PNjQ0lMsuu4ylS5e6NTVZsmQJ/fv3d333nalzBRwlg3PmzOHqq6/mpptu4quvvmLatGksXbrUrSfW4uJij23lne2uvOmRvT73bmdJ5ldffXVGO8dpzHteY9zjanoGqknF893bc7smVT1X1+bZvKbvy/J27NjBsGHD6NChAz/88IPbcfb2/vDtt9+i1+vdjolOp6v2edG5ztpoEtU4nUX2+fn5XqU/cuQIWq22Ug9ecXFxhIeHVzrhyj/YA64bVMXqAM7pFS82rVZbqQ78ueeeC+BWn/rrr7/m6aefZuvWrW71wD3VofbUI1l1Ku6D86TKzs4mNDTUdUwqrtebXs4A9u3bx+7du111yitydnxQVX5qe0zj4+MrNcotf0z79+/vdZ6c+16xylbnzp3d3qenp1NcXMw555xTaV2dO3eu9MBfleo+C2d+oPKxj4iI8PjA4u12vD3Gzu1X3H8/Pz86derkmu/8X/F4GAyGSud7bc+P8p588kmuvPJKzj33XLp3786ll17KTTfd5FaVyZOjR49WeZ1UzMdPP/3kVe9mFfdVo9GQlJRUqV1EmzZt3B5swPtjkJWVhdlsdk0PCAjw6qFIr9d7bON09OhRnnjiCf773/9Wuo5yc3NrXG/F8wgc56xzXenp6eTk5PDGG29U2dtx+WstKSmp0j2t4rlWlUsvvZSwsDCWLFnCxRdfDDgeQpOTk13Xv9Fo5Nlnn+WBBx4gNjaW/v37M3r0aG6++Wbi4uK82o63arqW9+/fj1KK2bNnM3v2bI/rSEtLIy4urlK1zIiIiErnUGPmNzQ0lH379qGU8niPg7KOampz7XtS2+9sp379+tWpgxagUht5cDz8z58/n3feeYcTJ064pfHm2vCWp/vQvn37+PPPP+t0Tyyvquve0/Zyc3OJiYmpcXvjx4/nyy+/ZP369QwcOJADBw6wadMmV9Ux5/rOxLlSlQceeID//Oc//PDDD/Tv3x9w3Cs9tf91Nn/wplOc+ty7x48fz5tvvsnUqVOZOXMmF198MVdffTXXXntto/bM3Zj3vIa6x7Vp08brdVbH0/nu7bmdm5vrFvD7+fkRERHhel/V80Jtns1r+r4sb8yYMcTGxvLdd98RHBxcaZ+8uT8cOXKE1q1bV1q+uu9UpVStx9RtMsFefHy8q3G+t7zdWZ1OV6vpnr5UavLrr79yxRVXMHToUF599VVat26NwWDgnXfe4aOPPqqUvrY9eTVkXj2x2+306NGDBQsWeJxfMcA4E8e0tnk6Uxr7s6hpO2dq++XV57MYOnQoBw4c4KuvvuL777/nzTff5F//+heLFy9m6tSpVS4XFxdXqROX559/ntOnT1fqla9Xr1612Juaebo+vT0GV199tVsnJJMmTfLYCUdFRqOx0gOFzWbjkksuISsri0ceeYQuXboQFBTEiRMnmDx5sle/Ptd0vjjXceONN1bZTqCmwNxbRqORsWPH8sUXX/Dqq6+SmprK2rVr+cc//uGW7r777mPMmDF8+eWXfPfdd8yePZv58+fz448/0rt37wbJC3h/bB588MEqS/+TkpI4duxYpQeNmn6AqOr7y2az1Su/Go2G5cuXe0xb8YGirrp06QI42kAnJyc3yDqrExkZ6fFh6+677+add97hvvvuY8CAAYSFhaHRaJgwYUKDlsxUdT+45JJLePjhhz0u4/zxoiaerntP7HY7MTExfPjhhx7nl3+oHDNmDIGBgSxdupSBAweydOlStFot1113ndv6zsS5UhXn/bJ852KtW7f2WFJ+6tQpwPNQDRXV594dEBDAL7/8wk8//cQ333zDihUrWLJkCRdddBHff/89Op2uTtetNxrrntdQ97jarLM6ns53b8/te++9l/fee881fdiwYW61RDx99rV9Nq/Nvl1zzTW89957fPjhh2411Zz71BD3B0+ys7Nd7b+91SSCPXD0IPXGG2+wfv16tyqXnrRv3x673c6+ffs477zzXNNTU1PJycmhffv2DZo3u93OwYMH3T6cv/76C8BVlfGzzz7D39+f7777zq0awjvvvNOgeamK85gcOnTI7Re4/fv3e7V8YmIi27Zt4+KLL671LwZ1cfLkyUpd7lY8pt7mybnvBw4ccPs1ZO/evW7poqOjCQgI8FidsGLa+nCef/v373d7AMzMzGz0amnlt7937163X17NZjOHDh1y9ebkTLdv3z5XdRZwVIc6dOiQWwBV3/MjIiKCKVOmMGXKFAoKChg6dChz586tNtjz9/d3GysNHD3HmUymStO9VfGzV0qxf/9+r4IZb4/Biy++6PY5Ox9Q6nLctm/fzl9//cV7773HzTff7JrekD2ZOnuwtdlsNR7X9u3bs2PHjkq/LNbm+hk/fjzvvfceq1atYvfu3SilXFU4y0tMTOSBBx7ggQceYN++fSQnJ/Piiy/ywQcfeL9z9eS8fgwGQ7XHxmAwVPpMnNdPVZ+789fwir2ueVsVypPExESUUnTs2LHah4naXPueXHbZZeh0Oj744INad9JSF126dOHQoUOVpn/66adMmjTJ7cefkpKSMzKAfWJiIgUFBTVeMw31fZqYmMgPP/zAoEGDavyxOCgoiNGjR7Ns2TIWLFjAkiVLGDJkiFuwdKbOlao4q8WVD1KTk5P56aefyMvLc+ukZcOGDa75dVGb7y+tVsvFF1/MxRdfzIIFC/jHP/7BY489xk8//cTw4cPrdd3WtO263PPqe355e49rTN6e2w8//LDb8B3e1JRqzGfz559/Hr1e7+rM5frrr3fN8/b+0L59e1atWkVBQYHbDyzVfafW5bprEm32wPEhBgUFMXXqVFe3peUdOHCAl156CYBRo0YBuFVJAFy/2njbA2VtvPLKK67XSileeeUVDAaDqyqS8xef8r/uHD58uNoe+hqS8xeZV1991W36yy+/7NXy48aN48SJE/znP/+pNK+4uJjCwsL6Z7Icq9XqNuSB2Wzm9ddfJzo6mj59+tQqT5dddhkA//73v93SVDw/dDodI0eO5Msvv+To0aOu6bt37+a7775rkP0CR3tGvV7Pa6+95ja9/DnUmIYPH46fnx///ve/3X6Neuutt8jNzXVdH3379iU6OprFixe7VTt89913K32R1ef8yMzMdHsfHBxMUlKSV931N7T/+7//c6t69umnn3Lq1CnXOVQdb49Bnz59GD58uOvP2YbA2etYbR5Enb8ylv8clVKue2FD0Ol0XHPNNXz22Wcea1eUr544atQoTp486dZtdVFRUZXVPz0ZPnw4ERERLFmyhCVLltCvXz+3H0WKiooq9VqbmJhISEjIGT9nYmJiuPDCC3n99dddpQvlOY+N84eJ8n/O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LERERERE9QbDnhFT3LoFADDXchgnF2chIiIiIqo/GPaMGHv2iIiIiIioIgx7RqokJwclWVkAtA97abmlPXtutgx7RERERESmjmHPSKlW4pQ6OEBqa6vVNephnFyghYiIiIjI5DHsGSnF7b/m62nZq1dUUoR7+fcAsGePiIiIiKg+YNgzUopbus3XU227YCm1RAOLBnqri4iIiIiI6gaGPSOlXpzF01Or81Xz9eQ2cgiCoLe6iIiIiIiobmDYM1KKOzquxJlTOseP2y4QEREREdUPDHtGqki97YJ24U29Eie3XSAiIiIiqhcY9oyUrnP22LNHRERERFS/MOwZoZLsbCizswEAMl332GPPHhERERFRvcCwZ4QUd/7aY69BA0hsbLS6hmGPiIiIiKh+YdgzQuqVOLXs1VOKSvXWCxzGSURERERUPzDsGSHFLd02VL+ffx8KpQJSQQpXa1d9lkZERERERHUEw54RKtKxZ0+1OIurtSvMJGZ6q4uIiIiIiOoOhj0jpLhdGt7MPbULe6ohnJyvR0RERERUfzDsGSHVnD1tV+K8k1saDt1sGfaIiIiIiOoLhj0jpOsCLeo99my4OAsRERERUX3BsGdkSrKyoHz8GABg7q5deFNvu8CePSIiIiKieoNhz8ioevWkTk6QWFtrdY0q7LFnj4iIiIio/mDYMzLqlTg9PbW+Ji2HG6oTEREREdU3DHtG5u/5etr10mUXZSNHkQMAkNvI9VYXERERERHVLQx7RkZxS7eVOFW9eg0sGsDaXLthn0REREREZPwY9oxMdVfi5OIsRERERET1C8OekVHoOGdPvRIn5+sREREREdUrDHtGRBRFnXv2GPaIiIiIiOonhj0joszKgjI3F4D2e+ypN1S35bYLRERERET1CcOeESn6a3EWacOGkFhaanUN99gjIiIiIqqfGPaMiK7bLgB/hz25LbddICIiIiKqTxj2jIgq7Mk8tFucpbCkEPfz7wNgzx4RERERUX3DsGdEdF2cJT03HQBgZWYFRwtHfZVFRERERER1EMOeEVHcugWgGnvs2bhBEAS91UVERERERHUPw54RUdypXs8eN1QnIiIiIqp/GPaMhCiKKLpd2lNn7qllz17u3z17RERERERUvzDsGQllZibEvDwA1dhjj4uzEBERERHVOwx7RkJxpzS4mbm4QGJhodU1qm0XOIyT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", - "text/plain": [ - "
" + "cell_type": "code", + "execution_count": 29, + "id": "caa66ac8-d69c-49a1-9f55-e9ef93379fec", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "caa66ac8-d69c-49a1-9f55-e9ef93379fec", + "outputId": "00d71d0d-24f9-4ac1-d419-5b735fbe86c5" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(None, None)" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "query_result = get_results_from_pinecone(\n", + " query,\n", + " top_k=100, # grab 10 results\n", + " re_rank_model=cross_encoder, correct_hash=q_to_hash[query],\n", + " verbose=False\n", + " )\n", + "\n", + "query_result['retrieved_correct_position'], query_result['reranked_correct_position']" ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import matplotlib.pyplot as plt\n", - "\n", - "X = [1, 3, 5, 10, 25, 50]\n", - "\n", - "OPENAI_RETRIEVAL = [866 / os_predictions_df.shape[0], 1009/ os_predictions_df.shape[0], 1048/ os_predictions_df.shape[0], 1072/ os_predictions_df.shape[0], 1108/ os_predictions_df.shape[0], 1122/ os_predictions_df.shape[0]]\n", - "OLD_CROSS_ENCODER = [956 / os_predictions_df.shape[0], 1057/ os_predictions_df.shape[0], 1077/ os_predictions_df.shape[0], 1094/ os_predictions_df.shape[0], 1120/ os_predictions_df.shape[0], 1122/ os_predictions_df.shape[0]]\n", - "\n", - "# Creating the plot\n", - "plt.figure(figsize=(10, 6))\n", - "plt.plot(X, OPENAI_RETRIEVAL, label='OAI Retrieval Only', marker='o')\n", - "plt.plot(X, OLD_CROSS_ENCODER, label='OAI + Pretrained CE', marker='s')\n", - "\n", - "plt.plot(X, OPEN_SOURCE_RETRIEVAL, label='OS Retrieval Only', marker='*')\n", - "plt.plot(X, OPEN_SOURCE_RETRIEVAL_PLUS_PRE_CE, label='OS + Pretrained CE', marker='^')\n", - "\n", - "\n", - "# Adding titles and labels\n", - "plt.title('Comparing embedding models + pre-trained vs fine-tuned CE (all retrieved 50 results then re-ranked)')\n", - "plt.xlabel('Recall @')\n", - "plt.ylabel('Performance')\n", - "plt.xticks(X)\n", - "plt.yticks([i/100 for i in range(70, 101, 5)]) # Adjusting y-ticks to start from 0.75\n", - "\n", - "# Adding legend\n", - "plt.legend()\n", - "\n", - "# Show the plot\n", - "plt.grid(True)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "097fe3bc-4fc1-4e69-bf60-6ab4f75da968", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "f11e5dcd-7ad8-43d0-aa1b-2b94b3784253", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "06e3a30f-e913-43ad-9fa7-f712abfa59d0", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "91e6c207-7f75-4b04-8d32-541265902fa5", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "9ec04ddb-5a7d-4506-a0ba-a3ddedf985df", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "30c5cb27-018c-4299-a91f-6b39293c583e", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "c3200a66-9fc0-4f39-94e8-3456b85b6a96", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "ea30153c", - "metadata": { - "id": "ea30153c" - }, - "source": [ - "## Advanced: Fine-tuning the re-ranker" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "58979a1e-0fe1-488f-9805-56efd499278d", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "508edaf6", - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" }, - "id": "508edaf6", - "outputId": "1938803f-c8bd-478b-a37c-3a3894e1c106" - }, - "outputs": [ { - "data": { - "text/plain": [ - "{'id': 'a4968ca8a18de16aa3859be760e43dbd3af3fce9',\n", - " 'title': 'Area 51',\n", - " 'context': 'In 1994, five unnamed civilian contractors and the widows of contractors Walter Kasza and Robert Frost sued the USAF and the United States Environmental Protection Agency. Their suit, in which they were represented by George Washington University law professor Jonathan Turley, alleged they had been present when large quantities of unknown chemicals had been burned in open pits and trenches at Groom. Biopsies taken from the complainants were analyzed by Rutgers University biochemists, who found high levels of dioxin, dibenzofuran, and trichloroethylene in their body fat. The complainants alleged they had sustained skin, liver, and respiratory injuries due to their work at Groom, and that this had contributed to the deaths of Frost and Kasza. The suit sought compensation for the injuries they had sustained, claiming the USAF had illegally handled toxic materials, and that the EPA had failed in its duty to enforce the Resource Conservation and Recovery Act (which governs handling of dangerous materials). They also sought detailed information about the chemicals to which they were allegedly exposed, hoping this would facilitate the medical treatment of survivors. Congressman Lee H. Hamilton, former chairman of the House Intelligence Committee, told 60 Minutes reporter Lesley Stahl, \"The Air Force is classifying all information about Area 51 in order to protect themselves from a lawsuit.\"',\n", - " 'question': 'Who analyzed the biopsies?',\n", - " 'answers': {'answer_start': [457],\n", - " 'text': ['Rutgers University biochemists']}}" - ] - }, - "execution_count": 191, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "dataset['train'][0]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "51bf1607", - "metadata": { - "id": "51bf1607" - }, - "outputs": [], - "source": [ - "from sentence_transformers import InputExample, losses, evaluation\n", - "from torch.utils.data import DataLoader\n", - "from random import shuffle\n", - "\n", - "shuffled_training_passages = dataset['train']['question'].copy()\n", - "shuffle(shuffled_training_passages)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "6b58d2d0", - "metadata": { - "id": "6b58d2d0" - }, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "50fd5c19-894a-41e4-bf6f-d9e1197c053f", - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" + "cell_type": "code", + "execution_count": 29, + "id": "uk1lhptdUfrL", + "metadata": { + "id": "uk1lhptdUfrL" + }, + "outputs": [], + "source": [] }, - "id": "50fd5c19-894a-41e4-bf6f-d9e1197c053f", - "outputId": "8501a6c6-548c-4928-ecb7-4ed99339063b" - }, - "outputs": [ { - "data": { - "text/plain": [ - "(9916, 11590)" + "cell_type": "code", + "execution_count": 30, + "id": "a63ec53e", + "metadata": { + "id": "a63ec53e" + }, + "outputs": [], + "source": [ + "test_sample = dataset['test']" ] - }, - "execution_count": 197, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "unique_train_passages = list(set(dataset['train']['context']))\n", - "len(unique_train_passages), len(dataset['train']['context'])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ce8e076e-4822-4686-b57a-b8c0e09583e5", - "metadata": { - "id": "ce8e076e-4822-4686-b57a-b8c0e09583e5" - }, - "outputs": [], - "source": [ - "from sentence_transformers import SentenceTransformer\n", - "\n", - "# We will use this embedder to find negative examples\n", - "bi_encoder = SentenceTransformer(\"sentence-transformers/msmarco-MiniLM-L-6-v3\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "c4ae6f1f-0523-40ff-8d5d-f374e4ead044", - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 49, - "referenced_widgets": [ - "dbca2d7da970438892d45cd387434f6f", - "6f5389fdc3674a05ad79bb9456a5995f", - "7a5c511f2fe84c66beef7fed87023669", - "70e45cb4f2f64c499acc785ec64743fe", - "bb260568c96a4397bba2b1058404eec2", - "e281ca37b72d422285aa64193265aaa4", - "687d7bf7373f4541852203637e18d2e3", - "5a7b319329164b27bf452869e2335aef", - "e5a88639e7e5430fbe44f73d2e5a4b23", - "d9f6781147a24bc3aec97b87927bdfbb", - "d0c85ebbf1a54fdcaa33210aa3e247b8" - ] }, - "id": "c4ae6f1f-0523-40ff-8d5d-f374e4ead044", - "outputId": "847007cf-bf2e-4d3a-a10f-fd84123c1eb0" - }, - "outputs": [ { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "dbca2d7da970438892d45cd387434f6f", - "version_major": 2, - "version_minor": 0 + "cell_type": "code", + "execution_count": 31, + "id": "21a3a147", + "metadata": { + "id": "21a3a147" }, - "text/plain": [ - "Batches: 0%| | 0/620 [00:00\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
final_resultsretrieved_correct_positionreranked_correct_positionresults_from_pineconetop_re_rank_score
0[{'score': 0.29227442, 'id': '2f90090e21f19450...0.00.0[{'id': '2f90090e21f19450887d5f3ff781e541',\n", + " '...0.292274
1[{'score': 0.17795162, 'id': '49201636ad410273...0.00.0[{'id': '49201636ad4102735125e146c0dbafa4',\n", + " '...0.177952
2[{'score': 0.9939328, 'id': '80d92494d2b06f341...0.00.0[{'id': '80d92494d2b06f341842f1855d2938cf',\n", + " '...0.993933
3[{'score': 0.16567454, 'id': '99247f2042d1ed0b...0.02.0[{'id': 'e3fd54f33b021ea3cf88b438fefcada7',\n", + " '...0.848871
4[{'score': 0.8213388, 'id': '37ed40c20d4e1b9cc...0.00.0[{'id': '37ed40c20d4e1b9cc8d6cc27a4d0fff3',\n", + " '...0.821339
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + " \n" + ], + "text/plain": [ + " final_results \\\n", + "0 [{'score': 0.29227442, 'id': '2f90090e21f19450... \n", + "1 [{'score': 0.17795162, 'id': '49201636ad410273... \n", + "2 [{'score': 0.9939328, 'id': '80d92494d2b06f341... \n", + "3 [{'score': 0.16567454, 'id': '99247f2042d1ed0b... \n", + "4 [{'score': 0.8213388, 'id': '37ed40c20d4e1b9cc... \n", + "\n", + " retrieved_correct_position reranked_correct_position \\\n", + "0 0.0 0.0 \n", + "1 0.0 0.0 \n", + "2 0.0 0.0 \n", + "3 0.0 2.0 \n", + "4 0.0 0.0 \n", + "\n", + " results_from_pinecone top_re_rank_score \n", + "0 [{'id': '2f90090e21f19450887d5f3ff781e541',\n", + " '... 0.292274 \n", + "1 [{'id': '49201636ad4102735125e146c0dbafa4',\n", + " '... 0.177952 \n", + "2 [{'id': '80d92494d2b06f341842f1855d2938cf',\n", + " '... 0.993933 \n", + "3 [{'id': 'e3fd54f33b021ea3cf88b438fefcada7',\n", + " '... 0.848871 \n", + "4 [{'id': '37ed40c20d4e1b9cc8d6cc27a4d0fff3',\n", + " '... 0.821339 " + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pandas as pd\n", + "\n", + "predictions_df = pd.DataFrame(predictions)\n", + "predictions_df.head()" + ] }, - "id": "b281241b-54ed-4405-a101-f774efd2317d", - "outputId": "649df482-1761-4ba9-c20d-4364e037e2b0" - }, - "outputs": [ { - "data": { - "text/plain": [ - "34770" + "cell_type": "code", + "execution_count": 35, + "id": "831397d3-606a-4c7f-b77f-6ee85bd24f7e", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 147 + }, + "id": "831397d3-606a-4c7f-b77f-6ee85bd24f7e", + "outputId": "b87a375b-a56d-42e3-d1d6-d7fdbdb0cfff" + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
0
retrieved_correct_position1.306595
reranked_correct_position0.680927
\n", + "

" + ], + "text/plain": [ + "retrieved_correct_position 1.306595\n", + "reranked_correct_position 0.680927\n", + "dtype: float64" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "predictions_df[['retrieved_correct_position', 'reranked_correct_position']].mean() # lower is better" ] - }, - "execution_count": 203, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(train_samples)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8e7eaa40", - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" }, - "id": "8e7eaa40", - "outputId": "2d1ab8ba-9f2e-4b24-b104-baf10d58e45f" - }, - "outputs": [ { - "data": { - "text/plain": [ - "{'guid': '',\n", - " 'texts': ['How was Mike Leander also known as?',\n", - " \"Günter Theodor Netzer (born 14 September 1944 in Mönchengladbach) is a former German football player and team general manager currently working in the media business. He achieved great success in Germany with Borussia Mönchengladbach in the early 1970s, and, after moving to Spain in 1973, with Real Madrid. He played as an attacking midfielder, and is considered one of the greatest passers in the game's history. He was voted Footballer of the Year in Germany twice, in 1972 and 1973. He was the general manager for Hamburger SV during much of the team's golden period from the late 1970s through the early 1980s, when the club won three league titles and the 1983 European Cup.\"],\n", - " 'label': 0}" + "cell_type": "code", + "execution_count": 36, + "id": "eyv-6pPIEy0r", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "eyv-6pPIEy0r", + "outputId": "14dcdf11-c330-4ab5-8b0d-6541df2fefbc" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1 865 957\n", + "3 1009 1057\n", + "5 1048 1076\n", + "10 1073 1094\n", + "25 1108 1120\n", + "50 1122 1122\n" + ] + } + ], + "source": [ + "# do recall @ 1, 3, 5, 10, etc\n", + "X = [1, 3, 5, 10, 25, 50]\n", + "OPENAI_RETRIEVAL = []\n", + "OLD_CROSS_ENCODER = []\n", + "\n", + "for k in X:\n", + " embedding_only_recall = predictions_df[predictions_df['retrieved_correct_position'] < k].shape[0]\n", + " reranked_recall = predictions_df[predictions_df['reranked_correct_position'] < k].shape[0]\n", + " OPENAI_RETRIEVAL.append(embedding_only_recall / predictions_df.shape[0])\n", + " OLD_CROSS_ENCODER.append(reranked_recall / predictions_df.shape[0])\n", + " print(k, embedding_only_recall, reranked_recall)" ] - }, - "execution_count": 204, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "train_samples[0].__dict__" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "bc2bc9d1", - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" }, - "id": "bc2bc9d1", - "outputId": "97ead4f4-bce2-4e8b-d379-1baab6ddd641" - }, - "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "Warmup-steps: 174\n" - ] - } - ], - "source": [ - "from sentence_transformers.cross_encoder.evaluation import CECorrelationEvaluator, CEBinaryClassificationEvaluator\n", - "import math\n", - "import torch\n", - "from random import sample\n", - "\n", - "logger.setLevel(logging.DEBUG) # just to get some logs\n", - "\n", - "num_epochs = 1\n", - "\n", - "model_save_path = './fine_tuned_ir_cross_encoder'\n", - "\n", - "train_dataloader = DataLoader(train_samples[:int(len(train_samples)*.8)], shuffle=True, batch_size=16)\n", - "\n", - "# An evaluator for training performance\n", - "evaluator = CECorrelationEvaluator.from_input_examples(train_samples[int(len(train_samples)*.8):], name='test')\n", - "\n", - "# Rule of thumb for warmup steps\n", - "warmup_steps = math.ceil(len(train_dataloader) * num_epochs * 0.1) # 10% of train data for warm-up\n", - "print(f\"Warmup-steps: {warmup_steps}\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ce4e8079-1335-4d53-944d-3ed0f6537781", - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 137, - "referenced_widgets": [ - "f36d8f08f6284b848622fd560196cc78", - "608d1345487046ceb64b0b31a4287ae0", - "43c8db4be4984f6da1540de6bc89b616", - "6cb81ad9ee8141aa9d0fbefc276f244d", - "8e989ddf9d274876a3ba06056e7147a1", - "fce9aa1662c34941afadd6141aba9180", - "098016d32abc4f45be0a4f747cbc3f11", - "dc26c84713fb45f5a6c5b870c96d9d9e", - "a6ac9d7aed4c493db567b015ab8502a5", - "80e18075a957476591fa1ba2585b7a73", - "e1d8ec56e5614d77a6999a42283be94b", - "21316ef8a22d40ab9109ccf0fa7fa645", - "458bcab796d642c9afd2e534085b991f", - "266b42f10bd74b9f907588c1251c8d6c", - "ba968ae891a2400fa0db9f331b85b66c", - "5d09ef7e47f446a3a3a51458195a0fe3", - "352af51e6e7943a7a41d3bbe41885d8d", - "2cb4c1bff01b4f669ecd8583187bab9f", - "b070922627a04195a41899a169984b08", - "85a67e7f5d2845329d63f0922bb5d9a6", - "5b3c84192618410ea1793239c4514c6e", - "7bd0527b8e174aec9911c5b32dc048fd" - ] + "cell_type": "code", + "execution_count": 36, + "id": "bd9aef05-e271-41e0-a8ce-88b6c81bed4c", + "metadata": { + "id": "bd9aef05-e271-41e0-a8ce-88b6c81bed4c" + }, + "outputs": [], + "source": [] }, - "id": "ce4e8079-1335-4d53-944d-3ed0f6537781", - "outputId": "446b8d35-7bc9-48d5-c9ab-60dc6b3762fc" - }, - "outputs": [ { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "f36d8f08f6284b848622fd560196cc78", - "version_major": 2, - "version_minor": 0 + "cell_type": "markdown", + "id": "3f14809e", + "metadata": { + "id": "3f14809e" }, - "text/plain": [ - "Batches: 0%| | 0/1 [00:00\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", + "
retrieved_correct_positionreranked_correct_position
00.00.0
10.00.0
20.00.0
31.00.0
40.00.0
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + " \n" + ], + "text/plain": [ + " retrieved_correct_position reranked_correct_position\n", + "0 0.0 0.0\n", + "1 0.0 0.0\n", + "2 0.0 0.0\n", + "3 1.0 0.0\n", + "4 0.0 0.0" + ] + }, + "execution_count": 45, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "os_predictions_df = pd.DataFrame(os_predictions)\n", + "os_predictions_df.head()" + ] }, { - "name": "stdout", - "output_type": "stream", - "text": [ - "Accuracy without re-ranking: 0.78\n", - "Accuracy with re-ranking: 0.84\n" - ] + "cell_type": "code", + "execution_count": 46, + "id": "88419a17-598b-4b3e-b314-e1c5ef3475eb", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "88419a17-598b-4b3e-b314-e1c5ef3475eb", + "outputId": "e79196b1-4b8f-4c30-f064-57484be08930" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Accuracy without re-ranking: 0.5017421602787456\n", + "Accuracy with re-ranking: 0.6202090592334495\n" + ] + } + ], + "source": [ + "raw_accuracy = sum([p['retrieved_correct_position'] == 0 for p in os_predictions])/len(os_predictions)\n", + "reranked_accuracy = sum([p['reranked_correct_position'] == 0 for p in os_predictions])/len(os_predictions)\n", + "\n", + "print(f'Accuracy without re-ranking: {raw_accuracy}')\n", + "print(f'Accuracy with re-ranking: {reranked_accuracy}')\n" + ] }, { - "name": "stderr", - "output_type": "stream", - "text": [ - " 17%|█▋ | 200/1148 [05:18<26:10, 1.66s/it]" - ] + "cell_type": "code", + "execution_count": 47, + "id": "cf6fc44d-6af1-48b6-b859-01a1698c7dd9", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "cf6fc44d-6af1-48b6-b859-01a1698c7dd9", + "outputId": "a49bc1ad-7cf6-4980-bf39-521832c240a0" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1 576 712\n", + "3 887 1009\n", + "5 948 1055\n", + "10 1008 1082\n", + "25 1073 1104\n", + "50 1107 1107\n" + ] + } + ], + "source": [ + "# do recall @ 1, 3, 5, 10\n", + "OPEN_SOURCE_RETRIEVAL = []\n", + "OPEN_SOURCE_RETRIEVAL_PLUS_PRE_CE = []\n", + "for k in X:\n", + " embedding_only_recall = os_predictions_df[os_predictions_df['retrieved_correct_position'] < k].shape[0]\n", + " reranked_recall = os_predictions_df[os_predictions_df['reranked_correct_position'] < k].shape[0]\n", + " print(k, embedding_only_recall, reranked_recall)\n", + " OPEN_SOURCE_RETRIEVAL.append(embedding_only_recall / os_predictions_df.shape[0])\n", + " OPEN_SOURCE_RETRIEVAL_PLUS_PRE_CE.append(reranked_recall / os_predictions_df.shape[0])" + ] }, { - "name": "stdout", - "output_type": "stream", - "text": [ - "Accuracy without re-ranking: 0.765\n", - "Accuracy with re-ranking: 0.84\n" - ] + "cell_type": "code", + "execution_count": 48, + "id": "f733061c-eb98-40cb-b116-602e1c0dcd3e", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 564 + }, + "id": "f733061c-eb98-40cb-b116-602e1c0dcd3e", + "outputId": "b1d6c0c9-3e54-4193-9395-8fab5bdd0f07" + }, + "outputs": [ + { + "data": { + "image/png": "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HGebncWLF/PYY4+RmJhISEgIV111FceOHXNL62xTunHjRoYMGUJwcDCPPfYYUPtjcPjwYeLi4gCYO3euqxqT87p03mcOHDjAFVdcQVhYGDfddBMAv/32GzfccANt27Z1bfOBBx7wqNburc2e81r9+uuv6d69O0ajkW7durnuN+Wlpqby97//nYSEBFe6d9991yPd8ePHGT16NCEhIcTHx/PAAw9Uu/8An3/+ORqNhl9++cVj3ptvvolGo2H79u0AnDp1ikmTJtG6dWuMRiMtWrTg6quvrvReAo7PbcKECQBceOGFaDQa17VWse1M+WvMef4bjUYuvPBC/vjjD4917969m+uvv57o6GgCAwO54IILfKpKM2fOHB5++GEAOnTo4PrcDx8+7LVNhlNdvgcAPvroI/r06UNQUBDR0dGMGzfO4zwH36/9io4fP86bb77JpZde6hHoAeh0Oh566CG3Ur26+PrrrwkICGDIkCFu048cOcJdd91F586dCQoKIiYmhhtuuKHK86SmnM8Q33//vesZwvmdkZuby/3330+bNm0wGo0kJSXx/PPPu0rk6nLde2vvZbfbWbBgAd26dSMwMJCEhASmTp1KTk6OK83IkSMrfQjs37+/R7Dd0OdKeVarlcLCwkrnf/755+h0Om6//XbXtMDAQG677TbWrVvnNV/l1ce9e8WKFQwaNIjIyEhCQ0Pp3Lmzax1w+jmg4jlWXbvl6s6F2tzzJk6cyMKFCwHcqsdWVF/3uJo8A1WW38rOd1/O7apU9Vxd02dzX74vKzpy5AhJSUl0796dtLQ0oPr7g5OzXXlERASRkZFMmDCh0mr/zhor//nPf3w6Lk6N5mfg//3vf3Ts2JEBAwb4lH7y5Ml88MEHXH/99Tz44IOsX7+eefPmsWvXLr766iu3tPv37+fGG29k6tSp3Hzzzbz00kuMGjWKRYsW8dhjj3HXXXcBMG/ePMaMGeNRfc9ms3HZZZfRr18/XnjhBZYvX87s2bOxWq089dRTrnSvvPIKV111FTfddBNms5nPPvuMG264gW+++YYrr7zSLU8//fQTS5YsYdq0acTGxlbbiHfMmDF06NCBefPmsWnTJt5++23i4+N5/vnnXWkmTpzIkiVLuOWWW+jXrx+//PKLx3YrY7fbueqqq1i9ejW333475513Htu2beOf//wne/fu5euvv3ZL/9tvv/Hf//6Xu+++23XsRo4cySOPPMLrr7/OXXfdRU5ODi+88AJ///vf+emnn9yWz8nJ4YorrmDMmDGMHz+eJUuWcOeddxIQEMDf//73Gudp8uTJfPTRR9x4440MGDCAn376yeu+b9u2jeHDhxMXF8ecOXOwWq3Mnj2bhIQEn44TwD333ENUVBSzZ8/m8OHDLFiwgGnTprF48WJXmpkzZ/LCCy8watQoRowYwdatWxkxYgSlpaU+b+fjjz/GbDZzzz33kJ2dzQsvvMCYMWO4+OKLWbVqFY8++ij79+/n1Vdf5aGHHnJ7MJ8zZw5z585l2LBh3HnnnezZs4c33niDP/74gzVr1rh+NX7nnXeYOnUqAwYM4P777+fgwYNcddVVREdH06ZNG9f6anp+lDdnzhzmzZvH5MmT6du3L/n5+fz5559s2rSJSy+91OfjUR+effZZNBoNjz76KOnp6SxYsIBhw4axZcsWt1/qs7KyuPzyyxk3bhw333wzCQkJdToGcXFxvPHGG9x5551cc801XHvttQD07NnTlcZqtTJixAgGDRrESy+95Po1eunSpRQXF3PnnXcSExPDhg0bePXVVzl+/DhLly6tdp9Xr17Nl19+yV133UVYWBj/+te/uO666zh69CgxMTEApKWl0a9fP9eXXVxcHMuWLeO2224jPz/f9UBfUlLCJZdcwtGjR7n33ntp2bIlH374ocf17c2VV15JaGgoS5YsYejQoW7zFi9eTLdu3VwdN1133XXs2LGDe+65h/bt25Oens6KFSs4evRopffKxx9/nM6dO/PWW2+5qgt26tSpyjx98sknFBQUMHXqVDQaDS+88ALXXnstBw8edF0jO3bsYODAgbRq1YoZM2YQEhLCkiVLGD16NF988QXXXHNNpeu/9tpr2bt3L59++in//Oc/iY2NBRzngy8PRxX58j3w7LPPMmvWLMaMGcPkyZPJyMjg1VdfZciQIWzevNlV6unrte/NsmXLsFqt3HLLLTXKf15enkenBhqNxnUeVmbt2rV0797do7Trjz/+YO3atYwbN47WrVtz+PBh3njjDS666CJ27txZbyU6e/bsYfz48UydOpUpU6bQuXNniouLGTp0KKmpqUydOpW2bduydu1aZs6cycmTJ1mwYEGdrntvpk6dyvvvv8+kSZO49957OXToEK+99hqbN2923dfHjh3Lrbfeyh9//MGFF17oWvbIkSP8/vvvvPjii65pZ+Jccdq7dy8hISGYzWYSEhKYMmUKTz75pNtnunnzZs4991zCw8Pdlu3bty8AW7ZsqXZ7dbl379ixg5EjR9KzZ0+eeuopjEYj+/fvZ82aNT7tY1WqOxdqc8+bOnUqJ06cYMWKFXz44Yde0zTEPc6XZ6DKVHa++3JuV6ey5+qaPJv78n1Z0YEDB7j44ouJjo5mxYoVxMbG+nR/AEdNgauvvprVq1dzxx13cN555/HVV1+5frisKCIigk6dOrFmzRoeeOCBao+Ji2oE8vLyFKCuvvpqn9Jv2bJFAWry5Mlu0x966CEFqJ9++sk1rV27dgpQa9eudU37/vvvFaCCgoLUkSNHXNPffPNNBaiff/7ZNW3ChAkKUPfcc49rmt1uV1deeaUKCAhQGRkZrunFxcVu+TGbzap79+7q4osvdpsOKK1Wq3bs2OGxb4CaPXu26/3s2bMVoP7+97+7pbvmmmtUTEyM6/3GjRsVoO6//363dBMnTvRYpzcffvih0mq16rfffnObvmjRIgWoNWvWuOXRaDSqQ4cOuaY5j11iYqLKz893TZ85c6YC3NIOHTpUAerll192TTOZTCo5OVnFx8crs9lcozw5z4e77rrLLd2NN97ose+jR49WgYGBbp/7zp07lU6nUxUvh3bt2qkJEya43r/33nsKUMOGDVN2u901/YEHHlA6nU7l5uYqpZQ6deqU0uv1avTo0W7rmzNnjgLc1unNoUOHFKDi4uJc61Tq9LHs1auXslgsrunjx49XAQEBqrS0VCmlVHp6ugoICFDDhw9XNpvNle61115TgHr33XeVUo7zMz4+XiUnJyuTyeRK99ZbbylADR061DWtJudHxePWq1cvdeWVV1a5z76aMGGCW7589fPPPytAtWrVyu38XLJkiQLUK6+84prmPD8XLVrkto6aHANvMjIyKr0WnfeZGTNmeMyreF9RSql58+YpjUbjdh477xXlASogIEDt37/fNW3r1q0KUK+++qpr2m233aZatGihMjMz3ZYfN26cioiIcOVhwYIFClBLlixxpSkqKlJJSUke905vxo8fr+Lj45XVanVNO3nypNJqteqpp55SSimVk5OjAPXiiy9WuS5vnNfoH3/84TZ9woQJql27dq73zmssJiZGZWdnu6b/5z//UYD63//+55p2ySWXqB49eriuL6Uc3wEDBgxQ55xzTrV5evHFFz3ugeXz8N5773ksU9vvgcOHDyudTqeeffZZt3Tbtm1Ter3eNb0m1743DzzwgALU5s2bq0zn5PxcvP0ZjcZql2/durW67rrrPKZ7uzbWrVunAPV///d/rmnO67/id3v5c6IyzmeI5cuXu01/+umnVUhIiNq7d6/b9BkzZiidTqeOHj2qlKr9dV8xf7/99psC1Mcff+yWbvny5W7T8/LylNFoVA8++KBbuhdeeMHtnnGmzhWllPr73/+u5syZo7744gv1f//3f+qqq65SgBozZoxbum7dunk8Lyml1I4dO7zekyuq6737n//8pwLcnusqcp7LFa9nX86xys6Futzz7r77bo/7vlINc4/z9RmoMpWd776e21Wp6rm6Js/mvnxfOu/HGRkZateuXaply5bqwgsvdDvOvt4fvv76awWoF154wZXGarWqwYMHV/r9MHz4cHXeeedVe0zKaxTVOPPz8wEICwvzKf13330HwPTp092mP/jggwAebfu6du1K//79Xe+dXZdefPHFtG3b1mP6wYMHPbZZvgcw56/fZrOZH3/80TW9fMlATk4OeXl5DB48mE2bNnmsb+jQoXTt2rWaPT3tjjvucHs/ePBgsrKyXMfOWczsLKV0uueee3xa/9KlSznvvPPo0qULmZmZrr+LL74YgJ9//tkt/SWXXOL2a5Pz2F133XVun2Nlx1Sv1zN16lTX+4CAAKZOnUp6ejobN26sUZ6c58O9997rto2K1YtsNhvff/89o0ePdvvczzvvPEaMGOHDUXK4/fbb3apKDB48GJvNxpEjRwBYuXIlVqu11p+F0w033ODWGYHzWN58881ubbNSUlIwm82kpqYC8OOPP2I2m7n//vvdSqinTJlCeHi46/r4888/SU9P54477iAgIMCVzlmdoLyanh/lRUZGsmPHDvbt21ej/bfb7W7byszMxGQyYbFYPKZbLBaf1nnrrbe6nZ/XX389LVq0cJ1DTkajkUmTJrlNq8sx8NWdd97pMa38faWoqIjMzEwGDBiAUsqj2rk3w4YNcyvh6tmzJ+Hh4a5rUinFF198wahRo1BKue3biBEjyMvLc93DvvvuO1q0aMH111/vWl9wcLBbtauqjB07lvT0dLeqTp9//jl2u52xY8e69jcgIIBVq1b5XIWntsaOHUtUVJTr/eDBg4HT96vs7Gx++uknxowZQ0FBgeu4ZGVlMWLECPbt2+e67s6E6r4HvvzyS+x2O2PGjHH7HBMTEznnnHNc52hNrn1vavqd7bRw4UJWrFjh9rds2bJql8vKynL7nJzKXxsWi4WsrCySkpKIjIz0+r1bWx06dPD4jli6dCmDBw8mKirK7VgPGzYMm83Gr7/+6vP6vV33FS1dupSIiAguvfRSt+316dOH0NBQ12cbHh7O5ZdfzpIlS9yamixevJh+/fq5vvvO1LkCjpLB2bNnc+2113LLLbfwn//8hylTprBkyRK3nlhLSkq8tpV3trvypUf2uty7nSWZ//nPf85o5zgNec9riHtcdc9A1al4vvt6blensufqmjybV/d9Wd727dsZOnQo7du358cff3Q7zr7eH7777jv0er3bMdHpdFU+LzrXWRONohqns8i+oKDAp/RHjhxBq9V69OCVmJhIZGSkxwlX/sEecN2gKlYHcE6veLFptVqPOvDnnnsugFt96m+++YZnnnmGLVu2uNUD91aH2luPZFWpuA/OkyonJ4fw8HDXMam4Xl96OQPYt28fu3btctUpr8jZ8UFl+anpMW3ZsqVHo9zyx7Rfv34+58m57xWrbHXu3NntfUZGBiUlJZxzzjke6+rcubPHA39lqvosnPkBz2MfHR3t9YHF1+34eoyd26+4/wEBAXTs2NE13/m/4vEwGAwe53tNz4/ynnrqKa6++mrOPfdcunfvzmWXXcYtt9ziVpXJm6NHj1Z6nVTMx88//+xT72YV91Wj0ZCUlOTRLqJVq1ZuDzbg+zHIzs7GbDa7pgcFBfn0UKTX6722cTp69ChPPvkk//3vfz2uo7y8vGrXW/E8Asc561xXRkYGubm5vPXWW5X2dlz+WktKSvK4p1U81ypz2WWXERERweLFi7nkkksAx0NocnKy6/o3Go08//zzPPjggyQkJNCvXz9GjhzJrbfeSmJiok/b8VV11/L+/ftRSjFr1ixmzZrldR3p6ekkJiZ6VMuMjo72OIcaMr/h4eHs27cPpZTXexyc7qimJte+NzX9znbq27dvrTpoATzayIPj4X/evHm89957pKamuqXx5drwlbf70L59+/jrr79qdU8sr7Lr3tv28vLyiI+Pr3Z7Y8eO5euvv2bdunUMGDCAAwcOsHHjRlfVMef6zsS5UpkHH3yQf//73/z444/069cPcNwrvbX/dTZ/8KVTnLrcu8eOHcvbb7/N5MmTmTFjBpdccgnXXnst119/fYP2zN2Q97z6use1atXK53VWxdv57uu5nZeX5xbwBwQEEB0d7Xpf2fNCTZ7Nq/u+LG/UqFEkJCTw/fffExoa6rFPvtwfjhw5QosWLTyWr+o7VSlV4zF1G02w17JlS1fjfF/5urM6na5G0719qVTnt99+46qrrmLIkCG8/vrrtGjRAoPBwHvvvccnn3zikb6mPXnVZ169sdvt9OjRg/nz53udXzHAOBPHtKZ5OlMa+rOobjtnavvl1eWzGDJkCAcOHOA///kPP/zwA2+//Tb//Oc/WbRoEZMnT650ucTERI9OXF588UVOnTrl0Stfr169arA31fN2ffp6DK699lq3TkgmTJjgtROOioxGo8cDhc1m49JLLyU7O5tHH32ULl26EBISQmpqKhMnTvTp1+fqzhfnOm6++eZK2wlUF5j7ymg0Mnr0aL766itef/110tLSWLNmDf/4xz/c0t1///2MGjWKr7/+mu+//55Zs2Yxb948fvrpJ3r37l0veQHfj81DDz1Uael/UlISx44d83jQqO4HiMq+v2w2W53yq9FoWLZsmde0FR8oaqtLly6Aow10cnJyvayzKjExMV4ftu655x7ee+897r//fvr3709ERAQajYZx48bVa8lMZfeDSy+9lEceecTrMs4fL6rj7br3xm63Ex8fz8cff+x1fvmHylGjRhEcHMySJUsYMGAAS5YsQavVcsMNN7it70ycK5Vx3i/Ldy7WokULryXlJ0+eBLwP1VBRXe7dQUFB/Prrr/z88898++23LF++nMWLF3PxxRfzww8/oNPpanXd+qKh7nn1dY+ryTqr4u189/Xcvu+++/jggw9c04cOHepWS8TbZ1/TZ/Oa7Nt1113HBx98wMcff+xWU825T/Vxf/AmJyfH1f7bV40i2ANHD1JvvfUW69atc6ty6U27du2w2+3s27eP8847zzU9LS2N3Nxc2rVrV695s9vtHDx40O3D2bt3L4CrKuMXX3xBYGAg33//vVs1hPfee69e81IZ5zE5dOiQ2y9w+/fv92n5Tp06sXXrVi655JIa/2JQGydOnPDocrfiMfU1T859P3DggNuvIXv27HFLFxcXR1BQkNfqhBXT1oXz/Nu/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unUcP36crVu3Vrm884Hk8ccfZ9y4cRgMBkaNGuX6cfO5555j8uTJXHDBBfz666+ue3ZtdOrUiWeeeYaZM2dy+PBhRo8eTVhYGIcOHeKrr77i9ttv56GHHqrRtV+Zl19+mQMHDnDvvffy5ZdfMnLkSKKiojh69ChLly5l9+7dHp/XsmXL2L17t8e6BgwYUOV2r776ap5++ml++eUXhg8f7po+cuRIPvzwQyIiIujatSvr1q3jxx9/rHYoh/rw8MMP89///peRI0cyceJE+vTpQ1FREdu2bePzzz/n8OHDxMbG1uq692bo0KFMnTqVefPmsWXLFoYPH47BYGDfvn0sXbqUV155xa3jJOc4Zg899JDrB53yztS5smnTJsaPH8/48eNJSkqipKSEr776ijVr1nD77bdz/vnnu9KmpKRwww03MHPmTNLT00lKSuKDDz7g8OHDvPPOOzU6XuX5eu9+6qmn+PXXX7nyyitp164d6enpvP7667Ru3ZpBgwYB0K1bN/r168fMmTPJzs4mOjqazz77zPXwXpXKzgWr1Vrre57z/nLvvfcyYsQIdDpdje+Tdb3H1VVNz+2aaOhnc61Wy0cffcTo0aMZM2YM3333HRdffLHP94dRo0YxcOBAZsyYweHDh+natStffvllpW2Of/zxR9dwDTVSo747z4C9e/eqKVOmqPbt26uAgAAVFhamBg4cqF599VW3bmEtFouaO3eu6tChgzIYDKpNmzZq5syZbmmUcnSb7K3bd0DdfffdbtOcXdWW7/52woQJKiQkRB04cEANHz5cBQcHq4SEBDV79my3bu2VUuqdd95R55xzjjIajapLly7qvffeq7Q79IrbLj/PW5fbFbsC9tb9b1FRkbr77rtVdHS0Cg0NVaNHj1Z79uxRgHruuee8bq88s9msnn/+edWtWzdlNBpVVFSU6tOnj5o7d67Ky8ur8bFT6nR3xEuXLnVNGzp0qOrWrZv6888/Vf/+/VVgYKBq166deu2112qdp5KSEnXvvfeqmJgYFRISokaNGqWOHTvmtZvjX375RfXp00cFBASojh07qkWLFnn9nCobeqFit+7euly2Wq1q1qxZKjExUQUFBamLL75Y7dq1S8XExKg77rjD+wdQi2NZVb5ee+011aVLF2UwGFRCQoK68847VU5Ojsf2Xn/9ddWhQwdlNBrVBRdcoH79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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "# Creating the plot\n", + "plt.figure(figsize=(10, 6))\n", + "plt.plot(X, OPENAI_RETRIEVAL, label='OAI Retrieval Only', marker='o')\n", + "plt.plot(X, OLD_CROSS_ENCODER, label='OAI + Pretrained CE', marker='s')\n", + "\n", + "plt.plot(X, OPEN_SOURCE_RETRIEVAL, label='OS Retrieval Only', marker='*')\n", + "plt.plot(X, OPEN_SOURCE_RETRIEVAL_PLUS_PRE_CE, label='OS + Pretrained CE', marker='^')\n", + "\n", + "\n", + "# Adding titles and labels\n", + "plt.title('Comparing embedding models + pre-trained vs fine-tuned CE (all retrieved 50 results then re-ranked)')\n", + "plt.xlabel('Recall @')\n", + "plt.ylabel('Performance')\n", + "plt.xticks(X)\n", + "plt.yticks([i/100 for i in range(70, 101, 5)]) # Adjusting y-ticks to start from 0.75\n", + "\n", + "# Adding legend\n", + "plt.legend()\n", + "\n", + "# Show the plot\n", + "plt.grid(True)" + ] }, { - "name": "stderr", - "output_type": "stream", - "text": [ - " 26%|██▌ | 300/1148 [07:57<22:00, 1.56s/it]" - ] + "cell_type": "code", + "execution_count": 48, + "id": "097fe3bc-4fc1-4e69-bf60-6ab4f75da968", + "metadata": { + "id": "097fe3bc-4fc1-4e69-bf60-6ab4f75da968" + }, + "outputs": [], + "source": [] }, { - "name": "stdout", - "output_type": "stream", - "text": [ - "Accuracy without re-ranking: 0.7666666666666667\n", - "Accuracy with re-ranking: 0.8266666666666667\n" - ] + "cell_type": "code", + "execution_count": 48, + "id": "f11e5dcd-7ad8-43d0-aa1b-2b94b3784253", + "metadata": { + "id": "f11e5dcd-7ad8-43d0-aa1b-2b94b3784253" + }, + "outputs": [], + "source": [] }, { - "name": "stderr", - "output_type": "stream", - "text": [ - " 35%|███▍ | 400/1148 [10:37<19:44, 1.58s/it]" - ] + "cell_type": "code", + "execution_count": 48, + "id": "06e3a30f-e913-43ad-9fa7-f712abfa59d0", + "metadata": { + "id": "06e3a30f-e913-43ad-9fa7-f712abfa59d0" + }, + "outputs": [], + "source": [] }, { - "name": "stdout", - "output_type": "stream", - "text": [ - "Accuracy without re-ranking: 0.7625\n", - "Accuracy with re-ranking: 0.84\n" - ] + "cell_type": "code", + "execution_count": 48, + "id": "91e6c207-7f75-4b04-8d32-541265902fa5", + "metadata": { + "id": "91e6c207-7f75-4b04-8d32-541265902fa5" + }, + "outputs": [], + "source": [] }, { - "name": "stderr", - "output_type": "stream", - "text": [ - " 44%|████▎ | 500/1148 [13:17<17:16, 1.60s/it]" - ] + "cell_type": "code", + "execution_count": 48, + "id": "9ec04ddb-5a7d-4506-a0ba-a3ddedf985df", + "metadata": { + "id": "9ec04ddb-5a7d-4506-a0ba-a3ddedf985df" + }, + "outputs": [], + "source": [] }, { - "name": "stdout", - "output_type": "stream", - "text": [ - "Accuracy without re-ranking: 0.764\n", - "Accuracy with re-ranking: 0.85\n" - ] + "cell_type": "code", + "execution_count": 48, + "id": "30c5cb27-018c-4299-a91f-6b39293c583e", + "metadata": { + "id": "30c5cb27-018c-4299-a91f-6b39293c583e" + }, + "outputs": [], + "source": [] }, { - "name": "stderr", - "output_type": "stream", - "text": [ - " 52%|█████▏ | 600/1148 [16:00<14:35, 1.60s/it]" - ] + "cell_type": "code", + "execution_count": 48, + "id": "c3200a66-9fc0-4f39-94e8-3456b85b6a96", + "metadata": { + "id": "c3200a66-9fc0-4f39-94e8-3456b85b6a96" + }, + "outputs": [], + "source": [] }, { - "name": "stdout", - "output_type": "stream", - "text": [ - "Accuracy without re-ranking: 0.7683333333333333\n", - "Accuracy with re-ranking: 0.8566666666666667\n" - ] + "cell_type": "markdown", + "id": "ea30153c", + "metadata": { + "id": "ea30153c" + }, + "source": [ + "## Advanced: Fine-tuning the re-ranker" + ] }, { - "name": "stderr", - "output_type": "stream", - "text": [ - " 61%|██████ | 700/1148 [18:40<12:28, 1.67s/it]" - ] + "cell_type": "code", + "execution_count": 48, + "id": "58979a1e-0fe1-488f-9805-56efd499278d", + "metadata": { + "id": "58979a1e-0fe1-488f-9805-56efd499278d" + }, + "outputs": [], + "source": [] }, { - "name": "stdout", - "output_type": "stream", - "text": [ - "Accuracy without re-ranking: 0.7471428571428571\n", - "Accuracy with re-ranking: 0.8428571428571429\n" - ] + "cell_type": "code", + "execution_count": 49, + "id": "508edaf6", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "508edaf6", + "outputId": "f2be3e3c-c9cf-4d00-b6ee-cc03060cb1ea" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{'id': 'a4968ca8a18de16aa3859be760e43dbd3af3fce9',\n", + " 'title': 'Area 51',\n", + " 'context': 'In 1994, five unnamed civilian contractors and the widows of contractors Walter Kasza and Robert Frost sued the USAF and the United States Environmental Protection Agency. Their suit, in which they were represented by George Washington University law professor Jonathan Turley, alleged they had been present when large quantities of unknown chemicals had been burned in open pits and trenches at Groom. Biopsies taken from the complainants were analyzed by Rutgers University biochemists, who found high levels of dioxin, dibenzofuran, and trichloroethylene in their body fat. The complainants alleged they had sustained skin, liver, and respiratory injuries due to their work at Groom, and that this had contributed to the deaths of Frost and Kasza. The suit sought compensation for the injuries they had sustained, claiming the USAF had illegally handled toxic materials, and that the EPA had failed in its duty to enforce the Resource Conservation and Recovery Act (which governs handling of dangerous materials). They also sought detailed information about the chemicals to which they were allegedly exposed, hoping this would facilitate the medical treatment of survivors. Congressman Lee H. Hamilton, former chairman of the House Intelligence Committee, told 60 Minutes reporter Lesley Stahl, \"The Air Force is classifying all information about Area 51 in order to protect themselves from a lawsuit.\"',\n", + " 'question': 'Who analyzed the biopsies?',\n", + " 'answers': {'answer_start': [457],\n", + " 'text': ['Rutgers University biochemists']}}" + ] + }, + "execution_count": 49, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dataset['train'][0]" + ] }, { - "name": "stderr", - "output_type": "stream", - "text": [ - " 70%|██████▉ | 800/1148 [21:21<09:13, 1.59s/it]" - ] + "cell_type": "code", + "execution_count": 127, + "id": "51bf1607", + "metadata": { + "id": "51bf1607" + }, + "outputs": [], + "source": [ + "from sentence_transformers import InputExample, losses, evaluation\n", + "from torch.utils.data import DataLoader\n", + "from random import shuffle" + ] }, { - "name": "stdout", - "output_type": "stream", - "text": [ - "Accuracy without re-ranking: 0.74875\n", - "Accuracy with re-ranking: 0.835\n" - ] + "cell_type": "code", + "execution_count": 127, + "id": "6b58d2d0", + "metadata": { + "id": "6b58d2d0" + }, + "outputs": [], + "source": [] }, { - "name": "stderr", - "output_type": "stream", - "text": [ - " 78%|███████▊ | 900/1148 [25:36<06:43, 1.63s/it]" - ] + "cell_type": "code", + "execution_count": 128, + "id": "50fd5c19-894a-41e4-bf6f-d9e1197c053f", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "50fd5c19-894a-41e4-bf6f-d9e1197c053f", + "outputId": "64064125-f34e-4f03-c4ab-3855ae2572c7" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(9916, 11590)" + ] + }, + "execution_count": 128, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "unique_train_passages = list(set(dataset['train']['context']))\n", + "len(unique_train_passages), len(dataset['train']['context'])" + ] }, { - "name": "stdout", - "output_type": "stream", - "text": [ - "Accuracy without re-ranking: 0.7388888888888889\n", - "Accuracy with re-ranking: 0.8333333333333334\n" - ] + "cell_type": "code", + "execution_count": 129, + "id": "5eaad504-b944-4e36-987f-34126189c1a9", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "5eaad504-b944-4e36-987f-34126189c1a9", + "outputId": "03bd8016-9531-4004-d84f-648035105bd0" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(9916, (1148, 768))" + ] + }, + "execution_count": 129, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(unique_train_passages), doc_emb.shape" + ] }, { - "name": "stderr", - "output_type": "stream", - "text": [ - " 87%|████████▋ | 1000/1148 [28:16<04:00, 1.62s/it]" - ] + "cell_type": "code", + "execution_count": 133, + "id": "361d5ef0-3fe3-4ed8-87c0-1cea3d9abcc2", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 49, + "referenced_widgets": [ + "0452b93e26154e0d915ad3a201e307fd", + "486ab2a8181d4b32aedbb3fea18bef40", + "da4aa9007a4c4814a7fcd55ea9bcce9f", + "fac98921b88f41b08db63e93399f7c87", + "f7930aa886e941b3b15239a4f35138b9", + "fd0a7934959d4fb88f5dab916d42d3a7", + "75f7bbb0bb384ae592dea5059a146b9c", + "f6f951a5f4fe43d3b6840459520925a6", + "5d958e1742124b5b9ca2357c22686754", + "41ae50f47c174b3ebec44009b57639cb", + "10e72a6bbfa6473f952f8572259277ab" + ] + }, + "id": "361d5ef0-3fe3-4ed8-87c0-1cea3d9abcc2", + "outputId": "fa963999-c3a8-4ab8-cdfb-813f24a33425", + "scrolled": true + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "0452b93e26154e0d915ad3a201e307fd", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Batches: 0%| | 0/310 [00:00" + ] + }, + "execution_count": 159, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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dYy33npLcXFxmjBhgiZNmqT77rvP7xo4drtdH3zwgY4cOaKEhAQ988wzysnJ8buWzj333KMNGzbo1Vdf1fDhw/XPf/5TW7du1dChQ6/l+QAAAIa4puvkdHZcJwddBdfJAWCSgF4nBwAAINCIHAAAYCQiBwAAGInIAQAARiJyAACAkYgcAABgJCIHAAAYicgBAABGInIAAICRiBwAAGAkIgcAABiJyAEAAEYicgAAgJGIHAAAYCQiBwAAGInIAQAARiJyAACAkYgcAABgJCIHAAAYicgBAABGInIAAICRiBwAAGAkIgcAABiJyAEAAEYicgAAgJGIHAAAYCQiBwAAGInIAQAARiJyAACAkYgcAABgJCIHAAAYicgBAABGInIAAICRiBwAAGAkIgcAABiJyAEAAEYicgAAgJGIHAAAYCQiBwAAGInIAQAARiJyAACAkYgcAABgJCIHAAAYicgBAABGInIAAICRiBwAAGAkIgcAABiJyAEAAEYicgAAgJGIHAAAYCQiBwAAGInIAQAARiJyAACAkYgcAABgpFZHTmlpqR5++GFFR0crKChIW7du9dvv8/mUk5Oj/v37q3v37kpKStJXX33lN3P69GlNnz5dNptNERERSktL09mzZ/1m9u/fr/vvv1/h4eGKiYnR8uXLL1nL5s2bFRcXp/DwcA0bNkzvvfdea08HAAAYqtWRU19fr+HDh2vt2rUt7l++fLlWr16tvLw87dmzRz179pTL5dKPP/5ozUyfPl0VFRUqLi5WQUGBSktLNWfOHGu/1+tVcnKyBg4cqLKyMr388statmyZXn31VWtm165dmjZtmtLS0vT5558rNTVVqampOnjwYGtPCQAAGCjI5/P52nznoCBt2bJFqampkn56FSc6OlrPPPOMnn32WUlSXV2doqKilJ+fr6lTp+rLL79UfHy8Pv30U40ePVqSVFRUpEmTJun48eOKjo7W+vXr9fzzz8vj8Sg0NFSStHjxYm3dulWVlZWSpClTpqi+vl4FBQXWesaOHasRI0YoLy/vqtbv9Xplt9tVV1cnm83W1qehUxq0uDDQS8B1dPSllEAvAQDazdX+/G7X9+QcOXJEHo9HSUlJ1ja73a7ExES53W5JktvtVkREhBU4kpSUlKTg4GDt2bPHmhk3bpwVOJLkcrl06NAhff/999bMxY/TPNP8OC1paGiQ1+v1uwEAADO1a+R4PB5JUlRUlN/2qKgoa5/H41FkZKTf/m7duql3795+My0d4+LHuNxM8/6W5Obmym63W7eYmJjWniIAAOgkutSnq7Kzs1VXV2fdjh07FuglAQCADtKukeNwOCRJ1dXVfturq6utfQ6HQydPnvTbf/78eZ0+fdpvpqVjXPwYl5tp3t+SsLAw2Ww2vxsAADBTu0ZObGysHA6HSkpKrG1er1d79uyR0+mUJDmdTtXW1qqsrMya2b59u5qampSYmGjNlJaW6ty5c9ZMcXGx7rzzTt1yyy3WzMWP0zzT/DgAAKBra3XknD17VuXl5SovL5f005uNy8vLVVVVpaCgIM2fP19/+tOf9M477+jAgQP6wx/+oOjoaOsTWEOGDNHEiRM1e/Zs7d27V5988okyMjI0depURUdHS5Iee+wxhYaGKi0tTRUVFdq4caNWrVqlrKwsax1PP/20ioqK9Morr6iyslLLli3Tvn37lJGRce3PCgAA6PS6tfYO+/bt0/jx462vm8NjxowZys/P18KFC1VfX685c+aotrZW9913n4qKihQeHm7d56233lJGRoYmTJig4OBgTZ48WatXr7b22+12ffDBB0pPT1dCQoL69u2rnJwcv2vp3HPPPdqwYYOWLFmi5557Tr/4xS+0detWDR06tE1PBAAAMMs1XSens+M6OegquE4OAJME5Do5AAAANwoiBwAAGInIAQAARiJyAACAkYgcAABgJCIHAAAYicgBAABGInIAAICRiBwAAGAkIgcAABiJyAEAAEYicgAAgJGIHAAAYCQiBwAAGInIAQAARiJyAACAkYgcAABgJCIHAAAYicgBAABGInIAAICRiBwAAGAkIgcAABiJyAEAAEYicgAAgJGIHAAAYCQiBwAAGInIAQAARuoW6AUAANrXoMWFgV4CrqOjL6UEegk3LF7JAQAARiJyAACAkYgcAABgJCIHAAAYicgBAABGInIAAICRiBwAAGAkIgcAABiJyAEAAEYicgAAgJGIHAAAYCQiBwAAGInIAQAARiJyAACAkYgcAABgJCIHAAAYicgBAABGInIAAICRiBwAAGAkIgcAABiJyAEAAEYicgAAgJGIHAAAYCQiBwAAGInIAQAARmr3yFm2bJmCgoL8bnFxcdb+H3/8Uenp6erTp49uvvlmTZ48WdXV1X7HqKqqUkpK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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import pandas as pd\n", + "pd.Series([t.label for t in train_samples]).value_counts().plot(kind='bar')" + ] }, { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████| 1148/1148 [32:14<00:00, 1.68s/it]\n" - ] - } - ], - "source": [ - "logger.setLevel(logging.CRITICAL)\n", - "\n", - "ft_predictions = []\n", - "\n", - "for question in tqdm(test_sample['question']):\n", - " r = get_results_from_pinecone(\n", - " question, top_k=TOP_K, re_rank_model=finetuned, correct_hash=q_to_hash[question],\n", - " verbose=False\n", - " )\n", - "\n", - " r['retrieved_correct_position'], r['reranked_correct_position']\n", - " ft_predictions.append(r)\n", - " if len(ft_predictions) % 100 == 0:\n", - " retrieved_accuracy = sum([_['retrieved_correct_position'] == 0 for _ in ft_predictions])/len(ft_predictions)\n", - " re_ranked_accuracy = sum([_['reranked_correct_position'] == 0 for _ in ft_predictions])/len(ft_predictions)\n", - "\n", - " print(f'Accuracy without re-ranking: {retrieved_accuracy}')\n", - " print(f'Accuracy with re-ranking: {re_ranked_accuracy}')\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "a07b782d-ef97-4c0a-be53-aefea5936676", - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" + "cell_type": "code", + "execution_count": 160, + "id": "LOZkS9bSgwga", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "LOZkS9bSgwga", + "outputId": "d003de25-ca53-47ce-9c39-76d2230f03eb" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{'id': 'a4968ca8a18de16aa3859be760e43dbd3af3fce9',\n", + " 'title': 'Area 51',\n", + " 'context': 'In 1994, five unnamed civilian contractors and the widows of contractors Walter Kasza and Robert Frost sued the USAF and the United States Environmental Protection Agency. Their suit, in which they were represented by George Washington University law professor Jonathan Turley, alleged they had been present when large quantities of unknown chemicals had been burned in open pits and trenches at Groom. Biopsies taken from the complainants were analyzed by Rutgers University biochemists, who found high levels of dioxin, dibenzofuran, and trichloroethylene in their body fat. The complainants alleged they had sustained skin, liver, and respiratory injuries due to their work at Groom, and that this had contributed to the deaths of Frost and Kasza. The suit sought compensation for the injuries they had sustained, claiming the USAF had illegally handled toxic materials, and that the EPA had failed in its duty to enforce the Resource Conservation and Recovery Act (which governs handling of dangerous materials). They also sought detailed information about the chemicals to which they were allegedly exposed, hoping this would facilitate the medical treatment of survivors. Congressman Lee H. Hamilton, former chairman of the House Intelligence Committee, told 60 Minutes reporter Lesley Stahl, \"The Air Force is classifying all information about Area 51 in order to protect themselves from a lawsuit.\"',\n", + " 'question': 'Who analyzed the biopsies?',\n", + " 'answers': {'answer_start': [457],\n", + " 'text': ['Rutgers University biochemists']}}" + ] + }, + "execution_count": 160, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dataset['train'][0]" + ] }, - "id": "a07b782d-ef97-4c0a-be53-aefea5936676", - "outputId": "b4daa149-efbf-4383-c233-ccd7b2bcfc17" - }, - "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "Accuracy without re-ranking: 0.7543554006968641\n", - "Accuracy with re-ranking: 0.8493031358885017\n" - ] - } - ], - "source": [ - "retrieved_accuracy = sum([_['retrieved_correct_position'] == 0 for _ in ft_predictions])/len(ft_predictions)\n", - "re_ranked_accuracy = sum([_['reranked_correct_position'] == 0 for _ in ft_predictions])/len(ft_predictions)\n", - "\n", - "print(f'Accuracy without re-ranking: {retrieved_accuracy}')\n", - "print(f'Accuracy with re-ranking: {re_ranked_accuracy}')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "bb46e242", - "metadata": { - "id": "bb46e242" - }, - "outputs": [], - "source": [ - "# Re-ranking got slightly better after 1 epoch" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "0cfcd92e-31ad-4bf7-9e30-b6d260a06871", - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 206 + "cell_type": "code", + "execution_count": 161, + "id": "8e7eaa40", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "8e7eaa40", + "outputId": "f6201d48-c8f6-49b3-f063-00d577bfc6c2" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{'guid': '',\n", + " 'texts': ['Whose oral histories are recorded?',\n", + " \"The story begins in 1885 with the arrival of an important new guest star in Buffalo Bill Cody's grand illusion, Chief Sitting Bull of Little Big Horn fame. Much to Cody's annoyance, Sitting Bull proves not to be a murdering savage but a genuine embodiment of what the whites believe about their own history out west. He is quietly heroic and morally pure.\"],\n", + " 'label': 0}" + ] + }, + "execution_count": 161, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train_samples[2].__dict__" + ] }, - "id": "0cfcd92e-31ad-4bf7-9e30-b6d260a06871", - "outputId": "ea88ceee-5307-491e-afe8-a5a8a43dba97" - }, - "outputs": [ { - "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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
final_resultsretrieved_correct_positionreranked_correct_positionresults_from_pinecone
0{'final_results': [{'score': 0.8746502, 'id': ...0.00.0[{'id': '2f90090e21f19450887d5f3ff781e541',\n", - " '...
1{'final_results': [{'score': 0.8746502, 'id': ...0.00.0[{'id': '49201636ad4102735125e146c0dbafa4',\n", - " '...
2{'final_results': [{'score': 0.8746502, 'id': ...0.00.0[{'id': '80d92494d2b06f341842f1855d2938cf',\n", - " '...
3{'final_results': [{'score': 0.8746502, 'id': ...0.00.0[{'id': 'e3fd54f33b021ea3cf88b438fefcada7',\n", - " '...
4{'final_results': [{'score': 0.8746502, 'id': ...0.00.0[{'id': '37ed40c20d4e1b9cc8d6cc27a4d0fff3',\n", - " '...
\n", - "
\n", - "
\n", - "\n", - "
\n", - " \n", - "\n", - " \n", - "\n", - " \n", - "
\n", - "\n", - "\n", - "
\n", - " \n", - "\n", - "\n", - "\n", - " \n", - "
\n", - "\n", - "
\n", - "
\n" + "cell_type": "code", + "execution_count": 162, + "id": "bc2bc9d1", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "bc2bc9d1", + "outputId": "508244d4-c05c-4cac-fe52-5a51cbd41fb1" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Warmup-steps: 174\n" + ] + } ], - "text/plain": [ - " final_results \\\n", - "0 {'final_results': [{'score': 0.8746502, 'id': ... \n", - "1 {'final_results': [{'score': 0.8746502, 'id': ... \n", - "2 {'final_results': [{'score': 0.8746502, 'id': ... \n", - "3 {'final_results': [{'score': 0.8746502, 'id': ... \n", - "4 {'final_results': [{'score': 0.8746502, 'id': ... \n", - "\n", - " retrieved_correct_position reranked_correct_position \\\n", - "0 0.0 0.0 \n", - "1 0.0 0.0 \n", - "2 0.0 0.0 \n", - "3 0.0 0.0 \n", - "4 0.0 0.0 \n", - "\n", - " results_from_pinecone \n", - "0 [{'id': '2f90090e21f19450887d5f3ff781e541',\n", - " '... \n", - "1 [{'id': '49201636ad4102735125e146c0dbafa4',\n", - " '... \n", - "2 [{'id': '80d92494d2b06f341842f1855d2938cf',\n", - " '... \n", - "3 [{'id': 'e3fd54f33b021ea3cf88b438fefcada7',\n", - " '... \n", - "4 [{'id': '37ed40c20d4e1b9cc8d6cc27a4d0fff3',\n", - " '... " + "source": [ + "from sentence_transformers.cross_encoder.evaluation import CECorrelationEvaluator, CEBinaryClassificationEvaluator\n", + "import math\n", + "import torch\n", + "from random import sample\n", + "\n", + "logger.setLevel(logging.DEBUG) # just to get some logs\n", + "\n", + "num_epochs = 1\n", + "\n", + "model_save_path = './fine_tuned_ir_cross_encoder'\n", + "\n", + "train_dataloader = DataLoader(train_samples[:int(len(train_samples)*.8)], shuffle=True, batch_size=16)\n", + "\n", + "# An evaluator for training performance\n", + "evaluator = CECorrelationEvaluator.from_input_examples(train_samples[int(len(train_samples)*.8):], name='test')\n", + "\n", + "# Rule of thumb for warmup steps\n", + "warmup_steps = math.ceil(len(train_dataloader) * num_epochs * 0.1) # 10% of train data for warm-up\n", + "print(f\"Warmup-steps: {warmup_steps}\")" ] - }, - "execution_count": 276, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ft_predictions_df = pd.DataFrame(ft_predictions)\n", - "ft_predictions_df.head()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "9Sr2q5IN9LMz", - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" }, - "id": "9Sr2q5IN9LMz", - "outputId": "4a670895-a2df-4300-9b8c-5d549c2e8517" - }, - "outputs": [ { - "data": { - "text/plain": [ - "retrieved_correct_position 26\n", - "reranked_correct_position 26\n", - "dtype: int64" + "cell_type": "code", + "execution_count": 163, + "id": "ce4e8079-1335-4d53-944d-3ed0f6537781", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 172, + "referenced_widgets": [ + "4ec583e4c526449b993c0f7f9e6e5456", + "8daf379772f6429293b659d29efbebef", + "ffcefea0254449869f46b1a160222aa2", + "690731860e1643d4a3873f52786127eb", + "0098c6042695487eabdc18342cda7186", + "4ccf610615584abc9e10caa78e3100f4", + "87782a63074c4714b8a80f5070c8830c", + "ed03d3a8b6ad48c08c74bcd361eec589", + "c2ed1b757c3840468db308d6489e1d50", + "6fd3718bdc214b2ea9ebc4961ff6c9dc", + "338a83663ea946aca37b2a109bbdd437", + "1aab71dc8f7345718950c689bf25b115", + "8534c0df3c684480bf53ae7c0e605a97", + "8c7dddcedd9d4f9f85478ef50f2852f1", + "4aa325d9b5a4423bbe4f4395897bd4f2", + "4f15b9ad923b49289277175ca5103c13", + "d10ac840d1284c1d93cd3790bd69459a", + "c6dbd568908a470fa9eee035a46005c2", + "04f07748dd33447784c3354f58f38727", + "cb74baeb010049fdbd3f3e3be7b1988f", + "c09ebe1563d8477aa0e5ec88160ccda2", + "f697561ad26048cc821cb4614f664edc" + ] + }, + "id": "ce4e8079-1335-4d53-944d-3ed0f6537781", + "outputId": "744174d9-3474-40d2-ce04-ca0db6ee5e6d" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Example of label 1\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "4ec583e4c526449b993c0f7f9e6e5456", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Batches: 0%| | 0/1 [00:00\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", - "
retrieved_correct_positionreranked_correct_position
00.00.0
10.00.0
20.00.0
31.00.0
40.00.0
\n", - "
\n", - "
\n", - "\n", - "
\n", - " \n", - "\n", - " \n", - "\n", - " \n", - "
\n", - "\n", - "\n", - "
\n", - " \n", - "\n", - "\n", - "\n", - " \n", - "
\n", - "\n", - "
\n", - " \n" + "cell_type": "code", + "execution_count": 167, + "id": "2f747537", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 135, + "referenced_widgets": [ + "1c9e78b5942a444ab729333d57ab00a1", + "de21ddc2e22b49cd8429654f9187b61a", + "efbb6facf5484cb990f663a05e981b02", + "9a43fe57b2974c3f82c96226e31e6e64", + "d8120cb8a36f47e0b355ace30dbccf30", + "1a3c1db02f9544e78c2599c7566befc0", + "b915cbcacccc4dc68440908fb073a48e", + "928aa8b44ee34dcea5f9656024bda180", + "7b6179c28a554ce5a6b70ec6318c284f", + "69bcf5c05eb5461f9e5fe64448d38875", + "8976021d2c7a421785f3559a24105089", + "fd1d2ee78abd494db082ad8d161bd623", + "d388a00d8638436c9d3aa477fe708a02", + "d53245c4a74745e9a70c03924debcf98", + "e6bc3b7cc0d04ca2b5ae6fab4d5c3ec3", + "a2eafe380ca74843abd46ccb0a4132f8", + "f6e42a3fad9f445d8385a691715e5441", + "878d1b336d084e90b84c5e7d9585dc71", + "8e3c115a975c4ecb9f7948d0dc318282", + "fc916e59dce04b68993a6922695d7226", + "79562014e45a4002a0f364cfa7a1f94e", + "e59da773d0ed452bbec059a7973e8ad1" + ] + }, + "id": "2f747537", + "outputId": "55a7a79e-0609-4328-ecf5-0d48c51eb0fc" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:sentence_transformers.cross_encoder.CrossEncoder:Use pytorch device: cuda\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "1c9e78b5942a444ab729333d57ab00a1", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Batches: 0%| | 0/1 [00:00" + "cell_type": "code", + "execution_count": 170, + "id": "bb46e242", + "metadata": { + "id": "bb46e242" + }, + "outputs": [], + "source": [ + "# Re-ranking got slightly better after 1 epoch" ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import matplotlib.pyplot as plt\n", - "\n", - "X = [1, 3, 5, 10, 25, 50]\n", - "\n", - "OPENAI_RETRIEVAL = [866 / predictions_df.shape[0], 1009/ predictions_df.shape[0], 1048/ predictions_df.shape[0], 1072/ predictions_df.shape[0], 1108/ predictions_df.shape[0], 1122/ predictions_df.shape[0]]\n", - "# OPEN_SOURCE_RETRIEVAL = [663 / predictions_df.shape[0], 795/ predictions_df.shape[0], 838/ predictions_df.shape[0], 891/ predictions_df.shape[0], 966/ predictions_df.shape[0], 1004/ predictions_df.shape[0]]\n", - "OLD_CROSS_ENCODER = [956 / predictions_df.shape[0], 1057/ predictions_df.shape[0], 1077/ predictions_df.shape[0], 1094/ predictions_df.shape[0], 1120/ predictions_df.shape[0], 1122/ predictions_df.shape[0]]\n", - "NEW_CROSS_ENCODER = [975 / predictions_df.shape[0], 1056/ predictions_df.shape[0], 1077/ predictions_df.shape[0], 1101/ predictions_df.shape[0], 1117/ predictions_df.shape[0], 1122/ predictions_df.shape[0]]\n", - "\n", - "# Creating the plot\n", - "plt.figure(figsize=(10, 6))\n", - "plt.plot(X, OPENAI_RETRIEVAL, label='OAI Retrieval Only', marker='o')\n", - "plt.plot(X, OPEN_SOURCE_RETRIEVAL, label='OS Retrieval Only', marker='*')\n", - "plt.plot(X, OPEN_SOURCE_RETRIEVAL_PLUS_FT_CE, label='OS + Finetuned CE', marker='v')\n", - "plt.plot(X, OLD_CROSS_ENCODER, label='OAI + Pretrained CE', marker='s')\n", - "plt.plot(X, NEW_CROSS_ENCODER, label='OAI + Finetuned CE', marker='^')\n", - "\n", - "# Adding titles and labels\n", - "plt.title('Comparing embedding models + pre-trained vs fine-tuned CE (all retrieved 50 results then re-ranked)')\n", - "plt.xlabel('Recall @')\n", - "plt.ylabel('Performance')\n", - "plt.xticks(X)\n", - "plt.yticks([i/100 for i in range(70, 101, 5)]) # Adjusting y-ticks to start from 0.75\n", - "\n", - "# Adding legend\n", - "plt.legend()\n", - "\n", - "# Show the plot\n", - "plt.grid(True)\n", - "# plt.show()\n", - "\n", - "plt.savefig('recall_at_k.png', dpi=1000)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "LFaZAKPhaymM", - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 275 }, - "id": "LFaZAKPhaymM", - "outputId": "a58e68c7-f61e-420a-aef9-c8336bb48702" - }, - "outputs": [ { - "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", - " \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", - "
RECALL @OS_Retrieval_OnlyOS_Retrieval_Plus_Finetuned_CEOAI_Retrieval_OnlyOAI_Retrieval_Plus_Pretrained_CEOAI_Retrieval_Plus_Finetuned_CE
010.5017420.6193380.7543550.8327530.849303
130.7726480.8763070.8789200.9207320.919861
250.8257840.9189900.9128920.9381530.938153
3100.8780490.9468640.9337980.9529620.959059
4250.9346690.9608010.9651570.9756100.972997
5500.9642860.9642860.9773520.9773520.977352
\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" + "cell_type": "code", + "execution_count": 171, + "id": "0cfcd92e-31ad-4bf7-9e30-b6d260a06871", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 310 + }, + "id": "0cfcd92e-31ad-4bf7-9e30-b6d260a06871", + "outputId": "accb7c26-3dd6-42fc-f4d0-a9693089894d" + }, + "outputs": [ + { + "data": { + "application/vnd.google.colaboratory.intrinsic+json": { + "summary": "{\n \"name\": \"ft_predictions_df\",\n \"rows\": 1148,\n \"fields\": [\n {\n \"column\": \"final_results\",\n \"properties\": {\n \"dtype\": \"object\",\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"retrieved_correct_position\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 4.837119995625484,\n \"min\": 0.0,\n \"max\": 49.0,\n \"num_unique_values\": 31,\n \"samples\": [\n 26.0,\n 10.0,\n 39.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"reranked_correct_position\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 3.2961654984934645,\n \"min\": 0.0,\n \"max\": 48.0,\n \"num_unique_values\": 25,\n \"samples\": [\n 17.0,\n 9.0,\n 0.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"results_from_pinecone\",\n \"properties\": {\n \"dtype\": \"object\",\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"top_re_rank_score\",\n \"properties\": {\n \"dtype\": \"float32\",\n \"num_unique_values\": 1148,\n \"samples\": [\n 0.989776611328125,\n 0.9937517046928406,\n 0.10413498431444168\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}", + "type": "dataframe", + "variable_name": "ft_predictions_df" + }, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
final_resultsretrieved_correct_positionreranked_correct_positionresults_from_pineconetop_re_rank_score
0[{'score': 0.27245408, 'id': '2f90090e21f19450...0.00.0[{'id': '2f90090e21f19450887d5f3ff781e541',\n", + " '...0.272454
1[{'score': 0.95008755, 'id': '49201636ad410273...0.00.0[{'id': '49201636ad4102735125e146c0dbafa4',\n", + " '...0.950088
2[{'score': 0.9484397, 'id': '80d92494d2b06f341...0.00.0[{'id': '80d92494d2b06f341842f1855d2938cf',\n", + " '...0.948440
3[{'score': 0.32520765, 'id': 'e3fd54f33b021ea3...0.00.0[{'id': 'e3fd54f33b021ea3cf88b438fefcada7',\n", + " '...0.325208
4[{'score': 0.4159641, 'id': '37ed40c20d4e1b9cc...0.00.0[{'id': '37ed40c20d4e1b9cc8d6cc27a4d0fff3',\n", + " '...0.415964
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ], + "text/plain": [ + " final_results \\\n", + "0 [{'score': 0.27245408, 'id': '2f90090e21f19450... \n", + "1 [{'score': 0.95008755, 'id': '49201636ad410273... \n", + "2 [{'score': 0.9484397, 'id': '80d92494d2b06f341... \n", + "3 [{'score': 0.32520765, 'id': 'e3fd54f33b021ea3... \n", + "4 [{'score': 0.4159641, 'id': '37ed40c20d4e1b9cc... \n", + "\n", + " retrieved_correct_position reranked_correct_position \\\n", + "0 0.0 0.0 \n", + "1 0.0 0.0 \n", + "2 0.0 0.0 \n", + "3 0.0 0.0 \n", + "4 0.0 0.0 \n", + "\n", + " results_from_pinecone top_re_rank_score \n", + "0 [{'id': '2f90090e21f19450887d5f3ff781e541',\n", + " '... 0.272454 \n", + "1 [{'id': '49201636ad4102735125e146c0dbafa4',\n", + " '... 0.950088 \n", + "2 [{'id': '80d92494d2b06f341842f1855d2938cf',\n", + " '... 0.948440 \n", + "3 [{'id': 'e3fd54f33b021ea3cf88b438fefcada7',\n", + " '... 0.325208 \n", + "4 [{'id': '37ed40c20d4e1b9cc8d6cc27a4d0fff3',\n", + " '... 0.415964 " + ] + }, + "execution_count": 171, + "metadata": {}, + "output_type": "execute_result" + } ], - "text/plain": [ - " RECALL @ OS_Retrieval_Only OS_Retrieval_Plus_Finetuned_CE \\\n", - "0 1 0.501742 0.619338 \n", - "1 3 0.772648 0.876307 \n", - "2 5 0.825784 0.918990 \n", - "3 10 0.878049 0.946864 \n", - "4 25 0.934669 0.960801 \n", - "5 50 0.964286 0.964286 \n", - "\n", - " OAI_Retrieval_Only OAI_Retrieval_Plus_Pretrained_CE \\\n", - "0 0.754355 0.832753 \n", - "1 0.878920 0.920732 \n", - "2 0.912892 0.938153 \n", - "3 0.933798 0.952962 \n", - "4 0.965157 0.975610 \n", - "5 0.977352 0.977352 \n", - "\n", - " OAI_Retrieval_Plus_Finetuned_CE \n", - "0 0.849303 \n", - "1 0.919861 \n", - "2 0.938153 \n", - "3 0.959059 \n", - "4 0.972997 \n", - "5 0.977352 " + "source": [ + "ft_predictions_df = pd.DataFrame(ft_predictions)\n", + "ft_predictions_df.head()" ] - }, - "execution_count": 448, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# show results as a table\n", - "\n", - "results_df = pd.DataFrame({'RECALL @': [1, 3, 5, 10, 25, 50], 'OS_Retrieval_Only': OPEN_SOURCE_RETRIEVAL, 'OS_Retrieval_Plus_Finetuned_CE': OPEN_SOURCE_RETRIEVAL_PLUS_FT_CE , 'OAI_Retrieval_Only': OPENAI_RETRIEVAL , 'OAI_Retrieval_Plus_Pretrained_CE': OLD_CROSS_ENCODER, 'OAI_Retrieval_Plus_Finetuned_CE': NEW_CROSS_ENCODER})\n", - "results_df" - ] - } - ], - "metadata": { - "accelerator": "GPU", - "colab": { - "gpuType": "T4", - "machine_shape": "hm", - "provenance": [] - }, - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "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.11.5" - }, - "widgets": { - "application/vnd.jupyter.widget-state+json": { - "0295736b3f254a8590d911792f2c19db": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "FloatProgressModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "ProgressView", - "bar_style": "success", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_3f1ba16f17c94fb8a409d152b9a6045a", - "max": 1739, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_c485139a148e4207957e96b4275eeed2", - "value": 1739 - } - }, - "084ebc36eb9d4616acc1a0843673ac4f": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "098016d32abc4f45be0a4f747cbc3f11": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } }, - "0caf250cdae643479160eedc708ffeea": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HBoxModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HBoxView", - "box_style": "", - "children": [ - "IPY_MODEL_fa6089718c574ee19bd3c378e356ea6b", - "IPY_MODEL_f78b642ffb784f9097e0cbf97c44b9bd", - "IPY_MODEL_7c322a232739486a937883ac787f8750" + { + "cell_type": "code", + "execution_count": 172, + "id": "9Sr2q5IN9LMz", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 147 + }, + "id": "9Sr2q5IN9LMz", + "outputId": "57687adb-038f-443b-884c-fcac1ee25bcf" + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
0
retrieved_correct_position25
reranked_correct_position25
\n", + "

" + ], + "text/plain": [ + "retrieved_correct_position 25\n", + "reranked_correct_position 25\n", + "dtype: int64" + ] + }, + "execution_count": 172, + "metadata": {}, + "output_type": "execute_result" + } ], - "layout": "IPY_MODEL_1bc5237b0db94f4aa124c8c79a891955" - } - }, - "11e5c44fa73c4d5d88561036f2a0a070": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "168948926c2340abb8b52f8dd67a5e73": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "1bc5237b0db94f4aa124c8c79a891955": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } + "source": [ + "ft_predictions_df[['retrieved_correct_position', 'reranked_correct_position']].isnull().sum()" + ] }, - "21316ef8a22d40ab9109ccf0fa7fa645": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HBoxModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HBoxView", - "box_style": "", - "children": [ - "IPY_MODEL_458bcab796d642c9afd2e534085b991f", - "IPY_MODEL_266b42f10bd74b9f907588c1251c8d6c", - "IPY_MODEL_ba968ae891a2400fa0db9f331b85b66c" + { + "cell_type": "code", + "execution_count": 173, + "id": "75b414c6", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 147 + }, + "id": "75b414c6", + "outputId": "214e9739-8574-42df-9e5f-eff32d954ac8" + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
0
retrieved_correct_position1.346394
reranked_correct_position0.547640
\n", + "

" + ], + "text/plain": [ + "retrieved_correct_position 1.346394\n", + "reranked_correct_position 0.547640\n", + "dtype: float64" + ] + }, + "execution_count": 173, + "metadata": {}, + "output_type": "execute_result" + } ], - "layout": "IPY_MODEL_5d09ef7e47f446a3a3a51458195a0fe3" - } - }, - "252dfe4d46604a089c263bb0eae17a3a": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "ProgressStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "bar_color": null, - "description_width": "" - } - }, - "266b42f10bd74b9f907588c1251c8d6c": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "FloatProgressModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "ProgressView", - "bar_style": "success", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_b070922627a04195a41899a169984b08", - "max": 1, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_85a67e7f5d2845329d63f0922bb5d9a6", - "value": 1 - } - }, - "2aa32422748943759daf5ef05077bda0": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "2c83393c2b7745889765d8efb4890763": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "2cb4c1bff01b4f669ecd8583187bab9f": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "348701c9256e4eb48b8ffb0d9c0d6c83": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "ProgressStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "bar_color": null, - "description_width": "" - } - }, - "352af51e6e7943a7a41d3bbe41885d8d": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } + "source": [ + "ft_predictions_df[['retrieved_correct_position', 'reranked_correct_position']].mean()" + ] }, - "37395cf0cac548c783ccbdac230c4a3c": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HBoxModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HBoxView", - "box_style": "", - "children": [ - "IPY_MODEL_8085fe243d814d5da2b4d6b665a6aa51", - "IPY_MODEL_0295736b3f254a8590d911792f2c19db", - "IPY_MODEL_ad079ced956841be88a3ab6f2fdcd88d" + { + "cell_type": "code", + "execution_count": 174, + "id": "2535cbae", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "2535cbae", + "outputId": "f7dc4eb2-88fa-4f17-f8d3-e1f563e4185b" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1 865 1022\n", + "3 1009 1083\n", + "5 1048 1090\n", + "10 1073 1104\n", + "25 1108 1117\n", + "50 1123 1123\n" + ] + } ], - "layout": "IPY_MODEL_953b16307b514bc995efc40ff8f4698b" - } - }, - "3838d1bfccb5402d91ecf96f51f9c2d7": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_e732511315484861b39d0efb86b9cfb5", - "placeholder": "​", - "style": "IPY_MODEL_3df968e9ff654de7bfc95f08c88a99c6", - "value": " 1/1 [00:00<00:00, 33.52it/s]" - } - }, - "3df968e9ff654de7bfc95f08c88a99c6": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "3f1ba16f17c94fb8a409d152b9a6045a": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "43c8db4be4984f6da1540de6bc89b616": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "FloatProgressModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "ProgressView", - "bar_style": "success", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_dc26c84713fb45f5a6c5b870c96d9d9e", - "max": 1, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_a6ac9d7aed4c493db567b015ab8502a5", - "value": 1 - } - }, - "458bcab796d642c9afd2e534085b991f": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_352af51e6e7943a7a41d3bbe41885d8d", - "placeholder": "​", - "style": "IPY_MODEL_2cb4c1bff01b4f669ecd8583187bab9f", - "value": "Batches: 100%" - } - }, - "4d26773cf0ec45fc9ac3185f8141cfe6": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "4f4986d008434fc9912c496636b40b38": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "5a7b319329164b27bf452869e2335aef": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "5b3c84192618410ea1793239c4514c6e": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "5d09ef7e47f446a3a3a51458195a0fe3": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "608d1345487046ceb64b0b31a4287ae0": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_fce9aa1662c34941afadd6141aba9180", - "placeholder": "​", - "style": "IPY_MODEL_098016d32abc4f45be0a4f747cbc3f11", - "value": "Batches: 100%" - } - }, - "66f8508878e94e4296e2ffb009afdb75": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "6854fe2978954c7b9e30202a6ea34b57": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "687d7bf7373f4541852203637e18d2e3": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "6cb81ad9ee8141aa9d0fbefc276f244d": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_80e18075a957476591fa1ba2585b7a73", - "placeholder": "​", - "style": "IPY_MODEL_e1d8ec56e5614d77a6999a42283be94b", - "value": " 1/1 [00:00<00:00, 27.76it/s]" - } - }, - "6f5389fdc3674a05ad79bb9456a5995f": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_e281ca37b72d422285aa64193265aaa4", - "placeholder": "​", - "style": "IPY_MODEL_687d7bf7373f4541852203637e18d2e3", - "value": "Batches: 100%" - } - }, - "6f96c8a415744597bcaa83141b3a457c": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "70e45cb4f2f64c499acc785ec64743fe": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_d9f6781147a24bc3aec97b87927bdfbb", - "placeholder": "​", - "style": "IPY_MODEL_d0c85ebbf1a54fdcaa33210aa3e247b8", - "value": " 620/620 [00:30<00:00, 100.95it/s]" - } - }, - "7a5c511f2fe84c66beef7fed87023669": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "FloatProgressModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "ProgressView", - "bar_style": "success", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_5a7b319329164b27bf452869e2335aef", - "max": 620, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_e5a88639e7e5430fbe44f73d2e5a4b23", - "value": 620 - } - }, - "7ab68b0af00248f5bbc15a39bbf38166": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "7bd0527b8e174aec9911c5b32dc048fd": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "7c322a232739486a937883ac787f8750": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_11e5c44fa73c4d5d88561036f2a0a070", - "placeholder": "​", - "style": "IPY_MODEL_9781773e5d4d4e0ab8e3ff3140bd0983", - "value": " 36/36 [00:16<00:00, 5.64it/s]" - } - }, - "8085fe243d814d5da2b4d6b665a6aa51": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_4d26773cf0ec45fc9ac3185f8141cfe6", - "placeholder": "​", - "style": "IPY_MODEL_d7959d1933e5466095bed23bb268afd5", - "value": "Iteration: 100%" - } - }, - "80e18075a957476591fa1ba2585b7a73": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "8396e1788d5540a79a9d195e2753351a": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "85a67e7f5d2845329d63f0922bb5d9a6": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "ProgressStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "bar_color": null, - "description_width": "" - } - }, - "8e41a0a7932b4f0b8a448847ff3f14ff": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "8e989ddf9d274876a3ba06056e7147a1": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "953b16307b514bc995efc40ff8f4698b": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "9781773e5d4d4e0ab8e3ff3140bd0983": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "999f219c7c9449f0a48feb59eddd23eb": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "9d726c5753564258bbe1c281fa8bfefa": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_66f8508878e94e4296e2ffb009afdb75", - "placeholder": "​", - "style": "IPY_MODEL_999f219c7c9449f0a48feb59eddd23eb", - "value": "Batches: 100%" - } - }, - "a6ac9d7aed4c493db567b015ab8502a5": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "ProgressStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "bar_color": null, - "description_width": "" - } - }, - "ad079ced956841be88a3ab6f2fdcd88d": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_6f96c8a415744597bcaa83141b3a457c", - "placeholder": "​", - "style": "IPY_MODEL_8e41a0a7932b4f0b8a448847ff3f14ff", - "value": " 1739/1739 [10:05<00:00, 2.86it/s]" - } - }, - "b070922627a04195a41899a169984b08": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "b281e2a5a8204b52827f01316d637952": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "FloatProgressModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "ProgressView", - "bar_style": "success", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_084ebc36eb9d4616acc1a0843673ac4f", - "max": 1, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_252dfe4d46604a089c263bb0eae17a3a", - "value": 1 - } - }, - "b6ecc1cc5b2e4332b56fdc1614823d3e": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "ProgressStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "bar_color": null, - "description_width": "" - } - }, - "b86aa89087cb425198afa2db30d86600": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "b9fbabd33a2a4d0a94055cd086d83228": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_168948926c2340abb8b52f8dd67a5e73", - "placeholder": "​", - "style": "IPY_MODEL_8396e1788d5540a79a9d195e2753351a", - "value": "Epoch: 100%" - } - }, - "ba968ae891a2400fa0db9f331b85b66c": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_5b3c84192618410ea1793239c4514c6e", - "placeholder": "​", - "style": "IPY_MODEL_7bd0527b8e174aec9911c5b32dc048fd", - "value": " 1/1 [00:00<00:00, 28.53it/s]" - } - }, - "bb260568c96a4397bba2b1058404eec2": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } + "source": [ + "# do recall @ 1, 3, 5, 10\n", + "OPENAI_RETRIEVAL = []\n", + "OPENAI_RETRIEVAL_PLUS_FT_CE = []\n", + "for k in X:\n", + " embedding_only_recall = ft_predictions_df[ft_predictions_df['retrieved_correct_position'] < k].shape[0]\n", + " reranked_recall = ft_predictions_df[ft_predictions_df['reranked_correct_position'] < k].shape[0]\n", + " OPENAI_RETRIEVAL.append(embedding_only_recall / ft_predictions_df.shape[0])\n", + " OPENAI_RETRIEVAL_PLUS_FT_CE.append(reranked_recall / ft_predictions_df.shape[0])\n", + " print(k, embedding_only_recall, reranked_recall)" + ] }, - "c485139a148e4207957e96b4275eeed2": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "ProgressStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "bar_color": null, - "description_width": "" - } + { + "cell_type": "code", + "execution_count": 174, + "id": "d9e5e922-7667-4a02-b4fc-7acb9cc97c24", + "metadata": { + "id": "d9e5e922-7667-4a02-b4fc-7acb9cc97c24" + }, + "outputs": [], + "source": [] }, - "c7800a5a8f1b4c3fa541df6b5ba6281f": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HBoxModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HBoxView", - "box_style": "", - "children": [ - "IPY_MODEL_9d726c5753564258bbe1c281fa8bfefa", - "IPY_MODEL_ea3f511248734bbab197277b68346826", - "IPY_MODEL_3838d1bfccb5402d91ecf96f51f9c2d7" + { + "cell_type": "code", + "execution_count": 175, + "id": "8faf0c1a", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 224 + }, + "id": "8faf0c1a", + "outputId": "686c27ab-23ef-4b4a-90ad-8a281023a26e" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1148/1148 [09:07<00:00, 2.10it/s]\n" + ] + }, + { + "data": { + "application/vnd.google.colaboratory.intrinsic+json": { + "summary": "{\n \"name\": \"os_predictions_df\",\n \"rows\": 1148,\n \"fields\": [\n {\n \"column\": \"retrieved_correct_position\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 7.001637072855341,\n \"min\": 0.0,\n \"max\": 49.0,\n \"num_unique_values\": 44,\n \"samples\": [\n 33.0,\n 4.0,\n 22.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"reranked_correct_position\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 3.021110978160727,\n \"min\": 0.0,\n \"max\": 46.0,\n \"num_unique_values\": 21,\n \"samples\": [\n 0.0,\n 14.0,\n 8.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}", + "type": "dataframe", + "variable_name": "os_predictions_df" + }, + "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", + "
retrieved_correct_positionreranked_correct_position
00.00.0
10.00.0
20.00.0
31.00.0
40.00.0
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ], + "text/plain": [ + " retrieved_correct_position reranked_correct_position\n", + "0 0.0 0.0\n", + "1 0.0 0.0\n", + "2 0.0 0.0\n", + "3 1.0 0.0\n", + "4 0.0 0.0" + ] + }, + "execution_count": 175, + "metadata": {}, + "output_type": "execute_result" + } ], - "layout": "IPY_MODEL_ecc8ed6e869d4b01b7905ca951d0068c" - } - }, - "cdd38d9a948a4a4c8408dcb06d7c584a": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_2aa32422748943759daf5ef05077bda0", - "placeholder": "​", - "style": "IPY_MODEL_e7c672eb19574b32811bdcc3f6ac0b34", - "value": " 1/1 [11:44<00:00, 704.92s/it]" - } - }, - "d0c85ebbf1a54fdcaa33210aa3e247b8": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "d7959d1933e5466095bed23bb268afd5": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "d9f6781147a24bc3aec97b87927bdfbb": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } + "source": [ + "logger.setLevel(logging.CRITICAL)\n", + "os_predictions = []\n", + "\n", + "for i, question in tqdm(enumerate(test_sample), total=len(test_sample)):\n", + " os_predictions.append(eval_ranking_open_source(bi_encoder, doc_emb, question['question'], top_k=TOP_K, re_rank_model=finetuned))\n", + "\n", + "os_predictions_df = pd.DataFrame(os_predictions)\n", + "os_predictions_df.head()" + ] }, - "dbca2d7da970438892d45cd387434f6f": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HBoxModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HBoxView", - "box_style": "", - "children": [ - "IPY_MODEL_6f5389fdc3674a05ad79bb9456a5995f", - "IPY_MODEL_7a5c511f2fe84c66beef7fed87023669", - "IPY_MODEL_70e45cb4f2f64c499acc785ec64743fe" + { + "cell_type": "code", + "execution_count": 176, + "id": "6eaeb9b4", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "6eaeb9b4", + "outputId": "8e97a733-1aaa-403c-b8f3-cfdd181814d5" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Accuracy without re-ranking: 0.5017421602787456\n", + "Accuracy with re-ranking: 0.6428571428571429\n" + ] + } ], - "layout": "IPY_MODEL_bb260568c96a4397bba2b1058404eec2" - } - }, - "dc26c84713fb45f5a6c5b870c96d9d9e": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "e1d8ec56e5614d77a6999a42283be94b": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "e281ca37b72d422285aa64193265aaa4": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } + "source": [ + "raw_accuracy = sum([p['retrieved_correct_position'] == 0 for p in os_predictions])/len(os_predictions)\n", + "reranked_accuracy = sum([p['reranked_correct_position'] == 0 for p in os_predictions])/len(os_predictions)\n", + "\n", + "print(f'Accuracy without re-ranking: {raw_accuracy}')\n", + "print(f'Accuracy with re-ranking: {reranked_accuracy}')\n" + ] }, - "e31ae00bfabe4ed5b058d7dbe55a80f6": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HBoxModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HBoxView", - "box_style": "", - "children": [ - "IPY_MODEL_b9fbabd33a2a4d0a94055cd086d83228", - "IPY_MODEL_b281e2a5a8204b52827f01316d637952", - "IPY_MODEL_cdd38d9a948a4a4c8408dcb06d7c584a" + { + "cell_type": "code", + "execution_count": 177, + "id": "T00iM9SyaUFI", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "T00iM9SyaUFI", + "outputId": "360d171f-1fd0-41f5-a29b-80f380d046c7" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1 576 738\n", + "3 887 1029\n", + "5 948 1072\n", + "10 1008 1091\n", + "25 1073 1103\n", + "50 1107 1107\n" + ] + } ], - "layout": "IPY_MODEL_b86aa89087cb425198afa2db30d86600" - } - }, - "e5a88639e7e5430fbe44f73d2e5a4b23": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "ProgressStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "bar_color": null, - "description_width": "" - } - }, - "e732511315484861b39d0efb86b9cfb5": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "e7c672eb19574b32811bdcc3f6ac0b34": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "ea3f511248734bbab197277b68346826": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "FloatProgressModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "ProgressView", - "bar_style": "success", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_7ab68b0af00248f5bbc15a39bbf38166", - "max": 1, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_b6ecc1cc5b2e4332b56fdc1614823d3e", - "value": 1 - } - }, - "ecc8ed6e869d4b01b7905ca951d0068c": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } + "source": [ + "# do recall @ 1, 3, 5, 10\n", + "OPEN_SOURCE_RETRIEVAL = []\n", + "OPEN_SOURCE_RETRIEVAL_PLUS_FT_CE = []\n", + "for k in X:\n", + " embedding_only_recall = os_predictions_df[os_predictions_df['retrieved_correct_position'] < k].shape[0]\n", + " reranked_recall = os_predictions_df[os_predictions_df['reranked_correct_position'] < k].shape[0]\n", + " print(k, embedding_only_recall, reranked_recall)\n", + " OPEN_SOURCE_RETRIEVAL.append(embedding_only_recall / os_predictions_df.shape[0])\n", + " OPEN_SOURCE_RETRIEVAL_PLUS_FT_CE.append(reranked_recall / os_predictions_df.shape[0])" + ] }, - "f36d8f08f6284b848622fd560196cc78": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HBoxModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HBoxView", - "box_style": "", - "children": [ - "IPY_MODEL_608d1345487046ceb64b0b31a4287ae0", - "IPY_MODEL_43c8db4be4984f6da1540de6bc89b616", - "IPY_MODEL_6cb81ad9ee8141aa9d0fbefc276f244d" + { + "cell_type": "code", + "execution_count": 178, + "id": "-ub8HU8BZAW1", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 564 + }, + "id": "-ub8HU8BZAW1", + "outputId": "f15b2eac-5c5b-4242-925a-26fc12c638bb" + }, + "outputs": [ + { + "data": { + "image/png": "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X3zxRVj6BQsW8OWXX3LbbbcFX7tzzjmHBx54gFdeeYVbb72VsrIynn76aa677jq+++67sP3LysoYM2YM48aN4/LLL2fWrFnccsstmEwmrrvuuibn6YYbbuCDDz7giiuuYOjQoXz33XdRn/vvv//OGWecQWZmJpMnT8btdvP444+TlZUV0+sEcMcdd5Camsrjjz/Otm3bmDZtGrfffjszZ84Mppk0aRJPP/00Y8eOZfTo0fz222+MHj0au90e83k+/PBDnE4nd9xxB6WlpTz99NOMGzeOU089lR9++IE///nPbNq0iZdeeon7778/rGA+efJkpkyZwqhRo7jllltYv349r776Kj///DOLFi0K/mr81ltvcdNNNzF06FDuvvtutmzZwrnnnktaWhq5ubnB4zX1+gg1efJkpk6dyg033MCgQYOorKzkl19+4ddff+X000+P+fU4EP7617+iaRp//vOfKSwsZNq0aYwaNYpVq1aF/VJfUlLCWWedxWWXXcZVV11FVlbWfr0GmZmZvPrqq9xyyy1ccMEFXHjhhQAcc8wxwTRut5vRo0czfPhwnn322eCv0R9//DE2m41bbrmF9PR0li9fzksvvUR+fj4ff/zxPp/zwoUL+eyzz7j11ltJTEzkH//4BxdddBE7duwgPT0dgL179zJ48ODgl11mZiazZ8/m+uuvp7KyMligr62t5bTTTmPHjh3ceeed5OTk8P7770d8vqM5++yzSUhIYNasWYwcOTJs28yZM+nXr19w4KaLLrqINWvWcMcdd9CtWzcKCwuZO3cuO3bsaPBe+fDDD9O7d29ef/31YHPBnj17Npqnf/7zn1RVVXHTTTehaRpPP/00F154IVu2bAl+RtasWcOwYcPo1KkTDz74IPHx8cyaNYvzzz+fTz/9lAsuuKDB41944YVs2LCBf/3rX7zwwgtkZGQAvushlsJRfbF8D/z1r3/l0UcfZdy4cdxwww0UFRXx0ksvcdJJJ7Fy5cpgrWesn/1oZs+ejdvt5uqrr25S/isqKiIGNdA0LXgdNmTx4sX0798/orbr559/ZvHixVx22WV07tyZbdu28eqrr3LyySfzxx9/HLAanfXr13P55Zdz0003MXHiRHr37o3NZmPkyJEUFBRw00030aVLFxYvXsykSZPYvXs306ZN26/PfTQ33XQT7777LhMmTODOO+9k69atvPzyy6xcuTJ4X7/00ku55ppr+PnnnznxxBOD+27fvp2lS5fyzDPPBNcdjGslYMOGDcTHx+N0OsnKymLixIk89thjYe/pypUrOfLII0lKSgrbd9CgQQCsWrVqn+fbn3v3mjVrOOecczjmmGN44oknMJvNbNq0iUWLFsX0HBuzr2uhOfe8m266iV27djF37lzef//9qGla4h4XSxmoIQ1d77Fc2/vSULm6KWXzWL4v69u8eTOnnnoqaWlpzJ07l4yMjJjuD+BrKXDeeeexcOFCbr75Zo466ig+//zz4A+X9SUnJ9OzZ08WLVrEPffcs8/XJEi1ARUVFQpQ5513XkzpV61apQB1ww03hK2///77FaC+++674LquXbsqQC1evDi47ptvvlGAslqtavv27cH1r732mgLU999/H1w3fvx4Bag77rgjuM7r9aqzzz5bmUwmVVRUFFxvs9nC8uN0OlX//v3VqaeeGrYeUDqdTq1ZsybiuQHq8ccfDy4//vjjClDXXXddWLoLLrhApaenB5dXrFihAHX33XeHpbv22msjjhnN+++/r3Q6nVqwYEHY+hkzZihALVq0KCyPZrNZbd26Nbgu8NplZ2erysrK4PpJkyYpICztyJEjFaCee+654DqHw6EGDBigOnTooJxOZ5PyFLgebr311rB0V1xxRcRzP//885XFYgl73//44w+l1+tV/Y9D165d1fjx44PL77zzjgLUqFGjlNfrDa6/5557lF6vV+Xl5Uoppfbs2aMMBoM6//zzw443efJkBYQdM5qtW7cqQGVmZgaPqVTda3nssccql8sVXH/55Zcrk8mk7Ha7UkqpwsJCZTKZ1BlnnKE8Hk8w3csvv6wA9fbbbyulfNdnhw4d1IABA5TD4Qime/311xWgRo4cGVzXlOuj/ut27LHHqrPPPrvR5xyr8ePHh+UrVt9//70CVKdOncKuz1mzZilAvfjii8F1getzxowZYcdoymsQTVFRUYOfxcB95sEHH4zYVv++opRSU6dOVZqmhV3HgXtFKECZTCa1adOm4LrffvtNAeqll14Krrv++utVx44dVXFxcdj+l112mUpOTg7mYdq0aQpQs2bNCqapqalRvXr1irh3RnP55ZerDh06KLfbHVy3e/dupdPp1BNPPKGUUqqsrEwB6plnnmn0WNEEPqM///xz2Prx48errl27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WtuzZ08SExMP+jXToUMHTj75ZF577bVg7UKowGsT+GEi9H+gIBL4Qav++56UlERGRkZE36769/CmuPDCC9Hr9UyZMiXil2ilVPCz2JTPfjS5ublMnDiRb7/9Nup3jNfr5bnnnmtw+pumGjJkCKtXr454//V6fcTzfOmll/a7liUW48aNY8mSJVG/O8rLy3G73UDzPvcNnc/j8fDkk09GbHO73RHHv/TSS9m1axdvvvkmv/32W8QPKgfrWqmsrIx435RS/OUvfwEIq026+OKL8Xg8YfcTh8PBO++8Q15eXrNb88R67442hVEgwAw8h0B3kdDPbf08N6Sha2F/7nkN3V9iFes9riXFem337ds37B4bKCs2piXL5pqm8frrr3PxxRczfvz4sKkqYr0/jBkzBrfbHVZe9Hg8DZbdKyoq2Lx5c8wzFwS0mZq9nj178s9//pNLL72Uo446KjiRptPpZPHixXz88cfBOZOOPfZYxo8fz+uvv055eTkjR45k+fLlvPfee5x//vmccsopBzRvFouFOXPmMH78ePLy8pg9ezZfffUVDz30UPBXqbPPPpvnn3+eM888kyuuuILCwkKmT59Or169+N///ndA8xPNwIEDueiii5g2bRolJSXBqRcCtWX7+vXn6quvZtasWdx88818//33DBs2DI/Hw7p165g1a1ZwjqEDJScnh6eeeopt27Zx5JFHMnPmTFatWsXrr78e7CsQa54GDBjA5ZdfziuvvEJFRQVDhw5l/vz5UWs1p0yZwpw5cxgxYgS33norbrebl156iX79+h2w9ykrK4u77rqL5557jnPPPZczzzyT3377jdmzZ5ORkdHiNaeZmZlMmjSJKVOmcOaZZ3Luueeyfv16XnnlFU488cTgL2NGo5G//OUv3HTTTZx66qlceumlbN26lXfeeSeiL8b+XB99+/bl5JNPZuDAgaSlpfHLL7/wySefhA16dLCkpaUxfPhwJkyYwN69e5k2bRq9evVi4sSJ+9x3fz8jVquVvn37MnPmTI488kjS0tLo379/cLqBaPr06UPPnj25//77KSgoICkpiU8//fSA1xD//e9/5/vvvycvL4+JEyfSt29fSktL+fXXX5k3b16wEDRx4kRefvllrrnmGlasWEHHjh15//33mzTEvdFo5MILL+Sjjz6ipqaGZ599Nmz7hg0bOO200xg3bhx9+/bFYDDw+eefs3fvXi677LID+rxjMX36dIYPH87RRx/NxIkT6dGjB3v37mXJkiXk5+fz22+/Nbp/oEDy8MMPc9lll2E0Ghk7dmzwx82///3v3HDDDZxwwgn89NNPwXt2c/Ts2ZO//OUvTJo0iW3btnH++eeTmJjI1q1b+fzzz7nxxhu5//77m/TZb8hzzz3H5s2bufPOO/nss88455xzSE1NZceOHXz88cesW7cu4v2aPXs269atizjW0KFDGz3veeedx5NPPsmPP/7IGWecEVx/zjnn8P7775OcnEzfvn1ZsmQJ8+bN2+dUDgfCn/70J7788kvOOeccrr32WgYOHEhNTQ2///47n3zyCdu2bSMjI6NZn/toRo4cyU033cTUqVNZtWoVZ5xxBkajkY0bN/Lxxx/z4osvhg2cFJjH7P777w/+oBPqYF0rv/76K5dffjmXX345vXr1ora2ls8//5xFixZx4403cvzxxwfT5uXlcckllzBp0iQKCwvp1asX7733Htu2beOtt95q0usVKtZ79xNPPMFPP/3E2WefTdeuXSksLOSVV16hc+fODB8+HIB+/foxePBgJk2aRGlpKWlpaXz00UfBwntjGroW3G53s+95gfvLnXfeyejRo9Hr9U2+T+7vPW5/NfXaboqWLpvrdDo++OADzj//fMaNG8fXX3/NqaeeGvP9YezYsQwbNowHH3yQbdu20bdvXz777LMG+xzPmzcvOF1DkzRp7M6DYMOGDWrixImqW7duymQyqcTERDVs2DD10ksvhQ0L63K51JQpU1T37t2V0WhUubm5atKkSWFplPINmxxt2HdA3XbbbWHrAkPVhg5/O378eBUfH682b96szjjjDBUXF6eysrLU448/HjasvVJKvfXWW+qII45QZrNZ9enTR73zzjsNDode/9yh26INuV1/KOBow//W1NSo2267TaWlpamEhAR1/vnnq/Xr1ytA/f3vf496vlBOp1M99dRTql+/fspsNqvU1FQ1cOBANWXKFFVRUdHk106puuGIP/744+C6kSNHqn79+qlffvlFDRkyRFksFtW1a1f18ssvNztPtbW16s4771Tp6ekqPj5ejR07Vu3cuTPqMMc//vijGjhwoDKZTKpHjx5qxowZUd+nhqZeqD+se7Qhl91ut3r00UdVdna2slqt6tRTT1Vr165V6enp6uabb47+BjTjtWwsXy+//LLq06ePMhqNKisrS91yyy2qrKws4nyvvPKK6t69uzKbzeqEE05QP/30kxo5cmTEkNqxvhf1X7e//OUvatCgQSolJUVZrVbVp08f9de//jU4xUZT7O/UC//617/UpEmTVIcOHZTValVnn3122PQFStVdn9HE+ho0ZPHixcFrL/TaDNxnovnjjz/UqFGjVEJCgsrIyFATJ04MDgcdOixzU+419d8jpZTau3evuu2221Rubq4yGo0qOztbnXbaaer1118PS7d9+3Z17rnnqri4OJWRkaHuuuuu4BDZ+5p6IWDu3LkKUJqmqZ07d4ZtKy4uVrfddpvq06ePio+PV8nJySovLy9suoeGNHXqhWhDnUe7Z2zevFldc801Kjs7WxmNRtWpUyd1zjnnqE8++SSm5/vkk0+qTp06KZ1OF3bfttls6vrrr1fJyckqMTFRjRs3ThUWFu7X94BSSn366adq+PDhKj4+XsXHx6s+ffqo2267Ta1fvz4sXayf/Ya43W715ptvqhEjRqjk5GRlNBpV165d1YQJE8KmZWhs6oX613FDjjnmGHX99deHrSsrK1MTJkxQGRkZKiEhQY0ePVqtW7cu4vre36kXGpo6pqqqSk2aNEn16tVLmUwmlZGRoYYOHaqeffbZsPtbcz73DeXv9ddfVwMHDlRWq1UlJiaqo48+Wj3wwANq165dEWmvvPLK4FD5DWnpa2XLli3qkksuUd26dVMWi0XFxcWpgQMHqhkzZoQN3x9QW1ur7r//fpWdna3MZrM68cQTI6a9aMj+3rvnz5+vzjvvPJWTk6NMJpPKyclRl19+ecTw+Zs3b1ajRo1SZrNZZWVlqYceeih4T9vXNRbtWtife57b7VZ33HGHyszMVJqmBb8DWuIe15QyUDSNXe9KNe3ajvacGipX72/ZvP79JNr92GazqZEjR6qEhAS1dOlSpVTs94eSkhJ19dVXq6SkJJWcnKyuvvpqtXLlyqj3xksvvVQNHz58n69HfZr/CYoGXHvttXzyySdUV1e3dlaaZdWqVRx33HF88MEHXHnlla2dncNaeXk5qamp/OUvf+Hhhx9u7ewcVn744QdOOeUUPv7442b/QiiEaD3vv/8+t912Gzt27AgOkS+EEIeLPXv20L17dz766KMm1+y1mT57Yv9Fm4Nm2rRp6HQ6TjrppFbI0eGrofcCiGmKACGEEHWuvPJKunTpwvTp01s7K0IIcdBNmzaNo48+uulNOGlDffbE/nv66adZsWIFp5xyCgaDgdmzZzN79mxuvPHGVpum4HA1c+ZM3n33XcaMGUNCQgILFy7kX//6F2eccQbDhg1r7ewJIcQhRafTNXl6JiGEaC/+/ve/N3tfCfbakaFDhzJ37lyefPJJqqur6dKlC5MnT5Ymg63gmGOOwWAw8PTTT1NZWRkctCUwApkQQgghhBAtTfrsCSGEEEIIIUQ7JH32hBBCCCGEEKIdatVg76effmLs2LHk5OSgaVpMkxz+8MMPHH/88ZjNZnr16sW7774bkWb69Ol069YNi8VCXl4ey5cvP/CZF0IIIYQQQog2rFX77NXU1HDsscdy3XXXceGFF+4z/datWzn77LO5+eab+fDDD5k/fz433HADHTt2ZPTo0YBvYIx7772XGTNmkJeXx7Rp0xg9ejTr16+nQ4cOMeXL6/Wya9cuEhMTW3wCbCGEEEIIIUTbpZSiqqqKnJwcdLpDq2Fkm+mzp2kan3/+Oeeff36Daf785z/z1VdfhY3Iddlll1FeXs6cOXMAyMvL48QTT+Tll18GfIFbbm4ud9xxBw8++GBMecnPz5fRK4UQQgghhBBBO3fupHPnzq2djSY5pEbjXLJkCaNGjQpbN3r0aO6++24AnE4nK1asYNKkScHtOp2OUaNGsWTJkgaP63A4cDgcweVA/Lt161YSExMP4DNoOpfLxffff88pp5yC0WiUcx6m5PURomXIZ0sIIdqmtnR/rqqqonv37q0eFzTHIRXs7dmzh6ysrLB1WVlZVFZWUltbS1lZGR6PJ2qadevWNXjcqVOnMmXKlIj1S5YsIS4u7sBkfj/ExcWxbNkyOedhTl4fIVqGfLaEEKJtaiv3Z5vNBnBIdu86pIK9ljJp0iTuvffe4HJlZSW5ubmcccYZJCUltWLOfL9qzJ07l9NPP/2g1rIdDuc8lMjrI0TLkM+WEEK0TW3p/lxZWdmq598fh1Swl52dzd69e8PW7d27l6SkJKxWK3q9Hr1eHzVNdnZ2g8c1m82YzeaI9UajsdUvroDWyMvhcs5Dibw+QrQM+WwJIUTb1Bbuz619/v1xSA0nM2TIEObPnx+2bu7cuQwZMgQAk8nEwIEDw9J4vV7mz58fTCOEEEIIIYQQh4NWDfaqq6tZtWoVq1atAnwDoqxatYodO3YAvuaV11xzTTD9zTffzJYtW3jggQdYt24dr7zyCrNmzeKee+4Jprn33nt54403eO+991i7di233HILNTU1TJgw4aA+NyGEEEIIIYRoTa3ajPOXX37hlFNOCS4H+s2NHz+ed999l927dwcDP4Du3bvz1Vdfcc899/Diiy/SuXNn3nzzzeAcewCXXnopRUVFPPbYY+zZs4cBAwYwZ86ciEFbhBBCCCGEEKI9a9Vg7+STT6axaf7efffdqPusXLmy0ePefvvt3H777fubPSGEEEIIIYQ4ZB1SffaEEEIIIYQQQsRGgj0hhBBCCCGEaIck2BNCCCGEEEKIdkiCPSGEEEIIIYRohyTYE0IIIYQQQoh2SII9IYQQQgghhGiHJNgTQgghhBBCtCkbli5i62cfsHHZotbOyiGtVefZE0IIIYQQQgiAqlI79moXNZXlfPv6dDzOWr55fTpxKT2JT0rBkmAkMc3S2tk8pEiwJ4QQQgghhGhVVaV2PnxsKW6XB1fNf/C67GiA12Hn878/hynhXPQGHVc+MVgCviaQYE8IIcRhJfDLMYDb7cZZoaN4ZzUGg+8rUX45FkKIg89e7cLj9uJ1bcDr2hSyReF1bcLjXA/0xl7tknt0E0iwJ4QQ4rAR+OXY4/YC4HGux2X7no9/KEBvOhJAfjkWQoh9UEqhlBfl9eL1elEej++v/783ZNnr9dSt93rxut043R6cLjcOpxu7y4XT5aF0dzVux3rctm+jntNlm4fOkIvHqw7ysz20SbAnhBDisBH45RhAeW24bPNAOXDZ5qIzdEbTxeFxe+WXYyFamVIKfP9AKf9f/OtCt0VJG4gFQtOqesf17+z1+oIWr8eD8viDEY8X5fXg9fgCFa/H4w9gQoKXwLbAeo+n7jjK69+37jiBdSpwPFUXFCmlfMGS8qIC51Ce4PmU1+tPHx5QhQVbgYBKhQRcwcf+c4QcJxh4BZ5P6LFU3fFR/r/+1wnl9b943oN6PfjePCcu2zzW7DqW7G5JB//8hygJ9oQQQhx2lFL+QM/pX+ErRJgSzgXA7fTgtLv92xouRCpv3fGC6/2FyIYKl8pfYA3dT9UvxDY1bWhhOGS/sIKyt4FCcrTn2FAhmcbPXf+5h54jmDZ4vEaeY0heoz33sNfXG/rc6xf869JGvE5RgobA9si0Ic8xkBEV2BT+OkV7PYJpvSHPo0lpG3kvVOD5Kd96rxeFr7AOCq/Xg6/AroKF/kABvq4wH77Ot1w/ra+A7yv4e/2vne9c9Y9BMG1oGn+wEDiGf3/f+1O3HEjrexW8dX9V3bKqtxwtTfD8occIvoj11okWoOEb9N//V9Mi1mla+LLCA97yRo7pa865J387kNuiuW9PJNgTQgjR7njcXmyVTmqrnNgqnNgqndgqHZQU1AA02idEb+rNZ8/+2joZF/4Cer3CvqpfOK8LHOoit/pp/AHGvgr7gYAj6vnCgwjV2PlCllXYfhK0HNpCAhKtfvASWB94XG89GipkP0X9v75tCi3suMHtWshx6h9DCzlGve1KCwRPWsTxVCBN6DZNQ9N0aDodmqZDF3isCzzWo9Pr0On06DQdOp0Ovd63Xq/XodcZ0Ol16HU69Ho9Op0Og16HXqf5/us1DDrNv13DoPc9Nug19JrmC/o02F5QSeEv7+N1bSb69ayhM/Yku3PXlnmr2ykJ9oQQQhwSvF7lC94qndRWBgI4fzBX5QvmAo8dNe4GjxNsvhlFoE+IpotrWuZ8ZRVfocm/rPzFMDSFhtefxguaPzDQfMUuUCjNi6aUb5s/TXA5EEQE9/P6ykFaINgBzV8jomm+2h0tGHCEBzR1wYMXLTTACdmuVHhgEr5cV6MTFnCpaLUz9Wp7Aunr1/CEpgseWxxoWkgBPlCo13S+Anz9bXWFfX3dutC/mg7NX6gPBgj6uuPo9PqwfTSdL61OX3fMuuPpUTqdP1zV4UHDozS8gEfT4VHgURpupeFBw63ArTRcClxecHvB5V92KnB6wOn1//conF5w+Nc5PODwKBwesLu92D3gUr7zev3BkO+v5g+KAoFcy9NpYDHqsRj1mA06/389ZqMOi/9vcJ1BhzmQzli3Lmxfox5LaDr/vhZj5Dqj3h9wtbJe2yr55I9ROCp3gnJEJtBMGONG0S8n+eBn7hAmwZ4QQohWo7wKh81NTaUjPIgL1MYFa+Yc2Ktddc3fQo+hFOAB5QLlQuEE5ULT3JisCqPZi9HswWD04Hba2bv5l+gFCQDlwFHxLum5ndAbtCiDC4QPNBDaX8YT7F9T169GHHjBQCE02AgEE7q6Woho67WQgCMYbOgjgw8tZFvdOeq21T+/TrePY+r1YccIy3f9/DRwjvr50dULxMLOUT/Y0nSNFuaVUrg8Crvbg8PlxeH24HB7sbt8f6Ouc3uxBbfXrXP4j1F3rJB9a6Mfr9XG29CFLxr1GtZ6gZMpJGCKNRCzNBaINRCcGfS66Hk8jOh1GpouDmPcKFw1X0VsN8aNQtPFode1fmB6KJFgTwghxAGllMJp9/gDNwc1FXXNKWsq7FSXVWOrqMFWWY29yobX4/QHaG6UckYEbSgnSrkhEMTp3GiaL43X60R5nP6aokiOyuY8AzslOzfvz0sQk5YNWhoOEg5G0BKWz4MYtBzKlFJ1AZM/eLK7PdhdIescdUGSw+WOCM6CwVi0dSGBWMQ6tzfqDymtwWSoHzjVBVZhtVOG8OApbF2gZitsXePBmcmgkyCilVkSjOgNOpQ6Ep1xfUhzTl/zTb2pN3qDDkuCsbWzekiRYE8IIUQEpRRupwOX3Y7TbsflsFNbVUNVSRW2impqyn3BWm21DUe1DYetFqe9FpfdjtvpQHmdKH+gBq6Qx54WzbfBaMJosWC0WDFZLBjNlrBlt0vHxuW/gipv4Agamj6Lk6++kpSshEaDlkZrhA7joOVQ5vWq8JqoRmu2GgicGgimwmu7IgMxp7vt1ATHFEyFrosWiDUpOPOlN+l16CTgOmwlplm48onB2Ktd1FQeyedP3YvHWYvebOGCB+4jPilF5kFtBgn2hBDiEOdxu/1BmS/YctlrcTn8QZq91v/X/9gReOxbdtTW4qix4aj17+vwBWsel4OWHPBB03QYzBZMFgsmqxWT1eoLyswhgZrFgsliDa4zWsy+ZYsFk9kaDOKC680WdHp9o+etKrVTsGk+ttK3G+wTYk25gCPyhkiBopV4vKrFAqpgjZnLgzNKs0OXp21Ub2kaWJodOIX252p6cGbSyw8RovUkpllITLOQSSJn3Hgbc9+czhkTb6Nbfxl9s7kk2BNCiINEeb24grVltVECNEfYsrPR9XVBncfd8GAkB4YRNCOaZkTTmdAbzOiNZl8QZrVitlowx8dhTYjDmhhPXHI88SkJWOLj6gK2kL9GixW9wdAqBcrENAtX/eU0/v1JLXvnvxuxPeu0yznvotMO60BPKYXbX8NVP0ja57p9BGKOGAIxdxuZMNmg0xod6MK8P80L6x+v3jqDrm0MmCHEwebavRt3aSkAXZJS6ZN3CrmJqdSuWQOAIT0dY3Z2a2bxkCPBnhCHgA1LF7H1sw/YmJ5M3+Ent3Z22j2lFB6Xqy7A8teGRQRc+1gfWpPmtNfidjQwKMiBounRNCMKIxom0Axomgk0I2Cse+wP3MDkC+D0Jiz+YM2SFEd8cgLxKQkkpCWQmJZIfLKFuCQTcUkmjBb9IV8IXbSrjEc3Wzgzrjs9bNvQ+caxZEtcN17ebCVjVxlnpnVs1TwqpXB6vHW1VTHWYDn2IxALPV4bibcw6XVhgZM5lsCpuTViIetMehkwQ4iDzet0svXiS/CUlATXdQXy//FScFmfkUGv7+ajM5laIYeHJgn2hGjjbBXlfPf2q3jstXz31qt0O3oAcckprZ2tNsPr8fibLNaGNE+043TUrznzPw4GX/6asdA0IYFZi46kqGn+ZopWDCYLBqMJnd6MpjOCZkIpA8prxOvR43HrcTn1uB0aCl+AFgzWNJM/aAsEcPrQU2BJ9AVo8UkmrP5gLfy/mbhkE+a41qllaw0er2LKf/5AaRo/ZJxEbn4BJq8Tp87IDxknATDlP39wet9sdBoR/bUcwQEzwkcatLsia7D2ua6B4wUCsbYiomlg2CiCdQFV2Dp/8GSpH6BFW9dAcGY2SP8tIQ4nmtGIsWNHPKWlRB0xSNMwZmejGWWAlqaQYE+INkwpxdw3puOy1wLgtNcy781XOPe+h1o5Z02nlMLtcETpS1YXaEVb7/Q3Ywxf9qV12+24Xc4WzbfBZA72JQv0I6vrU2bFaDaHLZssFnR6M16vHo/bgMetx+3U4XTocNRqOG0atdVeaitdvvngnF4cMTwFnf9HTEu8MXrglhwexFkSjFJQDqGUorTGyezVe3Dt3kNPZzUAa5M6clT1VtYldCSnqhQopaI2gd6PzG4zzQk1jdiDqbAh3hsPzsz1jmeJUnsmA2YIIQ4GpRRe5SV1wiXsvm91Q4nIvOHyw+bHyQNFgj0h2rD1Sxaw6eclwWXl9bJx+WLWL1lA7yEjWuy8HrcrJOByhDRPrBeg2e3+ZoqRNWThAZtvXUuO7a3pdP5BPqyYgiMwhg/w0ViAFjk4iG/gD53OV1vmcXn9E3cH5oFzBKcTsFU6Kd1b99jl8OCb7Dq2QNRk0ROXbMaaaAzWtsUl1g/gTFgTTegN0rQsGqUUJTVO8stqyS+z1fvre2x3eTF63Lz34zRSHdVh+1/AVuA7AErNiVx7xsOgr/uKDEx43FBNVLRALFqzw1gDsdB1bWXCY3F4UUqh8BXAwx6jggXzWLYrpfDiTxPyONq6Ro9R/3zKP++l8qI8Xrwet69FRsh8mHg8eJUH5fGilAc8CuVx+44RkpbAY48HQrYpr29flPI9Dq6vS0PYYxXcX3m9aIG0yovmxZ/OE0yHV/nSKRW2P17f89M8Xt84WV5fHvB60bzK/9iXVvMGHqu6bf7zETw2vnUKNK/vmIG0mn+/QDrNvw4FumAa/GkISU9YOt9yYH/f4/D1vm26kGVdMJ3/byPXo1dTxKW6iF8yAc688OB8CNoJCfaEaKNsFeXMe2M6oBE+KqLG3DdeJrfv0VgTk6LXiDkcYcvBAT0c0WrOIvfxelp2wI/AcPihA3ZEGyY/PFiLsj4kQGvOgB9ej5faapcvSKtyUrXHNy9cbaUNm3+S78B/h61pr4nBqAsGa9ZEE3HJ5ijNKH3NK42mxkeQFL6CZ3G1MyKAC/wtKK/F7mq86aOmQWKihUJrKsmOGnRRRhv1olFkTeGFK09gSK+MYJ+wttB/q37hN1Dw9frnGPQqb4MF6GiFb6/yFfoCj4PHjVb4buh8UfLTUKHdS9359lnYb0pwEUug4fXi9XpDCuIe8NQVxAkt+HvqCuwobzBdeCHeV/gPFLpVoAAfKPQH1vsL7GGF/WAB3Zd3vApNeYPn1YIFef+2kAAguM3rK7gHA4BgYTyk4B9SKA/uG1ZwD9/mSx9eYNeFFMijFc41AutUXYG9Xvqo+6vY0oYu60O3eRsPDET7o1MaRSe46H7RG62dlUOOBHtCtDHK66WyuIivX3oWR62NyOHvFY6aGl696eoWrSkD0BuNwZqwuhEVA7VjlojlsFEX/bVn9UdjNJhMaLqW+5pWXoXdVhfABWrbbJXO4CTfweVqV5NmF9DptYhALdj3rV6TSqP50B/I5GBSSlFU7YgI5ApCHu+rH5umQXaShc6pVjqnxtEpxUJWio7keCfxVgd6o41KZwWfVXbjz//dGfUYOhSfnuKB/AeZubOuYK48oQV7fxAQ/CXeX8hXXjRPYLuvoK3CfnkPT6+FFeZ9aXX+X+MDhfXQ7Qe0EB1SqNf5C+3BQvQBPE+TAgNC89XMc0VLK4HBYc+rgdI0lAZKp4EGXv9f3/rQbRpK51uuexxY71/nX0/INnQaSqfz7afT+dZpGkrv367p6tLrtLo0wb++x0qnofnT+v7r67ZrOl96nQ4t5Biarm49Og1Npw+eT9Pr/Muafz8d6PRoeNG8TvA4Q/460Nx28DjQvA50bjt4atHc/v+uWsDjO5TvpQCUL2ua78s08Nj/8qFD+V8KhWaMQzMnorMkgiUJnSUJXVwyWJPRWVPQxaWiWVK4a91bXPbuHroW+oJ8jwZbs+DDk4/lX0dfgnyzNo0Ee0K0ktqqSkp3FVC2O+T/rgLK9+yOrR9aSKCnabrGA7F6NWHR1pssVgwhQZ3RbEFvaBu3CKUUTrsHW0V4bVt4EBdoWunC24S+VpoG1kRf4BZfP4gLNKc8DAcyOdC8XkVxtYOdoYFceV1gV7CvYE4pLNjpFFdLp7haMky1JBtqSKAGs6cGg7sazV6Nq6YKT1ENHpsNZa+l1OGhxgXm4H/FJU5w6sHoIazQELhqHvp8F3y+qyVfDtGGBQvy/kAgUIgPFuiDBf9AAdxfSI8oxIdsCxbU69bVFczrFfr1OtAChXL/fvXWaZoO9PrgYy0YAET5q+nQ9Pqwdb7/det0Or1vmz9d8L+m9wULen3dY82/r0GPTtP7t/nS6PT6yABE06H58x98viF5DF+vDwliQgKaaOv1+ujn0fnnCQw9T3vmdkJtGdSWgq207nFtmX858LgsfJvbvu9jG/z/zfXXW8GaCnFpvr9hj9Mil+PSwJIChn2PoLmoYBGrNhSjTtbx8Ezfd4JewcyROtZUbWPxrsUM6zSsqa/SYa1tlOSEaKdcDjvle3b7g7ldlO7KDz62V1c1uJ9Or0dvNAUHZqlP0+noevQAzrr9PowW32iOh2IQ4nJ4QoI2R11tXKWvRi60T5yniaMTWuKNxCX7m1CGBm7J4bVxMpDJgeH1KgorbBTsKWX33nIKC8spKqqgrKSCirJKqiqqMTjsWDxOzB4XFrcdi9fGUV4bx3ttWDx2LB4H8cpJnMeFxePG5PL/d3oxuXw1UC2pOVdB1EJ8sMAe7Zd3LUoBN7yAqun0wXTBwrrOV+DXtPqF+UAhOKSQrtcH96lL568hCAYXITUAoQGELrRg3vB6LSQI0SKeT5TzBPNU7/k3VGCPKTAIX9/kwMC/PjQwQJP+kaKVeD1QW14vUGssiPMHb87qfR66QTpDveAs8Dg1PFCrH8QZrQfsaYdSSvHSypfQ0Pitu8amjtBrN2zqCL9119DQeGnlSwzNGSqf0yaQYE+I/eT1eqgsKgrWzoXW1lUVFzW6b2JGJqkdO5HasRNpHXNIzelMasdOJGVmYq+q4u27b8Jhq9+UU8NktXLWbfcSl5Tcos+tOYIDmQSbUTrCa99C/vsGMoldYCCTun5w0aYTkIFMGqKUQrlcKJsNb21t8L8KPLbV4q21+ZZtge2+ZY+tltrKauxV1TiqbbhrfMfQHHb0DjtGlwOz100c0NP/v6W4DOAy6XCbDHgsRpTFjGYxo7Na0cfFY4hLwByfhDkxCWtCKqb4RHRxceisceisVtbZtvLs6pe44RsvnUp9Tf48GuzMhL+O0/H0yc8yqNNgCQyEEE2nFNgrQgK1skZq20KCOHvFfpxUi17DFlrzFm2bKSHQFrNNcHld7KnZg0KBpvGvkTomzPXyr5G++61CsadmDy6vC5Ne5tmLlQR7QsRAKUVtZQWl/qaWdU0vd1G+Zxced8ODd1jiE0jN8Qd0OZ1J7ZhDasdOpGR3xGi2NLifx2Nh0AXXs+DDf9TPDXkXXI/H0/C+B1r9gUx8tW3Rg7j9GcgkLsncwHxwvv+Gw2AgE+X1ouz2umDMZoshGAtJX2tD2WobXMbTtAC7Pj0Qt480XsBpBLsRHCZwBB4bNRxG/7J/PRYLujgrems8hvgEzPGJmBOSiUtIJS4xlcSkTBKSM0hO7kBKShaJiRnojc3/kldK8fxXl7Ouq57/G0VYM6EPT9FRmajnH9ve41/9zpRATojDmVLgrImtWWRYzVs5qP24z5qT6gVnDTSLDA3iLCm+H6AOcSa9iY/O+YhSeykAbrebRUcv4sHhwzD4u5WkWdIk0GsiCfaECOGy2ynbE97cMtCXzmGraXA/vdFIarYviAsEdr7/Oc2qfasqtfPhY0txu/TojL3wujbjq93T0Bl7svwrAyu+WcqVTwwmMa15QV/YQCYRtW6OsCBufwcyqesH1z4GMlEuV/RgrNbeYM1Y2HJDwZjdjqqN3nT3QPPodTiMOhwGHbVGsBsVDqPCYfL4AjSDL1Cz+4Mzh1GLErz51/vX6ePisCakkJiQToollVRLKinmlODfdHMqKZYUUv1/k0xJGHQH92so9JfjaM2EkF+OhWh/3I6Ga9TqN4sM3ebZj3lcjXGxN4sMLqeA/vCeMDw7Ppvs+GwAXC4XWw1bOSrtKIwykXqzSbAn2oQNSxex9bMP2JieTN/hJ7foubweDxWFe+oCuZCml9WlJQ3vqGkkZXQgtWNOWA1dWk5nEtMzDmgncHu1C4/bi6ZpGONG4ajcCcoBmglj3CgAPG4v9mpXWLCnlMJZ6w4P3KL2g3Ngq3KhmjGQSd2gJaa6PnHJ/kDO/7i1BzJRSqEcDl8TxdAmi400U4y9pqwWXK6D8jw0qxWdxYLOakWLs6JZrXjNRtwmPU6zzh+AKWwGLzV6N2U4KcVOmWanQqulSm/DZnRH1KY5jODRB96f+n0hfbWnOoxY9ckkGpNJs6TSIT6N7IR00qypwWAt1RwezB0KwVH9X449mb9S8/dX6Hb/rcwcfDwgvxwL0WZ53HVB2b6aRYbWvLlszT+nzthADVtDtW3+v8aD1/pGiMZIsCdana2inO/efhWPvZbv3nqVbkcPIC45Zb+OqZSiprwsrLmlr7ZuFxV7d/smTm2ANTEprIYuzf84JasjBtPBKQB6Q4IJTReHMW4ULtv3GONORdPVNaL7+b9bUGhhzSmbO5BJw/3gWmYgE+XxNN5MMWp/sn03Uwzs09LTUgCg16OzWoPBWKBPWOSyxRe4BZbjrGCxYDcqqg1uqvVuKjUHFTo7ZZqNUmwUe6sod1VQ5iij3F5OmaOUKmfDg/o0TEMpHcoTD554TFoC8VoyyYYUMqypZCWkk5ucSffUDnRP7UC6NY0USwpWQ8t0wG8Lwn45PuMIvnYnMuaMMfLLsRAHi9cLjoqGa9SiBnHlvn2aS9M1MlpkasPbTPFtql+bEE3V6sHe9OnTeeaZZ9izZw/HHnssL730EoMGDYqa1uVyMXXqVN577z0KCgro3bs3Tz31FGeeeWYwzeTJk5kyZUrYfr1792bdunUt+jxE8yilmPvG9OCok057LfPefIVz73sopv0dNhvle3b5+9Llh9XWORtpDmcwmYM1c4Hmlmk5nUnpmIM1IfGAPLfmslU62bsjfHQtvak3elPviLRb/xe9JjJ0IJPw+eDCgzhrkhF9A5NFK6VQTqcvGKuuxFVsx2urRdXaIoOvfQVjITVlgZo25dyP5jFNoJnNdcGXxRo9GPPXmkVdjvOnt1iDj337x6EZjWia5vtxwVUTEpiVUe4op8xeRpk98HiP768/TUVpRXBy6qZQSkN5rChPvP9/HMrte6xT8aSYU8iMSyMnIYMuKZn0SO9Aj7QMctPiyEqyoJeRR4UQB4pSvtEgY20WGXhsL/fNO9lcluQowdk+gjhzUrvo1yZEU7VqsDdz5kzuvfdeZsyYQV5eHtOmTWP06NGsX7+eDh06RKR/5JFH+OCDD3jjjTfo06cP33zzDRdccAGLFy/muOOOC6br168f8+bNCy4b2shcYSLS+iUL2PTzkuCy8nrZuHwx65csoPeQEQB43C4qCvdGjHRZtnsXNWWlDR5b03Qkd8gKD+r8tXWJaemtPveOUoqqEjvFO6sp2llF8c4qinZWU1PuiPkYfYd3JCPbjNWsMBs9WHRuLDoHOpev75jXVlIXjG2vxWuvDY6sWFFbS1mtP3hroKYM7358GcdK04LBUyCQajwY8zdrrB+MWa3+ERcDy760mr7pg7rUumvrgjZ7OWWOvb5AraKM8sLyugAuJLhze5s2ME2ATlnBE4/LZfUHbXFRAznliUOvEshJSiM3NYHO6VY6pVjpnOabQLxzqpUOiRLMCSGayVUbe7PI0G3e/WjWboyPvVlkIKCzJINeynVCxKpVPy3PP/88EydOZMKECQDMmDGDr776irfffpsHH3wwIv3777/Pww8/zJgxYwC45ZZbmDdvHs899xwffPBBMJ3BYCA7O/vgPAnRbLaKcua9MR3f7FbhTe5mv/w8v8//hoqivVQU7kU1EnTEJafUTV8QMjhKclY2hjbSLMvrVZTvtVG0oy6oK95Z1eDIlQmpZqrL9h30xU+7C0P1TlyAC9iP2XYapRmNkcFYyOOYasZCly2W4PE0s7lF+/e5PK6IwKx+7Vvo33JHObXu5g2SYtZbiDckY9YS0al4PO54nA4LNbUWqmwmPK6QYM4dj/JYCb0Nm/Q6OqX6g7jUwP+44N8OiWaZE1AI0TiPq2nztAUeN/O+B4DeHDnQSCwjSRrqz9YthDjQWi3YczqdrFixgkmTJgXX6XQ6Ro0axZIlS6Lu43A4sFjCO7xarVYWLlwYtm7jxo3k5ORgsVgYMmQIU6dOpUuXLg3mxeFw4HDUFawrKysBX7NR10EaiKEhgfMfzHysXfQjWz/7gHUpCfQZetIBP77b6aB4x3a+e2dGlDnkfDxuF9t/XxVcNpotpGTnkNIxh9SOOaRk55Ca7ftrjo+Peh7FwX3dAjwuL6W7ayjeWU1Jfg3F+dWU7qrB7YwMWDWdRmrHONLSdSSrMhLKtmDZspKyJUUs73N7k86rhdV41f8bF7He1zTRElKL1tC+VrQWqB1XgAegkWkr6vN4PVQ6K4NBWTCIC1mu/7/a1bwQ2KAz+AYf8Q9CkmxKwagloHkScLms2O0WqmvNlFWZKCo3UFihp8proriRYxr1Gp1TAsGchU4pdYFdpxQLmQmNB3Mej3t/Z04Q9bTGPVaImHg9vrnX7GVogaDMXo5WWxeoaf6h/gN/qS1F249JtpWmDwZiKhC0WdNQ/r++9f7tlpAgzmBter8235d0s/Mq2r+2dH9uC3loLk2pgzGKQaRdu3bRqVMnFi9ezJAhQ4LrH3jgAX788UeWLVsWsc8VV1zBb7/9xhdffEHPnj2ZP38+5513Hh6PJxiszZ49m+rqanr37s3u3buZMmUKBQUFrF69msTE6H2xovXzA/jnP/9JXNy+ZpRqX9z2Wnb8ZxZelxOd0USXseMwWJo/UIPbXouzrASH/7+zvARnZUXMg2dk5p1EfMfO6K1xbXJ4fq8LXFV6nJU6XJV6XJU6XNU6UJF51fQKY6IXk6WWeGchSeVbSSlYhzV/O4aa8GkdqhJy+fmEyNrt+rKPK8KYpkMZDIdcXwSlFHZlx6Zs2JSNGlWDzRvyWNmweUMeKxu1qtY32WoTaWjEaXHB//G6+LrHWjxxujgsKg6PJx6HMx6bM45Ku4Uyh0apQ6PEARVOUDR+DRo0RZoZ0sz+v5bw5UQjSMWcEIcZpTB4azG5azB5qjC6azC5qzF5qn2PPdXBZZO7GqOnxv/XhtaM+x347lUufRxOQwIufTxOQwJOfULwr8sQ71+Ox2VIwKlPxGmIx61rRtAmxGHAZrNxxRVXUFFRQVJSUmtnp0kOqUbPL774IhMnTqRPnz5omkbPnj2ZMGECb7/9djDNWWedFXx8zDHHkJeXR9euXZk1axbXX3991ONOmjSJe++9N7hcWVlJbm4uZ5xxRqu/oS6Xi7lz53L66ae3+EhxSim+fvEplMdX06I8bvQ7NjHm7j/vc1+v10PF3j0Ubd9G8fatFO3YSvH2rdSUl0VNb05IRKfTUVtVGTXw03Q6ehw/iLPvuGf/ntQBVFvlpDg/UGNXTXF+NZVF9qhpzXEGMjonkJquJ9lbQnzxRoybV+FctAZPUVHkDgYD5iN6Ye7bD3O/fqR06c2vH1XgcTf8Ra83aJx6/hgSmjnP3oGklMLusdfVstkbrmkL1MZVOCpwq+b1c0s0JpJiTqn7b0kJq4UL/A38TzQl4vbA7ko7BWW1FJTXkl9mp6C8li1ltRSU29lbaWdfM1GYDDo6p/hr5FKt/lq6uuWMeJM0szzEHMx7rDjEKeVr6uivZdPsgdq1ur5smr92LVjbZi/3pWlmn14AZUqIqG1T1jSw+OZv8z1Ogbg0lCUl2K9N0+kxA9JQUhyq2tL9OdDq71DUasFeRkYGer2evXv3hq3fu3dvg/3tMjMz+eKLL7Db7ZSUlJCTk8ODDz5Ijx49GjxPSkoKRx55JJs2bWowjdlsxmyOvB0ajcZWv7gCDkZe1i3+ic2/1NWoKq+Xzb8sZcsvS4ODpQC4HHaKd2yncNsWirZvoXDbFop3bMfliBL4aBqp2Tlkdu1Oh249yOzWnQ5dexCfmkZtZQVv331TlKacGiarlTNuvL1VXv/6A6cU7ayieEcVNRXRR49MSDWTkZtIWoaBZE8x8UUb0W1Yhf0/a3Dv3g2A2/8fAJ0Oc69eWPr3x9K/H9b+/TH37o2u3jV4ZV879moXSik23XsHhu27cXftSK/nX0LTNCwJxmZPqL4vTo+zbjTJaH3dovR5c3hiH1gmlNVgJc2SFgza6s/dFvzrn9st2ZyMURd5XTjcHnaX28kvqyW/yMZv5bXkl1WTX1ZIflkteyrt+6xQNht0Yf3kOoX1mbOSES995tqrtnS/FweB29nAICT1+7bV6+fWzPscAAZLZJ+1RkeS9AVxmqFuyh+5+4jDUVu4P7f2+fdHqwV7JpOJgQMHMn/+fM4//3wAvF4v8+fP5/bbG++rZLFY6NSpEy6Xi08//ZRx48Y1mLa6uprNmzdz9dVXH8jstzuNDZbyzYwXKdy+1Vdzt20LZbt3oaIMmWwwmsjo2o0OXXuQ2a0HHbp1J6NLN0wNNAONS05h1MTb+OrFp+ttUZw+8fb9nmsvFl6vonyPLWQ0zCqKd1ZHHzhFg5QOcWTkJpCeaSTZXYR173pY/zv2z9bgys8HIGzqVk3D1KMH1v79sPTr7wvwjuqDzrrvprGJaRYS0ywopXhhaBGn7tnJd0MN/K1LYpOatLq9biocFeGDkewjgKtx1ez7wFEYdUZSLQ1Pul3/b4o5BYshtoDV4fawq9zO2vxyCspqfUFdmc3/t5a9VfsO5ixGHZ1T40IGQIkLGwglI8HUJpsLCyEa4HH7+rU1OAhJAwOSNPMeB4DO0MCQ/6lRBiEJSWdsv3NXCiHarlZtxnnvvfcyfvx4TjjhBAYNGsS0adOoqakJjs55zTXX0KlTJ6ZOnQrAsmXLKCgoYMCAARQUFDB58mS8Xi8PPPBA8Jj3338/Y8eOpWvXruzatYvHH38cvV7P5Zdf3irP8VAQmOvOaa8l2mApLrud5Z/PClsXl5zir6nrQYeu3cns2oPUjjnomjjMfe8hI1i/eAGbVyxDeb1oOh29ThgcVpN4oLhdHkp31fhHxPTV2pXkV+N2RQauOr1GWk48GbmJpHcwkuQsIm7vejxrf6f249W4tu/ADdSf4trUrZsvoOvXD2v/fpiP6os+IfoAMrFavGsx/83YyX9vNAA7OWX7XHqn9Y4YRbLM4Z/TrV6tW6WzeU0P9JqeZHNyeOBWL4CrH9hZDdZmB0t2l4dd5YEmluGBXH6ZjcIqxz6DOatR76+NixzJsnOqlfR4CeaEaJO8XnBU1qtRa2wkycB8bfsxyTZa9CH/w5aj1LaZEqRfmxDikNGqwd6ll15KUVERjz32GHv27GHAgAHMmTOHrKwsAHbs2IEuZNAJu93OI488wpYtW0hISGDMmDG8//77pKSkBNPk5+dz+eWXU1JSQmZmJsOHD2fp0qVkZmYe7Kd3yCjZuT1srruGHDfmXLofO5AO3XoQn5J6QM6taRqnT7yNHWv+h9NWg8liZdQNt+73cZ21borzqyjaUR2c6qBsdw3eKJ2yDGY9GZ0SyMxNID3LTKK7EOuudTj/WI190RqcW7fiUIr6jXeMubnBZpiWfv2x9OuLvoFBgJrD5XHxy95feHjhw2Hr7/vxvmYdL8mUFFnr1kjtW6IpEZ124AZ9CQRz+RG1cr6/hVX7bh5lNeobDOQ6p1pJk2BOiNalFDhrYm8WGdxWDmo/hpo1J8XWLDK0+aQl5ZAb2EoIIZqq1Qdouf322xtstvnDDz+ELY8cOZI//vij0eN99NFHByprh4303K70OnFIsHatvkBt26njbzyg560q9fVJAz0nnjeBJZ++xYnnT6CmQk9NRVXMfdJslc66Zpj+4K6iKPp8QZZ4Ixm5CWTmJpKebSbJWYgxfx3OP9ZgX7Aax+bN1Hi91G/gY8jpiDXQDLN/Pyx9+2JIPTABb6g9NXtYWLCQBfkLWLp7KTa3LWo6s95MhjUjeuAWJYBLNidj0LXsx93u8jRYK5dfVktRDMFcnEkftXllZ//ccxLMCXEQueyxN4sMTeeJ3r85Jsa42JtFhs7ppj90+9MIIURLavVgT7S+QO3a1lW/4IkI9nyDpRyI2rZQVaV2PnxsKR534HwmTPG38Mts+GX2zwDoDTqufGJwMOALDJwS6FcX68ApmbkJpHe0kuQsRL99LfY1q7H/sAbHxo2UR5m0zNChQ9jgKZZ+/TCkpx/Q5x/g8rr4rfA3FhQsYEHBAjaWbQzbrtf0eOr92q3TdPRK6cW/zv7XQQ187C5P1EAuEODFGszl1gvkOoU8To0zSjAnxIHmcTcwoXa0IC6k+aQr+o9NMdEZG6hha6i2zf/X2PqjCwshRHsiwZ4AwGm3R63Va6nBUuzVrpBALzqP28u6Jbtx1LopjmHglMzcBDJyE8nIsZLkKkJt/gP76jXY56/GvmEDxVEmxNSnp/uCukCtXb9+GLM6HKinGVVxbXGw9m7JriVUuep6/mloHJN5DCM6jSDRlMjU5VMj9vcqL2tK1rB412KGdRp2wPJV6/RQUG5jZ2ggV1bX7LK4et/BXLxJT25aXfPK+gOhpEgwJ0Tzeb3BofzDa9UaG1WyzNcXrrk0XcM1aqE1b/W3meKlX5sQQrQBEuwJlFJ89/areD0erEnJ2KurWnywlFgt/8/WsOXAwCmZuYnBwC7RWYRn41rsq1dTO3c1trXrqHFG1vbpk5OxHH20rxlmP1+tnSE7u8WDD4/Xw+/Fv/tq7/IXsLZ0bdj2FHMKwzoNY0SnEQzNGUqqJRWlFJd/dTkaWtRJxDU0Xlr5EkNzhsacf5vTXRe8lYfX0BWU2Siu3nfTqwSzIUqfubrHyVYJ5sShRdu1kqEbp6Lt6ghdBx2ckyoFzurYm0UGlu3lEGUk5JhZkqMEZ/sI4sxJ0q9NCCEOYRLsCTYuX8zWVSvQGwycd//DfPb3KQd0sJRovFFq2aJJz4kj58g0MnITyOgUR4KzGNfaNdSunod99moq166lwh45v58uMTF88JT+/TF2yjlogUipvZRFBYtYWLCQRbsWUeEIHzGuX3o/RnQewYhOI+iX3g+9LnwUU5fXxfaKXVEDPQCFYkfFLlxeFya9bw6mGoebgvJaf0AX2WeupGbfwVyi2RAxt1zgcW5qHElWgwRzol3Rfp9FZvVaPKs/bl6w56qNvVlkaEDnje0eGJUxPvZmkYGAzpIMevnKF0KIw43c+Q9zzlob37/7OgAnnncxnXr35dTrbmHum9M59fpbWmyuu7Ki2CamHdSjhPhtP2L/72rK/viDEltkHxJdXByWfv3C+tkZc3PRDuKv0V7lZW3JWn4q+ImF+Qv5vfj3sEAt0ZTIsJxhjOjsq73LsGY0ejy9ZsSbfyc1taUNn1OXxF3/+h8F/onES2MM5jqnRQZygcfJVhnkQBwGyneArQTQ0P3xOQC6NZ9BnzG+USE1QG9quFlkaEDnjvyxKWZ6c+RAI7GMJGkwH4AXQQghxOFAgr3D3OKP/0l1aQnJWdkMOv8SAI4cPIxNpRUckXfg+oMFFO2s4uf/bmXrb8UxpS+e9iKO6p3BZc1qxXLUUXW1dv37Y+rW7aAGdgEVjgqW7FrCgoIFLCxYSKk9PDDrk9aH4Z2GM6LTCI7JPKZJo2Eu31rK3jIr0KnBNDXA7NV7w9YlWQxRpyToJMGcEHWmHR2xSrMVw/vnN+94mr6RZpGNTAdgjJN+bUIIIVqUBHuHsaLtW/l19pcAnHbdLRhNLfdrcUlBNT//dyubVxY1aT/zkUeQ2mdEsNbO3KMHmqF1LlulFOvL1gcHV1lVtApvSP+ZeGM8QzoOYUTnEQzLGUZWfFaTjl9uc7JkcwkLNxXzzZo9Me1z4XGdOLN/dnBUSwnmhKhHKSjdAjuWwI6lsHNZ2OaooVZ8JqR0aaRvW0p4bZs5SYI2IYQQbZIEe4cp5fUy983pKK+XI/OG0X3AwBY5T+muGn7+aiubVhT6VmhwxAlZ9Dwukzmvr97n/jl//zuZXQ7cROVNVe2sZunupb7au/yFFNYWhm3vldIrWHt3XIfjMDZhrieH28OKbWUs3FTMok3F/K+gAhW9i16DLjkhlyE9W2ZaCCEOSW4n7P7NF9ztXOYL8GxRWhKkdPE156zvxh8hZ0CLZ1MIIYQ4GCTYO0z9/v1cdm9Yh9Fi5eRrJx7w45ftqeHnr7ax8Ze9BLqu9Ty+Ayee0430nASqSu3o9RoeT8PRjd6gw5JwcGuqlFJsLt8cnPdu5d6VuFXddA9Wg5W87DxGdB7B8E7DyUnIifnYXq9i7Z5KFm4sZuGmYn7eVordFT6y3hEdEhjWK4OhPdJ59MvVFFY6og7RogHZyRYGdU9r5jMVop2wlcLO5bBzKexYBrt+jexHpzdBzvHQJQ9yB0NuHlTshNdHooJj3vr+CiGEEO2JBHuHIVtlBQs+fAeAYeOuJDGt8cFCmqK80MYvX29jw7I9wVqqHsdlcuLZ3cnonBBMF6d3MHzn69h2lWDI6oB7b12NWdajjxB33HFYEozBCdVbks1lY/me5SzI9wV4u2t2h23vltTNV3vXeQQDswZi1sfe3DW/zMaiTcUs2FjM4s0lEYOoZCaaGdErg2H+/9nJdc/Xi+KWD35Fg7AiaKCx2ONj+6LXSdMxcRhRCsq2+mrrAk0yi9ZFprOmQRd/UNdlMHQcEDlZt9sOCR1QiZ34zXAsx7h/Q6sq8DXhFEIIIdoJCfYOQz998A72mmoyu3bnuDPHHpBjVhTV8svsbaxfugfl9YUm3Y7JYNA53SOaYXqdTvLvuBP9hlWkZmXR9c1nyL/9Dhxr1mDu148u545o0eH9lVJsr9wenPful72/4AoZBt2sN3Ni9onB5pldkrrEfOwKm4slW4r9TTNL2FpcE7Y9zqRncI90hvXKYMQRGRzRIaHB53pm/468etXxTPnPH+yuqKupyE628PjYvpzZv2MTn7kQhxiPC3b/z98k019zV1MYmS69l6/GLlBzl3HEvvvQJXeCu1fj8Wpsnz2bfmc9g06nZKRLIYQQ7YoEe4eZ/LWrWfPjPNA0Rt1wGzq9ft87NaKypJYVs7ezbvFuvP4gr2v/dAaN7U6HrkkR6ZVS7H7kEWzLl6OLjyf3tRmYOnYk/a672PrII+TcdVeLBHp2t52f9/zsG1ylYAE7q3aGbe+U0IkRnUYwovMITsw+EavBGtNxHW4Pv24vZ+GmIhZuKuH3/HK8IdVwep3GgNwUhvXKYHivDAbkpmAyxD5y6Jn9O3J632yWbCrk2wXLOGNEHkN6dZAaPdE+1ZZD/s/+wVSWQcEKcNeGp9EZIee48CaZCc2sjTOYITDnp6aBwbRf2RdCCCHaGgn2DiMet5t5b74CwDGnjibnyD7NPlZ1mZ0Vs7fzx6JdeP397nL7pjHonO5k90hucL+if/yDyi//A3o9naZNw9LHl4e4IYPZft+99BsyuNl5qm9n1c7gyJnL9yzH4amb28+gM3BC1gnBAK9bUreYgkyvV7FuT5WvaeamYpZvLYnod9czM54RR2QyrFcGeT3SSLLsX79DvU4jr3saJWsVed3TJNAT7YNSUL7dF9QFBlMpXAv1+81ZUsKbZOYcB8bYfowRQgghDncS7B1GVnz1BSX5O7AmJTP8ivFh26pK7dirfb9wu91unBU6indWY/BPcxDoP1dT7mDFnO2sWViA1+0rlHXuk8qgc7rTsVdKo+cv//RTSl6dAUDHKZNJGDH8gD4/p8fJir0rgs0zt1VuC9ueFZfFiM4jGNFpBHkd84g3xsd03ILyWhb5B1VZvLmY4urwfncZCWaG9/I1zRx+RAYdk6UgKkQEjwv2/O7va+dvklkdZYqRtB71mmQeCa0wj6YQQgjRHkiwd5ioLCpkyaf/AmDkVddhTajrR1dVaufDx5bicYfWUMXz2eKVwSW9QePIQdls+HkvHn9NVs4RKQwa251OR6bu8/zVCxex+7HHAUi/+SZSLr74ADwr2FOzJxjcLd29lNqQJl96Tc9xHY4LBni9UnrFVHtXUeti6ZYSFm70TYmwJUq/u7zuacHgrndWYov2MRTikGSv8DfJ9NfcFawAly08jc7gGzwltOYuoUOrZFcIIYRojyTYO0x89+5ruB0OOh/Vn74nnRq2zV7tqhfoRfK4FWsX+0ap7Ngz2Rfk9U6NKcixr1tHwV13gcdD0tixZN51V7Ofh8vrYlXhqmCAt6l8U9j2DGtGsGnm4I6DSTTte44+p9vLrzvKgqNm/q9evzudBsfmpgRHzTyuS2qT+t0J0e4p5ZvKYMcyf63dUti7hsgmmcm+oC7YJPN4MMW1SpaFEEKIw4EEe4eBTb8sY/Mvy9Dp9Yy64dZm10Kl5cQz7OJe5B6VFvMxXHv2sPOmm/HW1BA3aBAd//qXqPsu27OMFytfJH1POsNzw5t3FtmKggOrLNm1hGpXdXCbTtNxTMYxwdq73mm90WmNB2JK1fW7W7ipmGVbSql1ecLS9MiMZ7g/uBvcI51k68Gd70+INs3jhr2r/ZOW+wdTqdoVmS61W3iTzMw+0iRTCCGEOIgk2GvnXHY7373j6yd3wjkXkN459mkE6jtt/FFRR9hsiKe6mp033Yx7715MPXvS+aV/oDNFjnanlOKlVS9R5C3ipVUvkZeTx+qS1SzIX8DCgoWsLV0blj7VnBqc925ozlCSzQ0PCBOwu6KWBf5mmYs2lVBc7QjbnpFgCs51N6xXBp1SpN+dEEGOqsgmmc7q8DSaHjoeG94kMzG7dfIrhBBCCECCvXZvyWcfUVVcRFJmBwZfdNl+HaspNYLK5aLg7ntwrF+PPiOD3NdeQ58cPShbvGsxf5T+AcAfpX8w/KPh2Nx1fXs0NPpn9GdEpxEM7zScfhn99ll7V2l3sXRzSXDUzC1F4f3uLEYded3TGR7S704no1wK4VORXzdp+Y4lviaZql5Tb3MS5A6qq7nrNBBMsQ16JIQQQoiDQ4K9dqx453ZW/PdzAE6dcBNGs+WgnFcpxZ4nnqBm4UI0q5XcV1/F1LlTg2mfWv5U2Dqb20aiMTGs9i7dmt7oOZ1uLyv9/e4Wbirmt/wKPCEd73QaHNM5Jdg08/iuKZgN+zfHoBDtgtfjC+Z2LvMFeDuWQmV+ZLrkLr7aukCTzA5HgU4+Q0IIIURbJsFeO6WUYt6br+D1eOh5wmB6Dsw7aOcuee11yj/+BHQ6Oj33HNaj+zeY9svNX7K1cmvE+r+f9HdO6nxSg/sppdiwt5oFG4tYtKmYZVtLsTnD+911z4hnWK90hvfKZEiPdJLjpN+dEDiqoeCXusFUdv4MzqrwNJoeso8Ob5KZlNM6+RVCCCFEs0mw106t+XE+BevWYDCbOXXCjQftvBX/+S9F06YBkPXwQySeekqDaWucNUxZ/ETkBqUxdcmLjLh4RFjT0T0VdhZuKmbhxiIWRul3lxbv63cXmPOuc6qM8icElbvCm2TuWQ0q/IcRTImQe2JIk8wTwJzQOvkVQgghxAEjwV47VFtVyU8fvA3A0IuvICmj8XmrLAlG9AZdo9Mv6A06LAmN14zVLF/O7oceAiBtwgTSrryywbRKKS7/zw24lDNyo6bIt23gmZ++5LjMwcGmmZsKwweEsBh1DOqeHgzujspOkn534vDm9UDh2rpJy3cshYodkemSOvubZPpr7rL6SZNMIYQQoh2SYK8dWvCv96itqiQjtyvHjzlvn+kT0yyMe+gEZv3tZzxuxclXHckfW1YyfPhwDAbfJWJJMJKY1nCfP8fmzeTffgfK5SJx9Gg6/On+Rs8547fX2Fq9GqUg2rgvSmm8u3YGr8zWA74EmgbHdEoOTmZ+fJdULEYpoIrDmLPGNzJmsEnmcnBUhqfRdL5grsuQuiaZyZ1bJ79CCCGEOKgk2GtnCtav5ff53wBw2g23ojfE9hbv2VqJx61IzY7jiEEd2FTiJSM3AaNx3/3c3MXF7LzxJryVlVgHDCDnqb+jNTKX1vc7vueV36YD0QM933qFZiynQ5KB04/qxPBeGQzpmU5KXOTUDUIcNqr2hDTJXAp7/gded3gaY3xkk0xL7FOmCCGEEKL9kGCvHfF6PMx/0xdE9Tt5FJ379It533VLdgPQZ0jHJk2x4LXZ2HnzLbgKCjB27ULnV19BZ2m4BnBz+WYmLZwEgLP8eFxlwxpMq9wJ/O3iozlvQPSRPIVo17xeKFpX1yRz51Io2xaZLjGnXpPM/qCXW7sQQgghJNhrV36d/SVFO7ZhSUjkpCsnxLxfeaGN3Zsq0DTonRf7JMjK46Hgvvuxr16NPiWFLq+/jiE1tcH0FY4K7vjuDmpcNRyZPIAVay8CGm+G2SHx4EwXIUSrc9X6m2T6a+52LgN7Rb1Emr9J5uC6mrvk3IaryIUQQghxWJNgr52oKilm8cf/BGDEFdcSlxR9AvNo1i/dA0Bu33TiU8y4XK597qOUYu/fplL9/fdoJhOdX3kFU9euDaZ3e9386cc/sbNqJznxObx4yvOc+vPPOD0qanoNyE62MKh7WszPQ4hDSnVheJPM3b+Bt95nzxjnm6y8yxBfYNf5RLDE/tkWQgghxOFNgr124vv3XsdlryXnyKM4+pTTY95PeVVIE87Ya/VK332Psg8/BE0j5+mniTv+uEbTv7DiBZbsXoLVYOXZkS/w0KdbGw30AB4f2xe9jK4p2gOvF4o3hDfJLN0SmS4hO7xJZvbRoJf5IYUQQgjRPBLstQNbV/7CxmWL0XQ6Rt1wa6ODo9SXv6GM6jIHJquB7sdmxLRP5TffUvj00wB0+NOfSDpzdKPpv9z8Jf/3x/8B8MTQv/CP2TZ+2lCE1ajntlN68uGyHeyusAfTZydbeHxsX87s3zHm5yFEm+Kyw65fw5tk1pbVS6RBh6PCm2SmdJUmmUIIIYQ4YCTYO8S5nA7mv/0qAMePOY/Mrt2btH+gVu+IE7MwxDCNgW3lSnY98AAoReoVV5A24dpG0/9e9DtTFk8B4Majb+K/SzKY+8duTAYdb1xzAsOPyOCWk3uxZFMh3y5Yxhkj8hjSq4PU6IlDS02xP7Dz19ztXgWeenNIGqz+Jpn+mrvOJ4I1pTVyK4QQQojDhAR7h7hln82ionAvCekZDL3kiibt66x1s+XXIiC2JpzO7dvJv/U2lMNBwimnkPXwQ42O3FloK+Su7+/C6XVySudT2LZpGP/93y6Meo0ZVx3P8CN8NYl6nUZe9zRK1iryuqdJoCfaNqWgeGN4k8ySTZHp4jv4auu6DPHV3HU8RppkCiGEEOKgkmDvEFZSsJOfv/wUgFPH34jJYm3S/pt+LcTt8pKaHUdWt8bn4XKXlbHjxhvxlJVh6d+fTs89i6ZvuCbQ4XFwz/f3UFRbRM+UnsRVXs1Hv+5Cp8E/LjuOU/tkNSmvQrQatwN2rQxvkmkriUyX2cc/abl/MJXU7tIkUwghhBCtKvbOXS1k+vTpdOvWDYvFQl5eHsuXL28wrcvl4oknnqBnz55YLBaOPfZY5syZs1/HPFQppZj/1qt4PW66H3cCvQYNafIxYp1bz2u3k3/rbbi278CYk0Puq6+gi4trNG9PLHmC/xX/jyRTEn20O/loWSGaBs+NO5azjpa+eKINs5XC+tkw9zF4azRMzYW3R8O8x2H9175Az2CBLkNh+L1wxSx4YCvctgzO/QcMuBzSekigJ4QQQohW16o1ezNnzuTee+9lxowZ5OXlMW3aNEaPHs369evp0KFDRPpHHnmEDz74gDfeeIM+ffrwzTffcMEFF7B48WKOO+64Zh3zULVu4Q/sXPM/DEYTp113c5MmQofwufWOHNRwE07l9bLrwUnUrlyJLimJ3Ddex5CZ2eixP1j7AV9u/hKdpmNI4t18tLAWgL9dcDQXHNe5SfkUokUp5RsVc8eSupq74g2R6eIyQkbJHAwdjwWD6eDnVwghhBCiCVo12Hv++eeZOHEiEyb4JgCfMWMGX331FW+//TYPPvhgRPr333+fhx9+mDFjxgBwyy23MG/ePJ577jk++OCDZh3zUGSvqeaH998CYPBFl5HcIfYpEwLq5tZLIyHVjGv3btylpQC43W7MBQXY//iDyg//SdWcOWAw0PnllzD37NnocZfsWsKzvzzry1vKtXyy0FcD+PjYvlw+qEuT8ynEAeV2+uaz27Gkbn47W3FkuowjQ5pkDpaaOiGEEEIcklot2HM6naxYsYJJkyYF1+l0OkaNGsWSJUui7uNwOLBYLGHrrFYrCxcubPYxA8d1OBzB5crKSsDXbDSWCcZbUuD8ofn46Z/vYqsoJzWnE8eeeU6T8xg6t16vEzNx1tSw7eJL8JTU9UPqCuT/46Xgss5iwdivX6Pn2lG1g/t/vB+v8nJUwql8s/gIAO4//QiuGtS50X2jPU9RR16fZqotQ8v/GS1/GdrOZWi7V6G57WFJlN6E6ngcKncQqnMeqvOJEJcefhy3+yBmWhxM8tkSQoi2qS3dn9tCHpqr1YK94uJiPB4PWVnhA3VkZWWxbt26qPuMHj2a559/npNOOomePXsyf/58PvvsMzweT7OPCTB16lSmTJkSsf7bb78lrpG+aQfT3LlzAbAXF5I/z9dP0XrUAL75dm6Tj2Uv0VNdFodmUKzf9Qsb9ii6WK2YNQ1NRU50rgBbSgqz585tsHbDoRy8VvUald5KUry5LP/lFEBjdCcvudVr+frrtU16niI6eX0aoRRxzkLSqzeSVrOBtJqNJNkLIpI59AmUJhxBafyRlMQfSUVcN7w6I9iBTV7YtOzg5120OvlsCSFE29QW7s82m621s9Bsh9RonC+++CITJ06kT58+aJpGz549mTBhAm+//fZ+HXfSpEnce++9weXKykpyc3M544wzSEpqfJTKluZyuZg7dy6nn346er2OmY89AEDvYSMZPeGGZh3z+/9bTzGF9MnryIixvtq3mpQUdt98S9T0GtD9kYfpP2xY1O1e5eX+BfdTWFFIgiGNgnVXgzJy/bCu/Hn0kTH1Jwx9nkajDE9fn7w+UXhcaHt+R8tfirZzOVr+crSawohkKq0nqnMe3tw8VO4gdGm9yNA0Mlohy6Ltkc+WEEK0TW3p/hxo9XcoarVgLyMjA71ez969e8PW7927l+zs6H3QMjMz+eKLL7Db7ZSUlJCTk8ODDz5Ijx49mn1MALPZjNlsjlhvNBpb/eLasHQRWz/7gG3pydirqijatgVzfDynXHNDs/LmtLvZ+puvj1LfYZ2Cx0geOZKy/v2x//EHeL11O+h0WPr2JXnkyAaDtpdXvswP+T9g0IwUb74CryuJqwZ34ZFz+jV54Ji28Jq3ZYf161NbDvk/+wdTWQYFK8BdG55GZ4Sc40Lmt8tDi89Aow0MPSzatMP6syWEEG1YW7g/t/b590erBXsmk4mBAwcyf/58zj//fAC8Xi/z58/n9ttvb3Rfi8VCp06dcLlcfPrpp4wbN26/j9kW2SrK+e7tV/HYa5n/5isofxPLEZePJz4ltVnH3PxrIW6nl5SsOLK619VaappG5l13sXPixPAdvF4y77qrwaDt223f8tr/XvPld9cFuGyduXhgZ544t3+TAz0hgpSC8u2+oC4wmErhWnyNikNYU30DqQQGU8k5DoyWqIcUQgghhDjctGozznvvvZfx48dzwgknMGjQIKZNm0ZNTU1wJM1rrrmGTp06MXXqVACWLVtGQUEBAwYMoKCggMmTJ+P1ennggQdiPuahQinF3Dem47L7ai6ctb62wtm9juSY085s9nHXLfGNwtlnSHZEMBY/fBim7t1xbt3qW+Gv1YsfHr355vrS9Tyy6BEA3GUjcJQfzznHdOSpi45Bp5NATzSBxw17/ucfIdNfc1e9JzJdWg/f1AeBaRDSjwCd1NkJIYQQQkTTqsHepZdeSlFREY899hh79uxhwIABzJkzJzjAyo4dO9CFFOTsdjuPPPIIW7ZsISEhgTFjxvD++++TkpIS8zEPFeuXLGDTz5EjiB4xaChaMwu3FUU2dm0sR9Ogd17kxOaappEwciSlgWCvkVq9MnsZd353J7XuWry2I6jdcyan983ihUsHoJdAT+yLvcLfJNMf3BWsAFe9zs86o28+u+D8dnmQ0H7myhRCCCGEaGmtPkDL7bff3mATyx9++CFseeTIkfzxxx/7dcxDga2inHlvTMc3NEp4s7Xl//6Y/iePIi45pcnHXReYW+8o39x60WhWa/CxuV+/qLV6Lq+L+368j101u1CuDGp2Xs6II7J4+YrjMOqllkXUoxRU7PQFdjuX+ua227uGiCaZluTwJpmdjgejNeohhRBCCCHEvrV6sCfCBZpvOu21RBSGAWdtLfPefIVz73uoacf1Ktb7m3D2HtLwYDXuXb6h6t3x8eQ0UKv39PKn+XnPz+A1Y9txNXldO/P61SdgNuiblCfRTnncsHd13aTlO5ZC1a7IdKnd/E0y/cFdRm9pkimEEEIIcQBJsNfGlOzcHrX5ZoDyetm4fDHFO7eTkds15uMWbCynqtSOyaKnx7GZDaZz5vuCvcLzzqXPkMER2z/Z8Akfrf8IlIat4FKOze7NW9eeiNUkgd5hy1FV1yRz51LI/wWc1eFpdAbIPia8SWZiwz86CCGEEEKI/SfBXhuTntuVXicOYfOKZajQKRD8NJ2OXicMblKgB7BuyW4Aep2YhaGRwMyVnw+AOy0tYtuve3/lr0v/CoCj6HT6JA3m3QmDSDDLZXRYqcj31dYFau72rgZV71o1J0PuiXWDqXQ6HkzxrZNfIYQQQojDlJTS2xhN0zh94m3sXPM/HDYb4U05NUxWK6NuuLVJx3Ta3WxeWQTAUUMiB2YJ8DqduAt9k1K7UsOndthTs4e7vr8Ht3LjqjyaroaxvH99HsnWQ3feEREDr8fXvy60SWZlfmS6lC7hTTIz+4BOanuFEEIIIVqTBHttUFxyCqMm3sZXLz5db4vi9Im3N3lwls2/FuF2eCLm1qvPVVAASqFZrXji62phat213DrvDsodpXjsHcl2jOfDmwaTFm9qUj7EIcBRDQW/1DXJ3PkzOKvC02h6yD66rjlml8GQlNM6+RVCCCGEEA2SYK+N6j1kBOsXLwg25ww03+w9ZESTjxVowhltbr1QLn9/PWOnTuBPp5Ri0k+PsrF8HV53PMmVN/LPiSfRIVEmrm4XKneFN8nc8zsoT3gaU2JIk8w86HQCmBNaJ79CCCGEECJmEuy1UYHmnDvW/A+nrQaTpenNNwEqimrZtbEcNOid1/iAGK4CX/O86rQOrCjWSN9ayqqqfzN/5zcopcNadi0zrxtDTooMh39I8nqgcK1/+gN/cFexIzJdcm5djV1uHmT1kyaZQgghhBCHIAn22rC45BROve4W5r45nVOvv6VZc+utX+qr1fPNrdd4bdz6letJBuaUV/KJ50X+9cUAzB3momlgLLuAj665ii7pcc14JqJVOGt8k5UHm2QuB0dleBpNB1n9w5tkJndunfwKIYQQQogDSoK9Nu7IwcPYVFrBEXmRk5vvi/Kq4ETqfRqZWw9gzurd7Pj5D0YAxdkF6M1V6DrMRdMUzrI87jrhGnp1kKZ7rUXbtZKhG6ei7eoIXQdFT1S1p16TzP+B1x2expQAnU+oa5LZ+UQwJ7b8ExBCCCGEEAedBHvt2K6N5VSV7HtuPY9XMeU/f/CgrRSAkswKQIemKTz2LBx7xvLWwq1MGNYdva7hPn+i5Wi/zyKzei2e1R/7gj2vF4rW1TXJ3LkUyrZF7pjUqV6TzP6gl4+9EEIIIcThQEp97Vhwbr0TGp9bb/nWUnZX2MmylQGwNykwOAuADtCzu8LO8q2lDOmZ3sK5FkHlO8BWAmjo/vgMAN2qD3w1dntXR05cjuZvkplXN79dSu5Bz7YQQgghhGgbJNhrp5x2N5v8c+v1aWRuPYDCKjsWt4NkZw0ARf4p9jQN9Jbd6OM34qk5ksIqe4vmWdQz7eiIVZrL5qvFC+h+UniTTEvyQcygEEIIIYRoyyTYa6e2rPTNrZfcwUp2j4bn1gPokGghu6YEgCoL1JrrmmoqpWHO/BZbzREy3cLBdspD8P3fAIhoPKvp4byXYcAVBz1bQgghhBDi0CDBXjtVN7dex0bn1gMY1D2NI43rAChMCd+maQq9NZ/MDtsY1P3slsiqqM9ZA9/9FZa92nCaid9BzoCDliUhhBBCCHHo0bV2BsSBV1lcS8GG8pjm1gPQadDNsAKAwpTIwFApjYzc75GxWQ6CTfPglcGwdDooL/Q6HQDlr9tTkXV8QgghhBBCRCU1e+1QYLqF3D6pJKbtu+mly+siubQKgMIoXb40TVHrLcHldWHSmw5oXoWfrRTmTIL/feRbTs6Fc16ADn3hjZNRiZ34zXAsx7h/Q6sqgPiGR1cVQgghhBACJNhrd5RXBSdS39fALAEmvYnR5gG4WMweawZQxpGekVw04DKOyU1Fp9NIs6RJoNcSlILfP4E5D4KtGNAg72Y49REw++c1vHs1Hq/G9tmz6XfWM+h0CgzmVs22EEIIIYRo+yTYa2d2bSqnstiO0aKn+4DYa390u4sBKEz1AjAkqRuXHJ2H0WhskXwKoHwnfHUvbPzWt9yhL5z7km/S81AGM7hcvseaBgYJuoUQQgghxL5JsNfOBAZmOWJgB4yNzK0XSimFMz8fgOJ03/QLqbrUlsmgAK8Hfn4T5k0BVw3oTXDSAzDsLgnkhBBCCCHEASPBXjvitLvZ9Gtsc+uF8pSXo2w2AIpTXYBGii6lBXIoKFwLX94B+T/7lrsMgbH/gMwjWzdfQgghhBCi3ZFgrx3Zsso/t16mleyesU+u7QrU6lnjcRkcZFozMWhyaRxQbgcseA4WPA9eF5gS4fTJMPA60MmguEIIIYQQ4sCTEn070pS59UIFgr3ChDjAQU58DrhbIoeHqR1LfbV5xRt8y73HwJhnIblT6+ZLCCGEEEK0axLstROVxbUUrC/3za03eN9z64Wybd8JwN4kX3+xnIQcKD/AGTwc2Sth/hRf/zyA+A4w5mnoe75voBUhhBBCCCFakAR77cT6Zb659Tr3jm1uvVB71m/BDJSm+QZ0yYmXYG+/rZ8N/70Xqnb5lo+7Ck5/EuLSWjdfQgghhBDisCHBXjugvCqsCWdTVW7dTiZQk+WrbcqJzzmQ2Tu8VBfC7Adgzee+5dTuMHYa9Di5NXMlhBBCCCEOQxLstQO7N9fNrdfjuNjn1gvQ9vgCxZJ0B+BrxllCyQHNY7unFKz6EL55GOzloOlh6O0w8kEwxbV27oQQQgghxGFIgr12YO0SXxPOXk2YWy+gqtZJcqVvQvXtiRWAr2ZPgr0mKN0C/7kbtv7oW84+xjc5es6A1syVEEIIIYQ4zEmwd4hzOTxsXlEINK8J54oV68nyevBoOvbEO9HQkR2Xze/8fqCz2v543LD0Ffj+b+CuBYMFTnkIBt8GevloCSGEEEKI1iUl0kPclpWFuBwekjKtdGzC3HoBa39dTxZQnZKMV1dFVlwHjHrjgc9oe7P7N990Crt/8y13PwnOmQbpPVs1W0IIIYQQQgRIsHeICzThPGpIdpPm1gsoWLcFAEeHZKCKTgky91ujXLXww99h8UugPGBJhtF/gwFXynQKQgghhBCiTZFg7xBWWVJLwfoy/9x6TW/CWVLtwLurAABXdjyABHuN2foTfHknlG31Lfe7AM58ChKzWjdfQgghhBBCRCHB3iFs/dLmz60HsHRLKVm2UgDK0v1z7CXItAsRasvg20dh5fu+5cQcOPs56DOmdfMlhBBCCCFEIyTYO0QptX9z6wEs2lzMsTW+YC8/0QlIzV4YpeCPf8PXf4Ia3yA4nHgDnPY4WJJaN29CCCGEEELsg661MzB9+nS6deuGxWIhLy+P5cuXN5p+2rRp9O7dG6vVSm5uLvfccw92uz24ffLkyWiaFva/T58+Lf00Drrdmyp8c+uZ9fQY0PS59QCWbC4J1uxtslYBEuwFVe6Cj66Ej8f7Ar2MI2HCHF+NngR6QgghhBDiENCqNXszZ87k3nvvZcaMGeTl5TFt2jRGjx7N+vXr6dChQ0T6f/7znzz44IO8/fbbDB06lA0bNnDttdeiaRrPP/98MF2/fv2YN29ecNlgaH8VmIFavV4DO2A0N21uPYBd5bXsKKwko9Y3t946iy/oO+ybcXq9sOIdmDcZHJWgM8Lwe2DEfWBselNZIYQQQgghWkurRkHPP/88EydOZMKECQDMmDGDr776irfffpsHH3wwIv3ixYsZNmwYV1xxBQDdunXj8ssvZ9myZWHpDAYD2dnZLf8EWonL4WHTr82fWw9g0aZiOtSWoUeBxUyhxYlO05MVnwWeA5nbQ0jRBvjPnbBjiW+50wm+ydGz+rZuvoQQQgghhGiGVgv2nE4nK1asYNKkScF1Op2OUaNGsWTJkqj7DB06lA8++IDly5czaNAgtmzZwtdff83VV18dlm7jxo3k5ORgsVgYMmQIU6dOpUuXLg3mxeFw4HA4gsuVlZUAuFwuXC7X/jzN/RY4f2g+Nq4oxGX3kJhhIaNrXLPyuGhjEVn+/nrerHTQCsmK8wV60c7Z0lrjnEEeJ7olL6Fb+Byax4kyxuM95WG8A68HnR5a+RqAVn59hGjH5LMlhBBtU1u6P7eFPDRXqwV7xcXFeDwesrLCh63Pyspi3bp1Ufe54oorKC4uZvjw4SilcLvd3HzzzTz00EPBNHl5ebz77rv07t2b3bt3M2XKFEaMGMHq1atJTEyMetypU6cyZcqUiPXffvstcXFx+/EsD5y5c+cGHxcttwIGtNQKZs+e3eRjKQXf/6FniL+/3l6zb73Zbubrr7+Oes6D5WCfM7VmMwN2vEWSPR+AvUnH8FvutdQWZcCcbw5qXmLRGu+JEIcD+WwJIUTb1BbuzzabrbWz0GyHVGe2H374gb/97W+88sor5OXlsWnTJu666y6efPJJHn30UQDOOuusYPpjjjmGvLw8unbtyqxZs7j++uujHnfSpEnce++9weXKykpyc3M544wzSEpq3cE4XC4Xc+fO5fTTT8doNFJVaudfc34G4OyrhjdryoUtRTVULF1ETm0ZAN5umUAhR3c5mjFDxkSc82A46Od0VqP7YSq6Da+joVBx6XhO/ytp/S7ilDY4OXprvCdCHA7ksyWEEG1TW7o/B1r9HYpaLdjLyMhAr9ezd+/esPV79+5tsL/do48+ytVXX80NN9wAwNFHH01NTQ033ngjDz/8MDpd5OCiKSkpHHnkkWzatKnBvJjNZsxmc8R6o9HY6hdXQCAvW1bkg4JOvVNJy4peU7kvy7eXA3AU1QAUpfjWd07qHPZ8W+P5H5RzbpwH/70HKnb4lo+5DG303zDEp7fseQ+AtnRNCtGeyGdLCCHaprZwf27t8++PVpt6wWQyMXDgQObPnx9c5/V6mT9/PkOGDIm6j81miwjo9HrfSJRKqaj7VFdXs3nzZjp2bN5AJm2JUoq1S3wTqR81pPkD0CzaVAJArsNXs7fzcJljr6YEPp0IH17kC/SSu8BVn8KFr8EhEOgJIYQQQgjRFK3ajPPee+9l/PjxnHDCCQwaNIhp06ZRU1MTHJ3zmmuuoVOnTkydOhWAsWPH8vzzz3PccccFm3E++uijjB07Nhj03X///YwdO5auXbuya9cuHn/8cfR6PZdffnmrPc8DZffmCiqLan1z6x0XOTVFLLxexZItvmAvqbwIgE1xvjn22u20C0rB7x/DnAfBVgKaDvJugVMeAnNCa+dOCCGEEEKIFtGqwd6ll15KUVERjz32GHv27GHAgAHMmTMnOGjLjh07wmryHnnkETRN45FHHqGgoIDMzEzGjh3LX//612Ca/Px8Lr/8ckpKSsjMzGT48OEsXbqUzMzmTTzelgTm1uvZzLn1AP7YXUlFrYt0vQet3Fez94epGGinNXvlO3xNNjf5513s0M83nULnga2bLyGEEEIIIVpYqw/Qcvvtt3P77bdH3fbDDz+ELRsMBh5//HEef/zxBo/30UcfHcjstRlup4dNK3xz6+1PE87Fm32B3akpvsn0tMQEKkx2DJqBDnHNqy1sk7weWP46zH8SXDWgN8PIB2DYXaA/dNtdCyGEEEIIEatWD/ZEbLb+VoLL7iEpw0LHninNPk6gv95gq29eQU92BpBPVnwWBl07uRz2roEv74CCFb7lrsNg7IuQcUTr5ksIIYQQQoiDqJ2U7tu/Dct8o5b2GdIRTde8qQGcbi8/b/PNrddX843Eacv09VlrF004XXZY8CwsfAG8bjAnwelPwPHjIcpIrUIIIYQQQrRnEuy1QVWlduzVLgDcbje1hXpK1pcDkJGbQFWpvVnz6/2WX47N6SEt3kRqZTFlQHmqCWgHg7NsXwxf3gklG33Lfc6BMc9A0iH+vIQQQgghhGgmCfbamKpSOx8+thSP2xuyNi746OtXfkdv0HHlE4ObHPAt2uTrrzekZzquxfkA7E3xTVlxyNbs2Stg3mT45W3fckIWjHkW+p7bqtkSQgghhBCitUmw18bYq131Ar1IHrcXe7WrycHe4s2+/npDe6bjmlUAwPYEO3CIBnvrvoKv7oeqXb7l48fD6VPAmtq6+RJCCCGEEKINkGDvMGFzulm5wzfVwrCeGTgKfMHeRksFcIg146zaC7P/BH/827ec1sM3AEv3k1o3X0IIIYQQQrQhEuwdJn7ZVobLo8hJttDZ4GJjlW8i9bUmX23fIVGzpxSs/AC+fdjXfFPTw7A7YeSfwWht7dwJIYQQQgjRpkiwd5hY5J9fb2ivDFz+Wj0tPRWboQqDzkCmtY1POl+yGf5zF2xb4FvuOMA3OXrHY1o1W0IIIYQQQrRVEuwdJhb759cb1isdV/4fALiz0oEqOsZ3RK/Tt2LuGuFxw5KX4Yep4LaDwQqnPgx5t4BeLl8hhBBCCCEaIqXlw0CFzcXqXb6+eUN7ZuD61TcSZ2COvTbbX2/XKt/k6Hv+51vucTKcMw3SurdipoQQQgghhDg0SLB3GFiypQSloGdmPFlJFvYU+IK90jTf2985oXNrZg8AbddKhm6cirarI3Ts76vJWzIdlAcsKXDmVDj2ctCaN6G8EEIIIYQQhxsJ9toYS4IRvUHX6PQLeoMOS4Ix5mMuCfTX65kBgDPfF+ztSfLNsdcWava032eRWb0W76JpULQGyrb5NvS/CM78OyR0aM3sCSGEEEIIcciRYK+NSUyzcOUTg7FXuwBwu90sXLiQ4cOHYzD43i5LgrFJc+wt2lzXXw/Ale8boGVbfC3QisFe+Q6wlQAaujWfAaDb8JVvW3wmnPY4HH916+RNCCGEEEKIQ5wEe21QYpolGMy5XC5MyV4ychMwGmOvzQsorLSzqbAaTYPBPdJRSgVH49xoLQdacdqFaUdHrFKABlBTBF/eLsGeEEIIIYQQzaRr7QyIlrXYX6vXLyeJlDgT7qIilMMBOh3rDL7mna0W7F34Buh8vzcEeuIFe+TpDL7tQgghhBBCiGaRmr12btEmX0A3zN9fL9CEU8vKxKkrwagzkmHNaJ3MHTMOqvbA3Ecjt90wH3IGHPQsCSGEEEII0V5IzV47ppQK1uwN6envr+cfidOVlQb4+uvptFa6DBzVsPgfgK/5pu+vjLYphBBCCCHEgSA1e+3YjlIbBeW1GPUag7r7gjuXfyTOmow4oBWbcIJveoWaItB0qKyj+c14HMe4f0OrKvAN0CKEEEIIIYRoNgn22rFArd5xuanEmXxvdWDahZJU33KrjcS5ZzUsfdX3+NIP8fQYxfbZs+l31jPodAoM5tbJlxBCCCGEEO2ENONsxwL99QJNOKGuz97uJA/QSjV7Xi/89x7fhOlHnQt9xtRNlq5pEugJIYQQQghxAEiw1055vYolwfn16gZgCTTj3BpvAyAnvhVq9la+D/nLwZTgmzBdCCGEEEIIccBJsNdObSisoqTGidWoZ0BuCgDK7ca1Z49vu6UMgE6JB7lmr6YE5j3ue3zKQ5Dcin0GhRBCCCGEaMck2GunFm3y1eqd2D0Nk8H3Nrv27AGPB81kYqO+lebYm/sY1JZB1tEw6KaDe24hhBBCCCEOIxLstVNLNvuCuaFh/fV8TTjJ7oAHhVlvJt2SHm33lrF9Maz6wPf4nOdBL+MDCSGEEEII0VIk2GuH3B4vy7aUAnWTqQO4CnyDs7iyUgDfSJyadpDmtfO44L/3+h4fPx5yBx2c8wohhBBCCHGYkmCvHfq9oIIqh5tkq/H/27vv8CirtI/j3ydl0klICKTQQhEC0hFE10UUCKBsABVFkCo2WCmydpo03RVFRRaVugrI4otlhaVqFKUtCCIQOhhKAkhJSEKSSWbeP4aMjAnJJCQkE36f65orM085554n5Zo75zz3oVFEJfv23GUXLl1ZY++GLruw6X04Gw++IdBxwo3rV0RERETkJqVkrwLKXV/v9jrBuLv9PnKXu+zCb0HuAET63aD79S4mwHdv2J53ngy+wTemXxERERGRm5iSvQood329q5dcgN/v2TtVKRu4gSN7/30RzOlQ605o1ufG9CkiIiIicpNTslfBZJhz2ParbVmFq4uzwFVr7PmmATdo2YV9K2H/CnDzgPum/754uoiIiIiIlColexXMT79eICvbQtUAL+qG+tu3WzIyyD57FoB4b1vxllKfxpmVBv993va83XCoGl26/YmIiIiIiJ2SvQom9369O+tVcai0aT51CgDDz49jVts0z1Kfxvnd3yH5OATWhPbPl25fIiIiIiLiQMleBfPjlfX12l1jCqcRXhWrAT4ePgR7l2KhlDPxsGmm7XnXN8DkV3p9iYiIiIhIHkr2KpBLGWZ2nUgG8t6vl7vsQmbuGnt+pbjGntUKK54DSzY0uA8adiudfkRERERE5JrKPNl7//33qV27Nt7e3rRt25atW7cWePyMGTNo0KABPj4+1KhRg1GjRpGRkXFdbVYUW4+eJ8dipVaIL9Ur+zrsy112ISXEGyjlKZw/L4FffwRPX9uonoiIiIiI3HBlmuwtXbqU0aNHM378eH766SeaNWtGTEwMZ86cyff4xYsX8+KLLzJ+/Hji4+OZO3cuS5cu5eWXXy52mxXJj4ds9+vdUbdKnn250zjPBtm+5aWW7KWfhzWv2p63fwGCapROPyIiIiIiUqAyTfbeeusthg4dyqBBg2jUqBGzZ8/G19eXefPm5Xv8xo0bufPOO3n00UepXbs2nTt3pk+fPg4jd0VtsyLZeDh3fb2QPPtyk70TAWYAqvtXL50g1k2A9HMQGg3thpVOHyIiIiIiUiiPsuo4KyuL7du389JLL9m3ubm50bFjRzZt2pTvOXfccQeffPIJW7dupU2bNhw5coSVK1fy2GOPFbtNgMzMTDIzM+2vU1JSADCbzZjN5ut6n9crt//C4jiXmsm+pEsAtK4ZmOf43Hv2jvikAlDNp9o123S2zz8yTvwPj58WApDd5e9YLYDFuTaK2+fNQtdHpHTod0tEpHwqT3+fy0MMxVVmyd5vv/1GTk4O1apVc9herVo19u3bl+85jz76KL/99ht/+tOfsFqtZGdn89RTT9mncRanTYBp06YxceLEPNvXrFmDr69vPmfceGvXri1w/47fDMCdCF8rW75b57DP7XIG9a4ksDuxLcFwdOdRVu5eeV19Xs2w5tB+/3gCgYTgu9ix+wIU0v719nkz0vURKR363RIRKZ/Kw9/n9PT0sg6h2Mos2SuOuLg4pk6dyqxZs2jbti2HDh1ixIgRTJo0ibFjxxa73ZdeeonRo0fbX6ekpFCjRg06d+5MpUqVSiL0YjObzaxdu5ZOnTrh6el5zeM2frkXOEHnZrXo1q2hw77Mffs4DrhVrsxvnrbRvwc7P0hl78rX1efV3Lb8E/edCVh9KhPe/yPC/fLeN1iQ4vR5M9H1ESkd+t0SESmfytPf59xZf66ozJK9KlWq4O7uzunTpx22nz59mrCwsHzPGTt2LI899hiPP/44AE2aNCEtLY0nnniCV155pVhtAnh5eeHl5ZVnu6enZ5n/cOUqLJbNR88DcNctVfMcdzkpCQBreChwCV8PX0L9QwtdesHp9598Er63Vd00Ok7EMyi88HOut8+blK6PSOnQ75aISPlUHv4+l3X/16PMCrSYTCZatWrF+vXr7dssFgvr16+nXbt2+Z6Tnp6Om5tjyO7u7gBYrdZitVkRnLiQzq/n0nF3M2gTlXeh9NxlFzKq2kYpI/xLeI29VS9CVipUbwMtHiu5dkVEREREpNjKdBrn6NGjGTBgAK1bt6ZNmzbMmDGDtLQ0Bg0aBED//v2JjIxk2rRpAHTv3p233nqLFi1a2Kdxjh07lu7du9uTvsLarIg2HrYtudC0eiAB3nn/85BbiTM52LbGXqR/ZMl1fnAtxH8Fhjvc/za4lfnSjSIiIiIiQhknew8//DBnz55l3LhxJCUl0bx5c1atWmUvsJKQkOAwkvfqq69iGAavvvoqJ0+eJDQ0lO7duzNlyhSn26yINl1J9u7MZ309uHqNPdtoXokle+bLsHKM7fntT0PYrSXTroiIiIiIXLcyL9AyfPhwhg8fnu++uLg4h9ceHh6MHz+e8ePHF7vNisZqtfLjIdv6enfUzbu+HkDWydw19rKAElxQfcN0uHAMAiLg7hdLpk0RERERESkRmnPn4g6fTeXMpUxMHm60rJW3uqbVasV80rbcwiEfWyXOEhnZO3sAfphhe971DfAKuP42RURERESkxCjZc3G59+u1rlUZb0/3PPtzzp/HevkyGAb7PG0jgNc9sme1worRtgXT63eG6O7X156IiIiIiJQ4JXsuLncK5531Cr5fz71qVU5n25ZnuO6RvV+WwbEN4OENXf8OJVnZU0RERERESoSSPReWY7Gy+Ygtgbvm/XpXkj1LuC0Z9Pf0p5LpOhaKv3wRVr9se/7nMRAcVfy2RERERESk1CjZc2F7T6WQfNlMgJcHTSID8z0md429y6EltMbeN5Mg7SyE1Ic7ni1+OyIiIiIiUqqKnexlZ2ezbt06PvjgAy5dshX+OHXqFKmpqSUWnBRs42HbFM62dYLxcM//W/n7Gnsm4Drv1zu5Hf431/b8vung4VX8tkREREREpFQVa+mFX3/9lS5dupCQkEBmZiadOnUiICCAN954g8zMTGbPnl3ScUo+frxSnKXdNdbXAzBfWXbhdJDtdXX/6sXrzJIDX48CrND0YajTvnjtiIiIiIjIDVGskb0RI0bQunVrLly4gI+Pj317z549Wb9+fYkFJ9eWlW3hf0dt9+vdWS//+/UAsq5M40zwzwSuY2Tvf3Mg8WfwDoTOk4vXhoiIiIiI3DDFGtnbsGEDGzduxGQyOWyvXbs2J0+eLJHApGA7j1/ksjmHED8TDarlv8adNScHc2IiAId8UiCnmMnepST45kqCd+848K9a3LBFREREROQGKdbInsViIScnJ8/2EydOEBCgxbVvhNwlF9rVDblmwZXs06fBbAZPT/a7nwWKOY1z9cuQmQIRLaHVoGLHLCIiIiIiN06xkr3OnTszY8YM+2vDMEhNTWX8+PF069atpGKTAmy6cr/etdbXg9+XXfAID+Nc1gUAwv3Di9bR4W9g9/+B4Qb3vw1ueRduFxERERGR8qdY0zinT59OTEwMjRo1IiMjg0cffZSDBw9SpUoVlixZUtIxyh+kZ2Wz47gtebvW+nrw+7ILOWEhQCIBpoCirbGXnQErxtie3zYUIpoXM2IREREREbnRipXsVa9enZ9//pmlS5fy888/k5qaypAhQ+jbt69DwRYpHVuPnsecYyUyyIeawb7XPC532YX0UNvU2kj/yCL147bxXTh/GPzD4J5Xih+wiIiIiIjccMVK9gA8PDzo27cvffv2Lcl4xAm/T+G89v168PuyCxcqewLOJ3vGqR3ctX8ibhkJtg1dptqqcIqIiIiIiMso1j1706ZNY968eXm2z5s3jzfeeOO6g5KC/XhlMfU7ClhfD35fdiGpkgVwvhKn8ctSgtMPY1jMUKcDNO51HdGKiIiIiEhZKFay98EHH9CwYcM82xs3bqwF1UvZxfQs9pxKAQq+Xw9+n8aZEGBbY6/Akb2LCXBqB5zaidsvSwGwAtz2OCTutO0XERERERGXUaxpnElJSYSH563qGBoaSuKVdd2kdGw+cg6rFepV9adqJe9rHmfJyiL7zBkADnonQ1Yhyd6MJvlvX3rVNN0JycUJWUREREREykCxRvZq1KjBjz/+mGf7jz/+SEREMRbtFqdtzL1fr7BRvZMnwWrF8PHhAElAIdM4e30EbrbcP/cuQPvdgG4etv0iIiIiIuIyijWyN3ToUEaOHInZbOaee+4BYP369Tz//PM899xzJRqgOPp9MfWC79fLXXbBPSKc5CzbFMwIvwKSvaa9ocot8GH7vPseX69lF0REREREXEyxkr2//e1vnDt3jmeeeYasrCwAvL29eeGFF3jppZdKNED5XVJyBofPpuFmQLs6TozsAdlhIUACgV6B+Jv8i9SfFQPDdueeiIiIiIi4mGIle4Zh8MYbbzB27Fji4+Px8fGhfv36eHl5lXR8cpVNR2yjerdGBhLo61ngsbnLLqSH+gFOLrvgFwomP8hK47xvXYICK2FcOmnbLiIiIiIiLqXY6+wB+Pv7c9ttt5VULFKIHw/Z7tdrV8j9egBZVypxni/KGnuBkdD4AdjxL84GNCZg0Fzc3KzgoSReRERERMTVFCvZS0tL4/XXX2f9+vWcOXMGi8XisP/IkSMlEpz8zmq1/r6YeiH368Hv9+wlVsoBCrlf72qXbNVU001VwDDAw1SMaEVEREREpKwVK9l7/PHH+e6773jssccIDw/HMIzCT5LrknD+MicvXsbT3aB17cqFHp+7xt4x/8tggcgAJ0b2AJKPA3DZVHhCKSIiIiIi5Vexkr3//ve/rFixgjvvvLOk45Fr2HjENqrXomZlfE0Ff9ssaWnkXLgAwAHvi5Du5DROqxUu2pK9dFPhU0VFRERERKT8KtY6e5UrVyY4OLikY5ECbD5yHnBuCmdW7rILgYEcyb6yxp4z0zgvXwBzmu2pkj0REREREZdWrGRv0qRJjBs3jvT09JKOR/JhscKmK8neHfUKT8JyK3G6RYZzKesSUMiC6rku2tbjs/qFYnHTvXoiIiIiIq6sWNM4p0+fzuHDh6lWrRq1a9fG09NxGYCffvqpRIITm8R0uJBuxtfkTrPqQYUen3u/nrmabfQ12DsYX0/fwju6cr+etVL1YscqIiIiIiLlQ7GSvR49epRwGFKQA8m2Aji31Q7G5FH4YGzusgupVWwJntOVOJNt5xFYo+hBioiIiIhIuVKsZG/8+PElHYfkI8diZcvR82z7zZbstavr3H2SucsunKvsDjg5hRPsxVmsgdUhq4jBioiIiIhIuXJdi6pL6Vm1O5GJ/9lLYnIGubdWztlwlNohfnS5NbzAc3OncZ66ssaeU5U4AZJt9+wRWAPOFitsEREREREpJ4pVoCUnJ4c333yTNm3aEBYWRnBwsMNDrs+q3Yk8/clPVxK9351LzeLpT35i1e7Ea55rtVrtyd5RP1tlTaeTvdyRvUpOHi8iIiIiIuVWsZK9iRMn8tZbb/Hwww+TnJzM6NGj6dWrF25ubkyYMKGEQ7y55FisTPzPXqz57MvdNvE/e8mx5HcE5Fy8iOVKldQDJttae05P48wt0KJ79kREREREXF6xkr1Fixbx0Ucf8dxzz+Hh4UGfPn2YM2cO48aNY/PmzUVu7/3336d27dp4e3vTtm1btm7des1j7777bgzDyPO477777McMHDgwz/4uXboU563ecFuPns8zonc1K5CYnMHWo+fz3Z87qucRGkpCpm2NPadG9rLSIN22cLsKtIiIiIiIuL5iJXtJSUk0adIEAH9/f5KTkwG4//77WbFiRZHaWrp0KaNHj2b8+PH89NNPNGvWjJiYGM6cOZPv8cuXLycxMdH+2L17N+7u7jz00EMOx3Xp0sXhuCVLlhTjnd54Zy5dO9Fz5rjcZM+IDCPVnAo4ObKXbCvqgikAvAOdikFERERERMqvYiV71atXJzHRdt9Y3bp1WbNmDQD/+9//8PLyKlJbb731FkOHDmXQoEE0atSI2bNn4+vry7x58/I9Pjg4mLCwMPtj7dq1+Pr65kn2vLy8HI6rXLlyMd7pjVc1wPu6jstddiGrqu39hniH4O3hRJu5xVmCaoBhOBWDiIiIiIiUX8WqxtmzZ0/Wr19P27Zt+etf/0q/fv2YO3cuCQkJjBo1yul2srKy2L59Oy+99JJ9m5ubGx07dmTTpk1OtTF37lweeeQR/Pz8HLbHxcVRtWpVKleuzD333MPkyZMJCQnJt43MzEwyMzPtr1NSUgAwm82YzWan309JaFE9gLBKXpxOycz3vj0DCAv0okX1gHxjy0yw3XeXHGxLusP9wp16D8a5Y3gAlkqR9uNv5Hsviz5dia6PSOnQ75aISPlUnv4+l4cYiqtYyd7rr79uf/7www9Ts2ZNNm3aRP369enevbvT7fz222/k5ORQrVo1h+3VqlVj3759hZ6/detWdu/ezdy5cx22d+nShV69ehEVFcXhw4d5+eWX6dq1K5s2bcLd3T1PO9OmTWPixIl5tq9ZswZfX1+n309J6RZmMC8ld9D16lE2K1aga7V0Vq/6b77nRu7ciR+w+7JtGqyRYrBy5cpC+4w+FcctwK8Xc9i1di0Aa698vZHKok9XousjUjr0uyUiUj6Vh7/P6VeKH7qiEllnr127drRr164kmiqSuXPn0qRJE9q0aeOw/ZFHHrE/b9KkCU2bNqVu3brExcVx77335mnnpZdeYvTo0fbXKSkp1KhRg86dO1OpUqXSewPX0A1ouec0k1fuIynl9xHH8EBvXunakJjG1a557q+z/okZsDSoAkDr+q3p1rxboX26f/kVnIaaTf5Etds6sXbtWjp16oSnp+f1vh2nmM3mG96nK9H1ESkd+t0SESmfytPf59xZf66o2MneqVOn+OGHHzhz5gwWi8Vh37PPPutUG1WqVMHd3Z3Tp087bD99+jRhYWEFnpuWlsann37Ka6+9Vmg/derUoUqVKhw6dCjfZM/Lyyvfew09PT3L7Ifr/ubV6do0kk2HzrBmwxY639WWdvWq4u527fvprBYL2adOAXDM/zJchuqVqjv3HlJsBVrcg2vZjy+L91+W19wV6PqIlA79bomIlE/l4e9zWfd/PYqV7C1YsIAnn3wSk8lESEgIxlUFPQzDcDrZM5lMtGrVivXr19OjRw8ALBYL69evZ/jw4QWeu2zZMjIzM+nXr1+h/Zw4cYJz584RHh7uVFzlhbubQduoYM7FW2kbFVxgogeQffYsVrMZ3N054GFbRsHpBdWTbYVdCKp5PSGLiIiIiEg5Uaxkb+zYsYwbN46XXnoJN7diFfS0Gz16NAMGDKB169a0adOGGTNmkJaWxqBBgwDo378/kZGRTJs2zeG8uXPn0qNHjzxFV1JTU5k4cSIPPPAAYWFhHD58mOeff5569eoRExNzXbGWd7nLLniGh3Pisq1aqlPJXk42pNhGBLXGnoiIiIhIxVCsZC89PZ1HHnnkuhM9sBV4OXv2LOPGjSMpKYnmzZuzatUqe9GWhISEPP3s37+fH374wb7kw9Xc3d3ZtWsXCxcu5OLFi0RERNC5c2cmTZpU5GUhXI19jb2IaqRn2xZUD/d3YjTz0imw5oCbJ/hXg5yc0gxTRERERERugGIle0OGDGHZsmW8+OKLJRLE8OHDrzltMy4uLs+2Bg0aYLXmtzAB+Pj4sHr16hKJy9XkrrGXWTUIgFCfULzcnUhwL9qWayAwEtzclOyJiIiIiFQAxUr2pk2bxv3338+qVato0qRJnpsW33rrrRIJTorGfMJWZCU5xLaIeoR/hHMnJucme5rCKSIiIiJSURQ72Vu9ejUNGjQAyFOgRcpG7jTOs0G274HzxVmuJHsqziIiIiIiUmEUK9mbPn068+bNY+DAgSUcjlyPrJO2ZO9EQBbkFCHZu6iRPRERERGRiqZYFVa8vLy48847SzoWuQ5Ws5nsJNt6hUd8U4FiTOMMUrInIiIiIlJRFCvZGzFiBO+9915JxyLXwZyYCBYLhrc3h4zfAI3siYiIiIjczIo1jXPr1q188803fP311zRu3DhPgZbly5eXSHDiPPsae5ERnEovwhp7VuvvC6oHVi+t8ERERERE5AYrVrIXFBREr169SjoWuQ65yy4QVpXL2QkYGIT5hRV+YtpvkH3Z9lzJnoiIiIhIhVHkZC87O5sOHTrQuXNnwsKcSCbkhshddiGjaiUAQn1DMbmbCj8x9349/zDwqNiLzouIiIiI3EyKfM+eh4cHTz31FJmZmaURjxRT7jTO5GDbGnvV/Z0cpVNxFhERERGRCqlYBVratGnDjh07SjoWuQ65yy6cDrK9droSp4qziIiIiIhUSMW6Z++ZZ57hueee48SJE7Rq1Qo/Pz+H/U2bNi2R4MR5udM4T/hnQZaWXRARERERudkVK9l75JFHAHj22Wft2wzDwGq1YhgGOTk5JROdOMWSnk7OuXMAHPJLgSwtuyAiIiIicrMrVrJ39OjRko5DroP5pG1Uzy0ggCM5Z4AiJHvJCbavSvZERERERCqUYiV7tWrVKuk45DrkLrvgWT2SxDTbSJ3z0zivLNmgaZwiIiIiIhVKsZI9gMOHDzNjxgzi4+MBaNSoESNGjKBu3bolFpw4J/d+PWt4VTJzDuFmuDm3xl5mKly+YHuukT0RERERkQqlWNU4V69eTaNGjdi6dStNmzaladOmbNmyhcaNG7N27dqSjlEKkTuNM72KPwDVfKvh6eZZ+Im5xVm8A8G7UmmFJyIiIiIiZaBYI3svvvgio0aN4vXXX8+z/YUXXqBTp04lEpw4x3xl2YWLIbZF0Yu+7ELN0ghLRERERETKULFG9uLj4xkyZEie7YMHD2bv3r3XHZQUTdaVaZxnAm2vi16cxckF2EVERERExGUUK9kLDQ1l586debbv3LmTqlWrXm9MUkTmKwVaEvwzgGKM7Kk4i4iIiIhIhVOsaZxDhw7liSee4MiRI9xxxx0A/Pjjj7zxxhuMHj26RAOUguUkJ2O5dAmAg97JkFaUkb0rlThVnEVEREREpMIpVrI3duxYAgICmD59Oi+99BIAERERTJgwwWGhdSl9ucsuuFepQoL5NFCUZE8jeyIiIiIiFZXT0zi/+uorzGYzAIZhMGrUKE6cOEFycjLJycmcOHGCESNGYBhGqQUreeUuu+AZGcmp1FOACrSIiIiIiEgRkr2ePXty8eJFANzd3Tlz5gwAAQEBBAQElEpwUrjc+/UsYVUwW8y4G+5U861W+InZWXAp0fZcI3siIiIiIhWO08leaGgomzdvBsBqtWoEr5zIXXYhvaptjb0wvzA83JyYnZtyErCCuxf4VinFCEVEREREpCw4fc/eU089RWxsLIZhYBgGYWFh1zw2JyenRIKTwuXes3e+sm0RdaencNqLs1QHt2IVZRURERERkXLM6WRvwoQJPPLIIxw6dIi//OUvzJ8/n6CgoFIMTZyRe8/e6UoWyIEIP2eTPRVnERERERGpyIpUjbNhw4Y0aNCAAQMG8MADD+Dv719acYkTrFYr5pO2ZO9X/wxIhsgAJytx2ouzKNkTEREREamIijx/z2q1smjRIhITE0sjHimC7LNnsWZmgpsbB70uAEVZdiHB9jVIlThFRERERCqiIid7bm5u1K9fn3PnzpVGPFIEuVM4PcKqceJyElCEaZz2kb3qpRGaiIiIiIiUsWJV5nj99df529/+xu7du0s6HimC3EqcnpGRJKbZRlqrBziZvCVrGqeIiIiISEVWpHv2cvXv35/09HSaNWuGyWTCx8fHYf/58+dLJDgpWO4aezlhVci2ZONheBDqE1r4iRYLJNtGBVWgRURERESkYipWsjdjxowSDkOKI3fZhdQqfoBtjT13N/fCT0w7CzmZYLhBJSfv8RMREREREZdSrGRvwIABJR2HFEPuPXsXgm3fRueLs1yZwhkQDu6epRGaiIiIiIiUsWKvpn348GFeffVV+vTpw5kzZwD473//y549e4rc1vvvv0/t2rXx9vambdu2bN269ZrH3n333faF3a9+3HffffZjrFYr48aNIzw8HB8fHzp27MjBgweL/ibLudxpnKcq2Raxd37ZhSuVOHW/noiIiIhIhVWsZO+7776jSZMmbNmyheXLl5OamgrAzz//zPjx44vU1tKlSxk9ejTjx4/np59+olmzZsTExNgTyD9avnw5iYmJ9sfu3btxd3fnoYcesh/z97//nXfffZfZs2ezZcsW/Pz8iImJISMjozhvt1yyZmdjTrJV4DzmdxkoxoLqqsQpIiIiIlJhFSvZe/HFF5k8eTJr167FZDLZt99zzz1s3ry5SG299dZbDB06lEGDBtGoUSNmz56Nr68v8+bNy/f44OBgwsLC7I+1a9fi6+trT/asViszZszg1VdfJTY2lqZNm/Kvf/2LU6dO8cUXXxTn7ZZL5qTTkJODYTJx2N1WECfCv4jLLqg4i4iIiIhIhVWse/Z++eUXFi9enGd71apV+e2335xuJysri+3bt/PSSy/Zt7m5udGxY0c2bdrkVBtz587lkUcewc/PVqTk6NGjJCUl0bFjR/sxgYGBtG3blk2bNvHII4/kaSMzM5PMzEz765SUFADMZjNms9np91Macvv/YxyXfz0GgEdEOCfSbPfuVfOu5lS87hcTcANy/COw5HP8tfosTWXRpyvR9REpHfrdEhEp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e64u9bStspXhBgGqVCQiIiIiIjZK9lxd8pU1VQIiwF2zckVERERExEbJnqtTcRYREREREcmHkj1Xp+IsIiIiIiKSDyV7ri75SrKnkT0REREREbmKkj1Xp5E9ERERESlBd999NyNHjiz1fgYOHEiPHj1KvZ+bmZI9V5dboEUjeyIiIiIcP36cwYMHExERgclkolatWowYMYJz5845HHf06FEeffRRIiIi8Pb2pnr16sTGxrJv375Si23gwIEYhoFhGJhMJurVq8drr71Gdnb2dbdbkknT8uXLmTRpUom1dz2sVisffvghbdu2xd/fn6CgIFq3bs2MGTNIT08HYMKECfbrevWjYcOGZRx92VOy5+qSNbInIiIi5demU5uI/SKWTac2lXpfR44coXXr1hw8eJAlS5Zw6NAhZs+ezfr162nXrh3nz58HwGw206lTJ5KTk1m+fDn79+9n6dKlNGnShIsXLzrd3913382CBQuKFGOXLl1ITEzk4MGDPPfcc0yYMIF//OMf+R6blZVVpLYLYzabnTouODiYgICAEu27uPr378/IkSOJjY3l22+/ZefOnYwdO5Yvv/ySNWvW2I9r3LgxiYmJDo8ffvihDCMvH5TsubLLFyEzxfY8sHqZhiIiIiLyR1arlXd+eocjyUd456d3sFqtpdrfsGHDMJlMrFmzhvbt21OzZk26du3KunXrOHnyJK+88goAe/bs4fDhw8yaNYvbb7+dWrVqceeddzJ58mRuv/32Uo3Ry8uLsLAwatWqxdNPP03Hjh356quvgN9H6KZMmUJERAQNGjQAbKOVvXv3JigoiODgYGJjYzl27BhgG9VauHAhX375pX1EKy4ujmPHjmEYBkuXLqV9+/Z4e3uzaNEizp07R58+fYiMjMTX15cmTZqwZMkShxj/OI2zdu3aTJ06lcGDBxMQEEDNmjX58MMPHc4pKEaAnJwcRo8eTVBQECEhITz//POF/jx8/vnnLF68mCVLlvDyyy9z2223Ubt2bWJjY/nmm2/o0KGD/VgPDw/CwsIcHlWqVCnqt6fCUbLnynJH9XxDwORXtrGIiIhIhWW1Wkk3pxf58W3Ct+w5tweAPef28G3Ct0Vuw9kE8fz586xevZpnnnkGHx8fh31hYWH07duXpUuXYrVaCQ0Nxc3Njc8++4ycnJwSv15F4ePj4zCCt379evbv38/atWv5+uuvMZvNxMTEEBAQwIYNG/jxxx/x9/enS5cuZGVlMWbMGHr37m0fMUxMTOSOO+6wt/fiiy8yYsQI4uPjiYmJISMjg1atWrFixQp2797NE088wWOPPcbWrVsLjHP69Om0bt2aHTt28Mwzz/D000+zf/9+gEJjzD1/wYIFzJs3jx9++IHz58/z+eefF9jnsmXLaNCgAbGxsXn2GYZBYGCg09f5ZqVVuF2ZirOIiIjIDXA5+zJtF7e97nZGxI0o8jlbHt2Cr6dvoccdPHgQq9VKdHR0vvujo6O5cOECZ8+eJTIyknfffZfnn3+eiRMn0rp1azp06EDfvn2pU6dOkWMsDqvVyvr161m9ejV//etf7dv9/PyYM2cOJpMJgE8++QSLxcKcOXMwDAOA+fPnExQURFxcHJ07d8bHx4fMzEzCwsLy9DNy5Eh69erlsG3MmDH253/9619ZvXo1//73v2nTps014+3WrRvPPPMMAC+88AJvv/023377LQ0aNGDp0qWFxjhjxgxeeukleyyzZ89m9erVBV6jI0eOcMsttxR4TK5ffvkFf39/h239+vVj9uzZTp1fUSnZc2VadkFERETEgbMjgcOGDaN///7ExcWxefNmli1bxtSpU/nqq6/o1KlTvudMnTqVqVOn2l9fvnyZzZs3M3z4cPu2vXv3UrNmzWv2+/XXX+Pv74/ZbMZisfDoo48yYcIE+/4mTZrYEz2An3/+mUOHDuW5hy4jI4PDhw8X+j5bt27t8DonJ4epU6fy73//m5MnT5KVlUVmZia+vgUn1E2bNrU/NwyDsLAwzpw541SMycnJJCYm0rbt7/8w8PDwoHXr1gV+v4oy7bdBgwb26bC5KlWq5PT5FZWSPVdmL85y7T8oIiIiItfLx8OHLY9ucfp4q9XKoNWD2H9hPxarxb7dzXCjQeUGzI+Zbx8BcqZvZ9SrVw/DMIiPj6dnz5559sfHx1O5cmVCQ0Pt2wICAujevTvdu3dn8uTJxMTEMHny5Gsme0899RS9e/e2v+7bty8PPPCAw8hZREREgXF26NCBf/7zn5hMJiIiIvDwcPw47ufneGtOamoqrVq1YtGiRXnauvq9XMsf2/vHP/7BO++8w4wZM2jSpAl+fn6MHDmy0GIwnp6eDq8Nw8BisZRIjNdSt25d+1TRwuRWNxVHSvZcmX0ap4qziIiISOkxDMOpqZS5fjz5I/Hn4/Nst1gtxJ+PZ+fZndwZeWdJhkhISAidOnVi1qxZjBo1yuG+vaSkJBYtWkT//v2vmWTmlurfuHHjNfsIDg4mODjY/trHx4eqVasWKcnw8/Mr0vEtW7Zk6dKlVK1a9ZojVSaTyel7D3/88UdiY2Pp168fABaLhQMHDtCoUSOnYypOjOHh4WzZsoU///nPAGRnZ7N9+3Zatmx5zXYffPBBhgwZwpdffpnnvj2r1UpKSoru2yuECrS4Mk3jFBERkXLGarXy3o73MLhGUoXBezveK5XKnDNnziQzM5OYmBi+//57jh8/zqpVq+jUqRORkZFMmTIFgJ07dxIbG8tnn33G3r17OXToEHPnzmXevHn5FgMpS3379qVKlSrExsayYcMGjh49SlxcHM8++ywnTtjWW65duza7du1i//79/PbbbwUusVC/fn3Wrl3Lxo0biY+P58knn+T06dOlHuOIESN4/fXX+eKLL9i3bx/PPPNMoctc9OzZk969e9OnTx+mTp3Ktm3b+PXXX/n666/p2LEj3377rf3Y7OxskpKSHB7X+74qAo3suTIVaBEREZFyxmwxk5SWhJX8kzkrVpLSkjBbzJjcTfkeU1z169dn27ZtjB8/nt69e3P+/HnCwsLo0aMH48ePt4/KVa9endq1azNx4kT7EgW5r0eNGlWiMV0vX19fvv/+e1544QV69erFpUuXiIyM5N5777WPog0dOpS4uDhat25Namoq3377LbVr1863vVdffZUjR44QExODr68vTzzxBD169CA5OblUY3zuuedITExkwIABuLm5MXjwYHr27Flgv4ZhsGjRIubMmcO8efOYMmUKHh4e1K9fn/79+xMTE2M/ds+ePYSHhzuc7+XlRUZGRrHfV0VgWEt7wRMXlDsknJycXOY3dprNZlauXEm3bt0c50qbM2BKNdvz54+Cb3D+DZRkn6WoLPp0Jbo+IqVDv1si+cvIyODo0aNERUXh7e1d5POT0pI4n3H+mvuDvYMJ88tbOVIkl8ViISUlhUqVKuHmVvqTEQv6mS9PuUFRaWTPVSXbhsTx9AOfymUbi4iIiMhVwvzClMyJlAO6Z89VXX2/npPVrERERERE5OahZM9VJasSp4iIiIiIXJuSPVel4iwiIiIiIlIAJXuuSssuiIiIiIhIAZTsuSr7yF7Nso1DRERERETKJSV7rio5wfZVI3siIiIiIpIPJXuuyJIDKadsz3XPnoiIiIiI5EPJniu6lASWbHDzgACtYSMiIiIiInlpUXVXlFucpVIEuLmXbSwiIiIif2BOTCT7/Plr7vcICcEzTP+wvtrdd99N8+bNmTFjRlmHUmqOHTtGVFQUO3bsoHnz5mUdzk1BI3uuSMVZREREpJyyZGVx9MGHOPbAg9d8HH3wISxZWaXS//Hjxxk8eDARERGYTCZq1arFiBEjOHfunMNxR48e5dFHHyUiIgJvb2+qV69ObGws+/btK5W4AAYOHIhhGHkehw4dYvny5UyaNKnE++vRo0eJtnkjHDp0iMGDB9O4cWN8fHyIioqiT58+bNu2zX5MftfRMAw+/fTTMoy8/FGy54pUnEVERETKKcPTE8/wcDCMaxxg4BkWhuHpWeJ9HzlyhNatW3Pw4EGWLFnCoUOHmD17NuvXr6ddu3acvzLaaDab6dSpE8nJySxfvpz9+/ezdOlSmjRpwsWLF53u7+6772bBggVFirFLly4kJiY6PKKioggODiYgIKBIbVVE27Zto1WrVhw8eJC33nqL3bt38/nnn9OwYUOee+45h2Pnz5+f51q6YnJbmpTsuaLkE7avKs4iIiIiN4DVasWSnu7Uw3r5MlWeehKs1ms1RpWnnsR6+bJz7V2rnXwMGzYMk8nEmjVraN++PTVr1qRr166sW7eOkydP8sorrwCwZ88eDh8+zKxZs7j99tupVasWd955J5MnT+b2228viUt2TV5eXoSFhTk83N3dufvuuxk5cqT9uNq1azN16lQGDx5MQEAANWvW5MMPP3Ro6/jx4/Tu3ZugoCCCg4OJjY3l2LFjAEyYMIGFCxfy5Zdf2ke94uLiiIuLwzAMh6R2586dGIZhP3fBggUEBQWxevVqoqOj8ff3tyepV5szZw7R0dF4e3vTsGFDZs2a5bB/69attGjRAm9vb1q3bs2OHTsKvDZWq5WBAwdSv359vvvuO2JiYqhbty7Nmzdn/PjxfPnllw7HBwUF5bmW3t7eTnwXbh66Z88VXdSC6iIiInLjWC9fZn/LViXW3onhf3X62AY/bcfw9S30uPPnz7N69WqmTJmCj4+Pw76wsDD69u3L0qVLmTVrFqGhobi5ufHZZ58xcuRI3N3LZw2E6dOnM2nSJF5++WU+++wznn76adq3b0+DBg0wm83ExMTQrl07NmzYgIeHB5MnT6ZLly7s2rWLMWPGEB8fT0pKCvPnzwcgODiYjRs3OtV3eno6b775Jh9//DFubm7069ePMWPGsGjRIgAWLVrEuHHjmDlzJi1atGDHjh0MHToUPz8/BgwYQGpqKvfffz+dOnXik08+4ejRo4wYMaLAPnfu3MmePXtYvHgxbm55x6SCgoKKdgFFI3suKbdAS2D1so1DREREpJw4ePAgVquV6OjofPdHR0dz4cIFzp49S2RkJO+++y7jxo2jcuXK3HPPPUyaNIkjR46Uepxff/01/v7+9sdDDz10zWO7devGM888Q7169XjhhReoUqUK3377LQBLly7FYrEwZ84cmjRpQnR0NPPnzychIYG4uDj8/f3x8fFxGEk0mUxOx2k2m5k9ezatW7emZcuWDB8+nPXr19v3jx8/nunTp9OrVy+ioqLo1asXo0aN4oMPPgBg8eLFWCwW5s6dS+PGjbn//vv529/+VmCfBw8eBKBhw4ZOxdinTx+Ha+nv709CQoLT7/FmoJE9V2O1qkCLiIiI3FCGjw8NftpepHOsViu/PtafzH37wGIBNze8Gjak1sf/wrjW/XzX6Luo/Tpj2LBh9O/fn7i4ODZv3syyZcuYOnUqX331FZ06dcr3nKlTpzJ16lT768uXL7N582aGDx9u37Z3715q1rz2Z7QOHTrwz3/+0/7az8/vmsc2bdrU/twwDMLCwjhz5gwAP//8M4cOHcpzn19GRgaHDx++ZpvO8vX1pW7duvbX4eHh9r7T0tI4fPgwQ4YMYejQofZjsrOzCQwMBCA+Pp6mTZs6TKts165dgX0WZcouwNtvv03Hjh0dtkVERBSpjYpOyZ6ruXwBzGm25xrZExERkRvAMAynplL+UdVRoziemwxYLFQdNQr3ApKb61GvXj0MwyA+Pp6ePXvm2R8fH0/lypUJDQ21bwsICKB79+50796dyZMnExMTw+TJk6+Z7D311FP07t3b/rpv37488MAD9OrVy76tsGTDz8+PevXqOfWePP9QxMYwDCwWCwCpqam0atXKPq3yale/xz/KnR55dWJlNpud6jv3nNTUVAA++ugj2rZt63Dc9UyJveWWWwDYt28fzZo1K/T4sLAwp6/lzUrTOF3NxStD035VwVM3oIqIiEj55fenO/G+9VYAvG+9Fb8/3VlqfYWEhNCpUydmzZrF5cuXHfYlJSWxaNEiHn744WuOKhqGQcOGDUlLS7tmH8HBwdSrV8/+8PHxoWrVqg7bPDxuzFhKy5YtOXjwYJ7+69WrZx9dM5lM5OTkOJyXmwheXWxl586dReq7WrVqREREcOTIkTx9R0VFAbZps7t27SIjI8N+3ubNmwtst3nz5jRq1Ijp06fbk9qrFaVSqtgo2XM1uZU4VZxFREREyjnDMKg6ehSmunWpOnpUkaZvFsfMmTPJzMwkJiaG77//nuPHj7Nq1So6depEZGQkU6ZMAWzJTWxsLJ999hl79+7l0KFDzJ07l3nz5hEbG1uqMZaUvn37UqVKFWJjY9mwYQNHjx4lLi6OZ599lhMnbJ8Xa9euza5du9i/fz+//fYbZrOZevXqUaNGDSZMmMDBgwdZsWIF06dPL3L/EydOZNq0abz77rscOHCAX375hfnz5/PWW28B8Oijj2IYBkOHDmXv3r2sXLmSN998s8A2DcNg/vz5HDhwgPbt27NmzRqOHDnCrl27mDJlSp7vzcWLF0lKSnJ4FJSs34yU7Lkae3EWJXsiIiJS/vndcQd1V3yN3x13lHpf9evXZ9u2bdSpU4fevXtTt25dnnjiCTp06MCmTZsIDg4GoHr16tSuXZuJEyfStm1bWrZsyTvvvMPEiRPtyzOUd76+vnz//ffUrFmTXr16ER0dzZAhQ8jIyKBSpUoADB06lAYNGtC6dWtCQ0P58ccf8fT0ZMmSJezbt4+mTZvyxhtvMHny5CL3//jjjzNnzhzmz59PkyZNaN++PQsWLLCP7Pn7+/Of//yHX375hRYtWvDKK6/wxhtvFNpumzZt2LZtG3Xr1mXkyJE0btyYv/zlL+zZs4cZM2Y4HDto0CDCw8MdHu+9916R30tFZliLeifkTSAlJYXAwECSk5PtvyxlxWw2s3LlSrp162abO73qZdj8PrQbDjFTbkyfN0BZ9OlKdH1ESod+t0Tyl5GRwdGjR4mKitK6ZVImLBYLKSkpVKpUKd9lGEpaQT/z5Sk3KCqN7Lma5Cv37AWpEqeIiIiIiFybkj1Xc1HTOEVEREREpHBK9lxN7j17KtAiIiIiIiIFULLnSrLSIf2c7blG9kREREREpABK9lxJ7rILXpXAJ6hMQxERERERkfJNyZ4ryS3OEli9bOMQEREREZFyT8meK1FxFhERERERcZKSPVei4iwiIiIiIuIkJXuuRCN7IiIiIiLiJCV7riS3QItG9kRERKQcu3Q+g7MJl675uHQ+o6xDlCKIi4vDMAwuXrxYqv0cO3YMwzDYuXNnqfZzM1Gy50pyp3EG1izbOERERESu4dL5DBaN28y/p/7vmo9F4zaXWsJ3/PhxBg8eTEREBCaTiVq1ajFixAjOnTuX7/FPPvkk7u7uLFu2LM++CRMm0Lx581KJE35PbnIfISEhdO7cmR07dpRIuyWVNN1xxx0kJiYSGBhYIu1dr0OHDjFo0CCqV6+Ol5cXUVFR9OnTh23bttmPufq6Xv349NNPyzDyG0/JnquwZEPKKdtzVeMUERGRcioj1UxOtqXAY3KyLWSkmku87yNHjtC6dWsOHjzIkiVLOHToELNnz2b9+vW0a9eO8+fPOxyfnp7Op59+yvPPP8+8efOuu/+4uDhq165d5PPWrVtHYmIiq1evJjU1la5du15zFM1sLrnrlpWV5dRxJpOJsLAwDMMosb6La9u2bbRq1YoDBw7wwQcfsHfvXj7//HMaNmzIc88953Ds/PnzSUxMdHj06NGjbAIvI0r2XMWlRLDmgLsJ/KuVdTQiIiJyE7FarZgzc5x6ZGflONVmdpZz7VmtVqfjHDZsGCaTiTVr1tC+fXtq1qxJ165dWbduHSdPnuSVV15xOH7ZsmU0atSIF198ke+//57jx48X6bqUlJCQEMLCwmjdujVvvvkmp0+fZsuWLfYRuqVLl9K+fXu8vb1ZtGgRAHPmzCE6Ohpvb28aNmzIrFmz7O1FRUUB0KJFCwzD4O677wZg4MCB9OjRgylTphAREUGDBg0A+Pjjj2ndujUBAQGEhYXx6KOPcubMGXt7f5zGuWDBAoKCgli9ejXR0dH4+/vTpUsXEhMTHd5XQTECbN26lRYtWuDt7U3r1q0LHdG0Wq0MHDiQ+vXrs2HDBu677z7q1q1L8+bNGT9+PF9++aXD8UFBQYSFhTk8vL29nfyuVAweZR2AOMfIncJZKRLclKOLiIjIjZOdZeHDEd+VaJvL3/zJqeOeeKc9nl7uhR53/vx5Vq9ezZQpU/Dx8XHYFxYWRt++fVm6dCmzZs2yj1DNnTuXfv36ERgYSNeuXVmwYAFjx44t+pspQbmxXz3q9uKLLzJ9+nR7YrRo0SLGjRvHzJkzadGiBTt27GDo0KH4+fkxYMAAtm7dSps2bVi3bh2NGzfGZDLZ21q/fj2VKlVi7dq19m1ms5lJkybRoEEDzpw5w+jRoxk4cCArV668Zpzp6em8+eabfPzxx7i5udGvXz/GjBljT0YLizE1NZX777+fTp068cknn3D06FFGjBhR4LXZuXMne/bsYfHixbjl83k4KCjIqWt8M1Gy5ypUnEVERETkmg4ePIjVaiU6Ojrf/dHR0Vy4cIGzZ89StWpVDh48yObNm1m+fDkA/fr1Y/To0bz66qtlNl3x4sWLTJo0CX9/f9q0acPly5cBGDlyJL169bIfN378eKZPn27fFhUVxd69e/nggw8YMGAAoaGhwO8jhlfz8/Njzpw5Dgng4MGD7c/r1KnDu+++y2233UZqair+/v75xmo2m5k9ezZ169YFYPjw4bz22mtOx7h48WIsFgtz587F29ubxo0bc+LECZ5++ulrXp+DBw8C0LBhw0KupE2fPn1wd3f8R8HevXupWfPmqX+hZM9FGLnJnoqziIiIyA3mYXLjiXfaO3Xsb8cvOTVq12tMS6rUCHCq76JwdtrnvHnziImJoUqVKgB069aNIUOG8M0333Dvvfc63d/VyVBOTg6ZmZkO2/r168fs2bMLbOOOO+7Azc2NtLQ06tSpw9KlS6lWrRrHjh0DoHXr1vZj09LSOHz4MEOGDGHo0KH27dnZ2U4VUGnSpIlDogewfft2JkyYwM8//8yFCxewWGz3XCYkJNCoUaN82/H19bUnegDh4eH2qZ/OxBgfH0/Tpk0dplW2a9euwNiLMqUX4O2336Zjx44O2yIiIorUhqtTsuciDC2oLiIiImXEMAynplICeJicP87ZNp1Rr149DMMgPj6enj175tkfHx9P5cqVCQ0NJScnh4ULF5KUlISHx+8fh3Nycpg3b16Rkr2rK15u2bKFF154gbi4OPu2SpUqFdrG0qVLadSoESEhIflORfTz87M/T01NBeCjjz6ibdu2Dsf9cRQrP1e3BbbELCYmhpiYGBYtWkRoaCgJCQnExMQUWMDF09PT4bVhGPZk7HpjvJZbbrkFgH379tGiRYtCjw8LC6NevXrF7q8iULLnKlJyR/ZUiVNERETkj0JCQujUqROzZs1i1KhRDvftJSUlsWjRIvr3749hGKxcuZJLly6xY8cOh+Rj9+7dDBo0iIsXLzp9/9fVycSJEyfw8PAocoJRo0YNh1GyglSrVo2IiAiOHDlC37598z0md+QuJ6fwYjn79u3j3LlzvP7669SoYRtUuHoJg+JwJsbo6Gg+/vhjMjIy7KN7mzdvLrDd5s2b06hRI6ZPn87DDz+c5769onzfbhaq9OEi7CN7gRrZExERkfLL298Td4+CP2K6e7jh7e9Z4DHFMXPmTDIzM4mJibFX11y1ahWdOnUiMjKSKVOmALbCLPfddx/NmjXj1ltvtT969+5NUFCQvchIeTVx4kSmTZvGu+++y4EDB/jll1+YP38+b731FgBVq1bFx8eHVatWcfr0aZKTk6/ZVs2aNTGZTLz33nscOXKEr776ikmTJpV6jI8++iiGYTB06FD27t3LypUrefPNNwts0zAM5s+fz4EDB7jrrrtYuXIlR44cYdeuXUyZMoXY2FiH4y9evEhSUpLDIy0t7brfmyvRyJ4rsFoh+aTtuaZxioiISDkWEOxN39duL3AdPW9/TwKCS74Efv369dm2bRvjx4+nd+/enD9/nrCwMHr06MH48eMJDg7m9OnTrFixgsWLF+c5383NjZ49ezJ37lyGDRtW4vGVlMcffxxfX1/+8Y9/8Le//Q0/Pz+aNGnCyJEjAfDw8ODdd9/ltddeY9y4cdx1110OU0uvFhoayoIFC3j55Zd59913admyJW+++SZ/+ctfSjVGf39//vOf//DUU0/RokULGjVqxBtvvMEDDzxQYLtt2rRh27ZtTJkyhaFDh/Lbb78RHh7OHXfcwYwZMxyOHTRoUJ7zp02bxosvvnhd782VGNai3ul4E0hJSSEwMJDk5GSn5lmXJrPZzLovP6Xr7uGAAa+eAQ9Toeddb58rV66kW7dueeZjV6Q+XYmuj0jp0O+WSP4yMjI4evQoUVFRN926ZFI+WCwWUlJSqFSpUr7LLJS0gn7my1NuUFSaxukCfM2/2Z4EhJV6oiciIiIiIhWDkj0X4JN1zvZExVlERERERMRJSvZcgG/WlZE9FWcREREREREnKdlzAfaRPRVnERERERERJynZcwEa2RMRERERkaJSsucCfh/Zq1m2gYiIiIiIiMtQsucCNLInIiIiIiJFpWSvvMtKxZSTZnuuapwiIiIiIuIkJXvlXfIJAKzegeDtWos4ioiIiOzftIF/PtGP/Zt+KOtQRG46SvbKOSP5uO1JJU3hFBEREdeSnnyRtR/OtH396D3Sky+WdUguIy4uDsMwuHjxYlmHUqoGDhxIjx49yjqMCkvJXjlnJGwEwOoVUMaRiIiIiDjParWy9qP3ycq4DEDW5cusmzOr1Ps9fvw4gwcPJiIiApPJRK1atRgxYgTnzp3L9/gnn3wSd3d3li1blmffhAkTaN68eanFeuzYMQzDyPPo168fd9xxB4mJiQQGBpZ4fzt37iyxNm8Eq9XKhx9+SNu2bfH39ycoKIjWrVszY8YM0tPTAdv3Kr9r2bBhwzKOvmwp2SvnjKPf255kppRtICIiIiJFsH/TBg79bxNWiwUAq8XCwa0b2b9pQ6n1eeTIEVq3bs3BgwdZsmQJhw4dYvbs2axfv5527dpx/vx5h+PT09P59NNPef7555k3b9519x8XF0ft2rWLfN66detITEy0P95//31MJhNhYWEYhnHdcbm6xx57jJEjRxIbG8u3337Lzp07GTt2LF9++SVr1qyxH9e4cWOH65iYmMgPP9zc04eV7JVHFxPg1A44tRPj7D4AjAvH4NRO2/aLCWUanoiIiNxcrFYr5owMpx/JZ06z9qOZwB8TFYO1H84k+cxpp9uyWq1Oxzls2DBMJhNr1qyhffv21KxZk65du7Ju3TpOnjzJK6+84nD8smXLaNSoES+++CLff/89x48fv/6LVQwhISGEhYXZH4GBgXmmcS5YsICgoCBWr15NdHQ0/v7+dOnShcTERIe25syZQ3R0NN7e3jRs2JBZs34fTY2KigKgRYsWGIbB3XffDcDdd9/NyJEjHdrp0aMHAwcOtL+uXbs2U6dOZfDgwQQEBFCzZk0+/PBDh3OOHz9O7969CQoKIjg4mNjYWI4dO2bfn5OTw+jRowkKCiIkJITnn3++0O/vv//9bxYtWsSSJUt4+eWXue2226hduzaxsbF88803dOjQwX6sh4eHw3UMCwujSpUqBbZf0XmUdQCSjxlN8m4zp8GH7X9/PSH5xsUjIiIiN7XszEzeHfBgCbRkJTM9jTl/HeL0Gc8u/AxPb+9Cjzt//jyrV69mypQp+Pj4OOwLCwujb9++LF26lFmzZtlHy+bOnUu/fv0IDAyka9euLFiwgLFjxxbtLd1A6enpvPnmm3z88ce4ubnRr18/xowZw6JFiwBYtGgR48aNY+bMmbRo0YIdO3YwdOhQ/Pz8GDBgAFu3bqVNmzasW7eOxo0bYzKZitT/9OnTmTRpEi+//DKfffYZTz/9NO3bt6dBgwaYzWZiYmJo164dGzZswMPDg8mTJ9OlSxd27dqFyWRi+vTpLFiwgHnz5hEdHc306dP5/PPPueeee67Z5+LFi2nQoAGxsbF59hmGUaLTXCsijeyVR70+AjdbHp77/zD7/8XcPGz7RURERMTu4MGDWK1WoqOj890fHR3NhQsXOHv2rP34zZs38/DDDwPQr18/5s+fX6SRxJJyxx134O/vb3/s2LEj3+PMZjOzZ8+mdevWtGzZkuHDh7N+/Xr7/vHjxzN9+nR69epFVFQUvXr1YtSoUXzwwQcAhIaGAr+PJAYHBxcpzm7duvHMM89Qr149XnjhBapUqcK3334LwNKlS7FYLMyZM4cmTZoQHR3N/PnzSUhIIC4uDoAZM2bw0ksv0atXL6Kjo5k9e3ahydqhQ4do0KCBU/H98ssvDtfR39+fp556qkjvsaLRyF551LQ3VLnFcSQv1+PrIaL5DQ9JREREbl4eXl48u/Azp461Wq2sfO8fHNmxzX6/3tUMNzfqtLiN+579m9N9F4Wzydq8efOIiYmxT/Pr1q0bQ4YM4ZtvvuHee+91uj9/f3/785ycHDIzMx229evXj9mzZxfYxtKlSx2S1Bo1arBp06Y8x/n6+lK3bl376/DwcM6cOQNAWloahw8fZsiQIQwdOtR+THZ2domNfjVt2tT+3DAMwsLC7P3//PPPHDp0iIAAx6KCGRkZHD58mOTkZBITE2nbtq19n4eHB61bty7we1aU5LtBgwZ89dVXDtsqVbq5ly5TslfOWTEwsNq/ioiIiNxohmE4NZUyV+cnn2XeyCfJTE8Hh88vBiYfHzo/+dciteeMevXqYRgG8fHx9OzZM8/++Ph4KleuTGhoKDk5OSxcuJCkpCQ8PH7/OJyTk8O8efOKlOxdXdlyy5YtvPDCC/aRLHAu2ahRowb16tUr9DhPT0+H14Zh2JOh1NRUAD766COHhArA3d29wHbd3NzyJFVms9mp/i1XEvrU1FRatWpln1J6tdwRxeKoX78++/btc+pYk8nk1HW8mWgaZ3nlFwr+VbGGN2dnjYFYw5uDf1XbdhEREZFyzDcwiI5Dh0Gef1Rb6TR0OL6BQSXeZ0hICJ06dWLWrFlcvnzZYV9SUhKLFi3i4YcfxjAMVq5cyaVLl9ixYwc7d+60P5YsWcLy5cuLtLZdvXr17I/IyEg8PDwctlWtWrWE32n+qlWrRkREBEeOHHHov169evbCLLn36OXk5DicGxoa6lDoJScnh927dxep/5YtW3Lw4EGqVq2ap//AwEACAwMJDw9ny5Yt9nOys7PZvn17ge326dOHAwcO8OWXX+bZZ7VaSU5WHYuCKNkrrwIjYeRucgat4dcq95AzaA2M3G3bLiIiIlLONWh3F/Vua4fhZvu4abi5Ub/NHTRod1ep9Tlz5kwyMzOJiYmxV9dctWoVnTp1IjIykilTpgC2wiz33XcfzZo149Zbb7U/citJ5jc65QomTpzItGnTePfddzlw4AC//PIL8+fP56233gKgatWq+Pj4sGrVKk6fPm1PlO655x5WrFjBihUr2LdvH08//XSRF3Pv27cvVapUITY2lg0bNnD06FHi4uJ49tlnOXHiBAAjRozg9ddf54svvmDfvn0888wzhfbTu3dvHn74Yfr06cPUqVPZtm0bv/76K19//TUdO3a03zMItuQxKSnJ4XH69OkivY+KRsleeebhBblrqxiG7bWIiIiICzAMg05Dh2HytlXGNPn40PHxZ0q1z/r167Nt2zbq1KlD7969qVu3Lk888QQdOnRg06ZNBAcHc/r0aVasWMEDDzyQ53w3Nzd69uzJ3LlzSzXO0vL4448zZ84c5s+fT5MmTWjfvj0LFiywj+x5eHjw7rvv8sEHHxAREWGvcDl48GAGDBhA//79ad++PXXq1HFY0sAZvr6+fP/999SsWdNegGXIkCFkZGTYp7I+99xzPPbYYwwYMIB27doREBCQ75TbqxmGweLFi3nrrbf44osvaN++PU2bNmXChAnExsYSExNjP3bPnj2Eh4c7PGrVqlWk91HRGNayKDlUzqWkpBAYGEhycnKZ39RpNptZuXIl3bp1yzNPWn3ePHR9REqHfrdE8peRkcHRo0eJiorC+zrvrdu/aQPfzP+AewY9RYN2fyqhCKWis1gspKSkUKlSJdzcSn98qqCf+fKUGxSVCrSIiIiISKlp0O6uUp26KSLXpmmcIiIiIiIiFZCSPRERERERkQpIyZ6IiIiIiEgFpGRPRERERPKlOn5ys6ioP+tK9kRERETEgbu7OwBZWVllHInIjZGeng5Q4SozqxqniIiIiDjw8PDA19eXs2fP4unpeUNK34tczWKxkJWVRUZGRqn+/FmtVtLT0zlz5gxBQUH2f3RUFEr2RERERMSBYRiEh4dz9OhRfv3117IOR25CVquVy5cv4+Pjg2EYpd5fUFAQYWFhpd7PjaZkT0RERETyMJlM1K9fX1M5pUyYzWa+//57/vznP5f61EpPT88KN6KXS8meiIiIiOTLzc0Nb2/vsg5DbkLu7u5kZ2fj7e1d4e6ju5E0AVtERERERKQCUrInIiIiIiJSASnZExERERERqYB0z14+chdVTElJKeNIbDenpqenk5KScsPmK98sfboSXR+R0qHfLRGR8qk8/X3OzQlcceF1JXv5uHTpEgA1atQo40hERERERKQ8uHTpEoGBgWUdRpEYVldMUUuZxWLh1KlTBAQE3JB1PQqSkpJCjRo1OH78OJUqVVKfNyldH5HSod8tEZHyqTz9fbZarVy6dImIiIhSXeC9NGhkLx9ubm5Ur169rMNwUKlSpRv+g36z9OlKdH1ESod+t0REyqfy8vfZ1Ub0crlWaioiIiIiIiJOUbInIiIiIiJSASnZK+e8vLwYP348Xl5e6vMmpusjUjr0uyUiUj7p73PJUIEWERERERGRCkgjeyIiIiIiIhWQkj0REREREZEKSMmeiIiIiIhIBaRkT0REREREpAJSsldOff/993Tv3p2IiAgMw+CLL74o9T7/+c9/0rRpU/vile3ateO///1vqfU3YcIEDMNweDRs2LDU+ivvCvueW61Wxo0bR3h4OD4+PnTs2JGDBw+WTbAiLmbatGncdtttBAQEULVqVXr06MH+/fsdjrn77rvz/E166qmnyihiEZGKr7DPghkZGQwbNoyQkBD8/f154IEHOH36dBlG7HqU7JVTaWlpNGvWjPfff/+G9Vm9enVef/11tm/fzrZt27jnnnuIjY1lz549pdZn48aNSUxMtD9++OGHUuurvCvse/73v/+dd999l9mzZ7Nlyxb8/PyIiYkhIyPjBkcq4nq+++47hg0bxubNm1m7di1ms5nOnTuTlpbmcNzQoUMd/ib9/e9/L6OIRURuDgV9Fhw1ahT/+c9/WLZsGd999x2nTp2iV69eZRit6/Eo6wAkf127dqVr1643tM/u3bs7vJ4yZQr//Oc/2bx5M40bNy6VPj08PAgLCyuVtl1NQd9zq9XKjBkzePXVV4mNjQXgX//6F9WqVeOLL77gkUceuZGhiricVatWObxesGABVatWZfv27fz5z3+2b/f19dXfJBGRG+hanwWTk5OZO3cuixcv5p577gFg/vz5REdHs3nzZm6//fYbHapL0sie5CsnJ4dPP/2UtLQ02rVrV2r9HDx4kIiICOrUqUPfvn1JSEgotb5c2dGjR0lKSqJjx472bYGBgbRt25ZNmzaVYWQirik5ORmA4OBgh+2LFi2iSpUq3Hrrrbz00kukp6eXRXgiIjeNa30W3L59O2az2eGzT8OGDalZs6Y++xSBRvbEwS+//EK7du3IyMjA39+fzz//nEaNGpVKX23btmXBggU0aNCAxMREJk6cyF133cXu3bsJCAgolT5dVVJSEgDVqlVz2F6tWjX7PhFxjsViYeTIkdx5553ceuut9u2PPvootWrVIiIigl27dvHCCy+wf/9+li9fXobRiohUXAV9FkxKSsJkMhEUFORwjj77FI2SPXHQoEEDdu7cSXJyMp999hkDBgzgu+++K5WE7+opi02bNqVt27bUqlWLf//73wwZMqTE+xMRARg2bBi7d+/Oc4/wE088YX/epEkTwsPDuffeezl8+DB169a90WGKiFR4BX0W9PHxKcPIKg5N4xQHJpOJevXq0apVK6ZNm0azZs145513bkjfQUFB3HLLLRw6dOiG9OdKcuey/7EC1enTp3V/kUgRDB8+nK+//ppvv/2W6tWrF3hs27ZtAfQ3SUTkBrn6s2BYWBhZWVlcvHjR4Rh99ikaJXtSIIvFQmZm5g3pKzU1lcOHDxMeHn5D+nMlUVFRhIWFsX79evu2lJQUtmzZUqr3VIpUFFarleHDh/P555/zzTffEBUVVeg5O3fuBNDfJBGRG+Tqz4KtWrXC09PT4bPP/v37SUhI0GefItA0znIqNTXV4b/JR48eZefOnQQHB1OzZs1S6fOll16ia9eu1KxZk0uXLrF48WLi4uJYvXp1qfQ3ZswYunfvTq1atTh16hTjx4/H3d2dPn36lEp/5V1h3/ORI0cyefJk6tevT1RUFGPHjiUiIoIePXqUXdAiLmLYsGEsXryYL7/8koCAAPv9HoGBgfj4+HD48GEWL15Mt27dCAkJYdeuXYwaNYo///nPNG3atIyjFxGpmAr6LBgYGMiQIUMYPXo0wcHBVKpUib/+9a+0azTGqMUAAAcISURBVNdOlTiLwirl0rfffmsF8jwGDBhQan0OHjzYWqtWLavJZLKGhoZa7733XuuaNWtKrb+HH37YGh4ebjWZTNbIyEjrww8/bD106FCp9VfeFfY9t1gs1rFjx1qrVatm9fLyst57773W/fv3l23QIi4iv98twDp//nyr1Wq1JiQkWP/85z9bg4ODrV5eXtZ69epZ//a3v1mTk5PLNnARkQqssM+Cly9ftj7zzDPWypUrW319fa09e/a0JiYmlmHErsewWq3WG59iioiIiIiISGnSPXsiIiIiIiIVkJI9ERERERGRCkjJnoiIiIiISAWkZE9ERERERKQCUrInIiIiIiJSASnZExERERERqYCU7ImIiIiIiFRASvZEREREREQqICV7IiIiRWQYBl988QUAx44dwzAMdu7cWaYxiYiI/JGSPRERcRkDBw7EMAwMw8DT05OoqCief/55MjIyyjo0p6SmpjJ9+nT+9Kc/ERYWRmRkJPfccw8ffPAB2dnZZR2eiIhUMB5lHYCIiEhRdOnShfnz52M2m9m+fTsDBgzAMAzeeOONsg6tQNu3b6dnz57UqlWLoUOHEh0djaenJ7t27WL27NnMnj2b1atXU7Vq1bIOVUREKgiN7ImIiEvx8vIiLCyMGjVq0KNHDzp27MjatWvt+y0WC9OmTSMqKgofHx+aNWvGZ5995tDGnj17uP/++6lUqRIBAQHcddddHD58GID//e9/dOrUiSpVqhAYGEj79u356aefrivmX3/9lW7dujF27Fg2bNjAgAEDaNOmDS1atGDAgAFs3LiR7t2707VrV8xm83X1JSIikkvJnoiIuKzdu3ezceNGTCaTfdu0adP417/+xezZs9mzZw+jRo2iX79+fPfddwCcPHmSP//5z3h5efHNN9+wfft2Bg8ebJ9GeenSJQYMGMAPP/zA5s2bqV+/Pt26dePSpUvFjvPFF19k0KBBDB06lBMnTnD//fdTtWpVYmJimDRpEk8//TSvvfYafn5+fPLJJ9d3UURERK7QNE4REXEpX3/9Nf7+/mRnZ5OZmYmbmxszZ84EIDMzk6lTp7Ju3TratWsHQJ06dfjhhx/44IMPaN++Pe+//z6BgYF8+umneHp6AnDLLbfY27/nnnsc+vvwww8JCgriu+++4/777y9yvKmpqaxYsYKjR48CMGDAAPz9/Vm1ahXx8fE89dRTPPDAA/Z9q1evZtCgQUW/MCIiIn+gZE9ERFxKhw4d+Oc//0laWhpvv/02Hh4e9mTp0KFDpKen06lTJ4dzsrKyaNGiBQA7d+7krrvusid6f3T69GleffVV4uLiOHPmDDk5OaSnp5OQkFCseA8cOEDt2rUJCQkhLS2Nb775hpMnTxIREUHLli2Ji4uzT90MDw/nwoULxepHRETkj5TsiYiIS/Hz86NevXoAzJs3j2bNmjF37lyGDBlCamoqACtWrCAyMtLhPC8vLwB8fHwKbH/AgAGcO3eOd955h1q1auHl5UW7du3IysoqVrzZ2dn2PnOTOj8/P/t+f39/e4L3008/2d+biIjI9dI9eyIi4rLc3Nx4+eWXefXVV7l8+TKNGjXCy8uLhIQE6tWr5/CoUaMGAE2bNmXDhg3XLITy448/8uyzz9KtWzcaN26Ml5cXv/32W7FjrFOnDgcOHMBsNhMUFETjxo2ZMmUKZrOZffv28emnn2KxWFixYgXvv/8+w4cPL3ZfIiIiV1OyJyIiLu2hhx7C3d2d999/n4CAAMaMGcOoUaNYuHAhhw8f5qeffuK9995j4cKFAAwfPpyUlBQeeeQRtm3bxsGDB/n444/Zv38/APXr1+fjjz8mPj6eLVu20Ldv30JHAwtSpUoVmjZtai+8Mn/+fJYsWYKPjw8dO3bkL3/5C5988gnjxo3j3//+N9HR0dd/UURERFCyJyIiLs7Dw4Phw4fz97//nbS0NCZNmsTYsWOZNm0a0dHRdOnShRUrVhAVFQVASEgI33zzDampqbRv355WrVrx0Ucf2e/hmzt3LhcuXKBly5Y89thjPPvss9e99t20adMYM2YMP/30E7fddhsJCQkkJCRw7Ngxpk+fzvnz59m+fTt33XXXdV8PERGRXIbVarWWdRAiIiIV3cKFCxkxYgTPPvss/fv3p27duuTk5LB161amTZvGPffcw6hRo8o6TBERqUCU7ImIiNwgu3bt4rXXXuO///0vWVlZWCwWatWqxZNPPsmoUaMc1gsUERG5Xkr2REREbrDs7GxOnz6Nl5cXVapUKetwRESkglKyJyIiIiIiUgGpQIuIiIiIiEgFpGRPRERERESkAlKyJyIiIiIiUgEp2RMREREREamAlOyJiIiIiIhUQEr2REREREREKiAleyIiIiIiIhWQkj0REREREZEK6P8BObBROVYanhUAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } ], - "layout": "IPY_MODEL_8e989ddf9d274876a3ba06056e7147a1" - } + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "# Creating the plot\n", + "plt.figure(figsize=(10, 6))\n", + "plt.plot(X, OPENAI_RETRIEVAL, label='OAI Retrieval Only', marker='o')\n", + "plt.plot(X, OPEN_SOURCE_RETRIEVAL, label='OS Retrieval Only', marker='*')\n", + "plt.plot(X, OPEN_SOURCE_RETRIEVAL_PLUS_PRE_CE, label='OS + Pretrained CE', marker='^')\n", + "\n", + "plt.plot(X, OPEN_SOURCE_RETRIEVAL_PLUS_FT_CE, label='OS + Finetuned CE', marker='v')\n", + "plt.plot(X, OLD_CROSS_ENCODER, label='OAI + Pretrained CE', marker='s')\n", + "plt.plot(X, OPENAI_RETRIEVAL_PLUS_FT_CE, label='OAI + Finetuned CE', marker='d')\n", + "\n", + "# Adding titles and labels\n", + "plt.title('Comparing embedding models + pre-trained vs fine-tuned CE (all retrieved 50 results then re-ranked)')\n", + "plt.xlabel('Recall @')\n", + "plt.ylabel('Performance')\n", + "plt.xticks(X)\n", + "plt.yticks([i/100 for i in range(70, 101, 5)]) # Adjusting y-ticks to start from 0.75\n", + "\n", + "# Adding legend\n", + "plt.legend()\n", + "\n", + "# Show the plot\n", + "plt.grid(True)\n", + "# plt.show()\n", + "\n", + "plt.savefig('recall_at_k.png', dpi=1000)" + ] }, - "f78b642ffb784f9097e0cbf97c44b9bd": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "FloatProgressModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "ProgressView", - "bar_style": "success", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_4f4986d008434fc9912c496636b40b38", - "max": 36, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_348701c9256e4eb48b8ffb0d9c0d6c83", - "value": 36 - } + { + "cell_type": "code", + "execution_count": 181, + "id": "9oGQvj0xZAwo", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 275 + }, + "id": "9oGQvj0xZAwo", + "outputId": "b74b982f-5949-4efd-f26c-1af1220becf8" + }, + "outputs": [ + { + "data": { + "application/vnd.google.colaboratory.intrinsic+json": { + "summary": "{\n \"name\": \"results_df\",\n \"rows\": 6,\n \"fields\": [\n {\n \"column\": \"RECALL @\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 18,\n \"min\": 1,\n \"max\": 50,\n \"num_unique_values\": 6,\n \"samples\": [\n 1,\n 3,\n 50\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"OS_Retrieval_Only\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.16768726331934317,\n \"min\": 0.5017421602787456,\n \"max\": 0.9642857142857143,\n \"num_unique_values\": 6,\n \"samples\": [\n 0.5017421602787456,\n 0.7726480836236934,\n 0.9642857142857143\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"OS_Retrieval_Plus_Finetuned_CE\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.1242572741439965,\n \"min\": 0.6428571428571429,\n \"max\": 0.9642857142857143,\n \"num_unique_values\": 6,\n \"samples\": [\n 0.6428571428571429,\n 0.8963414634146342,\n 0.9642857142857143\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"OAI_Retrieval_Only\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.08191797444458304,\n \"min\": 0.7534843205574913,\n \"max\": 0.9782229965156795,\n \"num_unique_values\": 6,\n \"samples\": [\n 0.7534843205574913,\n 0.8789198606271778,\n 0.9782229965156795\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"OAI_Retrieval_Plus_Pretrained_CE\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.053339701651705686,\n \"min\": 0.8336236933797909,\n \"max\": 0.9773519163763066,\n \"num_unique_values\": 6,\n \"samples\": [\n 0.8336236933797909,\n 0.9207317073170732,\n 0.9773519163763066\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"OAI_Retrieval_Plus_Finetuned_CE\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.03185542173744024,\n \"min\": 0.8902439024390244,\n \"max\": 0.9782229965156795,\n \"num_unique_values\": 6,\n \"samples\": [\n 0.8902439024390244,\n 0.9433797909407665,\n 0.9782229965156795\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}", + "type": "dataframe" + }, + "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", + " \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", + "
RECALL @OS_Retrieval_OnlyOS_Retrieval_Plus_Finetuned_CEOAI_Retrieval_OnlyOAI_Retrieval_Plus_Pretrained_CEOAI_Retrieval_Plus_Finetuned_CE
010.5017420.6428570.7534840.8336240.890244
130.7726480.8963410.8789200.9207320.943380
250.8257840.9337980.9128920.9372820.949477
3100.8780490.9503480.9346690.9529620.961672
4250.9346690.9608010.9651570.9756100.972997
5500.9642860.9642860.9782230.9773520.978223
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ], + "text/plain": [ + " RECALL @ OS_Retrieval_Only OS_Retrieval_Plus_Finetuned_CE \\\n", + "0 1 0.501742 0.642857 \n", + "1 3 0.772648 0.896341 \n", + "2 5 0.825784 0.933798 \n", + "3 10 0.878049 0.950348 \n", + "4 25 0.934669 0.960801 \n", + "5 50 0.964286 0.964286 \n", + "\n", + " OAI_Retrieval_Only OAI_Retrieval_Plus_Pretrained_CE \\\n", + "0 0.753484 0.833624 \n", + "1 0.878920 0.920732 \n", + "2 0.912892 0.937282 \n", + "3 0.934669 0.952962 \n", + "4 0.965157 0.975610 \n", + "5 0.978223 0.977352 \n", + "\n", + " OAI_Retrieval_Plus_Finetuned_CE \n", + "0 0.890244 \n", + "1 0.943380 \n", + "2 0.949477 \n", + "3 0.961672 \n", + "4 0.972997 \n", + "5 0.978223 " + ] + }, + "execution_count": 181, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# show results as a table\n", + "\n", + "results_df = pd.DataFrame({'RECALL @': [1, 3, 5, 10, 25, 50], 'OS_Retrieval_Only': OPEN_SOURCE_RETRIEVAL, 'OS_Retrieval_Plus_Finetuned_CE': OPEN_SOURCE_RETRIEVAL_PLUS_FT_CE , 'OAI_Retrieval_Only': OPENAI_RETRIEVAL , 'OAI_Retrieval_Plus_Pretrained_CE': OLD_CROSS_ENCODER, 'OAI_Retrieval_Plus_Finetuned_CE': OPENAI_RETRIEVAL_PLUS_FT_CE})\n", + "results_df.sort_values(by='RECALL @')" + ] }, - "fa6089718c574ee19bd3c378e356ea6b": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_2c83393c2b7745889765d8efb4890763", - "placeholder": "​", - "style": "IPY_MODEL_6854fe2978954c7b9e30202a6ea34b57", - "value": "Batches: 100%" - } + { + "cell_type": "code", + "execution_count": 1, + "id": "OFno8WyIZDR6", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 507 + }, + "id": "OFno8WyIZDR6", + "outputId": "e08f4366-bd16-4aaa-ba5f-bc1f3676d0e5" + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxYAAAHqCAYAAACZcdjsAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAruJJREFUeJzs3XVYVNn/B/D3gAICUoKIgGKttQrKGojYirF2F4q1rrlid2O77qqra3d3d3fi2q0YixJKKTmf3x/85q4jGDik3/freXgeOHPuvecyZ+7czz2lEhEBERERERGRDvTSuwBERERERJT5MbAgIiIiIiKdMbAgIiIiIiKdMbAgIiIiIiKdMbAgIiIiIiKdMbAgIiIiIiKdMbAgIiIiIiKdMbAgIiIiIiKdMbAgIiIiIiKdMbAgov8pKpUKY8aMUf5etmwZVCoVnjx5km5louSrUqUKqlSpopX26tUrNGvWDDly5IBKpcKsWbMAAPfv30etWrVgbm4OlUqFbdu2pXl5vzdPnjyBSqXC9OnTU/1YY8aMgUqlSvXjEJHuGFgQUYrR3KRrfrJkyQJ7e3t07NgRL168SO/i6SwuLg7v3r37qrzz5s1D8+bNkSdPHqhUKnTs2PGbjrlnzx6oVCrkzp0barX6m/aR0XXs2FGr3piamiJ//vxo1qwZNm/e/NXn3a9fP+zfvx9Dhw7FypUrUbt2bQBAhw4dcP36dUycOBErV67ETz/9lJqnoxNfX9+vDnw0N/cqlQoTJkxIMk/btm2V/+m32LNnj1YgTkT0OVnSuwBE9P0ZN24c8uXLh6ioKJw7dw7Lli3DqVOncOPGDRgZGaV38ZLlxYsXmDlzJrZv345Hjx5BRGBpaYmaNWvi119/TfTUXGPKlCkIDw9H2bJl8e+//37z8VevXg0nJyc8efIER44cQY0aNb55XxmZoaEhFi1aBAB4//49nj59ip07d6JZs2aoUqUKtm/fDjMzMyX/gQMHEu3jyJEjaNiwIQYMGKCkvX//HmfPnsXw4cPRq1ev1D8RHfn6+qJZs2Zo1KjRV29jZGSEtWvXYsSIEVrpkZGR2L59u06fuT179mDu3LkMLojoq7DFgohSXJ06ddCuXTt06dIFixYtwoABA/Dw4UPs2LEjvYuWLMuWLUOhQoWwY8cOtG7dGhs3bsTOnTsxYcIEhIeHo3r16ujUqRNiY2MTbXv8+HEEBQVh7969MDQ0/Kbja24MfXx8UKpUKaxevVrXU1LExcUhJiYmxfanqyxZsqBdu3Zo164dunbtigkTJuDatWuYNGkSjh07hq5du2rlNzAwgIGBgVba69evYWFhoZUWGBgIAInSdREVFZWhWo/q1q2LW7du4dq1a1rp27dvR0xMDGrWrJlOJSOi/zUMLIgo1Xl4eAAAHj58qJV+584dNGvWDFZWVjAyMsJPP/2UZPDx9u1b9OvXD05OTjA0NISDgwO8vLwQFBQEAIiJicGoUaPg6uoKc3NzmJiYwMPDA0ePHv3mMi9atAidO3fGmDFjcOfOHYwfPx5NmzbFzz//jB49emDPnj04ffo0jhw5Ai8vr0Tb582bV+d+4Vu3bsX79+/RvHlztGrVClu2bEFUVFSifFFRURgzZgx++OEHGBkZwc7ODk2aNFH+3x/2h581axYKFCgAQ0ND3Lp1C0DCk34PDw+YmJjAwsICDRs2xO3bt7WOER4ejt9++015D3LmzImaNWviypUrSp779++jadOmyJUrF4yMjODg4IBWrVohNDT0m/8HQ4YMQa1atbBx40bcu3dPSf9wjIWmC56IYO7cuUr3oDFjxiBv3rwAgIEDB0KlUsHJyUnZx4sXL9CpUyfY2trC0NAQxYsXx5IlS7SOf+zYMahUKqxbtw4jRoyAvb09jI2NERYWBgA4f/48ateuDXNzcxgbG6Ny5co4ffq01j40YwQePHiAjh07wsLCAubm5vD29tbqWqdSqRAZGYnly5cr5/A1Xejc3NyQL18+rFmzRit99erVqF27NqysrJLcbu/evcr7nj17dtSrVw83b95UXu/YsSPmzp2rlE3z87EFCxYodapMmTK4ePFiojxfU8cA4NSpUyhTpgyMjIxQoEAB/P3330mW/eDBg6hYsSIsLCxgamqKwoULY9iwYZ/+JxFRmmBXKCJKdZqB0ZaWlkrazZs34e7uDnt7ewwZMgQmJibYsGEDGjVqhM2bN6Nx48YAgIiICHh4eOD27dvo1KkTSpcujaCgIOzYsQPPnz+HtbU1wsLCsGjRIrRu3Rpdu3ZFeHg4Fi9eDE9PT1y4cAEuLi7JKu+DBw/Qq1cvLF68WOvGLiIiAsbGxtDT00NoaChKlSqFEydOwNXVFevXr0fLli11/VdpWb16NapWrYpcuXKhVatWGDJkCHbu3InmzZsreeLj4/Hzzz/j8OHDaNWqFfr27Yvw8HAcPHgQN27cQIECBZS8S5cuRVRUFLp16wZDQ0NYWVnh0KFDqFOnDvLnz48xY8bg/fv3mD17Ntzd3XHlyhXlRrx79+7YtGkTevXqhWLFiiE4OBinTp3C7du3Ubp0acTExMDT0xPR0dHo3bs3cuXKhRcvXmDXrl14+/YtzM3Nv/n/0L59exw4cAAHDx7EDz/8kOj1SpUqYeXKlWjfvj1q1qypBHolS5aEhYUF+vXrh9atW6Nu3brKWINXr16hfPnyUKlU6NWrF2xsbLB371507twZYWFh+O2337SOMX78eBgYGGDAgAGIjo6GgYEBjhw5gjp16sDV1RWjR4+Gnp4eli5dimrVquHkyZMoW7as1j5atGiBfPnyYdKkSbhy5QoWLVqEnDlzYsqUKQCAlStXokuXLihbtiy6desGAFrv3+e0bt0aq1atwuTJk6FSqRAUFIQDBw5g5cqV2LdvX6L8K1euRIcOHeDp6YkpU6bg3bt3mDdvHipWrIirV6/CyckJv/zyC16+fImDBw9i5cqVSR53zZo1CA8Pxy+//AKVSoWpU6eiSZMmePToEbJmzQoAX13Hrl+/jlq1asHGxgZjxoxBXFwcRo8eDVtbW61j3rx5Ez///DNKliyJcePGwdDQEA8ePEgU0BFROhAiohSydOlSASCHDh2SwMBAefbsmWzatElsbGzE0NBQnj17puStXr26lChRQqKiopQ0tVotFSpUkEKFCilpo0aNEgCyZcuWRMdTq9UiIhIXFyfR0dFar71580ZsbW2lU6dOWukAZPTo0YnK/PjxYyWtY8eO0qhRI+XvO3fuiKurqwAQMzMzmTp1qlSuXFmWLl0qIiJ//PGHVKhQ4ZP/FxMTE+nQocMnX0/Kq1evJEuWLLJw4UIlrUKFCtKwYUOtfEuWLBEAMnPmzET70Px/Hj9+rJT99evXWnlcXFwkZ86cEhwcrKRdu3ZN9PT0xMvLS0kzNzeXnj17frK8V69eFQCycePGZJ2niEiHDh3ExMTki/vu16+fkla5cmWpXLmyVj4AicqoOfdp06ZppXfu3Fns7OwkKChIK71Vq1Zibm4u7969ExGRo0ePCgDJnz+/kiaS8L8tVKiQeHp6Kv9nEZF3795Jvnz5pGbNmkra6NGjBUCiuti4cWPJkSOHVlpy6sqH53bjxg0BICdPnhQRkblz54qpqalERkYm+v+Gh4eLhYWFdO3aVWt/AQEBYm5urpXes2dPSepWQXPsHDlySEhIiJK+fft2ASA7d+5U0r62jjVq1EiMjIzk6dOnStqtW7dEX19fqwy///67AJDAwMCv+j8RUdphVygiSnE1atSAjY0NHB0d0axZM5iYmGDHjh1wcHAAAISEhODIkSNo0aIFwsPDERQUhKCgIAQHB8PT0xP3799XZpHavHkznJ2dlRaMD2m6Zejr6yv97dVqNUJCQhAXF4effvpJq6vO14iPj8e2bdvQp08fZX+tWrVCdHQ0Vq1ahblz52LZsmVa3T0aNWqE8+fPJ9lN6VutW7cOenp6aNq0qZLWunVr7N27F2/evFHSNm/eDGtra/Tu3TvRPj7uttK0aVPY2Ngof//777/w8/NDx44dtbrLlCxZEjVr1sSePXuUNAsLC5w/fx4vX75MsryaFon9+/d/9cxZX0vTyhAeHp4i+xMRbN68GfXr14eIKPUvKCgInp6eCA0NTVRvOnTogGzZsil/+/n54f79+2jTpg2Cg4OV7SMjI1G9enWcOHEi0TiM7t27a/3t4eGB4OBgpVuVLooXL46SJUti7dq1ABJaEho2bAhjY+NEeQ8ePIi3b9+idevWWueur6+PcuXKJasLYcuWLbVaIjXdHh89egTg6+tYfHw89u/fj0aNGiFPnjxKvqJFi8LT01PrmJrxMtu3b89QY12IiGMsiCgVzJ07FwcPHsSmTZtQt25dBAUFaQ1gfvDgAUQEI0eOhI2NjdbP6NGjASQMxAUSxmX8+OOPXzzm8uXLUbJkSRgZGSFHjhywsbHB7t27k92//8GDBwgPD0elSpUAAJcuXcK1a9ewa9cutG3bFu3atcOuXbvw/v17ZRtbW1vEx8cjJCQkWcf6nFWrVqFs2bIIDg7GgwcP8ODBA5QqVQoxMTHYuHGjku/hw4coXLgwsmT5cs/WfPnyaf399OlTAEDhwoUT5S1atKhyowwAU6dOxY0bN+Do6IiyZctizJgxys2jZt8+Pj5YtGgRrK2t4enpiblz5+o0vkIjIiICAJA9e3ad9wUkDOh++/YtFixYkKj+eXt7A/iv/ml8/L+7f/8+gISA4+N9LFq0CNHR0YnO/cMbZuC/roEfBoq6aNOmDTZu3IgHDx7gzJkzaNOmTZL5NGWvVq1aorIfOHAg0bl/zpfO6WvrWGBgIN6/f49ChQolyvfxti1btoS7uzu6dOkCW1tbtGrVChs2bGCQQZQBcIwFEaW4smXLKmsFNGrUCBUrVkSbNm1w9+5dmJqaKjcAAwYMSPQ0UqNgwYJffbxVq1ahY8eOaNSoEQYOHIicOXNCX18fkyZNSjRg/EuCg4OV7YGE8SE2NjbKIGAg4SbT2tpa+fvZs2fQ09NLsZmH7t+/r7SIJHWjtXr1aqUPfnJ8+MQ9uVq0aAEPDw9s3boVBw4cwLRp0zBlyhRs2bIFderUAQDMmDEDHTt2xPbt23HgwAH06dMHkyZNwrlz55TWqm9x48YNAMmrE5+jqX/t2rVDhw4dksxTsmRJrb8//t9p9jFt2rRPjuH5eO0ITZ36mIh8scxfo3Xr1hg6dCi6du2KHDlyoFatWknm05R95cqVyJUrV6LXvyZI1Ujtc0pKtmzZcOLECRw9ehS7d+/Gvn37sH79elSrVg0HDhz4ZJmIKPUxsCCiVKW5wa9atSrmzJmDIUOGIH/+/ACArFmzfnFdhgIFCig3lp+yadMm5M+fH1u2bNHq/qNp/UgOMzMzra4puXLlQnBwMN6+fasEDm/fvtVqnVi4cCEqVKiQZLeTb7F69WpkzZoVK1euTHSTdOrUKfz555/w9/dHnjx5UKBAAZw/fx6xsbHKYNmvpQmW7t69m+i1O3fuwNraGiYmJkqanZ0devTogR49euD169coXbo0Jk6cqAQWAFCiRAmUKFECI0aMwJkzZ+Du7o758+d/cgG3r7Fy5UqoVKoUmzbVxsYG2bNnR3x8/DevC6IZVG1mZpaia4voMpNYnjx54O7ujmPHjuHXX3/9ZICgKXvOnDm/WHZdZzb72jpmZGSEbNmyKa0pH0pqWz09PVSvXh3Vq1fHzJkz4evri+HDh+Po0aPf7VovRJkBu0IRUaqrUqUKypYti1mzZiEqKgo5c+ZElSpV8Pfffye5eJxm7QEgYVzAtWvXsHXr1kT5NE9FNTffHz4lPX/+PM6ePZvssubPnx9xcXFKMFOmTBnkypULXl5euHnzJm7dugUvLy+o1Wo8f/4cI0aMwKxZszBp0qRkH+tTVq9eDQ8PD7Rs2RLNmjXT+hk4cCAAKH3pmzZtiqCgIMyZMyfRfr701NjOzg4uLi5Yvnw53r59q6TfuHEDBw4cQN26dQEk9H//uFtPzpw5kTt3bkRHRwMAwsLCEBcXp5WnRIkS0NPTU/J8i8mTJ+PAgQNo2bJlkq0330JfXx9NmzbF5s2bkwxaP6x/n+Lq6ooCBQpg+vTpSlet5O4jKSYmJlrvRXJNmDABo0ePTnLMjYanpyfMzMzg6+ub5BosH5ZdE1h+a5m+to7p6+vD09MT27Ztg7+/v5Lv9u3b2L9/v9Y+k+pyqGk10qWuEZHu2GJBRGli4MCBaN68OZYtW4bu3btj7ty5qFixIkqUKIGuXbsif/78ePXqFc6ePYvnz58ri30NHDgQmzZtQvPmzdGpUye4uroiJCQEO3bswPz58+Hs7Iyff/4ZW7ZsQePGjVGvXj08fvwY8+fPR7FixZK86fscY2NjVK1aFYsWLcKsWbOQLVs2LFmyBC1atFDGerRu3Rru7u4YOXIkihYtij179qBixYpa+9m5c6dyDrGxsfjnn3+Up/YNGjRI1NVG4/z588p0t0mxt7dH6dKlsXr1agwePBheXl5YsWIFfHx8cOHCBXh4eCAyMhKHDh1Cjx490LBhw8+e77Rp01CnTh24ubmhc+fOylSg5ubmymrL4eHhcHBwQLNmzeDs7AxTU1McOnQIFy9exIwZMwAkrFPQq1cvNG/eHD/88APi4uKUFpcPB6B/SlxcHFatWgUgYV2Op0+fYseOHfjnn39QtWpVLFiw4Iv7SI7Jkyfj6NGjKFeuHLp27YpixYohJCQEV65cwaFDh744XkZPTw+LFi1CnTp1ULx4cXh7e8Pe3h4vXrzA0aNHYWZmhp07dya7XK6urjh06BBmzpyJ3LlzI1++fChXrtxXb1+5cmVUrlz5s3nMzMwwb948tG/fHqVLl0arVq1gY2MDf39/7N69G+7u7kqg6urqCgDo06cPPD09oa+vj1atWiXrnL6mjgHA2LFjsW/fPnh4eKBHjx6Ii4vD7NmzUbx4cfzzzz9KvnHjxuHEiROoV68e8ubNi9evX+Ovv/6Cg4NDos8hEaWx9JuQioi+N5qpWy9evJjotfj4eClQoIAUKFBA4uLiRETk4cOH4uXlJbly5ZKsWbOKvb29/Pzzz7Jp0yatbYODg6VXr15ib28vBgYG4uDgIB06dFCmClWr1eLr6yt58+YVQ0NDKVWqlOzatUs6dOggefPm1doXvmK62aNHj4qBgYGcP39eSQsLC5OTJ0/KvXv3RCRhusyHDx9+8n/RoUMHAZDkj2aa2qT07t1bAHx232PGjBEAcu3aNRFJmOJ0+PDhki9fPsmaNavkypVLmjVrpuzjU1Ouahw6dEjc3d0lW7ZsYmZmJvXr15dbt24pr0dHR8vAgQPF2dlZsmfPLiYmJuLs7Cx//fWXkufRo0fSqVMnKVCggBgZGYmVlZVUrVpVDh069Mnz+NT/ytjYWJycnKRp06ayadMmiY+PT7SNrtPNiiRM6duzZ09xdHRU/m/Vq1eXBQsWKHk0081+ahrdq1evSpMmTSRHjhxiaGgoefPmlRYtWsjhw4eVPJrpZj+eHjWpunfnzh2pVKmSZMuWTQB8durZL72vGp+azvfo0aPi6ekp5ubmYmRkJAUKFJCOHTvKpUuXlDxxcXHSu3dvsbGxEZVKpUz7+rljf/wZE/lyHdM4fvy4uLq6ioGBgeTPn1/mz5+v/P80Dh8+LA0bNpTcuXOLgYGB5M6dW1q3bq18Noko/ahEUnGEFRFRJtWzZ09s2rQJW7duRYUKFZLMc/LkSRQoUAC5c+dO49IRERFlPBxjQUSUhD/++AP169eHh4cH2rVrh507d+LBgwd4/Pgxdu3ahVatWqFq1apJjv0gIiL6X8QWCyKiz9i+fTt8fX1x8eJFZTC0SqWCh4cHRo0aherVq6dzCYmIiDIGBhZERF8hMDAQjx49glqtRsGCBbVWsCYiIqJ07gp14sQJ1K9fH7lz54ZKpcK2bdu+uM2xY8dQunRpGBoaomDBgli2bFmql5OIyMbGBuXKlYObmxuDCiIioiSka2ARGRkJZ2dnzJ0796vyP378GPXq1UPVqlXh5+eH3377DV26dEk0xzUREREREaWtDNMVSqVSYevWrWjUqNEn8wwePBi7d+/WWtCoVatWePv2Lfbt25cGpSQiIiIioqRkqgXyzp49ixo1amileXp64rfffvvkNtHR0VorcarVaoSEhCBHjhxQqVSpVVQiIiIiokxPRBAeHo7cuXNDT+/znZ0yVWAREBAAW1tbrTRbW1uEhYXh/fv3yJYtW6JtJk2ahLFjx6ZVEYmIiIiIvjvPnj2Dg4PDZ/NkqsDiWwwdOhQ+Pj7K36GhociTJw+ePXsGMzOzdCwZEREREVHGFhYWBkdHR2TPnv2LeTNVYJErVy68evVKK+3Vq1cwMzNLsrUCAAwNDWFoaJgo3czMjIEFEREREdFX+JohBJlq5W03NzccPnxYK+3gwYNwc3NLpxIRERERERGQzoFFREQE/Pz84OfnByBhOlk/Pz/4+/sDSOjG5OXlpeTv3r07Hj16hEGDBuHOnTv466+/sGHDBvTr1y89ik9ERERERP8vXQOLS5cuoVSpUihVqhQAwMfHB6VKlcKoUaMAAP/++68SZABAvnz5sHv3bhw8eBDOzs6YMWMGFi1aBE9Pz3QpPxERERERJcgw61iklbCwMJibmyM0NJRjLIiIiIiIPiM5986ZaowFERERERFlTAwsiIiIiIhIZwwsiIiIiIhIZwwsiIiIiIhIZwwsiIiIiIhIZwwsiIiIiIhIZwwsiIiIiIhIZwwsiIiIiIhIZwwsiIiIiIhIZwwsiIiIiIhIZwwsiIiIiIhIZwwsiIiIiIhIZwwsiIiIiIhIZwwsiIiIiIhIZwwsiIiIiIhIZwwsiIiIiIhIZwwsiIiIiCjdxcbGolevXrC0tISVlRV69+6NuLi4JPO+ePECjRo1Qo4cOWBtbY0WLVogMDBQef3hw4eoU6cOLC0tYW9vj6lTp2ptHxYWhjZt2sDMzAy2trYYP358qp7b/woGFkRERESU7iZMmIBTp07h1q1buHnzJk6ePAlfX98k8/bs2RMA8PTpUzx+/BhRUVHo06cPACA+Ph4NGjRA6dKl8fr1axw5cgRz5szBmjVrlO179+6NkJAQ+Pv74+TJk1i4cCFWrFiR+if5nWNgQURERETpbsmSJRgxYgTs7OxgZ2eH4cOHY/HixUnmffToEVq0aAFTU1Nkz54dLVu2xPXr1wEAd+/exd27dzF69GhkzZoVhQsXRufOnbFgwQIAwLt377Bu3TpMmDABFhYW+OGHH9C7d+9PHou+HgMLIiIiIkpXb968wfPnz+Hi4qKkubi4wN/fH6GhoYny+/j4YOPGjQgNDcXbt2+xdu1a1K9fHwCgVqsBACKi5Fer1fjnn38AJAQeMTExiY6leZ2+HQMLIiIiIkpXERERAAALCwslTfN7eHh4ovzu7u54/fq1Mh7jzZs3GDp0KACgcOHCcHJywqhRoxAdHY2bN29iyZIlCAsLU45lYmKCLFmyaB0rqeNQ8jCwICIiIqJ0ZWpqCgBarROa37Nnz66VV61Wo2bNmnB3d0dERAQiIiLg7u6OWrVqAQCyZs2K7du34+rVq7C3t0fbtm3h7e2NHDlyKMd69+6d1sDw0NDQRMeh5GNgQURERETpytLSEg4ODvDz81PS/Pz84OjoCHNzc628ISEhePr0Kfr06QNjY2MYGxujd+/eOH/+PIKCggAAxYsXx4EDBxAUFAQ/Pz9ER0ejcuXKABJaNLJmzYpr165pHatEiRKpf6LfOQYWRERERJTuvL29MXHiRAQEBCAgIAC+vr7o0qVLonzW1tYoWLAg5s6di6ioKERFRWHu3LlwcHCAtbU1AOCff/5BZGQkYmJisGXLFmVgOAAYGxujZcuWGDlyJEJDQ3H//n3Mnj07yWNR8jCwICIiIqJ0N3LkSLi5uaFo0aIoWrQo3N3dMWzYMABA9+7d0b17dyXv9u3bceXKFdjb28POzg4XLlzAjh07lNc3bNiAPHnywNLSEtOnT8e2bdtQsmRJ5fU5c+bA3NwcDg4OcHd3R+fOneHl5ZV2J/udUsmHQ+b/B4SFhcHc3ByhoaEwMzNL7+IQEREREWVYybl3ZosFERERERHpjIEFERERERHpjIEFERERERHpLMuXsxARERHR92Dy1aD0LgIl05BS1uldhK/GFgsiIiIiItIZAwsiIiIiItIZAwsiIiIiItIZAwsiIiIiItIZAwsiIiJKE7GxsejVqxcsLS1hZWWF3r17Iy4uLsm8L168QKNGjZAjRw5YW1ujRYsWCAwMVF7v3bs3HB0dYWZmBnt7e/z222+IiYlJtJ9Xr17BysoKLi4uqXVaRPT/GFgQERFRmpgwYQJOnTqFW7du4ebNmzh58iR8fX2TzNuzZ08AwNOnT/H48WNERUWhT58+yus9evTAnTt3EBYWhmvXruHatWuYOnVqov306tULpUqVSp0TIiItDCyIiIgoTSxZsgQjRoyAnZ0d7OzsMHz4cCxevDjJvI8ePUKLFi1gamqK7Nmzo2XLlrh+/bryetGiRWFiYgIAEBHo6enh/v37WvvYvn07QkJC0L59+9Q7KSJSMLAgIiKiVPfmzRs8f/5cq0uSi4sL/P39ERoamii/j48PNm7ciNDQULx9+xZr165F/fr1tfJMnjwZpqamyJkzJ65du4bevXsrr4WGhsLHxwfz589PtXMiIm0MLIiIiCjVRUREAAAsLCyUNM3v4eHhifK7u7vj9evXyniMN2/eYOjQoVp5hgwZgoiICNy6dQvdu3dHrly5lNcGDRqEjh07olChQil/MkSUJAYWRERElOpMTU0BQKt1QvN79uzZtfKq1WrUrFkT7u7uiIiIQEREBNzd3VGrVq0k9120aFE4OzujY8eOAICTJ0/i9OnTGDx4cCqcCRF9Spb0LgARERF9/ywtLeHg4AA/Pz8UKFAAAODn5wdHR0eYm5tr5Q0JCcHTp0/Rp08fGBsbA0iYBWratGkICgqCtbV1ov3HxsYqYywOHz6MR48eIXfu3ACA6OhovH//HtbW1rh+/Trs7OxS81SJ/mexxYKIiIjShLe3NyZOnIiAgAAEBATA19cXXbp0SZTP2toaBQsWxNy5cxEVFYWoqCjMnTsXDg4OsLa2RkREBJYuXYq3b99CRHD9+nVMmDABnp6eABLGZ9y7dw9+fn7w8/PDuHHjULhwYfj5+SFnzpxpfdpE/zPYYkFERERpYuTIkQgODkbRokUBAO3atcOwYcMAAN27dwcAZbD19u3b0a9fP9jb20OtVqNUqVLYsWMHAEClUmHNmjUYMGAAoqOjkTNnTjRt2hRjx44FAJiZmcHMzEw5rqWlJbJmzQoHB4c0O1ei/0UqEZH0LkRaCgsLg7m5OUJDQ7UuOkRERETfu8lXg9K7CJRMQ0ol7vqXlpJz78yuUEREREREpDMGFkREREREpDMGFkREREREpDMGFkREREREpDPOCkVERPQd4eDczCe9B+cSpRS2WBARERERkc4YWBARERERkc4YWBARERERkc4YWBARERERkc4YWBARERERkc7SPbCYO3cunJycYGRkhHLlyuHChQufzT9r1iwULlwY2bJlg6OjI/r164eoqKg0Ki0RERERESUlXQOL9evXw8fHB6NHj8aVK1fg7OwMT09PvH79Osn8a9aswZAhQzB69Gjcvn0bixcvxvr16zFs2LA0LjkREREREX0oXQOLmTNnomvXrvD29kaxYsUwf/58GBsbY8mSJUnmP3PmDNzd3dGmTRs4OTmhVq1aaN269RdbOYiIiIiIKHWlW2ARExODy5cvo0aNGv8VRk8PNWrUwNmzZ5PcpkKFCrh8+bISSDx69Ah79uxB3bp106TMRERERESUtHRbeTsoKAjx8fGwtbXVSre1tcWdO3eS3KZNmzYICgpCxYoVISKIi4tD9+7dP9sVKjo6GtHR0crfYWFhKXMCRERERESkSPfB28lx7Ngx+Pr64q+//sKVK1ewZcsW7N69G+PHj//kNpMmTYK5ubny4+jomIYlJiIiIiL635BugYW1tTX09fXx6tUrrfRXr14hV65cSW4zcuRItG/fHl26dEGJEiXQuHFj+Pr6YtKkSVCr1UluM3ToUISGhio/z549S/FzISKiBLGxsejVqxcsLS1hZWWF3r17Iy4uLsm8pqamWj9Zs2ZFyZIlldc7duwIAwMDrTwfdpXt3bs3HB0dYWZmBnt7e/z222+IiYlJ9XMkIqKkpVtgYWBgAFdXVxw+fFhJU6vVOHz4MNzc3JLc5t27d9DT0y6yvr4+AEBEktzG0NAQZmZmWj9ERJQ6JkyYgFOnTuHWrVu4efMmTp48CV9f3yTzRkREaP0ULVoUrVq10srTo0cPrTwffj/06NEDd+7cQVhYGK5du4Zr165h6tSpqXp+RET0aenaFcrHxwcLFy7E8uXLcfv2bfz666+IjIyEt7c3AMDLywtDhw5V8tevXx/z5s3DunXr8PjxYxw8eBAjR45E/fr1lQCDiIjSz5IlSzBixAjY2dnBzs4Ow4cPx+LFi7+43YULF3Dr1i107Njxq49VtGhRmJiYAEh4uKSnp4f79+9/a9GJiEhH6TZ4GwBatmyJwMBAjBo1CgEBAXBxccG+ffuUAd3+/v5aLRQjRoyASqXCiBEj8OLFC9jY2KB+/fqYOHFiep0CERH9vzdv3uD58+dwcXFR0lxcXODv74/Q0FCYm5t/ctvFixejTp06yJ07t1b6ihUrsGLFCtjZ2aFTp07o16+f1vfC5MmTMWHCBERGRiJHjhyYMmVKip8XERF9HZV8qg/RdyosLAzm5uYIDQ1ltygiohT07Nkz5MmTB4GBgbC2tgYABAYGImfOnHj27BkcHByS3C4yMhK5c+fGihUr0LBhQyX9ypUrcHR0hJWVFS5evIgWLVqgX79+6NevX6J93L59G6tXr0b37t0/eZz/FZOvBqV3ESiZhpSyTrNjsX5kPmlZP5KSnHvnTDUrFBERZVympqYAgNDQUCVN83v27Nk/ud3GjRthbGyMevXqaaWXLl0aNjY20NfXR/ny5TFkyBCsX78+yX0ULVoUzs7OyepKRUREKYuBBRERpQhLS0s4ODjAz89PSfPz84Ojo+Nnu0EtWrQIHTp0QJYsn++d+/HkHR+LjY3lGAsionTEwIKIiFKMt7c3Jk6ciICAAAQEBMDX1xddunT5ZP67d+/izJkz6Ny5c6LXNmzYgLCwMIgILl26hMmTJ6Np06YAEmaUWrp0Kd6+fQsRwfXr1zFhwgR4enqm2rkREdHnpevgbSIi+r6MHDkSwcHBKFq0KACgXbt2GDZsGACge/fuAID58+cr+RcvXgwPDw8UKlQo0b7mzJmDbt26IS4uDvb29ujRowf69+8PAFCpVFizZg0GDBiA6Oho5MyZE02bNsXYsWNT+xSJiOgTOHibiIjoO8LBuZkPB2/T53DwNhERERER/U9hYEFERERERDpjYEFERERERDpjYEFERERERDrjrFBERJkMB19mPuk9+JKIKC2wxYKIiIiIiHTGwIKIiIiIiHTGwIKIiIiIiHTGwIKIiIiIiHTGwIKIiIiIiHTGwIKIiIiIiHTGwIKIiIiIiHTGwIKIiIiIiHTGwIKIiIiIiHTGwIKIiIiIiHTGwIKIiIiIiHTGwIKIiIiIiHTGwIKIiIiIiHTGwIKIiIiIiHTGwIKIiIiIiHTGwIKIiIiIiHTGwIKIiIiIiHTGwIKIiIiIiHTGwIKIiIiIiHTGwIKIiIiIiHTGwIKIiIiIiHTGwIKIkiU2Nha9evWCpaUlrKys0Lt3b8TFxX0y/44dO+Di4gITExPkzp0b8+fPT5Tn1atXsLKygouLi5IWHR2NKlWqIGfOnDAzM0ORIkWwYMGC1DglIiIiSgEMLIgoWSZMmIBTp07h1q1buHnzJk6ePAlfX98k8+7btw89evTArFmzEBYWhps3b6JKlSqJ8vXq1QulSpXSSsuSJQtmz56Nly9fIiwsDFu2bMHIkSNx8uTJ1DgtIiIi0hEDCyJKliVLlmDEiBGws7ODnZ0dhg8fjsWLFyeZd+TIkRg1ahSqVKkCfX19WFpaokiRIlp5tm/fjpCQELRv314rXV9fHyVKlECWLFkAACqVCiqVCg8ePEidEyMiIiKdMLAgoq/25s0bPH/+XKvLkouLC/z9/REaGqqVNzIyEpcvX8aLFy/www8/IFeuXGjevDn+/fdfJU9oaCh8fHyS7B6l8fPPP8PIyAjFihWDra0tGjdunOLnRURERLpjYEFEXy0iIgIAYGFhoaRpfg8PD9fK++bNG4gItm3bhoMHD+LBgwcwNDREu3btlDyDBg1Cx44dUahQoU8ec9euXYiMjMSxY8fQtGlTZMuWLeVOiIiIiFIMAwsi+mqmpqYAoNU6ofk9e/bsSebt06cP8ubNC1NTU4wdOxZHjx5FZGQkTp48idOnT2Pw4MFfPK6+vj4qV66MV69eYdq0aSl1OkRERJSCsqR3AYgo87C0tISDgwP8/PxQoEABAICfnx8cHR1hbm6uldfCwgJ58uRJcj8igsOHD+PRo0fInTs3gIRZoN6/fw9ra2tcv34ddnZ2ibaLjY3F/fv3U/isiIiIKCWwxYKIksXb2xsTJ05EQEAAAgIC4Ovriy5duiSZt1u3bpg9ezZevHiB9+/fY9y4cahevTpMTU3h4+ODe/fuwc/PD35+fhg3bhwKFy4MPz8/5MyZE35+fjh48CDev3+PuLg47N69G6tXr4anp2canzERERF9DbZYEFGyjBw5EsHBwShatCgAoF27dhg2bBgAoHv37gCgDMYeMmQIQkJC4OzsDACoWrUqVq5cCQAwMzODmZmZsl9LS0tkzZoVDg4OAIC4uDgMGzYMd+/ehUqlgpOTE2bOnIk2bdqkzYkSERFRsqhERNK7EGkpLCwM5ubmCA0N1bqpISLKLCZfDUrvIlAyDSllnWbHYv3IfFg/6HPSsn4kJTn3zuwKRUREREREOmNgQUREREREOmNgQUREREREOmNgQUREREREOuOsUEQZEAfXZT7pPbiOiIgovbHFgoiIiIiIdMbAgoiIiIiIdMbAgoiIiIiIdMbAgoiIiIiIdMbAgoiIiIiIdMbAgoiIiIiIdMbAgoiIiIiIdMbAgoiIiIiIdMbAgoiIiIiIdJbugcXcuXPh5OQEIyMjlCtXDhcuXPhs/rdv36Jnz56ws7ODoaEhfvjhB+zZsyeNSktEREREREnJkp4HX79+PXx8fDB//nyUK1cOs2bNgqenJ+7evYucOXMmyh8TE4OaNWsiZ86c2LRpE+zt7fH06VNYWFikfeGJiIiIiEiRroHFzJkz0bVrV3h7ewMA5s+fj927d2PJkiUYMmRIovxLlixBSEgIzpw5g6xZswIAnJyc0rLIRERERESUhHTrChUTE4PLly+jRo0a/xVGTw81atTA2bNnk9xmx44dcHNzQ8+ePWFra4sff/wRvr6+iI+P/+RxoqOjERYWpvVDREREREQpK90Ci6CgIMTHx8PW1lYr3dbWFgEBAUlu8+jRI2zatAnx8fHYs2cPRo4ciRkzZmDChAmfPM6kSZNgbm6u/Dg6OqboeRARERERUQYYvJ0carUaOXPmxIIFC+Dq6oqWLVti+PDhmD9//ie3GTp0KEJDQ5WfZ8+epWGJiYiIiIj+N6TbGAtra2vo6+vj1atXWumvXr1Crly5ktzGzs4OWbNmhb6+vpJWtGhRBAQEICYmBgYGBom2MTQ0hKGhYcoWnoiIiIiItKRbi4WBgQFcXV1x+PBhJU2tVuPw4cNwc3NLcht3d3c8ePAAarVaSbt37x7s7OySDCqIiIiIiChtpGtXKB8fHyxcuBDLly/H7du38euvvyIyMlKZJcrLywtDhw5V8v/6668ICQlB3759ce/ePezevRu+vr7o2bNnep0CEREREREhFbpCXbt2DaVLl/7sTE0aLVu2RGBgIEaNGoWAgAC4uLhg3759yoBuf39/6On9F/s4Ojpi//796NevH0qWLAl7e3v07dsXgwcPTunTICIiIiKiZEiVMRYi8tV5e/XqhV69eiX52rFjxxKlubm54dy5c99aNCIiIiIiSgXJDiyaNGny2ddDQ0OhUqm+uUBERERERJT5JDuw2LlzJ2rWrJlo/QmNr+kCRURERERE35dkBxZFixZF06ZN0blz5yRf9/Pzw65du3QuGBERERERZR7JnhXK1dUVV65c+eTrhoaGyJMnj06FIiIiIiKizCXZLRbz58//bHenokWL4vHjxzoVioiIiIiIMpdkBxZcxZqIiIiIiD6m03SzkZGROH36NN68eYOCBQvC1dU1pcpFRERERESZyDcHFjNnzsTEiRPx448/IleuXPDz84ODgwO2bt0KMzOzlCwjERERERFlcMkevA0Aw4cPx5o1a3D27FkcP34c69evx507d+Ds7Ix+/foBAF6+fJmiBSUiIiIioowr2YHFuXPnsGjRIuzbtw+BgYE4ceIETpw4gZMnT6Jq1apYv3494uLi4OnpiePHj6dGmYmIiIiIKIP5plmhevXqBWtra7Rp0wbHjh2DgYEBDAwMEBoaCldXV7x9+xb9+vXD+PHjUbly5dQoNxERERERZSDJbrE4c+YMqlevDgAoV64cOnTogDdv3iAkJAR//PEHcufODWtrazRp0gQnT55EdHR0iheaiIiIiIgylmQHFiEhIbCwsAAALF26FL1790bWrFkBAD169MCePXsQFBQECwsLqFQqBAYGpmiBKXXFxsaiV69esLS0hJWVFXr37o24uLgk83bs2BEGBgYwNTVVfs6ePftV+4qOjkbXrl2RL18+ZM+eHUWKFMGSJUvS5ByJiIiIKOUlO7DImTMn/P39AQCWlpY4c+aM8trFixcBANmzZ0dYWBhiYmJgZWWVQkWltDBhwgScOnUKt27dws2bN3Hy5En4+vp+Mn+PHj0QERGh/Li5uX3VvuLi4mBnZ4dDhw4hLCwMy5YtQ//+/XHgwIFUP0ciIiIiSnnJDiyqVKmC7du3AwDGjRuHfv36oXbt2mjatClq1KiB0aNHw9DQEHv37oWLiwuMjY1TvNCUepYsWYIRI0bAzs4OdnZ2GD58OBYvXpzi+zIxMcG4ceNQoEABqFQqlC9fHlWrVsWpU6dS8nSIiIiIKI0kO7Do1asXVq9ejYcPH6Jx48a4ceMGGjZsiEqVKuHYsWMYPnw43r9/j/Hjx+O3335LhSJTannz5g2eP38OFxcXJc3FxQX+/v4IDQ1NcpsVK1bAysoKxYsXx4wZM6BWq79pX1FRUbhw4QJKliyZoudERERERGkj2bNCFStWDMOGDUOdOnWwbds2FCtWDL/++qvy+tu3b9GqVSsULFgQXl5eKVpYSl0REREAoIyh+fD38PBwmJuba+Xv06cPpk2bBisrK1y8eBEtWrSAnp4e+vXrl6x9iQi6dOmCQoUKoUmTJil/YkRERESU6r5p5e0hQ4Yge/bsqFSpEqpVq4YKFSogW7Zs+Oeff7Bx40a0aNECv//+e0qXlVKZqakpACA0NBTW1tbK70DCuJmPlS5dWvm9fPnyGDJkCFasWIF+/fp99b5EBD169MDdu3dx6NAh6Ol905qNRERERJTOvvkurmfPnrh79y5q1aqFx48f459//kHBggVx9uxZzJkzR5kpijIPS0tLODg4wM/PT0nz8/ODo6NjotaKpHwYFHzNvkQEPXv2xPnz53HgwIGvOgYRERERZUzf1GKhkSNHDnTp0iWlykIZgLe3NyZOnAh3d3cAgK+v7yff4w0bNqB27drInj07Ll++jMmTJ6Nnz55fva9evXrh9OnTOHLkCCwtLVPxrIiIiIgotSUrsPjnn3++Oi8H4WZOI0eORHBwMIoWLQoAaNeuHYYNGwYA6N69O4CE1dcBYM6cOejWrRvi4uJgb2+PHj16oH///l+1r6dPn+Kvv/6CoaEh8ubNq2zTrl07Zf9ERERElHmoRES+NrOenh5UKhW+tIlKpUJ8fLzOhUsNYWFhMDc3R2hoKMzMzNK7OERJmnw1KL2LQMk0pJR1mh2L9SPzYf2gz2H9oM9Jy/qRlOTcOyerxeLx48c6FYyIiIiIiL5PyQosPuyyQkREREREpJGswGLHjh1fnbdBgwbJLgwREREREWVOyQosGjVq9FX5MvIYi4yCfRwzn/Tu40hERESUkSUrsFCr1alVDiIiIiIiysS4zDEREREREelMpwXyIiMjcfz4cfj7+yMmJkbrtT59+uhUMCIiIiIiyjy+ObC4evUq6tati3fv3iEyMhJWVlYICgqCsbExcubMycCCiIiIiOh/yDd3herXrx/q16+PN2/eIFu2bDh37hyePn0KV1dXTJ8+PSXLSEREREREGdw3BxZ+fn7o378/9PT0oK+vj+joaDg6OmLq1KkYNmxYSpaRiIiIiIgyuG8OLLJmzQo9vYTNc+bMCX9/fwCAubk5nj17ljKlIyIiIiKiTOGbx1iUKlUKFy9eRKFChVC5cmWMGjUKQUFBWLlyJX788ceULCMREREREWVw39xi4evrCzs7OwDAxIkTYWlpiV9//RWBgYH4+++/U6yARERERESU8X1zi8VPP/2k/J4zZ07s27cvRQpERERERESZzze3WDx+/Bj3799PlH7//n08efJElzIREREREVEm882BRceOHXHmzJlE6efPn0fHjh11KRMREREREWUy3xxYXL16Fe7u7onSy5cvDz8/P13KREREREREmcw3BxYqlQrh4eGJ0kNDQxEfH69ToYiIiIiIKHP55sCiUqVKmDRpklYQER8fj0mTJqFixYopUjgiIiIiIsocvnlWqClTpqBSpUooXLgwPDw8AAAnT55EWFgYjhw5kmIFJCIiIiKijO+bWyyKFSuGf/75By1atMDr168RHh4OLy8v3LlzhwvkERERERH9j/nmFgsAyJ07N3x9fVOqLERERERElEl9c4sFkND1qV27dqhQoQJevHgBAFi5ciVOnTqVIoUjIiIiIqLM4ZsDi82bN8PT0xPZsmXDlStXEB0dDSBhVii2YhARERER/W/55sBiwoQJmD9/PhYuXIisWbMq6e7u7rhy5UqKFI6IiIiIiDKHbw4s7t69i0qVKiVKNzc3x9u3b3UpExERERERZTLfHFjkypUL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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "# Data\n", + "methods = [\n", + " \"OS_Retrieval_Only\",\n", + " \"OS_Retrieval_Plus_Finetuned_CE\",\n", + " \"OAI_Retrieval_Only\",\n", + " \"OAI_Retrieval_Plus_Pretrained_CE\",\n", + " \"OAI_Retrieval_Plus_Finetuned_CE\"\n", + "]\n", + "\n", + "recalls = [0.501742, 0.642857, 0.753484, 0.833624, 0.890244]\n", + "\n", + "# Create a bar plot\n", + "plt.figure(figsize=(8, 5))\n", + "bars = plt.bar(methods, recalls, color=\"skyblue\")\n", + "\n", + "# Add value labels on top of each bar\n", + "for bar in bars:\n", + " height = bar.get_height()\n", + " plt.text(\n", + " bar.get_x() + bar.get_width() / 2,\n", + " height + 0.005,\n", + " f\"{height:.3f}\",\n", + " ha=\"center\",\n", + " va=\"bottom\",\n", + " fontsize=9\n", + " )\n", + "\n", + "# Labeling and aesthetics\n", + "plt.title(\"Recall@1 Across Different Methods\")\n", + "plt.ylabel(\"Recall@1\")\n", + "plt.xticks(rotation=25, ha=\"right\") # Rotate x-axis labels if needed\n", + "plt.ylim([0, 1]) # Since recall values typically range [0,1]\n", + "plt.tight_layout()\n", + "\n", + "# Display the plot\n", + "plt.show()\n" + ] }, - "fce9aa1662c34941afadd6141aba9180": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } + { + "cell_type": "code", + "execution_count": null, + "id": "sIA-PtwdIEv3", + "metadata": { + "id": "sIA-PtwdIEv3" + }, + "outputs": [], + "source": [] } - } - } - }, - "nbformat": 4, - "nbformat_minor": 5 + ], + "metadata": { + "accelerator": "GPU", + "colab": { + "gpuType": "T4", + "machine_shape": "hm", + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.11.5" + }, + "widgets": { + "application/vnd.jupyter.widget-state+json": { + "0098c6042695487eabdc18342cda7186": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "00dc9b746d744e779fc9e0182d20e504": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "FloatProgressModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "success", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_1f5f910fb18549d58dd876c38aed4107", + "max": 36, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_13b90299c7884befa75180d0476f9913", + "value": 36 + } + }, + "0452b93e26154e0d915ad3a201e307fd": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_486ab2a8181d4b32aedbb3fea18bef40", + "IPY_MODEL_da4aa9007a4c4814a7fcd55ea9bcce9f", + "IPY_MODEL_fac98921b88f41b08db63e93399f7c87" + ], + "layout": "IPY_MODEL_f7930aa886e941b3b15239a4f35138b9" + } + }, + "04f07748dd33447784c3354f58f38727": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "09eea1073fc246bf9bcd0e6320457896": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "FloatProgressModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "success", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_fdb72352779f499c869e390ccd9027eb", + "max": 1739, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_55c623662d81423da5bb0d5058c0ed66", + "value": 1739 + } + }, + "0de4f03a3b1f4bc3b2131607be95a808": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_2f41f083156247fa97ae3646052a3235", + "IPY_MODEL_09eea1073fc246bf9bcd0e6320457896", + "IPY_MODEL_1e97a5e7963a44119524ff4d091e9629" + ], + "layout": "IPY_MODEL_8c34c7a0f089455b85a650fea82cd591" + } + }, + "10e72a6bbfa6473f952f8572259277ab": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "13b90299c7884befa75180d0476f9913": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ProgressStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "18564cf9b4f04df9a9a309fcb5152a81": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ProgressStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "1a3c1db02f9544e78c2599c7566befc0": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "1aab71dc8f7345718950c689bf25b115": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_8534c0df3c684480bf53ae7c0e605a97", + "IPY_MODEL_8c7dddcedd9d4f9f85478ef50f2852f1", + "IPY_MODEL_4aa325d9b5a4423bbe4f4395897bd4f2" + ], + "layout": "IPY_MODEL_4f15b9ad923b49289277175ca5103c13" + } + }, + "1c9e78b5942a444ab729333d57ab00a1": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_de21ddc2e22b49cd8429654f9187b61a", + "IPY_MODEL_efbb6facf5484cb990f663a05e981b02", + "IPY_MODEL_9a43fe57b2974c3f82c96226e31e6e64" + ], + "layout": "IPY_MODEL_d8120cb8a36f47e0b355ace30dbccf30" + } + }, + "1e97a5e7963a44119524ff4d091e9629": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_d204f0d7c2a3486aa8c6360f26518037", + "placeholder": "​", + "style": "IPY_MODEL_4c158c4160514069870a1f4c280dcb5a", + "value": " 1739/1739 [05:07<00:00,  5.51it/s]" + } + }, + "1f5f910fb18549d58dd876c38aed4107": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "2f41f083156247fa97ae3646052a3235": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_d7a99cc5398549ad9e9177307a521e17", + "placeholder": "​", + "style": "IPY_MODEL_a5c060a68f2449a99fffe826e5385093", + "value": "Iteration: 100%" + } + }, + "338a83663ea946aca37b2a109bbdd437": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "41ae50f47c174b3ebec44009b57639cb": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "486ab2a8181d4b32aedbb3fea18bef40": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_fd0a7934959d4fb88f5dab916d42d3a7", + "placeholder": "​", + "style": "IPY_MODEL_75f7bbb0bb384ae592dea5059a146b9c", + "value": "Batches: 100%" + } + }, + "4aa325d9b5a4423bbe4f4395897bd4f2": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_c09ebe1563d8477aa0e5ec88160ccda2", + "placeholder": "​", + "style": "IPY_MODEL_f697561ad26048cc821cb4614f664edc", + "value": " 1/1 [00:00<00:00, 38.69it/s]" + } + }, + "4c158c4160514069870a1f4c280dcb5a": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "4ccf610615584abc9e10caa78e3100f4": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "4cd23982da854b909ca6e435ce354270": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "4ec583e4c526449b993c0f7f9e6e5456": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_8daf379772f6429293b659d29efbebef", + "IPY_MODEL_ffcefea0254449869f46b1a160222aa2", + "IPY_MODEL_690731860e1643d4a3873f52786127eb" + ], + "layout": "IPY_MODEL_0098c6042695487eabdc18342cda7186" + } + }, + "4f15b9ad923b49289277175ca5103c13": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "4ff59bde36c24d568a567e3457e5aaf7": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_72a697990c264e4aa48f5fa68b89f935", + "placeholder": "​", + "style": "IPY_MODEL_bfbe6dd8bf0d40a691d8998004bec8c0", + "value": " 1/1 [06:11<00:00, 371.94s/it]" + } + }, + "5271f5cf18e6427eb6df0c59e4b0cb2b": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "55c623662d81423da5bb0d5058c0ed66": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ProgressStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "5835246fb0aa4d93b76509468d1c2211": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "5d958e1742124b5b9ca2357c22686754": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ProgressStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "690731860e1643d4a3873f52786127eb": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_6fd3718bdc214b2ea9ebc4961ff6c9dc", + "placeholder": "​", + "style": "IPY_MODEL_338a83663ea946aca37b2a109bbdd437", + "value": " 1/1 [00:00<00:00, 32.36it/s]" + } + }, + "693d2f59f1f54307ac5b9024b6e28e73": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "69bcf5c05eb5461f9e5fe64448d38875": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "6db3f21c727e4fed89f3ba0be163d8a9": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "FloatProgressModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "success", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_4cd23982da854b909ca6e435ce354270", + "max": 1, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_18564cf9b4f04df9a9a309fcb5152a81", + "value": 1 + } + }, + "6fd3718bdc214b2ea9ebc4961ff6c9dc": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "72a697990c264e4aa48f5fa68b89f935": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "75083236d5b6461fa2110ea747c8c010": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "75f7bbb0bb384ae592dea5059a146b9c": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "79562014e45a4002a0f364cfa7a1f94e": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "7b6179c28a554ce5a6b70ec6318c284f": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ProgressStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "7e83f014fa3b423f94a3942a8531299c": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_e9e49580bfb8425b8ef88cea4862e0ee", + "IPY_MODEL_00dc9b746d744e779fc9e0182d20e504", + "IPY_MODEL_cc64395318d142a48563671b0ad9087f" + ], + "layout": "IPY_MODEL_5271f5cf18e6427eb6df0c59e4b0cb2b" + } + }, + "8534c0df3c684480bf53ae7c0e605a97": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_d10ac840d1284c1d93cd3790bd69459a", + "placeholder": "​", + "style": "IPY_MODEL_c6dbd568908a470fa9eee035a46005c2", + "value": "Batches: 100%" + } + }, + "87782a63074c4714b8a80f5070c8830c": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "878d1b336d084e90b84c5e7d9585dc71": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "8976021d2c7a421785f3559a24105089": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "8c34c7a0f089455b85a650fea82cd591": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "8c7dddcedd9d4f9f85478ef50f2852f1": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "FloatProgressModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "success", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_04f07748dd33447784c3354f58f38727", + "max": 1, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_cb74baeb010049fdbd3f3e3be7b1988f", + "value": 1 + } + }, + "8daf379772f6429293b659d29efbebef": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_4ccf610615584abc9e10caa78e3100f4", + "placeholder": "​", + "style": "IPY_MODEL_87782a63074c4714b8a80f5070c8830c", + "value": "Batches: 100%" + } + }, + "8e3c115a975c4ecb9f7948d0dc318282": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "928aa8b44ee34dcea5f9656024bda180": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "9a43fe57b2974c3f82c96226e31e6e64": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_69bcf5c05eb5461f9e5fe64448d38875", + "placeholder": "​", + "style": "IPY_MODEL_8976021d2c7a421785f3559a24105089", + "value": " 1/1 [00:00<00:00, 27.80it/s]" + } + }, + "a0c863deec544e019560157cb557c132": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "a2eafe380ca74843abd46ccb0a4132f8": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "a5c060a68f2449a99fffe826e5385093": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "ace7c202d5ba4c4ea4983f96268d5e89": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "aecbde694330456fb5d1b06a4abb1cd5": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "b915cbcacccc4dc68440908fb073a48e": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "bfbe6dd8bf0d40a691d8998004bec8c0": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "c09ebe1563d8477aa0e5ec88160ccda2": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "c2ed1b757c3840468db308d6489e1d50": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ProgressStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "c6dbd568908a470fa9eee035a46005c2": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "cb74baeb010049fdbd3f3e3be7b1988f": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ProgressStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "cc64395318d142a48563671b0ad9087f": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_ace7c202d5ba4c4ea4983f96268d5e89", + "placeholder": "​", + "style": "IPY_MODEL_aecbde694330456fb5d1b06a4abb1cd5", + "value": " 36/36 [00:15<00:00,  6.51it/s]" + } + }, + "cf3cfee3688b4322bd76495ebd010077": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "d10ac840d1284c1d93cd3790bd69459a": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "d204f0d7c2a3486aa8c6360f26518037": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "d388a00d8638436c9d3aa477fe708a02": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_f6e42a3fad9f445d8385a691715e5441", + "placeholder": "​", + "style": "IPY_MODEL_878d1b336d084e90b84c5e7d9585dc71", + "value": "Batches: 100%" + } + }, + "d53245c4a74745e9a70c03924debcf98": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "FloatProgressModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "success", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_8e3c115a975c4ecb9f7948d0dc318282", + "max": 1, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_fc916e59dce04b68993a6922695d7226", + "value": 1 + } + }, + "d744293ea11f4c3d988df2cd37d9b313": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_5835246fb0aa4d93b76509468d1c2211", + "placeholder": "​", + "style": "IPY_MODEL_a0c863deec544e019560157cb557c132", + "value": "Epoch: 100%" + } + }, + "d7a99cc5398549ad9e9177307a521e17": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "d8120cb8a36f47e0b355ace30dbccf30": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "da4aa9007a4c4814a7fcd55ea9bcce9f": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "FloatProgressModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "success", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_f6f951a5f4fe43d3b6840459520925a6", + "max": 310, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_5d958e1742124b5b9ca2357c22686754", + "value": 310 + } + }, + "de21ddc2e22b49cd8429654f9187b61a": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_1a3c1db02f9544e78c2599c7566befc0", + "placeholder": "​", + "style": "IPY_MODEL_b915cbcacccc4dc68440908fb073a48e", + "value": "Batches: 100%" + } + }, + "e59da773d0ed452bbec059a7973e8ad1": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "e631186c46714758a005cea53a1f5dda": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_d744293ea11f4c3d988df2cd37d9b313", + "IPY_MODEL_6db3f21c727e4fed89f3ba0be163d8a9", + "IPY_MODEL_4ff59bde36c24d568a567e3457e5aaf7" + ], + "layout": "IPY_MODEL_75083236d5b6461fa2110ea747c8c010" + } + }, + "e6bc3b7cc0d04ca2b5ae6fab4d5c3ec3": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_79562014e45a4002a0f364cfa7a1f94e", + "placeholder": "​", + "style": "IPY_MODEL_e59da773d0ed452bbec059a7973e8ad1", + "value": " 1/1 [00:00<00:00, 39.47it/s]" + } + }, + "e9e49580bfb8425b8ef88cea4862e0ee": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_cf3cfee3688b4322bd76495ebd010077", + "placeholder": "​", + "style": "IPY_MODEL_693d2f59f1f54307ac5b9024b6e28e73", + "value": "Batches: 100%" + } + }, + "ed03d3a8b6ad48c08c74bcd361eec589": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "efbb6facf5484cb990f663a05e981b02": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "FloatProgressModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "success", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_928aa8b44ee34dcea5f9656024bda180", + "max": 1, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_7b6179c28a554ce5a6b70ec6318c284f", + "value": 1 + } + }, + "f697561ad26048cc821cb4614f664edc": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "f6e42a3fad9f445d8385a691715e5441": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "f6f951a5f4fe43d3b6840459520925a6": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "f7930aa886e941b3b15239a4f35138b9": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "fac98921b88f41b08db63e93399f7c87": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_41ae50f47c174b3ebec44009b57639cb", + "placeholder": "​", + "style": "IPY_MODEL_10e72a6bbfa6473f952f8572259277ab", + "value": " 310/310 [02:08<00:00, 14.01it/s]" + } + }, + "fc916e59dce04b68993a6922695d7226": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ProgressStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "fd0a7934959d4fb88f5dab916d42d3a7": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "fd1d2ee78abd494db082ad8d161bd623": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_d388a00d8638436c9d3aa477fe708a02", + "IPY_MODEL_d53245c4a74745e9a70c03924debcf98", + "IPY_MODEL_e6bc3b7cc0d04ca2b5ae6fab4d5c3ec3" + ], + "layout": "IPY_MODEL_a2eafe380ca74843abd46ccb0a4132f8" + } + }, + "fdb72352779f499c869e390ccd9027eb": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "ffcefea0254449869f46b1a160222aa2": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "FloatProgressModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "success", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_ed03d3a8b6ad48c08c74bcd361eec589", + "max": 1, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_c2ed1b757c3840468db308d6489e1d50", + "value": 1 + } + } + } + } + }, + "nbformat": 4, + "nbformat_minor": 5 }