diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 8cfd604b39..7dabbf8b25 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -8,4 +8,3 @@ # Documentation *.md @deepset-ai/documentation @deepset-ai/core-engineering -/tutorials/ @deepset-ai/documentation @deepset-ai/core-engineering diff --git a/.github/utils/convert_notebooks_into_webpages.py b/.github/utils/convert_notebooks_into_webpages.py deleted file mode 100755 index 55d4753099..0000000000 --- a/.github/utils/convert_notebooks_into_webpages.py +++ /dev/null @@ -1,186 +0,0 @@ -#!/usr/bin/env python3 - -import re - -from nbconvert import MarkdownExporter -import os -from pathlib import Path - -headers = { - 1: """""", - 2: """""", - 3: """""", - 4: """""", - 5: """""", - 6: """""", - 7: """""", - 8: """""", - 9: """""", - 10: """""", - 11: """""", - 12: """""", - 13: """""", - 14: """""", - 15: """""", - 16: """""", - 17: """""", - 18: """""", -} - - -def atoi(text): - return int(text) if text.isdigit() else text - - -def natural_keys(text): - test = [atoi(c) for c in re.split("(\d+)", text)] - return test - - -dir = Path(__file__).parent.parent.parent / "tutorials" - -notebooks = [x for x in os.listdir(dir) if x[-6:] == ".ipynb"] -# sort notebooks based on numbers within name of notebook -notebooks = sorted(notebooks, key=lambda x: natural_keys(x)) - - -e = MarkdownExporter(exclude_output=True) -for i, nb in enumerate(notebooks): - body, resources = e.from_filename(dir / nb) - print(f"Processing {dir}/{nb}") - - tutorials_path = Path(__file__).parent.parent.parent / "docs" / "_src" / "tutorials" / "tutorials" - with open(tutorials_path / f"{i + 1}.md", "w", encoding="utf-8") as f: - try: - f.write(headers[i + 1] + "\n\n") - except IndexError as e: - raise IndexError( - "Can't find the header for this tutorial. Have you added it in '.github/utils/convert_notebooks_into_webpages.py'?" - ) - f.write(body) diff --git a/.github/utils/tutorials.sh b/.github/utils/tutorials.sh deleted file mode 100755 index 10a7ee9c39..0000000000 --- a/.github/utils/tutorials.sh +++ /dev/null @@ -1,140 +0,0 @@ -#!/bin/bash - -export LAUNCH_GRAPHDB=0 # See tut 10 - GraphDB is already running in CI -export TIKA_LOG_PATH=$PWD # Avoid permission denied errors while importing tika - -python_path=$1 -files_changed=$2 -exclusion_list=$3 -make_python_path_editable=$4 -containers_policy=$5 -no_got_tutorials='4_FAQ_style_QA 5_Evaluation 7_RAG_Generator 8_Preprocessing 10_Knowledge_Graph 15_TableQA 16_Document_Classifier_at_Index_Time' - -echo "Files changed in this PR: $files_changed" -echo "Excluding: $exclusion_list" -echo "Python path is editable: $make_python_path_editable" -echo "Containers policy: $containers_policy" - -# Collect the tutorials to run -scripts_to_run="" -for script in $files_changed; do - - if [[ "$script" != *"tutorials/Tutorial"* ]] || ([[ "$script" != *".py"* ]] && [[ "$script" != *".ipynb"* ]]); then - echo "- not a tutorial: $script" - continue - fi - - skip_to_next=0 - for excluded in $exclusion_list; do - if [[ "$script" == *"$excluded"* ]]; then skip_to_next=1; fi - done - if [[ $skip_to_next == 1 ]]; then - echo "- excluded: $script" - continue - fi - - scripts_to_run="$scripts_to_run $script" -done - - -# Run the containers -docker run -d -p 9200:9200 --name elasticsearch -e "discovery.type=single-node" -e "ES_JAVA_OPTS=-Xms128m -Xmx256m" elasticsearch:7.9.2 -docker run -d -p 9998:9998 --name tika -e "TIKA_CHILD_JAVA_OPTS=-JXms128m" -e "TIKA_CHILD_JAVA_OPTS=-JXmx128m" apache/tika:1.28.4 - - -failed="" -for script in $scripts_to_run; do - - echo "" - echo "##################################################################################" - echo "##################################################################################" - echo "## Running $script ..." - echo "##################################################################################" - echo "##################################################################################" - - # Do not cache GoT data - reduce_dataset=1 - for no_got_tut in $no_got_tutorials; do - if [[ "$script" == *"$no_got_tut"* ]]; then - reduce_dataset=0 - fi - done - - if [[ $reduce_dataset == 1 ]]; then - # Copy the reduced GoT data into a folder named after the tutorial - # to trigger the caching mechanism of `fetch_archive_from_http` - echo "Using reduced GoT dataset" - no_prefix=${script#"tutorials/Tutorial"} - split_on_underscore=(${no_prefix//_/ }) - cp -r data/tutorials data/tutorial${split_on_underscore[0]} - else - echo "NOT using reduced GoT dataset!" - fi - - # FIXME Make the Python path editable - # espnet needs to edit files on the PYTHONPATH during execution. However, by default GH runners don't allow - # workflows to edit files into that directory, so in case of tutorials using espnet, we need to make PYTHONPATH - # editable first. For now it's only Tutorial 17. - # Still unclear why it's needed to repeat this operation, but if Tutorial 17 is run twice (once for the .py - # and once for .ipynb version) the error re-appears. - if [[ $make_python_path_editable == "EDITABLE" ]] && [[ "$script" == *"Tutorial17_"* ]]; then - sudo find $python_path/lib -type f -exec chmod 777 {} \; - fi - - if [[ "$script" == *".py" ]]; then - output=$(time python $script) - else - output=$(sudo $python_path/bin/ipython -c "%run $script") - fi - - echo $output > $script-output.txt - if [ $? -eq 0 ]; then - echo "Execution completed successfully." - else - echo "====================================================" - echo "| $script FAILED!" - echo "====================================================" - echo "Output of the execution: " - echo $output - failed=$failed" "$script - fi - - # Restart the necessary containers - # Note: Tika does not store data and therefore can be left running - if [[ "$make_python_path_editable" == "RESTART" ]]; then - docker stop elasticsearch - docker rm elasticsearch - docker run -d -p 9200:9200 --name elasticsearch -e "discovery.type=single-node" -e "ES_JAVA_OPTS=-Xms128m -Xmx256m" elasticsearch:7.9.2 - fi - - # Clean up datasets and SQLite DBs to avoid crashing the next tutorial - git clean -f - -done - -# causes permission errors on Post Cache -sudo rm -rf data/ -sudo rm -rf /home/runner/work/haystack/haystack/elasticsearch-7.9.2/ - - -if [[ $failed == "" ]]; then - echo "" - echo "" - echo "------------------------------------------" - echo " All tutorials were executed successfully " - echo "------------------------------------------" - exit 0 - -else - echo "" - echo "##################################################################################" - echo "## ##" - echo "## Some tutorials have failed! ##" - echo "## ##" - echo "##################################################################################" - for script in $failed; do - echo "## - $script" - done - echo "##################################################################################" - exit 1 -fi \ No newline at end of file diff --git a/.github/workflows/tutorials.yml b/.github/workflows/tutorials.yml deleted file mode 100644 index 45288c9fd2..0000000000 --- a/.github/workflows/tutorials.yml +++ /dev/null @@ -1,102 +0,0 @@ -name: Tutorials - -on: - workflow_dispatch: # Activate this workflow manually - pull_request: - paths: - - 'tutorials/*.*' - - -env: - # Tutorials that require a GPU to run, so can't be run on CI without self-hosted runners - DONT_RUN: Tutorial2_ Tutorial9_ Tutorial13_ Tutorial18_ - - -jobs: - - docs-check: - runs-on: ubuntu-latest - steps: - - - uses: actions/checkout@v2 - - - name: Setup Python - uses: ./.github/actions/python_cache/ - - - name: Install Haystack - run: | - pip install --upgrade pip - pip install .[dev] - - - name: Docs Check - run: python .github/utils/convert_notebooks_into_webpages.py - - - name: Status - run: | - if [[ `git status --porcelain` ]]; then - git status - echo "##################################################################################################" - echo "#" - echo "# CHECK FAILED! You need to update the static version of the tutorials." - echo "#" - echo "# Please run the tutorials documentation update script:" - echo "#" - echo "# python .github/utils/convert_notebooks_into_webpages.py" - echo "#" - echo "# or see https://github.com/deepset-ai/haystack/blob/main/CONTRIBUTING.md for help." - echo "#" - echo "# If you have further problems, please open an issue: https://github.com/deepset-ai/haystack/issues" - echo "#" - echo "##################################################################################################" - exit 1 - fi - - run: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v2 - - - name: Setup Python - uses: ./.github/actions/python_cache/ - - - name: Install pdftotext - run: wget --no-check-certificate https://dl.xpdfreader.com/xpdf-tools-linux-4.04.tar.gz && tar -xvf xpdf-tools-linux-4.04.tar.gz && sudo cp xpdf-tools-linux-4.04/bin64/pdftotext /usr/local/bin - - # Some tutorials require these libraries to run - # - Tutorial 17 for the audio libs - # - Tutorial 11, 14, 15, 16 for pygraphviz - - name: Install graphviz and audio libs - run: sudo apt install libgraphviz-dev graphviz libsndfile1 ffmpeg - - # Some tutorials require these libraries to run - # - Tutorial 15 - - name: Install torch-scatter - run: pip install torch-scatter -f https://data.pyg.org/whl/torch-1.12.0+cpu.html - - # Haystack needs to be reinstalled at this stage to make sure the current commit's version is the one getting tested. - # The cache can last way longer than a specific action's run, so older Haystack version could be carried over. - - name: Reinstall Haystack - run: | - pip install --upgrade pip - pip install .[all] - pip install pygraphviz - pip install ipython nbformat - - - name: Cache mini GoT dataset - run: | - mkdir -p data/tutorials - cd data/tutorials - wget https://s3.eu-central-1.amazonaws.com/deepset.ai-farm-qa/datasets/documents/wiki_gameofthrones_txt1_mini.zip -q &> /dev/null - unzip wiki_gameofthrones_txt1_mini.zip - rm wiki_gameofthrones_txt1_mini.zip - - - uses: jitterbit/get-changed-files@v1 - id: diff - continue-on-error: true - with: - format: space-delimited - token: ${{ secrets.GITHUB_TOKEN }} - - - name: Run tutorials - run: ./.github/utils/tutorials.sh ${{ env.pythonLocation }} "${{ steps.diff.outputs.added_modified }}" "${{ env.DONT_RUN }}" "EDITABLE" "RESTART" diff --git a/.github/workflows/tutorials_nightly.yml b/.github/workflows/tutorials_nightly.yml deleted file mode 100644 index 37fe5fa9b0..0000000000 --- a/.github/workflows/tutorials_nightly.yml +++ /dev/null @@ -1,110 +0,0 @@ -name: Tutorials (nightly) - -on: - workflow_dispatch: # Activate this workflow manually - schedule: - - cron: '0 0 * * *' - - -env: - # Tutorials that require a GPU to run, so can't be run on CI without self-hosted runners - DONT_RUN: Tutorial2_ Tutorial9_ Tutorial13_ Tutorial18_ - - -jobs: - - notebooks: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v2 - - - name: Set up Python 3.7 - uses: actions/setup-python@v2 - with: - python-version: 3.7 - - - name: Run Elasticsearch - run: docker run -d -p 9200:9200 -e "discovery.type=single-node" -e "ES_JAVA_OPTS=-Xms128m -Xmx256m" elasticsearch:7.9.2 - - - name: Run Apache Tika - run: docker run -d -p 9998:9998 -e "TIKA_CHILD_JAVA_OPTS=-JXms128m" -e "TIKA_CHILD_JAVA_OPTS=-JXmx128m" apache/tika:1.28.4 - - - name: Run GraphDB - run: docker run -d -p 7200:7200 --name graphdb-instance-tutorial docker-registry.ontotext.com/graphdb-free:9.4.1-adoptopenjdk11 - - - name: Install pdftotext - run: wget --no-check-certificate https://dl.xpdfreader.com/xpdf-tools-linux-4.04.tar.gz && tar -xvf xpdf-tools-linux-4.04.tar.gz && sudo cp xpdf-tools-linux-4.04/bin64/pdftotext /usr/local/bin - - # Some tutorials require these libraries to run - # - Tutorial 17 for the audio libs - # - Tutorial 11, 14, 15, 16 for pygraphviz - - name: Install graphviz and audio libs - run: sudo apt install libgraphviz-dev graphviz libsndfile1 ffmpeg - - # Some tutorials require these libraries to run - # - Tutorial 15 - - name: Install torch-scatter - run: pip install torch-scatter -f https://data.pyg.org/whl/torch-1.12.0+cpu.html - - - name: Install Haystack - run: | - pip install --upgrade pip - pip install .[all] - pip install pygraphviz - pip install ipython nbformat - - - name: Cache mini GoT dataset - run: | - mkdir -p data/tutorials - cd data/tutorials - wget https://s3.eu-central-1.amazonaws.com/deepset.ai-farm-qa/datasets/documents/wiki_gameofthrones_txt1_mini.zip -q &> /dev/null - unzip wiki_gameofthrones_txt1_mini.zip - rm wiki_gameofthrones_txt1_mini.zip - - - name: Run tutorials - run: ./.github/utils/tutorials.sh ${{ env.pythonLocation }} "tutorials/*.ipynb" "${{ env.DONT_RUN }}" "EDITABLE" "RESTART" - - - scripts: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v2 - - - name: Set up Python 3.7 - uses: actions/setup-python@v2 - with: - python-version: 3.7 - - - name: Install pdftotext - run: wget --no-check-certificate https://dl.xpdfreader.com/xpdf-tools-linux-4.04.tar.gz && tar -xvf xpdf-tools-linux-4.04.tar.gz && sudo cp xpdf-tools-linux-4.04/bin64/pdftotext /usr/local/bin - - # Some tutorials require these libraries to run - # - Tutorial 17 for the audio libs - # - Tutorial 11, 14, 15, 16 for pygraphviz - - name: Install graphviz and audio libs - run: sudo apt install libgraphviz-dev graphviz libsndfile1 ffmpeg - - # Some tutorials require these libraries to run - # - Tutorial 15 - - name: Install torch-scatter - run: pip install torch-scatter -f https://data.pyg.org/whl/torch-1.12.0+cpu.html - - - name: Install Haystack - run: | - pip install --upgrade pip - pip install .[all] - pip install pygraphviz - pip install ipython nbformat - - - name: Cache mini GoT dataset - run: | - mkdir -p data/tutorials - cd data/tutorials - wget https://s3.eu-central-1.amazonaws.com/deepset.ai-farm-qa/datasets/documents/wiki_gameofthrones_txt1_mini.zip -q &> /dev/null - unzip wiki_gameofthrones_txt1_mini.zip - rm wiki_gameofthrones_txt1_mini.zip - - - name: Run tutorials - run: ./.github/utils/tutorials.sh ${{ env.pythonLocation }} "tutorials/*.py" "${{ env.DONT_RUN }}" "EDITABLE" "RESTART" diff --git a/.gitignore b/.gitignore index 9353e94d54..f40a950b93 100644 --- a/.gitignore +++ b/.gitignore @@ -145,9 +145,6 @@ haystack/document_store/qa.db data **/mlruns/** src -tutorials/cache -tutorials/mlruns -tutorials/model models saved_models *_build diff --git a/README.md b/README.md index c4d99bb227..c8b10df78b 100644 --- a/README.md +++ b/README.md @@ -6,9 +6,6 @@ Tests - - Tutorials - Documentation @@ -56,18 +53,18 @@ Haystack is built in a modular fashion so that you can combine the best technolo - **Customizable**: Fine-tune models to your domain or implement your custom DocumentStore. - **Continuous Learning**: Collect new training data via user feedback in production & improve your models continuously -| | | -|-|-| -| :ledger: [Docs](https://haystack.deepset.ai/overview/intro) | Overview, Components, Guides, API documentation| -| :floppy_disk: [Installation](https://github.com/deepset-ai/haystack#floppy_disk-installation) | How to install Haystack | -| :mortar_board: [Tutorials](https://github.com/deepset-ai/haystack#mortar_board-tutorials) | See what Haystack can do with our Notebooks & Scripts | -| :beginner: [Quick Demo](https://github.com/deepset-ai/haystack#beginner-quick-demo) | Deploy a Haystack application with Docker Compose and a REST API | -| :vulcan_salute: [Community](https://github.com/deepset-ai/haystack#vulcan_salute-community) | [Discord](https://haystack.deepset.ai/community/join), [Twitter](https://twitter.com/deepset_ai), [Stack Overflow](https://stackoverflow.com/questions/tagged/haystack), [GitHub Discussions](https://github.com/deepset-ai/haystack/discussions) | -| :heart: [Contributing](https://github.com/deepset-ai/haystack#heart-contributing) | We welcome all contributions! | -| :bar_chart: [Benchmarks](https://haystack.deepset.ai/benchmarks/latest) | Speed & Accuracy of Retriever, Readers and DocumentStores | -| :telescope: [Roadmap](https://haystack.deepset.ai/overview/roadmap) | Public roadmap of Haystack | -| :newspaper: [Blog](https://medium.com/deepset-ai) | Read our articles on Medium | -| :phone: [Jobs](https://www.deepset.ai/jobs) | We're hiring! Have a look at our open positions | +| | | +| --------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| :ledger: [Docs](https://haystack.deepset.ai/overview/intro) | Overview, Components, Guides, API documentation | +| :floppy_disk: [Installation](https://github.com/deepset-ai/haystack#floppy_disk-installation) | How to install Haystack | +| :mortar_board: [Tutorials](https://github.com/deepset-ai/haystack#mortar_board-tutorials) | See what Haystack can do with our Notebooks & Scripts | +| :beginner: [Quick Demo](https://github.com/deepset-ai/haystack#beginner-quick-demo) | Deploy a Haystack application with Docker Compose and a REST API | +| :vulcan_salute: [Community](https://github.com/deepset-ai/haystack#vulcan_salute-community) | [Discord](https://haystack.deepset.ai/community/join), [Twitter](https://twitter.com/deepset_ai), [Stack Overflow](https://stackoverflow.com/questions/tagged/haystack), [GitHub Discussions](https://github.com/deepset-ai/haystack/discussions) | +| :heart: [Contributing](https://github.com/deepset-ai/haystack#heart-contributing) | We welcome all contributions! | +| :bar_chart: [Benchmarks](https://haystack.deepset.ai/benchmarks/latest) | Speed & Accuracy of Retriever, Readers and DocumentStores | +| :telescope: [Roadmap](https://haystack.deepset.ai/overview/roadmap) | Public roadmap of Haystack | +| :newspaper: [Blog](https://medium.com/deepset-ai) | Read our articles on Medium | +| :phone: [Jobs](https://www.deepset.ai/jobs) | We're hiring! Have a look at our open positions | ## :floppy_disk: Installation @@ -139,112 +136,8 @@ You can find out more about our PyPi package on our [PyPi page](https://pypi.org Follow our [introductory tutorial](https://haystack.deepset.ai/tutorials/first-qa-system) to setup a question answering system using Python and start performing queries! -Explore the rest of our tutorials to learn how to tweak pipelines, train models and perform evaluation. - -- Tutorial 1 - Basic QA Pipeline: [Jupyter notebook](https://github.com/deepset-ai/haystack/blob/main/tutorials/Tutorial1_Basic_QA_Pipeline.ipynb) - | - [Colab](https://colab.research.google.com/github/deepset-ai/haystack/blob/main/tutorials/Tutorial1_Basic_QA_Pipeline.ipynb) - | - [Python](https://github.com/deepset-ai/haystack/blob/main/tutorials/Tutorial1_Basic_QA_Pipeline.py) -- Tutorial 2 - Fine-tuning a model on own data: [Jupyter notebook](https://github.com/deepset-ai/haystack/blob/main/tutorials/Tutorial2_Finetune_a_model_on_your_data.ipynb) - | - [Colab](https://colab.research.google.com/github/deepset-ai/haystack/blob/main/tutorials/Tutorial2_Finetune_a_model_on_your_data.ipynb) - | - [Python](https://github.com/deepset-ai/haystack/blob/main/tutorials/Tutorial2_Finetune_a_model_on_your_data.py) -- Tutorial 3 - Basic QA Pipeline without Elasticsearch: [Jupyter notebook](https://github.com/deepset-ai/haystack/blob/main/tutorials/Tutorial3_Basic_QA_Pipeline_without_Elasticsearch.ipynb) - | - [Colab](https://colab.research.google.com/github/deepset-ai/haystack/blob/main/tutorials/Tutorial3_Basic_QA_Pipeline_without_Elasticsearch.ipynb) - | - [Python](https://github.com/deepset-ai/haystack/blob/main/tutorials/Tutorial3_Basic_QA_Pipeline_without_Elasticsearch.py) -- Tutorial 4 - FAQ-style QA: [Jupyter notebook](https://github.com/deepset-ai/haystack/blob/main/tutorials/Tutorial4_FAQ_style_QA.ipynb) - | - [Colab](https://colab.research.google.com/github/deepset-ai/haystack/blob/main/tutorials/Tutorial4_FAQ_style_QA.ipynb) - | - [Python](https://github.com/deepset-ai/haystack/blob/main/tutorials/Tutorial4_FAQ_style_QA.py) -- Tutorial 5 - Evaluation of the whole QA-Pipeline: [Jupyter noteboook](https://github.com/deepset-ai/haystack/blob/main/tutorials/Tutorial5_Evaluation.ipynb) - | - [Colab](https://colab.research.google.com/github/deepset-ai/haystack/blob/main/tutorials/Tutorial5_Evaluation.ipynb) - | - [Python](https://github.com/deepset-ai/haystack/blob/main/tutorials/Tutorial5_Evaluation.py) -- Tutorial 6 - Better Retrievers via "Dense Passage Retrieval": - [Jupyter noteboook](https://github.com/deepset-ai/haystack/blob/main/tutorials/Tutorial6_Better_Retrieval_via_DPR.ipynb) - | - [Colab](https://colab.research.google.com/github/deepset-ai/haystack/blob/main/tutorials/Tutorial6_Better_Retrieval_via_DPR.ipynb) - | - [Python](https://github.com/deepset-ai/haystack/blob/main/tutorials/Tutorial6_Better_Retrieval_via_DPR.py) -- Tutorial 7 - Generative QA via "Retrieval-Augmented Generation": - [Jupyter noteboook](https://github.com/deepset-ai/haystack/blob/main/tutorials/Tutorial7_RAG_Generator.ipynb) - | - [Colab](https://colab.research.google.com/github/deepset-ai/haystack/blob/main/tutorials/Tutorial7_RAG_Generator.ipynb) - | - [Python](https://github.com/deepset-ai/haystack/blob/main/tutorials/Tutorial7_RAG_Generator.py) -- Tutorial 8 - Preprocessing: - [Jupyter noteboook](https://github.com/deepset-ai/haystack/blob/main/tutorials/Tutorial8_Preprocessing.ipynb) - | - [Colab](https://colab.research.google.com/github/deepset-ai/haystack/blob/main/tutorials/Tutorial8_Preprocessing.ipynb) - | - [Python](https://github.com/deepset-ai/haystack/blob/main/tutorials/Tutorial8_Preprocessing.py) -- Tutorial 9 - DPR Training: - [Jupyter noteboook](https://github.com/deepset-ai/haystack/blob/main/tutorials/Tutorial9_DPR_training.ipynb) - | - [Colab](https://colab.research.google.com/github/deepset-ai/haystack/blob/main/tutorials/Tutorial9_DPR_training.ipynb) - | - [Python](https://github.com/deepset-ai/haystack/blob/main/tutorials/Tutorial9_DPR_training.py) -- Tutorial 10 - Knowledge Graph: - [Jupyter noteboook](https://github.com/deepset-ai/haystack/blob/main/tutorials/Tutorial10_Knowledge_Graph.ipynb) - | - [Colab](https://colab.research.google.com/github/deepset-ai/haystack/blob/main/tutorials/Tutorial10_Knowledge_Graph.ipynb) - | - [Python](https://github.com/deepset-ai/haystack/blob/main/tutorials/Tutorial10_Knowledge_Graph.py) -- Tutorial 11 - Pipelines: - [Jupyter noteboook](https://github.com/deepset-ai/haystack/blob/main/tutorials/Tutorial11_Pipelines.ipynb) - | - [Colab](https://colab.research.google.com/github/deepset-ai/haystack/blob/main/tutorials/Tutorial11_Pipelines.ipynb) - | - [Python](https://github.com/deepset-ai/haystack/blob/main/tutorials/Tutorial11_Pipelines.py) -- Tutorial 12 - Long-Form Question Answering: - [Jupyter noteboook](https://github.com/deepset-ai/haystack/blob/main/tutorials/Tutorial12_LFQA.ipynb) - | - [Colab](https://colab.research.google.com/github/deepset-ai/haystack/blob/main/tutorials/Tutorial12_LFQA.ipynb) - | - [Python](https://github.com/deepset-ai/haystack/blob/main/tutorials/Tutorial12_LFQA.py) -- Tutorial 13 - Question Generation: - [Jupyter noteboook](https://github.com/deepset-ai/haystack/blob/main/tutorials/Tutorial13_Question_generation.ipynb) - | - [Colab](https://colab.research.google.com/github/deepset-ai/haystack/blob/main/tutorials/Tutorial13_Question_generation.ipynb) - | - [Python](https://github.com/deepset-ai/haystack/blob/main/tutorials/Tutorial13_Question_generation.py) -- Tutorial 14 - Query Classifier: - [Jupyter noteboook](https://github.com/deepset-ai/haystack/blob/main/tutorials/Tutorial14_Query_Classifier.ipynb) - | - [Colab](https://colab.research.google.com/github/deepset-ai/haystack/blob/main/tutorials/Tutorial14_Query_Classifier.ipynb) - | - [Python](https://github.com/deepset-ai/haystack/blob/main/tutorials/Tutorial14_Query_Classifier.py) -- Tutorial 15 - TableQA: - [Jupyter noteboook](https://github.com/deepset-ai/haystack/blob/main/tutorials/Tutorial15_TableQA.ipynb) - | - [Colab](https://colab.research.google.com/github/deepset-ai/haystack/blob/main/tutorials/Tutorial15_TableQA.ipynb) - | - [Python](https://github.com/deepset-ai/haystack/blob/main/tutorials/Tutorial15_TableQA.py) -- Tutorial 16 - Document Classification at Indexing Time: - [Jupyter noteboook](https://github.com/deepset-ai/haystack/blob/main/tutorials/Tutorial16_Document_Classifier_at_Index_Time.ipynb) - | - [Colab](https://colab.research.google.com/github/deepset-ai/haystack/blob/main/tutorials/Tutorial16_Document_Classifier_at_Index_Time.ipynb) - | - [Python](https://github.com/deepset-ai/haystack/blob/main/tutorials/Tutorial16_Document_Classifier_at_Index_Time.py) -- Tutorial 17 - Answers & Documents to Speech: - [Jupyter noteboook](https://github.com/deepset-ai/haystack/blob/main/tutorials/Tutorial17_Audio.ipynb) - | - [Colab](https://colab.research.google.com/github/deepset-ai/haystack/blob/main/tutorials/Tutorial17_Audio.ipynb) - | - [Python](https://github.com/deepset-ai/haystack/blob/main/tutorials/Tutorial17_Audio.py) -- Tutorial 18 - Generative Pseudo Labeling: - [Jupyter noteboook](https://github.com/deepset-ai/haystack/blob/main/tutorials/Tutorial18_GPL.ipynb) - | - [Colab](https://colab.research.google.com/github/deepset-ai/haystack/blob/main/tutorials/Tutorial18_GPL.ipynb) - | - [Python](https://github.com/deepset-ai/haystack/blob/main/tutorials/Tutorial18_GPL.py) - +Explore [the rest of our tutorials](https://github.com/deepset-ai/haystack-tutorials) +to learn how to tweak pipelines, train models and perform evaluation. ## :beginner: Quick Demo @@ -325,8 +218,8 @@ We also check [Twitter](https://twitter.com/deepset_ai) and [Stack Overflow](htt ## :heart: Contributing -We are very open to the community's contributions - be it a quick fix of a typo, or a completely new feature! -You don't need to be a Haystack expert to provide meaningful improvements. +We are very open to the community's contributions - be it a quick fix of a typo, or a completely new feature! +You don't need to be a Haystack expert to provide meaningful improvements. To learn how to get started, check out our [Contributor Guidelines](https://github.com/deepset-ai/haystack/blob/main/CONTRIBUTING.md) first. You can also find instructions to run the tests locally there. diff --git a/tutorials/Tutorial10_Knowledge_Graph.ipynb b/tutorials/Tutorial10_Knowledge_Graph.ipynb deleted file mode 100644 index ace808d6d3..0000000000 --- a/tutorials/Tutorial10_Knowledge_Graph.ipynb +++ /dev/null @@ -1,445 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "# Question Answering on a Knowledge Graph\n", - "\n", - "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/deepset-ai/haystack/blob/main/tutorials/Tutorial10_Knowledge_Graph.ipynb)\n", - "\n", - "Haystack allows storing and querying knowledge graphs with the help of pre-trained models that translate text queries to SPARQL queries.\n", - "This tutorial demonstrates how to load an existing knowledge graph into haystack, load a pre-trained retriever, and execute text queries on the knowledge graph.\n", - "The training of models that translate text queries into SPARQL queries is currently not supported." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false, - "jupyter": { - "outputs_hidden": false - }, - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "# Install the latest release of Haystack in your own environment\n", - "#! pip install farm-haystack\n", - "\n", - "# Install the latest main of Haystack\n", - "!pip install --upgrade pip\n", - "!pip install git+https://github.com/deepset-ai/haystack.git#egg=farm-haystack[colab,inmemorygraph]" - ] - }, - { - "cell_type": "markdown", - "source": [ - "## Logging\n", - "\n", - "We configure how logging messages should be displayed and which log level should be used before importing Haystack.\n", - "Example log message:\n", - "INFO - haystack.utils.preprocessing - Converting data/tutorial1/218_Olenna_Tyrell.txt\n", - "Default log level in basicConfig is WARNING so the explicit parameter is not necessary but can be changed easily:" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - } - }, - { - "cell_type": "code", - "execution_count": null, - "outputs": [], - "source": [ - "import logging\n", - "\n", - "logging.basicConfig(format=\"%(levelname)s - %(name)s - %(message)s\", level=logging.WARNING)\n", - "logging.getLogger(\"haystack\").setLevel(logging.INFO)" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false, - "jupyter": { - "outputs_hidden": false - }, - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "# Here are some imports that we'll need\n", - "\n", - "import subprocess\n", - "import time\n", - "from pathlib import Path\n", - "\n", - "from haystack.nodes import Text2SparqlRetriever\n", - "from haystack.document_stores import InMemoryKnowledgeGraph\n", - "from haystack.utils import fetch_archive_from_http" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "## Downloading Knowledge Graph and Model" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false, - "jupyter": { - "outputs_hidden": false - }, - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "# Let's first fetch some triples that we want to store in our knowledge graph\n", - "# Here: exemplary triples from the wizarding world\n", - "graph_dir = \"data/tutorial10\"\n", - "s3_url = \"https://fandom-qa.s3-eu-west-1.amazonaws.com/triples_and_config.zip\"\n", - "fetch_archive_from_http(url=s3_url, output_dir=graph_dir)\n", - "\n", - "# Fetch a pre-trained BART model that translates text queries to SPARQL queries\n", - "model_dir = \"../saved_models/tutorial10_knowledge_graph/\"\n", - "s3_url = \"https://fandom-qa.s3-eu-west-1.amazonaws.com/saved_models/hp_v3.4.zip\"\n", - "fetch_archive_from_http(url=s3_url, output_dir=model_dir)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Initialize a knowledge graph and load data" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Currently, Haystack supports two alternative implementations for knowledge graphs:\n", - "* simple InMemoryKnowledgeGraph (based on RDFLib in-memory store)\n", - "* GraphDBKnowledgeGraph, which runs on GraphDB." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### InMemoryKnowledgeGraph " - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "The last triple stored in the knowledge graph is: {'s': {'type': 'uri', 'value': 'https://deepset.ai/harry_potter/Harry_potter'}, 'p': {'type': 'uri', 'value': 'https://deepset.ai/harry_potter/family'}, 'o': {'type': 'uri', 'value': 'https://deepset.ai/harry_potter/Dudley_dursleys_children'}}\n", - "There are 118543 triples stored in the knowledge graph.\n" - ] - } - ], - "source": [ - "# Initialize a in memory knowledge graph and use \"tutorial_10_index\" as the name of the index\n", - "kg = InMemoryKnowledgeGraph(index=\"tutorial_10_index\")\n", - "\n", - "# Delete the index as it might have been already created in previous runs\n", - "kg.delete_index()\n", - "\n", - "# Create the index\n", - "kg.create_index()\n", - "\n", - "# Import triples of subject, predicate, and object statements from a ttl file\n", - "kg.import_from_ttl_file(index=\"tutorial_10_index\", path=Path(graph_dir) / \"triples.ttl\")\n", - "print(f\"The last triple stored in the knowledge graph is: {kg.get_all_triples()[-1]}\")\n", - "print(f\"There are {len(kg.get_all_triples())} triples stored in the knowledge graph.\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "jp-MarkdownHeadingCollapsed": true, - "tags": [] - }, - "source": [ - "### GraphDBKnowledgeGraph (alternative)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "#### Launching a GraphDB instance" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false, - "jupyter": { - "outputs_hidden": false - }, - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "# # Unfortunately, there seems to be no good way to run GraphDB in colab environments\n", - "# # In your local environment, you could start a GraphDB server with docker\n", - "# # Feel free to check GraphDB's website for the free version https://www.ontotext.com/products/graphdb/graphdb-free/\n", - "# import os\n", - "\n", - "# LAUNCH_GRAPHDB = os.environ.get(\"LAUNCH_GRAPHDB\", False)\n", - "\n", - "# if LAUNCH_GRAPHDB:\n", - "# print(\"Starting GraphDB ...\")\n", - "# status = subprocess.run(\n", - "# [\n", - "# \"docker run -d -p 7200:7200 --name graphdb-instance-tutorial docker-registry.ontotext.com/graphdb-free:9.4.1-adoptopenjdk11\"\n", - "# ],\n", - "# shell=True,\n", - "# )\n", - "# if status.returncode:\n", - "# raise Exception(\n", - "# \"Failed to launch GraphDB. Maybe it is already running or you already have a container with that name that you could start?\"\n", - "# )\n", - "# time.sleep(5)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "#### Creating a new GraphDB repository (also known as index in haystack's document stores)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false, - "jupyter": { - "outputs_hidden": false - }, - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "# from haystack.document_stores import GraphDBKnowledgeGraph\n", - "\n", - "# # Initialize a knowledge graph connected to GraphDB and use \"tutorial_10_index\" as the name of the index\n", - "# kg = GraphDBKnowledgeGraph(index=\"tutorial_10_index\")\n", - "\n", - "# # Delete the index as it might have been already created in previous runs\n", - "# kg.delete_index()\n", - "\n", - "# # Create the index based on a configuration file\n", - "# kg.create_index(config_path=Path(graph_dir) / \"repo-config.ttl\")\n", - "\n", - "# # Import triples of subject, predicate, and object statements from a ttl file\n", - "# kg.import_from_ttl_file(index=\"tutorial_10_index\", path=Path(graph_dir) / \"triples.ttl\")\n", - "# print(f\"The last triple stored in the knowledge graph is: {kg.get_all_triples()[-1]}\")\n", - "# print(f\"There are {len(kg.get_all_triples())} triples stored in the knowledge graph.\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false, - "jupyter": { - "outputs_hidden": false - }, - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "# # Define prefixes for names of resources so that we can use shorter resource names in queries\n", - "# prefixes = \"\"\"PREFIX rdf: \n", - "# PREFIX xsd: \n", - "# PREFIX hp: \n", - "# \"\"\"\n", - "# kg.prefixes = prefixes" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Load the pre-trained retriever" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "# Load a pre-trained model that translates text queries to SPARQL queries\n", - "kgqa_retriever = Text2SparqlRetriever(knowledge_graph=kg, model_name_or_path=Path(model_dir) / \"hp_v3.4\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "## Query Execution\n", - "\n", - "We can now ask questions that will be answered by our knowledge graph!\n", - "One limitation though: our pre-trained model can only generate questions about resources it has seen during training.\n", - "Otherwise, it cannot translate the name of the resource to the identifier used in the knowledge graph.\n", - "E.g. \"Harry\" -> \"hp:Harry_potter\"" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": { - "collapsed": false, - "jupyter": { - "outputs_hidden": false - }, - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Translating the text query \"In which house is Harry Potter?\" to a SPARQL query and executing it on the knowledge graph...\n", - "[{'answer': ['https://deepset.ai/harry_potter/Gryffindor'], 'prediction_meta': {'model': 'Text2SparqlRetriever', 'sparql_query': 'select ?a { hp:Harry_potter hp:house ?a . }'}}]\n", - "Executing a SPARQL query with prefixed names of resources...\n", - "(['https://deepset.ai/harry_potter/Rubeus_hagrid', 'https://deepset.ai/harry_potter/Ogg'], 'select distinct ?sbj where { ?sbj hp:job hp:Keeper_of_keys_and_grounds . }')\n", - "Executing a SPARQL query with full names of resources...\n", - "(['https://deepset.ai/harry_potter/Otter'], 'select distinct ?obj where { ?obj . }')\n" - ] - } - ], - "source": [ - "query = \"In which house is Harry Potter?\"\n", - "print(f'Translating the text query \"{query}\" to a SPARQL query and executing it on the knowledge graph...')\n", - "result = kgqa_retriever.retrieve(query=query)\n", - "print(result)\n", - "# Correct SPARQL query: select ?a { hp:Harry_potter hp:house ?a . }\n", - "# Correct answer: Gryffindor\n", - "\n", - "print(\"Executing a SPARQL query with prefixed names of resources...\")\n", - "result = kgqa_retriever._query_kg(\n", - " sparql_query=\"select distinct ?sbj where { ?sbj hp:job hp:Keeper_of_keys_and_grounds . }\"\n", - ")\n", - "print(result)\n", - "# Paraphrased question: Who is the keeper of keys and grounds?\n", - "# Correct answer: Rubeus Hagrid\n", - "\n", - "print(\"Executing a SPARQL query with full names of resources...\")\n", - "result = kgqa_retriever._query_kg(\n", - " sparql_query=\"select distinct ?obj where { ?obj . }\"\n", - ")\n", - "print(result)\n", - "# Paraphrased question: What is the patronus of Hermione?\n", - "# Correct answer: Otter" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## About us\n", - "\n", - "This [Haystack](https://github.com/deepset-ai/haystack/) notebook was made with love by [deepset](https://deepset.ai/) in Berlin, Germany\n", - "\n", - "We bring NLP to the industry via open source! \n", - "Our focus: Industry specific language models & large scale QA systems. \n", - " \n", - "Some of our other work: \n", - "- [German BERT](https://deepset.ai/german-bert)\n", - "- [GermanQuAD and GermanDPR](https://deepset.ai/germanquad)\n", - "- [FARM](https://github.com/deepset-ai/FARM)\n", - "\n", - "Get in touch:\n", - "[Twitter](https://twitter.com/deepset_ai) | [LinkedIn](https://www.linkedin.com/company/deepset-ai/) | [Slack](https://haystack.deepset.ai/community/join) | [GitHub Discussions](https://github.com/deepset-ai/haystack/discussions) | [Website](https://deepset.ai)\n", - "\n", - "By the way: [we're hiring!](https://www.deepset.ai/jobs)" - ] - } - ], - "metadata": { - "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.10.4" - }, - "vscode": { - "interpreter": { - "hash": "d6fc774dec8e6d4d8b6a5562b41269a570ea5456d1c03f28da35966a9134f033" - } - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/tutorials/Tutorial10_Knowledge_Graph.py b/tutorials/Tutorial10_Knowledge_Graph.py deleted file mode 100644 index 70ab063b83..0000000000 --- a/tutorials/Tutorial10_Knowledge_Graph.py +++ /dev/null @@ -1,116 +0,0 @@ -import logging - -# We configure how logging messages should be displayed and which log level should be used before importing Haystack. -# Example log message: -# INFO - haystack.utils.preprocessing - Converting data/tutorial1/218_Olenna_Tyrell.txt -# Default log level in basicConfig is WARNING so the explicit parameter is not necessary but can be changed easily: -logging.basicConfig(format="%(levelname)s - %(name)s - %(message)s", level=logging.WARNING) -logging.getLogger("haystack").setLevel(logging.INFO) - -import os -import subprocess -import time -from pathlib import Path - -from haystack.nodes import Text2SparqlRetriever -from haystack.document_stores import GraphDBKnowledgeGraph, InMemoryKnowledgeGraph -from haystack.utils import fetch_archive_from_http - - -def tutorial10_knowledge_graph(): - # Let's first fetch some triples that we want to store in our knowledge graph - # Here: exemplary triples from the wizarding world - graph_dir = "data/tutorial10/" - s3_url = "https://fandom-qa.s3-eu-west-1.amazonaws.com/triples_and_config.zip" - fetch_archive_from_http(url=s3_url, output_dir=graph_dir) - - # Fetch a pre-trained BART model that translates text queries to SPARQL queries - model_dir = "../saved_models/tutorial10_knowledge_graph/" - s3_url = "https://fandom-qa.s3-eu-west-1.amazonaws.com/saved_models/hp_v3.4.zip" - fetch_archive_from_http(url=s3_url, output_dir=model_dir) - - # Initialize a in memory knowledge graph and use "tutorial_10_index" as the name of the index - kg = InMemoryKnowledgeGraph(index="tutorial_10_index") - # Delete the index as it might have been already created in previous runs - kg.delete_index() - # Create the index - kg.create_index() - # Import triples of subject, predicate, and object statements from a ttl file - kg.import_from_ttl_file(index="tutorial_10_index", path=Path(graph_dir) / "triples.ttl") - print(f"The last triple stored in the knowledge graph is: {kg.get_all_triples()[-1]}") - print(f"There are {len(kg.get_all_triples())} triples stored in the knowledge graph.") - - # ALTERNATIVE PATH USING GraphDB as knowledge graph - # LAUNCH_GRAPHDB = os.environ.get("LAUNCH_GRAPHDB", True) - # # Start a GraphDB server - # if LAUNCH_GRAPHDB: - # print("Starting GraphDB ...") - # status = subprocess.run( - # [ - # "docker run -d -p 7200:7200 --name graphdb-instance-tutorial docker-registry.ontotext.com/graphdb-free:9.4.1-adoptopenjdk11" - # ], - # shell=True, - # ) - # if status.returncode: - # status = subprocess.run(["docker start graphdb-instance-tutorial"], shell=True) - # if status.returncode: - # raise Exception( - # "Failed to launch GraphDB. If you want to connect to an already running GraphDB instance" - # "then set LAUNCH_GRAPHDB in the script to False." - # ) - # time.sleep(5) - # # Initialize a knowledge graph connected to GraphDB and use "tutorial_10_index" as the name of the index - # kg = GraphDBKnowledgeGraph(index="tutorial_10_index") - # # Delete the index as it might have been already created in previous runs - # kg.delete_index() - # # Create the index based on a configuration file - # kg.create_index(config_path=Path(graph_dir + "repo-config.ttl")) - # # Import triples of subject, predicate, and object statements from a ttl file - # kg.import_from_ttl_file(index="tutorial_10_index", path=Path(graph_dir + "triples.ttl")) - # print(f"The last triple stored in the knowledge graph is: {kg.get_all_triples()[-1]}") - # print(f"There are {len(kg.get_all_triples())} triples stored in the knowledge graph.") - # # Define prefixes for names of resources so that we can use shorter resource names in queries - # prefixes = """PREFIX rdf: - # PREFIX xsd: - # PREFIX hp: - # """ - # kg.prefixes = prefixes - - # Load a pre-trained model that translates text queries to SPARQL queries - kgqa_retriever = Text2SparqlRetriever(knowledge_graph=kg, model_name_or_path=model_dir + "hp_v3.4") - - # We can now ask questions that will be answered by our knowledge graph! - # One limitation though: our pre-trained model can only generate questions about resources it has seen during training. - # Otherwise, it cannot translate the name of the resource to the identifier used in the knowledge graph. - # E.g. "Harry" -> "hp:Harry_potter" - - query = "In which house is Harry Potter?" - print(f'Translating the text query "{query}" to a SPARQL query and executing it on the knowledge graph...') - result = kgqa_retriever.retrieve(query=query) - print(result) - # Correct SPARQL query: select ?a { hp:Harry_potter hp:house ?a . } - # Correct answer: Gryffindor - - print("Executing a SPARQL query with prefixed names of resources...") - result = kgqa_retriever._query_kg( - sparql_query="select distinct ?sbj where { ?sbj hp:job hp:Keeper_of_keys_and_grounds . }" - ) - print(result) - # Paraphrased question: Who is the keeper of keys and grounds? - # Correct answer: Rubeus Hagrid - - print("Executing a SPARQL query with full names of resources...") - result = kgqa_retriever._query_kg( - sparql_query="select distinct ?obj where { ?obj . }" - ) - print(result) - # Paraphrased question: What is the patronus of Hermione? - # Correct answer: Otter - - -if __name__ == "__main__": - tutorial10_knowledge_graph() - -# This Haystack script was made with love by deepset in Berlin, Germany -# Haystack: https://github.com/deepset-ai/haystack -# deepset: https://deepset.ai/ diff --git a/tutorials/Tutorial11_Pipelines.ipynb b/tutorials/Tutorial11_Pipelines.ipynb deleted file mode 100644 index e3bc0bfdf4..0000000000 --- a/tutorials/Tutorial11_Pipelines.ipynb +++ /dev/null @@ -1,827 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "# Pipelines Tutorial\n", - "\n", - "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/deepset-ai/haystack/blob/main/tutorials/Tutorial11_Pipelines.ipynb)\n", - "\n", - "In this tutorial, you will learn how the `Pipeline` class acts as a connector between all the different\n", - "building blocks that are found in FARM. Whether you are using a Reader, Generator, Summarizer\n", - "or Retriever (or 2), the `Pipeline` class will help you build a Directed Acyclic Graph (DAG) that\n", - "determines how to route the output of one component into the input of another.\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "## Setting Up the Environment\n", - "\n", - "Let's start by ensuring we have a GPU running to ensure decent speed in this tutorial.\n", - "In Google colab, you can change to a GPU runtime in the menu:\n", - "- **Runtime -> Change Runtime type -> Hardware accelerator -> GPU**" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "# Make sure you have a GPU running\n", - "!nvidia-smi" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "These lines are to install Haystack through pip" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "# Install the latest release of Haystack in your own environment\n", - "#! pip install farm-haystack\n", - "\n", - "# Install the latest main of Haystack\n", - "!pip install --upgrade pip\n", - "!pip install git+https://github.com/deepset-ai/haystack.git#egg=farm-haystack[colab]\n", - "\n", - "# Install pygraphviz\n", - "!apt install libgraphviz-dev\n", - "!pip install pygraphviz" - ] - }, - { - "cell_type": "markdown", - "source": [ - "## Logging\n", - "\n", - "We configure how logging messages should be displayed and which log level should be used before importing Haystack.\n", - "Example log message:\n", - "INFO - haystack.utils.preprocessing - Converting data/tutorial1/218_Olenna_Tyrell.txt\n", - "Default log level in basicConfig is WARNING so the explicit parameter is not necessary but can be changed easily:" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - } - }, - { - "cell_type": "code", - "execution_count": null, - "outputs": [], - "source": [ - "import logging\n", - "\n", - "logging.basicConfig(format=\"%(levelname)s - %(name)s - %(message)s\", level=logging.WARNING)\n", - "logging.getLogger(\"haystack\").setLevel(logging.INFO)" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "If running from Colab or a no Docker environment, you will want to start Elasticsearch from source" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "# In Colab / No Docker environments: Start Elasticsearch from source\n", - "! wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.9.2-linux-x86_64.tar.gz -q\n", - "! tar -xzf elasticsearch-7.9.2-linux-x86_64.tar.gz\n", - "! chown -R daemon:daemon elasticsearch-7.9.2\n", - "\n", - "import os\n", - "from subprocess import Popen, PIPE, STDOUT\n", - "\n", - "es_server = Popen(\n", - " [\"elasticsearch-7.9.2/bin/elasticsearch\"], stdout=PIPE, stderr=STDOUT, preexec_fn=lambda: os.setuid(1) # as daemon\n", - ")\n", - "# wait until ES has started\n", - "! sleep 30" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "## Initialization" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "Then let's fetch some data (in this case, pages from the Game of Thrones wiki) and prepare it so that it can\n", - "be used indexed into our `DocumentStore`" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "from haystack.utils import (\n", - " print_answers,\n", - " print_documents,\n", - " fetch_archive_from_http,\n", - " convert_files_to_docs,\n", - " clean_wiki_text,\n", - ")\n", - "\n", - "# Download and prepare data - 517 Wikipedia articles for Game of Thrones\n", - "doc_dir = \"data/tutorial11\"\n", - "s3_url = \"https://s3.eu-central-1.amazonaws.com/deepset.ai-farm-qa/datasets/documents/wiki_gameofthrones_txt11.zip\"\n", - "fetch_archive_from_http(url=s3_url, output_dir=doc_dir)\n", - "\n", - "# convert files to dicts containing documents that can be indexed to our datastore\n", - "got_docs = convert_files_to_docs(dir_path=doc_dir, clean_func=clean_wiki_text, split_paragraphs=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "Here we initialize the core components that we will be gluing together using the `Pipeline` class.\n", - "We have a `DocumentStore`, an `BM25Retriever` and a `FARMReader`.\n", - "These can be combined to create a classic Retriever-Reader pipeline that is designed\n", - "to perform Open Domain Question Answering." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "from haystack import Pipeline\n", - "from haystack.utils import launch_es\n", - "from haystack.document_stores import ElasticsearchDocumentStore\n", - "from haystack.nodes import BM25Retriever, EmbeddingRetriever, FARMReader\n", - "\n", - "\n", - "# Initialize DocumentStore and index documents\n", - "launch_es()\n", - "document_store = ElasticsearchDocumentStore()\n", - "document_store.delete_documents()\n", - "document_store.write_documents(got_docs)\n", - "\n", - "# Initialize Sparse retriever\n", - "bm25_retriever = BM25Retriever(document_store=document_store)\n", - "\n", - "# Initialize dense retriever\n", - "embedding_retriever = EmbeddingRetriever(\n", - " document_store, embedding_model=\"sentence-transformers/multi-qa-mpnet-base-dot-v1\"\n", - ")\n", - "document_store.update_embeddings(embedding_retriever, update_existing_embeddings=False)\n", - "\n", - "# Initialize reader\n", - "reader = FARMReader(model_name_or_path=\"deepset/roberta-base-squad2\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "## Prebuilt Pipelines\n", - "\n", - "Haystack features many prebuilt pipelines that cover common tasks.\n", - "Here we have an `ExtractiveQAPipeline` (the successor to the now deprecated `Finder` class)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "from haystack.pipelines import ExtractiveQAPipeline\n", - "\n", - "# Prebuilt pipeline\n", - "p_extractive_premade = ExtractiveQAPipeline(reader=reader, retriever=bm25_retriever)\n", - "res = p_extractive_premade.run(\n", - " query=\"Who is the father of Arya Stark?\", params={\"Retriever\": {\"top_k\": 10}, \"Reader\": {\"top_k\": 5}}\n", - ")\n", - "print_answers(res, details=\"minimum\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false - }, - "source": [ - "If you want to just do the retrieval step, you can use a `DocumentSearchPipeline`" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "from haystack.pipelines import DocumentSearchPipeline\n", - "\n", - "p_retrieval = DocumentSearchPipeline(bm25_retriever)\n", - "res = p_retrieval.run(query=\"Who is the father of Arya Stark?\", params={\"Retriever\": {\"top_k\": 10}})\n", - "print_documents(res, max_text_len=200)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false - }, - "source": [ - "Or if you want to use a `Generator` instead of a `Reader`,\n", - "you can initialize a `GenerativeQAPipeline` like this:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "from haystack.pipelines import GenerativeQAPipeline, FAQPipeline\n", - "from haystack.nodes import RAGenerator\n", - "\n", - "# We set this to True so that the document store returns document embeddings with each document\n", - "# This is needed by the Generator\n", - "document_store.return_embedding = True\n", - "\n", - "# Initialize generator\n", - "rag_generator = RAGenerator()\n", - "\n", - "# Generative QA\n", - "p_generator = GenerativeQAPipeline(generator=rag_generator, retriever=embedding_retriever)\n", - "res = p_generator.run(query=\"Who is the father of Arya Stark?\", params={\"Retriever\": {\"top_k\": 10}})\n", - "print_answers(res, details=\"minimum\")\n", - "\n", - "# We are setting this to False so that in later pipelines,\n", - "# we get a cleaner printout\n", - "document_store.return_embedding = False" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false - }, - "source": [ - "Haystack features prebuilt pipelines to do:\n", - "- just document search (DocumentSearchPipeline),\n", - "- document search with summarization (SearchSummarizationPipeline)\n", - "- generative QA (GenerativeQAPipeline)\n", - "- FAQ style QA (FAQPipeline)\n", - "- translated search (TranslationWrapperPipeline)\n", - "To find out more about these pipelines, have a look at our [documentation](https://haystack.deepset.ai/docs/latest/pipelinesmd)\n" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "With any Pipeline, whether prebuilt or custom constructed,\n", - "you can save a diagram showing how all the components are connected.\n", - "\n", - "![image](https://github.com/deepset-ai/haystack/blob/main/docs/img/retriever-reader-pipeline.png?raw=true)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "p_extractive_premade.draw(\"pipeline_extractive_premade.png\")\n", - "p_retrieval.draw(\"pipeline_retrieval.png\")\n", - "p_generator.draw(\"pipeline_generator.png\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "## Custom Pipelines\n", - "\n", - "Now we are going to rebuild the `ExtractiveQAPipelines` using the generic Pipeline class.\n", - "We do this by adding the building blocks that we initialized as nodes in the graph." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "# Custom built extractive QA pipeline\n", - "p_extractive = Pipeline()\n", - "p_extractive.add_node(component=bm25_retriever, name=\"Retriever\", inputs=[\"Query\"])\n", - "p_extractive.add_node(component=reader, name=\"Reader\", inputs=[\"Retriever\"])\n", - "\n", - "# Now we can run it\n", - "res = p_extractive.run(\n", - " query=\"Who is the father of Arya Stark?\", params={\"Retriever\": {\"top_k\": 10}, \"Reader\": {\"top_k\": 5}}\n", - ")\n", - "print_answers(res, details=\"minimum\")\n", - "p_extractive.draw(\"pipeline_extractive.png\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "Pipelines offer a very simple way to ensemble together different components.\n", - "In this example, we are going to combine the power of an `EmbeddingRetriever`\n", - "with the keyword based `BM25Retriever`.\n", - "See our [documentation](https://haystack.deepset.ai/docs/latest/retrievermd) to understand why\n", - "we might want to combine a dense and sparse retriever.\n", - "\n", - "![image](https://github.com/deepset-ai/haystack/blob/main/docs/img/tutorial11_custompipelines_pipeline_ensemble.png?raw=true)\n", - "\n", - "Here we use a `JoinDocuments` node so that the predictions from each retriever can be merged together." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "from haystack.nodes import JoinDocuments\n", - "\n", - "# Create ensembled pipeline\n", - "p_ensemble = Pipeline()\n", - "p_ensemble.add_node(component=bm25_retriever, name=\"ESRetriever\", inputs=[\"Query\"])\n", - "p_ensemble.add_node(component=embedding_retriever, name=\"EmbeddingRetriever\", inputs=[\"Query\"])\n", - "p_ensemble.add_node(\n", - " component=JoinDocuments(join_mode=\"concatenate\"), name=\"JoinResults\", inputs=[\"ESRetriever\", \"EmbeddingRetriever\"]\n", - ")\n", - "p_ensemble.add_node(component=reader, name=\"Reader\", inputs=[\"JoinResults\"])\n", - "p_ensemble.draw(\"pipeline_ensemble.png\")\n", - "\n", - "# Run pipeline\n", - "res = p_ensemble.run(\n", - " query=\"Who is the father of Arya Stark?\", params={\"EmbeddingRetriever\": {\"top_k\": 5}, \"ESRetriever\": {\"top_k\": 5}}\n", - ")\n", - "print_answers(res, details=\"minimum\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "## Custom Nodes\n", - "\n", - "Nodes are relatively simple objects\n", - "and we encourage our users to design their own if they don't see on that fits their use case\n", - "\n", - "The only requirements are:\n", - "- Create a class that inherits `BaseComponent`.\n", - "- Add a method run() to your class. Add the mandatory and optional arguments it needs to process. These arguments must be passed as input to the pipeline, inside `params`, or output by preceding nodes.\n", - "- Add processing logic inside the run() (e.g. reformatting the query).\n", - "- Return a tuple that contains your output data (for the next node)\n", - "and the name of the outgoing edge (by default \"output_1\" for nodes that have one output)\n", - "- Add a class attribute outgoing_edges = 1 that defines the number of output options from your node. You only need a higher number here if you have a decision node (see below).\n", - "\n", - "Here we have a template for a Node:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "from haystack import BaseComponent\n", - "from typing import Optional, List\n", - "\n", - "\n", - "class CustomNode(BaseComponent):\n", - " outgoing_edges = 1\n", - "\n", - " def run(self, query: str, my_optional_param: Optional[int]):\n", - " # process the inputs\n", - " output = {\"my_output\": ...}\n", - " return output, \"output_1\"\n", - "\n", - " def run_batch(self, queries: List[str], my_optional_param: Optional[int]):\n", - " # process the inputs\n", - " output = {\"my_output\": ...}\n", - " return output, \"output_1\"" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "## Decision Nodes\n", - "\n", - "Decision Nodes help you route your data so that only certain branches of your `Pipeline` are run.\n", - "One popular use case for such query classifiers is routing keyword queries to Elasticsearch and questions to EmbeddingRetriever + Reader.\n", - "With this approach you keep optimal speed and simplicity for keywords while going deep with transformers when it's most helpful.\n", - "\n", - "![image](https://github.com/deepset-ai/haystack/blob/main/docs/img/tutorial11_decision_nodes_pipeline_classifier.png?raw=true)\n", - "\n", - "Though this looks very similar to the ensembled pipeline shown above,\n", - "the key difference is that only one of the retrievers is run for each request.\n", - "By contrast both retrievers are always run in the ensembled approach.\n", - "\n", - "Below, we define a very naive `QueryClassifier` and show how to use it:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "class CustomQueryClassifier(BaseComponent):\n", - " outgoing_edges = 2\n", - "\n", - " def run(self, query: str):\n", - " if \"?\" in query:\n", - " return {}, \"output_2\"\n", - " else:\n", - " return {}, \"output_1\"\n", - "\n", - " def run_batch(self, queries: List[str]):\n", - " split = {\"output_1\": {\"queries\": []}, \"output_2\": {\"queries\": []}}\n", - " for query in queries:\n", - " if \"?\" in query:\n", - " split[\"output_2\"][\"queries\"].append(query)\n", - " else:\n", - " split[\"output_1\"][\"queries\"].append(query)\n", - "\n", - " return split, \"split\"\n", - "\n", - "\n", - "# Here we build the pipeline\n", - "p_classifier = Pipeline()\n", - "p_classifier.add_node(component=CustomQueryClassifier(), name=\"QueryClassifier\", inputs=[\"Query\"])\n", - "p_classifier.add_node(component=bm25_retriever, name=\"ESRetriever\", inputs=[\"QueryClassifier.output_1\"])\n", - "p_classifier.add_node(component=embedding_retriever, name=\"EmbeddingRetriever\", inputs=[\"QueryClassifier.output_2\"])\n", - "p_classifier.add_node(component=reader, name=\"QAReader\", inputs=[\"ESRetriever\", \"EmbeddingRetriever\"])\n", - "p_classifier.draw(\"pipeline_classifier.png\")\n", - "\n", - "# Run only the dense retriever on the full sentence query\n", - "res_1 = p_classifier.run(query=\"Who is the father of Arya Stark?\")\n", - "print(\"Embedding Retriever Results\" + \"\\n\" + \"=\" * 15)\n", - "print_answers(res_1)\n", - "\n", - "# Run only the sparse retriever on a keyword based query\n", - "res_2 = p_classifier.run(query=\"Arya Stark father\")\n", - "print(\"ES Results\" + \"\\n\" + \"=\" * 15)\n", - "print_answers(res_2)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "## Evaluation Nodes\n", - "\n", - "We have also designed a set of nodes that can be used to evaluate the performance of a system.\n", - "Have a look at our [tutorial](https://haystack.deepset.ai/docs/latest/tutorial5md) to get hands on with the code and learn more about Evaluation Nodes!" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "## Debugging Pipelines\n", - "\n", - "You can print out debug information from nodes in your pipelines in a few different ways." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "# 1) You can set the `debug` attribute of a given node.\n", - "bm25_retriever.debug = True\n", - "\n", - "# 2) You can provide `debug` as a parameter when running your pipeline\n", - "result = p_classifier.run(query=\"Who is the father of Arya Stark?\", params={\"ESRetriever\": {\"debug\": True}})\n", - "\n", - "# 3) You can provide the `debug` paramter to all nodes in your pipeline\n", - "result = p_classifier.run(query=\"Who is the father of Arya Stark?\", params={\"debug\": True})\n", - "\n", - "result[\"_debug\"]" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "## YAML Configs\n", - "\n", - "A full `Pipeline` can be defined in a YAML file and simply loaded.\n", - "Having your pipeline available in a YAML is particularly useful\n", - "when you move between experimentation and production environments.\n", - "Just export the YAML from your notebook / IDE and import it into your production environment.\n", - "It also helps with version control of pipelines,\n", - "allows you to share your pipeline easily with colleagues,\n", - "and simplifies the configuration of pipeline parameters in production.\n", - "\n", - "It consists of two main sections: you define all objects (e.g. a reader) in components\n", - "and then stick them together to a pipeline in pipelines.\n", - "You can also set one component to be multiple nodes of a pipeline or to be a node across multiple pipelines.\n", - "It will be loaded just once in memory and therefore doesn't hurt your resources more than actually needed.\n", - "\n", - "The contents of a YAML file should look something like this:" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "```yaml\n", - "version: '0.7'\n", - "components: # define all the building-blocks for Pipeline\n", - "- name: MyReader # custom-name for the component; helpful for visualization & debugging\n", - " type: FARMReader # Haystack Class name for the component\n", - " params:\n", - " no_ans_boost: -10\n", - " model_name_or_path: deepset/roberta-base-squad2\n", - "- name: MyESRetriever\n", - " type: BM25Retriever\n", - " params:\n", - " document_store: MyDocumentStore # params can reference other components defined in the YAML\n", - " custom_query: null\n", - "- name: MyDocumentStore\n", - " type: ElasticsearchDocumentStore\n", - " params:\n", - " index: haystack_test\n", - "pipelines: # multiple Pipelines can be defined using the components from above\n", - "- name: my_query_pipeline # a simple extractive-qa Pipeline\n", - " nodes:\n", - " - name: MyESRetriever\n", - " inputs: [Query]\n", - " - name: MyReader\n", - " inputs: [MyESRetriever]\n", - "```" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "To load, simply call:\n", - "``` python\n", - "yaml_pipeline = Pipeline.load_from_yaml(Path(\"sample.yaml\"))\n", - "```" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "## Conclusion\n", - "\n", - "The possibilities are endless with the `Pipeline` class and we hope that this tutorial will inspire you\n", - "to build custom pipeplines that really work for your use case!" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false - }, - "source": [ - "## About us\n", - "\n", - "This [Haystack](https://github.com/deepset-ai/haystack/) notebook was made with love by [deepset](https://deepset.ai/) in Berlin, Germany\n", - "\n", - "We bring NLP to the industry via open source! \n", - "Our focus: Industry specific language models & large scale QA systems. \n", - " \n", - "Some of our other work: \n", - "- [German BERT](https://deepset.ai/german-bert)\n", - "- [GermanQuAD and GermanDPR](https://deepset.ai/germanquad)\n", - "- [FARM](https://github.com/deepset-ai/FARM)\n", - "\n", - "Get in touch:\n", - "[Twitter](https://twitter.com/deepset_ai) | [LinkedIn](https://www.linkedin.com/company/deepset-ai/) | [Slack](https://haystack.deepset.ai/community/join) | [GitHub Discussions](https://github.com/deepset-ai/haystack/discussions) | [Website](https://deepset.ai)\n", - "\n", - "By the way: [we're hiring!](https://www.deepset.ai/jobs)" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 2 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.6" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/tutorials/Tutorial11_Pipelines.py b/tutorials/Tutorial11_Pipelines.py deleted file mode 100644 index 78078c3dfc..0000000000 --- a/tutorials/Tutorial11_Pipelines.py +++ /dev/null @@ -1,229 +0,0 @@ -import logging - -# We configure how logging messages should be displayed and which log level should be used before importing Haystack. -# Example log message: -# INFO - haystack.utils.preprocessing - Converting data/tutorial1/218_Olenna_Tyrell.txt -# Default log level in basicConfig is WARNING so the explicit parameter is not necessary but can be changed easily: -logging.basicConfig(format="%(levelname)s - %(name)s - %(message)s", level=logging.WARNING) -logging.getLogger("haystack").setLevel(logging.INFO) - -from haystack.utils import ( - clean_wiki_text, - print_answers, - print_documents, - fetch_archive_from_http, - convert_files_to_docs, - launch_es, -) -from pprint import pprint -from haystack import Pipeline -from haystack.document_stores import ElasticsearchDocumentStore -from haystack.nodes import BM25Retriever, EmbeddingRetriever, FARMReader, RAGenerator, BaseComponent, JoinDocuments -from haystack.pipelines import ExtractiveQAPipeline, DocumentSearchPipeline, GenerativeQAPipeline - - -def tutorial11_pipelines(): - # Download and prepare data - 517 Wikipedia articles for Game of Thrones - doc_dir = "data/tutorial11" - s3_url = "https://s3.eu-central-1.amazonaws.com/deepset.ai-farm-qa/datasets/documents/wiki_gameofthrones_txt11.zip" - fetch_archive_from_http(url=s3_url, output_dir=doc_dir) - - # convert files to dicts containing documents that can be indexed to our datastore - got_docs = convert_files_to_docs(dir_path=doc_dir, clean_func=clean_wiki_text, split_paragraphs=True) - - # Initialize DocumentStore and index documents - launch_es() - document_store = ElasticsearchDocumentStore() - document_store.delete_documents() - document_store.write_documents(got_docs) - - # Initialize Sparse retriever - bm25_retriever = BM25Retriever(document_store=document_store) - - # Initialize dense retriever - embedding_retriever = EmbeddingRetriever( - document_store, embedding_model="sentence-transformers/multi-qa-mpnet-base-dot-v1" - ) - document_store.update_embeddings(embedding_retriever, update_existing_embeddings=False) - - reader = FARMReader(model_name_or_path="deepset/roberta-base-squad2") - - print() - print("######################") - print("# Prebuilt Pipelines #") - print("######################") - - print() - print("# Extractive QA Pipeline") - print("########################") - - query = "Who is the father of Arya Stark?" - p_extractive_premade = ExtractiveQAPipeline(reader=reader, retriever=bm25_retriever) - res = p_extractive_premade.run(query=query, params={"Retriever": {"top_k": 10}, "Reader": {"top_k": 5}}) - print("\nQuery: ", query) - print("Answers:") - print_answers(res, details="minimum") - - print() - print("# Document Search Pipeline") - print("##########################") - - query = "Who is the father of Arya Stark?" - p_retrieval = DocumentSearchPipeline(bm25_retriever) - res = p_retrieval.run(query=query, params={"Retriever": {"top_k": 10}}) - print() - print_documents(res, max_text_len=200) - - print() - print("# Generator Pipeline") - print("####################") - - # We set this to True so that the document store returns document embeddings - # with each document, this is needed by the Generator - document_store.return_embedding = True - - # Initialize generator - rag_generator = RAGenerator() - - # Generative QA - query = "Who is the father of Arya Stark?" - p_generator = GenerativeQAPipeline(generator=rag_generator, retriever=embedding_retriever) - res = p_generator.run(query=query, params={"Retriever": {"top_k": 10}}) - print() - print_answers(res, details="minimum") - - # We are setting this to False so that in later pipelines, - # we get a cleaner printout - document_store.return_embedding = False - - ############################## - # Creating Pipeline Diagrams # - ############################## - - p_extractive_premade.draw("pipeline_extractive_premade.png") - p_retrieval.draw("pipeline_retrieval.png") - p_generator.draw("pipeline_generator.png") - - print() - print("####################") - print("# Custom Pipelines #") - print("####################") - - print() - print("# Extractive QA Pipeline") - print("########################") - - # Custom built extractive QA pipeline - p_extractive = Pipeline() - p_extractive.add_node(component=bm25_retriever, name="Retriever", inputs=["Query"]) - p_extractive.add_node(component=reader, name="Reader", inputs=["Retriever"]) - - # Now we can run it - query = "Who is the father of Arya Stark?" - res = p_extractive.run(query=query, params={"Retriever": {"top_k": 10}, "Reader": {"top_k": 5}}) - print("\nQuery: ", query) - print("Answers:") - print_answers(res, details="minimum") - p_extractive.draw("pipeline_extractive.png") - - print() - print("# Ensembled Retriever Pipeline") - print("##############################") - - # Create ensembled pipeline - p_ensemble = Pipeline() - p_ensemble.add_node(component=bm25_retriever, name="ESRetriever", inputs=["Query"]) - p_ensemble.add_node(component=embedding_retriever, name="EmbeddingRetriever", inputs=["Query"]) - p_ensemble.add_node( - component=JoinDocuments(join_mode="concatenate"), - name="JoinResults", - inputs=["ESRetriever", "EmbeddingRetriever"], - ) - p_ensemble.add_node(component=reader, name="Reader", inputs=["JoinResults"]) - p_ensemble.draw("pipeline_ensemble.png") - - # Run pipeline - query = "Who is the father of Arya Stark?" - res = p_ensemble.run( - query="Who is the father of Arya Stark?", - params={"ESRetriever": {"top_k": 5}, "EmbeddingRetriever": {"top_k": 5}}, - ) - print("\nQuery: ", query) - print("Answers:") - print_answers(res, details="minimum") - - print() - print("# Query Classification Pipeline") - print("###############################") - - # Decision Nodes help you route your data so that only certain branches of your `Pipeline` are run. - # Though this looks very similar to the ensembled pipeline shown above, - # the key difference is that only one of the retrievers is run for each request. - # By contrast both retrievers are always run in the ensembled approach. - - class CustomQueryClassifier(BaseComponent): - outgoing_edges = 2 - - def run(self, query): - if "?" in query: - return {}, "output_2" - else: - return {}, "output_1" - - def run_batch(self, queries): - split = {"output_1": {"queries": []}, "output_2": {"queries": []}} - for query in queries: - if "?" in query: - split["output_2"]["queries"].append(query) - else: - split["output_1"]["queries"].append(query) - - return split, "split" - - # Here we build the pipeline - p_classifier = Pipeline() - p_classifier.add_node(component=CustomQueryClassifier(), name="QueryClassifier", inputs=["Query"]) - p_classifier.add_node(component=bm25_retriever, name="ESRetriever", inputs=["QueryClassifier.output_1"]) - p_classifier.add_node(component=embedding_retriever, name="EmbeddingRetriever", inputs=["QueryClassifier.output_2"]) - p_classifier.add_node(component=reader, name="QAReader", inputs=["ESRetriever", "EmbeddingRetriever"]) - p_classifier.draw("pipeline_classifier.png") - - # Run only the dense retriever on the full sentence query - query = "Who is the father of Arya Stark?" - res_1 = p_classifier.run(query=query) - print() - print("\nQuery: ", query) - print(" * Embedding Retriever Answers:") - print_answers(res_1, details="minimum") - - # Run only the sparse retriever on a keyword based query - query = "Arya Stark father" - res_2 = p_classifier.run(query=query) - print() - print("\nQuery: ", query) - print(" * ES Answers:") - print_answers(res_2, details="minimum") - - print("#######################") - print("# Debugging Pipelines #") - print("#######################") - # You can print out debug information from nodes in your pipelines in a few different ways. - - # 1) You can set the `debug` attribute of a given node. - bm25_retriever.debug = True - - # 2) You can provide `debug` as a parameter when running your pipeline - result = p_classifier.run(query="Who is the father of Arya Stark?", params={"ESRetriever": {"debug": True}}) - - # 3) You can provide the `debug` parameter to all nodes in your pipeline - result = p_classifier.run(query="Who is the father of Arya Stark?", params={"debug": True}) - - pprint(result["_debug"]) - - -if __name__ == "__main__": - tutorial11_pipelines() - -# This Haystack script was made with love by deepset in Berlin, Germany -# Haystack: https://github.com/deepset-ai/haystack -# deepset: https://deepset.ai/ diff --git a/tutorials/Tutorial12_LFQA.ipynb b/tutorials/Tutorial12_LFQA.ipynb deleted file mode 100644 index 5181a65f9a..0000000000 --- a/tutorials/Tutorial12_LFQA.ipynb +++ /dev/null @@ -1,374 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": { - "id": "bEH-CRbeA6NU" - }, - "source": [ - "# Long-Form Question Answering\n", - "\n", - "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/deepset-ai/haystack/blob/main/tutorials/Tutorial12_LFQA.ipynb)\n", - "\n", - "Follow this tutorial to learn how to build and use a pipeline for Long-Form Question Answering (LFQA). LFQA is a variety of the generative question answering task. LFQA systems query large document stores for relevant information and then use this information to generate accurate, multi-sentence answers. In a regular question answering system, the retrieved documents related to the query (context passages) act as source tokens for extracted answers. In an LFQS system, context passages provide the context the system uses to generate original, abstractive, long-form answers." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "3K27Y5FbA6NV" - }, - "source": [ - "### Prepare environment\n", - "\n", - "#### Colab: Enable the GPU runtime\n", - "Make sure you enable the GPU runtime to experience decent speed in this tutorial. \n", - "**Runtime -> Change Runtime type -> Hardware accelerator -> GPU**\n", - "\n", - "" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "JlZgP8q1A6NW" - }, - "outputs": [], - "source": [ - "# Make sure you have a GPU running\n", - "!nvidia-smi" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "NM36kbRFA6Nc" - }, - "outputs": [], - "source": [ - "# Install the latest release of Haystack in your own environment\n", - "#! pip install farm-haystack\n", - "\n", - "# Install the latest main of Haystack\n", - "!pip install --upgrade pip\n", - "!pip install -q git+https://github.com/deepset-ai/haystack.git#egg=farm-haystack[colab,faiss]" - ] - }, - { - "cell_type": "markdown", - "source": [ - "## Logging\n", - "\n", - "We configure how logging messages should be displayed and which log level should be used before importing Haystack.\n", - "Example log message:\n", - "INFO - haystack.utils.preprocessing - Converting data/tutorial1/218_Olenna_Tyrell.txt\n", - "Default log level in basicConfig is WARNING so the explicit parameter is not necessary but can be changed easily:" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - } - }, - { - "cell_type": "code", - "execution_count": null, - "outputs": [], - "source": [ - "import logging\n", - "\n", - "logging.basicConfig(format=\"%(levelname)s - %(name)s - %(message)s\", level=logging.WARNING)\n", - "logging.getLogger(\"haystack\").setLevel(logging.INFO)" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "xmRuhTQ7A6Nh" - }, - "outputs": [], - "source": [ - "from haystack.utils import convert_files_to_docs, fetch_archive_from_http, clean_wiki_text\n", - "from haystack.nodes import Seq2SeqGenerator" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "q3dSo7ZtA6Nl" - }, - "source": [ - "### Document Store\n", - "\n", - "FAISS is a library for efficient similarity search on a cluster of dense vectors.\n", - "The `FAISSDocumentStore` uses a SQL(SQLite in-memory be default) database under-the-hood\n", - "to store the document text and other meta data. The vector embeddings of the text are\n", - "indexed on a FAISS Index that later is queried for searching answers.\n", - "The default flavour of FAISSDocumentStore is \"Flat\" but can also be set to \"HNSW\" for\n", - "faster search at the expense of some accuracy. Just set the faiss_index_factor_str argument in the constructor.\n", - "For more info on which suits your use case: https://github.com/facebookresearch/faiss/wiki/Guidelines-to-choose-an-index" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "1cYgDJmrA6Nv", - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "from haystack.document_stores import FAISSDocumentStore\n", - "\n", - "document_store = FAISSDocumentStore(embedding_dim=128, faiss_index_factory_str=\"Flat\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "06LatTJBA6N0", - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "### Cleaning & indexing documents\n", - "\n", - "Similarly to the previous tutorials, we download, convert and index some Game of Thrones articles to our DocumentStore" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "iqKnu6wxA6N1", - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "# Let's first get some files that we want to use\n", - "doc_dir = \"data/tutorial12\"\n", - "s3_url = \"https://s3.eu-central-1.amazonaws.com/deepset.ai-farm-qa/datasets/documents/wiki_gameofthrones_txt12.zip\"\n", - "fetch_archive_from_http(url=s3_url, output_dir=doc_dir)\n", - "\n", - "# Convert files to dicts\n", - "docs = convert_files_to_docs(dir_path=doc_dir, clean_func=clean_wiki_text, split_paragraphs=True)\n", - "\n", - "# Now, let's write the dicts containing documents to our DB.\n", - "document_store.write_documents(docs)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "wgjedxx_A6N6" - }, - "source": [ - "### Initialize Retriever and Reader/Generator\n", - "\n", - "#### Retriever\n", - "\n", - "We use a `DensePassageRetriever` and we invoke `update_embeddings` to index the embeddings of documents in the `FAISSDocumentStore`\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "kFwiPP60A6N7", - "pycharm": { - "is_executing": true - } - }, - "outputs": [], - "source": [ - "from haystack.nodes import DensePassageRetriever\n", - "\n", - "retriever = DensePassageRetriever(\n", - " document_store=document_store,\n", - " query_embedding_model=\"vblagoje/dpr-question_encoder-single-lfqa-wiki\",\n", - " passage_embedding_model=\"vblagoje/dpr-ctx_encoder-single-lfqa-wiki\",\n", - ")\n", - "\n", - "document_store.update_embeddings(retriever)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "sMlVEnJ2NkZZ" - }, - "source": [ - "Before we blindly use the `DensePassageRetriever` let's empirically test it to make sure a simple search indeed finds the relevant documents." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "qpu-t9rndgpe" - }, - "outputs": [], - "source": [ - "from haystack.utils import print_documents\n", - "from haystack.pipelines import DocumentSearchPipeline\n", - "\n", - "p_retrieval = DocumentSearchPipeline(retriever)\n", - "res = p_retrieval.run(query=\"Tell me something about Arya Stark?\", params={\"Retriever\": {\"top_k\": 10}})\n", - "print_documents(res, max_text_len=512)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "rnVR28OXA6OA" - }, - "source": [ - "#### Reader/Generator\n", - "\n", - "Similar to previous Tutorials we now initalize our reader/generator.\n", - "\n", - "Here we use a `Seq2SeqGenerator` with the *vblagoje/bart_lfqa* model (see: https://huggingface.co/vblagoje/bart_lfqa)\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "fyIuWVwhA6OB" - }, - "outputs": [], - "source": [ - "generator = Seq2SeqGenerator(model_name_or_path=\"vblagoje/bart_lfqa\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "unhLD18yA6OF" - }, - "source": [ - "### Pipeline\n", - "\n", - "With a Haystack `Pipeline` you can stick together your building blocks to a search pipeline.\n", - "Under the hood, `Pipelines` are Directed Acyclic Graphs (DAGs) that you can easily customize for your own use cases.\n", - "To speed things up, Haystack also comes with a few predefined Pipelines. One of them is the `GenerativeQAPipeline` that combines a retriever and a reader/generator to answer our questions.\n", - "You can learn more about `Pipelines` in the [docs](https://haystack.deepset.ai/docs/latest/pipelinesmd)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "TssPQyzWA6OG" - }, - "outputs": [], - "source": [ - "from haystack.pipelines import GenerativeQAPipeline\n", - "\n", - "pipe = GenerativeQAPipeline(generator, retriever)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "bXlBBxKXA6OL" - }, - "source": [ - "## Voilà! Ask a question!" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "Zi97Hif2A6OM" - }, - "outputs": [], - "source": [ - "pipe.run(\n", - " query=\"How did Arya Stark's character get portrayed in a television adaptation?\", params={\"Retriever\": {\"top_k\": 3}}\n", - ")" - ] - }, - { - "cell_type": "code", - "source": [ - "pipe.run(query=\"Why is Arya Stark an unusual character?\", params={\"Retriever\": {\"top_k\": 3}})" - ], - "metadata": { - "id": "IfTP9BfFGOo6" - }, - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false, - "id": "i88KdOc2wUXQ" - }, - "source": [ - "## About us\n", - "\n", - "This [Haystack](https://github.com/deepset-ai/haystack/) notebook was made with love by [deepset](https://deepset.ai/) in Berlin, Germany\n", - "\n", - "We bring NLP to the industry via open source!\n", - "Our focus: Industry specific language models & large scale QA systems.\n", - "\n", - "Some of our other work:\n", - "- [German BERT](https://deepset.ai/german-bert)\n", - "- [GermanQuAD and GermanDPR](https://deepset.ai/germanquad)\n", - "- [FARM](https://github.com/deepset-ai/FARM)\n", - "\n", - "Get in touch:\n", - "[Twitter](https://twitter.com/deepset_ai) | [LinkedIn](https://www.linkedin.com/company/deepset-ai/) | [Slack](https://haystack.deepset.ai/community/join) | [GitHub Discussions](https://github.com/deepset-ai/haystack/discussions) | [Website](https://deepset.ai)\n", - "\n", - "By the way: [we're hiring!](https://www.deepset.ai/jobs)" - ] - } - ], - "metadata": { - "accelerator": "GPU", - "colab": { - "collapsed_sections": [], - "name": "LFQA_via_Haystack.ipynb", - "provenance": [] - }, - "kernelspec": { - "display_name": "Python 3", - "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.6.9" - } - }, - "nbformat": 4, - "nbformat_minor": 0 -} diff --git a/tutorials/Tutorial12_LFQA.py b/tutorials/Tutorial12_LFQA.py deleted file mode 100644 index e14c21e87d..0000000000 --- a/tutorials/Tutorial12_LFQA.py +++ /dev/null @@ -1,111 +0,0 @@ -import logging - -# We configure how logging messages should be displayed and which log level should be used before importing Haystack. -# Example log message: -# INFO - haystack.utils.preprocessing - Converting data/tutorial1/218_Olenna_Tyrell.txt -# Default log level in basicConfig is WARNING so the explicit parameter is not necessary but can be changed easily: -logging.basicConfig(format="%(levelname)s - %(name)s - %(message)s", level=logging.WARNING) -logging.getLogger("haystack").setLevel(logging.INFO) - -from haystack.utils import convert_files_to_docs, fetch_archive_from_http, clean_wiki_text -from haystack.nodes import Seq2SeqGenerator - - -def tutorial12_lfqa(): - - """ - Document Store: - FAISS is a library for efficient similarity search on a cluster of dense vectors. - The `FAISSDocumentStore` uses a SQL(SQLite in-memory be default) database under-the-hood - to store the document text and other meta data. The vector embeddings of the text are - indexed on a FAISS Index that later is queried for searching answers. - The default flavour of FAISSDocumentStore is "Flat" but can also be set to "HNSW" for - faster search at the expense of some accuracy. Just set the faiss_index_factor_str argument in the constructor. - For more info on which suits your use case: https://github.com/facebookresearch/faiss/wiki/Guidelines-to-choose-an-index - """ - - from haystack.document_stores.faiss import FAISSDocumentStore - - document_store = FAISSDocumentStore(embedding_dim=128, faiss_index_factory_str="Flat") - - """ - Cleaning & indexing documents: - Similarly to the previous tutorials, we download, convert and index some Game of Thrones articles to our DocumentStore - """ - - # Let's first get some files that we want to use - doc_dir = "data/tutorial12" - s3_url = "https://s3.eu-central-1.amazonaws.com/deepset.ai-farm-qa/datasets/documents/wiki_gameofthrones_txt12.zip" - fetch_archive_from_http(url=s3_url, output_dir=doc_dir) - - # Convert files to dicts - docs = convert_files_to_docs(dir_path=doc_dir, clean_func=clean_wiki_text, split_paragraphs=True) - - # Now, let's write the dicts containing documents to our DB. - document_store.write_documents(docs) - - """ - Initialize Retriever and Reader/Generator: - We use a `DensePassageRetriever` and we invoke `update_embeddings` to index the embeddings of documents in the `FAISSDocumentStore` - """ - - from haystack.nodes import DensePassageRetriever - - retriever = DensePassageRetriever( - document_store=document_store, - query_embedding_model="vblagoje/dpr-question_encoder-single-lfqa-wiki", - passage_embedding_model="vblagoje/dpr-ctx_encoder-single-lfqa-wiki", - ) - - document_store.update_embeddings(retriever) - - """Before we blindly use the `DensePassageRetriever` let's empirically test it to make sure a simple search indeed finds the relevant documents.""" - - from haystack.utils import print_documents - from haystack.pipelines import DocumentSearchPipeline - - p_retrieval = DocumentSearchPipeline(retriever) - res = p_retrieval.run(query="Tell me something about Arya Stark?", params={"Retriever": {"top_k": 1}}) - print_documents(res, max_text_len=512) - - """ - Similar to previous Tutorials we now initalize our reader/generator. - Here we use a `Seq2SeqGenerator` with the *vblagoje/bart_lfqa* model (see: https://huggingface.co/vblagoje/bart_lfqa) - """ - - generator = Seq2SeqGenerator(model_name_or_path="vblagoje/bart_lfqa") - - """ - Pipeline: - With a Haystack `Pipeline` you can stick together your building blocks to a search pipeline. - Under the hood, `Pipelines` are Directed Acyclic Graphs (DAGs) that you can easily customize for your own use cases. - To speed things up, Haystack also comes with a few predefined Pipelines. One of them is the `GenerativeQAPipeline` that combines a retriever and a reader/generator to answer our questions. - You can learn more about `Pipelines` in the [docs](https://haystack.deepset.ai/docs/latest/pipelinesmd). - """ - - from haystack.pipelines import GenerativeQAPipeline - - pipe = GenerativeQAPipeline(generator, retriever) - - """Voilà! Ask a question!""" - - query_1 = "How did Arya Stark's character get portrayed in a television adaptation?" - result_1 = pipe.run(query=query_1, params={"Retriever": {"top_k": 3}}) - print(f"Query: {query_1}") - print(f"Answer: {result_1['answers'][0]}") - print() - - query_2 = "Why is Arya Stark an unusual character?" - result_2 = pipe.run(query=query_2, params={"Retriever": {"top_k": 3}}) - print(f"Query: {query_2}") - print(f"Answer: {result_2['answers'][0]}") - print() - - -if __name__ == "__main__": - tutorial12_lfqa() - - -# This Haystack script was made with love by deepset in Berlin, Germany -# Haystack: https://github.com/deepset-ai/haystack -# deepset: https://deepset.ai/ diff --git a/tutorials/Tutorial13_Question_generation.ipynb b/tutorials/Tutorial13_Question_generation.ipynb deleted file mode 100644 index de1401159e..0000000000 --- a/tutorials/Tutorial13_Question_generation.ipynb +++ /dev/null @@ -1,404 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": { - "collapsed": true, - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "# Question Generation\n", - "\n", - "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/deepset-ai/haystack/blob/main/tutorials/Tutorial13_Question_generation.ipynb)\n", - "\n", - "This is a bare bones tutorial showing what is possible with the QuestionGenerator Nodes and Pipelines which automatically\n", - "generate questions which the question generation model thinks can be answered by a given document." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "yaaKv3_ZN-gb", - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "### Prepare environment\n", - "\n", - "#### Colab: Enable the GPU runtime\n", - "Make sure you enable the GPU runtime to experience decent speed in this tutorial. \n", - "**Runtime -> Change Runtime type -> Hardware accelerator -> GPU**\n", - "\n", - "" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "# Install the latest release of Haystack in your own environment\n", - "#! pip install farm-haystack\n", - "\n", - "# Install the latest main of Haystack\n", - "!pip install --upgrade pip\n", - "!pip install git+https://github.com/deepset-ai/haystack.git#egg=farm-haystack[colab]" - ] - }, - { - "cell_type": "markdown", - "source": [ - "## Logging\n", - "\n", - "We configure how logging messages should be displayed and which log level should be used before importing Haystack.\n", - "Example log message:\n", - "INFO - haystack.utils.preprocessing - Converting data/tutorial1/218_Olenna_Tyrell.txt\n", - "Default log level in basicConfig is WARNING so the explicit parameter is not necessary but can be changed easily:" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - } - }, - { - "cell_type": "code", - "execution_count": null, - "outputs": [], - "source": [ - "import logging\n", - "\n", - "logging.basicConfig(format=\"%(levelname)s - %(name)s - %(message)s\", level=logging.WARNING)\n", - "logging.getLogger(\"haystack\").setLevel(logging.INFO)" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "# Imports needed to run this notebook\n", - "\n", - "from pprint import pprint\n", - "from tqdm import tqdm\n", - "from haystack.nodes import QuestionGenerator, BM25Retriever, FARMReader\n", - "from haystack.document_stores import ElasticsearchDocumentStore\n", - "from haystack.pipelines import (\n", - " QuestionGenerationPipeline,\n", - " RetrieverQuestionGenerationPipeline,\n", - " QuestionAnswerGenerationPipeline,\n", - ")\n", - "from haystack.utils import launch_es, print_questions" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "Let's start an Elasticsearch instance with one of the options below:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "# Option 1: Start Elasticsearch service via Docker\n", - "launch_es()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% \n" - } - }, - "outputs": [], - "source": [ - "# Option 2: In Colab / No Docker environments: Start Elasticsearch from source\n", - "! wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.9.2-linux-x86_64.tar.gz -q\n", - "! tar -xzf elasticsearch-7.9.2-linux-x86_64.tar.gz\n", - "! chown -R daemon:daemon elasticsearch-7.9.2\n", - "\n", - "import os\n", - "from subprocess import Popen, PIPE, STDOUT\n", - "\n", - "es_server = Popen(\n", - " [\"elasticsearch-7.9.2/bin/elasticsearch\"], stdout=PIPE, stderr=STDOUT, preexec_fn=lambda: os.setuid(1) # as daemon\n", - ")\n", - "# wait until ES has started\n", - "! sleep 30" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "Let's initialize some core components" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "text1 = \"Python is an interpreted, high-level, general-purpose programming language. Created by Guido van Rossum and first released in 1991, Python's design philosophy emphasizes code readability with its notable use of significant whitespace.\"\n", - "text2 = \"Princess Arya Stark is the third child and second daughter of Lord Eddard Stark and his wife, Lady Catelyn Stark. She is the sister of the incumbent Westerosi monarchs, Sansa, Queen in the North, and Brandon, King of the Andals and the First Men. After narrowly escaping the persecution of House Stark by House Lannister, Arya is trained as a Faceless Man at the House of Black and White in Braavos, using her abilities to avenge her family. Upon her return to Westeros, she exacts retribution for the Red Wedding by exterminating the Frey male line.\"\n", - "text3 = \"Dry Cleaning are an English post-punk band who formed in South London in 2018.[3] The band is composed of vocalist Florence Shaw, guitarist Tom Dowse, bassist Lewis Maynard and drummer Nick Buxton. They are noted for their use of spoken word primarily in lieu of sung vocals, as well as their unconventional lyrics. Their musical stylings have been compared to Wire, Magazine and Joy Division.[4] The band released their debut single, 'Magic of Meghan' in 2019. Shaw wrote the song after going through a break-up and moving out of her former partner's apartment the same day that Meghan Markle and Prince Harry announced they were engaged.[5] This was followed by the release of two EPs that year: Sweet Princess in August and Boundary Road Snacks and Drinks in October. The band were included as part of the NME 100 of 2020,[6] as well as DIY magazine's Class of 2020.[7] The band signed to 4AD in late 2020 and shared a new single, 'Scratchcard Lanyard'.[8] In February 2021, the band shared details of their debut studio album, New Long Leg. They also shared the single 'Strong Feelings'.[9] The album, which was produced by John Parish, was released on 2 April 2021.[10]\"\n", - "\n", - "docs = [{\"content\": text1}, {\"content\": text2}, {\"content\": text3}]\n", - "\n", - "# Initialize document store and write in the documents\n", - "document_store = ElasticsearchDocumentStore()\n", - "document_store.write_documents(docs)\n", - "\n", - "# Initialize Question Generator\n", - "question_generator = QuestionGenerator()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "## Question Generation Pipeline\n", - "\n", - "The most basic version of a question generator pipeline takes a document as input and outputs generated questions\n", - "which the the document can answer." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "question_generation_pipeline = QuestionGenerationPipeline(question_generator)\n", - "for idx, document in enumerate(document_store):\n", - "\n", - " print(f\"\\n * Generating questions for document {idx}: {document.content[:100]}...\\n\")\n", - " result = question_generation_pipeline.run(documents=[document])\n", - " print_questions(result)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "## Retriever Question Generation Pipeline\n", - "\n", - "This pipeline takes a query as input. It retrieves relevant documents and then generates questions based on these." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "retriever = BM25Retriever(document_store=document_store)\n", - "rqg_pipeline = RetrieverQuestionGenerationPipeline(retriever, question_generator)\n", - "\n", - "print(f\"\\n * Generating questions for documents matching the query 'Arya Stark'\\n\")\n", - "result = rqg_pipeline.run(query=\"Arya Stark\")\n", - "print_questions(result)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "## Question Answer Generation Pipeline\n", - "\n", - "This pipeline takes a document as input, generates questions on it, and attempts to answer these questions using\n", - "a Reader model" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false, - "pycharm": { - "is_executing": true, - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "reader = FARMReader(\"deepset/roberta-base-squad2\")\n", - "qag_pipeline = QuestionAnswerGenerationPipeline(question_generator, reader)\n", - "for idx, document in enumerate(tqdm(document_store)):\n", - "\n", - " print(f\"\\n * Generating questions and answers for document {idx}: {document.content[:100]}...\\n\")\n", - " result = qag_pipeline.run(documents=[document])\n", - " print_questions(result)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false - }, - "source": [ - "## Translated Question Answer Generation Pipeline\n", - "Trained models for Question Answer Generation are not available in many languages other than English. Haystack\n", - "provides a workaround for that issue by machine-translating a pipeline's inputs and outputs with the\n", - "TranslationWrapperPipeline. The following example generates German questions and answers on a German text\n", - "document - by using an English model for Question Answer Generation." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "# Fill the document store with a German document.\n", - "text1 = \"Python ist eine interpretierte Hochsprachenprogrammiersprache für allgemeine Zwecke. Sie wurde von Guido van Rossum entwickelt und 1991 erstmals veröffentlicht. Die Design-Philosophie von Python legt den Schwerpunkt auf die Lesbarkeit des Codes und die Verwendung von viel Leerraum (Whitespace).\"\n", - "docs = [{\"content\": text1}]\n", - "document_store.delete_documents()\n", - "document_store.write_documents(docs)\n", - "\n", - "# Load machine translation models\n", - "from haystack.nodes import TransformersTranslator\n", - "\n", - "in_translator = TransformersTranslator(model_name_or_path=\"Helsinki-NLP/opus-mt-de-en\")\n", - "out_translator = TransformersTranslator(model_name_or_path=\"Helsinki-NLP/opus-mt-en-de\")\n", - "\n", - "# Wrap the previously defined QuestionAnswerGenerationPipeline\n", - "from haystack.pipelines import TranslationWrapperPipeline\n", - "\n", - "pipeline_with_translation = TranslationWrapperPipeline(\n", - " input_translator=in_translator, output_translator=out_translator, pipeline=qag_pipeline\n", - ")\n", - "\n", - "for idx, document in enumerate(tqdm(document_store)):\n", - " print(f\"\\n * Generating questions and answers for document {idx}: {document.content[:100]}...\\n\")\n", - " result = pipeline_with_translation.run(documents=[document])\n", - " print_questions(result)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false - }, - "source": [ - "## About us\n", - "\n", - "This [Haystack](https://github.com/deepset-ai/haystack/) notebook was made with love by [deepset](https://deepset.ai/) in Berlin, Germany\n", - "\n", - "We bring NLP to the industry via open source!\n", - "Our focus: Industry specific language models & large scale QA systems.\n", - "\n", - "Some of our other work:\n", - "- [German BERT](https://deepset.ai/german-bert)\n", - "- [GermanQuAD and GermanDPR](https://deepset.ai/germanquad)\n", - "- [FARM](https://github.com/deepset-ai/FARM)\n", - "\n", - "Get in touch:\n", - "[Twitter](https://twitter.com/deepset_ai) | [LinkedIn](https://www.linkedin.com/company/deepset-ai/) | [Slack](https://haystack.deepset.ai/community/join) | [GitHub Discussions](https://github.com/deepset-ai/haystack/discussions) | [Website](https://deepset.ai)\n", - "\n", - "By the way: [we're hiring!](https://www.deepset.ai/jobs)" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 2 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.6" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/tutorials/Tutorial13_Question_generation.py b/tutorials/Tutorial13_Question_generation.py deleted file mode 100644 index cea723ebf1..0000000000 --- a/tutorials/Tutorial13_Question_generation.py +++ /dev/null @@ -1,124 +0,0 @@ -import logging - -# We configure how logging messages should be displayed and which log level should be used before importing Haystack. -# Example log message: -# INFO - haystack.utils.preprocessing - Converting data/tutorial1/218_Olenna_Tyrell.txt -# Default log level in basicConfig is WARNING so the explicit parameter is not necessary but can be changed easily: -logging.basicConfig(format="%(levelname)s - %(name)s - %(message)s", level=logging.WARNING) -logging.getLogger("haystack").setLevel(logging.INFO) - -from tqdm import tqdm -from haystack.nodes import QuestionGenerator, BM25Retriever, FARMReader, TransformersTranslator -from haystack.document_stores import ElasticsearchDocumentStore -from haystack.pipelines import ( - QuestionGenerationPipeline, - RetrieverQuestionGenerationPipeline, - QuestionAnswerGenerationPipeline, - TranslationWrapperPipeline, -) -from haystack.utils import launch_es, print_questions - -""" -This is a bare bones tutorial showing what is possible with the QuestionGenerator Node which automatically generates -questions which the model thinks can be answered by a given document. -""" - - -def tutorial13_question_generation(): - # Start Elasticsearch service via Docker - launch_es() - - text1 = "Python is an interpreted, high-level, general-purpose programming language. Created by Guido van Rossum and first released in 1991, Python's design philosophy emphasizes code readability with its notable use of significant whitespace." - text2 = "Princess Arya Stark is the third child and second daughter of Lord Eddard Stark and his wife, Lady Catelyn Stark. She is the sister of the incumbent Westerosi monarchs, Sansa, Queen in the North, and Brandon, King of the Andals and the First Men. After narrowly escaping the persecution of House Stark by House Lannister, Arya is trained as a Faceless Man at the House of Black and White in Braavos, using her abilities to avenge her family. Upon her return to Westeros, she exacts retribution for the Red Wedding by exterminating the Frey male line." - text3 = "Dry Cleaning are an English post-punk band who formed in South London in 2018.[3] The band is composed of vocalist Florence Shaw, guitarist Tom Dowse, bassist Lewis Maynard and drummer Nick Buxton. They are noted for their use of spoken word primarily in lieu of sung vocals, as well as their unconventional lyrics. Their musical stylings have been compared to Wire, Magazine and Joy Division.[4] The band released their debut single, 'Magic of Meghan' in 2019. Shaw wrote the song after going through a break-up and moving out of her former partner's apartment the same day that Meghan Markle and Prince Harry announced they were engaged.[5] This was followed by the release of two EPs that year: Sweet Princess in August and Boundary Road Snacks and Drinks in October. The band were included as part of the NME 100 of 2020,[6] as well as DIY magazine's Class of 2020.[7] The band signed to 4AD in late 2020 and shared a new single, 'Scratchcard Lanyard'.[8] In February 2021, the band shared details of their debut studio album, New Long Leg. They also shared the single 'Strong Feelings'.[9] The album, which was produced by John Parish, was released on 2 April 2021.[10]" - - docs = [{"content": text1}, {"content": text2}, {"content": text3}] - - # Initialize document store and write in the documents - document_store = ElasticsearchDocumentStore() - document_store.write_documents(docs) - - # Initialize Question Generator - question_generator = QuestionGenerator() - - """ - The most basic version of a question generator pipeline takes a document as input and outputs generated questions - which the the document can answer. - """ - - # QuestionGenerationPipeline - print("\nQuestionGenerationPipeline") - print("==========================") - - question_generation_pipeline = QuestionGenerationPipeline(question_generator) - for idx, document in enumerate(document_store): - - print(f"\n * Generating questions for document {idx}: {document.content[:100]}...\n") - result = question_generation_pipeline.run(documents=[document]) - print_questions(result) - - """ - This pipeline takes a query as input. It retrievers relevant documents and then generates questions based on these. - """ - - # RetrieverQuestionGenerationPipeline - print("\RetrieverQuestionGenerationPipeline") - print("==================================") - - retriever = BM25Retriever(document_store=document_store) - rqg_pipeline = RetrieverQuestionGenerationPipeline(retriever, question_generator) - - print(f"\n * Generating questions for documents matching the query 'Arya Stark'\n") - result = rqg_pipeline.run(query="Arya Stark") - print_questions(result) - - """ - This pipeline takes a document as input, generates questions on it, and attempts to answer these questions using - a Reader model - """ - - # QuestionAnswerGenerationPipeline - print("\QuestionAnswerGenerationPipeline") - print("===============================") - - reader = FARMReader("deepset/roberta-base-squad2") - qag_pipeline = QuestionAnswerGenerationPipeline(question_generator, reader) - for idx, document in enumerate(tqdm(document_store)): - - print(f"\n * Generating questions and answers for document {idx}: {document.content[:100]}...\n") - result = qag_pipeline.run(documents=[document]) - print_questions(result) - - """ - Trained models for Question Answer Generation are not available in many languages other than English. - Haystack provides a workaround for that issue by machine-translating a pipeline's inputs and outputs with the TranslationWrapperPipeline. - The following example generates German questions and answers on a German text document - by using an English model for Question Answer Generation. - """ - - # Fill the document store with a German document. - text1 = "Python ist eine interpretierte Hochsprachenprogrammiersprache für allgemeine Zwecke. Sie wurde von Guido van Rossum entwickelt und 1991 erstmals veröffentlicht. Die Design-Philosophie von Python legt den Schwerpunkt auf die Lesbarkeit des Codes und die Verwendung von viel Leerraum (Whitespace)." - docs = [{"content": text1}] - document_store.delete_documents() - document_store.write_documents(docs) - - # Load machine translation models - in_translator = TransformersTranslator(model_name_or_path="Helsinki-NLP/opus-mt-de-en") - out_translator = TransformersTranslator(model_name_or_path="Helsinki-NLP/opus-mt-en-de") - - # Wrap the previously defined QuestionAnswerGenerationPipeline - pipeline_with_translation = TranslationWrapperPipeline( - input_translator=in_translator, output_translator=out_translator, pipeline=qag_pipeline - ) - - for idx, document in enumerate(tqdm(document_store)): - print(f"\n * Generating questions and answers for document {idx}: {document.content[:100]}...\n") - result = pipeline_with_translation.run(documents=[document]) - print_questions(result) - - -if __name__ == "__main__": - tutorial13_question_generation() - -# This Haystack script was made with love by deepset in Berlin, Germany -# Haystack: https://github.com/deepset-ai/haystack -# deepset: https://deepset.ai/ diff --git a/tutorials/Tutorial14_Query_Classifier.ipynb b/tutorials/Tutorial14_Query_Classifier.ipynb deleted file mode 100644 index 665f8d1bcd..0000000000 --- a/tutorials/Tutorial14_Query_Classifier.ipynb +++ /dev/null @@ -1,785 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": { - "id": "O-W2ZQ6CN-gZ", - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "# Query Classifier Tutorial\n", - "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/deepset-ai/haystack/blob/main/tutorials/Tutorial14_Query_Classifier.ipynb)\n", - "\n", - "One of the great benefits of using state-of-the-art NLP models like those available in Haystack is that it allows users to state their queries as *plain natural language questions*: rather than trying to come up with just the right set of keywords to find the answer to their question, users can simply ask their question in much the same way that they would ask it of a (very knowledgeable!) person.\n", - "\n", - "But just because users *can* ask their questions in \"plain English\" (or \"plain German\", etc.), that doesn't mean they always *will*. For instance, a user might input a few keywords rather than a complete question because they don't understand the pipeline's full capabilities, or because they are so accustomed to keyword search. While a standard Haystack pipeline might handle such queries with reasonable accuracy, for a variety of reasons we still might prefer that our pipeline be sensitive to the type of query it is receiving, so that it behaves differently when a user inputs, say, a collection of keywords instead of a question.\n", - "\n", - "For this reason, Haystack comes with built-in capabilities to distinguish between three types of queries: **keyword queries**, **interrogative queries**, and **statement queries**, described below.\n", - "\n", - "1. **Keyword queries** can be thought of more or less as lists of words, such as \"Alaska cruises summer\". While the meanings of individual words may matter in a keyword query, the linguistic connections *between* words do not. Hence, in a keyword query the order of words is largely irrelevant: \"Alaska cruises summer\", \"summer Alaska cruises\", and \"summer cruises Alaska\" are functionally the same.\n", - "\n", - "2. **Interrogative queries** (or **question queries**) are queries phrased as natural language questions, such as \"Who was the father of Eddard Stark?\". Unlike with keyword queries, word order very much matters here: \"Who was the father of Eddard Stark?\" and \"Who was Eddard Stark the father of?\" are very different questions, despite having exactly the same words. (Note that while we often write questions with question marks, Haystack can find interrogative queries without such a dead giveaway!)\n", - "\n", - "3. **Statement queries** are just declarative sentences, such as \"Daenerys loved Jon\". These are like interrogative queries in that word order matters—again, \"Daenerys loved Jon\" and \"Jon loved Daenerys\" mean very different things—but they are statements instead of questions.\n", - "\n", - "In this tutorial you will learn how to use **query classifiers** to branch your Haystack pipeline based on the type of query it receives. Haystack comes with two out-of-the-box query classification schemas, each of which routes a given query into one of two branches:\n", - "\n", - "1. **Keyword vs. Question/Statement** — routes a query into one of two branches depending on whether it is a full question/statement or a collection of keywords.\n", - "\n", - "2. **Question vs. Statement** — routes a natural language query into one of two branches depending on whether it is a question or a statement.\n", - "\n", - "Furthermore, for each classification schema there are two types of nodes capable of performing this classification: a **`TransformersQueryClassifier`** that uses a transformer model, and an **`SklearnQueryClassifier`** that uses a more lightweight model built in `sklearn`.\n", - "\n", - "With all of that explanation out of the way, let's dive in!" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "yaaKv3_ZN-gb", - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "### Prepare the Environment\n", - "\n", - "#### Colab: Enable the GPU runtime\n", - "Make sure you enable the GPU runtime to experience decent speed in this tutorial. \n", - "**Runtime -> Change Runtime type -> Hardware accelerator -> GPU**\n", - "\n", - "" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "TNlqD5HeN-gc", - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "Next we make sure the latest version of Haystack is installed:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true, - "id": "CjA5n5lMN-gd", - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "# Install the latest release of Haystack in your own environment\n", - "#! pip install farm-haystack\n", - "\n", - "# Install the latest main of Haystack (Colab)\n", - "!pip install --upgrade pip\n", - "!pip install git+https://github.com/deepset-ai/haystack.git#egg=farm-haystack[colab]\n", - "\n", - "# Install these to allow pipeline visualization\n", - "!apt install libgraphviz-dev\n", - "!pip install pygraphviz" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "### Logging\n", - "\n", - "We configure how logging messages should be displayed and which log level should be used before importing Haystack.\n", - "Example log message:\n", - "INFO - haystack.utils.preprocessing - Converting data/tutorial1/218_Olenna_Tyrell.txt\n", - "Default log level in basicConfig is WARNING so the explicit parameter is not necessary but can be changed easily:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "import logging\n", - "\n", - "logging.basicConfig(format=\"%(levelname)s - %(name)s - %(message)s\", level=logging.WARNING)\n", - "logging.getLogger(\"haystack\").setLevel(logging.INFO)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "sJcWRK4Hwyx2" - }, - "source": [ - "### Trying Some Query Classifiers on their Own\n", - "\n", - "Before integrating query classifiers into our pipelines, let's test them out on their own and see what they actually do. First we initiate a simple, out-of-the-box **keyword vs. question/statement** `SklearnQueryClassifier`:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true, - "id": "XhPMEqBzxA8V" - }, - "outputs": [], - "source": [ - "# Here we create the keyword vs question/statement query classifier\n", - "from haystack.nodes import SklearnQueryClassifier\n", - "\n", - "keyword_classifier = SklearnQueryClassifier()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "1NHjy9aa9FKx" - }, - "source": [ - "Now let's feed some queries into this query classifier. We'll test with one keyword query, one interrogative query, and one statement query. Note that we don't need to use any punctuation, such as question marks, for the query classifier to make the right decision." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "Ks7qdULR8J13" - }, - "outputs": [], - "source": [ - "queries = [\n", - " \"Arya Stark father\", # Keyword Query\n", - " \"Who was the father of Arya Stark\", # Interrogative Query\n", - " \"Lord Eddard was the father of Arya Stark\", # Statement Query\n", - "]" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "UbKlyXcNj-nx" - }, - "source": [ - "Below, you can see what the classifier does with these queries: it correctly determines that \"Arya Stark father\" is a keyword query and sends it to branch 2. It also correctly classifies both the interrogative query \"Who was the father of Arya Stark\" and the statement query \"Lord Eddard was the father of Arya Stark\" as non-keyword queries, and sends them to branch 1." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "NYROmSHnE4zp" - }, - "outputs": [], - "source": [ - "import pandas as pd\n", - "\n", - "k_vs_qs_results = {\"Query\": [], \"Output Branch\": [], \"Class\": []}\n", - "\n", - "for query in queries:\n", - " result = keyword_classifier.run(query=query)\n", - " k_vs_qs_results[\"Query\"].append(query)\n", - " k_vs_qs_results[\"Output Branch\"].append(result[1])\n", - " k_vs_qs_results[\"Class\"].append(\"Question/Statement\" if result[1] == \"output_1\" else \"Keyword\")\n", - "\n", - "pd.DataFrame.from_dict(k_vs_qs_results)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "VyMZzRVHlG5O" - }, - "source": [ - "Next, we will illustrate a **question vs. statement** `SklearnQueryClassifier`. We define our classifier below. Note that this time we have to explicitly specify the model and vectorizer since the default for a `SklearnQueryClassifier` (and a `TransformersQueryClassifier`) is keyword vs. question/statement classification." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true, - "id": "l4eH3SSaxZ0O" - }, - "outputs": [], - "source": [ - "# Here we create the question vs statement query classifier\n", - "model_url = (\n", - " \"https://ext-models-haystack.s3.eu-central-1.amazonaws.com/gradboost_query_classifier_statements/model.pickle\"\n", - ")\n", - "vectorizer_url = (\n", - " \"https://ext-models-haystack.s3.eu-central-1.amazonaws.com/gradboost_query_classifier_statements/vectorizer.pickle\"\n", - ")\n", - "\n", - "question_classifier = SklearnQueryClassifier(model_name_or_path=model_url, vectorizer_name_or_path=vectorizer_url)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "zdAY1CUYnTFa" - }, - "source": [ - "We will test this classifier on the two question/statement queries from the last go-round:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "1ZULHEBVmqq2" - }, - "outputs": [], - "source": [ - "queries = [\n", - " \"Who was the father of Arya Stark\", # Interrogative Query\n", - " \"Lord Eddard was the father of Arya Stark\", # Statement Query\n", - "]\n", - "\n", - "q_vs_s_results = {\"Query\": [], \"Output Branch\": [], \"Class\": []}\n", - "\n", - "for query in queries:\n", - " result = question_classifier.run(query=query)\n", - " q_vs_s_results[\"Query\"].append(query)\n", - " q_vs_s_results[\"Output Branch\"].append(result[1])\n", - " q_vs_s_results[\"Class\"].append(\"Question\" if result[1] == \"output_1\" else \"Statement\")\n", - "\n", - "pd.DataFrame.from_dict(q_vs_s_results)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "Fk2kpvQR6Fa0" - }, - "source": [ - "And as we see, the question \"Who was the father of Arya Stark\" is sent to branch 1, while the statement \"Lord Eddard was the father of Arya Stark\" is sent to branch 2. This means we can have our pipeline treat statements and questions differently." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "eEwDIq9KXXke" - }, - "source": [ - "### Using Query Classifiers in a Pipeline\n", - "\n", - "Now let's see how we can use query classifiers in a question-answering (QA) pipeline. We start by initiating Elasticsearch:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "fCLtLItU5aWl" - }, - "outputs": [], - "source": [ - "# In Colab / No Docker environments: Start Elasticsearch from source\n", - "! wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.9.2-linux-x86_64.tar.gz -q\n", - "! tar -xzf elasticsearch-7.9.2-linux-x86_64.tar.gz\n", - "! chown -R daemon:daemon elasticsearch-7.9.2\n", - "\n", - "import os\n", - "from subprocess import Popen, PIPE, STDOUT\n", - "\n", - "es_server = Popen(\n", - " [\"elasticsearch-7.9.2/bin/elasticsearch\"], stdout=PIPE, stderr=STDOUT, preexec_fn=lambda: os.setuid(1) # as daemon\n", - ")\n", - "# wait until ES has started\n", - "! sleep 30" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "Vm9gqTioN-gf", - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "Next we fetch some data—for our example we'll use pages from the Game of Thrones wiki—and index it in our `DocumentStore`:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true, - "id": "Ig7dgfdHN-gg", - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "from haystack.utils import (\n", - " print_answers,\n", - " print_documents,\n", - " fetch_archive_from_http,\n", - " convert_files_to_docs,\n", - " clean_wiki_text,\n", - " launch_es,\n", - ")\n", - "from haystack.pipelines import Pipeline\n", - "from haystack.document_stores import ElasticsearchDocumentStore\n", - "from haystack.nodes import BM25Retriever, EmbeddingRetriever, FARMReader, TransformersQueryClassifier\n", - "\n", - "# Download and prepare data - 517 Wikipedia articles for Game of Thrones\n", - "doc_dir = \"data/tutorial14\"\n", - "s3_url = \"https://s3.eu-central-1.amazonaws.com/deepset.ai-farm-qa/datasets/documents/wiki_gameofthrones_txt14.zip\"\n", - "fetch_archive_from_http(url=s3_url, output_dir=doc_dir)\n", - "\n", - "# convert files to dicts containing documents that can be indexed to our datastore\n", - "got_docs = convert_files_to_docs(dir_path=doc_dir, clean_func=clean_wiki_text, split_paragraphs=True)\n", - "\n", - "# Initialize DocumentStore and index documents\n", - "# launch_es() # Uncomment this line for local Elasticsearch\n", - "document_store = ElasticsearchDocumentStore()\n", - "document_store.delete_documents()\n", - "document_store.write_documents(got_docs)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "CbAgZ2MZn2qm" - }, - "source": [ - "#### Pipelines with Keyword vs. Question/Statement Classification\n", - "\n", - "Our first illustration will be a simple retriever-reader QA pipeline, but the choice of which retriever we use will depend on the type of query received: **keyword** queries will use a sparse **`BM25Retriever`**, while **question/statement** queries will use the more accurate but also more computationally expensive **`EmbeddingRetriever`**.\n", - "\n", - "We start by initializing our retrievers and reader:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true, - "id": "m7zOPYQ-Ylep" - }, - "outputs": [], - "source": [ - "# Initialize sparse retriever for keyword queries\n", - "bm25_retriever = BM25Retriever(document_store=document_store)\n", - "\n", - "# Initialize dense retriever for question/statement queries\n", - "embedding_retriever = EmbeddingRetriever(\n", - " document_store=document_store, embedding_model=\"sentence-transformers/multi-qa-mpnet-base-dot-v1\"\n", - ")\n", - "document_store.update_embeddings(embedding_retriever, update_existing_embeddings=False)\n", - "\n", - "reader = FARMReader(model_name_or_path=\"deepset/roberta-base-squad2\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "K4wZ3xkQCHjY" - }, - "source": [ - "Now we define our pipeline. As promised, the question/statement branch `output_1` from the query classifier is fed into an `EmbeddingRetriever`, while the keyword branch `output_2` from the same classifier is fed into a `BM25Retriever`. Both of these retrievers are then fed into our reader. Our pipeline can thus be thought of as having something of a diamond shape: all queries are sent into the classifier, which splits those queries into two different retrievers, and those retrievers feed their outputs to the same reader." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true, - "id": "Sz-oZ5eJN-gl", - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "# Here we build the pipeline\n", - "sklearn_keyword_classifier = Pipeline()\n", - "sklearn_keyword_classifier.add_node(component=SklearnQueryClassifier(), name=\"QueryClassifier\", inputs=[\"Query\"])\n", - "sklearn_keyword_classifier.add_node(\n", - " component=embedding_retriever, name=\"EmbeddingRetriever\", inputs=[\"QueryClassifier.output_1\"]\n", - ")\n", - "sklearn_keyword_classifier.add_node(component=bm25_retriever, name=\"BM25Retriever\", inputs=[\"QueryClassifier.output_2\"])\n", - "sklearn_keyword_classifier.add_node(component=reader, name=\"QAReader\", inputs=[\"BM25Retriever\", \"EmbeddingRetriever\"])\n", - "\n", - "# Visualization of the pipeline\n", - "sklearn_keyword_classifier.draw(\"sklearn_keyword_classifier.png\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "imqRRCGTwQav" - }, - "source": [ - "Below, we can see how this choice affects the branching structure: the keyword query \"arya stark father\" and the question query \"Who is the father of Arya Stark?\" generate noticeably different results, a distinction that is likely due to the use of different retrievers for keyword vs. question/statement queries." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true, - "id": "fP6Cpcb-o0HK" - }, - "outputs": [], - "source": [ - "# Useful for framing headers\n", - "equal_line = \"=\" * 30\n", - "\n", - "# Run only the dense retriever on the full sentence query\n", - "res_1 = sklearn_keyword_classifier.run(query=\"Who is the father of Arya Stark?\")\n", - "print(f\"\\n\\n{equal_line}\\nQUESTION QUERY RESULTS\\n{equal_line}\")\n", - "print_answers(res_1, details=\"minimum\")\n", - "print(\"\\n\\n\")\n", - "\n", - "# Run only the sparse retriever on a keyword based query\n", - "res_2 = sklearn_keyword_classifier.run(query=\"arya stark father\")\n", - "print(f\"\\n\\n{equal_line}\\nKEYWORD QUERY RESULTS\\n{equal_line}\")\n", - "print_answers(res_2, details=\"minimum\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "dQ5YMyd4CQPC" - }, - "source": [ - "The above example uses an `SklearnQueryClassifier`, but of course we can do precisely the same thing with a `TransformersQueryClassifier`. This is illustrated below, where we have constructed the same diamond-shaped pipeline." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "yuddZL3FCPeq" - }, - "outputs": [], - "source": [ - "# Here we build the pipeline\n", - "transformer_keyword_classifier = Pipeline()\n", - "transformer_keyword_classifier.add_node(\n", - " component=TransformersQueryClassifier(), name=\"QueryClassifier\", inputs=[\"Query\"]\n", - ")\n", - "transformer_keyword_classifier.add_node(\n", - " component=embedding_retriever, name=\"EmbeddingRetriever\", inputs=[\"QueryClassifier.output_1\"]\n", - ")\n", - "transformer_keyword_classifier.add_node(\n", - " component=bm25_retriever, name=\"BM25Retriever\", inputs=[\"QueryClassifier.output_2\"]\n", - ")\n", - "transformer_keyword_classifier.add_node(\n", - " component=reader, name=\"QAReader\", inputs=[\"BM25Retriever\", \"EmbeddingRetriever\"]\n", - ")\n", - "\n", - "\n", - "# Useful for framing headers\n", - "equal_line = \"=\" * 30\n", - "\n", - "# Run only the dense retriever on the full sentence query\n", - "res_1 = transformer_keyword_classifier.run(query=\"Who is the father of Arya Stark?\")\n", - "print(f\"\\n\\n{equal_line}\\nQUESTION QUERY RESULTS\\n{equal_line}\")\n", - "print_answers(res_1, details=\"minimum\")\n", - "print(\"\\n\\n\")\n", - "\n", - "# Run only the sparse retriever on a keyword based query\n", - "res_2 = transformer_keyword_classifier.run(query=\"arya stark father\")\n", - "print(f\"\\n\\n{equal_line}\\nKEYWORD QUERY RESULTS\\n{equal_line}\")\n", - "print_answers(res_2, details=\"minimum\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "zLwdVwMXDcoS" - }, - "source": [ - "#### Pipeline with Question vs. Statement Classification\n", - "\n", - "Above we saw a potential use for keyword vs. question/statement classification: we might choose to use a less resource-intensive retriever for keyword queries than for question/statement queries. But what about question vs. statement classification?\n", - "\n", - "To illustrate one potential use for question vs. statement classification, we will build a pipeline that looks as follows:\n", - "\n", - "1. The pipeline will start with a retriever that **every query** will go through.\n", - "2. The pipeline will end with a reader that **only question queries** will go through.\n", - "\n", - "In other words, our pipeline will be a **retriever-only pipeline for statement queries**—given the statement \"Arya Stark was the daughter of a Lord\", all we will get back are the most relevant documents—but it will be a **retriever-reader pipeline for question queries**.\n", - "\n", - "To make things more concrete, our pipeline will start with a retriever, which is then fed into a `TransformersQueryClassifier` that is set to do question vs. statement classification. Note that this means we need to explicitly choose the model, since as mentioned previously a default `TransformersQueryClassifier` performs keyword vs. question/statement classification. The classifier's first branch, which handles question queries, will then be sent to the reader, while the second branch will not be connected to any other nodes. As a result, the last node of the pipeline depends on the type of query: questions go all the way through the reader, while statements only go through the retriever. This pipeline is illustrated below:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true, - "id": "BIisEJrzDr-9" - }, - "outputs": [], - "source": [ - "# Here we build the pipeline\n", - "transformer_question_classifier = Pipeline()\n", - "transformer_question_classifier.add_node(component=embedding_retriever, name=\"EmbeddingRetriever\", inputs=[\"Query\"])\n", - "transformer_question_classifier.add_node(\n", - " component=TransformersQueryClassifier(model_name_or_path=\"shahrukhx01/question-vs-statement-classifier\"),\n", - " name=\"QueryClassifier\",\n", - " inputs=[\"EmbeddingRetriever\"],\n", - ")\n", - "transformer_question_classifier.add_node(component=reader, name=\"QAReader\", inputs=[\"QueryClassifier.output_1\"])\n", - "\n", - "# Visualization of the pipeline\n", - "transformer_question_classifier.draw(\"transformer_question_classifier.png\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "QU1B6JQEDrol" - }, - "source": [ - "And here are the results of this pipeline: with a question query like \"Who is the father of Arya Stark?\", we obtain answers from a reader, and with a statement query like \"Arya Stark was the daughter of a Lord\", we just obtain documents from a retriever." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "HIjgs5k7C6CN" - }, - "outputs": [], - "source": [ - "# Useful for framing headers\n", - "equal_line = \"=\" * 30\n", - "\n", - "# Run the retriever + reader on the question query\n", - "res_1 = transformer_question_classifier.run(query=\"Who is the father of Arya Stark?\")\n", - "print(f\"\\n\\n{equal_line}\\nQUESTION QUERY RESULTS\\n{equal_line}\")\n", - "print_answers(res_1, details=\"minimum\")\n", - "print(\"\\n\\n\")\n", - "\n", - "# Run only the retriever on the statement query\n", - "res_2 = transformer_question_classifier.run(query=\"Arya Stark was the daughter of a Lord.\")\n", - "print(f\"\\n\\n{equal_line}\\nSTATEMENT QUERY RESULTS\\n{equal_line}\")\n", - "print_documents(res_2)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Other use cases for Query Classifiers: custom classification models and zero-shot classification.\n", - "\n", - "`TransformersQueryClassifier` is very flexible and also supports other options for classifying queries.\n", - "For example, we may be interested in detecting the sentiment or classifying the topics. We can do this by loading a custom classification model from the Hugging Face Hub or by using zero-shot classification.\n", - "\n", - "#### Custom classification model vs zero-shot classification\n", - "- Rraditional text classification models are trained to predict one of a few \"hard-coded\" classes and require a dedicated training dataset. In the Hugging Face Hub, you can find many pre-trained models, maybe even related to your domain of interest.\n", - "- Zero-shot classification is very versatile: by choosing a suitable base transformer, you can classify the text without any training dataset. You just have to provide the candidate categories." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Using custom classification models\n", - "We can use a public model, available in the Hugging Face Hub. For example, if we want to classify the sentiment of the queries, we can choose an appropriate model, such as https://huggingface.co/cardiffnlp/twitter-roberta-base-sentiment.\n", - "\n", - "*In this case, the `labels` parameter must contain a list with the exact model labels.\n", - "The first label we provide corresponds to output_1, the second label to output_2, and so on.*" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from haystack.nodes import TransformersQueryClassifier\n", - "\n", - "# Remember to compile a list with the exact model labels\n", - "# The first label you provide corresponds to output_1, the second label to output_2, and so on.\n", - "labels = [\"LABEL_0\", \"LABEL_1\", \"LABEL_2\"]\n", - "\n", - "sentiment_query_classifier = TransformersQueryClassifier(\n", - " model_name_or_path=\"cardiffnlp/twitter-roberta-base-sentiment\",\n", - " use_gpu=True,\n", - " task=\"text-classification\",\n", - " labels=labels,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "queries = [\n", - " \"What's the answer?\", # neutral query\n", - " \"Would you be so lovely to tell me the answer?\", # positive query\n", - " \"Can you give me the damn right answer for once??\", # negative query\n", - "]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd\n", - "\n", - "sent_results = {\"Query\": [], \"Output Branch\": [], \"Class\": []}\n", - "\n", - "for query in queries:\n", - " result = sentiment_query_classifier.run(query=query)\n", - " sent_results[\"Query\"].append(query)\n", - " sent_results[\"Output Branch\"].append(result[1])\n", - " if result[1] == \"output_1\":\n", - " sent_results[\"Class\"].append(\"negative\")\n", - " elif result[1] == \"output_2\":\n", - " sent_results[\"Class\"].append(\"neutral\")\n", - " elif result[1] == \"output_3\":\n", - " sent_results[\"Class\"].append(\"positive\")\n", - "\n", - "pd.DataFrame.from_dict(sent_results)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Using zero-shot classification\n", - "You can also perform zero-shot classification by providing a suitable base transformer model and **choosing** the classes the model should predict.\n", - "For example, we may be interested in whether the user query is related to music or cinema.\n", - "\n", - "*In this case, the `labels` parameter is a list containing the candidate classes.*" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# In zero-shot-classification, you can choose the labels\n", - "labels = [\"music\", \"cinema\"]\n", - "\n", - "query_classifier = TransformersQueryClassifier(\n", - " model_name_or_path=\"typeform/distilbert-base-uncased-mnli\",\n", - " use_gpu=True,\n", - " task=\"zero-shot-classification\",\n", - " labels=labels,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "queries = [\n", - " \"In which films does John Travolta appear?\", # query about cinema\n", - " \"What is the Rolling Stones first album?\", # query about music\n", - " \"Who was Sergio Leone?\", # query about cinema\n", - "]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd\n", - "\n", - "query_classification_results = {\"Query\": [], \"Output Branch\": [], \"Class\": []}\n", - "\n", - "for query in queries:\n", - " result = query_classifier.run(query=query)\n", - " query_classification_results[\"Query\"].append(query)\n", - " query_classification_results[\"Output Branch\"].append(result[1])\n", - " query_classification_results[\"Class\"].append(\"music\" if result[1] == \"output_1\" else \"cinema\")\n", - "\n", - "pd.DataFrame.from_dict(query_classification_results)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "_wS8NzRoRh_G" - }, - "source": [ - "## About us\n", - "\n", - "This [Haystack](https://github.com/deepset-ai/haystack/) notebook was made with love by [deepset](https://deepset.ai/) in Berlin, Germany\n", - "\n", - "We bring NLP to the industry via open source! \n", - "Our focus: Industry specific language models & large scale QA systems.\n", - " \n", - "Some of our other work: \n", - "- [German BERT](https://deepset.ai/german-bert)\n", - "- [GermanQuAD and GermanDPR](https://deepset.ai/germanquad)\n", - "- [FARM](https://github.com/deepset-ai/FARM)\n", - "\n", - "Get in touch:\n", - "[Twitter](https://twitter.com/deepset_ai) | [LinkedIn](https://www.linkedin.com/company/deepset-ai/) | [Slack](https://haystack.deepset.ai/community/join) | [GitHub Discussions](https://github.com/deepset-ai/haystack/discussions) | [Website](https://deepset.ai)\n", - "\n", - "By the way: [we're hiring!](https://www.deepset.ai/jobs) " - ] - } - ], - "metadata": { - "accelerator": "GPU", - "colab": { - "collapsed_sections": [], - "name": "Tutorial14_Query_Classifier.ipynb", - "provenance": [] - }, - "kernelspec": { - "display_name": "Python 3.7.11 ('haystack-dev')", - "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.7.11" - }, - "vscode": { - "interpreter": { - "hash": "a1c4180befe5334d9af26d84758dc08f43161c3b98a4eb4d4a43d7491d015a65" - } - } - }, - "nbformat": 4, - "nbformat_minor": 0 -} diff --git a/tutorials/Tutorial14_Query_Classifier.py b/tutorials/Tutorial14_Query_Classifier.py deleted file mode 100644 index 3863eaa8b0..0000000000 --- a/tutorials/Tutorial14_Query_Classifier.py +++ /dev/null @@ -1,256 +0,0 @@ -import logging - -# We configure how logging messages should be displayed and which log level should be used before importing Haystack. -# Example log message: -# INFO - haystack.utils.preprocessing - Converting data/tutorial1/218_Olenna_Tyrell.txt -# Default log level in basicConfig is WARNING so the explicit parameter is not necessary but can be changed easily: -logging.basicConfig(format="%(levelname)s - %(name)s - %(message)s", level=logging.WARNING) -logging.getLogger("haystack").setLevel(logging.INFO) - -from haystack.utils import ( - fetch_archive_from_http, - convert_files_to_docs, - clean_wiki_text, - launch_es, - print_answers, - print_documents, -) -from haystack.pipelines import Pipeline -from haystack.document_stores import ElasticsearchDocumentStore -from haystack.nodes import ( - BM25Retriever, - EmbeddingRetriever, - FARMReader, - TransformersQueryClassifier, - SklearnQueryClassifier, -) -import pandas as pd - - -def tutorial14_query_classifier(): - """Tutorial 14: Query Classifiers""" - - # Useful for framing headers - def print_header(header): - equal_line = "=" * len(header) - print(f"\n{equal_line}\n{header}\n{equal_line}\n") - - # Try out the SklearnQueryClassifier on its own - # Keyword vs. Question/Statement Classification - keyword_classifier = SklearnQueryClassifier() - queries = [ - "Arya Stark father", # Keyword Query - "Who was the father of Arya Stark", # Interrogative Query - "Lord Eddard was the father of Arya Stark", # Statement Query - ] - k_vs_qs_results = {"Query": [], "Output Branch": [], "Class": []} - for query in queries: - result = keyword_classifier.run(query=query) - k_vs_qs_results["Query"].append(query) - k_vs_qs_results["Output Branch"].append(result[1]) - k_vs_qs_results["Class"].append("Question/Statement" if result[1] == "output_1" else "Keyword") - print_header("Keyword vs. Question/Statement Classification") - print(pd.DataFrame.from_dict(k_vs_qs_results)) - print("") - - # Question vs. Statement Classification - model_url = ( - "https://ext-models-haystack.s3.eu-central-1.amazonaws.com/gradboost_query_classifier_statements/model.pickle" - ) - vectorizer_url = "https://ext-models-haystack.s3.eu-central-1.amazonaws.com/gradboost_query_classifier_statements/vectorizer.pickle" - question_classifier = SklearnQueryClassifier(model_name_or_path=model_url, vectorizer_name_or_path=vectorizer_url) - queries = [ - "Who was the father of Arya Stark", # Interrogative Query - "Lord Eddard was the father of Arya Stark", # Statement Query - ] - q_vs_s_results = {"Query": [], "Output Branch": [], "Class": []} - for query in queries: - result = question_classifier.run(query=query) - q_vs_s_results["Query"].append(query) - q_vs_s_results["Output Branch"].append(result[1]) - q_vs_s_results["Class"].append("Question" if result[1] == "output_1" else "Statement") - print_header("Question vs. Statement Classification") - print(pd.DataFrame.from_dict(q_vs_s_results)) - print("") - - # Use in pipelines - # Download and prepare data - 517 Wikipedia articles for Game of Thrones - doc_dir = "data/tutorial14" - s3_url = "https://s3.eu-central-1.amazonaws.com/deepset.ai-farm-qa/datasets/documents/wiki_gameofthrones_txt14.zip" - fetch_archive_from_http(url=s3_url, output_dir=doc_dir) - - # convert files to dicts containing documents that can be indexed to our datastore - got_docs = convert_files_to_docs(dir_path=doc_dir, clean_func=clean_wiki_text, split_paragraphs=True) - - # Initialize DocumentStore and index documents - launch_es() - document_store = ElasticsearchDocumentStore() - document_store.delete_documents() - document_store.write_documents(got_docs) - - # Pipelines with Keyword vs. Question/Statement Classification - print_header("PIPELINES WITH KEYWORD VS. QUESTION/STATEMENT CLASSIFICATION") - - # Initialize sparse retriever for keyword queries - bm25_retriever = BM25Retriever(document_store=document_store) - - # Initialize dense retriever for question/statement queries - embedding_retriever = EmbeddingRetriever( - document_store=document_store, embedding_model="sentence-transformers/multi-qa-mpnet-base-dot-v1" - ) - document_store.update_embeddings(embedding_retriever, update_existing_embeddings=False) - - reader = FARMReader(model_name_or_path="deepset/roberta-base-squad2") - - # Pipeline 1: SklearnQueryClassifier - print_header("Pipeline 1: SklearnQueryClassifier") - sklearn_keyword_classifier = Pipeline() - sklearn_keyword_classifier.add_node(component=SklearnQueryClassifier(), name="QueryClassifier", inputs=["Query"]) - sklearn_keyword_classifier.add_node( - component=embedding_retriever, name="EmbeddingRetriever", inputs=["QueryClassifier.output_1"] - ) - sklearn_keyword_classifier.add_node( - component=bm25_retriever, name="ESRetriever", inputs=["QueryClassifier.output_2"] - ) - sklearn_keyword_classifier.add_node(component=reader, name="QAReader", inputs=["ESRetriever", "EmbeddingRetriever"]) - sklearn_keyword_classifier.draw("sklearn_keyword_classifier.png") - - # Run only the dense retriever on the full sentence query - res_1 = sklearn_keyword_classifier.run(query="Who is the father of Arya Stark?") - print_header("Question Query Results") - print_answers(res_1, details="minimum") - print("") - - # Run only the sparse retriever on a keyword based query - res_2 = sklearn_keyword_classifier.run(query="arya stark father") - print_header("Keyword Query Results") - print_answers(res_2, details="minimum") - print("") - - # Pipeline 2: TransformersQueryClassifier - print_header("Pipeline 2: TransformersQueryClassifier") - - transformer_keyword_classifier = Pipeline() - transformer_keyword_classifier.add_node( - component=TransformersQueryClassifier(), name="QueryClassifier", inputs=["Query"] - ) - transformer_keyword_classifier.add_node( - component=embedding_retriever, name="EmbeddingRetriever", inputs=["QueryClassifier.output_1"] - ) - transformer_keyword_classifier.add_node( - component=bm25_retriever, name="ESRetriever", inputs=["QueryClassifier.output_2"] - ) - transformer_keyword_classifier.add_node( - component=reader, name="QAReader", inputs=["ESRetriever", "EmbeddingRetriever"] - ) - - # Run only the dense retriever on the full sentence query - res_1 = transformer_keyword_classifier.run(query="Who is the father of Arya Stark?") - print_header("Question Query Results") - print_answers(res_1, details="minimum") - print("") - - # Run only the sparse retriever on a keyword based query - res_2 = transformer_keyword_classifier.run(query="arya stark father") - print_header("Keyword Query Results") - print_answers(res_2, details="minimum") - print("") - - # Pipeline with Question vs. Statement Classification - print_header("PIPELINE WITH QUESTION VS. STATEMENT CLASSIFICATION") - transformer_question_classifier = Pipeline() - transformer_question_classifier.add_node(component=embedding_retriever, name="EmbeddingRetriever", inputs=["Query"]) - transformer_question_classifier.add_node( - component=TransformersQueryClassifier(model_name_or_path="shahrukhx01/question-vs-statement-classifier"), - name="QueryClassifier", - inputs=["EmbeddingRetriever"], - ) - transformer_question_classifier.add_node(component=reader, name="QAReader", inputs=["QueryClassifier.output_1"]) - transformer_question_classifier.draw("transformer_question_classifier.png") - - # Run only the QA reader on the question query - res_1 = transformer_question_classifier.run(query="Who is the father of Arya Stark?") - print_header("Question Query Results") - print_answers(res_1, details="minimum") - print("") - - res_2 = transformer_question_classifier.run(query="Arya Stark was the daughter of a Lord.") - print_header("Statement Query Results") - print_documents(res_2) - print("") - - # Other use cases for Query Classifiers - - # Custom classification models - - # Remember to compile a list with the exact model labels - # The first label you provide corresponds to output_1, the second label to output_2, and so on. - labels = ["LABEL_0", "LABEL_1", "LABEL_2"] - - sentiment_query_classifier = TransformersQueryClassifier( - model_name_or_path="cardiffnlp/twitter-roberta-base-sentiment", - use_gpu=True, - task="text-classification", - labels=labels, - ) - - queries = [ - "What's the answer?", # neutral query - "Would you be so lovely to tell me the answer?", # positive query - "Can you give me the damn right answer for once??", # negative query - ] - - sent_results = {"Query": [], "Output Branch": [], "Class": []} - - for query in queries: - result = sentiment_query_classifier.run(query=query) - sent_results["Query"].append(query) - sent_results["Output Branch"].append(result[1]) - if result[1] == "output_1": - sent_results["Class"].append("negative") - elif result[1] == "output_2": - sent_results["Class"].append("neutral") - elif result[1] == "output_3": - sent_results["Class"].append("positive") - - print_header("Query Sentiment Classification with custom transformer model") - print(pd.DataFrame.from_dict(sent_results)) - print("") - - # Zero-shot classification - - # In zero-shot-classification, you can choose the labels - labels = ["music", "cinema"] - - query_classifier = TransformersQueryClassifier( - model_name_or_path="typeform/distilbert-base-uncased-mnli", - use_gpu=True, - task="zero-shot-classification", - labels=labels, - ) - - queries = [ - "In which films does John Travolta appear?", # query about cinema - "What is the Rolling Stones first album?", # query about music - "Who was Sergio Leone?", # query about cinema - ] - - query_classification_results = {"Query": [], "Output Branch": [], "Class": []} - - for query in queries: - result = query_classifier.run(query=query) - query_classification_results["Query"].append(query) - query_classification_results["Output Branch"].append(result[1]) - query_classification_results["Class"].append("music" if result[1] == "output_1" else "cinema") - - print_header("Query Zero-shot Classification") - print(pd.DataFrame.from_dict(query_classification_results)) - print("") - - -if __name__ == "__main__": - tutorial14_query_classifier() - -# This Haystack script was made with love by deepset in Berlin, Germany -# Haystack: https://github.com/deepset-ai/haystack -# deepset: https://deepset.ai/ diff --git a/tutorials/Tutorial15_TableQA.ipynb b/tutorials/Tutorial15_TableQA.ipynb deleted file mode 100644 index 0acc9c478a..0000000000 --- a/tutorials/Tutorial15_TableQA.ipynb +++ /dev/null @@ -1,3449 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": { - "id": "DeAkZwDhufYA" - }, - "source": [ - "# Open-Domain QA on Tables\n", - "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/deepset-ai/haystack/blob/main/tutorials/Tutorial15_TableQA.ipynb)\n", - "\n", - "This tutorial shows you how to perform question-answering on tables using the `EmbeddingRetriever` or `BM25Retriever` as retriever node and the `TableReader` as reader node." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "vbR3bETlvi-3" - }, - "source": [ - "### Prepare environment\n", - "\n", - "#### Colab: Enable the GPU runtime\n", - "Make sure you enable the GPU runtime to experience decent speed in this tutorial.\n", - "**Runtime -> Change Runtime type -> Hardware accelerator -> GPU**\n", - "\n", - "" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "HW66x0rfujyO" - }, - "outputs": [], - "source": [ - "# Make sure you have a GPU running\n", - "!nvidia-smi" - ] - }, - { - "cell_type": "markdown", - "source": [ - "## Logging\n", - "\n", - "We configure how logging messages should be displayed and which log level should be used before importing Haystack.\n", - "Example log message:\n", - "INFO - haystack.utils.preprocessing - Converting data/tutorial1/218_Olenna_Tyrell.txt\n", - "Default log level in basicConfig is WARNING so the explicit parameter is not necessary but can be changed easily:" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - } - }, - { - "cell_type": "code", - "execution_count": null, - "outputs": [], - "source": [ - "import logging\n", - "\n", - "logging.basicConfig(format=\"%(levelname)s - %(name)s - %(message)s\", level=logging.WARNING)\n", - "logging.getLogger(\"haystack\").setLevel(logging.INFO)" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "_ZXoyhOAvn7M" - }, - "outputs": [], - "source": [ - "# Install the latest release of Haystack in your own environment\n", - "#! pip install farm-haystack\n", - "\n", - "# Install the latest main of Haystack\n", - "!pip install --upgrade pip\n", - "!pip install git+https://github.com/deepset-ai/haystack.git#egg=farm-haystack[colab]\n", - "\n", - "# The TaPAs-based TableReader requires the torch-scatter library\n", - "import torch\n", - "\n", - "version = torch.__version__\n", - "!pip install torch-scatter -f https://data.pyg.org/whl/torch-{version}.html\n", - "\n", - "# Install pygraphviz for visualization of Pipelines\n", - "!apt install libgraphviz-dev\n", - "!pip install pygraphviz" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "K_XJhluXwF5_" - }, - "source": [ - "### Start an Elasticsearch server\n", - "You can start Elasticsearch on your local machine instance using Docker. If Docker is not readily available in your environment (e.g. in Colab notebooks), then you can manually download and execute Elasticsearch from source." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "frDqgzK7v2i1" - }, - "outputs": [], - "source": [ - "# Recommended: Start Elasticsearch using Docker via the Haystack utility function\n", - "from haystack.utils import launch_es\n", - "\n", - "launch_es()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "S4PGj1A6wKWu" - }, - "outputs": [], - "source": [ - "# In Colab / No Docker environments: Start Elasticsearch from source\n", - "! wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.9.2-linux-x86_64.tar.gz -q\n", - "! tar -xzf elasticsearch-7.9.2-linux-x86_64.tar.gz\n", - "! chown -R daemon:daemon elasticsearch-7.9.2\n", - "\n", - "import os\n", - "from subprocess import Popen, PIPE, STDOUT\n", - "\n", - "es_server = Popen(\n", - " [\"elasticsearch-7.9.2/bin/elasticsearch\"], stdout=PIPE, stderr=STDOUT, preexec_fn=lambda: os.setuid(1) # as daemon\n", - ")\n", - "# wait until ES has started\n", - "! sleep 30" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": { - "id": "RmxepXZtwQ0E" - }, - "outputs": [], - "source": [ - "# Connect to Elasticsearch\n", - "from haystack.document_stores import ElasticsearchDocumentStore\n", - "\n", - "document_index = \"document\"\n", - "document_store = ElasticsearchDocumentStore(host=\"localhost\", username=\"\", password=\"\", index=document_index)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "fFh26LIlxldw" - }, - "source": [ - "## Add Tables to DocumentStore\n", - "To quickly demonstrate the capabilities of the `EmbeddingRetriever` and the `TableReader` we use a subset of 1000 tables and text documents from a dataset we have published in [this paper](https://arxiv.org/abs/2108.04049).\n", - "\n", - "Just as text passages, tables are represented as `Document` objects in Haystack. The content field, though, is a pandas DataFrame instead of a string." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "nM63uwbd8zd6" - }, - "outputs": [], - "source": [ - "# Let's first fetch some tables that we want to query\n", - "# Here: 1000 tables from OTT-QA\n", - "from haystack.utils import fetch_archive_from_http\n", - "\n", - "doc_dir = \"data/tutorial15\"\n", - "s3_url = \"https://s3.eu-central-1.amazonaws.com/deepset.ai-farm-qa/datasets/documents/table_text_dataset.zip\"\n", - "fetch_archive_from_http(url=s3_url, output_dir=doc_dir)" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "SKjw2LuXxlGh", - "outputId": "92c67d24-d6fb-413e-8dd7-53075141d508" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " Opponent M W L T NR Win% First Last\n", - "0 Afghanistan 2 2 0 0 0 100.0 2012 2014\n", - "1 Australia 98 32 62 1 3 34.21 1975 2017\n", - "2 Bangladesh 35 31 4 0 0 88.57 1986 2015\n", - "3 Canada 2 2 0 0 0 100.0 1979 2011\n", - "4 England 82 31 49 0 2 38.75 1974 2017\n", - "5 Hong Kong 2 2 0 0 0 100.0 2004 2008\n", - "6 India 129 73 52 0 4 58.4 1978 2017\n", - "7 Ireland 7 5 1 1 0 78.57 2007 2016\n", - "8 Kenya 6 6 0 0 0 100.0 1996 2011\n", - "9 Namibia 1 1 0 0 0 100.0 2003 2003\n", - "10 Netherlands 3 3 0 0 0 100.0 1996 2003\n", - "11 New Zealand 103 53 47 1 2 52.97 1973 2018\n", - "12 Scotland 3 3 0 0 0 100.0 1999 2013\n", - "13 South Africa 73 25 47 0 1 34.72 1992 2017\n", - "14 Sri Lanka 153 90 58 1 4 60.73 1975 2017\n", - "15 United Arab Emirates 3 3 0 0 0 100.0 1994 2015\n", - "16 West Indies 133 60 70 3 0 46.24 1975 2017\n", - "17 Zimbabwe 59 52 4 1 2 92.1 1992 2018\n", - "18 Total[12] 894 474 394 8 18 54.56 1973 2018\n", - "{}\n" - ] - } - ], - "source": [ - "# Add the tables to the DocumentStore\n", - "\n", - "import json\n", - "from haystack import Document\n", - "import pandas as pd\n", - "\n", - "\n", - "def read_tables(filename):\n", - " processed_tables = []\n", - " with open(filename) as tables:\n", - " tables = json.load(tables)\n", - " for key, table in tables.items():\n", - " current_columns = table[\"header\"]\n", - " current_rows = table[\"data\"]\n", - " current_df = pd.DataFrame(columns=current_columns, data=current_rows)\n", - " document = Document(content=current_df, content_type=\"table\", id=key)\n", - " processed_tables.append(document)\n", - "\n", - " return processed_tables\n", - "\n", - "\n", - "tables = read_tables(f\"{doc_dir}/tables.json\")\n", - "document_store.write_documents(tables, index=document_index)\n", - "\n", - "# Showing content field and meta field of one of the Documents of content_type 'table'\n", - "print(tables[0].content)\n", - "print(tables[0].meta)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "hmQC1sDmw3d7" - }, - "source": [ - "## Initialize Retriever, Reader & Pipeline\n", - "\n", - "### Retriever\n", - "\n", - "Retrievers help narrowing down the scope for the Reader to a subset of tables where a given question could be answered.\n", - "They use some simple but fast algorithm.\n", - "\n", - "**Here:** We specify an embedding model that is finetuned so it can also generate embeddings for tables (instead of just text).\n", - "\n", - "**Alternatives:**\n", - "\n", - "- `BM25Retriever` that uses BM25 algorithm\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "EY_qvdV6wyK5" - }, - "outputs": [], - "source": [ - "from haystack.nodes.retriever import EmbeddingRetriever\n", - "\n", - "retriever = EmbeddingRetriever(document_store=document_store, embedding_model=\"deepset/all-mpnet-base-v2-table\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "jasi1RM2zIJ7" - }, - "outputs": [], - "source": [ - "# Add table embeddings to the tables in DocumentStore\n", - "document_store.update_embeddings(retriever=retriever)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "XM-ijy6Zz11L" - }, - "outputs": [], - "source": [ - "## Alternative: BM25Retriever\n", - "# from haystack.nodes.retriever import BM25Retriever\n", - "# retriever = BM25Retriever(document_store=document_store)" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "YHfQWxVI0N2e", - "outputId": "1d8dc4d2-a184-489e-defa-d445d76c458f" - }, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "c31185c0629c46769fb7e7e2eb016fa1", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Batches: 0%| | 0/1 [00:00]\n" - ] - } - ], - "source": [ - "from haystack.utils import print_answers\n", - "\n", - "prediction = reader.predict(query=\"Who played Gregory House in the series House?\", documents=[table_doc])\n", - "print_answers(prediction, details=\"all\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "jkAYNMb7R9qu" - }, - "source": [ - "The offsets in the `offsets_in_document` and `offsets_in_context` field indicate the table cells that the model predicts to be part of the answer. They need to be interpreted on the linearized table, i.e., a flat list containing all of the table cells." - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "It8XYT2ZTVJs", - "outputId": "7d31af60-e04a-485d-f0ee-f29592b03928" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Predicted answer: Hugh Laurie\n", - "Meta field: {'aggregation_operator': 'NONE', 'answer_cells': ['Hugh Laurie']}\n" - ] - } - ], - "source": [ - "print(f\"Predicted answer: {prediction['answers'][0].answer}\")\n", - "print(f\"Meta field: {prediction['answers'][0].meta}\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "pgmG7pzL5ceh" - }, - "source": [ - "### Pipeline\n", - "The Retriever and the Reader can be sticked together to a pipeline in order to first retrieve relevant tables and then extract the answer.\n", - "\n", - "**Notice**: Given that the `TableReader` does not provide useful confidence scores and returns an answer for each of the tables, the sorting of the answers might be not helpful." - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": { - "id": "G-aZZvyv4-Mf" - }, - "outputs": [], - "source": [ - "# Initialize pipeline\n", - "from haystack import Pipeline\n", - "\n", - "table_qa_pipeline = Pipeline()\n", - "table_qa_pipeline.add_node(component=retriever, name=\"EmbeddingRetriever\", inputs=[\"Query\"])\n", - "table_qa_pipeline.add_node(component=reader, name=\"TableReader\", inputs=[\"EmbeddingRetriever\"])" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "m8evexnW6dev", - "outputId": "40514084-f516-4f13-fb48-6a55cb578366" - }, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "ce6722f406154bfebd4053040289b411", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Batches: 0%| | 0/1 [00:00" - ] - }, - "execution_count": 18, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Let's have a look on the structure of the combined Table an Text QA pipeline.\n", - "from IPython import display\n", - "\n", - "text_table_qa_pipeline.draw()\n", - "display.Image(\"pipeline.png\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "strPNduPoBLe" - }, - "outputs": [], - "source": [ - "# Example query whose answer resides in a text passage\n", - "predictions = text_table_qa_pipeline.run(query=\"Who was Thomas Alva Edison?\")" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "9YiK75tSoOGA", - "outputId": "bd52f841-3846-441f-dd6f-53b02111691e" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "Query: Who was Thomas Alva Edison?\n", - "Answers:\n", - "[ { 'answer': 'American inventor and businessman',\n", - " 'context': 'mas Alva Edison (February 11, 1847October 18, 1931) was an '\n", - " 'American inventor and businessman, who has been described '\n", - " \"as America's greatest inventor. H\"},\n", - " { 'answer': 'John Béchervaise , OAM , MBE',\n", - " 'context': Name \\\n", - "0 Amanda Barnard \n", - "1 Martin G. Bean \n", - "2 Gordon S. Brown \n", - "3 John Béchervaise , OAM , MBE \n", - "4 Megan Clark , AC \n", - "5 J. Donald R. de Raadt \n", - "6 Graham Dorrington \n", - "7 Dennis Gibson , AO \n", - "8 Ranulph Glanville \n", - "9 Alfred Gottschalk \n", - "10 Ann Henderson-Sellers \n", - "11 Arthur R. Hogg \n", - "12 Kourosh Kalantar-zadeh \n", - "13 Richard Kaner \n", - "14 Lakshmi Kantam \n", - "15 William Kernot \n", - "16 Sir Albert Kitson \n", - "17 David Malin \n", - "18 Henry Millicer , AM \n", - "19 Luca Marmorini \n", - "\n", - " Association with RMIT \\\n", - "0 B Sci ( AppPhysics ) ( Hon ) , PhD \n", - "1 current Vice-Chancellor \n", - "2 Dip Civil Eng , Elec Eng , Mech Eng [ WMC ] \n", - "3 science classes \n", - "4 DAppSci ( honoris causa ) , former faculty \n", - "5 FRMIT \n", - "6 faculty \n", - "7 former Chancellor \n", - "8 former faculty \n", - "9 former faculty \n", - "10 former Deputy Vice-Chancellor \n", - "11 science classes \n", - "12 attended ( PhD ) and also former faculty \n", - "13 faculty \n", - "14 faculty \n", - "15 former President [ WMC ] \n", - "16 geology , mining , surveying classes [ WMC ] \n", - "17 D AppSci ( honoris causa ) \n", - "18 D Eng ( honoris causa ) ; former faculty \n", - "19 faculty \n", - "\n", - " Notability \n", - "0 nanotechnologist and theoretical physicist ; Head of the CSIRO Nanoscience L... \n", - "1 technology executive ; former Global Director of Microsoft and former Vice-C... \n", - "2 cyberneticist ; Emeritus Professor of Electrical Engineering at MIT \n", - "3 Antarctic explorer and author \n", - "4 scientist ; current CEO of the CSIRO \n", - "5 Emeritus Professor of Informatics and System Science at Luleå University of ... \n", - "6 aeronautical engineer ; subject of the 2004 documentary The White Diamond by... \n", - "7 mathematician \n", - "8 cybernetics theoretician \n", - "9 biochemist and glycoprotein researcher \n", - "10 former Director of the UN Climate Programme \n", - "11 astronomer and physicist \n", - "12 Materials scientist , electronic engineer and Australian Research Council ( ... \n", - "13 chemist and nanotechnologist ; recipient of the Tolman Award ( 2008 ) \n", - "14 chemist ; Adjunct Professor and Director of the IICT -RMIT Research Centre \n", - "15 Old Kernot Engineering School at RMIT named in his honour \n", - "16 geologist ; recipient of the Lyell Medal ( 1927 ) \n", - "17 astronomer \n", - "18 aircraft designer \n", - "19 head of the engine and electronics department for the Ferrari F1 team },\n", - " { 'answer': 'Ann Henderson-Sellers',\n", - " 'context': Name \\\n", - "0 Amanda Barnard \n", - "1 Martin G. Bean \n", - "2 Gordon S. Brown \n", - "3 John Béchervaise , OAM , MBE \n", - "4 Megan Clark , AC \n", - "5 J. Donald R. de Raadt \n", - "6 Graham Dorrington \n", - "7 Dennis Gibson , AO \n", - "8 Ranulph Glanville \n", - "9 Alfred Gottschalk \n", - "10 Ann Henderson-Sellers \n", - "11 Arthur R. Hogg \n", - "12 Kourosh Kalantar-zadeh \n", - "13 Richard Kaner \n", - "14 Lakshmi Kantam \n", - "15 William Kernot \n", - "16 Sir Albert Kitson \n", - "17 David Malin \n", - "18 Henry Millicer , AM \n", - "19 Luca Marmorini \n", - "\n", - " Association with RMIT \\\n", - "0 B Sci ( AppPhysics ) ( Hon ) , PhD \n", - "1 current Vice-Chancellor \n", - "2 Dip Civil Eng , Elec Eng , Mech Eng [ WMC ] \n", - "3 science classes \n", - "4 DAppSci ( honoris causa ) , former faculty \n", - "5 FRMIT \n", - "6 faculty \n", - "7 former Chancellor \n", - "8 former faculty \n", - "9 former faculty \n", - "10 former Deputy Vice-Chancellor \n", - "11 science classes \n", - "12 attended ( PhD ) and also former faculty \n", - "13 faculty \n", - "14 faculty \n", - "15 former President [ WMC ] \n", - "16 geology , mining , surveying classes [ WMC ] \n", - "17 D AppSci ( honoris causa ) \n", - "18 D Eng ( honoris causa ) ; former faculty \n", - "19 faculty \n", - "\n", - " Notability \n", - "0 nanotechnologist and theoretical physicist ; Head of the CSIRO Nanoscience L... \n", - "1 technology executive ; former Global Director of Microsoft and former Vice-C... \n", - "2 cyberneticist ; Emeritus Professor of Electrical Engineering at MIT \n", - "3 Antarctic explorer and author \n", - "4 scientist ; current CEO of the CSIRO \n", - "5 Emeritus Professor of Informatics and System Science at Luleå University of ... \n", - "6 aeronautical engineer ; subject of the 2004 documentary The White Diamond by... \n", - "7 mathematician \n", - "8 cybernetics theoretician \n", - "9 biochemist and glycoprotein researcher \n", - "10 former Director of the UN Climate Programme \n", - "11 astronomer and physicist \n", - "12 Materials scientist , electronic engineer and Australian Research Council ( ... \n", - "13 chemist and nanotechnologist ; recipient of the Tolman Award ( 2008 ) \n", - "14 chemist ; Adjunct Professor and Director of the IICT -RMIT Research Centre \n", - "15 Old Kernot Engineering School at RMIT named in his honour \n", - "16 geologist ; recipient of the Lyell Medal ( 1927 ) \n", - "17 astronomer \n", - "18 aircraft designer \n", - "19 head of the engine and electronics department for the Ferrari F1 team },\n", - " { 'answer': 'nanotechnologist and theoretical physicist ; Head of the '\n", - " 'CSIRO Nanoscience Laboratory',\n", - " 'context': Name \\\n", - "0 Amanda Barnard \n", - "1 Martin G. Bean \n", - "2 Gordon S. Brown \n", - "3 John Béchervaise , OAM , MBE \n", - "4 Megan Clark , AC \n", - "5 J. Donald R. de Raadt \n", - "6 Graham Dorrington \n", - "7 Dennis Gibson , AO \n", - "8 Ranulph Glanville \n", - "9 Alfred Gottschalk \n", - "10 Ann Henderson-Sellers \n", - "11 Arthur R. Hogg \n", - "12 Kourosh Kalantar-zadeh \n", - "13 Richard Kaner \n", - "14 Lakshmi Kantam \n", - "15 William Kernot \n", - "16 Sir Albert Kitson \n", - "17 David Malin \n", - "18 Henry Millicer , AM \n", - "19 Luca Marmorini \n", - "\n", - " Association with RMIT \\\n", - "0 B Sci ( AppPhysics ) ( Hon ) , PhD \n", - "1 current Vice-Chancellor \n", - "2 Dip Civil Eng , Elec Eng , Mech Eng [ WMC ] \n", - "3 science classes \n", - "4 DAppSci ( honoris causa ) , former faculty \n", - "5 FRMIT \n", - "6 faculty \n", - "7 former Chancellor \n", - "8 former faculty \n", - "9 former faculty \n", - "10 former Deputy Vice-Chancellor \n", - "11 science classes \n", - "12 attended ( PhD ) and also former faculty \n", - "13 faculty \n", - "14 faculty \n", - "15 former President [ WMC ] \n", - "16 geology , mining , surveying classes [ WMC ] \n", - "17 D AppSci ( honoris causa ) \n", - "18 D Eng ( honoris causa ) ; former faculty \n", - "19 faculty \n", - "\n", - " Notability \n", - "0 nanotechnologist and theoretical physicist ; Head of the CSIRO Nanoscience L... \n", - "1 technology executive ; former Global Director of Microsoft and former Vice-C... \n", - "2 cyberneticist ; Emeritus Professor of Electrical Engineering at MIT \n", - "3 Antarctic explorer and author \n", - "4 scientist ; current CEO of the CSIRO \n", - "5 Emeritus Professor of Informatics and System Science at Luleå University of ... \n", - "6 aeronautical engineer ; subject of the 2004 documentary The White Diamond by... \n", - "7 mathematician \n", - "8 cybernetics theoretician \n", - "9 biochemist and glycoprotein researcher \n", - "10 former Director of the UN Climate Programme \n", - "11 astronomer and physicist \n", - "12 Materials scientist , electronic engineer and Australian Research Council ( ... \n", - "13 chemist and nanotechnologist ; recipient of the Tolman Award ( 2008 ) \n", - "14 chemist ; Adjunct Professor and Director of the IICT -RMIT Research Centre \n", - "15 Old Kernot Engineering School at RMIT named in his honour \n", - "16 geologist ; recipient of the Lyell Medal ( 1927 ) \n", - "17 astronomer \n", - "18 aircraft designer \n", - "19 head of the engine and electronics department for the Ferrari F1 team },\n", - " { 'answer': 'Christopher Wren',\n", - " 'context': Name Years \\\n", - "0 John Bainbridge 1620 or 1621 - 1643 \n", - "1 John Greaves 1643-48 \n", - "2 Seth Ward 1649-60 \n", - "3 Christopher Wren 1661-73 \n", - "4 Edward Bernard 1673-91 \n", - "5 David Gregory 1691-1708 \n", - "6 John Caswell 1709-12 \n", - "7 John Keill 1712-21 \n", - "8 James Bradley 1721-62 \n", - "9 Thomas Hornsby 1763-1810 \n", - "10 Abraham Robertson 1810-26 \n", - "11 Stephen Rigaud 1827-39 \n", - "12 George Johnson 1839-42 \n", - "13 William Donkin 1842-69 \n", - "14 Charles Pritchard 1870-93 \n", - "15 Herbert Turner 1893-1930 \n", - "16 Harry Plaskett 1932-60 \n", - "17 Donald Blackwell 1960-88 \n", - "18 George Efstathiou 1988-97 \n", - "19 Joseph Silk 1999-2012 \n", - "\n", - " Education \\\n", - "0 University of Cambridge ( Emmanuel College ) \n", - "1 Balliol College \n", - "2 University of Cambridge ( Sidney Sussex College ) \n", - "3 Wadham College \n", - "4 St John 's College \n", - "5 Marischal College and University of Aberdeen , and Leiden University \n", - "6 Wadham College \n", - "7 University of Edinburgh and Balliol College \n", - "8 Balliol College \n", - "9 Corpus Christi College \n", - "10 Christ Church \n", - "11 Exeter College \n", - "12 The Queen 's College \n", - "13 St Edmund Hall and University College \n", - "14 University of Cambridge ( St John 's College ) \n", - "15 University of Cambridge ( Trinity College ) \n", - "16 University of Toronto and Imperial College , London \n", - "17 University of Cambridge ( Sidney Sussex College ) \n", - "18 Keble College and the University of Durham \n", - "19 University of Cambridge ( Clare College ) and Harvard University \n", - "\n", - " College as professor \\\n", - "0 Merton College \n", - "1 Merton College \n", - "2 Wadham College and Trinity College \n", - "3 All Souls College \n", - "4 St John 's College \n", - "5 Balliol College \n", - "6 Hart Hall \n", - "7 Balliol College \n", - "8 - \n", - "9 Corpus Christi College \n", - "10 Christ Church \n", - "11 - \n", - "12 The Queen 's College \n", - "13 University College \n", - "14 New College \n", - "15 New College \n", - "16 New College \n", - "17 New College \n", - "18 New College \n", - "19 New College \n", - "\n", - " Notes \n", - "0 Bainbridge practised as a physician in Leicestershire and London after leavi... \n", - "1 Greaves began studying astronomical texts in Greek , Arabic and Persian at a... \n", - "2 When still an undergraduate , Ward impressed John Bainbridge ( the first ast... \n", - "3 As an undergraduate , Wren joined the circle of mathematicians and natural s... \n", - "4 Bernard studied Hebrew , Arabic , Syriac and Coptic with Edward Pococke ( La... \n", - "5 Gregory studied in his native Scotland and befriended the Edinburgh physicia... \n", - "6 Carswell matriculated at Wadham College , Oxford , when he was 16 years old ... \n", - "7 Keill studied in Edinburgh with David Gregory and moved to Balliol with him ... \n", - "8 Bradley was the nephew of James Pound , a leading astronomer who was a colle... \n", - "9 Hornsby , who had an observatory at Corpus Christi , gained a high reputatio... \n", - "10 Robertson started studying at Oxford aged 24 , having previously run ( unsuc... \n", - "11 Rigaud , whose father was the observer at Kew Observatory , made his first r... \n", - "12 Johnson was a mathematician and priest with little practical knowledge of as... \n", - "13 Donkin , a talented linguist , mathematician and musician , published papers... \n", - "14 After leaving Cambridge , Pritchard was headmaster of a grammar school in St... \n", - "15 Turner was second wrangler ( achieved the second-highest marks in the Cambri... \n", - "16 Plaskett , a solar physicist , was the son of the Canadian astronomer John S... \n", - "17 Blackwell was assistant director of the Solar Physics Observatory at Cambrid... \n", - "18 After completing his studies at Oxford and Durham , Efstathiou worked as an ... \n", - "19 After obtaining his doctorate from Harvard , Silk returned to England to car... },\n", - " { 'answer': 'Christopher Wren',\n", - " 'context': Name Years \\\n", - "0 John Bainbridge 1620 or 1621 - 1643 \n", - "1 John Greaves 1643-48 \n", - "2 Seth Ward 1649-60 \n", - "3 Christopher Wren 1661-73 \n", - "4 Edward Bernard 1673-91 \n", - "5 David Gregory 1691-1708 \n", - "6 John Caswell 1709-12 \n", - "7 John Keill 1712-21 \n", - "8 James Bradley 1721-62 \n", - "9 Thomas Hornsby 1763-1810 \n", - "10 Abraham Robertson 1810-26 \n", - "11 Stephen Rigaud 1827-39 \n", - "12 George Johnson 1839-42 \n", - "13 William Donkin 1842-69 \n", - "14 Charles Pritchard 1870-93 \n", - "15 Herbert Turner 1893-1930 \n", - "16 Harry Plaskett 1932-60 \n", - "17 Donald Blackwell 1960-88 \n", - "18 George Efstathiou 1988-97 \n", - "19 Joseph Silk 1999-2012 \n", - "\n", - " Education \\\n", - "0 University of Cambridge ( Emmanuel College ) \n", - "1 Balliol College \n", - "2 University of Cambridge ( Sidney Sussex College ) \n", - "3 Wadham College \n", - "4 St John 's College \n", - "5 Marischal College and University of Aberdeen , and Leiden University \n", - "6 Wadham College \n", - "7 University of Edinburgh and Balliol College \n", - "8 Balliol College \n", - "9 Corpus Christi College \n", - "10 Christ Church \n", - "11 Exeter College \n", - "12 The Queen 's College \n", - "13 St Edmund Hall and University College \n", - "14 University of Cambridge ( St John 's College ) \n", - "15 University of Cambridge ( Trinity College ) \n", - "16 University of Toronto and Imperial College , London \n", - "17 University of Cambridge ( Sidney Sussex College ) \n", - "18 Keble College and the University of Durham \n", - "19 University of Cambridge ( Clare College ) and Harvard University \n", - "\n", - " College as professor \\\n", - "0 Merton College \n", - "1 Merton College \n", - "2 Wadham College and Trinity College \n", - "3 All Souls College \n", - "4 St John 's College \n", - "5 Balliol College \n", - "6 Hart Hall \n", - "7 Balliol College \n", - "8 - \n", - "9 Corpus Christi College \n", - "10 Christ Church \n", - "11 - \n", - "12 The Queen 's College \n", - "13 University College \n", - "14 New College \n", - "15 New College \n", - "16 New College \n", - "17 New College \n", - "18 New College \n", - "19 New College \n", - "\n", - " Notes \n", - "0 Bainbridge practised as a physician in Leicestershire and London after leavi... \n", - "1 Greaves began studying astronomical texts in Greek , Arabic and Persian at a... \n", - "2 When still an undergraduate , Ward impressed John Bainbridge ( the first ast... \n", - "3 As an undergraduate , Wren joined the circle of mathematicians and natural s... \n", - "4 Bernard studied Hebrew , Arabic , Syriac and Coptic with Edward Pococke ( La... \n", - "5 Gregory studied in his native Scotland and befriended the Edinburgh physicia... \n", - "6 Carswell matriculated at Wadham College , Oxford , when he was 16 years old ... \n", - "7 Keill studied in Edinburgh with David Gregory and moved to Balliol with him ... \n", - "8 Bradley was the nephew of James Pound , a leading astronomer who was a colle... \n", - "9 Hornsby , who had an observatory at Corpus Christi , gained a high reputatio... \n", - "10 Robertson started studying at Oxford aged 24 , having previously run ( unsuc... \n", - "11 Rigaud , whose father was the observer at Kew Observatory , made his first r... \n", - "12 Johnson was a mathematician and priest with little practical knowledge of as... \n", - "13 Donkin , a talented linguist , mathematician and musician , published papers... \n", - "14 After leaving Cambridge , Pritchard was headmaster of a grammar school in St... \n", - "15 Turner was second wrangler ( achieved the second-highest marks in the Cambri... \n", - "16 Plaskett , a solar physicist , was the son of the Canadian astronomer John S... \n", - "17 Blackwell was assistant director of the Solar Physics Observatory at Cambrid... \n", - "18 After completing his studies at Oxford and Durham , Efstathiou worked as an ... \n", - "19 After obtaining his doctorate from Harvard , Silk returned to England to car... },\n", - " { 'answer': 'John Caswell',\n", - " 'context': Name Years \\\n", - "0 John Bainbridge 1620 or 1621 - 1643 \n", - "1 John Greaves 1643-48 \n", - "2 Seth Ward 1649-60 \n", - "3 Christopher Wren 1661-73 \n", - "4 Edward Bernard 1673-91 \n", - "5 David Gregory 1691-1708 \n", - "6 John Caswell 1709-12 \n", - "7 John Keill 1712-21 \n", - "8 James Bradley 1721-62 \n", - "9 Thomas Hornsby 1763-1810 \n", - "10 Abraham Robertson 1810-26 \n", - "11 Stephen Rigaud 1827-39 \n", - "12 George Johnson 1839-42 \n", - "13 William Donkin 1842-69 \n", - "14 Charles Pritchard 1870-93 \n", - "15 Herbert Turner 1893-1930 \n", - "16 Harry Plaskett 1932-60 \n", - "17 Donald Blackwell 1960-88 \n", - "18 George Efstathiou 1988-97 \n", - "19 Joseph Silk 1999-2012 \n", - "\n", - " Education \\\n", - "0 University of Cambridge ( Emmanuel College ) \n", - "1 Balliol College \n", - "2 University of Cambridge ( Sidney Sussex College ) \n", - "3 Wadham College \n", - "4 St John 's College \n", - "5 Marischal College and University of Aberdeen , and Leiden University \n", - "6 Wadham College \n", - "7 University of Edinburgh and Balliol College \n", - "8 Balliol College \n", - "9 Corpus Christi College \n", - "10 Christ Church \n", - "11 Exeter College \n", - "12 The Queen 's College \n", - "13 St Edmund Hall and University College \n", - "14 University of Cambridge ( St John 's College ) \n", - "15 University of Cambridge ( Trinity College ) \n", - "16 University of Toronto and Imperial College , London \n", - "17 University of Cambridge ( Sidney Sussex College ) \n", - "18 Keble College and the University of Durham \n", - "19 University of Cambridge ( Clare College ) and Harvard University \n", - "\n", - " College as professor \\\n", - "0 Merton College \n", - "1 Merton College \n", - "2 Wadham College and Trinity College \n", - "3 All Souls College \n", - "4 St John 's College \n", - "5 Balliol College \n", - "6 Hart Hall \n", - "7 Balliol College \n", - "8 - \n", - "9 Corpus Christi College \n", - "10 Christ Church \n", - "11 - \n", - "12 The Queen 's College \n", - "13 University College \n", - "14 New College \n", - "15 New College \n", - "16 New College \n", - "17 New College \n", - "18 New College \n", - "19 New College \n", - "\n", - " Notes \n", - "0 Bainbridge practised as a physician in Leicestershire and London after leavi... \n", - "1 Greaves began studying astronomical texts in Greek , Arabic and Persian at a... \n", - "2 When still an undergraduate , Ward impressed John Bainbridge ( the first ast... \n", - "3 As an undergraduate , Wren joined the circle of mathematicians and natural s... \n", - "4 Bernard studied Hebrew , Arabic , Syriac and Coptic with Edward Pococke ( La... \n", - "5 Gregory studied in his native Scotland and befriended the Edinburgh physicia... \n", - "6 Carswell matriculated at Wadham College , Oxford , when he was 16 years old ... \n", - "7 Keill studied in Edinburgh with David Gregory and moved to Balliol with him ... \n", - "8 Bradley was the nephew of James Pound , a leading astronomer who was a colle... \n", - "9 Hornsby , who had an observatory at Corpus Christi , gained a high reputatio... \n", - "10 Robertson started studying at Oxford aged 24 , having previously run ( unsuc... \n", - "11 Rigaud , whose father was the observer at Kew Observatory , made his first r... \n", - "12 Johnson was a mathematician and priest with little practical knowledge of as... \n", - "13 Donkin , a talented linguist , mathematician and musician , published papers... \n", - "14 After leaving Cambridge , Pritchard was headmaster of a grammar school in St... \n", - "15 Turner was second wrangler ( achieved the second-highest marks in the Cambri... \n", - "16 Plaskett , a solar physicist , was the son of the Canadian astronomer John S... \n", - "17 Blackwell was assistant director of the Solar Physics Observatory at Cambrid... \n", - "18 After completing his studies at Oxford and Durham , Efstathiou worked as an ... \n", - "19 After obtaining his doctorate from Harvard , Silk returned to England to car... },\n", - " { 'answer': 'John Caswell',\n", - " 'context': Name Years \\\n", - "0 John Bainbridge 1620 or 1621 - 1643 \n", - "1 John Greaves 1643-48 \n", - "2 Seth Ward 1649-60 \n", - "3 Christopher Wren 1661-73 \n", - "4 Edward Bernard 1673-91 \n", - "5 David Gregory 1691-1708 \n", - "6 John Caswell 1709-12 \n", - "7 John Keill 1712-21 \n", - "8 James Bradley 1721-62 \n", - "9 Thomas Hornsby 1763-1810 \n", - "10 Abraham Robertson 1810-26 \n", - "11 Stephen Rigaud 1827-39 \n", - "12 George Johnson 1839-42 \n", - "13 William Donkin 1842-69 \n", - "14 Charles Pritchard 1870-93 \n", - "15 Herbert Turner 1893-1930 \n", - "16 Harry Plaskett 1932-60 \n", - "17 Donald Blackwell 1960-88 \n", - "18 George Efstathiou 1988-97 \n", - "19 Joseph Silk 1999-2012 \n", - "\n", - " Education \\\n", - "0 University of Cambridge ( Emmanuel College ) \n", - "1 Balliol College \n", - "2 University of Cambridge ( Sidney Sussex College ) \n", - "3 Wadham College \n", - "4 St John 's College \n", - "5 Marischal College and University of Aberdeen , and Leiden University \n", - "6 Wadham College \n", - "7 University of Edinburgh and Balliol College \n", - "8 Balliol College \n", - "9 Corpus Christi College \n", - "10 Christ Church \n", - "11 Exeter College \n", - "12 The Queen 's College \n", - "13 St Edmund Hall and University College \n", - "14 University of Cambridge ( St John 's College ) \n", - "15 University of Cambridge ( Trinity College ) \n", - "16 University of Toronto and Imperial College , London \n", - "17 University of Cambridge ( Sidney Sussex College ) \n", - "18 Keble College and the University of Durham \n", - "19 University of Cambridge ( Clare College ) and Harvard University \n", - "\n", - " College as professor \\\n", - "0 Merton College \n", - "1 Merton College \n", - "2 Wadham College and Trinity College \n", - "3 All Souls College \n", - "4 St John 's College \n", - "5 Balliol College \n", - "6 Hart Hall \n", - "7 Balliol College \n", - "8 - \n", - "9 Corpus Christi College \n", - "10 Christ Church \n", - "11 - \n", - "12 The Queen 's College \n", - "13 University College \n", - "14 New College \n", - "15 New College \n", - "16 New College \n", - "17 New College \n", - "18 New College \n", - "19 New College \n", - "\n", - " Notes \n", - "0 Bainbridge practised as a physician in Leicestershire and London after leavi... \n", - "1 Greaves began studying astronomical texts in Greek , Arabic and Persian at a... \n", - "2 When still an undergraduate , Ward impressed John Bainbridge ( the first ast... \n", - "3 As an undergraduate , Wren joined the circle of mathematicians and natural s... \n", - "4 Bernard studied Hebrew , Arabic , Syriac and Coptic with Edward Pococke ( La... \n", - "5 Gregory studied in his native Scotland and befriended the Edinburgh physicia... \n", - "6 Carswell matriculated at Wadham College , Oxford , when he was 16 years old ... \n", - "7 Keill studied in Edinburgh with David Gregory and moved to Balliol with him ... \n", - "8 Bradley was the nephew of James Pound , a leading astronomer who was a colle... \n", - "9 Hornsby , who had an observatory at Corpus Christi , gained a high reputatio... \n", - "10 Robertson started studying at Oxford aged 24 , having previously run ( unsuc... \n", - "11 Rigaud , whose father was the observer at Kew Observatory , made his first r... \n", - "12 Johnson was a mathematician and priest with little practical knowledge of as... \n", - "13 Donkin , a talented linguist , mathematician and musician , published papers... \n", - "14 After leaving Cambridge , Pritchard was headmaster of a grammar school in St... \n", - "15 Turner was second wrangler ( achieved the second-highest marks in the Cambri... \n", - "16 Plaskett , a solar physicist , was the son of the Canadian astronomer John S... \n", - "17 Blackwell was assistant director of the Solar Physics Observatory at Cambrid... \n", - "18 After completing his studies at Oxford and Durham , Efstathiou worked as an ... \n", - "19 After obtaining his doctorate from Harvard , Silk returned to England to car... },\n", - " { 'answer': 'Thomas Hornsby',\n", - " 'context': Name Years \\\n", - "0 John Bainbridge 1620 or 1621 - 1643 \n", - "1 John Greaves 1643-48 \n", - "2 Seth Ward 1649-60 \n", - "3 Christopher Wren 1661-73 \n", - "4 Edward Bernard 1673-91 \n", - "5 David Gregory 1691-1708 \n", - "6 John Caswell 1709-12 \n", - "7 John Keill 1712-21 \n", - "8 James Bradley 1721-62 \n", - "9 Thomas Hornsby 1763-1810 \n", - "10 Abraham Robertson 1810-26 \n", - "11 Stephen Rigaud 1827-39 \n", - "12 George Johnson 1839-42 \n", - "13 William Donkin 1842-69 \n", - "14 Charles Pritchard 1870-93 \n", - "15 Herbert Turner 1893-1930 \n", - "16 Harry Plaskett 1932-60 \n", - "17 Donald Blackwell 1960-88 \n", - "18 George Efstathiou 1988-97 \n", - "19 Joseph Silk 1999-2012 \n", - "\n", - " Education \\\n", - "0 University of Cambridge ( Emmanuel College ) \n", - "1 Balliol College \n", - "2 University of Cambridge ( Sidney Sussex College ) \n", - "3 Wadham College \n", - "4 St John 's College \n", - "5 Marischal College and University of Aberdeen , and Leiden University \n", - "6 Wadham College \n", - "7 University of Edinburgh and Balliol College \n", - "8 Balliol College \n", - "9 Corpus Christi College \n", - "10 Christ Church \n", - "11 Exeter College \n", - "12 The Queen 's College \n", - "13 St Edmund Hall and University College \n", - "14 University of Cambridge ( St John 's College ) \n", - "15 University of Cambridge ( Trinity College ) \n", - "16 University of Toronto and Imperial College , London \n", - "17 University of Cambridge ( Sidney Sussex College ) \n", - "18 Keble College and the University of Durham \n", - "19 University of Cambridge ( Clare College ) and Harvard University \n", - "\n", - " College as professor \\\n", - "0 Merton College \n", - "1 Merton College \n", - "2 Wadham College and Trinity College \n", - "3 All Souls College \n", - "4 St John 's College \n", - "5 Balliol College \n", - "6 Hart Hall \n", - "7 Balliol College \n", - "8 - \n", - "9 Corpus Christi College \n", - "10 Christ Church \n", - "11 - \n", - "12 The Queen 's College \n", - "13 University College \n", - "14 New College \n", - "15 New College \n", - "16 New College \n", - "17 New College \n", - "18 New College \n", - "19 New College \n", - "\n", - " Notes \n", - "0 Bainbridge practised as a physician in Leicestershire and London after leavi... \n", - "1 Greaves began studying astronomical texts in Greek , Arabic and Persian at a... \n", - "2 When still an undergraduate , Ward impressed John Bainbridge ( the first ast... \n", - "3 As an undergraduate , Wren joined the circle of mathematicians and natural s... \n", - "4 Bernard studied Hebrew , Arabic , Syriac and Coptic with Edward Pococke ( La... \n", - "5 Gregory studied in his native Scotland and befriended the Edinburgh physicia... \n", - "6 Carswell matriculated at Wadham College , Oxford , when he was 16 years old ... \n", - "7 Keill studied in Edinburgh with David Gregory and moved to Balliol with him ... \n", - "8 Bradley was the nephew of James Pound , a leading astronomer who was a colle... \n", - "9 Hornsby , who had an observatory at Corpus Christi , gained a high reputatio... \n", - "10 Robertson started studying at Oxford aged 24 , having previously run ( unsuc... \n", - "11 Rigaud , whose father was the observer at Kew Observatory , made his first r... \n", - "12 Johnson was a mathematician and priest with little practical knowledge of as... \n", - "13 Donkin , a talented linguist , mathematician and musician , published papers... \n", - "14 After leaving Cambridge , Pritchard was headmaster of a grammar school in St... \n", - "15 Turner was second wrangler ( achieved the second-highest marks in the Cambri... \n", - "16 Plaskett , a solar physicist , was the son of the Canadian astronomer John S... \n", - "17 Blackwell was assistant director of the Solar Physics Observatory at Cambrid... \n", - "18 After completing his studies at Oxford and Durham , Efstathiou worked as an ... \n", - "19 After obtaining his doctorate from Harvard , Silk returned to England to car... },\n", - " { 'answer': 'Thomas Hornsby',\n", - " 'context': Name Years \\\n", - "0 John Bainbridge 1620 or 1621 - 1643 \n", - "1 John Greaves 1643-48 \n", - "2 Seth Ward 1649-60 \n", - "3 Christopher Wren 1661-73 \n", - "4 Edward Bernard 1673-91 \n", - "5 David Gregory 1691-1708 \n", - "6 John Caswell 1709-12 \n", - "7 John Keill 1712-21 \n", - "8 James Bradley 1721-62 \n", - "9 Thomas Hornsby 1763-1810 \n", - "10 Abraham Robertson 1810-26 \n", - "11 Stephen Rigaud 1827-39 \n", - "12 George Johnson 1839-42 \n", - "13 William Donkin 1842-69 \n", - "14 Charles Pritchard 1870-93 \n", - "15 Herbert Turner 1893-1930 \n", - "16 Harry Plaskett 1932-60 \n", - "17 Donald Blackwell 1960-88 \n", - "18 George Efstathiou 1988-97 \n", - "19 Joseph Silk 1999-2012 \n", - "\n", - " Education \\\n", - "0 University of Cambridge ( Emmanuel College ) \n", - "1 Balliol College \n", - "2 University of Cambridge ( Sidney Sussex College ) \n", - "3 Wadham College \n", - "4 St John 's College \n", - "5 Marischal College and University of Aberdeen , and Leiden University \n", - "6 Wadham College \n", - "7 University of Edinburgh and Balliol College \n", - "8 Balliol College \n", - "9 Corpus Christi College \n", - "10 Christ Church \n", - "11 Exeter College \n", - "12 The Queen 's College \n", - "13 St Edmund Hall and University College \n", - "14 University of Cambridge ( St John 's College ) \n", - "15 University of Cambridge ( Trinity College ) \n", - "16 University of Toronto and Imperial College , London \n", - "17 University of Cambridge ( Sidney Sussex College ) \n", - "18 Keble College and the University of Durham \n", - "19 University of Cambridge ( Clare College ) and Harvard University \n", - "\n", - " College as professor \\\n", - "0 Merton College \n", - "1 Merton College \n", - "2 Wadham College and Trinity College \n", - "3 All Souls College \n", - "4 St John 's College \n", - "5 Balliol College \n", - "6 Hart Hall \n", - "7 Balliol College \n", - "8 - \n", - "9 Corpus Christi College \n", - "10 Christ Church \n", - "11 - \n", - "12 The Queen 's College \n", - "13 University College \n", - "14 New College \n", - "15 New College \n", - "16 New College \n", - "17 New College \n", - "18 New College \n", - "19 New College \n", - "\n", - " Notes \n", - "0 Bainbridge practised as a physician in Leicestershire and London after leavi... \n", - "1 Greaves began studying astronomical texts in Greek , Arabic and Persian at a... \n", - "2 When still an undergraduate , Ward impressed John Bainbridge ( the first ast... \n", - "3 As an undergraduate , Wren joined the circle of mathematicians and natural s... \n", - "4 Bernard studied Hebrew , Arabic , Syriac and Coptic with Edward Pococke ( La... \n", - "5 Gregory studied in his native Scotland and befriended the Edinburgh physicia... \n", - "6 Carswell matriculated at Wadham College , Oxford , when he was 16 years old ... \n", - "7 Keill studied in Edinburgh with David Gregory and moved to Balliol with him ... \n", - "8 Bradley was the nephew of James Pound , a leading astronomer who was a colle... \n", - "9 Hornsby , who had an observatory at Corpus Christi , gained a high reputatio... \n", - "10 Robertson started studying at Oxford aged 24 , having previously run ( unsuc... \n", - "11 Rigaud , whose father was the observer at Kew Observatory , made his first r... \n", - "12 Johnson was a mathematician and priest with little practical knowledge of as... \n", - "13 Donkin , a talented linguist , mathematician and musician , published papers... \n", - "14 After leaving Cambridge , Pritchard was headmaster of a grammar school in St... \n", - "15 Turner was second wrangler ( achieved the second-highest marks in the Cambri... \n", - "16 Plaskett , a solar physicist , was the son of the Canadian astronomer John S... \n", - "17 Blackwell was assistant director of the Solar Physics Observatory at Cambrid... \n", - "18 After completing his studies at Oxford and Durham , Efstathiou worked as an ... \n", - "19 After obtaining his doctorate from Harvard , Silk returned to England to car... },\n", - " { 'answer': 'John Jordan',\n", - " 'context': Entrant Constructor Chassis Engine Driver\n", - "0 Team Ensign Ensign N180B Cosworth DFV V8 Jim Crawford\n", - "1 Team Ensign Ensign N180B Cosworth DFV V8 Joe Castellano\n", - "2 Colin Bennett Racing McLaren M29 Cosworth DFV V8 Arnold Glass\n", - "3 Colin Bennett Racing March 811 Cosworth DFV V8 Val Musetti\n", - "4 Team Sanada Fittipaldi F8 Cosworth DFV V8 Tony Trimmer\n", - "5 Warren Booth Shadow DN9 Cosworth DFV V8 Warren Booth\n", - "6 John Jordan BRM P207 BRM 202 V12 David Williams\n", - "7 Nick Mason Tyrrell 008 Cosworth DFV V8 John Brindley\n", - "8 EMKA Productions Williams FW07 Cosworth DFV V8 Steve O'Rourke\n", - "9 Team Peru Williams FW07 Cosworth DFV V8 Jorge Koechlin},\n", - " { 'answer': 'Alexander Graham Bell Alexander Graham Bell',\n", - " 'context': 'is grandchildren. \"U.S. patent images in TIFF format\" '\n", - " 'Alexander Graham Bell Alexander Graham Bell (March 3, 1847 '\n", - " '– August 2, 1922) was a Scottish-born'},\n", - " { 'answer': 'Ernst Heinrich Weber was clear from his memoirs where he '\n", - " 'proclaimed that Weber should be regarded as the father of '\n", - " 'experimental psychology. . “I would rather call Weber the '\n", - " 'father of experimental psychology…It was Weber’s great '\n", - " 'contribution to think of measuring psychic quantities and '\n", - " 'of showing the exact relationships between them, to be the '\n", - " 'first to understand this and carry it out.',\n", - " 'context': ' Ernst Heinrich Weber was clear from his memoirs where he '\n", - " 'proclaimed that Weber should be regarded as the father of '\n", - " 'experimental psychology. . “I would rather call Weber the '\n", - " 'father of experimental psychology…It was Weber’s great '\n", - " 'contribution to think of measuring psychic quantities and '\n", - " 'of showing the exact relationships between them, to be the '\n", - " 'first to understand this and carry it out.'}]\n" - ] - } - ], - "source": [ - "# We can see both text passages and tables as contexts of the predicted answers.\n", - "print_answers(predictions, details=\"minimum\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "QYOHDSmLpzEg" - }, - "outputs": [], - "source": [ - "# Example query whose answer resides in a table\n", - "predictions = text_table_qa_pipeline.run(query=\"Which country does the film Macaroni come from?\")" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "4kw53uWep3zj", - "outputId": "b332cc17-3cb8-4e20-d79d-bb4cf656f277" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "Query: Which country does the film Macaroni come from?\n", - "Answers:\n", - "[ { 'answer': 'Italian',\n", - " 'context': Submitting country Film title used in nomination Language ( s ) \\\n", - "0 Argentina The Official Story Spanish \n", - "1 Austria Malambo German \n", - "2 Belgium Dust French \n", - "3 Canada Jacques and November French \n", - "4 Czechoslovakia Scalpel , Please Czech \n", - "5 Denmark Twist and Shout Danish \n", - "6 France Three Men and a Cradle French \n", - "7 West Germany Angry Harvest German \n", - "8 Hungary Colonel Redl German \n", - "9 Iceland Deep Winter Icelandic \n", - "10 India Saagar Hindi \n", - "11 Israel When Night Falls Hebrew \n", - "12 Italy Macaroni Italian \n", - "13 Japan Gray Sunset Japanese \n", - "14 South Korea Eoudong Korean \n", - "15 Mexico Frida Still Life Spanish \n", - "16 Netherlands The Dream Dutch , West Frisian \n", - "17 Norway Wives - Ten Years After Norwegian \n", - "18 Peru The City and the Dogs Spanish \n", - "19 Philippines This Is My Country Tagalog \n", - "\n", - " Original title Director ( s ) \\\n", - "0 La Historia oficial Luis Puenzo \n", - "1 Malambo Milan Dor \n", - "2 Dust Marion Hänsel \n", - "3 Jacques et novembre Jean Beaudry and François Bouvier \n", - "4 Skalpel , prosím Jirí Svoboda \n", - "5 Tro , håb og kærlighed Bille August \n", - "6 Trois hommes et un couffin Coline Serreau \n", - "7 Bittere Ernte Agnieszka Holland \n", - "8 Oberst Redl István Szabó \n", - "9 Skammdegi Þráinn Bertelsson \n", - "10 सागर Ramesh Sippy \n", - "11 עד סוף הלילה Eitan Green \n", - "12 Maccheroni Ettore Scola \n", - "13 花いちもんめ Shunya Ito \n", - "14 어우동 Lee Jang-ho \n", - "15 Frida , naturaleza viva Paul Leduc \n", - "16 De Dream Pieter Verhoeff \n", - "17 Hustruer - ti år etter Anja Breien \n", - "18 La ciudad y los perros Francisco José Lombardi \n", - "19 Bayan ko : Kapit sa patalim Lino Brocka \n", - "\n", - " Result \n", - "0 Won Academy Award \n", - "1 Not Nominated \n", - "2 Not Nominated \n", - "3 Not Nominated \n", - "4 Not Nominated \n", - "5 Not Nominated \n", - "6 Nominated \n", - "7 Nominated \n", - "8 Nominated \n", - "9 Not Nominated \n", - "10 Not Nominated \n", - "11 Not Nominated \n", - "12 Not Nominated \n", - "13 Not Nominated \n", - "14 Not Nominated \n", - "15 Not Nominated \n", - "16 Not Nominated \n", - "17 Not Nominated \n", - "18 Not Nominated \n", - "19 Not Nominated },\n", - " { 'answer': 'Italian',\n", - " 'context': Submitting country Film title used in nomination Language ( s ) \\\n", - "0 Argentina The Official Story Spanish \n", - "1 Austria Malambo German \n", - "2 Belgium Dust French \n", - "3 Canada Jacques and November French \n", - "4 Czechoslovakia Scalpel , Please Czech \n", - "5 Denmark Twist and Shout Danish \n", - "6 France Three Men and a Cradle French \n", - "7 West Germany Angry Harvest German \n", - "8 Hungary Colonel Redl German \n", - "9 Iceland Deep Winter Icelandic \n", - "10 India Saagar Hindi \n", - "11 Israel When Night Falls Hebrew \n", - "12 Italy Macaroni Italian \n", - "13 Japan Gray Sunset Japanese \n", - "14 South Korea Eoudong Korean \n", - "15 Mexico Frida Still Life Spanish \n", - "16 Netherlands The Dream Dutch , West Frisian \n", - "17 Norway Wives - Ten Years After Norwegian \n", - "18 Peru The City and the Dogs Spanish \n", - "19 Philippines This Is My Country Tagalog \n", - "\n", - " Original title Director ( s ) \\\n", - "0 La Historia oficial Luis Puenzo \n", - "1 Malambo Milan Dor \n", - "2 Dust Marion Hänsel \n", - "3 Jacques et novembre Jean Beaudry and François Bouvier \n", - "4 Skalpel , prosím Jirí Svoboda \n", - "5 Tro , håb og kærlighed Bille August \n", - "6 Trois hommes et un couffin Coline Serreau \n", - "7 Bittere Ernte Agnieszka Holland \n", - "8 Oberst Redl István Szabó \n", - "9 Skammdegi Þráinn Bertelsson \n", - "10 सागर Ramesh Sippy \n", - "11 עד סוף הלילה Eitan Green \n", - "12 Maccheroni Ettore Scola \n", - "13 花いちもんめ Shunya Ito \n", - "14 어우동 Lee Jang-ho \n", - "15 Frida , naturaleza viva Paul Leduc \n", - "16 De Dream Pieter Verhoeff \n", - "17 Hustruer - ti år etter Anja Breien \n", - "18 La ciudad y los perros Francisco José Lombardi \n", - "19 Bayan ko : Kapit sa patalim Lino Brocka \n", - "\n", - " Result \n", - "0 Won Academy Award \n", - "1 Not Nominated \n", - "2 Not Nominated \n", - "3 Not Nominated \n", - "4 Not Nominated \n", - "5 Not Nominated \n", - "6 Nominated \n", - "7 Nominated \n", - "8 Nominated \n", - "9 Not Nominated \n", - "10 Not Nominated \n", - "11 Not Nominated \n", - "12 Not Nominated \n", - "13 Not Nominated \n", - "14 Not Nominated \n", - "15 Not Nominated \n", - "16 Not Nominated \n", - "17 Not Nominated \n", - "18 Not Nominated \n", - "19 Not Nominated },\n", - " { 'answer': '2014',\n", - " 'context': Year Name Transliteration \\\n", - "0 2000 The Child And The Soldier Koodak va Sarbaz \n", - "1 2001 Under The Moonlight Zir-e Noor-e Maah \n", - "2 2002 Here Is A Shining Light Inja Cheraghi Roshan Ast \n", - "3 2005 So Close , So Far Kheili Dour , Kheili Nazdik \n", - "4 2008 As Simple as That Be Hamin Sadegi \n", - "5 2011 A Cube of Sugar Yek Habe Ghand \n", - "6 2014 Today Emrooz \n", - "7 2016 Daughter Dokhtar \n", - "8 2019 Castle of Dreams Ghasr-e Shirin \n", - "\n", - " Award \n", - "0 Nominated Grand Prix des Amériques Montréal World Film Festival 2000 Silver ... \n", - "1 International Jury Award São Paulo International Film Festival 2001 Best Dir... \n", - "2 Best Screenplay Asia-Pacific Film Festival 2002 Crystal Simorgh Best Directo... \n", - "3 Crystal Simorgh National Competition - Best Film Fajr International Film Fes... \n", - "4 Golden St. George 30th Moscow International Film Festival 2008 Russian Guild... \n", - "5 Special Jury Prize Kazan International Festival of Muslim Cinema 2012 Best F... \n", - "6 Best Film Award Rabat International Film Festival 2014 Ecumenical Jury Prize... \n", - "7 Crystal Simorgh National Competition - Best Original Score Fajr Internationa... \n", - "8 Golden Goblet Award for Best Feature Film Shanghai International Film Festiv... },\n", - " { 'answer': '2008',\n", - " 'context': Year Name Transliteration \\\n", - "0 2000 The Child And The Soldier Koodak va Sarbaz \n", - "1 2001 Under The Moonlight Zir-e Noor-e Maah \n", - "2 2002 Here Is A Shining Light Inja Cheraghi Roshan Ast \n", - "3 2005 So Close , So Far Kheili Dour , Kheili Nazdik \n", - "4 2008 As Simple as That Be Hamin Sadegi \n", - "5 2011 A Cube of Sugar Yek Habe Ghand \n", - "6 2014 Today Emrooz \n", - "7 2016 Daughter Dokhtar \n", - "8 2019 Castle of Dreams Ghasr-e Shirin \n", - "\n", - " Award \n", - "0 Nominated Grand Prix des Amériques Montréal World Film Festival 2000 Silver ... \n", - "1 International Jury Award São Paulo International Film Festival 2001 Best Dir... \n", - "2 Best Screenplay Asia-Pacific Film Festival 2002 Crystal Simorgh Best Directo... \n", - "3 Crystal Simorgh National Competition - Best Film Fajr International Film Fes... \n", - "4 Golden St. George 30th Moscow International Film Festival 2008 Russian Guild... \n", - "5 Special Jury Prize Kazan International Festival of Muslim Cinema 2012 Best F... \n", - "6 Best Film Award Rabat International Film Festival 2014 Ecumenical Jury Prize... \n", - "7 Crystal Simorgh National Competition - Best Original Score Fajr Internationa... \n", - "8 Golden Goblet Award for Best Feature Film Shanghai International Film Festiv... },\n", - " { 'answer': 'Daughter',\n", - " 'context': Year Name Transliteration \\\n", - "0 2000 The Child And The Soldier Koodak va Sarbaz \n", - "1 2001 Under The Moonlight Zir-e Noor-e Maah \n", - "2 2002 Here Is A Shining Light Inja Cheraghi Roshan Ast \n", - "3 2005 So Close , So Far Kheili Dour , Kheili Nazdik \n", - "4 2008 As Simple as That Be Hamin Sadegi \n", - "5 2011 A Cube of Sugar Yek Habe Ghand \n", - "6 2014 Today Emrooz \n", - "7 2016 Daughter Dokhtar \n", - "8 2019 Castle of Dreams Ghasr-e Shirin \n", - "\n", - " Award \n", - "0 Nominated Grand Prix des Amériques Montréal World Film Festival 2000 Silver ... \n", - "1 International Jury Award São Paulo International Film Festival 2001 Best Dir... \n", - "2 Best Screenplay Asia-Pacific Film Festival 2002 Crystal Simorgh Best Directo... \n", - "3 Crystal Simorgh National Competition - Best Film Fajr International Film Fes... \n", - "4 Golden St. George 30th Moscow International Film Festival 2008 Russian Guild... \n", - "5 Special Jury Prize Kazan International Festival of Muslim Cinema 2012 Best F... \n", - "6 Best Film Award Rabat International Film Festival 2014 Ecumenical Jury Prize... \n", - "7 Crystal Simorgh National Competition - Best Original Score Fajr Internationa... \n", - "8 Golden Goblet Award for Best Feature Film Shanghai International Film Festiv... },\n", - " { 'answer': 'Icelandic',\n", - " 'context': Submitting country Film title used in nomination Language ( s ) \\\n", - "0 Argentina The Official Story Spanish \n", - "1 Austria Malambo German \n", - "2 Belgium Dust French \n", - "3 Canada Jacques and November French \n", - "4 Czechoslovakia Scalpel , Please Czech \n", - "5 Denmark Twist and Shout Danish \n", - "6 France Three Men and a Cradle French \n", - "7 West Germany Angry Harvest German \n", - "8 Hungary Colonel Redl German \n", - "9 Iceland Deep Winter Icelandic \n", - "10 India Saagar Hindi \n", - "11 Israel When Night Falls Hebrew \n", - "12 Italy Macaroni Italian \n", - "13 Japan Gray Sunset Japanese \n", - "14 South Korea Eoudong Korean \n", - "15 Mexico Frida Still Life Spanish \n", - "16 Netherlands The Dream Dutch , West Frisian \n", - "17 Norway Wives - Ten Years After Norwegian \n", - "18 Peru The City and the Dogs Spanish \n", - "19 Philippines This Is My Country Tagalog \n", - "\n", - " Original title Director ( s ) \\\n", - "0 La Historia oficial Luis Puenzo \n", - "1 Malambo Milan Dor \n", - "2 Dust Marion Hänsel \n", - "3 Jacques et novembre Jean Beaudry and François Bouvier \n", - "4 Skalpel , prosím Jirí Svoboda \n", - "5 Tro , håb og kærlighed Bille August \n", - "6 Trois hommes et un couffin Coline Serreau \n", - "7 Bittere Ernte Agnieszka Holland \n", - "8 Oberst Redl István Szabó \n", - "9 Skammdegi Þráinn Bertelsson \n", - "10 सागर Ramesh Sippy \n", - "11 עד סוף הלילה Eitan Green \n", - "12 Maccheroni Ettore Scola \n", - "13 花いちもんめ Shunya Ito \n", - "14 어우동 Lee Jang-ho \n", - "15 Frida , naturaleza viva Paul Leduc \n", - "16 De Dream Pieter Verhoeff \n", - "17 Hustruer - ti år etter Anja Breien \n", - "18 La ciudad y los perros Francisco José Lombardi \n", - "19 Bayan ko : Kapit sa patalim Lino Brocka \n", - "\n", - " Result \n", - "0 Won Academy Award \n", - "1 Not Nominated \n", - "2 Not Nominated \n", - "3 Not Nominated \n", - "4 Not Nominated \n", - "5 Not Nominated \n", - "6 Nominated \n", - "7 Nominated \n", - "8 Nominated \n", - "9 Not Nominated \n", - "10 Not Nominated \n", - "11 Not Nominated \n", - "12 Not Nominated \n", - "13 Not Nominated \n", - "14 Not Nominated \n", - "15 Not Nominated \n", - "16 Not Nominated \n", - "17 Not Nominated \n", - "18 Not Nominated \n", - "19 Not Nominated },\n", - " { 'answer': 'Icelandic',\n", - " 'context': Submitting country Film title used in nomination Language ( s ) \\\n", - "0 Argentina The Official Story Spanish \n", - "1 Austria Malambo German \n", - "2 Belgium Dust French \n", - "3 Canada Jacques and November French \n", - "4 Czechoslovakia Scalpel , Please Czech \n", - "5 Denmark Twist and Shout Danish \n", - "6 France Three Men and a Cradle French \n", - "7 West Germany Angry Harvest German \n", - "8 Hungary Colonel Redl German \n", - "9 Iceland Deep Winter Icelandic \n", - "10 India Saagar Hindi \n", - "11 Israel When Night Falls Hebrew \n", - "12 Italy Macaroni Italian \n", - "13 Japan Gray Sunset Japanese \n", - "14 South Korea Eoudong Korean \n", - "15 Mexico Frida Still Life Spanish \n", - "16 Netherlands The Dream Dutch , West Frisian \n", - "17 Norway Wives - Ten Years After Norwegian \n", - "18 Peru The City and the Dogs Spanish \n", - "19 Philippines This Is My Country Tagalog \n", - "\n", - " Original title Director ( s ) \\\n", - "0 La Historia oficial Luis Puenzo \n", - "1 Malambo Milan Dor \n", - "2 Dust Marion Hänsel \n", - "3 Jacques et novembre Jean Beaudry and François Bouvier \n", - "4 Skalpel , prosím Jirí Svoboda \n", - "5 Tro , håb og kærlighed Bille August \n", - "6 Trois hommes et un couffin Coline Serreau \n", - "7 Bittere Ernte Agnieszka Holland \n", - "8 Oberst Redl István Szabó \n", - "9 Skammdegi Þráinn Bertelsson \n", - "10 सागर Ramesh Sippy \n", - "11 עד סוף הלילה Eitan Green \n", - "12 Maccheroni Ettore Scola \n", - "13 花いちもんめ Shunya Ito \n", - "14 어우동 Lee Jang-ho \n", - "15 Frida , naturaleza viva Paul Leduc \n", - "16 De Dream Pieter Verhoeff \n", - "17 Hustruer - ti år etter Anja Breien \n", - "18 La ciudad y los perros Francisco José Lombardi \n", - "19 Bayan ko : Kapit sa patalim Lino Brocka \n", - "\n", - " Result \n", - "0 Won Academy Award \n", - "1 Not Nominated \n", - "2 Not Nominated \n", - "3 Not Nominated \n", - "4 Not Nominated \n", - "5 Not Nominated \n", - "6 Nominated \n", - "7 Nominated \n", - "8 Nominated \n", - "9 Not Nominated \n", - "10 Not Nominated \n", - "11 Not Nominated \n", - "12 Not Nominated \n", - "13 Not Nominated \n", - "14 Not Nominated \n", - "15 Not Nominated \n", - "16 Not Nominated \n", - "17 Not Nominated \n", - "18 Not Nominated \n", - "19 Not Nominated },\n", - " { 'answer': 'Japanese',\n", - " 'context': Submitting country Film title used in nomination Language ( s ) \\\n", - "0 Argentina The Official Story Spanish \n", - "1 Austria Malambo German \n", - "2 Belgium Dust French \n", - "3 Canada Jacques and November French \n", - "4 Czechoslovakia Scalpel , Please Czech \n", - "5 Denmark Twist and Shout Danish \n", - "6 France Three Men and a Cradle French \n", - "7 West Germany Angry Harvest German \n", - "8 Hungary Colonel Redl German \n", - "9 Iceland Deep Winter Icelandic \n", - "10 India Saagar Hindi \n", - "11 Israel When Night Falls Hebrew \n", - "12 Italy Macaroni Italian \n", - "13 Japan Gray Sunset Japanese \n", - "14 South Korea Eoudong Korean \n", - "15 Mexico Frida Still Life Spanish \n", - "16 Netherlands The Dream Dutch , West Frisian \n", - "17 Norway Wives - Ten Years After Norwegian \n", - "18 Peru The City and the Dogs Spanish \n", - "19 Philippines This Is My Country Tagalog \n", - "\n", - " Original title Director ( s ) \\\n", - "0 La Historia oficial Luis Puenzo \n", - "1 Malambo Milan Dor \n", - "2 Dust Marion Hänsel \n", - "3 Jacques et novembre Jean Beaudry and François Bouvier \n", - "4 Skalpel , prosím Jirí Svoboda \n", - "5 Tro , håb og kærlighed Bille August \n", - "6 Trois hommes et un couffin Coline Serreau \n", - "7 Bittere Ernte Agnieszka Holland \n", - "8 Oberst Redl István Szabó \n", - "9 Skammdegi Þráinn Bertelsson \n", - "10 सागर Ramesh Sippy \n", - "11 עד סוף הלילה Eitan Green \n", - "12 Maccheroni Ettore Scola \n", - "13 花いちもんめ Shunya Ito \n", - "14 어우동 Lee Jang-ho \n", - "15 Frida , naturaleza viva Paul Leduc \n", - "16 De Dream Pieter Verhoeff \n", - "17 Hustruer - ti år etter Anja Breien \n", - "18 La ciudad y los perros Francisco José Lombardi \n", - "19 Bayan ko : Kapit sa patalim Lino Brocka \n", - "\n", - " Result \n", - "0 Won Academy Award \n", - "1 Not Nominated \n", - "2 Not Nominated \n", - "3 Not Nominated \n", - "4 Not Nominated \n", - "5 Not Nominated \n", - "6 Nominated \n", - "7 Nominated \n", - "8 Nominated \n", - "9 Not Nominated \n", - "10 Not Nominated \n", - "11 Not Nominated \n", - "12 Not Nominated \n", - "13 Not Nominated \n", - "14 Not Nominated \n", - "15 Not Nominated \n", - "16 Not Nominated \n", - "17 Not Nominated \n", - "18 Not Nominated \n", - "19 Not Nominated },\n", - " { 'answer': 'Japanese',\n", - " 'context': Submitting country Film title used in nomination Language ( s ) \\\n", - "0 Argentina The Official Story Spanish \n", - "1 Austria Malambo German \n", - "2 Belgium Dust French \n", - "3 Canada Jacques and November French \n", - "4 Czechoslovakia Scalpel , Please Czech \n", - "5 Denmark Twist and Shout Danish \n", - "6 France Three Men and a Cradle French \n", - "7 West Germany Angry Harvest German \n", - "8 Hungary Colonel Redl German \n", - "9 Iceland Deep Winter Icelandic \n", - "10 India Saagar Hindi \n", - "11 Israel When Night Falls Hebrew \n", - "12 Italy Macaroni Italian \n", - "13 Japan Gray Sunset Japanese \n", - "14 South Korea Eoudong Korean \n", - "15 Mexico Frida Still Life Spanish \n", - "16 Netherlands The Dream Dutch , West Frisian \n", - "17 Norway Wives - Ten Years After Norwegian \n", - "18 Peru The City and the Dogs Spanish \n", - "19 Philippines This Is My Country Tagalog \n", - "\n", - " Original title Director ( s ) \\\n", - "0 La Historia oficial Luis Puenzo \n", - "1 Malambo Milan Dor \n", - "2 Dust Marion Hänsel \n", - "3 Jacques et novembre Jean Beaudry and François Bouvier \n", - "4 Skalpel , prosím Jirí Svoboda \n", - "5 Tro , håb og kærlighed Bille August \n", - "6 Trois hommes et un couffin Coline Serreau \n", - "7 Bittere Ernte Agnieszka Holland \n", - "8 Oberst Redl István Szabó \n", - "9 Skammdegi Þráinn Bertelsson \n", - "10 सागर Ramesh Sippy \n", - "11 עד סוף הלילה Eitan Green \n", - "12 Maccheroni Ettore Scola \n", - "13 花いちもんめ Shunya Ito \n", - "14 어우동 Lee Jang-ho \n", - "15 Frida , naturaleza viva Paul Leduc \n", - "16 De Dream Pieter Verhoeff \n", - "17 Hustruer - ti år etter Anja Breien \n", - "18 La ciudad y los perros Francisco José Lombardi \n", - "19 Bayan ko : Kapit sa patalim Lino Brocka \n", - "\n", - " Result \n", - "0 Won Academy Award \n", - "1 Not Nominated \n", - "2 Not Nominated \n", - "3 Not Nominated \n", - "4 Not Nominated \n", - "5 Not Nominated \n", - "6 Nominated \n", - "7 Nominated \n", - "8 Nominated \n", - "9 Not Nominated \n", - "10 Not Nominated \n", - "11 Not Nominated \n", - "12 Not Nominated \n", - "13 Not Nominated \n", - "14 Not Nominated \n", - "15 Not Nominated \n", - "16 Not Nominated \n", - "17 Not Nominated \n", - "18 Not Nominated \n", - "19 Not Nominated },\n", - " { 'answer': '2012',\n", - " 'context': Title Year \\\n", - "0 The American Scream 2012 \n", - "1 Dead Souls 2012 \n", - "2 Ghoul 2012 \n", - "3 Beneath 2013 \n", - "4 Chilling Visions : 5 Senses of Fear 2013 \n", - "5 The Monkey 's Paw 2013 \n", - "6 Animal 2014 \n", - "7 Deep in the Darkness 2014 \n", - "8 The Boy 2015 \n", - "9 SiREN 2016 \n", - "10 Camera Obscura 2017 \n", - "11 Dementia 13 2017 \n", - "\n", - " Production Co \n", - "0 Chiller Films Brainstorm Media \n", - "1 Chiller Films Synthetic Productions \n", - "2 Chiller Films Modernciné \n", - "3 Glass Eye Pix \n", - "4 Chiller Films Synthetic Cinema International \n", - "5 TMP Films \n", - "6 Flower Films Synthetic Cinema International \n", - "7 Chiller Films Synthetic Cinema International \n", - "8 SpectreVision \n", - "9 Studio71 \n", - "10 Chiller Films Hood River Entertainment Paper Street Pictures \n", - "11 Pipeline Entertainment Haloran LLC }]\n" - ] - } - ], - "source": [ - "# We can see both text passages and tables as contexts of the predicted answers.\n", - "print_answers(predictions, details=\"minimum\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Evaluation\n", - "To evaluate our pipeline, we can use haystack's evaluation feature. We just need to convert our labels into `MultiLabel` objects and the `eval` method will do the rest." - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "metadata": {}, - "outputs": [], - "source": [ - "from haystack import Label, MultiLabel, Answer\n", - "\n", - "\n", - "def read_labels(filename, tables):\n", - " processed_labels = []\n", - " with open(filename) as labels:\n", - " labels = json.load(labels)\n", - " for table in tables:\n", - " if table.id not in labels:\n", - " continue\n", - " label = labels[table.id]\n", - " label = Label(\n", - " query=label[\"query\"],\n", - " document=table,\n", - " is_correct_answer=True,\n", - " is_correct_document=True,\n", - " answer=Answer(answer=label[\"answer\"]),\n", - " origin=\"gold-label\",\n", - " )\n", - " processed_labels.append(MultiLabel(labels=[label]))\n", - " return processed_labels\n", - "\n", - "\n", - "table_labels = read_labels(f\"{doc_dir}/labels.json\", tables)\n", - "passage_labels = read_labels(f\"{doc_dir}/labels.json\", passages)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "eval_results = text_table_qa_pipeline.eval(table_labels + passage_labels, params={\"top_k\": 10})" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'JoinAnswers': {'f1': 0.7135714285714286, 'exact_match': 0.6}}\n" - ] - } - ], - "source": [ - "# Calculating and printing the evaluation metrics\n", - "print(eval_results.calculate_metrics())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Adding tables from PDFs\n", - "It can sometimes be hard to provide your data in form of a pandas DataFrame. For this case, we provide the `ParsrConverter` wrapper that can help you to convert, for example, a PDF file into a document that you can index.\n", - "\n", - "**Attention: `parsr` needs a docker environment for execution, but Colab doesn't support docker.**\n", - "**If you have a local docker environment, you can uncomment and run the following cells.**" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# import time\n", - "\n", - "# !docker run -d -p 3001:3001 axarev/parsr\n", - "# time.sleep(30)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# !wget https://www.w3.org/WAI/WCAG21/working-examples/pdf-table/table.pdf" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "metadata": {}, - "outputs": [], - "source": [ - "# from haystack.nodes import ParsrConverter\n", - "\n", - "# converter = ParsrConverter()\n", - "\n", - "# docs = converter.convert(\"table.pdf\")\n", - "\n", - "# tables = [doc for doc in docs if doc.content_type == \"table\"]" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[{'content': [['Disability\\nCategory', 'Participants', 'Ballots\\nCompleted', 'Ballots\\nIncomplete/\\nTerminated', 'Results', 'Results'], ['Disability\\nCategory', 'Participants', 'Ballots\\nCompleted', 'Ballots\\nIncomplete/\\nTerminated', 'Accuracy', 'Time to\\ncomplete'], ['Blind', '5', '1', '4', '34.5%, n=1', '1199 sec, n=1'], ['Low Vision', '5', '2', '3', '98.3% n=2\\n(97.7%, n=3)', '1716 sec, n=3\\n(1934 sec, n=2)'], ['Dexterity', '5', '4', '1', '98.3%, n=4', '1672.1 sec, n=4'], ['Mobility', '3', '3', '0', '95.4%, n=3', '1416 sec, n=3']], 'content_type': 'table', 'meta': {'preceding_context': 'Example table\\nThis is an example of a data table.', 'following_context': ''}}]\n" - ] - } - ], - "source": [ - "# print(tables)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "RyeK3s28_X1C" - }, - "source": [ - "## About us\n", - "\n", - "This [Haystack](https://github.com/deepset-ai/haystack/) notebook was made with love by [deepset](https://deepset.ai/) in Berlin, Germany\n", - "\n", - "We bring NLP to the industry via open source! \n", - "Our focus: Industry specific language models & large scale QA systems. \n", - " \n", - "Some of our other work: \n", - "- [German BERT](https://deepset.ai/german-bert)\n", - "- [GermanQuAD and GermanDPR](https://deepset.ai/germanquad)\n", - "- [FARM](https://github.com/deepset-ai/FARM)\n", - "\n", - "Get in touch:\n", - "[Twitter](https://twitter.com/deepset_ai) | [LinkedIn](https://www.linkedin.com/company/deepset-ai/) | [Slack](https://haystack.deepset.ai/community/join) | [GitHub Discussions](https://github.com/deepset-ai/haystack/discussions) | [Website](https://deepset.ai)\n", - "\n", - "By the way: [we're hiring!](https://www.deepset.ai/jobs)\n" - ] - } - ], - "metadata": { - "accelerator": "GPU", - "colab": { - "name": "Tutorial15_TableQA.ipynb", - "provenance": [] - }, - "kernelspec": { - "display_name": "Python 3", - "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.9.7" - } - }, - "nbformat": 4, - "nbformat_minor": 0 -} diff --git a/tutorials/Tutorial15_TableQA.py b/tutorials/Tutorial15_TableQA.py deleted file mode 100644 index 94b8720d3c..0000000000 --- a/tutorials/Tutorial15_TableQA.py +++ /dev/null @@ -1,210 +0,0 @@ -import logging - -# We configure how logging messages should be displayed and which log level should be used before importing Haystack. -# Example log message: -# INFO - haystack.utils.preprocessing - Converting data/tutorial1/218_Olenna_Tyrell.txt -# Default log level in basicConfig is WARNING so the explicit parameter is not necessary but can be changed easily: -logging.basicConfig(format="%(levelname)s - %(name)s - %(message)s", level=logging.WARNING) -logging.getLogger("haystack").setLevel(logging.INFO) - -import os -import json -import time - -import pandas as pd - -from haystack import Label, MultiLabel, Answer -from haystack.utils import launch_es, fetch_archive_from_http, print_answers -from haystack.document_stores import ElasticsearchDocumentStore -from haystack import Document, Pipeline -from haystack.nodes.retriever import EmbeddingRetriever -from haystack.nodes import TableReader, FARMReader, RouteDocuments, JoinAnswers, ParsrConverter - - -def tutorial15_tableqa(): - - # Recommended: Start Elasticsearch using Docker via the Haystack utility function - launch_es() - - ## Connect to Elasticsearch - document_store = ElasticsearchDocumentStore(host="localhost", username="", password="", index="document") - - ## Add Tables to DocumentStore - - # Let's first fetch some tables that we want to query - # Here: 1000 tables + texts - - doc_dir = "data/tutorial15" - s3_url = "https://s3.eu-central-1.amazonaws.com/deepset.ai-farm-qa/datasets/documents/table_text_dataset.zip" - fetch_archive_from_http(url=s3_url, output_dir=doc_dir) - - # Add the tables to the DocumentStore - def read_tables(filename): - processed_tables = [] - with open(filename) as tables: - tables = json.load(tables) - for key, table in tables.items(): - current_columns = table["header"] - current_rows = table["data"] - current_df = pd.DataFrame(columns=current_columns, data=current_rows) - document = Document(content=current_df, content_type="table", id=key) - processed_tables.append(document) - - return processed_tables - - tables = read_tables(f"{doc_dir}/tables.json") - document_store.write_documents(tables, index="document") - - ### Retriever - - # Retrievers help narrowing down the scope for the Reader to a subset of tables where a given question could be answered. - # They use some simple but fast algorithm. - # - # **Here:** We use the EmbeddingRetriever capable of retrieving relevant content among a database - # of texts and tables using dense embeddings. - - retriever = EmbeddingRetriever(document_store=document_store, embedding_model="deepset/all-mpnet-base-v2-table") - - # Add table embeddings to the tables in DocumentStore - document_store.update_embeddings(retriever=retriever) - - ## Alternative: BM25Retriever - # from haystack.nodes.retriever import BM25Retriever - # retriever = BM25Retriever(document_store=document_store) - - # Try the Retriever - from haystack.utils import print_documents - - retrieved_tables = retriever.retrieve("Who won the Super Bowl?", top_k=5) - # Get highest scored table - print(retrieved_tables[0].content) - - ### Reader - # The TableReader is based on TaPas, a transformer-based language model capable of grasping the two-dimensional structure of a table. - # It scans the tables returned by the retriever and extracts the anser. - # The available TableReader models can be found [here](https://huggingface.co/models?pipeline_tag=table-question-answering&sort=downloads). - # - # **Notice**: The TableReader will return an answer for each table, even if the query cannot be answered by the table. - # Furthermore, the confidence scores are not useful as of now, given that they will *always* be very high (i.e. 1 or close to 1). - - reader = TableReader(model_name_or_path="google/tapas-base-finetuned-wtq", max_seq_len=512) - - # Try the TableReader on one Table - - table_doc = document_store.get_document_by_id("36964e90-3735-4ba1-8e6a-bec236e88bb2") - print(table_doc.content) - - prediction = reader.predict(query="Who played Gregory House in the series House?", documents=[table_doc]) - print_answers(prediction, details="minimum") - - ### Pipeline - # The Retriever and the Reader can be sticked together to a pipeline in order to first retrieve relevant tables - # and then extract the answer. - # - # **Notice**: Given that the `TableReader` does not provide useful confidence scores and returns an answer - # for each of the tables, the sorting of the answers might be not helpful. - - table_qa_pipeline = Pipeline() - table_qa_pipeline.add_node(component=retriever, name="EmbeddingRetriever", inputs=["Query"]) - table_qa_pipeline.add_node(component=reader, name="TableReader", inputs=["EmbeddingRetriever"]) - - prediction = table_qa_pipeline.run("When was Guilty Gear Xrd : Sign released?") - print_answers(prediction, details="minimum") - - ### Pipeline for QA on Combination of Text and Tables - # We are using one node for retrieving both texts and tables, the EmbeddingRetriever. - # In order to do question-answering on the Documents coming from the EmbeddingRetriever, we need to route - # Documents of type "text" to a FARMReader ( or alternatively TransformersReader) and Documents of type - # "table" to a TableReader. - - text_reader = FARMReader("deepset/roberta-base-squad2") - # In order to get meaningful scores from the TableReader, use "deepset/tapas-large-nq-hn-reader" or - # "deepset/tapas-large-nq-reader" as TableReader models. The disadvantage of these models is, however, - # that they are not capable of doing aggregations over multiple table cells. - table_reader = TableReader("deepset/tapas-large-nq-hn-reader") - route_documents = RouteDocuments() - join_answers = JoinAnswers() - - text_table_qa_pipeline = Pipeline() - text_table_qa_pipeline.add_node(component=retriever, name="EmbeddingRetriever", inputs=["Query"]) - text_table_qa_pipeline.add_node(component=route_documents, name="RouteDocuments", inputs=["EmbeddingRetriever"]) - text_table_qa_pipeline.add_node(component=text_reader, name="TextReader", inputs=["RouteDocuments.output_1"]) - text_table_qa_pipeline.add_node(component=table_reader, name="TableReader", inputs=["RouteDocuments.output_2"]) - text_table_qa_pipeline.add_node(component=join_answers, name="JoinAnswers", inputs=["TextReader", "TableReader"]) - - # Add texts to the document store - def read_texts(filename): - processed_passages = [] - with open(filename) as passages: - passages = json.load(passages) - for key, content in passages.items(): - document = Document(content=content, content_type="text", id=key) - processed_passages.append(document) - - return processed_passages - - passages = read_texts(f"{doc_dir}/texts.json") - document_store.write_documents(passages) - - document_store.update_embeddings(retriever=retriever, update_existing_embeddings=False) - - # Example query whose answer resides in a text passage - predictions = text_table_qa_pipeline.run(query="Which country does the film Macaroni come from?") - # We can see both text passages and tables as contexts of the predicted answers. - print_answers(predictions, details="minimum") - - # Example query whose answer resides in a table - predictions = text_table_qa_pipeline.run(query="Who was Thomas Alva Edison?") - # We can see both text passages and tables as contexts of the predicted answers. - print_answers(predictions, details="minimum") - - ### Evaluation - # To evaluate our pipeline, we can use haystack's evaluation feature. We just need to convert our labels into `MultiLabel` objects and the `eval` method will do the rest. - - def read_labels(filename, tables): - processed_labels = [] - with open(filename) as labels: - labels = json.load(labels) - for table in tables: - if table.id not in labels: - continue - label = labels[table.id] - label = Label( - query=label["query"], - document=table, - is_correct_answer=True, - is_correct_document=True, - answer=Answer(answer=label["answer"]), - origin="gold-label", - ) - processed_labels.append(MultiLabel(labels=[label])) - return processed_labels - - table_labels = read_labels(f"{doc_dir}/labels.json", tables) - passage_labels = read_labels(f"{doc_dir}/labels.json", passages) - - eval_results = text_table_qa_pipeline.eval(table_labels + passage_labels, params={"top_k": 10}) - - # Calculating and printing the evaluation metrics - print(eval_results.calculate_metrics()) - - ## Adding tables from PDFs - # It can sometimes be hard to provide your data in form of a pandas DataFrame. - # For this case, we provide the `ParsrConverter` wrapper that can help you to convert, for example, a PDF file into a document that you can index. - os.system("docker run -d -p 3001:3001 axarev/parsr") - time.sleep(30) - os.system("wget https://www.w3.org/WAI/WCAG21/working-examples/pdf-table/table.pdf") - - converter = ParsrConverter() - docs = converter.convert("table.pdf") - tables = [doc for doc in docs if doc.content_type == "table"] - - print(tables) - - -if __name__ == "__main__": - tutorial15_tableqa() - -# This Haystack script was made with love by deepset in Berlin, Germany -# Haystack: https://github.com/deepset-ai/haystack -# deepset: https://deepset.ai/ diff --git a/tutorials/Tutorial16_Document_Classifier_at_Index_Time.ipynb b/tutorials/Tutorial16_Document_Classifier_at_Index_Time.ipynb deleted file mode 100644 index 7966d28524..0000000000 --- a/tutorials/Tutorial16_Document_Classifier_at_Index_Time.ipynb +++ /dev/null @@ -1,571 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Extending your Metadata using DocumentClassifiers at Index Time\n", - "\n", - "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/deepset-ai/haystack/blob/main/tutorials/Tutorial16_Document_Classifier_at_Index_Time.ipynb)\n", - "\n", - "With DocumentClassifier it's possible to automatically enrich your documents with categories, sentiments, topics or whatever metadata you like. This metadata could be used for efficient filtering or further processing. Say you have some categories your users typically filter on. If the documents are tagged manually with these categories, you could automate this process by training a model. Or you can leverage the full power and flexibility of zero shot classification. All you need to do is pass your categories to the classifier, no labels required. This tutorial shows how to integrate it in your indexing pipeline." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "DocumentClassifier adds the classification result (label and score) to Document's meta property.\n", - "Hence, we can use it to classify documents at index time. \\\n", - "The result can be accessed at query time: for example by applying a filter for \"classification.label\"." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "This tutorial will show you how to integrate a classification model into your preprocessing steps and how you can filter for this additional metadata at query time. In the last section we show how to put it all together and create an indexing pipeline." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "# Install the latest release of Haystack in your own environment\n", - "#! pip install farm-haystack\n", - "\n", - "# Install the latest main of Haystack\n", - "!pip install --upgrade pip\n", - "!pip install git+https://github.com/deepset-ai/haystack.git#egg=farm-haystack[colab,ocr]\n", - "\n", - "!wget --no-check-certificate https://dl.xpdfreader.com/xpdf-tools-linux-4.04.tar.gz\n", - "!tar -xvf xpdf-tools-linux-4.04.tar.gz && sudo cp xpdf-tools-linux-4.04/bin64/pdftotext /usr/local/bin\n", - "\n", - "# Install pygraphviz\n", - "!apt install libgraphviz-dev\n", - "!pip install pygraphviz" - ] - }, - { - "cell_type": "markdown", - "source": [ - "## Logging\n", - "\n", - "We configure how logging messages should be displayed and which log level should be used before importing Haystack.\n", - "Example log message:\n", - "INFO - haystack.utils.preprocessing - Converting data/tutorial1/218_Olenna_Tyrell.txt\n", - "Default log level in basicConfig is WARNING so the explicit parameter is not necessary but can be changed easily:" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - } - }, - { - "cell_type": "code", - "execution_count": null, - "outputs": [], - "source": [ - "import logging\n", - "\n", - "logging.basicConfig(format=\"%(levelname)s - %(name)s - %(message)s\", level=logging.WARNING)\n", - "logging.getLogger(\"haystack\").setLevel(logging.INFO)" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": { - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "# Here are the imports we need\n", - "from haystack.document_stores.elasticsearch import ElasticsearchDocumentStore\n", - "from haystack.nodes import PreProcessor, TransformersDocumentClassifier, FARMReader, BM25Retriever\n", - "from haystack.schema import Document\n", - "from haystack.utils import convert_files_to_docs, fetch_archive_from_http, print_answers" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "False" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# This fetches some sample files to work with\n", - "\n", - "doc_dir = \"data/tutorial16\"\n", - "s3_url = \"https://s3.eu-central-1.amazonaws.com/deepset.ai-farm-qa/datasets/documents/preprocessing_tutorial16.zip\"\n", - "fetch_archive_from_http(url=s3_url, output_dir=doc_dir)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "## Read and preprocess documents\n" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": { - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "pdftotext version 0.86.1\n", - "Copyright 2005-2020 The Poppler Developers - http://poppler.freedesktop.org\n", - "Copyright 1996-2011 Glyph & Cog, LLC\n", - "100%|██████████| 3/3 [00:00<00:00, 372.17docs/s]\n" - ] - } - ], - "source": [ - "# note that you can also use the document classifier before applying the PreProcessor, e.g. before splitting your documents\n", - "\n", - "all_docs = convert_files_to_docs(dir_path=doc_dir)\n", - "preprocessor_sliding_window = PreProcessor(split_overlap=3, split_length=10, split_respect_sentence_boundary=False)\n", - "docs_sliding_window = preprocessor_sliding_window.process(all_docs)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Apply DocumentClassifier" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can enrich the document metadata at index time using any transformers document classifier model. While traditional classification models are trained to predict one of a few \"hard-coded\" classes and required a dedicated training dataset, zero-shot classification is super flexible and you can easily switch the classes the model should predict on the fly. Just supply them via the labels param.\n", - "Here we use a zero shot model that is supposed to classify our documents in 'music', 'natural language processing' and 'history'. Feel free to change them for whatever you like to classify. \\\n", - "These classes can later on be accessed at query time." - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "doc_classifier = TransformersDocumentClassifier(\n", - " model_name_or_path=\"cross-encoder/nli-distilroberta-base\",\n", - " task=\"zero-shot-classification\",\n", - " labels=[\"music\", \"natural language processing\", \"history\"],\n", - " batch_size=16,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], - "source": [ - "# we can also use any other transformers model besides zero shot classification\n", - "\n", - "# doc_classifier_model = 'bhadresh-savani/distilbert-base-uncased-emotion'\n", - "# doc_classifier = TransformersDocumentClassifier(model_name_or_path=doc_classifier_model, batch_size=16, use_gpu=-1)" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], - "source": [ - "# we could also specifiy a different field we want to run the classification on\n", - "\n", - "# doc_classifier = TransformersDocumentClassifier(model_name_or_path=\"cross-encoder/nli-distilroberta-base\",\n", - "# task=\"zero-shot-classification\",\n", - "# labels=[\"music\", \"natural language processing\", \"history\"],\n", - "# batch_size=16, use_gpu=-1,\n", - "# classification_field=\"description\")" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], - "source": [ - "# classify using gpu, batch_size makes sure we do not run out of memory\n", - "classified_docs = doc_classifier.predict(docs_sliding_window)" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'content': 'Heavy metal\\n\\nHeavy metal (or simply metal) is a genre of', 'content_type': 'text', 'score': None, 'meta': {'name': 'heavy_metal.docx', '_split_id': 0, 'classification': {'sequence': 'Heavy metal\\n\\nHeavy metal (or simply metal) is a genre of', 'labels': ['music', 'history', 'natural language processing'], 'scores': [0.8191022872924805, 0.11593689769506454, 0.06496082246303558], 'label': 'music'}}, 'embedding': None, 'id': '9903d23737f3d05a9d9ee170703dc245'}\n" - ] - } - ], - "source": [ - "# let's see how it looks: there should be a classification result in the meta entry containing labels and scores.\n", - "print(classified_docs[0].to_dict())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Indexing" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# In Colab / No Docker environments: Start Elasticsearch from source\n", - "! wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.9.2-linux-x86_64.tar.gz -q\n", - "! tar -xzf elasticsearch-7.9.2-linux-x86_64.tar.gz\n", - "! chown -R daemon:daemon elasticsearch-7.9.2\n", - "\n", - "import os\n", - "from subprocess import Popen, PIPE, STDOUT\n", - "\n", - "es_server = Popen(\n", - " [\"elasticsearch-7.9.2/bin/elasticsearch\"], stdout=PIPE, stderr=STDOUT, preexec_fn=lambda: os.setuid(1) # as daemon\n", - ")\n", - "# wait until ES has started\n", - "! sleep 30" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [], - "source": [ - "# Connect to Elasticsearch\n", - "document_store = ElasticsearchDocumentStore(host=\"localhost\", username=\"\", password=\"\", index=\"document\")" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "DEPRECATION WARNINGS: \n", - " 1. delete_all_documents() method is deprecated, please use delete_documents method\n", - " For more details, please refer to the issue: https://github.com/deepset-ai/haystack/issues/1045\n", - " \n" - ] - } - ], - "source": [ - "# Now, let's write the docs to our DB.\n", - "document_store.delete_all_documents()\n", - "document_store.write_documents(classified_docs)" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "document 9903d23737f3d05a9d9ee170703dc245 with content \n", - "\n", - "Heavy metal\n", - "\n", - "Heavy metal (or simply metal) is a genre of\n", - "\n", - "has label music\n" - ] - } - ], - "source": [ - "# check if indexed docs contain classification results\n", - "test_doc = document_store.get_all_documents()[0]\n", - "print(\n", - " f'document {test_doc.id} with content \\n\\n{test_doc.content}\\n\\nhas label {test_doc.meta[\"classification\"][\"label\"]}'\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Querying the data" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "All we have to do to filter for one of our classes is to set a filter on \"classification.label\"." - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [], - "source": [ - "# Initialize QA-Pipeline\n", - "from haystack.pipelines import ExtractiveQAPipeline\n", - "\n", - "retriever = BM25Retriever(document_store=document_store)\n", - "reader = FARMReader(model_name_or_path=\"deepset/roberta-base-squad2\", use_gpu=True)\n", - "pipe = ExtractiveQAPipeline(reader, retriever)" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Inferencing Samples: 0%| | 0/1 [00:00 snull + , where the threshold is', 'content_type': 'text', 'score': 0.5794093707835908, 'meta': {'_split_id': 513, 'classification': {'sequence': '> snull + , where the threshold is', 'labels': ['music', 'natural language processing', 'history'], 'scores': [0.7594349384307861, 0.1394801139831543, 0.10108496993780136], 'label': 'music'}, 'name': 'bert.pdf'}, 'embedding': None, 'id': 'dea394d0bc270f451ea72caeb31f8fe0'},\n", - " {'content': 'They are sampled such that the combined length is ', 'content_type': 'text', 'score': 0.5673102196284736, 'meta': {'_split_id': 964, 'classification': {'sequence': 'They are sampled such that the combined length is ', 'labels': ['music', 'natural language processing', 'history'], 'scores': [0.6959176659584045, 0.20470784604549408, 0.0993744507431984], 'label': 'music'}, 'name': 'bert.pdf'}, 'embedding': None, 'id': '3792202c1568920f7353682800f6d3f5'},\n", - " {'content': 'Classics or classical studies is the study of classical antiquity,', 'content_type': 'text', 'score': 0.564837188549428, 'meta': {'_split_id': 0, 'classification': {'sequence': 'Classics or classical studies is the study of classical antiquity,', 'labels': ['music', 'natural language processing', 'history'], 'scores': [0.3462620675563812, 0.33706134557724, 0.3166765868663788], 'label': 'music'}, 'name': 'classics.txt'}, 'embedding': None, 'id': '5f06721d4e5ddd207e8de318274a89b6'},\n", - " {'content': 'Orders: Doric, Ionic, and Corinthian. The Parthenon is still the', 'content_type': 'text', 'score': 0.564837188549428, 'meta': {'_split_id': 272, 'classification': {'sequence': 'Orders: Doric, Ionic, and Corinthian. The Parthenon is still the', 'labels': ['music', 'history', 'natural language processing'], 'scores': [0.8087852001190186, 0.09828957170248032, 0.09292517602443695], 'label': 'music'}, 'name': 'classics.txt'}, 'embedding': None, 'id': 'eb79ba3545ad1c1fa01a32f0b70a7455'}],\n", - " 'no_ans_gap': 3.725033760070801,\n", - " 'node_id': 'Reader',\n", - " 'params': { 'Reader': {'top_k': 5},\n", - " 'Retriever': { 'filters': { 'classification.label': [ 'music']},\n", - " 'top_k': 10}},\n", - " 'query': 'What is heavy metal?',\n", - " 'root_node': 'Query'}\n" - ] - } - ], - "source": [ - "print_answers(prediction, details=\"high\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Wrapping it up in an indexing pipeline" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [], - "source": [ - "from pathlib import Path\n", - "from haystack.pipelines import Pipeline\n", - "from haystack.nodes import TextConverter, PreProcessor, FileTypeClassifier, PDFToTextConverter, DocxToTextConverter" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [], - "source": [ - "file_type_classifier = FileTypeClassifier()\n", - "text_converter = TextConverter()\n", - "pdf_converter = PDFToTextConverter()\n", - "docx_converter = DocxToTextConverter()\n", - "\n", - "indexing_pipeline_with_classification = Pipeline()\n", - "indexing_pipeline_with_classification.add_node(\n", - " component=file_type_classifier, name=\"FileTypeClassifier\", inputs=[\"File\"]\n", - ")\n", - "indexing_pipeline_with_classification.add_node(\n", - " component=text_converter, name=\"TextConverter\", inputs=[\"FileTypeClassifier.output_1\"]\n", - ")\n", - "indexing_pipeline_with_classification.add_node(\n", - " component=pdf_converter, name=\"PdfConverter\", inputs=[\"FileTypeClassifier.output_2\"]\n", - ")\n", - "indexing_pipeline_with_classification.add_node(\n", - " component=docx_converter, name=\"DocxConverter\", inputs=[\"FileTypeClassifier.output_4\"]\n", - ")\n", - "indexing_pipeline_with_classification.add_node(\n", - " component=preprocessor_sliding_window,\n", - " name=\"Preprocessor\",\n", - " inputs=[\"TextConverter\", \"PdfConverter\", \"DocxConverter\"],\n", - ")\n", - "indexing_pipeline_with_classification.add_node(\n", - " component=doc_classifier, name=\"DocumentClassifier\", inputs=[\"Preprocessor\"]\n", - ")\n", - "indexing_pipeline_with_classification.add_node(\n", - " component=document_store, name=\"DocumentStore\", inputs=[\"DocumentClassifier\"]\n", - ")\n", - "indexing_pipeline_with_classification.draw(\"index_time_document_classifier.png\")\n", - "\n", - "document_store.delete_documents()\n", - "txt_files = [f for f in Path(doc_dir).iterdir() if f.suffix == \".txt\"]\n", - "pdf_files = [f for f in Path(doc_dir).iterdir() if f.suffix == \".pdf\"]\n", - "docx_files = [f for f in Path(doc_dir).iterdir() if f.suffix == \".docx\"]\n", - "indexing_pipeline_with_classification.run(file_paths=txt_files)\n", - "indexing_pipeline_with_classification.run(file_paths=pdf_files)\n", - "indexing_pipeline_with_classification.run(file_paths=docx_files)\n", - "\n", - "document_store.get_all_documents()[0]" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [], - "source": [ - "# we can store this pipeline and use it from the REST-API\n", - "indexing_pipeline_with_classification.save_to_yaml(\"indexing_pipeline_with_classification.yaml\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "## About us\n", - "\n", - "This [Haystack](https://github.com/deepset-ai/haystack/) notebook was made with love by [deepset](https://deepset.ai/) in Berlin, Germany\n", - "\n", - "We bring NLP to the industry via open source! \n", - "Our focus: Industry specific language models & large scale QA systems. \n", - " \n", - "Some of our other work: \n", - "- [German BERT](https://deepset.ai/german-bert)\n", - "- [GermanQuAD and GermanDPR](https://deepset.ai/germanquad)\n", - "- [FARM](https://github.com/deepset-ai/FARM)\n", - "\n", - "Get in touch:\n", - "[Twitter](https://twitter.com/deepset_ai) | [LinkedIn](https://www.linkedin.com/company/deepset-ai/) | [Slack](https://haystack.deepset.ai/community/join) | [GitHub Discussions](https://github.com/deepset-ai/haystack/discussions) | [Website](https://deepset.ai)\n", - "\n", - "By the way: [we're hiring!](https://www.deepset.ai/jobs)\n" - ] - } - ], - "metadata": { - "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.7.11" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/tutorials/Tutorial16_Document_Classifier_at_Index_Time.py b/tutorials/Tutorial16_Document_Classifier_at_Index_Time.py deleted file mode 100644 index 6660371a53..0000000000 --- a/tutorials/Tutorial16_Document_Classifier_at_Index_Time.py +++ /dev/null @@ -1,191 +0,0 @@ -# # Extending your Metadata using DocumentClassifiers at Index Time -# -# With DocumentClassifier it's possible to automatically enrich your documents -# with categories, sentiments, topics or whatever metadata you like. -# This metadata could be used for efficient filtering or further processing. -# Say you have some categories your users typically filter on. -# If the documents are tagged manually with these categories, you could automate -# this process by training a model. Or you can leverage the full power and flexibility -# of zero shot classification. All you need to do is pass your categories to the classifier, -# no labels required. -# This tutorial shows how to integrate it in your indexing pipeline. - -# DocumentClassifier adds the classification result (label and score) to Document's meta property. -# Hence, we can use it to classify documents at index time. \ -# The result can be accessed at query time: for example by applying a filter for "classification.label". - -# This tutorial will show you how to integrate a classification model into your preprocessing steps and how you can filter for this additional metadata at query time. In the last section we show how to put it all together and create an indexing pipeline. - - -# Here are the imports we need -import logging - -# We configure how logging messages should be displayed and which log level should be used before importing Haystack. -# Example log message: -# INFO - haystack.utils.preprocessing - Converting data/tutorial1/218_Olenna_Tyrell.txt -# Default log level in basicConfig is WARNING so the explicit parameter is not necessary but can be changed easily: -logging.basicConfig(format="%(levelname)s - %(name)s - %(message)s", level=logging.WARNING) -logging.getLogger("haystack").setLevel(logging.INFO) - -from haystack.document_stores.elasticsearch import ElasticsearchDocumentStore -from haystack.nodes import PreProcessor, TransformersDocumentClassifier, FARMReader, BM25Retriever -from haystack.utils import convert_files_to_docs, fetch_archive_from_http, print_answers, launch_es - - -def tutorial16_document_classifier_at_index_time(): - # This fetches some sample files to work with - - doc_dir = "data/tutorial16" - s3_url = "https://s3.eu-central-1.amazonaws.com/deepset.ai-farm-qa/datasets/documents/preprocessing_tutorial16.zip" - fetch_archive_from_http(url=s3_url, output_dir=doc_dir) - - # ## Read and preprocess documents - - # note that you can also use the document classifier before applying the PreProcessor, e.g. before splitting your documents - all_docs = convert_files_to_docs(dir_path=doc_dir) - preprocessor_sliding_window = PreProcessor(split_overlap=3, split_length=10, split_respect_sentence_boundary=False) - docs_sliding_window = preprocessor_sliding_window.process(all_docs) - - # ## Apply DocumentClassifier - - # We can enrich the document metadata at index time using any transformers document classifier model. - # Here we use a zero shot model that is supposed to classify our documents in 'music', 'natural language processing' and 'history'. - # While traditional classification models are trained to predict one of a few "hard-coded" classes and required a dedicated training dataset, - # zero-shot classification is super flexible and you can easily switch the classes the model should predict on the fly. - # Just supply them via the labels param. - # Feel free to change them for whatever you like to classify. - # These classes can later on be accessed at query time. - - doc_classifier = TransformersDocumentClassifier( - model_name_or_path="cross-encoder/nli-distilroberta-base", - task="zero-shot-classification", - labels=["music", "natural language processing", "history"], - batch_size=16, - ) - - # we can also use any other transformers model besides zero shot classification - - # doc_classifier_model = 'bhadresh-savani/distilbert-base-uncased-emotion' - # doc_classifier = TransformersDocumentClassifier(model_name_or_path=doc_classifier_model, batch_size=16) - - # we could also specifiy a different field we want to run the classification on - - # doc_classifier = TransformersDocumentClassifier(model_name_or_path="cross-encoder/nli-distilroberta-base", - # task="zero-shot-classification", - # labels=["music", "natural language processing", "history"], - # batch_size=16, - # classification_field="description") - - # classify using gpu, batch_size makes sure we do not run out of memory - classified_docs = doc_classifier.predict(docs_sliding_window) - - # let's see how it looks: there should be a classification result in the meta entry containing labels and scores. - print(classified_docs[0].to_dict()) - - # ## Indexing - - launch_es() - - # Connect to Elasticsearch - document_store = ElasticsearchDocumentStore(host="localhost", username="", password="", index="document") - - # Now, let's write the docs to our DB. - document_store.delete_all_documents() - document_store.write_documents(classified_docs) - - # check if indexed docs contain classification results - test_doc = document_store.get_all_documents()[0] - print( - f'document {test_doc.id} with content \n\n{test_doc.content}\n\nhas label {test_doc.meta["classification"]["label"]}' - ) - - # ## Querying the data - - # All we have to do to filter for one of our classes is to set a filter on "classification.label". - - # Initialize QA-Pipeline - from haystack.pipelines import ExtractiveQAPipeline - - retriever = BM25Retriever(document_store=document_store) - reader = FARMReader(model_name_or_path="deepset/roberta-base-squad2", use_gpu=True) - pipe = ExtractiveQAPipeline(reader, retriever) - - ## Voilà! Ask a question while filtering for "music"-only documents - prediction = pipe.run( - query="What is heavy metal?", - params={"Retriever": {"top_k": 10, "filters": {"classification.label": ["music"]}}, "Reader": {"top_k": 5}}, - ) - - print_answers(prediction, details="high") - - # ## Wrapping it up in an indexing pipeline - - from pathlib import Path - from haystack.pipelines import Pipeline - from haystack.nodes import TextConverter, FileTypeClassifier, PDFToTextConverter, DocxToTextConverter - - file_type_classifier = FileTypeClassifier() - text_converter = TextConverter() - pdf_converter = PDFToTextConverter() - docx_converter = DocxToTextConverter() - - indexing_pipeline_with_classification = Pipeline() - indexing_pipeline_with_classification.add_node( - component=file_type_classifier, name="FileTypeClassifier", inputs=["File"] - ) - indexing_pipeline_with_classification.add_node( - component=text_converter, name="TextConverter", inputs=["FileTypeClassifier.output_1"] - ) - indexing_pipeline_with_classification.add_node( - component=pdf_converter, name="PdfConverter", inputs=["FileTypeClassifier.output_2"] - ) - indexing_pipeline_with_classification.add_node( - component=docx_converter, name="DocxConverter", inputs=["FileTypeClassifier.output_4"] - ) - indexing_pipeline_with_classification.add_node( - component=preprocessor_sliding_window, - name="Preprocessor", - inputs=["TextConverter", "PdfConverter", "DocxConverter"], - ) - indexing_pipeline_with_classification.add_node( - component=doc_classifier, name="DocumentClassifier", inputs=["Preprocessor"] - ) - indexing_pipeline_with_classification.add_node( - component=document_store, name="DocumentStore", inputs=["DocumentClassifier"] - ) - indexing_pipeline_with_classification.draw("index_time_document_classifier.png") - - document_store.delete_documents() - txt_files = [f for f in Path(doc_dir).iterdir() if f.suffix == ".txt"] - pdf_files = [f for f in Path(doc_dir).iterdir() if f.suffix == ".pdf"] - docx_files = [f for f in Path(doc_dir).iterdir() if f.suffix == ".docx"] - indexing_pipeline_with_classification.run(file_paths=txt_files) - indexing_pipeline_with_classification.run(file_paths=pdf_files) - indexing_pipeline_with_classification.run(file_paths=docx_files) - - document_store.get_all_documents()[0] - - # we can store this pipeline and use it from the REST-API - indexing_pipeline_with_classification.save_to_yaml("indexing_pipeline_with_classification.yaml") - - -if __name__ == "__main__": - tutorial16_document_classifier_at_index_time() - -# ## About us -# -# This [Haystack](https://github.com/deepset-ai/haystack/) notebook was made with love by [deepset](https://deepset.ai/) in Berlin, Germany -# -# We bring NLP to the industry via open source! -# Our focus: Industry specific language models & large scale QA systems. -# -# Some of our other work: -# - [German BERT](https://deepset.ai/german-bert) -# - [GermanQuAD and GermanDPR](https://deepset.ai/germanquad) -# - [FARM](https://github.com/deepset-ai/FARM) -# -# Get in touch: -# [Twitter](https://twitter.com/deepset_ai) | [LinkedIn](https://www.linkedin.com/company/deepset-ai/) | [Slack](https://haystack.deepset.ai/community/join) | [GitHub Discussions](https://github.com/deepset-ai/haystack/discussions) | [Website](https://deepset.ai) -# -# By the way: [we're hiring!](https://www.deepset.ai/jobs) -# diff --git a/tutorials/Tutorial17_Audio.ipynb b/tutorials/Tutorial17_Audio.ipynb deleted file mode 100644 index 40fafaa6e6..0000000000 --- a/tutorials/Tutorial17_Audio.ipynb +++ /dev/null @@ -1,580 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": { - "id": "Dne2XSNzB3SK" - }, - "source": [ - "# Make Your QA Pipelines Talk!\n", - "\n", - "\n", - "\n", - "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/deepset-ai/haystack/blob/main/tutorials/Tutorial17_Audio.ipynb)\n", - "\n", - "Question answering works primarily on text, but Haystack provides some features for audio files that contain speech as well.\n", - "\n", - "In this tutorial, we're going to see how to use `AnswerToSpeech` to convert answers into audio files." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false, - "id": "4UBjfz4LB3SS" - }, - "source": [ - "### Prepare environment\n", - "\n", - "#### Colab: Enable the GPU runtime\n", - "Make sure you enable the GPU runtime to experience decent speed in this tutorial.\n", - "**Runtime -> Change Runtime type -> Hardware accelerator -> GPU**\n", - "\n", - "" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "uDHmaD2gB3SX", - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "# Make sure you have a GPU running\n", - "!nvidia-smi" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "QsY0HC8JB3Sc" - }, - "outputs": [], - "source": [ - "# Install the latest release of Haystack in your own environment\n", - "#! pip install farm-haystack\n", - "\n", - "# Install the latest main of Haystack\n", - "!pip install --upgrade pip\n", - "!pip install git+https://github.com/deepset-ai/haystack.git#egg=farm-haystack[colab,audio]" - ] - }, - { - "cell_type": "markdown", - "source": [ - "## Logging\n", - "\n", - "We configure how logging messages should be displayed and which log level should be used before importing Haystack.\n", - "Example log message:\n", - "INFO - haystack.utils.preprocessing - Converting data/tutorial1/218_Olenna_Tyrell.txt\n", - "Default log level in basicConfig is WARNING so the explicit parameter is not necessary but can be changed easily:" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - } - }, - { - "cell_type": "code", - "execution_count": null, - "outputs": [], - "source": [ - "import logging\n", - "\n", - "logging.basicConfig(format=\"%(levelname)s - %(name)s - %(message)s\", level=logging.WARNING)\n", - "logging.getLogger(\"haystack\").setLevel(logging.INFO)" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } - }, - { - "cell_type": "markdown", - "metadata": { - "id": "ZCemC4_XB3Se" - }, - "source": [ - "### Setup Elasticsearch\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "BtEN_VgSB3Sg" - }, - "outputs": [], - "source": [ - "# Recommended: Start Elasticsearch using Docker via the Haystack utility function\n", - "from haystack.utils import launch_es\n", - "\n", - "launch_es()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "r-oqc2g1B3Si" - }, - "outputs": [], - "source": [ - "# In Colab / No Docker environments: Start Elasticsearch from source\n", - "! wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.9.2-linux-x86_64.tar.gz -q\n", - "! tar -xzf elasticsearch-7.9.2-linux-x86_64.tar.gz\n", - "! chown -R daemon:daemon elasticsearch-7.9.2\n", - "\n", - "import os\n", - "from subprocess import Popen, PIPE, STDOUT\n", - "\n", - "es_server = Popen(\n", - " [\"elasticsearch-7.9.2/bin/elasticsearch\"], stdout=PIPE, stderr=STDOUT, preexec_fn=lambda: os.setuid(1) # as daemon\n", - ")\n", - "# wait until ES has started\n", - "! sleep 30" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "pbGu92rAB3Sl" - }, - "source": [ - "### Populate the document store with `SpeechDocuments`\n", - "\n", - "First of all, we will populate the document store with a simple indexing pipeline. See [Tutorial 1](https://colab.research.google.com/github/deepset-ai/haystack/blob/main/tutorials/Tutorial1_Basic_QA_Pipeline.ipynb) for more details about these steps.\n", - "\n", - "To the basic version, we can add here a DocumentToSpeech node that also generates an audio file for each of the indexed documents. This will make possible, during querying, to access the audio version of the documents the answers were extracted from without having to generate it on the fly.\n", - "\n", - "**Note**: this additional step can slow down your indexing quite a lot if you are not running on GPU. Experiment with very small corpora to start." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "eWYnP3nWB3So", - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "from haystack.document_stores import ElasticsearchDocumentStore\n", - "from haystack.utils import fetch_archive_from_http, launch_es\n", - "from pathlib import Path\n", - "from haystack import Pipeline\n", - "from haystack.nodes import FileTypeClassifier, TextConverter, PreProcessor, DocumentToSpeech\n", - "\n", - "document_store = ElasticsearchDocumentStore(host=\"localhost\", username=\"\", password=\"\", index=\"document\")\n", - "\n", - "# Get the documents\n", - "documents_path = \"data/tutorial17\"\n", - "s3_url = \"https://s3.eu-central-1.amazonaws.com/deepset.ai-farm-qa/datasets/documents/wiki_gameofthrones_txt17.zip\"\n", - "fetch_archive_from_http(url=s3_url, output_dir=documents_path)\n", - "\n", - "# List all the paths\n", - "file_paths = [p for p in Path(documents_path).glob(\"**/*\")]\n", - "\n", - "# NOTE: In this example we're going to use only one text file from the wiki, as the DocumentToSpeech node is quite slow\n", - "# on CPU machines. Comment out this line to use all documents from the dataset if you machine is powerful enough.\n", - "file_paths = [p for p in file_paths if \"Stormborn\" in p.name]\n", - "\n", - "# Prepare some basic metadata for the files\n", - "files_metadata = [{\"name\": path.name} for path in file_paths]\n", - "\n", - "# Here we create a basic indexing pipeline\n", - "indexing_pipeline = Pipeline()\n", - "\n", - "# - Makes sure the file is a TXT file (FileTypeClassifier node)\n", - "classifier = FileTypeClassifier()\n", - "indexing_pipeline.add_node(classifier, name=\"classifier\", inputs=[\"File\"])\n", - "\n", - "# - Converts a file into text and performs basic cleaning (TextConverter node)\n", - "text_converter = TextConverter(remove_numeric_tables=True)\n", - "indexing_pipeline.add_node(text_converter, name=\"text_converter\", inputs=[\"classifier.output_1\"])\n", - "\n", - "# - Pre-processes the text by performing splits and adding metadata to the text (Preprocessor node)\n", - "preprocessor = PreProcessor(\n", - " clean_whitespace=True,\n", - " clean_empty_lines=True,\n", - " split_length=100,\n", - " split_overlap=50,\n", - " split_respect_sentence_boundary=True,\n", - ")\n", - "indexing_pipeline.add_node(preprocessor, name=\"preprocessor\", inputs=[\"text_converter\"])\n", - "\n", - "#\n", - "# DocumentToSpeech\n", - "#\n", - "# Here is where we convert all documents to be indexed into SpeechDocuments, that will hold not only\n", - "# the text content, but also their audio version.\n", - "#\n", - "# Note that DocumentToSpeech implements a light caching, so if a document's audio have already\n", - "# been generated in a previous pass in the same folder, it will reuse the existing file instead\n", - "# of generating it again.\n", - "doc2speech = DocumentToSpeech(\n", - " model_name_or_path=\"espnet/kan-bayashi_ljspeech_vits\", generated_audio_dir=Path(\"./generated_audio_documents\")\n", - ")\n", - "indexing_pipeline.add_node(doc2speech, name=\"doc2speech\", inputs=[\"preprocessor\"])\n", - "\n", - "# - Writes the resulting documents into the document store (ElasticsearchDocumentStore node from the previous cell)\n", - "indexing_pipeline.add_node(document_store, name=\"document_store\", inputs=[\"doc2speech\"])\n", - "\n", - "# Then we run it with the documents and their metadata as input\n", - "output = indexing_pipeline.run(file_paths=file_paths, meta=files_metadata)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from pprint import pprint\n", - "\n", - "# You can now check the document store and verify that documents have been enriched with a path\n", - "# to the generated audio file\n", - "document = next(document_store.get_all_documents_generator())\n", - "pprint(document)\n", - "\n", - "# Sample output:\n", - "#\n", - "# " - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "zW5qaqn1B3St" - }, - "source": [ - "### Querying\n", - " \n", - "Now we will create a pipeline very similar to the basic `ExtractiveQAPipeline` of Tutorial 1,\n", - "with the addition of a node that converts our answers into audio files! Once the answer is retrieved, we can also listen to the audio version of the document where the answer came from." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "m_oecui1B3Sw" - }, - "outputs": [], - "source": [ - "from pathlib import Path\n", - "from haystack import Pipeline\n", - "from haystack.nodes import BM25Retriever, FARMReader, AnswerToSpeech\n", - "\n", - "retriever = BM25Retriever(document_store=document_store)\n", - "reader = FARMReader(model_name_or_path=\"deepset/roberta-base-squad2-distilled\", use_gpu=True)\n", - "answer2speech = AnswerToSpeech(\n", - " model_name_or_path=\"espnet/kan-bayashi_ljspeech_vits\", generated_audio_dir=Path(\"./audio_answers\")\n", - ")\n", - "\n", - "audio_pipeline = Pipeline()\n", - "audio_pipeline.add_node(retriever, name=\"Retriever\", inputs=[\"Query\"])\n", - "audio_pipeline.add_node(reader, name=\"Reader\", inputs=[\"Retriever\"])\n", - "audio_pipeline.add_node(answer2speech, name=\"AnswerToSpeech\", inputs=[\"Reader\"])" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "oV1KHzXGB3Sy" - }, - "source": [ - "## Ask a question!" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "S-ZMUBzpB3Sz", - "pycharm": { - "is_executing": false - } - }, - "outputs": [], - "source": [ - "# You can configure how many candidates the Reader and Retriever shall return\n", - "# The higher top_k_retriever, the better (but also the slower) your answers.\n", - "prediction = audio_pipeline.run(\n", - " query=\"Who is the father of Arya Stark?\", params={\"Retriever\": {\"top_k\": 10}, \"Reader\": {\"top_k\": 5}}\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "vpFSxtNNB3S1" - }, - "outputs": [], - "source": [ - "# Now you can either print the object directly...\n", - "from pprint import pprint\n", - "\n", - "pprint(prediction)\n", - "\n", - "# Sample output:\n", - "# {\n", - "# 'answers': [ ,\n", - "# ,\n", - "# ...\n", - "# ]\n", - "# 'documents': [ ,\n", - "# ,\n", - "# ...\n", - "# ],\n", - "# 'no_ans_gap': 11.688868522644043,\n", - "# 'node_id': 'Reader',\n", - "# 'params': {'Reader': {'top_k': 5}, 'Retriever': {'top_k': 5}},\n", - "# 'query': 'Who was born during a storm?',\n", - "# 'root_node': 'Query'\n", - "# }" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "YFCfiP97B3S3", - "pycharm": { - "is_executing": false, - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "from haystack.utils import print_answers\n", - "\n", - "# ...or use a util to simplify the output\n", - "# Change `minimum` to `medium` or `all` to raise the level of detail\n", - "print_answers(prediction, details=\"minimum\")\n", - "\n", - "# Sample output:\n", - "#\n", - "# Query: Who was born during a storm\n", - "# Answers:\n", - "# [ { 'answer_audio': PosixPath('generated_audio_answers/07d6265486b22356362387c5a098ba7d.wav'),\n", - "# 'answer': 'Daenerys Targaryen',\n", - "# 'context_transcript': PosixPath('generated_audio_answers/3f1ca228d6c4cfb633e55f89e97de7ac.wav'),\n", - "# 'context': ' refers to both Daenerys Targaryen, who was born during a terrible storm, and '},\n", - "# { 'answer_audio': PosixPath('generated_audio_answers/83c3a02141cac4caffe0718cfd6c405c.wav'),\n", - "# 'answer': 'Daenerys',\n", - "# 'context_audio': PosixPath('generated_audio_answers/8c562ebd7e7f41e1f9208384957df173.wav'),\n", - "# 'context': 'The title of the episode refers to both Daenerys Targaryen, who was born during a terrible storm'},\n", - "# ..." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# The document the first answer was extracted from\n", - "original_document = [doc for doc in prediction[\"documents\"] if doc.id == prediction[\"answers\"][0].document_id][0]\n", - "pprint(original_document)\n", - "\n", - "# Sample output\n", - "#\n", - "# " - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "FXf-kTn4B3S6" - }, - "source": [ - "### Hear them out!" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "cJJVpT7dB3S7" - }, - "outputs": [], - "source": [ - "from IPython.display import display, Audio\n", - "import soundfile as sf" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "usGVf1N6B3S8" - }, - "outputs": [], - "source": [ - "# The first answer in isolation\n", - "\n", - "print(\"Answer: \", prediction[\"answers\"][0].answer)\n", - "\n", - "speech, _ = sf.read(prediction[\"answers\"][0].answer_audio)\n", - "display(Audio(speech, rate=24000))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "yTFwNJqtB3S9" - }, - "outputs": [], - "source": [ - "# The context of the first answer\n", - "\n", - "print(\"Context: \", prediction[\"answers\"][0].context)\n", - "\n", - "speech, _ = sf.read(prediction[\"answers\"][0].context_audio)\n", - "display(Audio(speech, rate=24000))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "xAj7Xm0EB3S-" - }, - "outputs": [], - "source": [ - "# The document the first answer was extracted from\n", - "\n", - "document = [doc for doc in prediction[\"documents\"] if doc.id == prediction[\"answers\"][0].document_id][0]\n", - "\n", - "print(\"Document: \", document.content)\n", - "\n", - "speech, _ = sf.read(document.meta[\"content_audio\"])\n", - "display(Audio(speech, rate=24000))" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false, - "id": "wJpoQQNdB3S-", - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "## About us\n", - "\n", - "This [Haystack](https://github.com/deepset-ai/haystack/) notebook was made with love by [deepset](https://deepset.ai/) in Berlin, Germany\n", - "\n", - "We bring NLP to the industry via open source! \n", - "Our focus: Industry specific language models & large scale QA systems. \n", - " \n", - "Some of our other work: \n", - "- [German BERT](https://deepset.ai/german-bert)\n", - "- [GermanQuAD and GermanDPR](https://deepset.ai/germanquad)\n", - "- [FARM](https://github.com/deepset-ai/FARM)\n", - "\n", - "Get in touch:\n", - "[Twitter](https://twitter.com/deepset_ai) | [LinkedIn](https://www.linkedin.com/company/deepset-ai/) | [Slack](https://haystack.deepset.ai/community/join) | [GitHub Discussions](https://github.com/deepset-ai/haystack/discussions) | [Website](https://deepset.ai)\n", - "\n", - "By the way: [we're hiring!](https://www.deepset.ai/jobs)\n" - ] - } - ], - "metadata": { - "accelerator": "GPU", - "colab": { - "name": "Tutorial17_Audio.ipynb", - "provenance": [] - }, - "interpreter": { - "hash": "608574092bbd30ec12f87341bba285fb17e1c9fb49d850a21d7829c65ef2f8c3" - }, - "kernelspec": { - "display_name": "Python 3.9.7 ('venv': venv)", - "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.9.7" - } - }, - "nbformat": 4, - "nbformat_minor": 0 -} diff --git a/tutorials/Tutorial17_Audio.py b/tutorials/Tutorial17_Audio.py deleted file mode 100755 index 7d04970bce..0000000000 --- a/tutorials/Tutorial17_Audio.py +++ /dev/null @@ -1,235 +0,0 @@ -# ## Make Your QA Pipelines Talk! -# -# Question answering works primarily on text, but Haystack provides some features for -# audio files that contain speech as well. -# -# In this tutorial, we're going to see how to use `AnswerToSpeech` to convert answers -# into audio files. -# -import logging - -# We configure how logging messages should be displayed and which log level should be used before importing Haystack. -# Example log message: -# INFO - haystack.utils.preprocessing - Converting data/tutorial1/218_Olenna_Tyrell.txt -# Default log level in basicConfig is WARNING so the explicit parameter is not necessary but can be changed easily: -logging.basicConfig(format="%(levelname)s - %(name)s - %(message)s", level=logging.WARNING) -logging.getLogger("haystack").setLevel(logging.INFO) - -from haystack.document_stores import ElasticsearchDocumentStore -from haystack.utils import fetch_archive_from_http, launch_es, print_answers -from haystack.nodes import FARMReader, BM25Retriever -from pprint import pprint -from pathlib import Path -from haystack import Pipeline -from haystack.nodes import FileTypeClassifier, TextConverter, PreProcessor, AnswerToSpeech, DocumentToSpeech - - -def tutorial17_audio_features(): - - ############################################################################################ - # - # ## Part 1: INDEXING - # - # First of all, we create a pipeline that populates the document store. See Tutorial 1 for more details about these steps. - # - # To the basic version, we can add here a DocumentToSpeech node that also generates an audio file for each of the - # indexed documents. During querying, this will make it easier, to access the audio version of the documents the answers - # were extracted from. - - # Connect to Elasticsearch - launch_es(sleep=30) - document_store = ElasticsearchDocumentStore(host="localhost", username="", password="", index="document") - - # Get the documents - documents_path = "data/tutorial17" - s3_url = "https://s3.eu-central-1.amazonaws.com/deepset.ai-farm-qa/datasets/documents/wiki_gameofthrones_txt17.zip" - fetch_archive_from_http(url=s3_url, output_dir=documents_path) - - # List all the paths - file_paths = [p for p in Path(documents_path).glob("**/*")] - - # Note: In this example, we're going to use only one text file from the wiki, as the DocumentToSpeech node is relatively slow - # on CPU machines. Comment out this line to use all documents from the dataset if you machine is powerful enough. - file_paths = [p for p in file_paths if "Stormborn" in p.name] - - # Prepare some basic metadata for the files - files_metadata = [{"name": path.name} for path in file_paths] - - # Here we create a basic indexing pipeline - indexing_pipeline = Pipeline() - - # - Makes sure the file is a TXT file (FileTypeClassifier node) - classifier = FileTypeClassifier() - indexing_pipeline.add_node(classifier, name="classifier", inputs=["File"]) - - # - Converts a file into text and performs basic cleaning (TextConverter node) - text_converter = TextConverter(remove_numeric_tables=True) - indexing_pipeline.add_node(text_converter, name="text_converter", inputs=["classifier.output_1"]) - - # - Pre-processes the text by performing splits and adding metadata to the text (PreProcessor node) - preprocessor = PreProcessor( - clean_whitespace=True, - clean_empty_lines=True, - split_length=100, - split_overlap=50, - split_respect_sentence_boundary=True, - ) - indexing_pipeline.add_node(preprocessor, name="preprocessor", inputs=["text_converter"]) - - # - # DocumentToSpeech - # - # Here is where we convert all documents to be indexed into SpeechDocuments, that will hold not only - # the text content, but also their audio version. - doc2speech = DocumentToSpeech( - model_name_or_path="espnet/kan-bayashi_ljspeech_vits", generated_audio_dir=Path("./generated_audio_documents") - ) - indexing_pipeline.add_node(doc2speech, name="doc2speech", inputs=["preprocessor"]) - - # - Writes the resulting documents into the document store (ElasticsearchDocumentStore node from the previous cell) - indexing_pipeline.add_node(document_store, name="document_store", inputs=["doc2speech"]) - - # Then we run it with the documents and their metadata as input - indexing_pipeline.run(file_paths=file_paths, meta=files_metadata) - - # You can now check the document store and verify that documents have been enriched with a path - # to the generated audio file - document = next(document_store.get_all_documents_generator()) - pprint(document) - - # Sample output: - # - # - - ############################################################################################ - # - # ## Part 2: QUERYING - # - # Now we will create a pipeline very similar to the basic ExtractiveQAPipeline of Tutorial 1, - # with the addition of a node that converts our answers into audio files! - - retriever = BM25Retriever(document_store=document_store) - reader = FARMReader(model_name_or_path="deepset/roberta-base-squad2-distilled", use_gpu=True) - answer2speech = AnswerToSpeech( - model_name_or_path="espnet/kan-bayashi_ljspeech_vits", - generated_audio_dir=Path(__file__).parent / "audio_answers", - ) - - audio_pipeline = Pipeline() - audio_pipeline.add_node(retriever, name="Retriever", inputs=["Query"]) - audio_pipeline.add_node(reader, name="Reader", inputs=["Retriever"]) - audio_pipeline.add_node(answer2speech, name="AnswerToSpeech", inputs=["Reader"]) - - prediction = audio_pipeline.run( - query="Who was born during a storm?", params={"Retriever": {"top_k": 10}, "Reader": {"top_k": 5}} - ) - - # Now you can either print the object directly - print("\n\nRaw object:\n") - pprint(prediction) - - # Sample output: - # { - # 'answers': [ , - # , - # ... - # ] - # 'documents': [ , - # , - # ... - # ], - # 'no_ans_gap': 11.688868522644043, - # 'node_id': 'Reader', - # 'params': {'Reader': {'top_k': 5}, 'Retriever': {'top_k': 5}}, - # 'query': 'Who was born during a storm?', - # 'root_node': 'Query' - # } - - # Or use a util to simplify the output - # Change `minimum` to `medium` or `all` to raise the level of detail - print("\n\nSimplified output:\n") - print_answers(prediction, details="minimum") - - # Sample output: - # - # Query: Who was born during a storm - # Answers: - # [ { 'answer_audio': PosixPath('generated_audio_answers/07d6265486b22356362387c5a098ba7d.wav'), - # 'answer': 'Daenerys Targaryen', - # 'context_transcript': PosixPath('generated_audio_answers/3f1ca228d6c4cfb633e55f89e97de7ac.wav'), - # 'context': ' refers to both Daenerys Targaryen, who was born during a terrible storm, and '}, - # { 'answer_audio': PosixPath('generated_audio_answers/83c3a02141cac4caffe0718cfd6c405c.wav'), - # 'answer': 'Daenerys', - # 'context_audio': PosixPath('generated_audio_answers/8c562ebd7e7f41e1f9208384957df173.wav'), - # 'context': 'The title of the episode refers to both Daenerys Targaryen, who was born during a terrible storm'}, - # ... - - # The document the first answer was extracted from - original_document = [doc for doc in prediction["documents"] if doc.id == prediction["answers"][0].document_id][0] - pprint(original_document) - - # Sample output - # - # - - -if __name__ == "__main__": - tutorial17_audio_features() - - -# This Haystack script was made with love by deepset in Berlin, Germany -# Haystack: https://github.com/deepset-ai/haystack -# deepset: https://deepset.ai/ diff --git a/tutorials/Tutorial18_GPL.ipynb b/tutorials/Tutorial18_GPL.ipynb deleted file mode 100644 index 61481b963d..0000000000 --- a/tutorials/Tutorial18_GPL.ipynb +++ /dev/null @@ -1,10489 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "source": [ - "# Generative Pseudo Labeling for Domain Adaptation of Dense Retrievals\n", - "\n", - "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/deepset-ai/haystack/blob/main/tutorials/Tutorial18_GPL.ipynb)\n", - "\n", - "*Note: Adapted to Haystack from Nils Riemers' original [notebook](https://colab.research.google.com/gist/jamescalam/d2c888775c87f9882bb7c379a96adbc8/gpl-domain-adaptation.ipynb#scrollTo=183ff7ab)\n", - "\n", - "The NLP models we use every day were trained on a corpus of data that reflects the world from the past. In the meantime, we've experienced world-changing events, like the COVID pandemics, and we'd like our models to know about them. Training a model from scratch is tedious work but what if we could just update the models with new data? Generative Pseudo Labeling comes to the rescue.\n", - "\n", - "The example below shows you how to use GPL to fine-tune a model so that it can answer the query: \"How is COVID-19 transmitted?\".\n", - "\n", - "We're using TAS-B: A DistilBERT model that achieves state-of-the-art performance on MS MARCO (500k queries from Bing Search Engine). Both DistilBERT and MS MARCO were created with data from 2018 and before, hence, it lacks the knowledge of any COVID-related information.\n", - "\n", - "For this example, we're using just four documents. When you ask the model \"\"How is COVID-19 transmitted?\", here are the answers that you get (dot-score and document):\n", - "- 94.84\tEbola is transmitted via direct contact with blood\n", - "- 92.87\tHIV is transmitted via sex or sharing needles\n", - "- 92.31\tCorona is transmitted via the air\n", - "- 91.54\tPolio is transmitted via contaminated water or food\n", - "\n", - "\n", - "You can see that the correct document is only third, outranked by Ebola and HIV information. Let's see how we can make this better.\n", - "\n", - "## Efficient Domain Adaptation with GPL\n", - "This notebook demonstrates [Generative Pseudo Labeling (GPL)](https://arxiv.org/abs/2112.07577), an efficient approach to adapt existing dense retrieval models to new domains and data.\n", - "\n", - "We get a collection of 10k scientific papers on COVID-19 and then fine-tune the model within 15-60 minutes (depending on your GPU) so that it includes the COVID knowledge.\n", - "\n", - "If we search again with the updated model, we get the search results we would expect:\n", - "- Query: How is COVID-19 transmitted\n", - "- 97.70\tCorona is transmitted via the air\n", - "- 96.71\tEbola is transmitted via direct contact with blood\n", - "- 95.14\tPolio is transmitted via contaminated water or food\n", - "- 94.13\tHIV is transmitted via sex or sharing needles\n", - "\n", - "### Prepare the Environment\n", - "\n", - "#### Colab: Enable the GPU runtime\n", - "Make sure you enable the GPU runtime to experience decent speed in this tutorial.\n", - "**Runtime -> Change Runtime type -> Hardware accelerator -> GPU**\n", - "\n", - "\n" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - } - }, - { - "cell_type": "code", - "execution_count": null, - "outputs": [], - "source": [ - "!nvidia-smi" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } - }, - { - "cell_type": "code", - "execution_count": null, - "outputs": [], - "source": [ - "!pip install -q datasets\n", - "!pip install \"faiss-gpu>=1.6.3,<2\"\n", - "!pip install -q git+https://github.com/deepset-ai/haystack.git" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } - }, - { - "cell_type": "markdown", - "source": [ - "## Logging\n", - "\n", - "We configure how logging messages should be displayed and which log level should be used before importing Haystack.\n", - "Example log message:\n", - "INFO - haystack.utils.preprocessing - Converting data/tutorial1/218_Olenna_Tyrell.txt\n", - "Default log level in basicConfig is WARNING so the explicit parameter is not necessary but can be changed easily:" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - } - }, - { - "cell_type": "code", - "execution_count": null, - "outputs": [], - "source": [ - "import logging\n", - "\n", - "logging.basicConfig(format=\"%(levelname)s - %(name)s - %(message)s\", level=logging.WARNING)\n", - "logging.getLogger(\"haystack\").setLevel(logging.INFO)" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } - }, - { - "cell_type": "code", - "execution_count": null, - "outputs": [], - "source": [ - "from sentence_transformers import SentenceTransformer, util\n", - "from transformers import AutoTokenizer, AutoModelForSeq2SeqLM\n", - "from datasets import load_dataset" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } - }, - { - "cell_type": "code", - "execution_count": null, - "outputs": [], - "source": [ - "# We load the TAS-B model, a state-of-the-art model trained on MS MARCO\n", - "max_seq_length = 200\n", - "model_name = \"msmarco-distilbert-base-tas-b\"\n", - "\n", - "org_model = SentenceTransformer(model_name)\n", - "org_model.max_seq_length = max_seq_length" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } - }, - { - "cell_type": "code", - "execution_count": null, - "outputs": [], - "source": [ - "# We define a simple query and some documents how diseases are transmitted\n", - "# As TAS-B was trained on rather out-dated data (2018 and older), it has now idea about COVID-19\n", - "# So in the below example, it fails to recognize the relationship between COVID-19 and Corona\n", - "\n", - "\n", - "def show_examples(model):\n", - " query = \"How is COVID-19 transmitted\"\n", - " docs = [\n", - " \"Corona is transmitted via the air\",\n", - " \"Ebola is transmitted via direct contact with blood\",\n", - " \"HIV is transmitted via sex or sharing needles\",\n", - " \"Polio is transmitted via contaminated water or food\",\n", - " ]\n", - "\n", - " query_emb = model.encode(query)\n", - " docs_emb = model.encode(docs)\n", - " scores = util.dot_score(query_emb, docs_emb)[0]\n", - " doc_scores = sorted(zip(docs, scores), key=lambda x: x[1], reverse=True)\n", - "\n", - " print(\"Query:\", query)\n", - " for doc, score in doc_scores:\n", - " # print(doc, score)\n", - " print(f\"{score:0.02f}\\t{doc}\")\n", - "\n", - "\n", - "print(\"Original Model\")\n", - "show_examples(org_model)" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } - }, - { - "cell_type": "markdown", - "source": [ - "# Get Some Data on COVID-19\n", - "We select 10k scientific publications (title + abstract) that are connected to COVID-19. As a dataset, we use [TREC-COVID-19](https://huggingface.co/datasets/nreimers/trec-covid)." - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - } - }, - { - "cell_type": "code", - "execution_count": null, - "outputs": [], - "source": [ - "dataset = load_dataset(\"nreimers/trec-covid\", split=\"train\")\n", - "num_documents = 10000\n", - "corpus = []\n", - "for row in dataset:\n", - " if len(row[\"title\"]) > 20 and len(row[\"text\"]) > 100:\n", - " text = row[\"title\"] + \" \" + row[\"text\"]\n", - "\n", - " text_lower = text.lower()\n", - "\n", - " # The dataset also contains many papers on other diseases. To make the training in this demo\n", - " # more efficient, we focus on papers that talk about COVID.\n", - " if \"covid\" in text_lower or \"corona\" in text_lower or \"sars-cov-2\" in text_lower:\n", - " corpus.append(text)\n", - "\n", - " if len(corpus) >= num_documents:\n", - " break\n", - "\n", - "print(\"Len Corpus:\", len(corpus))" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } - }, - { - "cell_type": "markdown", - "source": [ - "# Initialize Haystack Retriever and DocumentStore\n", - "\n", - "Let's add corpus documents to `FAISSDocumentStore` and update corpus embeddings via `EmbeddingRetriever`" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - } - }, - { - "cell_type": "code", - "execution_count": null, - "outputs": [], - "source": [ - "from haystack.nodes.retriever import EmbeddingRetriever\n", - "from haystack.document_stores import FAISSDocumentStore\n", - "\n", - "document_store = FAISSDocumentStore(faiss_index_factory_str=\"Flat\", similarity=\"cosine\")\n", - "document_store.write_documents([{\"content\": t} for t in corpus])\n", - "\n", - "\n", - "retriever = EmbeddingRetriever(\n", - " document_store=document_store,\n", - " embedding_model=\"sentence-transformers/msmarco-distilbert-base-tas-b\",\n", - " model_format=\"sentence_transformers\",\n", - " max_seq_len=max_seq_length,\n", - " progress_bar=False,\n", - ")\n", - "document_store.update_embeddings(retriever)" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } - }, - { - "cell_type": "markdown", - "source": [ - "## (Optional) Download Pre-Generated Questions or Generate Them Outside of Haystack\n", - "\n", - "The first step of the GPL algorithm requires us to generate questions for a given text passage. Even though our pre-COVID trained model hasn't seen any COVID-related content, it can still produce sensible queries by copying words from the input text. As generating questions from 10k documents is a bit slow (depending on the GPU used), we'll download question/document pairs directly from the Hugging Face hub.\n" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - } - }, - { - "cell_type": "code", - "execution_count": null, - "outputs": [], - "source": [ - "from tqdm.auto import tqdm\n", - "\n", - "query_doc_pairs = []\n", - "\n", - "load_queries_from_hub = True\n", - "\n", - "# Generation of the queries is quite slow in Colab due to the old GPU and the limited CPU\n", - "# I pre-computed the queries and uploaded these to the HF dataset hub. Here we just download them\n", - "if load_queries_from_hub:\n", - " generated_queries = load_dataset(\"nreimers/trec-covid-generated-queries\", split=\"train\")\n", - " for row in generated_queries:\n", - " query_doc_pairs.append({\"question\": row[\"query\"], \"document\": row[\"doc\"]})\n", - "else:\n", - " # Load doc2query model\n", - " t5_name = \"doc2query/msmarco-t5-base-v1\"\n", - " t5_tokenizer = AutoTokenizer.from_pretrained(t5_name)\n", - " t5_model = AutoModelForSeq2SeqLM.from_pretrained(t5_name).cuda()\n", - "\n", - " batch_size = 32\n", - " queries_per_doc = 3\n", - "\n", - " for start_idx in tqdm(range(0, len(corpus), batch_size)):\n", - " corpus_batch = corpus[start_idx : start_idx + batch_size]\n", - " enc_inp = t5_tokenizer(\n", - " corpus_batch, max_length=max_seq_length, truncation=True, padding=True, return_tensors=\"pt\"\n", - " )\n", - "\n", - " outputs = t5_model.generate(\n", - " input_ids=enc_inp[\"input_ids\"].cuda(),\n", - " attention_mask=enc_inp[\"attention_mask\"].cuda(),\n", - " max_length=64,\n", - " do_sample=True,\n", - " top_p=0.95,\n", - " num_return_sequences=queries_per_doc,\n", - " )\n", - "\n", - " decoded_output = t5_tokenizer.batch_decode(outputs, skip_special_tokens=True)\n", - "\n", - " for idx, query in enumerate(decoded_output):\n", - " corpus_id = int(idx / queries_per_doc)\n", - " query_doc_pairs.append({\"question\": query, \"document\": corpus_batch[corpus_id]})\n", - "\n", - "\n", - "print(\"Generated queries:\", len(query_doc_pairs))" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } - }, - { - "cell_type": "markdown", - "source": [ - "# Use PseudoLabelGenerator to Genenerate Retriever Adaptation Training Data\n", - "\n", - "PseudoLabelGenerator run will execute all three steps of the GPL [algorithm](https://github.com/UKPLab/gpl#how-does-gpl-work):\n", - " 1. Question generation - optional step\n", - " 2. Negative mining\n", - " 3. Pseudo labeling (margin scoring)\n", - "\n", - "The output of the `PseudoLabelGenerator` is the training data we'll use to adapt our `EmbeddingRetriever`.\n" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - } - }, - { - "cell_type": "code", - "execution_count": null, - "outputs": [], - "source": [ - "from haystack.nodes.question_generator import QuestionGenerator\n", - "from haystack.nodes.label_generator import PseudoLabelGenerator\n", - "\n", - "use_question_generator = False\n", - "\n", - "\n", - "if use_question_generator:\n", - " questions_producer = QuestionGenerator(\n", - " model_name_or_path=\"doc2query/msmarco-t5-base-v1\",\n", - " max_length=64,\n", - " split_length=128,\n", - " batch_size=32,\n", - " num_queries_per_doc=3,\n", - " )\n", - "\n", - "else:\n", - " questions_producer = query_doc_pairs\n", - "\n", - "# We can use either QuestionGenerator or already generated questions in PseudoLabelGenerator\n", - "psg = PseudoLabelGenerator(questions_producer, retriever, max_questions_per_document=10, batch_size=32, top_k=10)\n", - "output, pipe_id = psg.run(documents=document_store.get_all_documents())" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } - }, - { - "cell_type": "markdown", - "source": [ - "# Update the Retriever\n", - "\n", - "Now that we have the generated training data produced by `PseudoLabelGenerator`, we'll update the `EmbeddingRetriever`. Let's take a peek at the training data." - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - } - }, - { - "cell_type": "code", - "execution_count": null, - "outputs": [], - "source": [ - "output[\"gpl_labels\"][0]" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } - }, - { - "cell_type": "code", - "execution_count": null, - "outputs": [], - "source": [ - "len(output[\"gpl_labels\"])" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } - }, - { - "cell_type": "code", - "execution_count": null, - "outputs": [], - "source": [ - "retriever.train(output[\"gpl_labels\"])" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } - }, - { - "cell_type": "markdown", - "source": [ - "## Verify that EmbeddingRetriever Is Adapted and Save It For Future Use\n", - "\n", - "Let's repeat our query to see if the Retriever learned about COVID and can now rank it as #1 among the answers." - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - } - }, - { - "cell_type": "code", - "execution_count": null, - "id": "4c1c22ce", - "metadata": { - "id": "4c1c22ce", - "colab": { - "base_uri": "https://localhost:8080/" - }, - "outputId": "4d97deee-4527-4a0d-d211-92d56fd9d3f9", - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "Original Model\n", - "Query: How is COVID-19 transmitted\n", - "94.84\tEbola is transmitted via direct contact with blood\n", - "92.87\tHIV is transmitted via sex or sharing needles\n", - "92.31\tCorona is transmitted via the air\n", - "91.54\tPolio is transmitted via contaminated water or food\n", - "\n", - "\n", - "Adapted Model\n", - "Query: How is COVID-19 transmitted\n", - "100.73\tCorona is transmitted via the air\n", - "100.27\tEbola is transmitted via direct contact with blood\n", - "98.41\tHIV is transmitted via sex or sharing needles\n", - "98.21\tPolio is transmitted via contaminated water or food\n" - ] - } - ], - "source": [ - "print(\"Original Model\")\n", - "show_examples(org_model)\n", - "\n", - "print(\"\\n\\nAdapted Model\")\n", - "show_examples(retriever.embedding_encoder.embedding_model)" - ] - }, - { - "cell_type": "code", - "source": [ - "retriever.save(\"adapted_retriever\")" - ], - "metadata": { - "id": "-34616RA3cpA", - "pycharm": { - "name": "#%%\n" - } - }, - "id": "-34616RA3cpA", - "execution_count": null, - "outputs": [] - } - ], - "metadata": { - "environment": { - "kernel": "python3", - "name": "common-cu110.m91", - "type": "gcloud", - "uri": "gcr.io/deeplearning-platform-release/base-cu110:m91" - }, - "kernelspec": { - "display_name": "Python 3", - "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.7.12" - }, - "colab": { - "name": "Generative-Pseudo-Labeling-for-Domain-Adaptation-of-Dense-Retrievals.ipynb", - "provenance": [], - "collapsed_sections": [], - "machine_shape": "hm" - }, - "accelerator": "GPU", - "widgets": { - "application/vnd.jupyter.widget-state+json": { - "e3f54302d5bf45538cda4d0ac6ace75f": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HBoxModel", - "model_module_version": "1.5.0", - "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_c9f9b4b74c4440fe910d6578c918cb47", - "IPY_MODEL_4508297e46bf4f5d8967f6b9e69e14b3", - "IPY_MODEL_a6be92847ac64a8090e7c1c1b0aff4ee" - ], - "layout": "IPY_MODEL_e81acc043e69441789f91cfd27d7e429" - } - }, - "c9f9b4b74c4440fe910d6578c918cb47": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "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_ea9ae327d2684e8a98de8d248d83242f", - "placeholder": "​", - "style": "IPY_MODEL_63efc7dc1ace48e285a87fe116ef7565", - "value": "Downloading: 100%" - } - }, - "4508297e46bf4f5d8967f6b9e69e14b3": { - "model_module": "@jupyter-widgets/controls", - "model_name": "FloatProgressModel", - "model_module_version": "1.5.0", - "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_948439c408d74cf5a0c88e026b9f47e2", - "max": 690, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_6ecde4e831bf45cb82b97e770d4a63dd", - "value": 690 - } - }, - "a6be92847ac64a8090e7c1c1b0aff4ee": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "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_19358316af674b52b6a98c068c4ad127", - "placeholder": "​", - "style": "IPY_MODEL_e0720ecd75914c3997fcd017cad4a6d6", - "value": " 690/690 [00:00<00:00, 29.7kB/s]" - } - }, - "e81acc043e69441789f91cfd27d7e429": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "ea9ae327d2684e8a98de8d248d83242f": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "63efc7dc1ace48e285a87fe116ef7565": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "948439c408d74cf5a0c88e026b9f47e2": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "6ecde4e831bf45cb82b97e770d4a63dd": { - "model_module": "@jupyter-widgets/controls", - "model_name": "ProgressStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "19358316af674b52b6a98c068c4ad127": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "e0720ecd75914c3997fcd017cad4a6d6": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "25804d88c35b48859d654d542bf70235": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HBoxModel", - "model_module_version": "1.5.0", - "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_abbd5227fe21460ca94424bc08b4006a", - "IPY_MODEL_3dbc077490714845bd96bc43c8d7b3a1", - "IPY_MODEL_7c53da34424d48d89cfd6275851fbb7c" - ], - "layout": "IPY_MODEL_393c7996af7541b5b7d01586eea19275" - } - }, - "abbd5227fe21460ca94424bc08b4006a": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "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_ccd2cfe1d4ac4df78dfea3cec69bc9db", - "placeholder": "​", - "style": "IPY_MODEL_ef7aa96a73ec4dcbbf672dc381e20c09", - "value": "Downloading: 100%" - } - }, - "3dbc077490714845bd96bc43c8d7b3a1": { - "model_module": "@jupyter-widgets/controls", - "model_name": "FloatProgressModel", - "model_module_version": "1.5.0", - "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_9013ae6b24424b23a27dfedb622b30c5", - "max": 190, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_2d6270e667244ac0a3ff36a2a98de108", - "value": 190 - } - }, - "7c53da34424d48d89cfd6275851fbb7c": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "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_6882df3688c24f7f96fff5cdb3f1823e", - "placeholder": "​", - "style": "IPY_MODEL_1124d87b471b4f0ebbf33808d0ef25c7", - "value": " 190/190 [00:00<00:00, 7.74kB/s]" - } - }, - "393c7996af7541b5b7d01586eea19275": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "ccd2cfe1d4ac4df78dfea3cec69bc9db": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "ef7aa96a73ec4dcbbf672dc381e20c09": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "9013ae6b24424b23a27dfedb622b30c5": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "2d6270e667244ac0a3ff36a2a98de108": { - "model_module": "@jupyter-widgets/controls", - "model_name": "ProgressStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "6882df3688c24f7f96fff5cdb3f1823e": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "1124d87b471b4f0ebbf33808d0ef25c7": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "d6eab91b649e4c4c9bdfb78c6175c92b": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HBoxModel", - "model_module_version": "1.5.0", - "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_e99801cdb73f47e280099878063865cd", - "IPY_MODEL_0fbe30691c174656930073b26d56d7f0", - "IPY_MODEL_9fbd63363ef2443c8c4956c87533c895" - ], - "layout": "IPY_MODEL_1acc1d41025c44d6a81312b19296a755" - } - }, - "e99801cdb73f47e280099878063865cd": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "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_9f249023b3734691b6f5bbcbc7303027", - "placeholder": "​", - "style": "IPY_MODEL_91fcf090af104632b16fcda570c37e7e", - "value": "Downloading: 100%" - } - }, - "0fbe30691c174656930073b26d56d7f0": { - "model_module": "@jupyter-widgets/controls", - "model_name": "FloatProgressModel", - "model_module_version": "1.5.0", - "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_1c9c7adcb2ed4a91913ad1ea784274d2", - "max": 3952, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_bc1e81fdb925468b8043665479e02ed5", - "value": 3952 - } - }, - "9fbd63363ef2443c8c4956c87533c895": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "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_6f22f3b1ccfe46a08c44c0ddb35d3b32", - "placeholder": "​", - "style": "IPY_MODEL_756a540cc8844b54a7cce7453e51e32f", - "value": " 3.95k/3.95k [00:00<00:00, 144kB/s]" - } - }, - "1acc1d41025c44d6a81312b19296a755": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "9f249023b3734691b6f5bbcbc7303027": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "91fcf090af104632b16fcda570c37e7e": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "1c9c7adcb2ed4a91913ad1ea784274d2": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "bc1e81fdb925468b8043665479e02ed5": { - "model_module": "@jupyter-widgets/controls", - "model_name": "ProgressStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "6f22f3b1ccfe46a08c44c0ddb35d3b32": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "756a540cc8844b54a7cce7453e51e32f": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "649d534d8d394e768001845e67bee190": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HBoxModel", - "model_module_version": "1.5.0", - "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_12a513c74bae4a98ad11b69cf039e696", - "IPY_MODEL_25ccb73e22c145468fe165859376e467", - "IPY_MODEL_361cbd24a5214b2f80e61c6254bdf1c1" - ], - "layout": "IPY_MODEL_bd23fe461545451caa83926b18752ef3" - } - }, - "12a513c74bae4a98ad11b69cf039e696": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "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_ac2cb2b7d403466a87ec8c89bd28ec73", - "placeholder": "​", - "style": "IPY_MODEL_a9b3ac5b10624a7f8f3a307a255caaeb", - "value": "Downloading: 100%" - } - }, - "25ccb73e22c145468fe165859376e467": { - "model_module": "@jupyter-widgets/controls", - "model_name": "FloatProgressModel", - "model_module_version": "1.5.0", - "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_69ed93c673ac4320ac166393417f8cf9", - "max": 548, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_8a07da8815824f7ab10e0d1d07ee8033", - "value": 548 - } - }, - "361cbd24a5214b2f80e61c6254bdf1c1": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "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_7db551fae79c45f7bf62f58748928663", - "placeholder": "​", - "style": "IPY_MODEL_7bd6c6b728fa4074aeda61fdf81ad8f0", - "value": " 548/548 [00:00<00:00, 24.0kB/s]" - } - }, - "bd23fe461545451caa83926b18752ef3": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "ac2cb2b7d403466a87ec8c89bd28ec73": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "a9b3ac5b10624a7f8f3a307a255caaeb": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "69ed93c673ac4320ac166393417f8cf9": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "8a07da8815824f7ab10e0d1d07ee8033": { - "model_module": "@jupyter-widgets/controls", - "model_name": "ProgressStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "7db551fae79c45f7bf62f58748928663": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "7bd6c6b728fa4074aeda61fdf81ad8f0": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "3738c415320b49bd87749808956966fc": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HBoxModel", - "model_module_version": "1.5.0", - "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_56651a63b5494f25a74873176fb3e015", - "IPY_MODEL_8512c8dd0f1b40efbe053fd2c8ae5ccb", - "IPY_MODEL_96de5f0e4cb14e7984336371eb0c8728" - ], - "layout": "IPY_MODEL_4635e9d092234cedb43851afa5443a5c" - } - }, - "56651a63b5494f25a74873176fb3e015": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "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_789267bcbd8e420aad209ba80e74aee6", - "placeholder": "​", - "style": "IPY_MODEL_0333a8c2391c48caad3849826c9c12f2", - "value": "Downloading: 100%" - } - }, - "8512c8dd0f1b40efbe053fd2c8ae5ccb": { - "model_module": "@jupyter-widgets/controls", - "model_name": "FloatProgressModel", - "model_module_version": "1.5.0", - "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_7c9f294ab2c945ddac5056d78ff15e97", - "max": 122, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_59a7cace08e74690a167440b5804c121", - "value": 122 - } - }, - "96de5f0e4cb14e7984336371eb0c8728": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "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_2782c608aafd44ad9063dff872e34363", - "placeholder": "​", - "style": "IPY_MODEL_c7bc6d5e5ab6447eb586911a2aec717a", - "value": " 122/122 [00:00<00:00, 4.76kB/s]" - } - }, - "4635e9d092234cedb43851afa5443a5c": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "789267bcbd8e420aad209ba80e74aee6": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "0333a8c2391c48caad3849826c9c12f2": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "7c9f294ab2c945ddac5056d78ff15e97": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "59a7cace08e74690a167440b5804c121": { - "model_module": "@jupyter-widgets/controls", - "model_name": "ProgressStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "2782c608aafd44ad9063dff872e34363": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "c7bc6d5e5ab6447eb586911a2aec717a": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "538a3b94e1044c1c8d2e3940a32203a2": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HBoxModel", - "model_module_version": "1.5.0", - "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_8342654168a44ee5be018add3537b134", - "IPY_MODEL_0ead61bbaed345fcbd7b35153f3e92ff", - "IPY_MODEL_bba1f546b134428d9554c745f0ab088f" - ], - "layout": "IPY_MODEL_64b7eb18b5454dec84d5656c4997cdea" - } - }, - "8342654168a44ee5be018add3537b134": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "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_10576777ae8f44bf852417f9ea25814c", - "placeholder": "​", - "style": "IPY_MODEL_9858031ae6fd4f6caecf5385e8d01dee", - "value": "Downloading: 100%" - } - }, - "0ead61bbaed345fcbd7b35153f3e92ff": { - "model_module": "@jupyter-widgets/controls", - "model_name": "FloatProgressModel", - "model_module_version": "1.5.0", - "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_bee45079e04c48a6a94dd04a30aca836", - "max": 229, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_769271fced5448ed970b73193d53cc82", - "value": 229 - } - }, - "bba1f546b134428d9554c745f0ab088f": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "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_dfc6403eb20a484cb597645ba949ef5a", - "placeholder": "​", - "style": "IPY_MODEL_307f0ef07e12476f8bf6e4fd2f9d7253", - "value": " 229/229 [00:00<00:00, 9.72kB/s]" - } - }, - "64b7eb18b5454dec84d5656c4997cdea": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "10576777ae8f44bf852417f9ea25814c": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "9858031ae6fd4f6caecf5385e8d01dee": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "bee45079e04c48a6a94dd04a30aca836": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "769271fced5448ed970b73193d53cc82": { - "model_module": "@jupyter-widgets/controls", - "model_name": "ProgressStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "dfc6403eb20a484cb597645ba949ef5a": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "307f0ef07e12476f8bf6e4fd2f9d7253": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "954fbefc7dfa4bd1990fd91140664607": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HBoxModel", - "model_module_version": "1.5.0", - "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_990ad53fe17c4de080829bd4c9435215", - "IPY_MODEL_ab947ae5b3e543159be0cc78b3b7cc66", - "IPY_MODEL_1d3def38c6aa43a6b5b8799e099dcdd7" - ], - "layout": "IPY_MODEL_ef7875aeaf004129a8259528b11ab8ec" - } - }, - "990ad53fe17c4de080829bd4c9435215": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "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_32819075877342d78519347bcda2d6db", - "placeholder": "​", - "style": "IPY_MODEL_cfd3271950f7422382d6c8679087e975", - "value": "Downloading: 100%" - } - }, - "ab947ae5b3e543159be0cc78b3b7cc66": { - "model_module": "@jupyter-widgets/controls", - "model_name": "FloatProgressModel", - "model_module_version": "1.5.0", - "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_7420f1311e0d4aa68f6dc09eb9436f2d", - "max": 265486777, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_1d71239bef5e461dad5067862c600655", - "value": 265486777 - } - }, - "1d3def38c6aa43a6b5b8799e099dcdd7": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "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_48fee6ee69e140ecbff27ba63a94116c", - "placeholder": "​", - "style": "IPY_MODEL_e765bc044ce1442e9b4dccc1cf1b00fe", - "value": " 265M/265M [00:04<00:00, 64.0MB/s]" - } - }, - "ef7875aeaf004129a8259528b11ab8ec": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "32819075877342d78519347bcda2d6db": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "cfd3271950f7422382d6c8679087e975": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "7420f1311e0d4aa68f6dc09eb9436f2d": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "1d71239bef5e461dad5067862c600655": { - "model_module": "@jupyter-widgets/controls", - "model_name": "ProgressStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "48fee6ee69e140ecbff27ba63a94116c": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "e765bc044ce1442e9b4dccc1cf1b00fe": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "60781fb4639b4c679d60b7a6db1313eb": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HBoxModel", - "model_module_version": "1.5.0", - "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_f122351005464bdabd1d0ae73ebd039c", - "IPY_MODEL_144c419d8aae4f84ad6426174945be44", - "IPY_MODEL_0d4dfbc6915e4d6996ea8923b55ce3a5" - ], - "layout": "IPY_MODEL_c2bca7ab648546a3900e91621fa00b5b" - } - }, - "f122351005464bdabd1d0ae73ebd039c": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "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_7220db99665f49b68a37015533eeb128", - "placeholder": "​", - "style": "IPY_MODEL_9e0cda560f4641ad8ab550444e0b7f59", - "value": "Downloading: 100%" - } - }, - "144c419d8aae4f84ad6426174945be44": { - "model_module": "@jupyter-widgets/controls", - "model_name": "FloatProgressModel", - "model_module_version": "1.5.0", - "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_fa1dbcfcf0bb49fe87b24cd4a0865b13", - "max": 53, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_8f651090936946bdbe2d80d8021e2f8d", - "value": 53 - } - }, - "0d4dfbc6915e4d6996ea8923b55ce3a5": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "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_255cc58503484ccabac0d5754e62a3e3", - "placeholder": "​", - "style": "IPY_MODEL_7f5ac505290e4491b9a5353f4fe465ee", - "value": " 53.0/53.0 [00:00<00:00, 1.77kB/s]" - } - }, - "c2bca7ab648546a3900e91621fa00b5b": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "7220db99665f49b68a37015533eeb128": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "9e0cda560f4641ad8ab550444e0b7f59": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "fa1dbcfcf0bb49fe87b24cd4a0865b13": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "8f651090936946bdbe2d80d8021e2f8d": { - "model_module": "@jupyter-widgets/controls", - "model_name": "ProgressStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "255cc58503484ccabac0d5754e62a3e3": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "7f5ac505290e4491b9a5353f4fe465ee": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "56f6c32915344e71ba21b5a86bb37589": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HBoxModel", - "model_module_version": "1.5.0", - "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_a3647a2d116249d58e24e87e07bfd9f7", - "IPY_MODEL_38fd6696e239494daad11febdc780ae3", - "IPY_MODEL_9ed854c289054619a376f5fd36a9804a" - ], - "layout": "IPY_MODEL_04012d44c00d47018a0a2e559d1a912d" - } - }, - "a3647a2d116249d58e24e87e07bfd9f7": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "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_eb935c9831d343139b9d338fe0ef3c03", - "placeholder": "​", - "style": "IPY_MODEL_acc95304546e43cab3c910bd1b10cea1", - "value": "Downloading: 100%" - } - }, - "38fd6696e239494daad11febdc780ae3": { - "model_module": "@jupyter-widgets/controls", - "model_name": "FloatProgressModel", - "model_module_version": "1.5.0", - "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_57161080dacd4862a3b6ffb16d215e73", - "max": 112, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_2812e79260544a1c88425dcb425244d6", - "value": 112 - } - }, - "9ed854c289054619a376f5fd36a9804a": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "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_70f5b34c8e2345519e1bf42973b7adb0", - "placeholder": "​", - "style": "IPY_MODEL_d6f03b5690f64f8a94aa9c0ccaae5c32", - "value": " 112/112 [00:00<00:00, 3.69kB/s]" - } - }, - "04012d44c00d47018a0a2e559d1a912d": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "eb935c9831d343139b9d338fe0ef3c03": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "acc95304546e43cab3c910bd1b10cea1": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "57161080dacd4862a3b6ffb16d215e73": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "2812e79260544a1c88425dcb425244d6": { - "model_module": "@jupyter-widgets/controls", - "model_name": "ProgressStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "70f5b34c8e2345519e1bf42973b7adb0": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "d6f03b5690f64f8a94aa9c0ccaae5c32": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "3369d6cdbe694c609fa955b1a41b7d6e": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HBoxModel", - "model_module_version": "1.5.0", - "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_071cb3f4d4494e2a8078dea2bf8be289", - "IPY_MODEL_387da92b41c843ed83a1f4bcbbfe27c2", - "IPY_MODEL_dc7e1a2880944db59a3fc9408a558543" - ], - "layout": "IPY_MODEL_5b0fa7e1069c48d1af56f28174d0256d" - } - }, - "071cb3f4d4494e2a8078dea2bf8be289": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "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_45cfcc9aae8e4cf682e7752851b83c87", - "placeholder": "​", - "style": "IPY_MODEL_4bfa951f194f492cb64064847f070417", - "value": "Downloading: 100%" - } - }, - "387da92b41c843ed83a1f4bcbbfe27c2": { - "model_module": "@jupyter-widgets/controls", - "model_name": "FloatProgressModel", - "model_module_version": "1.5.0", - "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_4faf1e9acceb415188a86bef9ffb89d0", - "max": 466081, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_6dcd5348c04b4536a24437c5513fa725", - "value": 466081 - } - }, - "dc7e1a2880944db59a3fc9408a558543": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "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_8e20908be51b4814915de0852c2b45c2", - "placeholder": "​", - "style": "IPY_MODEL_856caeacf43e49c68c46f2b2e4172520", - "value": " 466k/466k [00:00<00:00, 938kB/s]" - } - }, - "5b0fa7e1069c48d1af56f28174d0256d": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "45cfcc9aae8e4cf682e7752851b83c87": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "4bfa951f194f492cb64064847f070417": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "4faf1e9acceb415188a86bef9ffb89d0": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "6dcd5348c04b4536a24437c5513fa725": { - "model_module": "@jupyter-widgets/controls", - "model_name": "ProgressStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "8e20908be51b4814915de0852c2b45c2": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "856caeacf43e49c68c46f2b2e4172520": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "202fd0e14be54d4a80a6c66463f4b0dd": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HBoxModel", - "model_module_version": "1.5.0", - "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_c691eb569daf495eb4cb9f948de2a4c0", - "IPY_MODEL_986be5f263a546cca776c14b3d05ceee", - "IPY_MODEL_d0a6780f013b4f819d852d149322b749" - ], - "layout": "IPY_MODEL_913f8b929a744e4bbe1f8791242e5dfe" - } - }, - "c691eb569daf495eb4cb9f948de2a4c0": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "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_5a2ad9037a4c45dcb7075add37db3ace", - "placeholder": "​", - "style": "IPY_MODEL_758f47f6eb90462fafa856c4162b28ca", - "value": "Downloading: 100%" - } - }, - "986be5f263a546cca776c14b3d05ceee": { - "model_module": "@jupyter-widgets/controls", - "model_name": "FloatProgressModel", - "model_module_version": "1.5.0", - "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_00c13da0863d429ca4355acfeacca513", - "max": 547, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_10a1914245774398bb6ec4a822f4469e", - "value": 547 - } - }, - "d0a6780f013b4f819d852d149322b749": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "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_31f0630a46b54e5b85e83e58d3dd3682", - "placeholder": "​", - "style": "IPY_MODEL_55964f3840e949b6af3d7b11d4258ef9", - "value": " 547/547 [00:00<00:00, 18.6kB/s]" - } - }, - "913f8b929a744e4bbe1f8791242e5dfe": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "5a2ad9037a4c45dcb7075add37db3ace": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "758f47f6eb90462fafa856c4162b28ca": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "00c13da0863d429ca4355acfeacca513": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "10a1914245774398bb6ec4a822f4469e": { - "model_module": "@jupyter-widgets/controls", - "model_name": "ProgressStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "31f0630a46b54e5b85e83e58d3dd3682": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "55964f3840e949b6af3d7b11d4258ef9": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "a8dd5cd551a2416e9a51998066d0bea7": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HBoxModel", - "model_module_version": "1.5.0", - "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_46898b818c994a59b11c9a5dbe0ee4a7", - "IPY_MODEL_b3e3ae95d4de43019e3b26ee66684d94", - "IPY_MODEL_0c2c5044e9d348bb81b64931f31c298c" - ], - "layout": "IPY_MODEL_f9e5635d0d064aad8b5b093a97cfcbf8" - } - }, - "46898b818c994a59b11c9a5dbe0ee4a7": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "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_d13e339c5acc42259dfd3e0a8e652353", - "placeholder": "​", - "style": "IPY_MODEL_de6d0bd59f734dd1a9a0e2a5ee42d812", - "value": "Downloading: 100%" - } - }, - "b3e3ae95d4de43019e3b26ee66684d94": { - "model_module": "@jupyter-widgets/controls", - "model_name": "FloatProgressModel", - "model_module_version": "1.5.0", - "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_f652c0299182482a96967b778f5e3781", - "max": 231508, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_762fb93910a1499b8394355676f3efc1", - "value": 231508 - } - }, - "0c2c5044e9d348bb81b64931f31c298c": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "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_26db8a1dcbec44cb88a84ee620449747", - "placeholder": "​", - "style": "IPY_MODEL_9c760edcb79147c5a96b9e90fabfb84e", - "value": " 232k/232k [00:00<00:00, 811kB/s]" - } - }, - "f9e5635d0d064aad8b5b093a97cfcbf8": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "d13e339c5acc42259dfd3e0a8e652353": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "de6d0bd59f734dd1a9a0e2a5ee42d812": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "f652c0299182482a96967b778f5e3781": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "762fb93910a1499b8394355676f3efc1": { - "model_module": "@jupyter-widgets/controls", - "model_name": "ProgressStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "26db8a1dcbec44cb88a84ee620449747": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "9c760edcb79147c5a96b9e90fabfb84e": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "59b2362cccec49848a8a23e5aa770125": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HBoxModel", - "model_module_version": "1.5.0", - "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_683376f7d2194bf99332097bf0fb7c84", - "IPY_MODEL_017a6620e3a447e5b52e674dffd1f0bc", - "IPY_MODEL_1eca482e01c447d9acebba0ffe1e3acf" - ], - "layout": "IPY_MODEL_c0013a8d670c487abf2d01ec982900f7" - } - }, - "683376f7d2194bf99332097bf0fb7c84": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "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_3c1cd1b95f6b42339201a7cc3cb33e1c", - "placeholder": "​", - "style": "IPY_MODEL_5d8ccc9b84f543cf89d6da550ab538c3", - "value": "Downloading data files: 100%" - } - }, - "017a6620e3a447e5b52e674dffd1f0bc": { - "model_module": "@jupyter-widgets/controls", - "model_name": "FloatProgressModel", - "model_module_version": "1.5.0", - "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_ab92e1b9fbcd4bd282fec38cb6326927", - "max": 1, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_91040448a7db41c993f9deca17a4de48", - "value": 1 - } - }, - "1eca482e01c447d9acebba0ffe1e3acf": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "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_102792d3f5b146caaad3d2ff4bd2bfe9", - "placeholder": "​", - "style": "IPY_MODEL_61c3a801ad6f495482919e6b87263383", - "value": " 1/1 [00:03<00:00, 3.18s/it]" - } - }, - "c0013a8d670c487abf2d01ec982900f7": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "3c1cd1b95f6b42339201a7cc3cb33e1c": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "5d8ccc9b84f543cf89d6da550ab538c3": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "ab92e1b9fbcd4bd282fec38cb6326927": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "91040448a7db41c993f9deca17a4de48": { - "model_module": "@jupyter-widgets/controls", - "model_name": "ProgressStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "102792d3f5b146caaad3d2ff4bd2bfe9": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "61c3a801ad6f495482919e6b87263383": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "fed37cce17924d24ab999cca7f8d9745": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HBoxModel", - "model_module_version": "1.5.0", - "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_55f40d69cb3a4e98b0378e8f090bd797", - "IPY_MODEL_606a2af9bcfe48c5bfab251641d3eb4d", - "IPY_MODEL_a91df8bf36c64d298b0ca5ff16615560" - ], - "layout": "IPY_MODEL_e590655fe91f4e2f83e38f399aef7aef" - } - }, - "55f40d69cb3a4e98b0378e8f090bd797": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "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_cb5c48d240314bf6bde44a1b812bba13", - "placeholder": "​", - "style": "IPY_MODEL_4d90dd7976d9433c9c5116084617c4db", - "value": "Downloading data: 100%" - } - }, - "606a2af9bcfe48c5bfab251641d3eb4d": { - "model_module": "@jupyter-widgets/controls", - "model_name": "FloatProgressModel", - "model_module_version": "1.5.0", - "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_104ba351ac424478b99af5afb269f50b", - "max": 73452198, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_d25a5f47513546e9ba0280ce37f90954", - "value": 73452198 - } - }, - "a91df8bf36c64d298b0ca5ff16615560": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "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_0c0c5f75bdc0456390c54944bf080e7a", - "placeholder": "​", - "style": "IPY_MODEL_86d1d169e33a44f48d181b2a9036f0aa", - "value": " 73.5M/73.5M [00:01<00:00, 56.4MB/s]" - } - }, - "e590655fe91f4e2f83e38f399aef7aef": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "cb5c48d240314bf6bde44a1b812bba13": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "4d90dd7976d9433c9c5116084617c4db": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "104ba351ac424478b99af5afb269f50b": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "d25a5f47513546e9ba0280ce37f90954": { - "model_module": "@jupyter-widgets/controls", - "model_name": "ProgressStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "0c0c5f75bdc0456390c54944bf080e7a": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "86d1d169e33a44f48d181b2a9036f0aa": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "789c5bfc4af14885b4564b72df0b4d18": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HBoxModel", - "model_module_version": "1.5.0", - "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_3b6d0e34fae941c28179f72066267401", - "IPY_MODEL_d94f5c1212af4aabb8bf34ff573839fb", - "IPY_MODEL_0a81395f678444b2b2d1fb5a5f908320" - ], - "layout": "IPY_MODEL_3c9b936b14b146519bc23f0272f047ed" - } - }, - "3b6d0e34fae941c28179f72066267401": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "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_858b305d13a74c9e87a1d2cf5c1098e4", - "placeholder": "​", - "style": "IPY_MODEL_61eef69e55c344b299885c9bbc4e7eef", - "value": "Extracting data files: 100%" - } - }, - "d94f5c1212af4aabb8bf34ff573839fb": { - "model_module": "@jupyter-widgets/controls", - "model_name": "FloatProgressModel", - "model_module_version": "1.5.0", - "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_dc635d5bde1840629f35ffb221061857", - "max": 1, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_75d05f142e9248eca7722b80be57c93b", - "value": 1 - } - }, - "0a81395f678444b2b2d1fb5a5f908320": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "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_aa953c2926b04db8a0b20a13fc1e842b", - "placeholder": "​", - "style": "IPY_MODEL_c6e848c6e88e40b58034e6003586cc77", - "value": " 1/1 [00:01<00:00, 1.61s/it]" - } - }, - "3c9b936b14b146519bc23f0272f047ed": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "858b305d13a74c9e87a1d2cf5c1098e4": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "61eef69e55c344b299885c9bbc4e7eef": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "dc635d5bde1840629f35ffb221061857": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "75d05f142e9248eca7722b80be57c93b": { - "model_module": "@jupyter-widgets/controls", - "model_name": "ProgressStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "aa953c2926b04db8a0b20a13fc1e842b": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "c6e848c6e88e40b58034e6003586cc77": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "b55a59606e314cc8861b517687b2d0bf": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HBoxModel", - "model_module_version": "1.5.0", - "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_9f61dd1020964b35910183ed266b287c", - "IPY_MODEL_62132a1e46df4a329d726f69f6dce92f", - "IPY_MODEL_0e0b120d834b484aa680bc63945da492" - ], - "layout": "IPY_MODEL_c7ce9697559b4773a210fc933d991ee9" - } - }, - "9f61dd1020964b35910183ed266b287c": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "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_cc709c0ed32d431b942c10d039509ea4", - "placeholder": "​", - "style": "IPY_MODEL_7817dacc02df40de951184238be79a1f", - "value": "Writing Documents: 100%" - } - }, - "62132a1e46df4a329d726f69f6dce92f": { - "model_module": "@jupyter-widgets/controls", - "model_name": "FloatProgressModel", - "model_module_version": "1.5.0", - "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_290cba77d2e14866a84757559b6d13f9", - "max": 10000, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_d5d2ff8d0eff4b4fb34d62b5e313e2bb", - "value": 10000 - } - }, - "0e0b120d834b484aa680bc63945da492": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "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_dbb556b4871448678e8a98eec9fe6e99", - "placeholder": "​", - "style": "IPY_MODEL_014e78bcdab747ea87e8878cfa50e58c", - "value": " 10000/10000 [00:17<00:00, 580.35it/s]" - } - }, - "c7ce9697559b4773a210fc933d991ee9": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "cc709c0ed32d431b942c10d039509ea4": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "7817dacc02df40de951184238be79a1f": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "290cba77d2e14866a84757559b6d13f9": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "d5d2ff8d0eff4b4fb34d62b5e313e2bb": { - "model_module": "@jupyter-widgets/controls", - "model_name": "ProgressStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "dbb556b4871448678e8a98eec9fe6e99": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "014e78bcdab747ea87e8878cfa50e58c": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "1deab9a940b84414bcb4091919b43822": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HBoxModel", - "model_module_version": "1.5.0", - "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_90d4c18b24794604b9abdd20ce363fd0", - "IPY_MODEL_d9b0b257a6d141988ba853619b4423be", - "IPY_MODEL_bbb77c70b0c041728f72ffa59690c0d8" - ], - "layout": "IPY_MODEL_2e56cb0999b4431ea72d4b653ce2fd95" - } - }, - "90d4c18b24794604b9abdd20ce363fd0": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "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_4b1eaa100dfd4c31b191938590d61df8", - "placeholder": "​", - "style": "IPY_MODEL_6d175ccf32ff4e719e63789068d9309f", - "value": "Documents Processed: 100%" - } - }, - "d9b0b257a6d141988ba853619b4423be": { - "model_module": "@jupyter-widgets/controls", - "model_name": "FloatProgressModel", - "model_module_version": "1.5.0", - "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_287abba30115429cb5582a329a3a10d3", - "max": 10000, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_7dfe07e1c9c54488898a8f6580b19c74", - "value": 10000 - } - }, - "bbb77c70b0c041728f72ffa59690c0d8": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "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_981fa6d543a84d849a948a429982d40f", - "placeholder": "​", - "style": "IPY_MODEL_4f38f178557146f6898acc2f2e315193", - "value": " 10000/10000 [00:37<00:00, 265.35 docs/s]" - } - }, - "2e56cb0999b4431ea72d4b653ce2fd95": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "4b1eaa100dfd4c31b191938590d61df8": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "6d175ccf32ff4e719e63789068d9309f": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "287abba30115429cb5582a329a3a10d3": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "7dfe07e1c9c54488898a8f6580b19c74": { - "model_module": "@jupyter-widgets/controls", - "model_name": "ProgressStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "981fa6d543a84d849a948a429982d40f": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "4f38f178557146f6898acc2f2e315193": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "658ec2716eef477ba9352b88c071edb3": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HBoxModel", - "model_module_version": "1.5.0", - "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_22e0e185ea4e400d801ecbb6fbc1010d", - "IPY_MODEL_43705eaef74343ad947347daf16f0368", - "IPY_MODEL_1165ef02ac4b42b0b170cc1d6f07aff5" - ], - "layout": "IPY_MODEL_7d35694ea4e542759fabf149a8599f35" - } - }, - "22e0e185ea4e400d801ecbb6fbc1010d": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "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_38fa23b444d348bbbb5dbe161237803d", - "placeholder": "​", - "style": "IPY_MODEL_555dd2ebf4d64829b5c303548b44082e", - "value": "Downloading data files: 100%" - } - }, - "43705eaef74343ad947347daf16f0368": { - "model_module": "@jupyter-widgets/controls", - "model_name": "FloatProgressModel", - "model_module_version": "1.5.0", - "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_b958d7ee15e74179a863acda8eb665ae", - "max": 1, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_855504c2806644feb5e019245d303ebf", - "value": 1 - } - }, - "1165ef02ac4b42b0b170cc1d6f07aff5": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "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_af57cd12f7a941d6a1333852424fd59e", - "placeholder": "​", - "style": "IPY_MODEL_911e4033f49949bd920153c06985fe12", - "value": " 1/1 [00:01<00:00, 1.22s/it]" - } - }, - "7d35694ea4e542759fabf149a8599f35": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "38fa23b444d348bbbb5dbe161237803d": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "555dd2ebf4d64829b5c303548b44082e": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "b958d7ee15e74179a863acda8eb665ae": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "855504c2806644feb5e019245d303ebf": { - "model_module": "@jupyter-widgets/controls", - "model_name": "ProgressStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "af57cd12f7a941d6a1333852424fd59e": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "911e4033f49949bd920153c06985fe12": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "28d5d91e9b9b43da91c0e5c573efa1cb": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HBoxModel", - "model_module_version": "1.5.0", - "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_3403a62df1d34ec4adca55a0a5681e8c", - "IPY_MODEL_ec7a49d85ccb4e49b0c0381a3dbfb168", - "IPY_MODEL_493bb9405adb432c845d530e0350ae2e" - ], - "layout": "IPY_MODEL_96956e51fc304238858609b26ae8102b" - } - }, - "3403a62df1d34ec4adca55a0a5681e8c": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "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_daf3c317d4894cfaa80a7d96395c37b6", - "placeholder": "​", - "style": "IPY_MODEL_016a8e953a9b42b4b8b094dea38708d8", - "value": "Downloading data: 100%" - } - }, - "ec7a49d85ccb4e49b0c0381a3dbfb168": { - "model_module": "@jupyter-widgets/controls", - "model_name": "FloatProgressModel", - "model_module_version": "1.5.0", - "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_02056a2a72264fa5be6e94ed4e6b91e5", - "max": 6615180, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_8f8b7c49002e4a94b0c637e890bd2caa", - "value": 6615180 - } - }, - "493bb9405adb432c845d530e0350ae2e": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "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_c99adc13091b42a0bf23410653f1d93f", - "placeholder": "​", - "style": "IPY_MODEL_3fa9514faa084a0c968e361a623128dd", - "value": " 6.62M/6.62M [00:00<00:00, 32.4MB/s]" - } - }, - "96956e51fc304238858609b26ae8102b": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "daf3c317d4894cfaa80a7d96395c37b6": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "016a8e953a9b42b4b8b094dea38708d8": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "02056a2a72264fa5be6e94ed4e6b91e5": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "8f8b7c49002e4a94b0c637e890bd2caa": { - "model_module": "@jupyter-widgets/controls", - "model_name": "ProgressStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "c99adc13091b42a0bf23410653f1d93f": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "3fa9514faa084a0c968e361a623128dd": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "1005c994a7474d58a080e57761984dc7": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HBoxModel", - "model_module_version": "1.5.0", - "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_6a86190b99f14c04a01a5a8517f38074", - "IPY_MODEL_91c8408f993a4279911098a65b047972", - "IPY_MODEL_f97096d0659240f2a198c8b77b850b73" - ], - "layout": "IPY_MODEL_8ec7f03eb6104a6793c59d79b0e6e6b0" - } - }, - "6a86190b99f14c04a01a5a8517f38074": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "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_96b9948a927745e59374fb73ec645590", - "placeholder": "​", - "style": "IPY_MODEL_4880111e28a040bc947c89675f55dc0c", - "value": "Extracting data files: 100%" - } - }, - "91c8408f993a4279911098a65b047972": { - "model_module": "@jupyter-widgets/controls", - "model_name": "FloatProgressModel", - "model_module_version": "1.5.0", - "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_b9c8f1ff6beb4806bd0d8924bbc7d70b", - "max": 1, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_cc3f9df0bdfe45ffa79fd553112a3b2f", - "value": 1 - } - }, - "f97096d0659240f2a198c8b77b850b73": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "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_b847ec0ae92745c3b4faf2d89a7be372", - "placeholder": "​", - "style": "IPY_MODEL_17be129a9ad247e9831ca45f154f09cb", - "value": " 1/1 [00:00<00:00, 4.01it/s]" - } - }, - "8ec7f03eb6104a6793c59d79b0e6e6b0": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "96b9948a927745e59374fb73ec645590": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "4880111e28a040bc947c89675f55dc0c": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "b9c8f1ff6beb4806bd0d8924bbc7d70b": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "cc3f9df0bdfe45ffa79fd553112a3b2f": { - "model_module": "@jupyter-widgets/controls", - "model_name": "ProgressStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "b847ec0ae92745c3b4faf2d89a7be372": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "17be129a9ad247e9831ca45f154f09cb": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "df7b44cace0341a9ae3fa880725f7fe4": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HBoxModel", - "model_module_version": "1.5.0", - "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_850b4255d4594107932fba634df72870", - "IPY_MODEL_aa8135ebede84da8bffe7f0d354dec95", - "IPY_MODEL_285792a90591460f8b905c1daf3742fa" - ], - "layout": "IPY_MODEL_61199f51f20d42df8fa867a4a82c8d4b" - } - }, - "850b4255d4594107932fba634df72870": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "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_31264e016e734912b33bac07ea74c13c", - "placeholder": "​", - "style": "IPY_MODEL_78bccffce5ec4522b84d9bc88217f606", - "value": "Downloading: 100%" - } - }, - "aa8135ebede84da8bffe7f0d354dec95": { - "model_module": "@jupyter-widgets/controls", - "model_name": "FloatProgressModel", - "model_module_version": "1.5.0", - "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_d1028abba3cd4f19956d7529f5763a73", - "max": 794, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_89b586c2d41742609b2f41dc1d95724f", - "value": 794 - } - }, - "285792a90591460f8b905c1daf3742fa": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "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_b0514f0e2a11421093ca7b3e2119aecf", - "placeholder": "​", - "style": "IPY_MODEL_1c852bf85594429a985e6e0a4bc0d434", - "value": " 794/794 [00:00<00:00, 21.1kB/s]" - } - }, - "61199f51f20d42df8fa867a4a82c8d4b": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "31264e016e734912b33bac07ea74c13c": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "78bccffce5ec4522b84d9bc88217f606": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "d1028abba3cd4f19956d7529f5763a73": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "89b586c2d41742609b2f41dc1d95724f": { - "model_module": "@jupyter-widgets/controls", - "model_name": "ProgressStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "b0514f0e2a11421093ca7b3e2119aecf": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "1c852bf85594429a985e6e0a4bc0d434": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "e6cfff04414846f2805b7a74ac4ac4da": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HBoxModel", - "model_module_version": "1.5.0", - "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_7887c461fc2d495faed1f89d1500392d", - "IPY_MODEL_f2579bcd443244b381471db1ff178192", - "IPY_MODEL_36cd28cae89a4b008eefeacda0cb073d" - ], - "layout": "IPY_MODEL_21e0243802bc463bab05ab2e581da98f" - } - }, - "7887c461fc2d495faed1f89d1500392d": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "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_5b54e4a2fc42446b8ea87d69ed940e72", - "placeholder": "​", - "style": "IPY_MODEL_85f1ee971210433b81a6781d15221ed2", - "value": "Downloading: 100%" - } - }, - "f2579bcd443244b381471db1ff178192": { - "model_module": "@jupyter-widgets/controls", - "model_name": "FloatProgressModel", - "model_module_version": "1.5.0", - "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_063397694c21442b9ad235d9537380ff", - "max": 90903017, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_30eb2731efad45beaa0addad42a8e760", - "value": 90903017 - } - }, - "36cd28cae89a4b008eefeacda0cb073d": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "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_496d3adaa9964e70a2bea427179f2b38", - "placeholder": "​", - "style": "IPY_MODEL_f8281fff94bf4f7181ebf366713b5257", - "value": " 86.7M/86.7M [00:01<00:00, 64.8MB/s]" - } - }, - "21e0243802bc463bab05ab2e581da98f": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "5b54e4a2fc42446b8ea87d69ed940e72": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "85f1ee971210433b81a6781d15221ed2": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "063397694c21442b9ad235d9537380ff": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "30eb2731efad45beaa0addad42a8e760": { - "model_module": "@jupyter-widgets/controls", - "model_name": "ProgressStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "496d3adaa9964e70a2bea427179f2b38": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "f8281fff94bf4f7181ebf366713b5257": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "a4b3da8b4b6a45be94013fe9fb893c1a": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HBoxModel", - "model_module_version": "1.5.0", - "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_1c5b4ebe7a5e4f5e87b627787f811903", - "IPY_MODEL_2b6e82476bf8487baa50fc3e90e3cad7", - "IPY_MODEL_7cbada4a9e5d451199d268d6ff041d26" - ], - "layout": "IPY_MODEL_63959744f8e1449f9d587be3bc2ce09f" - } - }, - "1c5b4ebe7a5e4f5e87b627787f811903": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "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_e8feb9c4c4de4a89adfe1244c707840e", - "placeholder": "​", - "style": "IPY_MODEL_ec74ec1a3bd74bb3b6bd3ce06becd92e", - "value": "Downloading: 100%" - } - }, - "2b6e82476bf8487baa50fc3e90e3cad7": { - "model_module": "@jupyter-widgets/controls", - "model_name": "FloatProgressModel", - "model_module_version": "1.5.0", - "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_7a82a0c88e6140919c50e28dda76a1c0", - "max": 316, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_3075167a294f40b19a5ecaf687a68b0e", - "value": 316 - } - }, - "7cbada4a9e5d451199d268d6ff041d26": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "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_507ac7d898ee4519acc62c52d6f6f098", - "placeholder": "​", - "style": "IPY_MODEL_76488e607fd34301bd4bd055f120e4d2", - "value": " 316/316 [00:00<00:00, 12.3kB/s]" - } - }, - "63959744f8e1449f9d587be3bc2ce09f": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "e8feb9c4c4de4a89adfe1244c707840e": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "ec74ec1a3bd74bb3b6bd3ce06becd92e": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "7a82a0c88e6140919c50e28dda76a1c0": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "3075167a294f40b19a5ecaf687a68b0e": { - "model_module": "@jupyter-widgets/controls", - "model_name": "ProgressStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "507ac7d898ee4519acc62c52d6f6f098": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "76488e607fd34301bd4bd055f120e4d2": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "2a64b65034be47b384c2f4255fa58ad7": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HBoxModel", - "model_module_version": "1.5.0", - "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_afc8ef8ffb71405e80ca8f0d14a00fb2", - "IPY_MODEL_286a0703dfb04cf19f84cd6c8754c2fb", - "IPY_MODEL_e18dca23ed0a416fbf10cd9bf8be5710" - ], - "layout": "IPY_MODEL_d3c5d3f9dc8b4bf592e061ecda68705a" - } - }, - "afc8ef8ffb71405e80ca8f0d14a00fb2": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "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_446c2b5c7b6546b59ec0a26ee937a2db", - "placeholder": "​", - "style": "IPY_MODEL_8f670f3ef43940689841efbebd232d95", - "value": "Downloading: 100%" - } - }, - "286a0703dfb04cf19f84cd6c8754c2fb": { - "model_module": "@jupyter-widgets/controls", - "model_name": "FloatProgressModel", - "model_module_version": "1.5.0", - "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_02c89827de7845ff90f4eb2d4a52debd", - "max": 231508, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_86d9df7327994474b574ef325be7ce33", - "value": 231508 - } - }, - "e18dca23ed0a416fbf10cd9bf8be5710": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "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_6bef9fdd841343749761788c3b674810", - "placeholder": "​", - "style": "IPY_MODEL_4c5d7fd3bd2e4d32a02cca7c3c3d8401", - "value": " 226k/226k [00:00<00:00, 745kB/s]" - } - }, - "d3c5d3f9dc8b4bf592e061ecda68705a": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "446c2b5c7b6546b59ec0a26ee937a2db": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "8f670f3ef43940689841efbebd232d95": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "02c89827de7845ff90f4eb2d4a52debd": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "86d9df7327994474b574ef325be7ce33": { - "model_module": "@jupyter-widgets/controls", - "model_name": "ProgressStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "6bef9fdd841343749761788c3b674810": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "4c5d7fd3bd2e4d32a02cca7c3c3d8401": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "00f9f0cc878a44bab7147bfae4d30faa": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HBoxModel", - "model_module_version": "1.5.0", - "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_0b837782c9954abe8bba7b49ed70f480", - "IPY_MODEL_12a2c9dbe85147259bdda637f8b42ff0", - "IPY_MODEL_b0ef5d17cedc49b9b4844d84e5e33a54" - ], - "layout": "IPY_MODEL_d20c555e79ef4fcaa8125194fe06e8f7" - } - }, - "0b837782c9954abe8bba7b49ed70f480": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "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_72f966290e564e15af489d5e996adf8c", - "placeholder": "​", - "style": "IPY_MODEL_2bd5646690d341fc92198bfade7ce162", - "value": "Downloading: 100%" - } - }, - "12a2c9dbe85147259bdda637f8b42ff0": { - "model_module": "@jupyter-widgets/controls", - "model_name": "FloatProgressModel", - "model_module_version": "1.5.0", - "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_50912a1a4d4c47ae9227396e70099871", - "max": 112, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_ae937c844d3644beb8f7e12135ed54aa", - "value": 112 - } - }, - "b0ef5d17cedc49b9b4844d84e5e33a54": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "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_af54155a139d4c489d1b18bf05a52073", - "placeholder": "​", - "style": "IPY_MODEL_169c1c9aeef14dd098649151fe0d97b7", - "value": " 112/112 [00:00<00:00, 4.77kB/s]" - } - }, - "d20c555e79ef4fcaa8125194fe06e8f7": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "72f966290e564e15af489d5e996adf8c": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "2bd5646690d341fc92198bfade7ce162": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "50912a1a4d4c47ae9227396e70099871": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "ae937c844d3644beb8f7e12135ed54aa": { - "model_module": "@jupyter-widgets/controls", - "model_name": "ProgressStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "af54155a139d4c489d1b18bf05a52073": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "169c1c9aeef14dd098649151fe0d97b7": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "88e8c70157394d948622222a4182cce1": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HBoxModel", - "model_module_version": "1.5.0", - "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_4edef57a51b7463580150d46991b2129", - "IPY_MODEL_0cff307249ac498ba653e5dfc276be23", - "IPY_MODEL_3dc6fda324af4951a3555a6b7fc910c3" - ], - "layout": "IPY_MODEL_2af94661f1624fbe8096dc931526afa3" - } - }, - "4edef57a51b7463580150d46991b2129": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "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_193fff9fa06c41129be0d78c7dd417a8", - "placeholder": "​", - "style": "IPY_MODEL_abada19d5c9942b1aebf687415fec113", - "value": "Mine negatives: 100%" - } - }, - "0cff307249ac498ba653e5dfc276be23": { - "model_module": "@jupyter-widgets/controls", - "model_name": "FloatProgressModel", - "model_module_version": "1.5.0", - "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_fc41f48deedf4d558424046e4eabd839", - "max": 938, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_ecc4533fe4d24043a7ef8441c3dd47af", - "value": 938 - } - }, - "3dc6fda324af4951a3555a6b7fc910c3": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "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_9c0816a84b244b17b1c123a9bee0183d", - "placeholder": "​", - "style": "IPY_MODEL_76a6db2dbb1c425cbaae8333ab5e6156", - "value": " 938/938 [05:55<00:00, 3.06it/s]" - } - }, - "2af94661f1624fbe8096dc931526afa3": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "193fff9fa06c41129be0d78c7dd417a8": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "abada19d5c9942b1aebf687415fec113": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "fc41f48deedf4d558424046e4eabd839": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "ecc4533fe4d24043a7ef8441c3dd47af": { - "model_module": "@jupyter-widgets/controls", - "model_name": "ProgressStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "9c0816a84b244b17b1c123a9bee0183d": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "76a6db2dbb1c425cbaae8333ab5e6156": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "3ce4551215454a1fb88776f32069608e": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HBoxModel", - "model_module_version": "1.5.0", - "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_6018cc1ac79b4123af03b2912dcced00", - "IPY_MODEL_33b5eaec0a4a45c8bcf56d8462849907", - "IPY_MODEL_02da1cb6e892445ebb98aa7f2d5e145d" - ], - "layout": "IPY_MODEL_41e37f7fc7464f1888e88025468007cf" - } - }, - "6018cc1ac79b4123af03b2912dcced00": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "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_8fa21a0f9ff24856987fbc0643de3b8c", - "placeholder": "​", - "style": "IPY_MODEL_20a7dbfe735d45b79c4290335130531b", - "value": "Score margin: 100%" - } - }, - "33b5eaec0a4a45c8bcf56d8462849907": { - "model_module": "@jupyter-widgets/controls", - "model_name": "FloatProgressModel", - "model_module_version": "1.5.0", - "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_aba2910f0f7b4bd99c406f22928dbc10", - "max": 938, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_b77ecf77dc7842c980ef011a02791d4c", - "value": 938 - } - }, - "02da1cb6e892445ebb98aa7f2d5e145d": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "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_5165631eec2144809974b738d8148441", - "placeholder": "​", - "style": "IPY_MODEL_2c528f7458a04a9091ba5167aedd7c6e", - "value": " 938/938 [03:52<00:00, 4.68it/s]" - } - }, - "41e37f7fc7464f1888e88025468007cf": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "8fa21a0f9ff24856987fbc0643de3b8c": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "20a7dbfe735d45b79c4290335130531b": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "aba2910f0f7b4bd99c406f22928dbc10": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "b77ecf77dc7842c980ef011a02791d4c": { - "model_module": "@jupyter-widgets/controls", - "model_name": "ProgressStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "5165631eec2144809974b738d8148441": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "2c528f7458a04a9091ba5167aedd7c6e": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "730bc1812f2f46719b22a2e826e0e6ca": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HBoxModel", - "model_module_version": "1.5.0", - "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_321ba4e861514b42aaf908bba2a94ea1", - "IPY_MODEL_f177e048c2c14d9f8323613c0dfdec2a", - "IPY_MODEL_c39b9a24a9d3463aa36943fdf06c7f19" - ], - "layout": "IPY_MODEL_cffdd4c806954594baf574f84a2db673" - } - }, - "321ba4e861514b42aaf908bba2a94ea1": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "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_c1dfcbeb609347cb858eae1a80ca8349", - "placeholder": "​", - "style": "IPY_MODEL_668ca8caeb28420dbbdd7107d79a3b38", - "value": "Epoch: 100%" - } - }, - "f177e048c2c14d9f8323613c0dfdec2a": { - "model_module": "@jupyter-widgets/controls", - "model_name": "FloatProgressModel", - "model_module_version": "1.5.0", - "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_8b5b2744f1944c7fb5c51db030e4c835", - "max": 1, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_b0951607b490415d90ee1b5c4299a88c", - "value": 1 - } - }, - "c39b9a24a9d3463aa36943fdf06c7f19": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "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_783c64f95da74665a5f8aba6425cd407", - "placeholder": "​", - "style": "IPY_MODEL_fbd0839163ae4720b6a02316130acd93", - "value": " 1/1 [10:32<00:00, 632.76s/it]" - } - }, - "cffdd4c806954594baf574f84a2db673": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "c1dfcbeb609347cb858eae1a80ca8349": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "668ca8caeb28420dbbdd7107d79a3b38": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "8b5b2744f1944c7fb5c51db030e4c835": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "b0951607b490415d90ee1b5c4299a88c": { - "model_module": "@jupyter-widgets/controls", - "model_name": "ProgressStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "783c64f95da74665a5f8aba6425cd407": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "fbd0839163ae4720b6a02316130acd93": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "841058f87e3a48108576b149935cf49b": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HBoxModel", - "model_module_version": "1.5.0", - "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_a389c9c7488d44dea6832b032314eeb9", - "IPY_MODEL_5168416cca5846a293502d974b82aa4d", - "IPY_MODEL_adaee0deb50a4a2886ab94949ab5ee16" - ], - "layout": "IPY_MODEL_bcadde753b2c44c38d8297b7275730a8" - } - }, - "a389c9c7488d44dea6832b032314eeb9": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "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_55b3a3bdd6234cda9e21e9c07cfc3b9b", - "placeholder": "​", - "style": "IPY_MODEL_b7f51a70ff254f6bac579d5565e527bd", - "value": "Iteration: 100%" - } - }, - "5168416cca5846a293502d974b82aa4d": { - "model_module": "@jupyter-widgets/controls", - "model_name": "FloatProgressModel", - "model_module_version": "1.5.0", - "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_42354e4a77a04415bf9755d800db7e1f", - "max": 1875, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_61c043e6c67d4eea95d2bdf3a52a452d", - "value": 1875 - } - }, - "adaee0deb50a4a2886ab94949ab5ee16": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "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_005435c1261f43a4be0d9a5813bf80c7", - "placeholder": "​", - "style": "IPY_MODEL_b1c78ee7f1eb4695b8a43296820dcfd5", - "value": " 1875/1875 [10:32<00:00, 2.97it/s]" - } - }, - "bcadde753b2c44c38d8297b7275730a8": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "55b3a3bdd6234cda9e21e9c07cfc3b9b": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "b7f51a70ff254f6bac579d5565e527bd": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "42354e4a77a04415bf9755d800db7e1f": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "61c043e6c67d4eea95d2bdf3a52a452d": { - "model_module": "@jupyter-widgets/controls", - "model_name": "ProgressStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - }, - "005435c1261f43a4be0d9a5813bf80c7": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "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 - } - }, - "b1c78ee7f1eb4695b8a43296820dcfd5": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "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": "" - } - } - } - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} \ No newline at end of file diff --git a/tutorials/Tutorial18_GPL.py b/tutorials/Tutorial18_GPL.py deleted file mode 100644 index e5affe9a5f..0000000000 --- a/tutorials/Tutorial18_GPL.py +++ /dev/null @@ -1,258 +0,0 @@ -# -*- coding: utf-8 -*- -"""Generative-Pseudo-Labeling-for-Domain-Adaptation-of-Dense-Retrievals.ipynb - -Automatically generated by Colaboratory. - -Original file is located at - https://colab.research.google.com/drive/1Tz9GSzre7JfvXDDKe7sCnO0FMuDViMnN - -# Generative Pseudo Labeling for Domain Adaptation of Dense Retrievals -#### Note: Adapted to Haystack from Nils Riemers' original [notebook](https://colab.research.google.com/gist/jamescalam/d2c888775c87f9882bb7c379a96adbc8/gpl-domain-adaptation.ipynb#scrollTo=183ff7ab). - -The NLP models we use every day were trained on a corpus of data that reflects the world from the past. In the meantime, we've experienced world-changing events, like the COVID pandemics, and we'd like our models to know about them. Training a model from scratch is tedious work but what if we could just update the models with new data? Generative Pseudo Labeling comes to the rescue. - -The example below shows you how to use GPL to fine-tune a model so that it can answer the query: "How is COVID-19 transmitted?". - -We're using TAS-B: A DistilBERT model that achieves state-of-the-art performance on MS MARCO (500k queries from Bing Search Engine). Both DistilBERT and MS MARCO were created with data from 2018 and before, hence, it lacks the knowledge of any COVID-related information. - -For this example, we're using just four documents. When you ask the model ""How is COVID-19 transmitted?", here are the answers that you get (dot-score and document): -- 94.84 Ebola is transmitted via direct contact with blood -- 92.87 HIV is transmitted via sex or sharing needles -- 92.31 Corona is transmitted via the air -- 91.54 Polio is transmitted via contaminated water or food - - -You can see that the correct document is only third, outranked by Ebola and HIV information. Let's see how we can make this better. - -## Efficient Domain Adaptation with GPL -This notebook demonstrates [Generative Pseudo Labeling (GPL)](https://arxiv.org/abs/2112.07577), an efficient approach to adapt existing dense retrieval models to new domains and data. - -We get a collection of 10k scientific papers on COVID-19 and then fine-tune the model within 15-60 minutes (depending on your GPU) so that includes the COVID knowledge. - -If we search again with the updated model, we get the search results we would expect: -- Query: How is COVID-19 transmitted -- 97.70 Corona is transmitted via the air -- 96.71 Ebola is transmitted via direct contact with blood -- 95.14 Polio is transmitted via contaminated water or food -- 94.13 HIV is transmitted via sex or sharing needles -""" - -import logging - -# We configure how logging messages should be displayed and which log level should be used before importing Haystack. -# Example log message: -# INFO - haystack.utils.preprocessing - Converting data/tutorial1/218_Olenna_Tyrell.txt -# Default log level in basicConfig is WARNING so the explicit parameter is not necessary but can be changed easily: -logging.basicConfig(format="%(levelname)s - %(name)s - %(message)s", level=logging.WARNING) -logging.getLogger("haystack").setLevel(logging.INFO) - -from sentence_transformers import SentenceTransformer, util -from transformers import AutoTokenizer, AutoModelForSeq2SeqLM -from datasets import load_dataset - - -def tutorial18_gpl(): - # We load the TAS-B model, a state-of-the-art model trained on MS MARCO - max_seq_length = 200 - model_name = "msmarco-distilbert-base-tas-b" - - org_model = SentenceTransformer(model_name) - org_model.max_seq_length = max_seq_length - - # We define a simple query and some documents how diseases are transmitted - # As TAS-B was trained on rather out-dated data (2018 and older), it has now idea about COVID-19 - # So in the below example, it fails to recognize the relationship between COVID-19 and Corona - - def show_examples(model): - query = "How is COVID-19 transmitted" - docs = [ - "Corona is transmitted via the air", - "Ebola is transmitted via direct contact with blood", - "HIV is transmitted via sex or sharing needles", - "Polio is transmitted via contaminated water or food", - ] - - query_emb = model.encode(query) - docs_emb = model.encode(docs) - scores = util.dot_score(query_emb, docs_emb)[0] - doc_scores = sorted(zip(docs, scores), key=lambda x: x[1], reverse=True) - - print("Query:", query) - for doc, score in doc_scores: - # print(doc, score) - print(f"{score:0.02f}\t{doc}") - - print("Original Model") - show_examples(org_model) - - """# Get Some Data on COVID-19 - We select 10k scientific publications (title + abstract) that are connected to COVID-19. As a dataset, we use [TREC-COVID-19](https://huggingface.co/datasets/nreimers/trec-covid). - """ - - dataset = load_dataset("nreimers/trec-covid", split="train") - num_documents = 10000 - corpus = [] - for row in dataset: - if len(row["title"]) > 20 and len(row["text"]) > 100: - text = row["title"] + " " + row["text"] - - text_lower = text.lower() - - # The dataset also contains many papers on other diseases. To make the training in this demo - # more efficient, we focus on papers that talk about COVID. - if "covid" in text_lower or "corona" in text_lower or "sars-cov-2" in text_lower: - corpus.append(text) - - if len(corpus) >= num_documents: - break - - print("Len Corpus:", len(corpus)) - - """# Initialize Haystack Retriever and DocumentStore - - Let's add corpus documents to `FAISSDocumentStore` and update corpus embeddings via `EmbeddingRetriever` - """ - - from haystack.nodes.retriever import EmbeddingRetriever - from haystack.document_stores import FAISSDocumentStore - - document_store = FAISSDocumentStore(faiss_index_factory_str="Flat", similarity="cosine") - document_store.write_documents([{"content": t} for t in corpus]) - - retriever = EmbeddingRetriever( - document_store=document_store, - embedding_model="sentence-transformers/msmarco-distilbert-base-tas-b", - model_format="sentence_transformers", - max_seq_len=max_seq_length, - progress_bar=False, - ) - document_store.update_embeddings(retriever) - - """## (Optional) Download Pre-Generated Questions or Generate Them Outside of Haystack - - The first step of the GPL algorithm requires us to generate questions for a given text passage. Even though our pre-COVID trained model hasn't seen any COVID-related content, it can still produce sensible queries by copying words from the input text. As generating questions from 10k documents is a bit slow (depending on the GPU used), we'll download question/document pairs directly from the Hugging Face hub. - - """ - - from tqdm.auto import tqdm - - query_doc_pairs = [] - - load_queries_from_hub = True - - # Generation of the queries is quite slow in Colab due to the old GPU and the limited CPU - # I pre-computed the queries and uploaded these to the HF dataset hub. Here we just download them - if load_queries_from_hub: - generated_queries = load_dataset("nreimers/trec-covid-generated-queries", split="train") - for row in generated_queries: - query_doc_pairs.append({"question": row["query"], "document": row["doc"]}) - else: - # Load doc2query model - t5_name = "doc2query/msmarco-t5-base-v1" - t5_tokenizer = AutoTokenizer.from_pretrained(t5_name) - t5_model = AutoModelForSeq2SeqLM.from_pretrained(t5_name).cuda() - - batch_size = 32 - queries_per_doc = 3 - - for start_idx in tqdm(range(0, len(corpus), batch_size)): - corpus_batch = corpus[start_idx : start_idx + batch_size] - enc_inp = t5_tokenizer( - corpus_batch, max_length=max_seq_length, truncation=True, padding=True, return_tensors="pt" - ) - - outputs = t5_model.generate( - input_ids=enc_inp["input_ids"].cuda(), - attention_mask=enc_inp["attention_mask"].cuda(), - max_length=64, - do_sample=True, - top_p=0.95, - num_return_sequences=queries_per_doc, - ) - - decoded_output = t5_tokenizer.batch_decode(outputs, skip_special_tokens=True) - - for idx, query in enumerate(decoded_output): - corpus_id = int(idx / queries_per_doc) - query_doc_pairs.append({"question": query, "document": corpus_batch[corpus_id]}) - - print("Generated queries:", len(query_doc_pairs)) - - """# Use PseudoLabelGenerator to Genenerate Retriever Adaptation Training Data - - PseudoLabelGenerator run will execute all three steps of the GPL [algorithm](https://github.com/UKPLab/gpl#how-does-gpl-work): - 1. Question generation - optional step - 2. Negative mining - 3. Pseudo labeling (margin scoring) - - The output of the `PseudoLabelGenerator` is the training data we'll use to adapt our `EmbeddingRetriever`. - - """ - - from haystack.nodes.question_generator import QuestionGenerator - from haystack.nodes.label_generator import PseudoLabelGenerator - - use_question_generator = False - - if use_question_generator: - questions_producer = QuestionGenerator( - model_name_or_path="doc2query/msmarco-t5-base-v1", - max_length=64, - split_length=128, - batch_size=32, - num_queries_per_doc=3, - ) - - else: - questions_producer = query_doc_pairs - - # We can use either QuestionGenerator or already generated questions in PseudoLabelGenerator - psg = PseudoLabelGenerator(questions_producer, retriever, max_questions_per_document=10, batch_size=32, top_k=10) - output, pipe_id = psg.run(documents=document_store.get_all_documents()) - - """# Update the Retriever - - Now that we have the generated training data produced by `PseudoLabelGenerator`, we'll update the `EmbeddingRetriever`. Let's take a peek at the training data. - """ - - output["gpl_labels"][0] - - len(output["gpl_labels"]) - - retriever.train(output["gpl_labels"]) - - """## Verify that EmbeddingRetriever Is Adapted and Save It For Future Use - - Let's repeat our query to see if the Retriever learned about COVID and can now rank it as #1 among the answers. - - """ - - print("Original Model") - show_examples(org_model) - - print("\n\nAdapted Model") - show_examples(retriever.embedding_encoder.embedding_model) - - retriever.save("adapted_retriever") - - -if __name__ == "__main__": - tutorial18_gpl() - -# ## About us -# -# This [Haystack](https://github.com/deepset-ai/haystack/) notebook was made with love by [deepset](https://deepset.ai/) in Berlin, Germany -# -# We bring NLP to the industry via open source! -# Our focus: Industry specific language models & large scale QA systems. -# -# Some of our other work: -# - [German BERT](https://deepset.ai/german-bert) -# - [GermanQuAD and GermanDPR](https://deepset.ai/germanquad) -# - [FARM](https://github.com/deepset-ai/FARM) -# -# Get in touch: -# [Twitter](https://twitter.com/deepset_ai) | [LinkedIn](https://www.linkedin.com/company/deepset-ai/) | [Slack](https://haystack.deepset.ai/community/join) | [GitHub Discussions](https://github.com/deepset-ai/haystack/discussions) | [Website](https://deepset.ai) -# -# By the way: [we're hiring!](https://www.deepset.ai/jobs) -# diff --git a/tutorials/Tutorial1_Basic_QA_Pipeline.ipynb b/tutorials/Tutorial1_Basic_QA_Pipeline.ipynb deleted file mode 100644 index acc81246a3..0000000000 --- a/tutorials/Tutorial1_Basic_QA_Pipeline.ipynb +++ /dev/null @@ -1,500 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Build Your First QA System\n", - "\n", - "\n", - "\n", - "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/deepset-ai/haystack/blob/main/tutorials/Tutorial1_Basic_QA_Pipeline.ipynb)\n", - "\n", - "Question Answering can be used in a variety of use cases. A very common one: Using it to navigate through complex knowledge bases or long documents (\"search setting\").\n", - "\n", - "A \"knowledge base\" could for example be your website, an internal wiki or a collection of financial reports. \n", - "In this tutorial we will work on a slightly different domain: \"Game of Thrones\". \n", - "\n", - "Let's see how we can use a bunch of Wikipedia articles to answer a variety of questions about the \n", - "marvellous seven kingdoms.\n" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false - }, - "source": [ - "### Prepare environment\n", - "\n", - "#### Colab: Enable the GPU runtime\n", - "Make sure you enable the GPU runtime to experience decent speed in this tutorial.\n", - "**Runtime -> Change Runtime type -> Hardware accelerator -> GPU**\n", - "\n", - "" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "# Make sure you have a GPU running\n", - "!nvidia-smi" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Install the latest release of Haystack in your own environment\n", - "#! pip install farm-haystack\n", - "\n", - "# Install the latest main of Haystack\n", - "!pip install --upgrade pip\n", - "!pip install git+https://github.com/deepset-ai/haystack.git#egg=farm-haystack[colab]" - ] - }, - { - "cell_type": "markdown", - "source": [ - "## Logging\n", - "\n", - "We configure how logging messages should be displayed and which log level should be used before importing Haystack.\n", - "Example log message:\n", - "INFO - haystack.utils.preprocessing - Converting data/tutorial1/218_Olenna_Tyrell.txt\n", - "Default log level in basicConfig is WARNING so the explicit parameter is not necessary but can be changed easily:" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - } - }, - { - "cell_type": "code", - "execution_count": null, - "outputs": [], - "source": [ - "import logging\n", - "\n", - "logging.basicConfig(format=\"%(levelname)s - %(name)s - %(message)s\", level=logging.WARNING)\n", - "logging.getLogger(\"haystack\").setLevel(logging.INFO)" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } - }, - { - "cell_type": "code", - "execution_count": null, - "outputs": [], - "source": [ - "from haystack.utils import clean_wiki_text, convert_files_to_docs, fetch_archive_from_http, print_answers\n", - "from haystack.nodes import FARMReader, TransformersReader" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Document Store\n", - "\n", - "Haystack finds answers to queries within the documents stored in a `DocumentStore`. The current implementations of `DocumentStore` include `ElasticsearchDocumentStore`, `FAISSDocumentStore`, `SQLDocumentStore`, and `InMemoryDocumentStore`.\n", - "\n", - "**Here:** We recommended Elasticsearch as it comes preloaded with features like [full-text queries](https://www.elastic.co/guide/en/elasticsearch/reference/current/full-text-queries.html), [BM25 retrieval](https://www.elastic.co/elasticon/conf/2016/sf/improved-text-scoring-with-bm25), and [vector storage for text embeddings](https://www.elastic.co/guide/en/elasticsearch/reference/7.6/dense-vector.html).\n", - "\n", - "**Alternatives:** If you are unable to setup an Elasticsearch instance, then follow the [Tutorial 3](https://github.com/deepset-ai/haystack/blob/main/tutorials/Tutorial3_Basic_QA_Pipeline_without_Elasticsearch.ipynb) for using SQL/InMemory document stores.\n", - "\n", - "**Hint**: This tutorial creates a new document store instance with Wikipedia articles on Game of Thrones. However, you can configure Haystack to work with your existing document stores.\n", - "\n", - "### Start an Elasticsearch server\n", - "You can start Elasticsearch on your local machine instance using Docker. If Docker is not readily available in your environment (e.g. in Colab notebooks), then you can manually download and execute Elasticsearch from source." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Recommended: Start Elasticsearch using Docker via the Haystack utility function\n", - "from haystack.utils import launch_es\n", - "\n", - "launch_es()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# In Colab / No Docker environments: Start Elasticsearch from source\n", - "! wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.9.2-linux-x86_64.tar.gz -q\n", - "! tar -xzf elasticsearch-7.9.2-linux-x86_64.tar.gz\n", - "! chown -R daemon:daemon elasticsearch-7.9.2\n", - "\n", - "import os\n", - "from subprocess import Popen, PIPE, STDOUT\n", - "\n", - "es_server = Popen(\n", - " [\"elasticsearch-7.9.2/bin/elasticsearch\"], stdout=PIPE, stderr=STDOUT, preexec_fn=lambda: os.setuid(1) # as daemon\n", - ")\n", - "# wait until ES has started\n", - "! sleep 30" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "# Connect to Elasticsearch\n", - "\n", - "from haystack.document_stores import ElasticsearchDocumentStore\n", - "\n", - "document_store = ElasticsearchDocumentStore(host=\"localhost\", username=\"\", password=\"\", index=\"document\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "## Preprocessing of documents\n", - "\n", - "Haystack provides a customizable pipeline for:\n", - " - converting files into texts\n", - " - cleaning texts\n", - " - splitting texts\n", - " - writing them to a Document Store\n", - "\n", - "In this tutorial, we download Wikipedia articles about Game of Thrones, apply a basic cleaning function, and index them in Elasticsearch." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "# Let's first fetch some documents that we want to query\n", - "# Here: 517 Wikipedia articles for Game of Thrones\n", - "doc_dir = \"data/tutorial1\"\n", - "s3_url = \"https://s3.eu-central-1.amazonaws.com/deepset.ai-farm-qa/datasets/documents/wiki_gameofthrones_txt1.zip\"\n", - "fetch_archive_from_http(url=s3_url, output_dir=doc_dir)\n", - "\n", - "# Convert files to dicts\n", - "# You can optionally supply a cleaning function that is applied to each doc (e.g. to remove footers)\n", - "# It must take a str as input, and return a str.\n", - "docs = convert_files_to_docs(dir_path=doc_dir, clean_func=clean_wiki_text, split_paragraphs=True)\n", - "\n", - "# We now have a list of dictionaries that we can write to our document store.\n", - "# If your texts come from a different source (e.g. a DB), you can of course skip convert_files_to_dicts() and create the dictionaries yourself.\n", - "# The default format here is:\n", - "# {\n", - "# 'content': \"\",\n", - "# 'meta': {'name': \"\", ...}\n", - "# }\n", - "# (Optionally: you can also add more key-value-pairs here, that will be indexed as fields in Elasticsearch and\n", - "# can be accessed later for filtering or shown in the responses of the Pipeline)\n", - "\n", - "# Let's have a look at the first 3 entries:\n", - "print(docs[:3])\n", - "\n", - "# Now, let's write the dicts containing documents to our DB.\n", - "document_store.write_documents(docs)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Initialize Retriever, Reader & Pipeline\n", - "\n", - "### Retriever\n", - "\n", - "Retrievers help narrowing down the scope for the Reader to smaller units of text where a given question could be answered.\n", - "They use some simple but fast algorithm.\n", - "\n", - "**Here:** We use Elasticsearch's default BM25 algorithm\n", - "\n", - "**Alternatives:**\n", - "\n", - "- Customize the `BM25Retriever`with custom queries (e.g. boosting) and filters\n", - "- Use `TfidfRetriever` in combination with a SQL or InMemory Document store for simple prototyping and debugging\n", - "- Use `EmbeddingRetriever` to find candidate documents based on the similarity of embeddings (e.g. created via Sentence-BERT)\n", - "- Use `DensePassageRetriever` to use different embedding models for passage and query (see Tutorial 6)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from haystack.nodes import BM25Retriever\n", - "\n", - "retriever = BM25Retriever(document_store=document_store)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "pycharm": { - "is_executing": false, - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "# Alternative: An in-memory TfidfRetriever based on Pandas dataframes for building quick-prototypes with SQLite document store.\n", - "\n", - "# from haystack.nodes import TfidfRetriever\n", - "# retriever = TfidfRetriever(document_store=document_store)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Reader\n", - "\n", - "A Reader scans the texts returned by retrievers in detail and extracts the k best answers. They are based\n", - "on powerful, but slower deep learning models.\n", - "\n", - "Haystack currently supports Readers based on the frameworks FARM and Transformers.\n", - "With both you can either load a local model or one from Hugging Face's model hub (https://huggingface.co/models).\n", - "\n", - "**Here:** a medium sized RoBERTa QA model using a Reader based on FARM (https://huggingface.co/deepset/roberta-base-squad2)\n", - "\n", - "**Alternatives (Reader):** TransformersReader (leveraging the `pipeline` of the Transformers package)\n", - "\n", - "**Alternatives (Models):** e.g. \"distilbert-base-uncased-distilled-squad\" (fast) or \"deepset/bert-large-uncased-whole-word-masking-squad2\" (good accuracy)\n", - "\n", - "**Hint:** You can adjust the model to return \"no answer possible\" with the no_ans_boost. Higher values mean the model prefers \"no answer possible\"\n", - "\n", - "#### FARMReader" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "pycharm": { - "is_executing": false - } - }, - "outputs": [], - "source": [ - "# Load a local model or any of the QA models on\n", - "# Hugging Face's model hub (https://huggingface.co/models)\n", - "\n", - "reader = FARMReader(model_name_or_path=\"deepset/roberta-base-squad2\", use_gpu=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### TransformersReader" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Alternative:\n", - "# reader = TransformersReader(model_name_or_path=\"distilbert-base-uncased-distilled-squad\", tokenizer=\"distilbert-base-uncased\", use_gpu=-1)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Pipeline\n", - "\n", - "With a Haystack `Pipeline` you can stick together your building blocks to a search pipeline.\n", - "Under the hood, `Pipelines` are Directed Acyclic Graphs (DAGs) that you can easily customize for your own use cases.\n", - "To speed things up, Haystack also comes with a few predefined Pipelines. One of them is the `ExtractiveQAPipeline` that combines a retriever and a reader to answer our questions.\n", - "You can learn more about `Pipelines` in the [docs](https://haystack.deepset.ai/docs/latest/pipelinesmd)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "pycharm": { - "is_executing": false - } - }, - "outputs": [], - "source": [ - "from haystack.pipelines import ExtractiveQAPipeline\n", - "\n", - "pipe = ExtractiveQAPipeline(reader, retriever)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Voilà! Ask a question!" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "pycharm": { - "is_executing": false - } - }, - "outputs": [], - "source": [ - "# You can configure how many candidates the Reader and Retriever shall return\n", - "# The higher top_k_retriever, the better (but also the slower) your answers.\n", - "prediction = pipe.run(\n", - " query=\"Who is the father of Arya Stark?\", params={\"Retriever\": {\"top_k\": 10}, \"Reader\": {\"top_k\": 5}}\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# prediction = pipe.run(query=\"Who created the Dothraki vocabulary?\", params={\"Reader\": {\"top_k\": 5}})\n", - "# prediction = pipe.run(query=\"Who is the sister of Sansa?\", params={\"Reader\": {\"top_k\": 5}})" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Now you can either print the object directly...\n", - "from pprint import pprint\n", - "\n", - "pprint(prediction)\n", - "\n", - "# Sample output:\n", - "# {\n", - "# 'answers': [ ,\n", - "# ,\n", - "# ...\n", - "# ]\n", - "# 'documents': [ ,\n", - "# ,\n", - "# ...\n", - "# ],\n", - "# 'no_ans_gap': 11.688868522644043,\n", - "# 'node_id': 'Reader',\n", - "# 'params': {'Reader': {'top_k': 5}, 'Retriever': {'top_k': 5}},\n", - "# 'query': 'Who is the father of Arya Stark?',\n", - "# 'root_node': 'Query'\n", - "# }" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "pycharm": { - "is_executing": false, - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "# ...or use a util to simplify the output\n", - "# Change `minimum` to `medium` or `all` to raise the level of detail\n", - "print_answers(prediction, details=\"minimum\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "## About us\n", - "\n", - "This [Haystack](https://github.com/deepset-ai/haystack/) notebook was made with love by [deepset](https://deepset.ai/) in Berlin, Germany\n", - "\n", - "We bring NLP to the industry via open source! \n", - "Our focus: Industry specific language models & large scale QA systems. \n", - " \n", - "Some of our other work: \n", - "- [German BERT](https://deepset.ai/german-bert)\n", - "- [GermanQuAD and GermanDPR](https://deepset.ai/germanquad)\n", - "- [FARM](https://github.com/deepset-ai/FARM)\n", - "\n", - "Get in touch:\n", - "[Twitter](https://twitter.com/deepset_ai) | [LinkedIn](https://www.linkedin.com/company/deepset-ai/) | [Slack](https://haystack.deepset.ai/community/join) | [GitHub Discussions](https://github.com/deepset-ai/haystack/discussions) | [Website](https://deepset.ai)\n", - "\n", - "By the way: [we're hiring!](https://www.deepset.ai/jobs)\n" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "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.9.7" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/tutorials/Tutorial1_Basic_QA_Pipeline.py b/tutorials/Tutorial1_Basic_QA_Pipeline.py deleted file mode 100755 index f6f5b58c62..0000000000 --- a/tutorials/Tutorial1_Basic_QA_Pipeline.py +++ /dev/null @@ -1,180 +0,0 @@ -# ## Task: Question Answering for Game of Thrones -# -# Question Answering can be used in a variety of use cases. A very common one: Using it to navigate through complex -# knowledge bases or long documents ("search setting"). -# -# A "knowledge base" could for example be your website, an internal wiki or a collection of financial reports. -# In this tutorial we will work on a slightly different domain: "Game of Thrones". -# -# Let's see how we can use a bunch of Wikipedia articles to answer a variety of questions about the -# marvellous seven kingdoms. - -import logging - -# We configure how logging messages should be displayed and which log level should be used before importing Haystack. -# Example log message: -# INFO - haystack.utils.preprocessing - Converting data/tutorial1/218_Olenna_Tyrell.txt -# Default log level in basicConfig is WARNING so the explicit parameter is not necessary but can be changed easily: -logging.basicConfig(format="%(levelname)s - %(name)s - %(message)s", level=logging.WARNING) -logging.getLogger("haystack").setLevel(logging.INFO) - -from haystack.document_stores import ElasticsearchDocumentStore -from haystack.utils import clean_wiki_text, convert_files_to_docs, fetch_archive_from_http, print_answers, launch_es -from haystack.nodes import FARMReader, TransformersReader, BM25Retriever - - -def tutorial1_basic_qa_pipeline(): - # ## Document Store - # - # Haystack finds answers to queries within the documents stored in a `DocumentStore`. The current implementations of - # `DocumentStore` include `ElasticsearchDocumentStore`, `FAISSDocumentStore`, `SQLDocumentStore`, and `InMemoryDocumentStore`. - # - # **Here:** We recommended Elasticsearch as it comes preloaded with features like full-text queries, BM25 retrieval, - # and vector storage for text embeddings. - # **Alternatives:** If you are unable to setup an Elasticsearch instance, then follow the Tutorial 3 - # for using SQL/InMemory document stores. - # **Hint**: - # This tutorial creates a new document store instance with Wikipedia articles on Game of Thrones. However, you can - # configure Haystack to work with your existing document stores. - # - # Start an Elasticsearch server - # You can start Elasticsearch on your local machine instance using Docker. If Docker is not readily available in - # your environment (e.g. in Colab notebooks), then you can manually download and execute Elasticsearch from source. - - launch_es() - - # Connect to Elasticsearch - document_store = ElasticsearchDocumentStore(host="localhost", username="", password="", index="document") - - # ## Preprocessing of documents - # - # Haystack provides a customizable pipeline for: - # - converting files into texts - # - cleaning texts - # - splitting texts - # - writing them to a Document Store - - # In this tutorial, we download Wikipedia articles about Game of Thrones, apply a basic cleaning function, and add - # them in Elasticsearch. - - # Let's first fetch some documents that we want to query - # Here: 517 Wikipedia articles for Game of Thrones - doc_dir = "data/tutorial1" - s3_url = "https://s3.eu-central-1.amazonaws.com/deepset.ai-farm-qa/datasets/documents/wiki_gameofthrones_txt1.zip" - fetch_archive_from_http(url=s3_url, output_dir=doc_dir) - - # convert files to dicts containing documents that can be indexed to our datastore - docs = convert_files_to_docs(dir_path=doc_dir, clean_func=clean_wiki_text, split_paragraphs=True) - # You can optionally supply a cleaning function that is applied to each doc (e.g. to remove footers) - # It must take a str as input, and return a str. - - # Now, let's write the docs to our DB. - document_store.write_documents(docs) - - # ## Initialize Retriever & Reader - # - # ### Retriever - # - # Retrievers help narrowing down the scope for the Reader to smaller units of text where a given question - # could be answered. - # - # They use some simple but fast algorithm. - # **Here:** We use Elasticsearch's default BM25 algorithm - # **Alternatives:** - # - Customize the `BM25Retriever`with custom queries (e.g. boosting) and filters - # - Use `EmbeddingRetriever` to find candidate documents based on the similarity of - # embeddings (e.g. created via Sentence-BERT) - # - Use `TfidfRetriever` in combination with a SQL or InMemory Document store for simple prototyping and debugging - - retriever = BM25Retriever(document_store=document_store) - - # Alternative: An in-memory TfidfRetriever based on Pandas dataframes for building quick-prototypes - # with SQLite document store. - # - # from haystack.retriever.tfidf import TfidfRetriever - # retriever = TfidfRetriever(document_store=document_store) - - # ### Reader - # - # A Reader scans the texts returned by retrievers in detail and extracts the k best answers. They are based - # on powerful, but slower deep learning models. - # - # Haystack currently supports Readers based on the frameworks FARM and Transformers. - # With both you can either load a local model or one from Hugging Face's model hub (https://huggingface.co/models). - # **Here:** a medium sized RoBERTa QA model using a Reader based on - # FARM (https://huggingface.co/deepset/roberta-base-squad2) - # **Alternatives (Reader):** TransformersReader (leveraging the `pipeline` of the Transformers package) - # **Alternatives (Models):** e.g. "distilbert-base-uncased-distilled-squad" (fast) or - # "deepset/bert-large-uncased-whole-word-masking-squad2" (good accuracy) - # **Hint:** You can adjust the model to return "no answer possible" with the no_ans_boost. Higher values mean - # the model prefers "no answer possible" - # - # #### FARMReader - - # Load a local model or any of the QA models on - # Hugging Face's model hub (https://huggingface.co/models) - reader = FARMReader(model_name_or_path="deepset/roberta-base-squad2", use_gpu=True) - - # #### TransformersReader - - # Alternative: - # reader = TransformersReader( - # model_name_or_path="distilbert-base-uncased-distilled-squad", tokenizer="distilbert-base-uncased", use_gpu=-1) - - # ### Pipeline - # - # With a Haystack `Pipeline` you can stick together your building blocks to a search pipeline. - # Under the hood, `Pipelines` are Directed Acyclic Graphs (DAGs) that you can easily customize for your own use cases. - # To speed things up, Haystack also comes with a few predefined Pipelines. One of them is the `ExtractiveQAPipeline` that combines a retriever and a reader to answer our questions. - # You can learn more about `Pipelines` in the [docs](https://haystack.deepset.ai/docs/latest/pipelinesmd). - from haystack.pipelines import ExtractiveQAPipeline - - pipe = ExtractiveQAPipeline(reader, retriever) - - ## Voilà! Ask a question! - prediction = pipe.run( - query="Who is the father of Arya Stark?", params={"Retriever": {"top_k": 10}, "Reader": {"top_k": 5}} - ) - - # prediction = pipe.run(query="Who created the Dothraki vocabulary?", params={"Reader": {"top_k": 5}}) - # prediction = pipe.run(query="Who is the sister of Sansa?", params={"Reader": {"top_k": 5}}) - - # Now you can either print the object directly - print("\n\nRaw object:\n") - from pprint import pprint - - pprint(prediction) - - # Sample output: - # { - # 'answers': [ , - # , - # ... - # ] - # 'documents': [ , - # , - # ... - # ], - # 'no_ans_gap': 11.688868522644043, - # 'node_id': 'Reader', - # 'params': {'Reader': {'top_k': 5}, 'Retriever': {'top_k': 5}}, - # 'query': 'Who is the father of Arya Stark?', - # 'root_node': 'Query' - # } - - # Note that the documents contained in the above object are the documents filtered by the Retriever from - # the document store. Although the answers were extracted from these documents, it's possible that many - # answers were taken from a single one of them, and that some of the documents were not source of any answer. - - # Or use a util to simplify the output - # Change `minimum` to `medium` or `all` to raise the level of detail - print("\n\nSimplified output:\n") - print_answers(prediction, details="minimum") - - -if __name__ == "__main__": - tutorial1_basic_qa_pipeline() - -# This Haystack script was made with love by deepset in Berlin, Germany -# Haystack: https://github.com/deepset-ai/haystack -# deepset: https://deepset.ai/ diff --git a/tutorials/Tutorial2_Finetune_a_model_on_your_data.ipynb b/tutorials/Tutorial2_Finetune_a_model_on_your_data.ipynb deleted file mode 100644 index a201369008..0000000000 --- a/tutorials/Tutorial2_Finetune_a_model_on_your_data.ipynb +++ /dev/null @@ -1,318 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Fine-tuning a Model on Your Own Data\n", - "\n", - "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/deepset-ai/haystack/blob/main/tutorials/Tutorial2_Finetune_a_model_on_your_data.ipynb)\n", - "\n", - "For many use cases it is sufficient to just use one of the existing public models that were trained on SQuAD or other public QA datasets (e.g. Natural Questions).\n", - "However, if you have domain-specific questions, fine-tuning your model on custom examples will very likely boost your performance.\n", - "While this varies by domain, we saw that ~ 2000 examples can easily increase performance by +5-20%.\n", - "\n", - "This tutorial shows you how to fine-tune a pretrained model on your own dataset." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false - }, - "source": [ - "### Prepare environment\n", - "\n", - "#### Colab: Enable the GPU runtime\n", - "Make sure you enable the GPU runtime to experience decent speed in this tutorial.\n", - "**Runtime -> Change Runtime type -> Hardware accelerator -> GPU**\n", - "\n", - "" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "# Make sure you have a GPU running\n", - "!nvidia-smi" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "# Install the latest release of Haystack in your own environment\n", - "#! pip install farm-haystack\n", - "\n", - "# Install the latest main of Haystack\n", - "!pip install --upgrade pip\n", - "!pip install git+https://github.com/deepset-ai/haystack.git#egg=farm-haystack[colab]" - ] - }, - { - "cell_type": "markdown", - "source": [ - "## Logging\n", - "\n", - "We configure how logging messages should be displayed and which log level should be used before importing Haystack.\n", - "Example log message:\n", - "INFO - haystack.utils.preprocessing - Converting data/tutorial1/218_Olenna_Tyrell.txt\n", - "Default log level in basicConfig is WARNING so the explicit parameter is not necessary but can be changed easily:" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - } - }, - { - "cell_type": "code", - "execution_count": null, - "outputs": [], - "source": [ - "import logging\n", - "\n", - "logging.basicConfig(format=\"%(levelname)s - %(name)s - %(message)s\", level=logging.WARNING)\n", - "logging.getLogger(\"haystack\").setLevel(logging.INFO)" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } - }, - { - "cell_type": "code", - "execution_count": null, - "outputs": [], - "source": [ - "from haystack.nodes import FARMReader\n", - "from haystack.utils import fetch_archive_from_http" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "## Create Training Data\n", - "\n", - "There are two ways to generate training data\n", - "\n", - "1. **Annotation**: You can use the [annotation tool](https://haystack.deepset.ai/guides/annotation) to label your data, i.e. highlighting answers to your questions in a document. The tool supports structuring your workflow with organizations, projects, and users. The labels can be exported in SQuAD format that is compatible for training with Haystack.\n", - "\n", - "![Snapshot of the annotation tool](https://raw.githubusercontent.com/deepset-ai/haystack/main/docs/img/annotation_tool.png)\n", - "\n", - "2. **Feedback**: For production systems, you can collect training data from direct user feedback via Haystack's [REST API interface](https://github.com/deepset-ai/haystack#rest-api). This includes a customizable user feedback API for providing feedback on the answer returned by the API. The API provides a feedback export endpoint to obtain the feedback data for fine-tuning your model further.\n", - "\n", - "\n", - "## Fine-tune your model\n", - "\n", - "Once you have collected training data, you can fine-tune your base models.\n", - "We initialize a reader as a base model and fine-tune it on our own custom dataset (should be in SQuAD-like format).\n", - "We recommend using a base model that was trained on SQuAD or a similar QA dataset before to benefit from Transfer Learning effects.\n", - "\n", - "**Recommendation**: Run training on a GPU.\n", - "If you are using Colab: Enable this in the menu \"Runtime\" > \"Change Runtime type\" > Select \"GPU\" in dropdown.\n", - "Then change the `use_gpu` arguments below to `True`" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "04/28/2020 14:39:27 - INFO - farm.utils - device: cpu n_gpu: 0, distributed training: False, automatic mixed precision training: None\n", - "04/28/2020 14:39:27 - INFO - farm.infer - Could not find `distilbert-base-uncased-distilled-squad` locally. Try to download from model hub ...\n", - "04/28/2020 14:39:29 - WARNING - farm.modeling.language_model - Could not automatically detect from language model name what language it is. \n", - "\t We guess it's an *ENGLISH* model ... \n", - "\t If not: Init the language model by supplying the 'language' param.\n", - "04/28/2020 14:39:31 - WARNING - farm.modeling.prediction_head - Some unused parameters are passed to the QuestionAnsweringHead. Might not be a problem. Params: {\"loss_ignore_index\": -1}\n", - "04/28/2020 14:39:33 - INFO - farm.utils - device: cpu n_gpu: 0, distributed training: False, automatic mixed precision training: None\n", - "04/28/2020 14:39:33 - INFO - farm.utils - device: cpu n_gpu: 0, distributed training: False, automatic mixed precision training: None\n", - "Preprocessing Dataset data/squad20/dev-v2.0.json: 100%|██████████| 1204/1204 [00:02<00:00, 402.13 Dicts/s]\n", - "Train epoch 0/1 (Cur. train loss: 0.0000): 0%| | 0/1213 [00:00 Change Runtime type -> Hardware accelerator -> GPU**\n", - "\n", - "" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "# Make sure you have a GPU running\n", - "!nvidia-smi" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Install the latest release of Haystack in your own environment\n", - "#! pip install farm-haystack\n", - "\n", - "# Install the latest main of Haystack\n", - "!pip install --upgrade pip\n", - "!pip install git+https://github.com/deepset-ai/haystack.git#egg=farm-haystack[colab]" - ] - }, - { - "cell_type": "markdown", - "source": [ - "## Logging\n", - "\n", - "We configure how logging messages should be displayed and which log level should be used before importing Haystack.\n", - "Example log message:\n", - "INFO - haystack.utils.preprocessing - Converting data/tutorial1/218_Olenna_Tyrell.txt\n", - "Default log level in basicConfig is WARNING so the explicit parameter is not necessary but can be changed easily:" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - } - }, - { - "cell_type": "code", - "execution_count": null, - "outputs": [], - "source": [ - "import logging\n", - "\n", - "logging.basicConfig(format=\"%(levelname)s - %(name)s - %(message)s\", level=logging.WARNING)\n", - "logging.getLogger(\"haystack\").setLevel(logging.INFO)" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": { - "pycharm": { - "is_executing": false - } - }, - "outputs": [], - "source": [ - "from haystack.utils import clean_wiki_text, convert_files_to_docs, fetch_archive_from_http, print_answers\n", - "from haystack.nodes import FARMReader, TransformersReader" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Document Store\n" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], - "source": [ - "# In-Memory Document Store\n", - "from haystack.document_stores import InMemoryDocumentStore\n", - "\n", - "document_store = InMemoryDocumentStore()" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "# SQLite Document Store\n", - "# from haystack.document_stores import SQLDocumentStore\n", - "# document_store = SQLDocumentStore(url=\"sqlite:///qa.db\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "## Preprocessing of documents\n", - "\n", - "Haystack provides a customizable pipeline for:\n", - " - converting files into texts\n", - " - cleaning texts\n", - " - splitting texts\n", - " - writing them to a Document Store\n", - "\n", - "In this tutorial, we download Wikipedia articles on Game of Thrones, apply a basic cleaning function, and index them in Elasticsearch." - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": { - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "04/28/2020 15:06:07 - INFO - haystack.indexing.io - Found data stored in `data/article_txt_got`. Delete this first if you really want to fetch new data.\n", - "04/28/2020 15:06:07 - INFO - haystack.indexing.io - Wrote 517 docs to DB\n" - ] - } - ], - "source": [ - "# Let's first get some documents that we want to query\n", - "# Here: 517 Wikipedia articles for Game of Thrones\n", - "doc_dir = \"data/tutorial3\"\n", - "s3_url = \"https://s3.eu-central-1.amazonaws.com/deepset.ai-farm-qa/datasets/documents/wiki_gameofthrones_txt3.zip\"\n", - "fetch_archive_from_http(url=s3_url, output_dir=doc_dir)\n", - "\n", - "# convert files to dicts containing documents that can be indexed to our datastore\n", - "# You can optionally supply a cleaning function that is applied to each doc (e.g. to remove footers)\n", - "# It must take a str as input, and return a str.\n", - "docs = convert_files_to_docs(dir_path=doc_dir, clean_func=clean_wiki_text, split_paragraphs=True)\n", - "\n", - "# We now have a list of dictionaries that we can write to our document store.\n", - "# If your texts come from a different source (e.g. a DB), you can of course skip convert_files_to_dicts() and create the dictionaries yourself.\n", - "# The default format here is: {\"name\": \"\", \"content\": \"\"}\n", - "\n", - "# Let's have a look at the first 3 entries:\n", - "print(docs[:3])\n", - "# Now, let's write the docs to our DB.\n", - "document_store.write_documents(docs)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Initialize Retriever, Reader & Pipeline\n", - "\n", - "### Retriever\n", - "\n", - "Retrievers help narrowing down the scope for the Reader to smaller units of text where a given question could be answered. \n", - "\n", - "With InMemoryDocumentStore or SQLDocumentStore, you can use the TfidfRetriever. For more retrievers, please refer to the tutorial-1." - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": { - "pycharm": { - "is_executing": false, - "name": "#%%\n" - } - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "04/28/2020 15:07:34 - INFO - haystack.retriever.tfidf - Found 2811 candidate paragraphs from 517 docs in DB\n" - ] - } - ], - "source": [ - "# An in-memory TfidfRetriever based on Pandas dataframes\n", - "\n", - "from haystack.nodes import TfidfRetriever\n", - "\n", - "retriever = TfidfRetriever(document_store=document_store)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Reader\n", - "\n", - "A Reader scans the texts returned by retrievers in detail and extracts the k best answers. They are based\n", - "on powerful, but slower deep learning models.\n", - "\n", - "Haystack currently supports Readers based on the frameworks FARM and Transformers.\n", - "With both you can either load a local model or one from Hugging Face's model hub (https://huggingface.co/models).\n", - "\n", - "**Here:** a medium sized RoBERTa QA model using a Reader based on FARM (https://huggingface.co/deepset/roberta-base-squad2)\n", - "\n", - "**Alternatives (Reader):** TransformersReader (leveraging the `pipeline` of the Transformers package)\n", - "\n", - "**Alternatives (Models):** e.g. \"distilbert-base-uncased-distilled-squad\" (fast) or \"deepset/bert-large-uncased-whole-word-masking-squad2\" (good accuracy)\n", - "\n", - "**Hint:** You can adjust the model to return \"no answer possible\" with the no_ans_boost. Higher values mean the model prefers \"no answer possible\"\n", - "\n", - "#### FARMReader" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": { - "pycharm": { - "is_executing": false - } - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "04/28/2020 15:07:40 - INFO - farm.utils - device: cpu n_gpu: 0, distributed training: False, automatic mixed precision training: None\n", - "04/28/2020 15:07:40 - INFO - farm.infer - Could not find `deepset/roberta-base-squad2` locally. Try to download from model hub ...\n", - "04/28/2020 15:07:45 - WARNING - farm.modeling.language_model - Could not automatically detect from language model name what language it is. \n", - "\t We guess it's an *ENGLISH* model ... \n", - "\t If not: Init the language model by supplying the 'language' param.\n", - "04/28/2020 15:07:49 - WARNING - farm.modeling.prediction_head - Some unused parameters are passed to the QuestionAnsweringHead. Might not be a problem. Params: {\"loss_ignore_index\": -1}\n", - "04/28/2020 15:07:54 - INFO - farm.utils - device: cpu n_gpu: 0, distributed training: False, automatic mixed precision training: None\n" - ] - } - ], - "source": [ - "# Load a local model or any of the QA models on\n", - "# Hugging Face's model hub (https://huggingface.co/models)\n", - "\n", - "reader = FARMReader(model_name_or_path=\"deepset/roberta-base-squad2\", use_gpu=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### TransformersReader" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Alternative:\n", - "# reader = TransformersReader(model_name_or_path=\"distilbert-base-uncased-distilled-squad\", tokenizer=\"distilbert-base-uncased\", use_gpu=-1)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Pipeline\n", - "\n", - "With a Haystack `Pipeline` you can stick together your building blocks to a search pipeline.\n", - "Under the hood, `Pipelines` are Directed Acyclic Graphs (DAGs) that you can easily customize for your own use cases.\n", - "To speed things up, Haystack also comes with a few predefined Pipelines. One of them is the `ExtractiveQAPipeline` that combines a retriever and a reader to answer our questions.\n", - "You can learn more about `Pipelines` in the [docs](https://haystack.deepset.ai/docs/latest/pipelinesmd)." - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": { - "pycharm": { - "is_executing": false - } - }, - "outputs": [], - "source": [ - "from haystack.pipelines import ExtractiveQAPipeline\n", - "\n", - "pipe = ExtractiveQAPipeline(reader, retriever)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Voilà! Ask a question!" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": { - "pycharm": { - "is_executing": false - } - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "04/28/2020 15:07:54 - INFO - haystack.retriever.tfidf - Identified 10 candidates via retriever:\n", - " paragraph_id document_id text\n", - " 2721 f258f55f534d1a8b3644c3b1bd2d9069 \\n===Arya Stark===\\n'''Arya Stark''' portrayed by Maisie Williams. Arya Stark of House Stark is the younger daughter and third child of Lord Eddard and Catelyn Stark of Winterfell. Ever the tomboy, Arya would rather be training to use weapons than sewing with a needle. She names her direwolf Nymeria, after a legendary warrior queen.\n", - " 2210 2d9538e229b8272de9b6f74bf8cdd270 \\n====Season 8====\\nArya reunites with Jon, Gendry, and the Hound, who have all journeyed to Winterfell with Daenerys Targaryen's forces to make a stand against the approaching White Walkers. Arya asks Gendry, who is forging dragonglass into weapons, to make her a special dragonglass staff. When Gendry gives it to Arya, he tells her he is the bastard son of Robert Baratheon. Aware of their chances of dying in the upcoming battle and Arya wanting to experience sex, Arya and Gendry sleep together. Later that night, Arya hears the signal alerting her that the White Walkers' army has arrived.\\nArya fights in the battle against the dead with Sandor Clegane and Beric Dondarrion. Beric sacrifices himself to allow Arya and the Hound to escape the wights. A battered Arya sprints through the corridors of Winterfell and encounters Melisandre, who suggests to Arya that she is meant to kill the Night King. In the Godswood, just as the Night King is about to kill Bran, Arya sneaks up and stabs the Night King with the Valyrian steel dagger Bran gave her. Upon killing the Night King, the White Walkers and wights are all destroyed. \\nIn the aftermath of the battle, Arya is proposed to by Gendry, who had just been legitimised as a Baratheon by Daenerys. Arya declines, as she does not want the life of a lady. Sansa and Arya tell Jon they don't trust Daenerys, but Jon defends her. Arya learns that Jon is the son of her aunt, Lyanna Stark, and Rhaegar Targaryen after Jon swears her and Sansa to secrecy about his true parentage.\\nArya journeys south to King's Landing with the Hound to kill Cersei. The two infiltrate the Red Keep with the civilians Cersei is using to deter Daenerys' attack. Despite the city's surrender to Daenerys, she begins laying waste to the populace atop of Drogon. In his mission for revenge against his brother, the Mountain, the Hound seeks out the Mountain but urges Arya to leave and give up her quest for revenge to avoid a life consumed by it. Arya thanks the Hound, calling him by his name for the first time. She tries and fails to save the smallfolk, narrowly avoiding being incinerated in Daenerys' attack on the city, but survives. In the aftermath, Arya is reunited with Jon and warns him that he and the Starks are not safe from Daenerys. Jon tries but is unable to dissuade Daenerys from further destruction and ultimately assassinates her. He is imprisoned. Weeks later, Arya joins the other lords and ladies of Westeros in a council to decide who shall lead the Seven Kingdoms. Bran is chosen as king, though Arya abstains from voting as Sansa declares the North's independence. Arya, Sansa, and Bran bid Jon farewell as he is exiled. \\nArya reveals that she is leaving Westeros to see what lies west of the continent. She embarks on her voyage aboard a Stark ship.\n", - " 2203 2d9538e229b8272de9b6f74bf8cdd270 \\n====Season 1====\\nArya accompanies her father Ned and her sister Sansa to King's Landing. Before their departure, Arya's half-brother Jon Snow gifts Arya a sword which she dubs \"Needle\". On the Kingsroad, Arya is sparring with a butcher's boy, Mycah, when Sansa's betrothed Prince Joffrey Baratheon attacks Mycah, prompting Arya's direwolf Nymeria to bite Joffrey. Arya shoos Nymeria away so she is not killed, but is furious when Sansa later refuses to support her version of events. Mycah is later killed by Joffrey's bodyguard Sandor \"The Hound\" Clegane, earning him Arya's hatred. Ned arranges for Arya to have sword lessons with the Braavosi Syrio Forel, who later defends her from Ser Meryn Trant after Joffrey ascends to the throne and kills the Stark household. Arya flees the Red Keep, accidentally killing a stable boy in her escape, hiding out as a beggar in the streets of King's Landing. Ned is eventually taken to the Great Sept of Baelor to face judgment; he spots Arya in the crowd, and alerts the Night's Watch recruiter Yoren to her presence. Yoren prevents Arya from witnessing Ned's execution and has her pose as a boy, \"Arry\", to avoid detection as she joins Yoren's recruits traveling north to Castle Black.\n", - " 546 5719fd2f8b3bafdc028f1e043301cd05 \\n===''A Game of Thrones''===\\nSansa Stark begins the novel by being betrothed to Crown Prince Joffrey Baratheon, believing Joffrey to be a gallant prince. While Joffrey and Sansa are walking through the woods, Joffrey notices Arya sparring with the butcher's boy, Mycah. A fight breaks out and Joffrey is attacked by Nymeria (Arya's direwolf) after Joffrey threatens to hurt Arya. Sansa lies to King Robert about the circumstances of the fight in order to protect both Joffrey and her sister Arya. Since Arya ran off with her wolf to save it, Sansa's wolf is killed instead, estranging the Stark daughters.\\nDuring the Tourney of the Hand to honour her father Lord Eddard Stark, Sansa Stark is enchanted by the knights performing in the event. At the request of his mother, Queen Cersei Lannister, Joffrey spends a portion of the tourney with Sansa, but near the end he commands his guard Sandor Clegane, better known as The Hound, to take her back to her quarters. Sandor explains how his older brother, Gregor, aka \"Mountain that Rides\" pushed his face into a brazier of hot coals, for playing with one of his wooden toys.\\nAfter Eddard discovers the truth of Joffrey's paternity, he tells Sansa that they will be heading back to Winterfell. Sansa is devastated and wishes to stay in King's Landing, so she runs off to inform Queen Cersei of her father's plans, unwittingly providing Cersei with the information needed to arrest her father. After Robert dies, Sansa begs Joffrey to show mercy on her father and he agrees, if Ned will swear an oath of loyalty, but executes him anyway, in front of Sansa. Sansa is now effectively a hostage in King's Landing and finally sees Joffrey's true nature, after he forces her to look at the tarred head of her now-deceased father.\n", - " 1435 54fa6e9a31fd8e0cac24b34d95085424 \\n===In Braavos===\\nLady Crane returns to her chambers to find a wounded Arya hiding inside, and helps stitch her wounds. She tells Arya that, thanks to her warning, she mutilated her would-be killer Bianca's face before kicking her out of the acting company. She then offers to have Arya join them, but she refuses, saying that she intends to travel west of Westeros to see the edge of the world. As Arya recovers, the Waif arrives and kills Lady Crane, intending to kill Arya as well. Arya flees through the streets of Braavos, but during the chase, Arya's wounds reopen and she limps back to her hideout with the Waif in pursuit. As the Waif closes in, Arya extinguishes the candle lighting the room; having trained while blinded for several weeks, Arya has the upper hand.\\nAt the House of Black and White, Jaqen follows a bloodtrail to the Hall of Faces, where he finds the Waif's face before being held at sword-point by Arya. Jaqen congratulates Arya for finally becoming No One. However, she rejects the title, asserting her identity as Arya Stark before turning and leaving, announcing that she is \"going home.\" Jaqen proudly watches on as she leaves.\n", - " 460 f72a43a5163da9b8ffc2672df09099be \\n== Characters ==\\nThe tale is told through the eyes of 9 recurring POV characters plus one prologue POV character:\\n* Prologue: Maester Cressen, maester at Dragonstone\\n* Tyrion Lannister, youngest son of Lord Tywin Lannister, a dwarf and a brother to Queen Cersei, and the acting Hand of the King\\n* Lady Catelyn Stark, of House Tully, widow of Eddard Stark, Lord of Winterfell\\n* Ser Davos Seaworth, a smuggler turned knight in the service of King Stannis Baratheon, often called the Onion Knight\\n* Sansa Stark, eldest daughter of Eddard Stark and Catelyn Stark, held captive by Queen Cersei at King's Landing\\n* Arya Stark, youngest daughter of Eddard Stark and Catelyn Stark, missing and presumed dead\\n* Bran Stark, second son of Eddard Stark and Catelyn Stark and heir to Winterfell and the King in the North\\n* Jon Snow, bastard son of Eddard Stark, and a man of the Night's Watch\\n* Theon Greyjoy, heir to the Seastone Chair and former ward of Lord Eddard Stark\\n* Queen Daenerys Targaryen, the Unburnt and Mother of Dragons, of the Targaryen dynasty\n", - " 2196 2d9538e229b8272de9b6f74bf8cdd270 \\n==== ''A Game of Thrones'' ====\\nArya adopts a direwolf cub, which she names Nymeria after a legendary warrior queen. She travels with her father, Eddard, to King's Landing when he is made Hand of the King. Before she leaves, her half-brother Jon Snow has a smallsword made for her as a parting gift, which she names \"Needle\" after her least favorite ladylike activity.\\nWhile taking a walk together, Prince Joffrey and her sister Sansa happen upon Arya and her friend, the low-born butcher apprentice Mycah, sparring in the woods with broomsticks. Arya defends Mycah from Joffrey's torments and her direwolf Nymeria helps Arya fight off Joffrey, wounding his arm in the process. Knowing that Nymeria will likely be killed in retribution, Arya chases her wolf away; but Sansa's direwolf Lady is killed in Nymeria's stead and Mycah is hunted down and killed by Sandor Clegane, Joffrey's bodyguard.\\nIn King's Landing, her father discovers Arya's possession of Needle, but instead of confiscating it he arranges for fencing lessons under the Braavosi swordmain Syrio Forel, who teaches her the style of fighting known as \"water dancing\". After her father's arrest, Syrio is killed protecting her and Arya narrowly escapes capture. She later witnesses the public execution of her father before falling under the protection of the Night's Watch recruiter Yoren.\n", - " 2209 2d9538e229b8272de9b6f74bf8cdd270 \\n====Season 7====\\nTaking the face of Walder Frey, Arya gathers the men of House Frey for a feast before killing them all with poisoned wine. Arya then journeys south, intending to travel to King's Landing to assassinate Cersei (now Queen of the Seven Kingdoms following the extinction of House Baratheon). However, Arya changes her mind after learning from Hot Pie that Jon has ousted House Bolton from Winterfell and has been crowned King in the North, and decides to return to her ancestral home. Along the way she encounters a wolf pack led by her long-lost direwolf Nymeria. Nymeria recognizes Arya, but she has grown feral and ignores Arya when she asks her to come North with her.\\nArriving at Winterfell, Arya finds that Jon has traveled to Dragonstone but is reunited with Sansa and Bran. Bran reveals his knowledge of Arya's kill list through greenseeing and presents her with a Valyrian steel dagger, which had been given to him by Littlefinger. Arya is also reunited with Brienne, who continues to serve the Starks, and manages to equal the female warrior during sparring despite her smaller size.\\nLittlefinger seeks to increase his influence on Sansa by driving a wedge between the Stark sisters. To this end, he allows Arya to witness him receiving a confidential message obtained from Maester Luwin's records. Arya breaks into Littlefinger's quarters to steal the message, which is a plea sent by Sansa following Ned's imprisonment to Robb imploring him to bend the knee to Joffrey. Outraged, Arya confronts Sansa and is unconvinced by her explanation that she did so to try and save Ned's life. Later, Arya catches Sansa looking at her collection of faces and threatens Sansa before leaving. Some time later, Sansa summons Arya to the great hall and begins an accusation of treason and murder; however, the accusation is directed towards Littlefinger, whose crimes have been discovered by Bran's greenseeing. Despite Littlefinger's pleas for mercy, Sansa sentences Littlefinger to death and Arya cuts his throat with the Valyrian steel dagger. The Stark sisters later resolve their differences, and acknowledge that the Starks must stay together to survive winter.\n", - " 568 647298c3d183ab1dba03a447092e8763 \\n=== Arya Stark ===\\nArya Stark is the third child and younger daughter of Eddard and Catelyn Stark. She serves as a POV character for 33 chapters throughout ''A Game of Thrones'', ''A Clash of Kings'', ''A Storm of Swords'', ''A Feast for Crows'', and ''A Dance with Dragons''. So far she is the only character to appear in all 5 books as a POV character.\\nIn the HBO television adaptation, she is portrayed by Maisie Williams.\n", - " 311 e7adfa870b0e451f0cacdab756e231e3 \\n===On the Kingsroad===\\nCity Watchmen search the caravan for Gendry but are turned away by Yoren. Gendry tells Arya Stark that he knows she is a girl, and she reveals she is actually Arya Stark after learning that her father met Gendry before he was executed.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "04/28/2020 15:07:54 - INFO - haystack.finder - Reader is looking for detailed answer in 12569 chars ...\n" - ] - } - ], - "source": [ - "# You can configure how many candidates the reader and retriever shall return\n", - "# The higher top_k for retriever, the better (but also the slower) your answers.\n", - "prediction = pipe.run(\n", - " query=\"Who is the father of Arya Stark?\", params={\"Retriever\": {\"top_k\": 10}, \"Reader\": {\"top_k\": 5}}\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# prediction = pipe.run(query=\"Who created the Dothraki vocabulary?\", params={\"Reader\": {\"top_k\": 5}})\n", - "# prediction = pipe.run(query=\"Who is the sister of Sansa?\", params={\"Reader\": {\"top_k\": 5}})" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Now you can either print the object directly...\n", - "from pprint import pprint\n", - "\n", - "pprint(prediction)\n", - "\n", - "# Sample output:\n", - "# {\n", - "# 'answers': [ ,\n", - "# ,\n", - "# ...\n", - "# ]\n", - "# 'documents': [ ,\n", - "# ,\n", - "# ...\n", - "# ],\n", - "# 'no_ans_gap': 11.688868522644043,\n", - "# 'node_id': 'Reader',\n", - "# 'params': {'Reader': {'top_k': 5}, 'Retriever': {'top_k': 5}},\n", - "# 'query': 'Who is the father of Arya Stark?',\n", - "# 'root_node': 'Query'\n", - "# }" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": { - "pycharm": { - "is_executing": false, - "name": "#%%\n" - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[ { 'answer': 'Eddard',\n", - " 'context': 's Nymeria after a legendary warrior queen. She travels '\n", - " \"with her father, Eddard, to King's Landing when he is made \"\n", - " 'Hand of the King. Before she leaves,'},\n", - " { 'answer': 'Ned',\n", - " 'context': '\\n'\n", - " '====Season 1====\\n'\n", - " 'Arya accompanies her father Ned and her sister Sansa to '\n", - " \"King's Landing. Before their departure, Arya's \"\n", - " 'half-brother Jon Snow gifts A'},\n", - " { 'answer': 'Lord Eddard and Catelyn Stark',\n", - " 'context': 'k of House Stark is the younger daughter and third child '\n", - " 'of Lord Eddard and Catelyn Stark of Winterfell. Ever the '\n", - " 'tomboy, Arya would rather be trainin'},\n", - " { 'answer': 'Lord Eddard Stark',\n", - " 'context': 'ark daughters.\\n'\n", - " 'During the Tourney of the Hand to honour her father Lord '\n", - " 'Eddard Stark, Sansa Stark is enchanted by the knights '\n", - " 'performing in the event.'},\n", - " { 'answer': 'Robert Baratheon',\n", - " 'context': 'hen Gendry gives it to Arya, he tells her he is the '\n", - " 'bastard son of Robert Baratheon. Aware of their chances of '\n", - " 'dying in the upcoming battle and Arya w'}]\n" - ] - } - ], - "source": [ - "# ...or use a util to simplify the output\n", - "# Change `minimum` to `medium` or `all` to raise the level of detail\n", - "print_answers(prediction, details=\"minimum\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false - }, - "source": [ - "## About us\n", - "\n", - "This [Haystack](https://github.com/deepset-ai/haystack/) notebook was made with love by [deepset](https://deepset.ai/) in Berlin, Germany\n", - "\n", - "We bring NLP to the industry via open source! \n", - "Our focus: Industry specific language models & large scale QA systems. \n", - " \n", - "Some of our other work: \n", - "- [German BERT](https://deepset.ai/german-bert)\n", - "- [GermanQuAD and GermanDPR](https://deepset.ai/germanquad)\n", - "- [FARM](https://github.com/deepset-ai/FARM)\n", - "\n", - "Get in touch:\n", - "[Twitter](https://twitter.com/deepset_ai) | [LinkedIn](https://www.linkedin.com/company/deepset-ai/) | [Slack](https://haystack.deepset.ai/community/join) | [GitHub Discussions](https://github.com/deepset-ai/haystack/discussions) | [Website](https://deepset.ai)\n", - "\n", - "By the way: [we're hiring!](https://www.deepset.ai/jobs)" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "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.7.6" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/tutorials/Tutorial3_Basic_QA_Pipeline_without_Elasticsearch.py b/tutorials/Tutorial3_Basic_QA_Pipeline_without_Elasticsearch.py deleted file mode 100644 index 84ebbbf90a..0000000000 --- a/tutorials/Tutorial3_Basic_QA_Pipeline_without_Elasticsearch.py +++ /dev/null @@ -1,149 +0,0 @@ -# ## Task: Build a Question Answering pipeline without Elasticsearch -# -# Haystack provides alternatives to Elasticsearch for developing quick prototypes. -# -# You can use an `InMemoryDocumentStore` or a `SQLDocumentStore`(with SQLite) as the document store. -# -# If you are interested in more feature-rich Elasticsearch, then please refer to the Tutorial 1. - -import logging - -# We configure how logging messages should be displayed and which log level should be used before importing Haystack. -# Example log message: -# INFO - haystack.utils.preprocessing - Converting data/tutorial1/218_Olenna_Tyrell.txt -# Default log level in basicConfig is WARNING so the explicit parameter is not necessary but can be changed easily: -logging.basicConfig(format="%(levelname)s - %(name)s - %(message)s", level=logging.WARNING) -logging.getLogger("haystack").setLevel(logging.INFO) - -from haystack.document_stores import InMemoryDocumentStore, SQLDocumentStore -from haystack.nodes import FARMReader, TransformersReader, TfidfRetriever -from haystack.utils import clean_wiki_text, convert_files_to_docs, fetch_archive_from_http, print_answers - - -def tutorial3_basic_qa_pipeline_without_elasticsearch(): - # In-Memory Document Store - document_store = InMemoryDocumentStore() - - # or, alternatively, SQLite Document Store - # document_store = SQLDocumentStore(url="sqlite:///qa.db") - - # ## Preprocessing of documents - # - # Haystack provides a customizable pipeline for: - # - converting files into texts - # - cleaning texts - # - splitting texts - # - writing them to a Document Store - - # In this tutorial, we download Wikipedia articles on Game of Thrones, apply a basic cleaning function, and index - # them in Elasticsearch. - # Let's first get some documents that we want to query - # Here: 517 Wikipedia articles for Game of Thrones - doc_dir = "data/tutorial3" - s3_url = "https://s3.eu-central-1.amazonaws.com/deepset.ai-farm-qa/datasets/documents/wiki_gameofthrones_txt3.zip" - fetch_archive_from_http(url=s3_url, output_dir=doc_dir) - - # convert files to dicts containing documents that can be indexed to our datastore - docs = convert_files_to_docs(dir_path=doc_dir, clean_func=clean_wiki_text, split_paragraphs=True) - # You can optionally supply a cleaning function that is applied to each doc (e.g. to remove footers) - # It must take a str as input, and return a str. - - # Now, let's write the docs to our DB. - document_store.write_documents(docs) - - # ## Initialize Retriever, Reader & Pipeline - # - # ### Retriever - # - # Retrievers help narrowing down the scope for the Reader to smaller units of text where - # a given question could be answered. - # - # With InMemoryDocumentStore or SQLDocumentStore, you can use the TfidfRetriever. For more - # retrievers, please refer to the tutorial-1. - - # An in-memory TfidfRetriever based on Pandas dataframes - retriever = TfidfRetriever(document_store=document_store) - - # ### Reader - # - # A Reader scans the texts returned by retrievers in detail and extracts the k best answers. They are based - # on powerful, but slower deep learning models. - # - # Haystack currently supports Readers based on the frameworks FARM and Transformers. - # With both you can either load a local model or one from Hugging Face's model hub (https://huggingface.co/models). - - # **Here:** a medium sized RoBERTa QA model using a Reader based on - # FARM (https://huggingface.co/deepset/roberta-base-squad2) - # **Alternatives (Reader):** TransformersReader (leveraging the `pipeline` of the Transformers package) - # **Alternatives (Models):** e.g. "distilbert-base-uncased-distilled-squad" (fast) or - # "deepset/bert-large-uncased-whole-word-masking-squad2" (good accuracy) - # **Hint:** You can adjust the model to return "no answer possible" with the no_ans_boost. - # Higher values mean the model prefers "no answer possible". - - # #### FARMReader - # - # Load a local model or any of the QA models on - # Hugging Face's model hub (https://huggingface.co/models) - reader = FARMReader(model_name_or_path="deepset/roberta-base-squad2", use_gpu=True) - - # #### TransformersReader - # Alternative: - # reader = TransformersReader(model_name_or_path="distilbert-base-uncased-distilled-squad", tokenizer="distilbert-base-uncased", use_gpu=-1) - - # ### Pipeline - # - # With a Haystack `Pipeline` you can stick together your building blocks to a search pipeline. - # Under the hood, `Pipelines` are Directed Acyclic Graphs (DAGs) that you can easily customize for your own use cases. - # To speed things up, Haystack also comes with a few predefined Pipelines. One of them is the `ExtractiveQAPipeline` that combines a retriever and a reader to answer our questions. - # You can learn more about `Pipelines` in the [docs](https://haystack.deepset.ai/docs/latest/pipelinesmd). - from haystack.pipelines import ExtractiveQAPipeline - - pipe = ExtractiveQAPipeline(reader, retriever) - - ## Voilà! Ask a question! - prediction = pipe.run( - query="Who is the father of Arya Stark?", params={"Retriever": {"top_k": 10}, "Reader": {"top_k": 5}} - ) - - # prediction = pipe.run(query="Who created the Dothraki vocabulary?", params={"Reader": {"top_k": 5}}) - # prediction = pipe.run(query="Who is the sister of Sansa?", params={"Reader": {"top_k": 5}}) - - # Now you can either print the object directly - print("\n\nRaw object:\n") - from pprint import pprint - - pprint(prediction) - - # Sample output: - # { - # 'answers': [ , - # , - # ... - # ] - # 'documents': [ , - # , - # ... - # ], - # 'no_ans_gap': 11.688868522644043, - # 'node_id': 'Reader', - # 'params': {'Reader': {'top_k': 5}, 'Retriever': {'top_k': 5}}, - # 'query': 'Who is the father of Arya Stark?', - # 'root_node': 'Query' - # } - - # Note that the documents contained in the above object are the documents filtered by the Retriever from - # the document store. Although the answers were extracted from these documents, it's possible that many - # answers were taken from a single one of them, and that some of the documents were not source of any answer. - - # Or use a util to simplify the output - # Change `minimum` to `medium` or `all` to raise the level of detail - print("\n\nSimplified output:\n") - print_answers(prediction, details="minimum") - - -if __name__ == "__main__": - tutorial3_basic_qa_pipeline_without_elasticsearch() - -# This Haystack script was made with love by deepset in Berlin, Germany -# Haystack: https://github.com/deepset-ai/haystack -# deepset: https://deepset.ai/ diff --git a/tutorials/Tutorial4_FAQ_style_QA.ipynb b/tutorials/Tutorial4_FAQ_style_QA.ipynb deleted file mode 100644 index 9993ff4eea..0000000000 --- a/tutorials/Tutorial4_FAQ_style_QA.ipynb +++ /dev/null @@ -1,372 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Utilizing existing FAQs for Question Answering\n", - "\n", - "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/deepset-ai/haystack/blob/main/tutorials/Tutorial4_FAQ_style_QA.ipynb)\n", - "\n", - "While *extractive Question Answering* works on pure texts and is therefore more generalizable, there's also a common alternative that utilizes existing FAQ data.\n", - "\n", - "**Pros**:\n", - "\n", - "- Very fast at inference time\n", - "- Utilize existing FAQ data\n", - "- Quite good control over answers\n", - "\n", - "**Cons**:\n", - "\n", - "- Generalizability: We can only answer questions that are similar to existing ones in FAQ\n", - "\n", - "In some use cases, a combination of extractive QA and FAQ-style can also be an interesting option." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false - }, - "source": [ - "### Prepare environment\n", - "\n", - "#### Colab: Enable the GPU runtime\n", - "Make sure you enable the GPU runtime to experience decent speed in this tutorial.\n", - "**Runtime -> Change Runtime type -> Hardware accelerator -> GPU**\n", - "\n", - "" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "# Make sure you have a GPU running\n", - "!nvidia-smi" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Install the latest release of Haystack in your own environment\n", - "#! pip install farm-haystack\n", - "\n", - "# Install the latest main of Haystack\n", - "!pip install --upgrade pip\n", - "!pip install git+https://github.com/deepset-ai/haystack.git#egg=farm-haystack[colab]" - ] - }, - { - "cell_type": "markdown", - "source": [ - "## Logging\n", - "\n", - "We configure how logging messages should be displayed and which log level should be used before importing Haystack.\n", - "Example log message:\n", - "INFO - haystack.utils.preprocessing - Converting data/tutorial1/218_Olenna_Tyrell.txt\n", - "Default log level in basicConfig is WARNING so the explicit parameter is not necessary but can be changed easily:" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - } - }, - { - "cell_type": "code", - "execution_count": null, - "outputs": [], - "source": [ - "import logging\n", - "\n", - "logging.basicConfig(format=\"%(levelname)s - %(name)s - %(message)s\", level=logging.WARNING)\n", - "logging.getLogger(\"haystack\").setLevel(logging.INFO)" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "pycharm": { - "is_executing": false - } - }, - "outputs": [], - "source": [ - "from haystack.document_stores import ElasticsearchDocumentStore\n", - "\n", - "from haystack.nodes import EmbeddingRetriever\n", - "import pandas as pd" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Start an Elasticsearch server\n", - "You can start Elasticsearch on your local machine instance using Docker. If Docker is not readily available in your environment (eg., in Colab notebooks), then you can manually download and execute Elasticsearch from source." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Recommended: Start Elasticsearch using Docker via the Haystack utility function\n", - "from haystack.utils import launch_es\n", - "\n", - "launch_es()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# In Colab / No Docker environments: Start Elasticsearch from source\n", - "! wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.9.2-linux-x86_64.tar.gz -q\n", - "! tar -xzf elasticsearch-7.9.2-linux-x86_64.tar.gz\n", - "! chown -R daemon:daemon elasticsearch-7.9.2\n", - "\n", - "import os\n", - "from subprocess import Popen, PIPE, STDOUT\n", - "\n", - "es_server = Popen(\n", - " [\"elasticsearch-7.9.2/bin/elasticsearch\"], stdout=PIPE, stderr=STDOUT, preexec_fn=lambda: os.setuid(1) # as daemon\n", - ")\n", - "# wait until ES has started\n", - "! sleep 30" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false - }, - "source": [ - "### Init the DocumentStore\n", - "In contrast to Tutorial 1 (extractive QA), we:\n", - "\n", - "* specify the name of our `text_field` in Elasticsearch that we want to return as an answer\n", - "* specify the name of our `embedding_field` in Elasticsearch where we'll store the embedding of our question and that is used later for calculating our similarity to the incoming user question\n", - "* set `excluded_meta_data=[\"question_emb\"]` so that we don't return the huge embedding vectors in our search results" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "04/28/2020 12:27:32 - INFO - elasticsearch - PUT http://localhost:9200/document [status:400 request:0.010s]\n" - ] - } - ], - "source": [ - "from haystack.document_stores import ElasticsearchDocumentStore\n", - "\n", - "document_store = ElasticsearchDocumentStore(\n", - " host=\"localhost\",\n", - " username=\"\",\n", - " password=\"\",\n", - " index=\"document\",\n", - " embedding_field=\"question_emb\",\n", - " embedding_dim=384,\n", - " excluded_meta_data=[\"question_emb\"],\n", - " similarity=\"cosine\",\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false - }, - "source": [ - "### Create a Retriever using embeddings\n", - "Instead of retrieving via Elasticsearch's plain BM25, we want to use vector similarity of the questions (user question vs. FAQ ones).\n", - "We can use the `EmbeddingRetriever` for this purpose and specify a model that we use for the embeddings." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "retriever = EmbeddingRetriever(\n", - " document_store=document_store,\n", - " embedding_model=\"sentence-transformers/all-MiniLM-L6-v2\",\n", - " use_gpu=True,\n", - " scale_score=False,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false - }, - "source": [ - "### Prepare & Index FAQ data\n", - "We create a pandas dataframe containing some FAQ data (i.e curated pairs of question + answer) and index those in elasticsearch.\n", - "Here: We download some question-answer pairs related to COVID-19" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "from haystack.utils import fetch_archive_from_http\n", - "\n", - "# Download\n", - "doc_dir = \"data/tutorial4\"\n", - "s3_url = \"https://s3.eu-central-1.amazonaws.com/deepset.ai-farm-qa/datasets/documents/small_faq_covid.csv.zip\"\n", - "fetch_archive_from_http(url=s3_url, output_dir=doc_dir)\n", - "\n", - "# Get dataframe with columns \"question\", \"answer\" and some custom metadata\n", - "df = pd.read_csv(f\"{doc_dir}/small_faq_covid.csv\")\n", - "# Minimal cleaning\n", - "df.fillna(value=\"\", inplace=True)\n", - "df[\"question\"] = df[\"question\"].apply(lambda x: x.strip())\n", - "print(df.head())\n", - "\n", - "# Get embeddings for our questions from the FAQs\n", - "questions = list(df[\"question\"].values)\n", - "df[\"question_emb\"] = retriever.embed_queries(texts=questions)\n", - "df = df.rename(columns={\"question\": \"content\"})\n", - "\n", - "# Convert Dataframe to list of dicts and index them in our DocumentStore\n", - "docs_to_index = df.to_dict(orient=\"records\")\n", - "document_store.write_documents(docs_to_index)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false - }, - "source": [ - "### Ask questions\n", - "Initialize a Pipeline (this time without a reader) and ask questions" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "from haystack.pipelines import FAQPipeline\n", - "\n", - "pipe = FAQPipeline(retriever=retriever)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "from haystack.utils import print_answers\n", - "\n", - "prediction = pipe.run(query=\"How is the virus spreading?\", params={\"Retriever\": {\"top_k\": 10}})\n", - "print_answers(prediction, details=\"medium\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false - }, - "source": [ - "## About us\n", - "\n", - "This [Haystack](https://github.com/deepset-ai/haystack/) notebook was made with love by [deepset](https://deepset.ai/) in Berlin, Germany\n", - "\n", - "We bring NLP to the industry via open source! \n", - "Our focus: Industry specific language models & large scale QA systems. \n", - " \n", - "Some of our other work: \n", - "- [German BERT](https://deepset.ai/german-bert)\n", - "- [GermanQuAD and GermanDPR](https://deepset.ai/germanquad)\n", - "- [FARM](https://github.com/deepset-ai/FARM)\n", - "\n", - "Get in touch:\n", - "[Twitter](https://twitter.com/deepset_ai) | [LinkedIn](https://www.linkedin.com/company/deepset-ai/) | [Slack](https://haystack.deepset.ai/community/join) | [GitHub Discussions](https://github.com/deepset-ai/haystack/discussions) | [Website](https://deepset.ai)\n", - "\n", - "By the way: [we're hiring!](https://www.deepset.ai/jobs)" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "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.7.6" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} \ No newline at end of file diff --git a/tutorials/Tutorial4_FAQ_style_QA.py b/tutorials/Tutorial4_FAQ_style_QA.py deleted file mode 100755 index 8bcc719975..0000000000 --- a/tutorials/Tutorial4_FAQ_style_QA.py +++ /dev/null @@ -1,99 +0,0 @@ -import logging - -# We configure how logging messages should be displayed and which log level should be used before importing Haystack. -# Example log message: -# INFO - haystack.utils.preprocessing - Converting data/tutorial1/218_Olenna_Tyrell.txt -# Default log level in basicConfig is WARNING so the explicit parameter is not necessary but can be changed easily: -logging.basicConfig(format="%(levelname)s - %(name)s - %(message)s", level=logging.WARNING) -logging.getLogger("haystack").setLevel(logging.INFO) - -from haystack.document_stores import ElasticsearchDocumentStore - -from haystack.nodes import EmbeddingRetriever -from haystack.utils import launch_es, print_answers, fetch_archive_from_http -import pandas as pd - - -def tutorial4_faq_style_qa(): - ## "FAQ-Style QA": Utilizing existing FAQs for Question Answering - - # While *extractive Question Answering* works on pure texts and is therefore more generalizable, there's also a common alternative that utilizes existing FAQ data. - # - # Pros: - # - Very fast at inference time - # - Utilize existing FAQ data - # - Quite good control over answers - # - # Cons: - # - Generalizability: We can only answer questions that are similar to existing ones in FAQ - # - # In some use cases, a combination of extractive QA and FAQ-style can also be an interesting option. - launch_es() - - ### Init the DocumentStore - # In contrast to Tutorial 1 (extractive QA), we: - # - # * specify the name of our `text_field` in Elasticsearch that we want to return as an answer - # * specify the name of our `embedding_field` in Elasticsearch where we'll store the embedding of our question and that is used later for calculating our similarity to the incoming user question - # * set `excluded_meta_data=["question_emb"]` so that we don't return the huge embedding vectors in our search results - - document_store = ElasticsearchDocumentStore( - host="localhost", - username="", - password="", - index="document", - embedding_field="question_emb", - embedding_dim=384, - excluded_meta_data=["question_emb"], - similarity="cosine", - ) - - ### Create a Retriever using embeddings - # Instead of retrieving via Elasticsearch's plain BM25, we want to use vector similarity of the questions (user question vs. FAQ ones). - # We can use the `EmbeddingRetriever` for this purpose and specify a model that we use for the embeddings. - # - retriever = EmbeddingRetriever( - document_store=document_store, - embedding_model="sentence-transformers/all-MiniLM-L6-v2", - use_gpu=True, - scale_score=False, - ) - - # Download a csv containing some FAQ data - # Here: Some question-answer pairs related to COVID-19 - doc_dir = "data/tutorial4" - s3_url = "https://s3.eu-central-1.amazonaws.com/deepset.ai-farm-qa/datasets/documents/small_faq_covid.csv.zip" - fetch_archive_from_http(url=s3_url, output_dir=doc_dir) - - # Get dataframe with columns "question", "answer" and some custom metadata - df = pd.read_csv(f"{doc_dir}/small_faq_covid.csv") - # Minimal cleaning - df.fillna(value="", inplace=True) - df["question"] = df["question"].apply(lambda x: x.strip()) - print(df.head()) - - # Get embeddings for our questions from the FAQs - questions = list(df["question"].values) - df["question_emb"] = retriever.embed_queries(texts=questions) - df = df.rename(columns={"question": "content"}) - - # Convert Dataframe to list of dicts and index them in our DocumentStore - docs_to_index = df.to_dict(orient="records") - document_store.write_documents(docs_to_index) - - # Initialize a Pipeline (this time without a reader) and ask questions - - from haystack.pipelines import FAQPipeline - - pipe = FAQPipeline(retriever=retriever) - - prediction = pipe.run(query="How is the virus spreading?", params={"Retriever": {"top_k": 10}}) - print_answers(prediction, details="medium") - - -if __name__ == "__main__": - tutorial4_faq_style_qa() - -# This Haystack script was made with love by deepset in Berlin, Germany -# Haystack: https://github.com/deepset-ai/haystack -# deepset: https://deepset.ai/ diff --git a/tutorials/Tutorial5_Evaluation.ipynb b/tutorials/Tutorial5_Evaluation.ipynb deleted file mode 100644 index 81bb1f0042..0000000000 --- a/tutorials/Tutorial5_Evaluation.ipynb +++ /dev/null @@ -1,16005 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": { - "collapsed": false - }, - "source": [ - "# Evaluation of a Pipeline and its Components\n", - "\n", - "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/deepset-ai/haystack/blob/main/tutorials/Tutorial5_Evaluation.ipynb)\n", - "\n", - "To be able to make a statement about the quality of results a question-answering pipeline or any other pipeline in haystack produces, it is important to evaluate it. Furthermore, evaluation allows determining which components of the pipeline can be improved.\n", - "The results of the evaluation can be saved as CSV files, which contain all the information to calculate additional metrics later on or inspect individual predictions." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "lEKOjCS5U7so", - "pycharm": { - "is_executing": true - } - }, - "source": [ - "### Prepare environment\n", - "\n", - "#### Colab: Enable the GPU runtime\n", - "Make sure you enable the GPU runtime to experience decent speed in this tutorial.\n", - "**Runtime -> Change Runtime type -> Hardware accelerator -> GPU**\n", - "\n", - "" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "xhFIMX_7U7ss", - "outputId": "285b2491-01e5-4bfd-cba9-c2279d4417c4", - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "# Make sure you have a GPU running\n", - "!nvidia-smi" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 1000 - }, - "id": "vgmFOp82Oht_", - "outputId": "5bbcbb42-3a90-43a9-ebfd-598a98fa7143", - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "# Install the latest release of Haystack in your own environment\n", - "#! pip install farm-haystack\n", - "\n", - "# Install the latest main of Haystack\n", - "!pip install --upgrade pip\n", - "!pip install git+https://github.com/deepset-ai/haystack.git#egg=farm-haystack[colab]" - ] - }, - { - "cell_type": "markdown", - "source": [ - "## Logging\n", - "\n", - "We configure how logging messages should be displayed and which log level should be used before importing Haystack.\n", - "Example log message:\n", - "INFO - haystack.utils.preprocessing - Converting data/tutorial1/218_Olenna_Tyrell.txt\n", - "Default log level in basicConfig is WARNING so the explicit parameter is not necessary but can be changed easily:" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - } - }, - { - "cell_type": "code", - "execution_count": null, - "outputs": [], - "source": [ - "import logging\n", - "\n", - "logging.basicConfig(format=\"%(levelname)s - %(name)s - %(message)s\", level=logging.WARNING)\n", - "logging.getLogger(\"haystack\").setLevel(logging.INFO)" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Start an Elasticsearch server\n", - "You can start Elasticsearch on your local machine instance using Docker. If Docker is not readily available in your environment (eg., in Colab notebooks), then you can manually download and execute Elasticsearch from source." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "tNoaWcDKOhuL", - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "# If Docker is available: Start Elasticsearch as docker container\n", - "# from haystack.utils import launch_es\n", - "# launch_es()\n", - "\n", - "# Alternative in Colab / No Docker environments: Start Elasticsearch from source\n", - "! wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.9.2-linux-x86_64.tar.gz -q\n", - "! tar -xzf elasticsearch-7.9.2-linux-x86_64.tar.gz\n", - "! chown -R daemon:daemon elasticsearch-7.9.2\n", - "\n", - "import os\n", - "from subprocess import Popen, PIPE, STDOUT\n", - "\n", - "es_server = Popen(\n", - " [\"elasticsearch-7.9.2/bin/elasticsearch\"], stdout=PIPE, stderr=STDOUT, preexec_fn=lambda: os.setuid(1) # as daemon\n", - ")\n", - "# wait until ES has started\n", - "! sleep 30" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Fetch, Store And Preprocess the Evaluation Dataset" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "tTXxr6TAOhuz", - "outputId": "586d4775-4354-4ed9-a72c-c30bedcdfbee", - "pycharm": { - "is_executing": true, - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "from haystack.utils import fetch_archive_from_http\n", - "\n", - "# Download evaluation data, which is a subset of Natural Questions development set containing 50 documents with one question per document and multiple annotated answers\n", - "doc_dir = \"data/tutorial5\"\n", - "s3_url = \"https://s3.eu-central-1.amazonaws.com/deepset.ai-farm-qa/datasets/nq_dev_subset_v2.json.zip\"\n", - "fetch_archive_from_http(url=s3_url, output_dir=doc_dir)" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "id": "T-G7Ay2jU7s_" - }, - "outputs": [], - "source": [ - "# make sure these indices do not collide with existing ones, the indices will be wiped clean before data is inserted\n", - "doc_index = \"tutorial5_docs\"\n", - "label_index = \"tutorial5_labels\"" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": { - "id": "B_NEtezLOhu5", - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "# Connect to Elasticsearch\n", - "from haystack.document_stores import ElasticsearchDocumentStore\n", - "\n", - "# Connect to Elasticsearch\n", - "document_store = ElasticsearchDocumentStore(\n", - " host=\"localhost\",\n", - " username=\"\",\n", - " password=\"\",\n", - " index=doc_index,\n", - " label_index=label_index,\n", - " embedding_field=\"emb\",\n", - " embedding_dim=768,\n", - " excluded_meta_data=[\"emb\"],\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "bRFsQUAJOhu_", - "outputId": "477031b9-5c2c-4128-ef5f-54db86259734", - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "from haystack.nodes import PreProcessor\n", - "\n", - "# Add evaluation data to Elasticsearch Document Store\n", - "# We first delete the custom tutorial indices to not have duplicate elements\n", - "# and also split our documents into shorter passages using the PreProcessor\n", - "preprocessor = PreProcessor(\n", - " split_by=\"word\",\n", - " split_length=200,\n", - " split_overlap=0,\n", - " split_respect_sentence_boundary=False,\n", - " clean_empty_lines=False,\n", - " clean_whitespace=False,\n", - ")\n", - "document_store.delete_documents(index=doc_index)\n", - "document_store.delete_documents(index=label_index)\n", - "\n", - "# The add_eval_data() method converts the given dataset in json format into Haystack document and label objects. Those objects are then indexed in their respective document and label index in the document store. The method can be used with any dataset in SQuAD format.\n", - "document_store.add_eval_data(\n", - " filename=\"data/tutorial5/nq_dev_subset_v2.json\",\n", - " doc_index=doc_index,\n", - " label_index=label_index,\n", - " preprocessor=preprocessor,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "gy8YwmSYOhvE", - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "## Initialize the Two Components of an ExtractiveQAPipeline: Retriever and Reader" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": { - "id": "JkhaPMIJOhvF", - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "# Initialize Retriever\n", - "from haystack.nodes import BM25Retriever\n", - "\n", - "retriever = BM25Retriever(document_store=document_store)\n", - "\n", - "# Alternative: Evaluate dense retrievers (EmbeddingRetriever or DensePassageRetriever)\n", - "# The EmbeddingRetriever uses a single transformer based encoder model for query and document.\n", - "# In contrast, DensePassageRetriever uses two separate encoders for both.\n", - "\n", - "# Please make sure the \"embedding_dim\" parameter in the DocumentStore above matches the output dimension of your models!\n", - "# Please also take care that the PreProcessor splits your files into chunks that can be completely converted with\n", - "# the max_seq_len limitations of Transformers\n", - "# The SentenceTransformer model \"sentence-transformers/multi-qa-mpnet-base-dot-v1\" generally works well with the EmbeddingRetriever on any kind of English text.\n", - "# For more information and suggestions on different models check out the documentation at: https://www.sbert.net/docs/pretrained_models.html\n", - "\n", - "# from haystack.retriever import EmbeddingRetriever, DensePassageRetriever\n", - "# retriever = EmbeddingRetriever(document_store=document_store,\n", - "# embedding_model=\"sentence-transformers/multi-qa-mpnet-base-dot-v1\")\n", - "# retriever = DensePassageRetriever(document_store=document_store,\n", - "# query_embedding_model=\"facebook/dpr-question_encoder-single-nq-base\",\n", - "# passage_embedding_model=\"facebook/dpr-ctx_encoder-single-nq-base\",\n", - "# use_gpu=True,\n", - "# max_seq_len_passage=256,\n", - "# embed_title=True)\n", - "# document_store.update_embeddings(retriever, index=doc_index)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 313, - "referenced_widgets": [ - "118aedffeecd4f109ae04a4561baeb08", - "59efb57b419242a1aba4d20084e29d38", - "ddaf59cedca143c8b4fe005a51077323", - "25d7818d6f7b4b628ab3f83f2c2fa6a3", - "48431fa7696540fc9696799f75166680", - "a21f4958105f4b3ca32f0977bcfd7d48", - "3d211e6614f4451e9d14866cb3a8332d", - "3df3da3d04d5448c810bd00f66bd3a0e", - "8dfc1480100f43e0b4ea2fc2fb9279d3", - "0618a236cc14473f92257aebbc3d930d", - "8e0958b5dc27412e9f0332da3457ffdb", - "6f7ddc1720344ba9b939a8e4ac593d67", - "b480c97c1d9944b9a8dd09ed6e1e9bd3", - "ed683929822b4084ba33e89b23936b16", - "94c88d0fc3f949fbacfb6b4fcd99cc63", - "b262e92ff6484405a0e9364f6ecafb6a", - "bacf1704dbaf4176afbe2cbcc8e036ef", - "fe56b1d86ab84675b82781a1f8edd40a", - "d7e3c8e1e0424cec9dc1b97090b5af87", - "98da94a8d7b94fb4a08adcebea15e114", - "13b75146701145808315dc87d598b3f9", - "2bd3bd51ae644c1894a2ddca09d14e85", - "59039df74ce64c2f9e91663b6498c29c", - "9e130b97f0f4463f85df834d0f99d6ef", - "2c028a3f096344d68071d78387efa117", - "4d922fb301f944fbb0218335a28cf6e5", - "05d82995d5a94b5db39bf639d1cc05c2", - "76f4af76b42f460fa34d5f00a9656dc5", - "73d7fdd3f38349b4882124d8351eace5", - "ea439e2251ed467fb3a775f0c8e0c3bb", - "b6729cc6ba084677af55ac63c819b72f", - "fc011913e8464d439a97fe75ef5f9fa1", - "8a9f9b7bab8e40278430a35720066a61", - "5db857b352964db3a617568ff1dce86d", - "7752437041f745a4af4b9130df3fefa7", - "5f94d400ea884c1cadfc966e44849b3a", - "0d34710578ac4c1db6fe372b5d1215b4", - "994ae85181664e2e87a2ee18a7a237ba", - "368a61e33c3144bfa3cc94af10691146", - "ccfd1a0b6f494d8a9d78e7387261fba8", - "db57281b3d7a448fbd2d63d8f127ea3e", - "978b165c69dd4e14b8479ea7bd8cb1e5", - "6f028c7e888e4ae5ab5c1e42ff142b5f", - "c8ba8c2a210b45f6a9b5257589babac3", - "36f855f41cc1488f9d92ec34bb8d30b0", - "1d5d220bedc54dbdbacb9c43767bf64d", - "0523b10429d04f3d81d7078a13a12168", - "64cd5b6f0c4d4631a1049ee7ee50f063", - "eb11ea5785284bf6a15cc31ad643ed88", - "807e4eee3b2c440c8799afcc6344ff5d", - "6ca6dc2c6b4349fcb39ed8c44f65bdb0", - "4837b34ccb4d4688865dc24dc58a7c1e", - "d4dbfa5e89e7432dbed34606a786fd6f", - "7e058076836e438daf5399428eabac5e", - "a529dbbfdd6b469dbfe80cee993c9a33", - "69750fea2e7149eab8928282ba9bae29", - "08a1d1a6fb884c769d409170d6cda556", - "548ef6c85056414cb0ce79164a086d35", - "cf58b340496b4d62b610451cedbd709a", - "4dad7e58cc47436aafe38230514325a1", - "f36dc87a4af7481cb3c2cba23d57eb5a", - "2a9ef1f2f43d47b28cd0ff7ef4a21ade", - "caa374f7dc5045218c6f71f322d8e6be", - "e567fab4446544f795be2eb0a6705f9c", - "2b17ffac93b8406fac55b695d93d963b", - "3096cae7388e4b988df306be9cc58afd" - ] - }, - "id": "cW3Ypn_gOhvK", - "outputId": "4b5feff7-ae9f-4cd8-de1e-944f0eb66f66", - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "# Initialize Reader\n", - "from haystack.nodes import FARMReader\n", - "\n", - "reader = FARMReader(\"deepset/roberta-base-squad2\", top_k=4, return_no_answer=True)\n", - "\n", - "# Define a pipeline consisting of the initialized retriever and reader\n", - "from haystack.pipelines import ExtractiveQAPipeline\n", - "\n", - "pipeline = ExtractiveQAPipeline(reader=reader, retriever=retriever)\n", - "\n", - "# The evaluation also works with any other pipeline.\n", - "# For example you could use a DocumentSearchPipeline as an alternative:\n", - "\n", - "# from haystack.pipelines import DocumentSearchPipeline\n", - "# pipeline = DocumentSearchPipeline(retriever=retriever)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "7i84KXONOhvc", - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "## Evaluation of an ExtractiveQAPipeline\n", - "Here we evaluate retriever and reader in open domain fashion on the full corpus of documents i.e. a document is considered\n", - "correctly retrieved if it contains the gold answer string within it. The reader is evaluated based purely on the\n", - "predicted answer string, regardless of which document this came from and the position of the extracted span.\n", - "\n", - "The generation of predictions is separated from the calculation of metrics. This allows you to run the computation-heavy model predictions only once and then iterate flexibly on the metrics or reports you want to generate.\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "from haystack.schema import EvaluationResult, MultiLabel\n", - "\n", - "# We can load evaluation labels from the document store\n", - "# We are also opting to filter out no_answer samples\n", - "eval_labels = document_store.get_all_labels_aggregated(drop_negative_labels=True, drop_no_answers=True)\n", - "\n", - "## Alternative: Define queries and labels directly\n", - "\n", - "# eval_labels = [\n", - "# MultiLabel(\n", - "# labels=[\n", - "# Label(\n", - "# query=\"who is written in the book of life\",\n", - "# answer=Answer(\n", - "# answer=\"every person who is destined for Heaven or the World to Come\",\n", - "# offsets_in_context=[Span(374, 434)]\n", - "# ),\n", - "# document=Document(\n", - "# id='1b090aec7dbd1af6739c4c80f8995877-0',\n", - "# content_type=\"text\",\n", - "# content='Book of Life - wikipedia Book of Life Jump to: navigation, search This article is\n", - "# about the book mentioned in Christian and Jewish religious teachings...'\n", - "# ),\n", - "# is_correct_answer=True,\n", - "# is_correct_document=True,\n", - "# origin=\"gold-label\"\n", - "# )\n", - "# ]\n", - "# )\n", - "# ]\n", - "\n", - "# Similar to pipeline.run() we can execute pipeline.eval()\n", - "eval_result = pipeline.eval(labels=eval_labels, params={\"Retriever\": {\"top_k\": 5}})" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": { - "pycharm": { - "name": "#%%\n" - } - }, - "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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
multilabel_idqueryfilterscontextgold_contextsgold_id_matchcontext_matchanswer_matchgold_id_or_answer_matchgold_id_and_answer_match...rankdocument_idgold_document_idsgold_documents_id_matchgold_contexts_similaritygold_answers_matchtypenodeeval_modeindex
05403753299762339270who is written in the book of lifeb'null'people considered righteous before God. God has such a book, and to be blott...[Book of Life - wikipedia Book of Life Jump to: navigation, search This arti...0.00.00.00.00.0...1.0737cb9cd71126bd25296bce035a5956f-1[de2fd2f109e11213af1ea189fd1488a3-0, de2fd2f109e11213af1ea189fd1488a3-0][0.0, 0.0][44.474885844748854, 44.474885844748854][0.0, 0.0]documentRetrieverintegrated0
15403753299762339270who is written in the book of lifeb'null'as adversaries (of God). Also, according to ib. xxxvi. 10, one who contrives...[Book of Life - wikipedia Book of Life Jump to: navigation, search This arti...0.00.00.00.00.0...2.0fcfe96ddea6611b56ffaeda010d3a111-2[de2fd2f109e11213af1ea189fd1488a3-0, de2fd2f109e11213af1ea189fd1488a3-0][0.0, 0.0][44.5703493862134, 44.5703493862134][0.0, 0.0]documentRetrieverintegrated1
25403753299762339270who is written in the book of lifeb'null'the citizens' registers. The life which the righteous participate in is to b...[Book of Life - wikipedia Book of Life Jump to: navigation, search This arti...0.00.00.00.00.0...3.05f3f7a6be74e24b1065a4d770585d210-6[de2fd2f109e11213af1ea189fd1488a3-0, de2fd2f109e11213af1ea189fd1488a3-0][0.0, 0.0][44.374184960316995, 44.374184960316995][0.0, 0.0]documentRetrieverintegrated2
35403753299762339270who is written in the book of lifeb'null'apostles' names are ``written in heaven'' (Luke x. 20), or ``the fellow-work...[Book of Life - wikipedia Book of Life Jump to: navigation, search This arti...0.00.00.00.00.0...4.0bcc533ac40605a5faa63f4b0d7124404-3[de2fd2f109e11213af1ea189fd1488a3-0, de2fd2f109e11213af1ea189fd1488a3-0][0.0, 0.0][42.68629254829806, 42.68629254829806][0.0, 0.0]documentRetrieverintegrated3
45403753299762339270who is written in the book of lifeb'null'The Absolutely True Diary of a Part-Time Indian - wikipedia The Absolutely T...[Book of Life - wikipedia Book of Life Jump to: navigation, search This arti...0.00.00.00.00.0...5.0edba8a30690fe62dd0330344f6ad98ba-0[de2fd2f109e11213af1ea189fd1488a3-0, de2fd2f109e11213af1ea189fd1488a3-0][0.0, 0.0][42.55874673629243, 42.55874673629243][0.0, 0.0]documentRetrieverintegrated4
\n", - "

5 rows × 24 columns

\n", - "
" - ], - "text/plain": [ - " multilabel_id query filters \\\n", - "0 5403753299762339270 who is written in the book of life b'null' \n", - "1 5403753299762339270 who is written in the book of life b'null' \n", - "2 5403753299762339270 who is written in the book of life b'null' \n", - "3 5403753299762339270 who is written in the book of life b'null' \n", - "4 5403753299762339270 who is written in the book of life b'null' \n", - "\n", - " context \\\n", - "0 people considered righteous before God. God has such a book, and to be blott... \n", - "1 as adversaries (of God). Also, according to ib. xxxvi. 10, one who contrives... \n", - "2 the citizens' registers. The life which the righteous participate in is to b... \n", - "3 apostles' names are ``written in heaven'' (Luke x. 20), or ``the fellow-work... \n", - "4 The Absolutely True Diary of a Part-Time Indian - wikipedia The Absolutely T... \n", - "\n", - " gold_contexts \\\n", - "0 [Book of Life - wikipedia Book of Life Jump to: navigation, search This arti... \n", - "1 [Book of Life - wikipedia Book of Life Jump to: navigation, search This arti... \n", - "2 [Book of Life - wikipedia Book of Life Jump to: navigation, search This arti... \n", - "3 [Book of Life - wikipedia Book of Life Jump to: navigation, search This arti... \n", - "4 [Book of Life - wikipedia Book of Life Jump to: navigation, search This arti... \n", - "\n", - " gold_id_match context_match answer_match gold_id_or_answer_match \\\n", - "0 0.0 0.0 0.0 0.0 \n", - "1 0.0 0.0 0.0 0.0 \n", - "2 0.0 0.0 0.0 0.0 \n", - "3 0.0 0.0 0.0 0.0 \n", - "4 0.0 0.0 0.0 0.0 \n", - "\n", - " gold_id_and_answer_match ... rank document_id \\\n", - "0 0.0 ... 1.0 737cb9cd71126bd25296bce035a5956f-1 \n", - "1 0.0 ... 2.0 fcfe96ddea6611b56ffaeda010d3a111-2 \n", - "2 0.0 ... 3.0 5f3f7a6be74e24b1065a4d770585d210-6 \n", - "3 0.0 ... 4.0 bcc533ac40605a5faa63f4b0d7124404-3 \n", - "4 0.0 ... 5.0 edba8a30690fe62dd0330344f6ad98ba-0 \n", - "\n", - " gold_document_ids \\\n", - "0 [de2fd2f109e11213af1ea189fd1488a3-0, de2fd2f109e11213af1ea189fd1488a3-0] \n", - "1 [de2fd2f109e11213af1ea189fd1488a3-0, de2fd2f109e11213af1ea189fd1488a3-0] \n", - "2 [de2fd2f109e11213af1ea189fd1488a3-0, de2fd2f109e11213af1ea189fd1488a3-0] \n", - "3 [de2fd2f109e11213af1ea189fd1488a3-0, de2fd2f109e11213af1ea189fd1488a3-0] \n", - "4 [de2fd2f109e11213af1ea189fd1488a3-0, de2fd2f109e11213af1ea189fd1488a3-0] \n", - "\n", - " gold_documents_id_match gold_contexts_similarity \\\n", - "0 [0.0, 0.0] [44.474885844748854, 44.474885844748854] \n", - "1 [0.0, 0.0] [44.5703493862134, 44.5703493862134] \n", - "2 [0.0, 0.0] [44.374184960316995, 44.374184960316995] \n", - "3 [0.0, 0.0] [42.68629254829806, 42.68629254829806] \n", - "4 [0.0, 0.0] [42.55874673629243, 42.55874673629243] \n", - "\n", - " gold_answers_match type node eval_mode index \n", - "0 [0.0, 0.0] document Retriever integrated 0 \n", - "1 [0.0, 0.0] document Retriever integrated 1 \n", - "2 [0.0, 0.0] document Retriever integrated 2 \n", - "3 [0.0, 0.0] document Retriever integrated 3 \n", - "4 [0.0, 0.0] document Retriever integrated 4 \n", - "\n", - "[5 rows x 24 columns]" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# The EvaluationResult contains a pandas dataframe for each pipeline node.\n", - "# That's why there are two dataframes in the EvaluationResult of an ExtractiveQAPipeline.\n", - "\n", - "retriever_result = eval_result[\"Retriever\"]\n", - "retriever_result.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": { - "pycharm": { - "name": "#%%\n" - } - }, - "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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
multilabel_idqueryfiltersgold_answersanswercontextexact_matchf1exact_match_context_scopef1_context_scope...offsets_in_documentgold_offsets_in_documentsgold_answers_exact_matchgold_answers_f1gold_documents_id_matchgold_contexts_similaritytypenodeeval_modeindex
05403753299762339270who is written in the book of lifeb'null'[all people considered righteous before God, every person who is destined fo...None0.00.0000000.00.0...[{'start': 0, 'end': 0}][{'start': 1107, 'end': 1149}, {'start': 374, 'end': 434}][0, 0][0, 0][0.0, 0.0][0.0, 0.0]answerReaderintegrated0
15403753299762339270who is written in the book of lifeb'null'[all people considered righteous before God, every person who is destined fo...those whose names are written in the Book of Life from the foundation of the...ohn of Patmos. As described, only those whose names are written in the Book ...0.00.0833330.00.0...[{'start': 576, 'end': 658}][{'start': 1107, 'end': 1149}, {'start': 374, 'end': 434}][0, 0][0, 0.08333333333333334][0.0, 0.0][50.0, 50.0]answerReaderintegrated1
25403753299762339270who is written in the book of lifeb'null'[all people considered righteous before God, every person who is destined fo...only the names of the righteous. The Psalmist likewise speaks of the Book of Life in which only the names o...0.00.2000000.00.0...[{'start': 498, 'end': 529}][{'start': 1107, 'end': 1149}, {'start': 374, 'end': 434}][0, 0][0.2, 0][0.0, 0.0][52.0, 52.0]answerReaderintegrated2
35403753299762339270who is written in the book of lifeb'null'[all people considered righteous before God, every person who is destined fo...those who are found written in the book and who shall escape the troubles pr...those who are found written in the book and who shall escape the troubles pr...0.00.1111110.00.0...[{'start': 135, 'end': 305}][{'start': 1107, 'end': 1149}, {'start': 374, 'end': 434}][0, 0][0, 0.1111111111111111][0.0, 0.0][46.470588235294116, 46.470588235294116]answerReaderintegrated3
05186659498043378562who was the girl in the video brenda got a babyb'null'[Ethel ``Edy'' Proctor]her cousinng a story in the newspaper of a 12-year-old girl getting pregnant by her co...0.00.0000000.00.0...[{'start': 423, 'end': 433}][{'start': 181, 'end': 202}][0][0][1.0][100.0]answerReaderintegrated0
\n", - "

5 rows × 28 columns

\n", - "
" - ], - "text/plain": [ - " multilabel_id query \\\n", - "0 5403753299762339270 who is written in the book of life \n", - "1 5403753299762339270 who is written in the book of life \n", - "2 5403753299762339270 who is written in the book of life \n", - "3 5403753299762339270 who is written in the book of life \n", - "0 5186659498043378562 who was the girl in the video brenda got a baby \n", - "\n", - " filters \\\n", - "0 b'null' \n", - "1 b'null' \n", - "2 b'null' \n", - "3 b'null' \n", - "0 b'null' \n", - "\n", - " gold_answers \\\n", - "0 [all people considered righteous before God, every person who is destined fo... \n", - "1 [all people considered righteous before God, every person who is destined fo... \n", - "2 [all people considered righteous before God, every person who is destined fo... \n", - "3 [all people considered righteous before God, every person who is destined fo... \n", - "0 [Ethel ``Edy'' Proctor] \n", - "\n", - " answer \\\n", - "0 \n", - "1 those whose names are written in the Book of Life from the foundation of the... \n", - "2 only the names of the righteous \n", - "3 those who are found written in the book and who shall escape the troubles pr... \n", - "0 her cousin \n", - "\n", - " context \\\n", - "0 None \n", - "1 ohn of Patmos. As described, only those whose names are written in the Book ... \n", - "2 . The Psalmist likewise speaks of the Book of Life in which only the names o... \n", - "3 those who are found written in the book and who shall escape the troubles pr... \n", - "0 ng a story in the newspaper of a 12-year-old girl getting pregnant by her co... \n", - "\n", - " exact_match f1 exact_match_context_scope f1_context_scope ... \\\n", - "0 0.0 0.000000 0.0 0.0 ... \n", - "1 0.0 0.083333 0.0 0.0 ... \n", - "2 0.0 0.200000 0.0 0.0 ... \n", - "3 0.0 0.111111 0.0 0.0 ... \n", - "0 0.0 0.000000 0.0 0.0 ... \n", - "\n", - " offsets_in_document \\\n", - "0 [{'start': 0, 'end': 0}] \n", - "1 [{'start': 576, 'end': 658}] \n", - "2 [{'start': 498, 'end': 529}] \n", - "3 [{'start': 135, 'end': 305}] \n", - "0 [{'start': 423, 'end': 433}] \n", - "\n", - " gold_offsets_in_documents \\\n", - "0 [{'start': 1107, 'end': 1149}, {'start': 374, 'end': 434}] \n", - "1 [{'start': 1107, 'end': 1149}, {'start': 374, 'end': 434}] \n", - "2 [{'start': 1107, 'end': 1149}, {'start': 374, 'end': 434}] \n", - "3 [{'start': 1107, 'end': 1149}, {'start': 374, 'end': 434}] \n", - "0 [{'start': 181, 'end': 202}] \n", - "\n", - " gold_answers_exact_match gold_answers_f1 gold_documents_id_match \\\n", - "0 [0, 0] [0, 0] [0.0, 0.0] \n", - "1 [0, 0] [0, 0.08333333333333334] [0.0, 0.0] \n", - "2 [0, 0] [0.2, 0] [0.0, 0.0] \n", - "3 [0, 0] [0, 0.1111111111111111] [0.0, 0.0] \n", - "0 [0] [0] [1.0] \n", - "\n", - " gold_contexts_similarity type node eval_mode index \n", - "0 [0.0, 0.0] answer Reader integrated 0 \n", - "1 [50.0, 50.0] answer Reader integrated 1 \n", - "2 [52.0, 52.0] answer Reader integrated 2 \n", - "3 [46.470588235294116, 46.470588235294116] answer Reader integrated 3 \n", - "0 [100.0] answer Reader integrated 0 \n", - "\n", - "[5 rows x 28 columns]" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "reader_result = eval_result[\"Reader\"]\n", - "reader_result.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": { - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "# We can filter for all documents retrieved for a given query\n", - "query = \"who is written in the book of life\"\n", - "retriever_book_of_life = retriever_result[retriever_result[\"query\"] == query]" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": { - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "# We can also filter for all answers predicted for a given query\n", - "reader_book_of_life = reader_result[reader_result[\"query\"] == query]" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": { - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "# Save the evaluation result so that we can reload it later and calculate evaluation metrics without running the pipeline again.\n", - "eval_result.save(\"../\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "## Calculating Evaluation Metrics\n", - "Load an EvaluationResult to quickly calculate standard evaluation metrics for all predictions,\n", - "such as F1-score of each individual prediction of the Reader node or recall of the retriever.\n", - "To learn more about the metrics, see [Evaluation Metrics](https://haystack.deepset.ai/guides/evaluation#metrics-retrieval)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "saved_eval_result = EvaluationResult.load(\"../\")\n", - "metrics = saved_eval_result.calculate_metrics()\n", - "print(f'Retriever - Recall (single relevant document): {metrics[\"Retriever\"][\"recall_single_hit\"]}')\n", - "print(f'Retriever - Recall (multiple relevant documents): {metrics[\"Retriever\"][\"recall_multi_hit\"]}')\n", - "print(f'Retriever - Mean Reciprocal Rank: {metrics[\"Retriever\"][\"mrr\"]}')\n", - "print(f'Retriever - Precision: {metrics[\"Retriever\"][\"precision\"]}')\n", - "print(f'Retriever - Mean Average Precision: {metrics[\"Retriever\"][\"map\"]}')\n", - "\n", - "print(f'Reader - F1-Score: {metrics[\"Reader\"][\"f1\"]}')\n", - "print(f'Reader - Exact Match: {metrics[\"Reader\"][\"exact_match\"]}')" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "## Generating an Evaluation Report\n", - "A summary of the evaluation results can be printed to get a quick overview. It includes some aggregated metrics and also shows a few wrongly predicted examples." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "pipeline.print_eval_report(saved_eval_result)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Advanced Evaluation Metrics\n", - "As an advanced evaluation metric, semantic answer similarity (SAS) can be calculated. This metric takes into account whether the meaning of a predicted answer is similar to the annotated gold answer rather than just doing string comparison.\n", - "To this end SAS relies on pre-trained models. For English, we recommend \"cross-encoder/stsb-roberta-large\", whereas for German we recommend \"deepset/gbert-large-sts\". A good multilingual model is \"sentence-transformers/paraphrase-multilingual-mpnet-base-v2\".\n", - "More info on this metric can be found in our [paper](https://arxiv.org/abs/2108.06130) or in our [blog post](https://www.deepset.ai/blog/semantic-answer-similarity-to-evaluate-qa)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "advanced_eval_result = pipeline.eval(\n", - " labels=eval_labels, params={\"Retriever\": {\"top_k\": 5}}, sas_model_name_or_path=\"cross-encoder/stsb-roberta-large\"\n", - ")\n", - "\n", - "metrics = advanced_eval_result.calculate_metrics()\n", - "print(metrics[\"Reader\"][\"sas\"])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Isolated Evaluation Mode\n", - "The isolated node evaluation uses labels as input to the Reader node instead of the output of the preceeding Retriever node.\n", - "Thereby, we can additionally calculate the upper bounds of the evaluation metrics of the Reader. Note that even with isolated evaluation enabled, integrated evaluation will still be running.\n" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": { - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "eval_result_with_upper_bounds = pipeline.eval(\n", - " labels=eval_labels, params={\"Retriever\": {\"top_k\": 5}, \"Reader\": {\"top_k\": 5}}, add_isolated_node_eval=True\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "pipeline.print_eval_report(eval_result_with_upper_bounds)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Advanced Label Scopes\n", - "Answers are considered correct if the predicted answer matches the gold answer in the labels. Documents are considered correct if the predicted document ID matches the gold document ID in the labels. Sometimes, these simple definitions of \"correctness\" are not sufficient. There are cases where you want to further specify the \"scope\" within which an answer or a document is considered correct. For this reason, `EvaluationResult.calculate_metrics()` offers the parameters `answer_scope` and `document_scope`.\n", - "\n", - "Say you want to ensure that an answer is only considered correct if it stems from a specific context of surrounding words. This is especially useful if your answer is very short, like a date (for example, \"2011\") or a place (\"Berlin\"). Such short answer might easily appear in multiple completely different contexts. Some of those contexts might perfectly fit the actual question and answer it. Some others might not: they don't relate to the question at all but still contain the answer string. In that case, you might want to ensure that only answers that stem from the correct context are considered correct. To do that, specify `answer_scope=\"context\"` in `calculate_metrics()`. \n", - "\n", - "`answer_scope` takes the following values:\n", - "- `any` (default): Any matching answer is considered correct.\n", - "- `context`: The answer is only considered correct if its context matches as well. It uses fuzzy matching (see `context_matching` parameters of `pipeline.eval()`).\n", - "- `document_id`: The answer is only considered correct if its document ID matches as well. You can specify a custom document ID through the `custom_document_id_field` parameter of `pipeline.eval()`.\n", - "- `document_id_and_context`: The answer is only considered correct if its document ID and its context match as well.\n", - "\n", - "In Question Answering, to enforce that the retrieved document is considered correct whenever the answer is correct, set `document_scope` to `answer` or `document_id_or_answer`.\n", - "\n", - "`document_scope` takes the following values:\n", - "- `document_id`: Specifies that the document ID must match. You can specify a custom document ID through the `custom_document_id_field` parameter of `pipeline.eval()`.\n", - "- `context`: Specifies that the content of the document must match. It uses fuzzy matching (see the `context_matching` parameters of `pipeline.eval()`).\n", - "- `document_id_and_context`: A Boolean operation specifying that both `'document_id' AND 'context'` must match.\n", - "- `document_id_or_context`: A Boolean operation specifying that either `'document_id' OR 'context'` must match.\n", - "- `answer`: Specifies that the document contents must include the answer. The selected `answer_scope` is enforced.\n", - "- `document_id_or_answer` (default): A Boolean operation specifying that either `'document_id' OR 'answer'` must match." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "metrics = saved_eval_result.calculate_metrics(answer_scope=\"context\")\n", - "print(f'Retriever - Recall (single relevant document): {metrics[\"Retriever\"][\"recall_single_hit\"]}')\n", - "print(f'Retriever - Recall (multiple relevant documents): {metrics[\"Retriever\"][\"recall_multi_hit\"]}')\n", - "print(f'Retriever - Mean Reciprocal Rank: {metrics[\"Retriever\"][\"mrr\"]}')\n", - "print(f'Retriever - Precision: {metrics[\"Retriever\"][\"precision\"]}')\n", - "print(f'Retriever - Mean Average Precision: {metrics[\"Retriever\"][\"map\"]}')\n", - "\n", - "print(f'Reader - F1-Score: {metrics[\"Reader\"][\"f1\"]}')\n", - "print(f'Reader - Exact Match: {metrics[\"Reader\"][\"exact_match\"]}')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "document_store.get_all_documents()[0]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Let's try Document Retrieval on a file level (it's sufficient if the correct file identified by its name (for example, 'Book of Life') was retrieved).\n", - "eval_result_custom_doc_id = pipeline.eval(\n", - " labels=eval_labels, params={\"Retriever\": {\"top_k\": 5}}, custom_document_id_field=\"name\"\n", - ")\n", - "metrics = eval_result_custom_doc_id.calculate_metrics(document_scope=\"document_id\")\n", - "print(f'Retriever - Recall (single relevant document): {metrics[\"Retriever\"][\"recall_single_hit\"]}')\n", - "print(f'Retriever - Recall (multiple relevant documents): {metrics[\"Retriever\"][\"recall_multi_hit\"]}')\n", - "print(f'Retriever - Mean Reciprocal Rank: {metrics[\"Retriever\"][\"mrr\"]}')\n", - "print(f'Retriever - Precision: {metrics[\"Retriever\"][\"precision\"]}')\n", - "print(f'Retriever - Mean Average Precision: {metrics[\"Retriever\"][\"map\"]}')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Let's enforce the context again:\n", - "metrics = eval_result_custom_doc_id.calculate_metrics(document_scope=\"document_id_and_context\")\n", - "print(f'Retriever - Recall (single relevant document): {metrics[\"Retriever\"][\"recall_single_hit\"]}')\n", - "print(f'Retriever - Recall (multiple relevant documents): {metrics[\"Retriever\"][\"recall_multi_hit\"]}')\n", - "print(f'Retriever - Mean Reciprocal Rank: {metrics[\"Retriever\"][\"mrr\"]}')\n", - "print(f'Retriever - Precision: {metrics[\"Retriever\"][\"precision\"]}')\n", - "print(f'Retriever - Mean Average Precision: {metrics[\"Retriever\"][\"map\"]}')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Storing results in MLflow\n", - "Storing evaluation results in CSVs is fine but not enough if you want to compare and track multiple evaluation runs. MLflow is a handy tool when it comes to tracking experiments. So we decided to use it to track all of `Pipeline.eval()` with reproducability of your experiments in mind." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Host your own MLflow or use deepset's public MLflow" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "If you don't want to use deepset's public MLflow instance under https://public-mlflow.deepset.ai, you can easily host it yourself." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# !pip install mlflow\n", - "# !mlflow server --serve-artifacts" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Preprocessing the dataset\n", - "Preprocessing the dataset works a bit differently than before. Instead of directly generating documents (and labels) out of a SQuAD file, we first save them to disk. This is necessary to experiment with different indexing pipelines. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import tempfile\n", - "from pathlib import Path\n", - "from haystack.nodes import PreProcessor\n", - "from haystack.document_stores import InMemoryDocumentStore\n", - "\n", - "document_store = InMemoryDocumentStore()\n", - "\n", - "label_preprocessor = PreProcessor(\n", - " split_length=200,\n", - " split_overlap=0,\n", - " split_respect_sentence_boundary=False,\n", - " clean_empty_lines=False,\n", - " clean_whitespace=False,\n", - ")\n", - "\n", - "# The add_eval_data() method converts the given dataset in json format into Haystack document and label objects.\n", - "# Those objects are then indexed in their respective document and label index in the document store.\n", - "# The method can be used with any dataset in SQuAD format.\n", - "# We only use it to get the evaluation set labels and the corpus files.\n", - "document_store.add_eval_data(\n", - " filename=\"data/tutorial5/nq_dev_subset_v2.json\",\n", - " doc_index=document_store.index,\n", - " label_index=document_store.label_index,\n", - " preprocessor=label_preprocessor,\n", - ")\n", - "\n", - "# the evaluation set to evaluate the pipelines on\n", - "evaluation_set_labels = document_store.get_all_labels_aggregated(drop_negative_labels=True, drop_no_answers=True)\n", - "\n", - "# Pipelines need files as input to be able to test different preprocessors.\n", - "# Even though this looks a bit cumbersome to write the documents back to files we gain a lot of evaluation potential and reproducibility.\n", - "docs = document_store.get_all_documents()\n", - "temp_dir = tempfile.TemporaryDirectory()\n", - "file_paths = []\n", - "for doc in docs:\n", - " file_name = doc.id + \".txt\"\n", - " file_path = Path(temp_dir.name) / file_name\n", - " file_paths.append(file_path)\n", - " with open(file_path, \"w\") as f:\n", - " f.write(doc.content)\n", - "file_metas = [d.meta for d in docs]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Run experiments\n", - "In this experiment we evaluate extractive QA pipelines with two different retrievers on the evaluation set given the corpus:\n", - "**ElasticsearchRetriever vs. EmbeddingRetriever**" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from haystack.nodes import BM25Retriever, EmbeddingRetriever, FARMReader, TextConverter\n", - "from haystack.pipelines import Pipeline\n", - "from haystack.document_stores import ElasticsearchDocumentStore" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# helper function to create query and index pipeline\n", - "def create_pipelines(document_store, preprocessor, retriever, reader):\n", - " query_pipeline = Pipeline()\n", - " query_pipeline.add_node(component=retriever, inputs=[\"Query\"], name=\"Retriever\")\n", - " query_pipeline.add_node(component=reader, inputs=[\"Retriever\"], name=\"Reader\")\n", - " index_pipeline = Pipeline()\n", - " index_pipeline.add_node(component=TextConverter(), inputs=[\"File\"], name=\"TextConverter\")\n", - " index_pipeline.add_node(component=preprocessor, inputs=[\"TextConverter\"], name=\"Preprocessor\")\n", - " index_pipeline.add_node(component=retriever, inputs=[\"Preprocessor\"], name=\"Retriever\")\n", - " index_pipeline.add_node(component=document_store, inputs=[\"Retriever\"], name=\"DocumentStore\")\n", - " return query_pipeline, index_pipeline" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "# Name of the experiment in MLflow\n", - "EXPERIMENT_NAME = \"haystack-tutorial-5\"" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Run using BM25Retriever" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "document_store = ElasticsearchDocumentStore(index=\"sparse_index\", recreate_index=True)\n", - "preprocessor = PreProcessor(\n", - " split_length=200,\n", - " split_overlap=0,\n", - " split_respect_sentence_boundary=False,\n", - " clean_empty_lines=False,\n", - " clean_whitespace=False,\n", - ")\n", - "es_retriever = BM25Retriever(document_store=document_store)\n", - "reader = FARMReader(\"deepset/roberta-base-squad2\", top_k=3, return_no_answer=True, batch_size=8)\n", - "query_pipeline, index_pipeline = create_pipelines(document_store, preprocessor, es_retriever, reader)\n", - "\n", - "sparse_eval_result = Pipeline.execute_eval_run(\n", - " index_pipeline=index_pipeline,\n", - " query_pipeline=query_pipeline,\n", - " evaluation_set_labels=evaluation_set_labels,\n", - " corpus_file_paths=file_paths,\n", - " corpus_file_metas=file_metas,\n", - " experiment_name=EXPERIMENT_NAME,\n", - " experiment_run_name=\"sparse\",\n", - " corpus_meta={\"name\": \"nq_dev_subset_v2.json\"},\n", - " evaluation_set_meta={\"name\": \"nq_dev_subset_v2.json\"},\n", - " pipeline_meta={\"name\": \"sparse-pipeline\"},\n", - " add_isolated_node_eval=True,\n", - " experiment_tracking_tool=\"mlflow\",\n", - " experiment_tracking_uri=\"https://public-mlflow.deepset.ai\",\n", - " reuse_index=True,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Run using EmbeddingRetriever" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "document_store = ElasticsearchDocumentStore(index=\"dense_index\", recreate_index=True)\n", - "emb_retriever = EmbeddingRetriever(\n", - " document_store=document_store,\n", - " model_format=\"sentence_transformers\",\n", - " embedding_model=\"sentence-transformers/multi-qa-mpnet-base-dot-v1\",\n", - " batch_size=8,\n", - ")\n", - "query_pipeline, index_pipeline = create_pipelines(document_store, preprocessor, emb_retriever, reader)\n", - "\n", - "dense_eval_result = Pipeline.execute_eval_run(\n", - " index_pipeline=index_pipeline,\n", - " query_pipeline=query_pipeline,\n", - " evaluation_set_labels=evaluation_set_labels,\n", - " corpus_file_paths=file_paths,\n", - " corpus_file_metas=file_metas,\n", - " experiment_name=EXPERIMENT_NAME,\n", - " experiment_run_name=\"embedding\",\n", - " corpus_meta={\"name\": \"nq_dev_subset_v2.json\"},\n", - " evaluation_set_meta={\"name\": \"nq_dev_subset_v2.json\"},\n", - " pipeline_meta={\"name\": \"embedding-pipeline\"},\n", - " add_isolated_node_eval=True,\n", - " experiment_tracking_tool=\"mlflow\",\n", - " experiment_tracking_uri=\"https://public-mlflow.deepset.ai\",\n", - " reuse_index=True,\n", - " answer_scope=\"context\",\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "You can now open MLflow (e.g. https://public-mlflow.deepset.ai/ if you used the public one hosted by deepset) and look for the haystack-eval-experiment experiment. Try out mlflow's compare function and have fun...\n", - "\n", - "Note that on our public mlflow instance we are not able to log artifacts like the evaluation results or the piplines.yaml file." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Evaluation of Individual Components: Retriever\n", - "Sometimes you might want to evaluate individual components, for example, if you don't have a pipeline but only a retriever or a reader with a model that you trained yourself.\n", - "Here we evaluate only the retriever, based on whether the gold_label document is retrieved." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "## Evaluate Retriever on its own\n", - "# Note that no_answer samples are omitted when evaluation is performed with this method\n", - "retriever_eval_results = retriever.eval(top_k=5, label_index=label_index, doc_index=doc_index)\n", - "# Retriever Recall is the proportion of questions for which the correct document containing the answer is\n", - "# among the correct documents\n", - "print(\"Retriever Recall:\", retriever_eval_results[\"recall\"])\n", - "# Retriever Mean Avg Precision rewards retrievers that give relevant documents a higher rank\n", - "print(\"Retriever Mean Avg Precision:\", retriever_eval_results[\"map\"])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Just as a sanity check, we can compare the recall from `retriever.eval()` with the multi hit recall from `pipeline.eval(add_isolated_node_eval=True)`.\n", - "These two recall metrics are only comparable since we chose to filter out no_answer samples when generating eval_labels and setting document_scope to `\"document_id\"`. Per default `calculate_metrics()` has document_scope set to `\"document_id_or_answer\"` which interprets documents as relevant if they either match the gold document ID or contain the answer." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "metrics = eval_result_with_upper_bounds.calculate_metrics(document_scope=\"document_id\")\n", - "print(metrics[\"Retriever\"][\"recall_multi_hit\"])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Evaluation of Individual Components: Reader\n", - "Here we evaluate only the reader in a closed domain fashion i.e. the reader is given one query\n", - "and its corresponding relevant document and metrics are calculated on whether the right position in this text is selected by\n", - "the model as the answer span (i.e. SQuAD style)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "# Evaluate Reader on its own\n", - "reader_eval_results = reader.eval(document_store=document_store, label_index=label_index, doc_index=doc_index)\n", - "top_n = reader_eval_results[\"top_n\"]\n", - "# Evaluation of Reader can also be done directly on a SQuAD-formatted file without passing the data to Elasticsearch\n", - "# reader_eval_results = reader.eval_on_file(\"../data/nq\", \"nq_dev_subset_v2.json\", device=device)\n", - "\n", - "# Reader Top-N-Accuracy is the proportion of predicted answers that match with their corresponding correct answer including no_answers\n", - "print(f\"Reader Top-{top_n}-Accuracy:\", reader_eval_results[\"top_n_accuracy\"])\n", - "# Reader Top-1-Exact Match is the proportion of questions where the first predicted answer is exactly the same as the correct answer including no_answers\n", - "print(\"Reader Top-1-Exact Match:\", reader_eval_results[\"EM\"])\n", - "# Reader Top-1-F1-Score is the average overlap between the first predicted answers and the correct answers including no_answers\n", - "print(\"Reader Top-1-F1-Score:\", reader_eval_results[\"f1\"])\n", - "# Reader Top-N-Accuracy is the proportion of predicted answers that match with their corresponding correct answer excluding no_answers\n", - "print(f\"Reader Top-{top_n}-Accuracy (without no_answers):\", reader_eval_results[\"top_n_accuracy_text_answer\"])\n", - "# Reader Top-N-Exact Match is the proportion of questions where the predicted answer within the first n results is exactly the same as the correct answer excluding no_answers (no_answers are always present within top n).\n", - "print(f\"Reader Top-{top_n}-Exact Match (without no_answers):\", reader_eval_results[\"top_n_EM_text_answer\"])\n", - "# Reader Top-N-F1-Score is the average overlap between the top n predicted answers and the correct answers excluding no_answers (no_answers are always present within top n).\n", - "print(f\"Reader Top-{top_n}-F1-Score (without no_answers):\", reader_eval_results[\"top_n_f1_text_answer\"])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Just as a sanity check, we can compare the top-n exact_match and f1 metrics from `reader.eval()` with the exact_match and f1 from `pipeline.eval(add_isolated_node_eval=True)`.\n", - "These two approaches return the same values because pipeline.eval() calculates top-n metrics per default. Small discrepancies might occur due to string normalization in pipeline.eval()'s answer-to-label comparison. reader.eval() does not use string normalization." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "metrics = eval_result_with_upper_bounds.calculate_metrics(eval_mode=\"isolated\")\n", - "print(metrics[\"Reader\"][\"exact_match\"])\n", - "print(metrics[\"Reader\"][\"f1\"])" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "8QJ68G12U7tb", - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "## About us\n", - "\n", - "This [Haystack](https://github.com/deepset-ai/haystack/) notebook was made with love by [deepset](https://deepset.ai/) in Berlin, Germany\n", - "\n", - "We bring NLP to the industry via open source! \n", - "Our focus: Industry specific language models & large scale QA systems. \n", - " \n", - "Some of our other work: \n", - "- [German BERT](https://deepset.ai/german-bert)\n", - "- [GermanQuAD and GermanDPR](https://deepset.ai/germanquad)\n", - "- [FARM](https://github.com/deepset-ai/FARM)\n", - "\n", - "Get in touch:\n", - "[Twitter](https://twitter.com/deepset_ai) | [LinkedIn](https://www.linkedin.com/company/deepset-ai/) | [Slack](https://haystack.deepset.ai/community/join) | [GitHub Discussions](https://github.com/deepset-ai/haystack/discussions) | [Website](https://deepset.ai)\n", - "\n", - "By the way: [we're hiring!](https://www.deepset.ai/jobs)" - ] - } - ], - "metadata": { - "accelerator": "GPU", - "colab": { - "name": "Tutorial5_Evaluation.ipynb", - "provenance": [] - }, - "interpreter": { - "hash": "a1c4180befe5334d9af26d84758dc08f43161c3b98a4eb4d4a43d7491d015a65" - }, - "kernelspec": { - "display_name": "Python 3.7.11 ('haystack-dev')", - "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.7.11" - }, - "widgets": { - "application/vnd.jupyter.widget-state+json": { - "0138ab99398e44c69ee0d92191e7d142": { - "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 - } - }, - "016b6c1acdd04369ab22c635e69382bb": { - "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 - } - }, - "035e40aab316467987b05fe9157ca1ce": { - "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 - } - }, - "03698f5714bc477c9a0b7dec7542fd50": { - "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 - } - }, - "03ea7c0ef54c4d0f96493415aaf461d3": { - "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": "" - } - }, - "042038fce6024fbbba45d9afc21c4dc9": { - "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 - } - }, - "04e887b2d2cd471994f65685a81a0bfc": { - "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": "" - } - }, - "0523b10429d04f3d81d7078a13a12168": { - "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_6ca6dc2c6b4349fcb39ed8c44f65bdb0", - "placeholder": "​", - "style": "IPY_MODEL_807e4eee3b2c440c8799afcc6344ff5d", - "value": "Downloading: 100%" - } - }, - "0593f2471d4244378a68721a422ffafa": { - "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 - } - }, - "05d82995d5a94b5db39bf639d1cc05c2": { - "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_8a9f9b7bab8e40278430a35720066a61", - "placeholder": "​", - "style": "IPY_MODEL_fc011913e8464d439a97fe75ef5f9fa1", - "value": " 899k/899k [00:00<00:00, 1.33MB/s]" - } - }, - "05dd9db4d2e94210ae4b62fad5f6f302": { - "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_83aee8bf612345a18aea950c9a1fa143", - "placeholder": "​", - "style": "IPY_MODEL_caae193b34644af7950e2e3eac81a5bb", - "value": " 5.07M/5.07M [00:00<00:00, 22.4MB/s]" - } - }, - "0618a236cc14473f92257aebbc3d930d": { - "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": "" - } - }, - "071a2e5641624c7ea6bf57d764fa5a90": { - "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_553183603f114fefa03c2f251ac38ddc", - "placeholder": "​", - "style": "IPY_MODEL_d579129ca5c04c6a8400c2483a952386", - "value": "Batches: 100%" - } - }, - "0864e13086e44b40bd71433caec618e3": { - "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 - } - }, - "08a1d1a6fb884c769d409170d6cda556": { - "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 - } - }, - "08c0344f4cfc4ba7b9271e4301ee9095": { - "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 - } - }, - "08cd116989124f919aa151c4535bbcba": { - "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_fbee94f4d7674f54b75c42d33c2a0907", - "max": 1, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_13996ad0065d4573885e0140c1dc91a1", - "value": 1 - } - }, - "09537583625f4f4aac01a51dd06a6cca": { - "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_3f6f4ce515db44d3a365a9d34a0d3a2e", - "IPY_MODEL_43a5ce7b197d46b79d74cc3fbfb6dc53", - "IPY_MODEL_d520129190494e17a338b9e9dc02cdaa" - ], - "layout": "IPY_MODEL_829c0d5f7b614e97b4fda0a9e62dc5ae" - } - }, - "09cb41d0bbc14a24b8dde747c249a78e": { - "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": "" - } - }, - "0c481a8213f84529b2c1ff8b02af7e01": { - "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_312f4cf044da40eca4cf099ac4d19654", - "IPY_MODEL_b63ca14fc0cb46e88e5d86f0ff4609fc", - "IPY_MODEL_3c1f87725b1f410eb81509369edf3de1" - ], - "layout": "IPY_MODEL_258c09dd5fdd49ea8d428a4a7de9cfdc" - } - }, - "0cdff9bf98da47789a75f2beeb5727b4": { - "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 - } - }, - "0d34710578ac4c1db6fe372b5d1215b4": { - "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_978b165c69dd4e14b8479ea7bd8cb1e5", - "max": 456318, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_db57281b3d7a448fbd2d63d8f127ea3e", - "value": 456318 - } - }, - "0ee7399f4e2148b38ad2dd0ef1816e78": { - "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": "" - } - }, - "0efc973f96af4d7fa2118f72099a3724": { - "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": "" - } - }, - "0f58901ab69e49e7947193681e2ab5f3": { - "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_0864e13086e44b40bd71433caec618e3", - "placeholder": "​", - "style": "IPY_MODEL_f16710c9831d476b85c48213d05e1aea", - "value": " 1/1 [00:00<00:00, 13.38it/s]" - } - }, - "1096b427606f47ae920f4313cbee232b": { - "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_512226094de24fb58f94c1cd240250e4", - "IPY_MODEL_197840b3350e40ab866625ac932efee9", - "IPY_MODEL_0f58901ab69e49e7947193681e2ab5f3" - ], - "layout": "IPY_MODEL_311b248f13e446739340b070f02ce6ba" - } - }, - "1171111ff1244c68bc2b0269a9f8047b": { - "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_cd0a32b06546428193dd7fa89fbf7e9e", - "max": 1, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_d6a66e1346d849b9802898417d34697c", - "value": 1 - } - }, - "118aedffeecd4f109ae04a4561baeb08": { - "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_ddaf59cedca143c8b4fe005a51077323", - "IPY_MODEL_25d7818d6f7b4b628ab3f83f2c2fa6a3", - "IPY_MODEL_48431fa7696540fc9696799f75166680" - ], - "layout": "IPY_MODEL_59efb57b419242a1aba4d20084e29d38" - } - }, - "13996ad0065d4573885e0140c1dc91a1": { - "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": "" - } - }, - "13b75146701145808315dc87d598b3f9": { - "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": "" - } - }, - "14462288182e490fbbf8086972008a22": { - "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": "" - } - }, - "1618b6a1272741a484107d64b0892919": { - "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_c2a10377a4104f0db40385232e02ddeb", - "IPY_MODEL_64ac622c81094854b887754eb507438a", - "IPY_MODEL_58c2ec2a05024f1081dce3ad466e6c5a" - ], - "layout": "IPY_MODEL_1e21f3f2addd4089a21bdf43fcc3dc13" - } - }, - "167f8f83ec114f42921645ddfd3ce9ed": { - "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": "" - } - }, - "18359b5df7574a289e8b4582f65ab0a3": { - "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": "" - } - }, - "18626d41312c4b60b68375614682dee6": { - "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_bf017ec69a084b2fae86b5e24282fa2b", - "placeholder": "​", - "style": "IPY_MODEL_93dd5983dd31466e862732cc991f0590", - "value": "Downloading: 100%" - } - }, - "1873a766e7c64601b4be489d700e4b9b": { - "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 - } - }, - "197130c97a6f4113bb70f9872f65dede": { - "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 - } - }, - "197840b3350e40ab866625ac932efee9": { - "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_d59b565796fe4a3b9fe3b0b12dd73da4", - "max": 1, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_5c0562c932764d50a34251e32aad1b9a", - "value": 1 - } - }, - "1a372fb42b29492691dc7fc04fed105b": { - "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 - } - }, - "1abc887bedb6415eb5c15ac9ca3e2a2c": { - "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 - } - }, - "1ad8f4afb35e4ee69a0cde1f98be5ea6": { - "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_4ac053bc3db6423ba5f0d143919d1cca", - "placeholder": "​", - "style": "IPY_MODEL_7e725f96b7894fa6abb34a286d8cc3a4", - "value": " 1/1 [00:00<00:00, 11.15it/s]" - } - }, - "1b35fdad27d348299ebf9a3376a332c0": { - "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_21753241fd42429595ea9288afa2d41f", - "IPY_MODEL_51f95102471a416887e19ff8753750d8", - "IPY_MODEL_961b8ed89e63441ead537ff2b502c857" - ], - "layout": "IPY_MODEL_8b097bc82a2a4479895400362c5e2782" - } - }, - "1bd03e9d1a994d96866759d0eeab61e1": { - "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_ecbc440b3bd341e6b0e19f0088c58930", - "max": 229, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_e4f7466fd5964628b32ffe8a773c4ff6", - "value": 229 - } - }, - "1c003f6cf2064ffeb152e5bf5dee3780": { - "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": "" - } - }, - "1c419cfc78214e80a6e21448eb8ceaab": { - "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": "" - } - }, - "1d5d220bedc54dbdbacb9c43767bf64d": { - "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 - } - }, - "1e21f3f2addd4089a21bdf43fcc3dc13": { - "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 - } - }, - "1fce85ef81284a0eaf9f439b5e255163": { - "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_b62c8b64f87a4209a74cd5bfb5522109", - "max": 1, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_2194f54585b141d085f1f17ef200ab65", - "value": 1 - } - }, - "21444149a59e4761a47d0ef483c7aa45": { - "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 - } - }, - "21753241fd42429595ea9288afa2d41f": { - "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_cdf6ee9d1d1c422795e82dbb5691053e", - "placeholder": "​", - "style": "IPY_MODEL_acc7988ac6a94afdaf980e4d1ab871b5", - "value": "Batches: 100%" - } - }, - "2194f54585b141d085f1f17ef200ab65": { - "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": "" - } - }, - "223e5e8dfd48473d95dc159f970c2bbe": { - "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": "" - } - }, - "2458d71e71554da3bd7edf35a340f700": { - "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_3f96ab0342bc416ab7b2fad271be8100", - "placeholder": "​", - "style": "IPY_MODEL_b1845caaff584163b6d9723f4e67f5b2", - "value": "Downloading: 100%" - } - }, - "252f1fab09d4425599b108012bf99993": { - "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_67ee3f0117bc4e7bb4c7b9351845cdd4", - "IPY_MODEL_1fce85ef81284a0eaf9f439b5e255163", - "IPY_MODEL_e3026ca9693547abab2baacd5aa3dece" - ], - "layout": "IPY_MODEL_bde4901baa744b7bac106ac3630ee31c" - } - }, - "258c09dd5fdd49ea8d428a4a7de9cfdc": { - "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 - } - }, - "25d7818d6f7b4b628ab3f83f2c2fa6a3": { - "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_8dfc1480100f43e0b4ea2fc2fb9279d3", - "max": 571, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_3df3da3d04d5448c810bd00f66bd3a0e", - "value": 571 - } - }, - "267928e896124f6087b197b255e53360": { - "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_d7fe543399db4a64b23761e6f8e967ce", - "placeholder": "​", - "style": "IPY_MODEL_03ea7c0ef54c4d0f96493415aaf461d3", - "value": "Batches: 100%" - } - }, - "26f3c26b0c5a4e7d945029e516f17ff8": { - "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_8262368800754a6db7490a90dc94cbf8", - "placeholder": "​", - "style": "IPY_MODEL_c9025edb46eb43a98a9259380de08a36", - "value": "Downloading: 100%" - } - }, - "277e1f68e583461694dbfbd7354154c9": { - "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 - } - }, - "28c517182585423aa28e3b2d949678c4": { - "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 - } - }, - "29317e31312545c49d51cde6c617fe3f": { - "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": "" - } - }, - "2972765858b94d91a525a1e99ab16e07": { - "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": "" - } - }, - "2a9ef1f2f43d47b28cd0ff7ef4a21ade": { - "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 - } - }, - "2b17ffac93b8406fac55b695d93d963b": { - "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": "" - } - }, - "2b30500a465d4343a1f6ed6cd85dfb62": { - "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_66c808ddecba493482ba0ec96b267d83", - "IPY_MODEL_f9dcdbbe20114ff78c2d980a1924bd9e", - "IPY_MODEL_8bd47dc1fba04e50b57a646fdff4d08a" - ], - "layout": "IPY_MODEL_9016e2b714fa4f7daaab4a99299190e8" - } - }, - "2bd3bd51ae644c1894a2ddca09d14e85": { - "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 - } - }, - "2bfc05c7ef514354bfb41fe6290dbf33": { - "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_bcca8127f74f4e36813a902020d9cb4e", - "placeholder": "​", - "style": "IPY_MODEL_b0fda0f7f1694c958fabb866c8837b07", - "value": " 1/1 [00:00<00:00, 11.61it/s]" - } - }, - "2c028a3f096344d68071d78387efa117": { - "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_73d7fdd3f38349b4882124d8351eace5", - "placeholder": "​", - "style": "IPY_MODEL_76f4af76b42f460fa34d5f00a9656dc5", - "value": "Downloading: 100%" - } - }, - "2da12d480a1d4907beada5f8d80cdf1e": { - "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 - } - }, - "2da7b278298e4a5996fb9bc8ab91be18": { - "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_5e3ad720118240188fef69ad77cd72e3", - "placeholder": "​", - "style": "IPY_MODEL_843cfba29fd046638f79ca44d340b091", - "value": "Batches: 100%" - } - }, - "2e3ff8ff7d7244e09a9a954d15c9d40e": { - "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": "" - } - }, - "2e6177cd6f7941e7b948aeac0dafd05c": { - "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": "" - } - }, - "2f9ea952cead4eb8a9dd7a4be0f360fc": { - "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 - } - }, - "303fd4fd657f4181a7d5aaf125bacea2": { - "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_bd7121c2a3e244ef91ff5150d2d8838b", - "placeholder": "​", - "style": "IPY_MODEL_33ae1c20ae0a4207ab3be3bfef640907", - "value": "Batches: 100%" - } - }, - "307f6af0ea724573a59c5ef0a429fd0c": { - "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": "" - } - }, - "3096cae7388e4b988df306be9cc58afd": { - "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 - } - }, - "30f65cab87754a3e9cf0ff90ac6a6658": { - "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 - } - }, - "311b248f13e446739340b070f02ce6ba": { - "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 - } - }, - "312b5718b838451d896f3447b9f9880c": { - "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 - } - }, - "312f4cf044da40eca4cf099ac4d19654": { - "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_50a9ecd07ef24c728777b63b1e6982fe", - "placeholder": "​", - "style": "IPY_MODEL_86a2aa7f86c840b8ba3feb351ef9cdba", - "value": "Batches: 100%" - } - }, - "3200cd718a4c439386994d13e1b0e173": { - "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": "" - } - }, - "32c43233c8e64a8eb5c4badbb01420f5": { - "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": "" - } - }, - "331bc9eb57ce4c5d8deaa47e5aaa078a": { - "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_30f65cab87754a3e9cf0ff90ac6a6658", - "placeholder": "​", - "style": "IPY_MODEL_eb8e6976ca9e4a58851ec0a51107d74f", - "value": " 239/239 [00:00<00:00, 5.12kB/s]" - } - }, - "33ae1c20ae0a4207ab3be3bfef640907": { - "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": "" - } - }, - "34620791c5d145bfbb0a787f0ca4eb6b": { - "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 - } - }, - "3478990a21b54ac090ae93e5a3bbd084": { - "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_798c7b005e1a490e9a4a9de4569e9351", - "IPY_MODEL_44aaf2ebc82c4331ac7f1eed39f3706d", - "IPY_MODEL_331bc9eb57ce4c5d8deaa47e5aaa078a" - ], - "layout": "IPY_MODEL_5e3141a3a8584caaae4a2134a21d15a4" - } - }, - "34a4db43ae9f481ea86e79a5bff2e3ef": { - "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_b794ab54698f4db18ae5edabc7d96783", - "placeholder": "​", - "style": "IPY_MODEL_b2955f26a1b34b21881c6a98f92234ad", - "value": " 53.0/53.0 [00:00<00:00, 1.11kB/s]" - } - }, - "359fd318bace46468f7972a24a87a52b": { - "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 - } - }, - "365ec9a2c50d4e7385ef438bed36b5d8": { - "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_fad323f7b8fb49e79c65ddb87f9f5346", - "placeholder": "​", - "style": "IPY_MODEL_409228238c94434eaa63fbb715df4f80", - "value": " 690/690 [00:00<00:00, 15.0kB/s]" - } - }, - "3681c9063cf1428b8a757090453321db": { - "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": "" - } - }, - "368a61e33c3144bfa3cc94af10691146": { - "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": "" - } - }, - "36c9dc024fed498cb76edd9f18447979": { - "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_035e40aab316467987b05fe9157ca1ce", - "max": 1, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_f92fb75d397d47ac967febf7d38efc35", - "value": 1 - } - }, - "36f855f41cc1488f9d92ec34bb8d30b0": { - "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_0523b10429d04f3d81d7078a13a12168", - "IPY_MODEL_64cd5b6f0c4d4631a1049ee7ee50f063", - "IPY_MODEL_eb11ea5785284bf6a15cc31ad643ed88" - ], - "layout": "IPY_MODEL_1d5d220bedc54dbdbacb9c43767bf64d" - } - }, - "37482b3d784245dd9044da86a5afe464": { - "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_9de62b03f720467fa45c34fb485771d8", - "IPY_MODEL_1171111ff1244c68bc2b0269a9f8047b", - "IPY_MODEL_bd6c06e82de34ff7b3b0cb30b914ce81" - ], - "layout": "IPY_MODEL_0593f2471d4244378a68721a422ffafa" - } - }, - "38bab693920d447b8bb1a5f1e6c2de39": { - "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_45f7c1377bd2498496d8aad327da5a25", - "max": 190, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_627e45096be0470f8ba6e7650ae1038b", - "value": 190 - } - }, - "3914e344ed9e4f85b9d8670ec062ef30": { - "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_5ab8cf3f17e84139bca02f42e72f48a6", - "IPY_MODEL_5280dbd3704e4c1bb84d058fee8b5e78", - "IPY_MODEL_ade97ddccca24f4c9e01fb19e2d8bfb7" - ], - "layout": "IPY_MODEL_4523fbfdd66049ed83265f166f5d6f16" - } - }, - "397fea90e5944348b0ab71f87a3c42aa": { - "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_2458d71e71554da3bd7edf35a340f700", - "IPY_MODEL_1bd03e9d1a994d96866759d0eeab61e1", - "IPY_MODEL_a867e816d795422ba16cfb3b4295e7f2" - ], - "layout": "IPY_MODEL_53cf5abeba59442fa559ba35ad96f279" - } - }, - "398c87412a4b41a48f8ed8538e0a7b91": { - "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_8f3b276f21474fb78e11e2a5dae516bd", - "placeholder": "​", - "style": "IPY_MODEL_1c419cfc78214e80a6e21448eb8ceaab", - "value": " 1/1 [00:00<00:00, 11.61it/s]" - } - }, - "3b896b94d6af4857952193f34add9e88": { - "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 - } - }, - "3b8baa9a443c417996fb82eed060c6ba": { - "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 - } - }, - "3ba492ab49d64d9a9010e46d293c3053": { - "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": "" - } - }, - "3c1f87725b1f410eb81509369edf3de1": { - "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_f0c8ddd71eff40df8332fcf83d31c0bf", - "placeholder": "​", - "style": "IPY_MODEL_e822001de9ef4cf99d593f930f41f96a", - "value": " 1/1 [00:00<00:00, 12.69it/s]" - } - }, - "3c391b52b10941979277f20802e540ef": { - "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 - } - }, - "3d211e6614f4451e9d14866cb3a8332d": { - "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 - } - }, - "3df3da3d04d5448c810bd00f66bd3a0e": { - "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": "" - } - }, - "3e23763ee2944110b0899fcbb805e3bd": { - "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 - } - }, - "3efe97c2a0824f4e9c31977d315b1ab2": { - "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_e2d9085a4252424082cf9238694d871b", - "placeholder": "​", - "style": "IPY_MODEL_93b48c87a738442b885ea68f20e17f9b", - "value": "Batches: 100%" - } - }, - "3f6f4ce515db44d3a365a9d34a0d3a2e": { - "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_e781609438004ae0ba1efb4a877065ae", - "placeholder": "​", - "style": "IPY_MODEL_0efc973f96af4d7fa2118f72099a3724", - "value": "Downloading: 100%" - } - }, - "3f915b2f0bba48c48865ac5b45487822": { - "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": "" - } - }, - "3f96ab0342bc416ab7b2fad271be8100": { - "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 - } - }, - "409228238c94434eaa63fbb715df4f80": { - "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": "" - } - }, - "40a7c2ba203f42deb6c7010959c8f2c9": { - "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 - } - }, - "40d75e4d444e4d8792fbd1a660c732e2": { - "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_912e6dd1ff544e8d9c94609ec899fbbe", - "IPY_MODEL_a6963c7d4e1a46c2a0c86ef3faa36548", - "IPY_MODEL_95013e8d9b16488e8f95750134a09b90" - ], - "layout": "IPY_MODEL_1abc887bedb6415eb5c15ac9ca3e2a2c" - } - }, - "420f93d2f7474dc38922c2277b5bcfcc": { - "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_1873a766e7c64601b4be489d700e4b9b", - "max": 122, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_ceb036e9f5bd4e9da47db5dff3eb3acb", - "value": 122 - } - }, - "427f364bc9644745ad3f7abfc43b7b6e": { - "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": "" - } - }, - "435328b6647d4d2986ca27179aa9a3cb": { - "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_d27877c6ad6148078e176ae4ce363c35", - "IPY_MODEL_8c88d2fa52474307a130a2d9ae6f1810", - "IPY_MODEL_b0744737aba1427aa04d33402e0c7a2a" - ], - "layout": "IPY_MODEL_66afe6aa36534f4897afdf035037c66c" - } - }, - "43a5ce7b197d46b79d74cc3fbfb6dc53": { - "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_c7fd461142854331937a6ada7ff8f64c", - "max": 402, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_f4b22763b32945a78822d9027ab93c5c", - "value": 402 - } - }, - "43fa7009112741c89725963985cb9f08": { - "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 - } - }, - "443a8a6c17964705931974c420229649": { - "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 - } - }, - "44aaf2ebc82c4331ac7f1eed39f3706d": { - "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_2da12d480a1d4907beada5f8d80cdf1e", - "max": 239, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_56206fe85d3744589433ac7cd8dd756d", - "value": 239 - } - }, - "4523fbfdd66049ed83265f166f5d6f16": { - "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 - } - }, - "45a892664d8d4a2abba2bc805208868e": { - "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 - } - }, - "45f7c1377bd2498496d8aad327da5a25": { - "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 - } - }, - "4681de508aac4dbb975199dc57df33d7": { - "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": "" - } - }, - "47e629b53187448f8eb54bd8b31af735": { - "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_cbfb512f58c44b879e89fc6917799fd4", - "placeholder": "​", - "style": "IPY_MODEL_93d3a93cd8634149b96cbd528bdb9e82", - "value": " 1/1 [00:00<00:00, 12.34it/s]" - } - }, - "48182100536a425f9a9955fecf19627d": { - "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": "" - } - }, - "4837b34ccb4d4688865dc24dc58a7c1e": { - "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": "" - } - }, - "48431fa7696540fc9696799f75166680": { - "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_8e0958b5dc27412e9f0332da3457ffdb", - "placeholder": "​", - "style": "IPY_MODEL_0618a236cc14473f92257aebbc3d930d", - "value": " 571/571 [00:00<00:00, 12.0kB/s]" - } - }, - "48dd9a6aa6e04253993e692d727876f1": { - "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 - } - }, - "4ac053bc3db6423ba5f0d143919d1cca": { - "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 - } - }, - "4c9fcae8ba86441e98dc6c68b3303659": { - "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 - } - }, - "4d46dfc8082246568e7cc69f74baac14": { - "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_9ba1c4bac8014f38a1dc24f2a7b3c3cd", - "placeholder": "​", - "style": "IPY_MODEL_c357ff588a474c59924747141954d81e", - "value": "Batches: 100%" - } - }, - "4d4beedccc5248679201df2cd2481429": { - "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 - } - }, - "4d922fb301f944fbb0218335a28cf6e5": { - "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_b6729cc6ba084677af55ac63c819b72f", - "max": 898822, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_ea439e2251ed467fb3a775f0c8e0c3bb", - "value": 898822 - } - }, - "4dad7e58cc47436aafe38230514325a1": { - "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_3096cae7388e4b988df306be9cc58afd", - "placeholder": "​", - "style": "IPY_MODEL_2b17ffac93b8406fac55b695d93d963b", - "value": " 79.0/79.0 [00:00<00:00, 1.81kB/s]" - } - }, - "4e09d22438dc434d99c6ce15051a06b3": { - "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": "" - } - }, - "4ebe093dbae1435eb6b032fbfae21a77": { - "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_277e1f68e583461694dbfbd7354154c9", - "max": 53, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_3f915b2f0bba48c48865ac5b45487822", - "value": 53 - } - }, - "4fc88278033a4eaea62acd7cf7e4c228": { - "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 - } - }, - "50432636bd864dc5bd99302283f62f93": { - "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_4d4beedccc5248679201df2cd2481429", - "placeholder": "​", - "style": "IPY_MODEL_d1fec191a2b94bf0bbde31707f3637b1", - "value": "Batches: 100%" - } - }, - "50a9ecd07ef24c728777b63b1e6982fe": { - "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 - } - }, - "50e872048a9b4fe58800126c39a0d027": { - "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 - } - }, - "512226094de24fb58f94c1cd240250e4": { - "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_88783d2c81054461b9b44086f9691ce2", - "placeholder": "​", - "style": "IPY_MODEL_2972765858b94d91a525a1e99ab16e07", - "value": "Batches: 100%" - } - }, - "51eeedf54ce0473797c98793ebfb0225": { - "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": "" - } - }, - "51f5c4ae62124c2eb09cd655d50a042c": { - "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": "" - } - }, - "51f95102471a416887e19ff8753750d8": { - "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_3b896b94d6af4857952193f34add9e88", - "max": 1, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_167f8f83ec114f42921645ddfd3ce9ed", - "value": 1 - } - }, - "5254f681c78941c9a3679fbbf6853d3a": { - "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_7abf0d496b76497882548ebde72f91cd", - "placeholder": "​", - "style": "IPY_MODEL_9480ca5448ad4a54ba09bd40356e9cf5", - "value": " 723/723 [00:00<00:00, 14.9kB/s]" - } - }, - "5280dbd3704e4c1bb84d058fee8b5e78": { - "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_3c391b52b10941979277f20802e540ef", - "max": 1, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_8289aad6c2b04cd2931a6ddc25d679bf", - "value": 1 - } - }, - "534b3e6ed51648c081a9a3c9b1188e45": { - "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 - } - }, - "53cf5abeba59442fa559ba35ad96f279": { - "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 - } - }, - "548ef6c85056414cb0ce79164a086d35": { - "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_2a9ef1f2f43d47b28cd0ff7ef4a21ade", - "placeholder": "​", - "style": "IPY_MODEL_f36dc87a4af7481cb3c2cba23d57eb5a", - "value": "Downloading: 100%" - } - }, - "54a4a9ebf2b24542a97157643fc8760e": { - "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 - } - }, - "553183603f114fefa03c2f251ac38ddc": { - "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 - } - }, - "5581c851216e48c7b128f11bd93ca8e4": { - "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 - } - }, - "56206fe85d3744589433ac7cd8dd756d": { - "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": "" - } - }, - "565bdcb1739643119edcafd4df6e8f11": { - "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": "" - } - }, - "56fb299136054a08a950201d3e7bc51e": { - "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 - } - }, - "5726eac63ec24b20a667084ff1614cad": { - "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 - } - }, - "572742602e624001a1e3732444a6f43b": { - "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_9ca52d8d4e7148f7bead223fa5740d16", - "IPY_MODEL_4ebe093dbae1435eb6b032fbfae21a77", - "IPY_MODEL_34a4db43ae9f481ea86e79a5bff2e3ef" - ], - "layout": "IPY_MODEL_b6e52e3a6ee54efbaa1291320b47f411" - } - }, - "576765482f3d4ee8851db9845c34a246": { - "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 - } - }, - "578b058ce8414637bcd7d660a3ea8adc": { - "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_acda5822bf844c2780f96150983f1274", - "placeholder": "​", - "style": "IPY_MODEL_2e6177cd6f7941e7b948aeac0dafd05c", - "value": " 1/1 [00:00<00:00, 10.59it/s]" - } - }, - "5817e7254041439692a9f9fc8d26d05f": { - "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_68f8afd75269413abd300740692d13eb", - "placeholder": "​", - "style": "IPY_MODEL_f8a6d02669224f5e9d8d09be5451b08b", - "value": " 1/1 [00:00<00:00, 9.50it/s]" - } - }, - "58c2ec2a05024f1081dce3ad466e6c5a": { - "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_720453f72c9d4681ae0db5cdf297cc71", - "placeholder": "​", - "style": "IPY_MODEL_81b3ce0858bd4bf8a168538397b73970", - "value": " 1/1 [00:00<00:00, 16.68it/s]" - } - }, - "59039df74ce64c2f9e91663b6498c29c": { - "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_2c028a3f096344d68071d78387efa117", - "IPY_MODEL_4d922fb301f944fbb0218335a28cf6e5", - "IPY_MODEL_05d82995d5a94b5db39bf639d1cc05c2" - ], - "layout": "IPY_MODEL_9e130b97f0f4463f85df834d0f99d6ef" - } - }, - "59efb57b419242a1aba4d20084e29d38": { - "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 - } - }, - "5a828469ff1d4e0aa10346776ebe6ed8": { - "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": "" - } - }, - "5ab8cf3f17e84139bca02f42e72f48a6": { - "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_5c8ae6b463cb4c7bbba2b4c00eb6972b", - "placeholder": "​", - "style": "IPY_MODEL_d69bff579d794cd18920cef35b9cea2a", - "value": "Batches: 100%" - } - }, - "5acc7081c57645cda08f722a80a82618": { - "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_2f9ea952cead4eb8a9dd7a4be0f360fc", - "placeholder": "​", - "style": "IPY_MODEL_3681c9063cf1428b8a757090453321db", - "value": " 190/190 [00:00<00:00, 4.28kB/s]" - } - }, - "5b481a669c6b4443af672436df2e0f87": { - "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 - } - }, - "5bbf16f90e5a44ba953943e51af0a384": { - "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": "" - } - }, - "5c0562c932764d50a34251e32aad1b9a": { - "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": "" - } - }, - "5c8ae6b463cb4c7bbba2b4c00eb6972b": { - "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 - } - }, - "5d65e5693e64421da29ea68e5bf806fc": { - "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_8aa11778066445eab63794589f241463", - "IPY_MODEL_bb9530a97bdf4221995c34ecdac01177", - "IPY_MODEL_a47599795dff439fa7133ed5d786edcb" - ], - "layout": "IPY_MODEL_016b6c1acdd04369ab22c635e69382bb" - } - }, - "5db857b352964db3a617568ff1dce86d": { - "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_5f94d400ea884c1cadfc966e44849b3a", - "IPY_MODEL_0d34710578ac4c1db6fe372b5d1215b4", - "IPY_MODEL_994ae85181664e2e87a2ee18a7a237ba" - ], - "layout": "IPY_MODEL_7752437041f745a4af4b9130df3fefa7" - } - }, - "5e3141a3a8584caaae4a2134a21d15a4": { - "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 - } - }, - "5e3ad720118240188fef69ad77cd72e3": { - "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 - } - }, - "5f2eedf3c8b74abca674ec0bf28f36a1": { - "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 - } - }, - "5f94d400ea884c1cadfc966e44849b3a": { - "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_ccfd1a0b6f494d8a9d78e7387261fba8", - "placeholder": "​", - "style": "IPY_MODEL_368a61e33c3144bfa3cc94af10691146", - "value": "Downloading: 100%" - } - }, - "5fd41c40b79a49a5b5ec135134b91f6a": { - "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_18626d41312c4b60b68375614682dee6", - "IPY_MODEL_38bab693920d447b8bb1a5f1e6c2de39", - "IPY_MODEL_5acc7081c57645cda08f722a80a82618" - ], - "layout": "IPY_MODEL_abcf2fc37c8e429da2d0fca4ee437a74" - } - }, - "608c3c6002d248d0a4e8463c558f3464": { - "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_8262d554e9de4c7fa498e949cedefc99", - "max": 1, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_66e0737384154c58a8fa44ccd69b7477", - "value": 1 - } - }, - "60c6f5edec98476fb2794712ed499206": { - "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 - } - }, - "60dfc3ed0c8a45eebeaf8e35868e7708": { - "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 - } - }, - "60eb65d6a8ce4ee288a8aabea9d33094": { - "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_0cdff9bf98da47789a75f2beeb5727b4", - "max": 1, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_3200cd718a4c439386994d13e1b0e173", - "value": 1 - } - }, - "61395f952fff44ddbf35195f08890b3a": { - "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": "" - } - }, - "627e45096be0470f8ba6e7650ae1038b": { - "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": "" - } - }, - "629d1895d93a44b29c7748e11268580a": { - "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_312b5718b838451d896f3447b9f9880c", - "placeholder": "​", - "style": "IPY_MODEL_77a3254e2c404c129ce7f43d850f3b7a", - "value": "Downloading: 100%" - } - }, - "64ac622c81094854b887754eb507438a": { - "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_3b8baa9a443c417996fb82eed060c6ba", - "max": 1, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_223e5e8dfd48473d95dc159f970c2bbe", - "value": 1 - } - }, - "64cd5b6f0c4d4631a1049ee7ee50f063": { - "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_d4dbfa5e89e7432dbed34606a786fd6f", - "max": 772, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_4837b34ccb4d4688865dc24dc58a7c1e", - "value": 772 - } - }, - "6533e9e24e5c4ecfbb12de41cc170975": { - "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_d345a0d6a7a84e51bbbcd282082b1186", - "max": 723, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_18359b5df7574a289e8b4582f65ab0a3", - "value": 723 - } - }, - "656e26469505445e8bcefd253e0c7c30": { - "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 - } - }, - "66afe6aa36534f4897afdf035037c66c": { - "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 - } - }, - "66c808ddecba493482ba0ec96b267d83": { - "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_c880c3a9c45042e69d13ffd5dd1c6403", - "placeholder": "​", - "style": "IPY_MODEL_b15355099b7a4b88b9ce876378d03367", - "value": "Batches: 100%" - } - }, - "66e0737384154c58a8fa44ccd69b7477": { - "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": "" - } - }, - "675951a59fb441bbb8a5dc2c4b2c753e": { - "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 - } - }, - "67ee3f0117bc4e7bb4c7b9351845cdd4": { - "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_56fb299136054a08a950201d3e7bc51e", - "placeholder": "​", - "style": "IPY_MODEL_79b6c5bfa584487586da0caecad5acc9", - "value": "Batches: 100%" - } - }, - "68f8afd75269413abd300740692d13eb": { - "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 - } - }, - "693afa9584a34f97ae3ebbc3a775e72a": { - "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_cd2c571f25384077a5a1a592931f7f7a", - "IPY_MODEL_c15d324309e14d0c913177d745176265", - "IPY_MODEL_398c87412a4b41a48f8ed8538e0a7b91" - ], - "layout": "IPY_MODEL_43fa7009112741c89725963985cb9f08" - } - }, - "694158e7816f4b10bf8cb6cae954aeaa": { - "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 - } - }, - "697432dd99b946688ba52fdf5d5542c1": { - "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_26f3c26b0c5a4e7d945029e516f17ff8", - "IPY_MODEL_7acf9b34256b41909f27cf6552fa8499", - "IPY_MODEL_5254f681c78941c9a3679fbbf6853d3a" - ], - "layout": "IPY_MODEL_042038fce6024fbbba45d9afc21c4dc9" - } - }, - "69750fea2e7149eab8928282ba9bae29": { - "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_548ef6c85056414cb0ce79164a086d35", - "IPY_MODEL_cf58b340496b4d62b610451cedbd709a", - "IPY_MODEL_4dad7e58cc47436aafe38230514325a1" - ], - "layout": "IPY_MODEL_08a1d1a6fb884c769d409170d6cda556" - } - }, - "6ca6dc2c6b4349fcb39ed8c44f65bdb0": { - "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 - } - }, - "6e697b2f47024ba78b4de46587b82d4b": { - "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 - } - }, - "6eeafcdcdf894b33a58e1d7c99fe3918": { - "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_4c9fcae8ba86441e98dc6c68b3303659", - "placeholder": "​", - "style": "IPY_MODEL_8e67ff4e2fdf45bb840cee3db416a7cf", - "value": " 1/1 [00:00<00:00, 11.94it/s]" - } - }, - "6f028c7e888e4ae5ab5c1e42ff142b5f": { - "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": "" - } - }, - "6f2a17a8dc19494998ab2dd2d81bcaa8": { - "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 - } - }, - "6f7ddc1720344ba9b939a8e4ac593d67": { - "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_ed683929822b4084ba33e89b23936b16", - "IPY_MODEL_94c88d0fc3f949fbacfb6b4fcd99cc63", - "IPY_MODEL_b262e92ff6484405a0e9364f6ecafb6a" - ], - "layout": "IPY_MODEL_b480c97c1d9944b9a8dd09ed6e1e9bd3" - } - }, - "6fae51602c934f6fbc6eb7b0d37e2c26": { - "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": "" - } - }, - "7189cebe70004a4293a9d868cada294e": { - "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": "" - } - }, - "720453f72c9d4681ae0db5cdf297cc71": { - "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 - } - }, - "735cb17199d9403b9d65f598067fb17f": { - "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 - } - }, - "73d7fdd3f38349b4882124d8351eace5": { - "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 - } - }, - "746adb0fb9964e27b9f9a92a94022d25": { - "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_8e52fb3f81ba4607bfd12c3302a98ee8", - "IPY_MODEL_6533e9e24e5c4ecfbb12de41cc170975", - "IPY_MODEL_ea2992e1f7144cc29c3bfffbbf64e2ac" - ], - "layout": "IPY_MODEL_959e2396a101463e9796ae461f189e5d" - } - }, - "74b281989cd84b01ad957259c78265fd": { - "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": "" - } - }, - "763dc9a81242444183854e8f65882c27": { - "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_e85e291b0c50401abd9d7588ce1467cb", - "IPY_MODEL_df007844178f4b63b67831b4d38576df", - "IPY_MODEL_85908f2604094196a0c86cb6dd731615" - ], - "layout": "IPY_MODEL_86d167621f81425b9a2b0369146fa314" - } - }, - "76a9a9ff30384c63bbafac8dad7e6b6f": { - "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 - } - }, - "76f40571571b4ddd87df3a29718b835e": { - "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 - } - }, - "76f4af76b42f460fa34d5f00a9656dc5": { - "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": "" - } - }, - "7751d434164249b79f863d1cb59b4bee": { - "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 - } - }, - "7752437041f745a4af4b9130df3fefa7": { - "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 - } - }, - "7770031e5dcb4f398df87332c8091f2e": { - "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_e7658ccda51c46a6b560a260c38f933d", - "max": 1, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_f5417b7abd5a48178fd0c0a8aefeae05", - "value": 1 - } - }, - "77a3254e2c404c129ce7f43d850f3b7a": { - "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": "" - } - }, - "78a5e21ae14d49a1b43d583ed4c9ccb0": { - "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_3efe97c2a0824f4e9c31977d315b1ab2", - "IPY_MODEL_af462d4f283c43cfb86ab7909cebaa31", - "IPY_MODEL_5817e7254041439692a9f9fc8d26d05f" - ], - "layout": "IPY_MODEL_e0c76e0937db4e3d916710d7172da3f1" - } - }, - "798c7b005e1a490e9a4a9de4569e9351": { - "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_c10f5dc8d3684757bc6102d734c555f6", - "placeholder": "​", - "style": "IPY_MODEL_a9552d04ed6045718cc60ad1c2764a32", - "value": "Downloading: 100%" - } - }, - "79b013bf213d41e1a3e285028a7707c6": { - "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": "" - } - }, - "79b6c5bfa584487586da0caecad5acc9": { - "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": "" - } - }, - "7abf0d496b76497882548ebde72f91cd": { - "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 - } - }, - "7acf9b34256b41909f27cf6552fa8499": { - "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_60dfc3ed0c8a45eebeaf8e35868e7708", - "max": 723, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_8d9368d2c2284625932361fe790d30ca", - "value": 723 - } - }, - "7b11f8ba932b47c1aa51efc38175b8e1": { - "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": "" - } - }, - "7b4ab3ae9e264f468ed3860f1652f3ec": { - "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": "" - } - }, - "7b874e92087d45019bd381d8307084f7": { - "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_629d1895d93a44b29c7748e11268580a", - "IPY_MODEL_b60fa302bb5c40d5b224afb0dd69d05a", - "IPY_MODEL_829b1cb886824151b9579022eeaa3566" - ], - "layout": "IPY_MODEL_cc26364d10054a7a850f514c8e4d0334" - } - }, - "7d9a11beefe5478b97ca0a31005a6147": { - "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 - } - }, - "7e058076836e438daf5399428eabac5e": { - "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": "" - } - }, - "7e725f96b7894fa6abb34a286d8cc3a4": { - "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": "" - } - }, - "7efc0f6ef85348fc9e63e281ff4e3fac": { - "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_c4858bf392de41ef8f9f0d7712831961", - "IPY_MODEL_d0aaca4a935441058eddc873e6d63b39", - "IPY_MODEL_05dd9db4d2e94210ae4b62fad5f6f302" - ], - "layout": "IPY_MODEL_50e872048a9b4fe58800126c39a0d027" - } - }, - "7fa656358f524f93a310a8076bd48cdf": { - "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 - } - }, - "807e4eee3b2c440c8799afcc6344ff5d": { - "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": "" - } - }, - "81118afd469847e4b552c17f67bdeb81": { - "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": "" - } - }, - "81b3ce0858bd4bf8a168538397b73970": { - "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": "" - } - }, - "8262368800754a6db7490a90dc94cbf8": { - "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 - } - }, - "8262d554e9de4c7fa498e949cedefc99": { - "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 - } - }, - "8289aad6c2b04cd2931a6ddc25d679bf": { - "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": "" - } - }, - "829b1cb886824151b9579022eeaa3566": { - "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_21444149a59e4761a47d0ef483c7aa45", - "placeholder": "​", - "style": "IPY_MODEL_e313f0433c7442efab35dc7e942d6de2", - "value": " 1.11G/1.11G [00:34<00:00, 30.3MB/s]" - } - }, - "829c0d5f7b614e97b4fda0a9e62dc5ae": { - "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 - } - }, - "82d32df32d244290aea5f10cdc03e652": { - "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_86759f2581904ff1a2736bcbe9d58fff", - "max": 690, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_6fae51602c934f6fbc6eb7b0d37e2c26", - "value": 690 - } - }, - "82f31100018e412b9598186060b33fc5": { - "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_2da7b278298e4a5996fb9bc8ab91be18", - "IPY_MODEL_7770031e5dcb4f398df87332c8091f2e", - "IPY_MODEL_a03aff3544f14439ac7b1bc6d02a4860" - ], - "layout": "IPY_MODEL_6f2a17a8dc19494998ab2dd2d81bcaa8" - } - }, - "83378c4b2beb4aa89849a7fc3afce5c6": { - "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 - } - }, - "833ee63ee4ba41f086e7fea0914b7f71": { - "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_303fd4fd657f4181a7d5aaf125bacea2", - "IPY_MODEL_87002ec5a9e64b3da19ccee273b40932", - "IPY_MODEL_1ad8f4afb35e4ee69a0cde1f98be5ea6" - ], - "layout": "IPY_MODEL_dc48c774b8954d8dbabc4d792dd0c397" - } - }, - "83aee8bf612345a18aea950c9a1fa143": { - "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 - } - }, - "841993e4585b45d9bafc4cbeddff4033": { - "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 - } - }, - "843cfba29fd046638f79ca44d340b091": { - "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": "" - } - }, - "85908f2604094196a0c86cb6dd731615": { - "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_a746473dcbdf4a21915398141008da17", - "placeholder": "​", - "style": "IPY_MODEL_e17d2dc542c14f98a2a19ecefb447d38", - "value": " 1/1 [00:00<00:00, 10.85it/s]" - } - }, - "86759f2581904ff1a2736bcbe9d58fff": { - "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 - } - }, - "86a2aa7f86c840b8ba3feb351ef9cdba": { - "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": "" - } - }, - "86d167621f81425b9a2b0369146fa314": { - "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 - } - }, - "87002ec5a9e64b3da19ccee273b40932": { - "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_48dd9a6aa6e04253993e692d727876f1", - "max": 1, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_74b281989cd84b01ad957259c78265fd", - "value": 1 - } - }, - "88783d2c81054461b9b44086f9691ce2": { - "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 - } - }, - "88a03527abc544f3bbe30fabd7577098": { - "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 - } - }, - "8a06126bd2714badbc1dd9ace47873aa": { - "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": "" - } - }, - "8a9f9b7bab8e40278430a35720066a61": { - "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 - } - }, - "8aa11778066445eab63794589f241463": { - "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_5581c851216e48c7b128f11bd93ca8e4", - "placeholder": "​", - "style": "IPY_MODEL_09cb41d0bbc14a24b8dde747c249a78e", - "value": "Downloading: 100%" - } - }, - "8b097bc82a2a4479895400362c5e2782": { - "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 - } - }, - "8bd47dc1fba04e50b57a646fdff4d08a": { - "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_efc925a4b5fa4144a9435ba998584b2c", - "placeholder": "​", - "style": "IPY_MODEL_cb418736d5444d3b8e820ef0e1be8d0e", - "value": " 1/1 [00:00<00:00, 13.24it/s]" - } - }, - "8c88d2fa52474307a130a2d9ae6f1810": { - "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_28c517182585423aa28e3b2d949678c4", - "max": 3769, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_aa334bfffc9d4476b34351a9c3d62a7b", - "value": 3769 - } - }, - "8d40aa5382db4c64acba90541bc87dd3": { - "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 - } - }, - "8d9368d2c2284625932361fe790d30ca": { - "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": "" - } - }, - "8dfc1480100f43e0b4ea2fc2fb9279d3": { - "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 - } - }, - "8e0958b5dc27412e9f0332da3457ffdb": { - "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 - } - }, - "8e52fb3f81ba4607bfd12c3302a98ee8": { - "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_90acd09e75c34642aff6bfbb9ab29f89", - "placeholder": "​", - "style": "IPY_MODEL_e8eac538b81143b6a1e3b30746a15722", - "value": "Downloading: 100%" - } - }, - "8e67ff4e2fdf45bb840cee3db416a7cf": { - "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": "" - } - }, - "8f3b276f21474fb78e11e2a5dae516bd": { - "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 - } - }, - "9016e2b714fa4f7daaab4a99299190e8": { - "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 - } - }, - "90acd09e75c34642aff6bfbb9ab29f89": { - "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 - } - }, - "912e6dd1ff544e8d9c94609ec899fbbe": { - "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_197130c97a6f4113bb70f9872f65dede", - "placeholder": "​", - "style": "IPY_MODEL_61395f952fff44ddbf35195f08890b3a", - "value": "Batches: 100%" - } - }, - "920d76460f204a69a4ddbf1a0aaa5242": { - "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_e60c4734f0424daaaeec0ee34948dabb", - "placeholder": "​", - "style": "IPY_MODEL_982e773a0dcc408f800cf1eb139a8b2e", - "value": "Batches: 100%" - } - }, - "92e22c5bafcd4a51ba54203776dde02f": { - "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_08c0344f4cfc4ba7b9271e4301ee9095", - "placeholder": "​", - "style": "IPY_MODEL_b0108675bf6b4457bfce64cead45ec31", - "value": "Downloading: 100%" - } - }, - "936869567f72424ea18fcaa87f20818e": { - "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 - } - }, - "93b48c87a738442b885ea68f20e17f9b": { - "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": "" - } - }, - "93d3a93cd8634149b96cbd528bdb9e82": { - "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": "" - } - }, - "93dd5983dd31466e862732cc991f0590": { - "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": "" - } - }, - "9480ca5448ad4a54ba09bd40356e9cf5": { - "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": "" - } - }, - "94c88d0fc3f949fbacfb6b4fcd99cc63": { - "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_98da94a8d7b94fb4a08adcebea15e114", - "max": 496313727, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_d7e3c8e1e0424cec9dc1b97090b5af87", - "value": 496313727 - } - }, - "95013e8d9b16488e8f95750134a09b90": { - "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_ddaa3410e1f740198bcac431184ee37e", - "placeholder": "​", - "style": "IPY_MODEL_e1c796fba9cf4336846d6bbd1d7bbc47", - "value": " 1/1 [00:00<00:00, 8.69it/s]" - } - }, - "959e2396a101463e9796ae461f189e5d": { - "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 - } - }, - "961b8ed89e63441ead537ff2b502c857": { - "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_936869567f72424ea18fcaa87f20818e", - "placeholder": "​", - "style": "IPY_MODEL_9970e6ebe0b34fb38964fbd21246c447", - "value": " 1/1 [00:00<00:00, 13.65it/s]" - } - }, - "978b165c69dd4e14b8479ea7bd8cb1e5": { - "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 - } - }, - "982e773a0dcc408f800cf1eb139a8b2e": { - "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": "" - } - }, - "98da94a8d7b94fb4a08adcebea15e114": { - "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 - } - }, - "99275f997bcc44929df837687c596414": { - "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": "" - } - }, - "994ae85181664e2e87a2ee18a7a237ba": { - "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_c8ba8c2a210b45f6a9b5257589babac3", - "placeholder": "​", - "style": "IPY_MODEL_6f028c7e888e4ae5ab5c1e42ff142b5f", - "value": " 456k/456k [00:00<00:00, 714kB/s]" - } - }, - "9970e6ebe0b34fb38964fbd21246c447": { - "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": "" - } - }, - "9acbd5d07b4a42bebb968e83f3500f34": { - "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 - } - }, - "9ba1c4bac8014f38a1dc24f2a7b3c3cd": { - "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 - } - }, - "9ca52d8d4e7148f7bead223fa5740d16": { - "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_bcdf21e10d1c4307b92821b3a73786c8", - "placeholder": "​", - "style": "IPY_MODEL_5bbf16f90e5a44ba953943e51af0a384", - "value": "Downloading: 100%" - } - }, - "9d46ed6e9cff463b8e527773b931e935": { - "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_d2ab768dc09d4482b84a2c929dee7cd6", - "placeholder": "​", - "style": "IPY_MODEL_1c003f6cf2064ffeb152e5bf5dee3780", - "value": " 1/1 [00:00<00:00, 10.94it/s]" - } - }, - "9de62b03f720467fa45c34fb485771d8": { - "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_a18992e493b942b08a55b7a641715c1d", - "placeholder": "​", - "style": "IPY_MODEL_99275f997bcc44929df837687c596414", - "value": "Batches: 100%" - } - }, - "9e130b97f0f4463f85df834d0f99d6ef": { - "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 - } - }, - "9ebec730f45746ac8ddb4fc710f90f54": { - "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": "" - } - }, - "9f23dc687bb54d8ca102ebd1f35b45ee": { - "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": "" - } - }, - "9f91aaa7eef54c55aa1ba46eb3baa617": { - "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": "" - } - }, - "a03aff3544f14439ac7b1bc6d02a4860": { - "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_eef6238b512249d993d1b6c9b76e3946", - "placeholder": "​", - "style": "IPY_MODEL_51eeedf54ce0473797c98793ebfb0225", - "value": " 1/1 [00:00<00:00, 13.03it/s]" - } - }, - "a18992e493b942b08a55b7a641715c1d": { - "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 - } - }, - "a1dd2c997cc34344aa83fc1bf59560c9": { - "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_edba6fb34578451ab5e4a08ea3a5eb25", - "placeholder": "​", - "style": "IPY_MODEL_307f6af0ea724573a59c5ef0a429fd0c", - "value": " 122/122 [00:00<00:00, 2.31kB/s]" - } - }, - "a21f4958105f4b3ca32f0977bcfd7d48": { - "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": "" - } - }, - "a28f716145f046fcb101ae6eb5d55e2f": { - "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_76a9a9ff30384c63bbafac8dad7e6b6f", - "placeholder": "​", - "style": "IPY_MODEL_51f5c4ae62124c2eb09cd655d50a042c", - "value": "Batches: 100%" - } - }, - "a30bb6e73ecb450b9e94ceca871f4958": { - "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 - } - }, - "a47599795dff439fa7133ed5d786edcb": { - "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_5b481a669c6b4443af672436df2e0f87", - "placeholder": "​", - "style": "IPY_MODEL_7b4ab3ae9e264f468ed3860f1652f3ec", - "value": " 9.08M/9.08M [00:00<00:00, 11.5MB/s]" - } - }, - "a529dbbfdd6b469dbfe80cee993c9a33": { - "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 - } - }, - "a548cf8ad9004eb1ae5a8e76bdb5f88a": { - "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_dc4df32c929d428593b68476285425e0", - "IPY_MODEL_36c9dc024fed498cb76edd9f18447979", - "IPY_MODEL_578b058ce8414637bcd7d660a3ea8adc" - ], - "layout": "IPY_MODEL_8d40aa5382db4c64acba90541bc87dd3" - } - }, - "a6963c7d4e1a46c2a0c86ef3faa36548": { - "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_694158e7816f4b10bf8cb6cae954aeaa", - "max": 1, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_c674148cbf294431a48faa9378d17c82", - "value": 1 - } - }, - "a746473dcbdf4a21915398141008da17": { - "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 - } - }, - "a7dfc0089edd47678dd411093c3cf664": { - "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 - } - }, - "a867e816d795422ba16cfb3b4295e7f2": { - "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_735cb17199d9403b9d65f598067fb17f", - "placeholder": "​", - "style": "IPY_MODEL_29317e31312545c49d51cde6c617fe3f", - "value": " 229/229 [00:00<00:00, 5.50kB/s]" - } - }, - "a9552d04ed6045718cc60ad1c2764a32": { - "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": "" - } - }, - "aa334bfffc9d4476b34351a9c3d62a7b": { - "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": "" - } - }, - "abcf2fc37c8e429da2d0fca4ee437a74": { - "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 - } - }, - "acc7988ac6a94afdaf980e4d1ab871b5": { - "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": "" - } - }, - "acda5822bf844c2780f96150983f1274": { - "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 - } - }, - "ade97ddccca24f4c9e01fb19e2d8bfb7": { - "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_60c6f5edec98476fb2794712ed499206", - "placeholder": "​", - "style": "IPY_MODEL_e63ed6b6266f47ae8c0106089b1cd85e", - "value": " 1/1 [00:00<00:00, 13.03it/s]" - } - }, - "af462d4f283c43cfb86ab7909cebaa31": { - "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_4fc88278033a4eaea62acd7cf7e4c228", - "max": 1, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_ebed91eca5d5439997b4aaec5a7d953e", - "value": 1 - } - }, - "af46cfb222cf4d5ba1b34d2d462c8e6f": { - "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 - } - }, - "b0108675bf6b4457bfce64cead45ec31": { - "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": "" - } - }, - "b046241482c7485b9037ed039eb48649": { - "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": "" - } - }, - "b0744737aba1427aa04d33402e0c7a2a": { - "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_a30bb6e73ecb450b9e94ceca871f4958", - "placeholder": "​", - "style": "IPY_MODEL_9ebec730f45746ac8ddb4fc710f90f54", - "value": " 3.77k/3.77k [00:00<00:00, 89.7kB/s]" - } - }, - "b0ae975eb94143fda0ac6c748148a7cc": { - "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_5726eac63ec24b20a667084ff1614cad", - "placeholder": "​", - "style": "IPY_MODEL_3ba492ab49d64d9a9010e46d293c3053", - "value": " 1/1 [00:00<00:00, 13.38it/s]" - } - }, - "b0fda0f7f1694c958fabb866c8837b07": { - "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": "" - } - }, - "b140eb98a700455a902dcfbd871593e9": { - "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_92e22c5bafcd4a51ba54203776dde02f", - "IPY_MODEL_420f93d2f7474dc38922c2277b5bcfcc", - "IPY_MODEL_a1dd2c997cc34344aa83fc1bf59560c9" - ], - "layout": "IPY_MODEL_443a8a6c17964705931974c420229649" - } - }, - "b15355099b7a4b88b9ce876378d03367": { - "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": "" - } - }, - "b1845caaff584163b6d9723f4e67f5b2": { - "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": "" - } - }, - "b262e92ff6484405a0e9364f6ecafb6a": { - "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_2bd3bd51ae644c1894a2ddca09d14e85", - "placeholder": "​", - "style": "IPY_MODEL_13b75146701145808315dc87d598b3f9", - "value": " 496M/496M [00:15<00:00, 30.4MB/s]" - } - }, - "b2955f26a1b34b21881c6a98f92234ad": { - "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": "" - } - }, - "b4511a00a65f40f8879209e63cc4044c": { - "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_40a7c2ba203f42deb6c7010959c8f2c9", - "max": 1, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_c652f9773b604b1d9dc357052aaba437", - "value": 1 - } - }, - "b480c97c1d9944b9a8dd09ed6e1e9bd3": { - "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 - } - }, - "b60fa302bb5c40d5b224afb0dd69d05a": { - "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_45a892664d8d4a2abba2bc805208868e", - "max": 1112253233, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_7189cebe70004a4293a9d868cada294e", - "value": 1112253233 - } - }, - "b62c8b64f87a4209a74cd5bfb5522109": { - "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 - } - }, - "b63ca14fc0cb46e88e5d86f0ff4609fc": { - "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_b851a1ded89a4620a694fb7a845754f5", - "max": 1, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_79b013bf213d41e1a3e285028a7707c6", - "value": 1 - } - }, - "b6729cc6ba084677af55ac63c819b72f": { - "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 - } - }, - "b6e52e3a6ee54efbaa1291320b47f411": { - "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 - } - }, - "b794ab54698f4db18ae5edabc7d96783": { - "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 - } - }, - "b851a1ded89a4620a694fb7a845754f5": { - "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 - } - }, - "bab3859cebba4383b7692b7d3265a43b": { - "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 - } - }, - "bacf1704dbaf4176afbe2cbcc8e036ef": { - "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": "" - } - }, - "bb7f0fbb54274fb9a654eb6ee938ba66": { - "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": "" - } - }, - "bb9530a97bdf4221995c34ecdac01177": { - "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_359fd318bace46468f7972a24a87a52b", - "max": 9081518, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_4e09d22438dc434d99c6ce15051a06b3", - "value": 9081518 - } - }, - "bcca8127f74f4e36813a902020d9cb4e": { - "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 - } - }, - "bcdf21e10d1c4307b92821b3a73786c8": { - "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 - } - }, - "bd6c06e82de34ff7b3b0cb30b914ce81": { - "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_bab3859cebba4383b7692b7d3265a43b", - "placeholder": "​", - "style": "IPY_MODEL_7b11f8ba932b47c1aa51efc38175b8e1", - "value": " 1/1 [00:00<00:00, 13.09it/s]" - } - }, - "bd7121c2a3e244ef91ff5150d2d8838b": { - "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 - } - }, - "bde4901baa744b7bac106ac3630ee31c": { - "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 - } - }, - "bf017ec69a084b2fae86b5e24282fa2b": { - "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 - } - }, - "c03219a376ed425f9d275ad3a0ff86c8": { - "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": "" - } - }, - "c08ac5e6c7be413d9daf19ab5ecfeec3": { - "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_7d9a11beefe5478b97ca0a31005a6147", - "placeholder": "​", - "style": "IPY_MODEL_0ee7399f4e2148b38ad2dd0ef1816e78", - "value": "Downloading: 100%" - } - }, - "c10f5dc8d3684757bc6102d734c555f6": { - "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 - } - }, - "c15d324309e14d0c913177d745176265": { - "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_83378c4b2beb4aa89849a7fc3afce5c6", - "max": 1, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_c255f1c9ced3405cbfe308eeb0e5f390", - "value": 1 - } - }, - "c255f1c9ced3405cbfe308eeb0e5f390": { - "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": "" - } - }, - "c2a10377a4104f0db40385232e02ddeb": { - "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_88a03527abc544f3bbe30fabd7577098", - "placeholder": "​", - "style": "IPY_MODEL_c03219a376ed425f9d275ad3a0ff86c8", - "value": "Batches: 100%" - } - }, - "c2ba6b6c20ed419fae2a6fe625261382": { - "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 - } - }, - "c357ff588a474c59924747141954d81e": { - "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": "" - } - }, - "c373178edb624ad39973c6b34c2fd540": { - "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_50432636bd864dc5bd99302283f62f93", - "IPY_MODEL_fa230a8644bd4e7a85a3c8b888bf2d27", - "IPY_MODEL_47e629b53187448f8eb54bd8b31af735" - ], - "layout": "IPY_MODEL_f9b1e0c3cb304cf58a9bdce3cc03239c" - } - }, - "c429d64cb3e747a6bdd33763720a10d2": { - "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": "" - } - }, - "c4858bf392de41ef8f9f0d7712831961": { - "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_fc84f721213f407b8831398dce1984ad", - "placeholder": "​", - "style": "IPY_MODEL_81118afd469847e4b552c17f67bdeb81", - "value": "Downloading: 100%" - } - }, - "c652f9773b604b1d9dc357052aaba437": { - "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": "" - } - }, - "c674148cbf294431a48faa9378d17c82": { - "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": "" - } - }, - "c7fd461142854331937a6ada7ff8f64c": { - "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 - } - }, - "c880c3a9c45042e69d13ffd5dd1c6403": { - "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 - } - }, - "c8ba8c2a210b45f6a9b5257589babac3": { - "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 - } - }, - "c9025edb46eb43a98a9259380de08a36": { - "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": "" - } - }, - "c9e8420edbab45429112a7884b57306d": { - "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 - } - }, - "caa374f7dc5045218c6f71f322d8e6be": { - "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": "" - } - }, - "caae193b34644af7950e2e3eac81a5bb": { - "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": "" - } - }, - "cab40c4a19604774a2a9edbc47b19308": { - "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_534b3e6ed51648c081a9a3c9b1188e45", - "max": 1, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_4681de508aac4dbb975199dc57df33d7", - "value": 1 - } - }, - "cb418736d5444d3b8e820ef0e1be8d0e": { - "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": "" - } - }, - "cbfb512f58c44b879e89fc6917799fd4": { - "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 - } - }, - "cc26364d10054a7a850f514c8e4d0334": { - "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 - } - }, - "ccfd1a0b6f494d8a9d78e7387261fba8": { - "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 - } - }, - "cd0a32b06546428193dd7fa89fbf7e9e": { - "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 - } - }, - "cd2c571f25384077a5a1a592931f7f7a": { - "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_7751d434164249b79f863d1cb59b4bee", - "placeholder": "​", - "style": "IPY_MODEL_8a06126bd2714badbc1dd9ace47873aa", - "value": "Batches: 100%" - } - }, - "cdf6ee9d1d1c422795e82dbb5691053e": { - "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 - } - }, - "ceb036e9f5bd4e9da47db5dff3eb3acb": { - "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": "" - } - }, - "cf58b340496b4d62b610451cedbd709a": { - "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_e567fab4446544f795be2eb0a6705f9c", - "max": 79, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_caa374f7dc5045218c6f71f322d8e6be", - "value": 79 - } - }, - "d0aaca4a935441058eddc873e6d63b39": { - "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_34620791c5d145bfbb0a787f0ca4eb6b", - "max": 5069051, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_48182100536a425f9a9955fecf19627d", - "value": 5069051 - } - }, - "d1fec191a2b94bf0bbde31707f3637b1": { - "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": "" - } - }, - "d27877c6ad6148078e176ae4ce363c35": { - "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_ed3b4899817c47d6b196558e49cc59b2", - "placeholder": "​", - "style": "IPY_MODEL_427f364bc9644745ad3f7abfc43b7b6e", - "value": "Downloading: 100%" - } - }, - "d2ab768dc09d4482b84a2c929dee7cd6": { - "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 - } - }, - "d345a0d6a7a84e51bbbcd282082b1186": { - "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 - } - }, - "d3bcb223dd7943dbb85d8c93a3ed0bc1": { - "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 - } - }, - "d4144eb10fcb43eea2ca864ce213e3cc": { - "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_920d76460f204a69a4ddbf1a0aaa5242", - "IPY_MODEL_cab40c4a19604774a2a9edbc47b19308", - "IPY_MODEL_d5e4aa32c50e48dabafcba153b95ef32" - ], - "layout": "IPY_MODEL_03698f5714bc477c9a0b7dec7542fd50" - } - }, - "d4dbfa5e89e7432dbed34606a786fd6f": { - "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 - } - }, - "d520129190494e17a338b9e9dc02cdaa": { - "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_6e697b2f47024ba78b4de46587b82d4b", - "placeholder": "​", - "style": "IPY_MODEL_fa46a43575ee4c52af77f226e438d896", - "value": " 402/402 [00:00<00:00, 6.76kB/s]" - } - }, - "d579129ca5c04c6a8400c2483a952386": { - "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": "" - } - }, - "d59b565796fe4a3b9fe3b0b12dd73da4": { - "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 - } - }, - "d5d5aae1f1084c82ba5ecc9ee0b6c473": { - "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 - } - }, - "d5e4aa32c50e48dabafcba153b95ef32": { - "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_0138ab99398e44c69ee0d92191e7d142", - "placeholder": "​", - "style": "IPY_MODEL_2e3ff8ff7d7244e09a9a954d15c9d40e", - "value": " 1/1 [00:00<00:00, 11.42it/s]" - } - }, - "d6125036c6cd4b04badcda02419be090": { - "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 - } - }, - "d69bff579d794cd18920cef35b9cea2a": { - "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": "" - } - }, - "d6a66e1346d849b9802898417d34697c": { - "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": "" - } - }, - "d7e3c8e1e0424cec9dc1b97090b5af87": { - "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": "" - } - }, - "d7fe543399db4a64b23761e6f8e967ce": { - "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 - } - }, - "d867294bd4944f3086f335cadc6e1204": { - "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_a28f716145f046fcb101ae6eb5d55e2f", - "IPY_MODEL_e65ae480d2d04ab48c8624eb1fca45d8", - "IPY_MODEL_2bfc05c7ef514354bfb41fe6290dbf33" - ], - "layout": "IPY_MODEL_d6125036c6cd4b04badcda02419be090" - } - }, - "da2985b6824449f6982434a5a0bdbd39": { - "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": "" - } - }, - "db57281b3d7a448fbd2d63d8f127ea3e": { - "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": "" - } - }, - "dc48c774b8954d8dbabc4d792dd0c397": { - "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 - } - }, - "dc4df32c929d428593b68476285425e0": { - "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_656e26469505445e8bcefd253e0c7c30", - "placeholder": "​", - "style": "IPY_MODEL_5a828469ff1d4e0aa10346776ebe6ed8", - "value": "Batches: 100%" - } - }, - "ddaa3410e1f740198bcac431184ee37e": { - "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 - } - }, - "ddaf59cedca143c8b4fe005a51077323": { - "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_3d211e6614f4451e9d14866cb3a8332d", - "placeholder": "​", - "style": "IPY_MODEL_a21f4958105f4b3ca32f0977bcfd7d48", - "value": "Downloading: 100%" - } - }, - "de7355b63d2f4682b15f8ca9c07e674f": { - "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_c2ba6b6c20ed419fae2a6fe625261382", - "placeholder": "​", - "style": "IPY_MODEL_565bdcb1739643119edcafd4df6e8f11", - "value": " 1/1 [00:00<00:00, 14.11it/s]" - } - }, - "df007844178f4b63b67831b4d38576df": { - "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_fc911f5408814c2ab17c5c1a357dc23f", - "max": 1, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_bb7f0fbb54274fb9a654eb6ee938ba66", - "value": 1 - } - }, - "e0c76e0937db4e3d916710d7172da3f1": { - "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 - } - }, - "e17d2dc542c14f98a2a19ecefb447d38": { - "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": "" - } - }, - "e1c796fba9cf4336846d6bbd1d7bbc47": { - "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": "" - } - }, - "e2d9085a4252424082cf9238694d871b": { - "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 - } - }, - "e3026ca9693547abab2baacd5aa3dece": { - "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_841993e4585b45d9bafc4cbeddff4033", - "placeholder": "​", - "style": "IPY_MODEL_f45c83955aa84554a075a0db94916e7b", - "value": " 1/1 [00:00<00:00, 10.59it/s]" - } - }, - "e313f0433c7442efab35dc7e942d6de2": { - "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": "" - } - }, - "e483cae2d41844df99054b2ddfdbc65b": { - "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 - } - }, - "e4f7466fd5964628b32ffe8a773c4ff6": { - "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": "" - } - }, - "e567fab4446544f795be2eb0a6705f9c": { - "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 - } - }, - "e60c4734f0424daaaeec0ee34948dabb": { - "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 - } - }, - "e63ed6b6266f47ae8c0106089b1cd85e": { - "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": "" - } - }, - "e65ae480d2d04ab48c8624eb1fca45d8": { - "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_54a4a9ebf2b24542a97157643fc8760e", - "max": 1, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_9f23dc687bb54d8ca102ebd1f35b45ee", - "value": 1 - } - }, - "e7658ccda51c46a6b560a260c38f933d": { - "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 - } - }, - "e781609438004ae0ba1efb4a877065ae": { - "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 - } - }, - "e822001de9ef4cf99d593f930f41f96a": { - "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": "" - } - }, - "e85e291b0c50401abd9d7588ce1467cb": { - "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_675951a59fb441bbb8a5dc2c4b2c753e", - "placeholder": "​", - "style": "IPY_MODEL_14462288182e490fbbf8086972008a22", - "value": "Batches: 100%" - } - }, - "e8864d4baf1f45248bd2fe979507c27b": { - "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_ee76869cfde744e78063c9002420689e", - "IPY_MODEL_608c3c6002d248d0a4e8463c558f3464", - "IPY_MODEL_6eeafcdcdf894b33a58e1d7c99fe3918" - ], - "layout": "IPY_MODEL_9acbd5d07b4a42bebb968e83f3500f34" - } - }, - "e8eac538b81143b6a1e3b30746a15722": { - "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": "" - } - }, - "e9c72053e0344c699abc03221d1e422a": { - "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_af46cfb222cf4d5ba1b34d2d462c8e6f", - "placeholder": "​", - "style": "IPY_MODEL_f91436bf954d4a939a615dfa6e839b15", - "value": " 1/1 [00:00<00:00, 12.31it/s]" - } - }, - "ea2992e1f7144cc29c3bfffbbf64e2ac": { - "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_c9e8420edbab45429112a7884b57306d", - "placeholder": "​", - "style": "IPY_MODEL_9f91aaa7eef54c55aa1ba46eb3baa617", - "value": " 723/723 [00:00<00:00, 19.3kB/s]" - } - }, - "ea439e2251ed467fb3a775f0c8e0c3bb": { - "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": "" - } - }, - "eb11ea5785284bf6a15cc31ad643ed88": { - "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_a529dbbfdd6b469dbfe80cee993c9a33", - "placeholder": "​", - "style": "IPY_MODEL_7e058076836e438daf5399428eabac5e", - "value": " 772/772 [00:00<00:00, 15.6kB/s]" - } - }, - "eb8e6976ca9e4a58851ec0a51107d74f": { - "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": "" - } - }, - "ebed91eca5d5439997b4aaec5a7d953e": { - "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": "" - } - }, - "ecbc440b3bd341e6b0e19f0088c58930": { - "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 - } - }, - "ed3b4899817c47d6b196558e49cc59b2": { - "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 - } - }, - "ed683929822b4084ba33e89b23936b16": { - "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_fe56b1d86ab84675b82781a1f8edd40a", - "placeholder": "​", - "style": "IPY_MODEL_bacf1704dbaf4176afbe2cbcc8e036ef", - "value": "Downloading: 100%" - } - }, - "edba6fb34578451ab5e4a08ea3a5eb25": { - "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 - } - }, - "ee76869cfde744e78063c9002420689e": { - "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_76f40571571b4ddd87df3a29718b835e", - "placeholder": "​", - "style": "IPY_MODEL_04e887b2d2cd471994f65685a81a0bfc", - "value": "Batches: 100%" - } - }, - "eef6238b512249d993d1b6c9b76e3946": { - "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 - } - }, - "efc925a4b5fa4144a9435ba998584b2c": { - "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 - } - }, - "f0c8ddd71eff40df8332fcf83d31c0bf": { - "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 - } - }, - "f16710c9831d476b85c48213d05e1aea": { - "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": "" - } - }, - "f2f11b50f31b40d9abd06080b0ce9502": { - "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_d3bcb223dd7943dbb85d8c93a3ed0bc1", - "max": 1, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_b046241482c7485b9037ed039eb48649", - "value": 1 - } - }, - "f302b68764444e44aacecaaa89cdc95f": { - "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_f375507608564a12b6dd26170d659399", - "IPY_MODEL_60eb65d6a8ce4ee288a8aabea9d33094", - "IPY_MODEL_de7355b63d2f4682b15f8ca9c07e674f" - ], - "layout": "IPY_MODEL_e483cae2d41844df99054b2ddfdbc65b" - } - }, - "f36dc87a4af7481cb3c2cba23d57eb5a": { - "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": "" - } - }, - "f375507608564a12b6dd26170d659399": { - "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_7fa656358f524f93a310a8076bd48cdf", - "placeholder": "​", - "style": "IPY_MODEL_32c43233c8e64a8eb5c4badbb01420f5", - "value": "Batches: 100%" - } - }, - "f45c83955aa84554a075a0db94916e7b": { - "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": "" - } - }, - "f4b22763b32945a78822d9027ab93c5c": { - "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": "" - } - }, - "f5417b7abd5a48178fd0c0a8aefeae05": { - "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": "" - } - }, - "f8a6d02669224f5e9d8d09be5451b08b": { - "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": "" - } - }, - "f91436bf954d4a939a615dfa6e839b15": { - "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": "" - } - }, - "f92fb75d397d47ac967febf7d38efc35": { - "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": "" - } - }, - "f9b1e0c3cb304cf58a9bdce3cc03239c": { - "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 - } - }, - "f9dcdbbe20114ff78c2d980a1924bd9e": { - "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_576765482f3d4ee8851db9845c34a246", - "max": 1, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_c429d64cb3e747a6bdd33763720a10d2", - "value": 1 - } - }, - "fa230a8644bd4e7a85a3c8b888bf2d27": { - "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_3e23763ee2944110b0899fcbb805e3bd", - "max": 1, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_da2985b6824449f6982434a5a0bdbd39", - "value": 1 - } - }, - "fa46a43575ee4c52af77f226e438d896": { - "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": "" - } - }, - "fad323f7b8fb49e79c65ddb87f9f5346": { - "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 - } - }, - "fbee94f4d7674f54b75c42d33c2a0907": { - "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 - } - }, - "fc011913e8464d439a97fe75ef5f9fa1": { - "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": "" - } - }, - "fc7c6b5bf4934c0194c12b6aa4bee24e": { - "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_071a2e5641624c7ea6bf57d764fa5a90", - "IPY_MODEL_b4511a00a65f40f8879209e63cc4044c", - "IPY_MODEL_b0ae975eb94143fda0ac6c748148a7cc" - ], - "layout": "IPY_MODEL_a7dfc0089edd47678dd411093c3cf664" - } - }, - "fc84f721213f407b8831398dce1984ad": { - "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 - } - }, - "fc911f5408814c2ab17c5c1a357dc23f": { - "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 - } - }, - "fcfbbc1f44454546b9ceca5ba106b0e6": { - "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_267928e896124f6087b197b255e53360", - "IPY_MODEL_f2f11b50f31b40d9abd06080b0ce9502", - "IPY_MODEL_e9c72053e0344c699abc03221d1e422a" - ], - "layout": "IPY_MODEL_1a372fb42b29492691dc7fc04fed105b" - } - }, - "fe56b1d86ab84675b82781a1f8edd40a": { - "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 - } - }, - "ff9438afcccb4372b258d20ac5c11f49": { - "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_4d46dfc8082246568e7cc69f74baac14", - "IPY_MODEL_08cd116989124f919aa151c4535bbcba", - "IPY_MODEL_9d46ed6e9cff463b8e527773b931e935" - ], - "layout": "IPY_MODEL_5f2eedf3c8b74abca674ec0bf28f36a1" - } - }, - "ffa7713a91ff4af2bc7c4bdc3ecd7467": { - "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_c08ac5e6c7be413d9daf19ab5ecfeec3", - "IPY_MODEL_82d32df32d244290aea5f10cdc03e652", - "IPY_MODEL_365ec9a2c50d4e7385ef438bed36b5d8" - ], - "layout": "IPY_MODEL_d5d5aae1f1084c82ba5ecc9ee0b6c473" - } - } - } - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/tutorials/Tutorial5_Evaluation.py b/tutorials/Tutorial5_Evaluation.py deleted file mode 100644 index 43c4f01fae..0000000000 --- a/tutorials/Tutorial5_Evaluation.py +++ /dev/null @@ -1,472 +0,0 @@ -import logging - -# We configure how logging messages should be displayed and which log level should be used before importing Haystack. -# Example log message: -# INFO - haystack.utils.preprocessing - Converting data/tutorial1/218_Olenna_Tyrell.txt -# Default log level in basicConfig is WARNING so the explicit parameter is not necessary but can be changed easily: -logging.basicConfig(format="%(levelname)s - %(name)s - %(message)s", level=logging.WARNING) -logging.getLogger("haystack").setLevel(logging.INFO) - -import tempfile -from pathlib import Path - -from haystack.document_stores import ElasticsearchDocumentStore, InMemoryDocumentStore -from haystack.pipelines import Pipeline, ExtractiveQAPipeline, DocumentSearchPipeline -from haystack.nodes import ( - BM25Retriever, - DensePassageRetriever, - EmbeddingRetriever, - FARMReader, - PreProcessor, - TextConverter, -) -from haystack.utils import fetch_archive_from_http, launch_es -from haystack.schema import Answer, Document, EvaluationResult, Label, MultiLabel, Span - - -def tutorial5_evaluation(): - - # make sure these indices do not collide with existing ones, the indices will be wiped clean before data is inserted - doc_index = "tutorial5_docs" - label_index = "tutorial5_labels" - - ############################################### - # Code - ############################################### - launch_es() - - # Download evaluation data, which is a subset of Natural Questions development set containing 50 documents with one question per document and multiple annotated answers - doc_dir = "data/tutorial5" - s3_url = "https://s3.eu-central-1.amazonaws.com/deepset.ai-farm-qa/datasets/nq_dev_subset_v2.json.zip" - fetch_archive_from_http(url=s3_url, output_dir=doc_dir) - - # Connect to Elasticsearch - document_store = ElasticsearchDocumentStore( - host="localhost", - username="", - password="", - index=doc_index, - label_index=label_index, - embedding_field="emb", - embedding_dim=768, - excluded_meta_data=["emb"], - ) - - # Add evaluation data to Elasticsearch document store - # We first delete the custom tutorial indices to not have duplicate elements - # and also split our documents into shorter passages using the PreProcessor - preprocessor = PreProcessor( - split_by="word", - split_length=200, - split_overlap=0, - split_respect_sentence_boundary=False, - clean_empty_lines=False, - clean_whitespace=False, - ) - document_store.delete_documents(index=doc_index) - document_store.delete_documents(index=label_index) - - # The add_eval_data() method converts the given dataset in json format into Haystack document and label objects. - # Those objects are then indexed in their respective document and label index in the document store. - # The method can be used with any dataset in SQuAD format. - document_store.add_eval_data( - filename="data/tutorial5/nq_dev_subset_v2.json", - doc_index=doc_index, - label_index=label_index, - preprocessor=preprocessor, - ) - - # Initialize Retriever - - retriever = BM25Retriever(document_store=document_store) - - # Alternative: Evaluate dense retrievers (EmbeddingRetriever or DensePassageRetriever) - # The EmbeddingRetriever uses a single transformer based encoder model for query and document. - # In contrast, DensePassageRetriever uses two separate encoders for both. - - # Please make sure the "embedding_dim" parameter in the DocumentStore above matches the output dimension of your models! - # Please also take care that the PreProcessor splits your files into chunks that can be completely converted with - # the max_seq_len limitations of Transformers - # The SentenceTransformer model "sentence-transformers/multi-qa-mpnet-base-dot-v1" generally works well with the EmbeddingRetriever on any kind of English text. - # For more information and suggestions on different models check out the documentation at: https://www.sbert.net/docs/pretrained_models.html - - # from haystack.retriever import EmbeddingRetriever, DensePassageRetriever - # retriever = EmbeddingRetriever(document_store=document_store, - # embedding_model="sentence-transformers/multi-qa-mpnet-base-dot-v1") - # retriever = DensePassageRetriever(document_store=document_store, - # query_embedding_model="facebook/dpr-question_encoder-single-nq-base", - # passage_embedding_model="facebook/dpr-ctx_encoder-single-nq-base", - # use_gpu=True, - # max_seq_len_passage=256, - # embed_title=True) - # document_store.update_embeddings(retriever, index=doc_index) - - # Initialize Reader - reader = FARMReader(model_name_or_path="deepset/roberta-base-squad2", top_k=4, return_no_answer=True) - - # Define a pipeline consisting of the initialized retriever and reader - # Here we evaluate retriever and reader in an integrated (a.k.a. open domain) fashion on the full corpus of documents - # i.e. a document is considered - # correctly retrieved if it contains the gold answer string within it. The reader is evaluated based purely on the - # predicted answer string, regardless of which document this came from and the position of the extracted span. - # The generation of predictions is separated from the calculation of metrics. - # This allows you to run the computation-heavy model predictions only once and then iterate flexibly on the metrics or reports you want to generate. - - pipeline = ExtractiveQAPipeline(reader=reader, retriever=retriever) - - # The evaluation also works with any other pipeline. - # For example you could use a DocumentSearchPipeline as an alternative: - # pipeline = DocumentSearchPipeline(retriever=retriever) - - # We can load evaluation labels from the document store - # We are also opting to filter out no_answer samples - eval_labels = document_store.get_all_labels_aggregated(drop_negative_labels=True, drop_no_answers=True) - - ## Alternative: Define queries and labels directly - # eval_labels = [ - # MultiLabel( - # labels=[ - # Label( - # query="who is written in the book of life", - # answer=Answer( - # answer="every person who is destined for Heaven or the World to Come", - # offsets_in_context=[Span(374, 434)] - # ), - # document=Document( - # id='1b090aec7dbd1af6739c4c80f8995877-0', - # content_type="text", - # content='Book of Life - wikipedia Book of Life Jump to: navigation, search This article is - # about the book mentioned in Christian and Jewish religious teachings...' - # ), - # is_correct_answer=True, - # is_correct_document=True, - # origin="gold-label" - # ) - # ] - # ) - # ] - - # Similar to pipeline.run() we can execute pipeline.eval() - eval_result = pipeline.eval(labels=eval_labels, params={"Retriever": {"top_k": 5}}) - - # The EvaluationResult contains a pandas dataframe for each pipeline node. - # That's why there are two dataframes in the EvaluationResult of an ExtractiveQAPipeline. - - retriever_result = eval_result["Retriever"] - retriever_result.head() - - reader_result = eval_result["Reader"] - reader_result.head() - - # We can filter for all documents retrieved for a given query - query = "who is written in the book of life" - retriever_book_of_life = retriever_result[retriever_result["query"] == query] - - # We can also filter for all answers predicted for a given query - reader_book_of_life = reader_result[reader_result["query"] == "who is written in the book of life"] - - # Save the evaluation result so that we can reload it later - # and calculate evaluation metrics without running the pipeline again. - eval_result.save("../") - - ## Calculating Evaluation Metrics - # Load an EvaluationResult to quickly calculate standard evaluation metrics for all predictions, - # such as F1-score of each individual prediction of the Reader node or recall of the retriever. - # To learn more about the metrics, see [Evaluation Metrics](https://haystack.deepset.ai/guides/evaluation#metrics-retrieval) - - saved_eval_result = EvaluationResult.load("../") - metrics = saved_eval_result.calculate_metrics() - print(f'Retriever - Recall (single relevant document): {metrics["Retriever"]["recall_single_hit"]}') - print(f'Retriever - Recall (multiple relevant documents): {metrics["Retriever"]["recall_multi_hit"]}') - print(f'Retriever - Mean Reciprocal Rank: {metrics["Retriever"]["mrr"]}') - print(f'Retriever - Precision: {metrics["Retriever"]["precision"]}') - print(f'Retriever - Mean Average Precision: {metrics["Retriever"]["map"]}') - - print(f'Reader - F1-Score: {metrics["Reader"]["f1"]}') - print(f'Reader - Exact Match: {metrics["Reader"]["exact_match"]}') - - ## Generating an Evaluation Report - # A summary of the evaluation results can be printed to get a quick overview. - # It includes some aggregated metrics and also shows a few wrongly predicted examples. - - pipeline.print_eval_report(saved_eval_result) - - ## Advanced Evaluation Metrics - # Semantic Answer Similarity (SAS) is an advanced evaluation metric can be calculated in Haystack. - # This metric takes into account whether the meaning of a predicted answer is similar to the annotated gold answer - # rather than just doing string comparison. To this end SAS relies on pre-trained models. - # For English, we recommend "cross-encoder/stsb-roberta-large", whereas for German we recommend "deepset/gbert-large-sts". - # A good multilingual model is "sentence-transformers/paraphrase-multilingual-mpnet-base-v2". - # More info on this metric can be found in our [paper](https://arxiv.org/abs/2108.06130) - # or in our [blog post](https://www.deepset.ai/blog/semantic-answer-similarity-to-evaluate-qa). - - advanced_eval_result = pipeline.eval( - labels=eval_labels, - params={"Retriever": {"top_k": 5}}, - sas_model_name_or_path="cross-encoder/stsb-roberta-large", - ) - - metrics = advanced_eval_result.calculate_metrics() - print(metrics["Reader"]["sas"]) - - ## Isolated Evaluation Mode - # The isolated node evaluation uses labels as input to the Reader node instead of the output of the preceeding retriever node. - # Thereby, we can additionally calculate the upper bounds of the evaluation metrics of the Reader. - # Note that even with isolated evaluation enabled, integrated evaluation will still be running. - eval_result_with_upper_bounds = pipeline.eval( - labels=eval_labels, params={"Retriever": {"top_k": 5}}, add_isolated_node_eval=True - ) - pipeline.print_eval_report(eval_result_with_upper_bounds) - - # ## Advanced Label Scopes - # Answers are considered correct if the predicted answer matches the gold answer in the labels. - # Documents are considered correct if the predicted document ID matches the gold document ID in the labels. - # Sometimes, these simple definitions of "correctness" are not sufficient. - # There are cases where you want to further specify the "scope" within which an answer or a document is considered correct. - # For this reason, `EvaluationResult.calculate_metrics()` offers the parameters `answer_scope` and `document_scope`. - # - # Say you want to ensure that an answer is only considered correct if it stems from a specific context of surrounding words. - # This is especially useful if your answer is very short, like a date (for example, "2011") or a place ("Berlin"). - # Such short answer might easily appear in multiple completely different contexts. - # Some of those contexts might perfectly fit the actual question and answer it. - # Some others might not: they don't relate to the question at all but still contain the answer string. - # In that case, you might want to ensure that only answers that stem from the correct context are considered correct. - # To do that, specify `answer_scope="context"` in `calculate_metrics()`. - # - # `answer_scope` takes the following values: - # - `any` (default): Any matching answer is considered correct. - # - `context`: The answer is only considered correct if its context matches as well. It uses fuzzy matching (see `context_matching` parameters of `pipeline.eval()`). - # - `document_id`: The answer is only considered correct if its document ID matches as well. You can specify a custom document ID through the `custom_document_id_field` parameter of `pipeline.eval()`. - # - `document_id_and_context`: The answer is only considered correct if its document ID and its context match as well. - # - # In Question Answering, to enforce that the retrieved document is considered correct whenever the answer is correct, set `document_scope` to `answer` or `document_id_or_answer`. - # - # `document_scope` takes the following values: - # - `document_id`: Specifies that the document ID must match. You can specify a custom document ID through the `custom_document_id_field` parameter of `pipeline.eval()`. - # - `context`: Specifies that the content of the document must match. It uses fuzzy matching (see the `context_matching` parameters of `pipeline.eval()`). - # - `document_id_and_context`: A Boolean operation specifying that both `'document_id' AND 'context'` must match. - # - `document_id_or_context`: A Boolean operation specifying that either `'document_id' OR 'context'` must match. - # - `answer`: Specifies that the document contents must include the answer. The selected `answer_scope` is enforced. - # - `document_id_or_answer` (default): A Boolean operation specifying that either `'document_id' OR 'answer'` must match. - metrics = saved_eval_result.calculate_metrics(answer_scope="context") - print(f'Retriever - Recall (single relevant document): {metrics["Retriever"]["recall_single_hit"]}') - print(f'Retriever - Recall (multiple relevant documents): {metrics["Retriever"]["recall_multi_hit"]}') - print(f'Retriever - Mean Reciprocal Rank: {metrics["Retriever"]["mrr"]}') - print(f'Retriever - Precision: {metrics["Retriever"]["precision"]}') - print(f'Retriever - Mean Average Precision: {metrics["Retriever"]["map"]}') - - print(f'Reader - F1-Score: {metrics["Reader"]["f1"]}') - print(f'Reader - Exact Match: {metrics["Reader"]["exact_match"]}') - - document_store.get_all_documents()[0] - - # Let's try Document Retrieval on a file level (it's sufficient if the correct file identified by its name (for example, 'Book of Life') was retrieved). - eval_result_custom_doc_id = pipeline.eval( - labels=eval_labels, params={"Retriever": {"top_k": 5}}, custom_document_id_field="name" - ) - metrics = eval_result_custom_doc_id.calculate_metrics(document_scope="document_id") - print(f'Retriever - Recall (single relevant document): {metrics["Retriever"]["recall_single_hit"]}') - print(f'Retriever - Recall (multiple relevant documents): {metrics["Retriever"]["recall_multi_hit"]}') - print(f'Retriever - Mean Reciprocal Rank: {metrics["Retriever"]["mrr"]}') - print(f'Retriever - Precision: {metrics["Retriever"]["precision"]}') - print(f'Retriever - Mean Average Precision: {metrics["Retriever"]["map"]}') - - # Let's enforce the context again: - metrics = eval_result_custom_doc_id.calculate_metrics(document_scope="document_id_and_context") - print(f'Retriever - Recall (single relevant document): {metrics["Retriever"]["recall_single_hit"]}') - print(f'Retriever - Recall (multiple relevant documents): {metrics["Retriever"]["recall_multi_hit"]}') - print(f'Retriever - Mean Reciprocal Rank: {metrics["Retriever"]["mrr"]}') - print(f'Retriever - Precision: {metrics["Retriever"]["precision"]}') - print(f'Retriever - Mean Average Precision: {metrics["Retriever"]["map"]}') - - # ## Storing results in MLflow - # Storing evaluation results in CSVs is fine but not enough if you want to compare and track multiple evaluation runs. MLflow is a handy tool when it comes to tracking experiments. So we decided to use it to track all of `Pipeline.eval()` with reproducability of your experiments in mind. - - # ### Host your own MLflow or use deepset's public MLflow - # If you don't want to use deepset's public MLflow instance under https://public-mlflow.deepset.ai, you can easily host it yourself. - - # !pip install mlflow - # !mlflow server --serve-artifacts - - # ### Preprocessing the dataset - # Preprocessing the dataset works a bit differently than before. Instead of directly generating documents (and labels) out of a SQuAD file, we first save them to disk. This is necessary to experiment with different indexing pipelines. - - document_store = InMemoryDocumentStore() - - label_preprocessor = PreProcessor( - split_length=200, - split_overlap=0, - split_respect_sentence_boundary=False, - clean_empty_lines=False, - clean_whitespace=False, - ) - - # The add_eval_data() method converts the given dataset in json format into Haystack document and label objects. - # Those objects are then indexed in their respective document and label index in the document store. - # The method can be used with any dataset in SQuAD format. - # We only use it to get the evaluation set labels and the corpus files. - document_store.add_eval_data( - filename="data/tutorial5/nq_dev_subset_v2.json", - doc_index=document_store.index, - label_index=document_store.label_index, - preprocessor=label_preprocessor, - ) - - # the evaluation set to evaluate the pipelines on - evaluation_set_labels = document_store.get_all_labels_aggregated(drop_negative_labels=True, drop_no_answers=True) - - # Pipelines need files as input to be able to test different preprocessors. - # Even though this looks a bit cumbersome to write the documents back to files we gain a lot of evaluation potential and reproducibility. - docs = document_store.get_all_documents() - temp_dir = tempfile.TemporaryDirectory() - file_paths = [] - for doc in docs: - file_name = doc.id + ".txt" - file_path = Path(temp_dir.name) / file_name - file_paths.append(file_path) - with open(file_path, "w") as f: - f.write(doc.content) - file_metas = [d.meta for d in docs] - - # ### Run experiments - # In this experiment we evaluate extractive QA pipelines with two different retrievers on the evaluation set given the corpus: - # **ElasticsearchRetriever vs. EmbeddingRetriever** - - # helper function to create query and index pipeline - def create_pipelines(document_store, preprocessor, retriever, reader): - query_pipeline = Pipeline() - query_pipeline.add_node(component=retriever, inputs=["Query"], name="Retriever") - query_pipeline.add_node(component=reader, inputs=["Retriever"], name="Reader") - index_pipeline = Pipeline() - index_pipeline.add_node(component=TextConverter(), inputs=["File"], name="TextConverter") - index_pipeline.add_node(component=preprocessor, inputs=["TextConverter"], name="Preprocessor") - index_pipeline.add_node(component=retriever, inputs=["Preprocessor"], name="Retriever") - index_pipeline.add_node(component=document_store, inputs=["Retriever"], name="DocumentStore") - return query_pipeline, index_pipeline - - # Name of the experiment in MLflow - EXPERIMENT_NAME = "haystack-tutorial-5" - - # #### Run using BM25Retriever - - document_store = ElasticsearchDocumentStore(index="sparse_index", recreate_index=True) - preprocessor = PreProcessor( - split_length=200, - split_overlap=0, - split_respect_sentence_boundary=False, - clean_empty_lines=False, - clean_whitespace=False, - ) - es_retriever = BM25Retriever(document_store=document_store) - reader = FARMReader("deepset/roberta-base-squad2", top_k=3, return_no_answer=True, batch_size=8) - query_pipeline, index_pipeline = create_pipelines(document_store, preprocessor, es_retriever, reader) - - sparse_eval_result = Pipeline.execute_eval_run( - index_pipeline=index_pipeline, - query_pipeline=query_pipeline, - evaluation_set_labels=evaluation_set_labels, - corpus_file_paths=file_paths, - corpus_file_metas=file_metas, - experiment_name=EXPERIMENT_NAME, - experiment_run_name="sparse", - corpus_meta={"name": "nq_dev_subset_v2.json"}, - evaluation_set_meta={"name": "nq_dev_subset_v2.json"}, - pipeline_meta={"name": "sparse-pipeline"}, - add_isolated_node_eval=True, - experiment_tracking_tool="mlflow", - experiment_tracking_uri="https://public-mlflow.deepset.ai", - reuse_index=True, - ) - - # #### Run using EmbeddingRetriever - - document_store = ElasticsearchDocumentStore(index="dense_index", recreate_index=True) - emb_retriever = EmbeddingRetriever( - document_store=document_store, - model_format="sentence_transformers", - embedding_model="sentence-transformers/multi-qa-mpnet-base-dot-v1", - batch_size=8, - ) - query_pipeline, index_pipeline = create_pipelines(document_store, preprocessor, emb_retriever, reader) - - dense_eval_result = Pipeline.execute_eval_run( - index_pipeline=index_pipeline, - query_pipeline=query_pipeline, - evaluation_set_labels=evaluation_set_labels, - corpus_file_paths=file_paths, - corpus_file_metas=file_metas, - experiment_name=EXPERIMENT_NAME, - experiment_run_name="embedding", - corpus_meta={"name": "nq_dev_subset_v2.json"}, - evaluation_set_meta={"name": "nq_dev_subset_v2.json"}, - pipeline_meta={"name": "embedding-pipeline"}, - add_isolated_node_eval=True, - experiment_tracking_tool="mlflow", - experiment_tracking_uri="https://public-mlflow.deepset.ai", - reuse_index=True, - answer_scope="context", - ) - - # You can now open MLflow (e.g. https://public-mlflow.deepset.ai/ if you used the public one hosted by deepset) and look for the haystack-eval-experiment experiment. - # Try out mlflow's compare function and have fun... - # - # Note that on our public mlflow instance we are not able to log artifacts like the evaluation results or the piplines.yaml file. - - ## Evaluation of Individual Components - # Sometimes you might want to evaluate individual components, - # for example, if you don't have a pipeline but only a retriever or a reader with a model that you trained yourself. - - # Evaluate Retriever on its own - # Here we evaluate only the retriever, based on whether the gold_label document is retrieved. - # Note that no_answer samples are omitted when evaluation is performed with this method - retriever_eval_results = retriever.eval(top_k=5, label_index=label_index, doc_index=doc_index) - - ## Retriever Recall is the proportion of questions for which the correct document containing the answer is - ## among the correct documents - print("Retriever Recall:", retriever_eval_results["recall"]) - ## Retriever Mean Avg Precision rewards retrievers that give relevant documents a higher rank - print("Retriever Mean Avg Precision:", retriever_eval_results["map"]) - - # Just as a sanity check, we can compare the recall from `retriever.eval()` with the multi hit recall from `pipeline.eval(add_isolated_node_eval=True)`. - # These two recall metrics are only comparable since we chose to filter out no_answer samples when generating eval_labels and setting document_scope to `"document_id"`. - # Per default `calculate_metrics()` has document_scope set to `"document_id_or_answer"` which interprets documents as relevant if they either match the gold document ID or contain the answer. - metrics = eval_result_with_upper_bounds.calculate_metrics(document_scope="document_id") - print(metrics["Retriever"]["recall_multi_hit"]) - - # Evaluate Reader on its own - # Here we evaluate only the reader in a closed domain fashion i.e. the reader is given one query - # and its corresponding relevant document and metrics are calculated on whether the right position in this text is selected by - # the model as the answer span (i.e. SQuAD style) - reader_eval_results = reader.eval(document_store=document_store, label_index=label_index, doc_index=doc_index) - top_n = reader_eval_results["top_n"] - # Evaluation of Reader can also be done directly on a SQuAD-formatted file without passing the data to Elasticsearch - # reader_eval_results = reader.eval_on_file("../data/nq", "nq_dev_subset_v2.json") - - # Reader Top-N-Accuracy is the proportion of predicted answers that match with their corresponding correct answer including no_answers - print(f"Reader Top-{top_n}-Accuracy:", reader_eval_results["top_n_accuracy"]) - # Reader Top-1-Exact Match is the proportion of questions where the first predicted answer is exactly the same as the correct answer including no_answers - print("Reader Top-1-Exact Match:", reader_eval_results["EM"]) - # Reader Top-1-F1-Score is the average overlap between the first predicted answers and the correct answers including no_answers - print("Reader Top-1-F1-Score:", reader_eval_results["f1"]) - # Reader Top-N-Accuracy is the proportion of predicted answers that match with their corresponding correct answer excluding no_answers - print(f"Reader Top-{top_n}-Accuracy (without no_answers):", reader_eval_results["top_n_accuracy_text_answer"]) - # Reader Top-N-Exact Match is the proportion of questions where the predicted answer within the first n results is exactly the same as the correct answer excluding no_answers (no_answers are always present within top n). - print(f"Reader Top-{top_n}-Exact Match (without no_answers):", reader_eval_results["top_n_EM_text_answer"]) - # Reader Top-N-F1-Score is the average overlap between the top n predicted answers and the correct answers excluding no_answers (no_answers are always present within top n). - print(f"Reader Top-{top_n}-F1-Score (without no_answers):", reader_eval_results["top_n_f1_text_answer"]) - - # Just as a sanity check, we can compare the top-n exact_match and f1 metrics from `reader.eval()` with the exact_match and f1 from `pipeline.eval(add_isolated_node_eval=True)`. - # These two approaches return the same values because pipeline.eval() calculates top-n metrics per default. - # Small discrepancies might occur due to string normalization in pipeline.eval()'s answer-to-label comparison. - # reader.eval() does not use string normalization. - metrics = eval_result_with_upper_bounds.calculate_metrics(eval_mode="isolated") - print(metrics["Reader"]["exact_match"]) - print(metrics["Reader"]["f1"]) - - -if __name__ == "__main__": - tutorial5_evaluation() - -# This Haystack script was made with love by deepset in Berlin, Germany -# Haystack: https://github.com/deepset-ai/haystack -# deepset: https://deepset.ai/ diff --git a/tutorials/Tutorial6_Better_Retrieval_via_Embedding_Retrieval.ipynb b/tutorials/Tutorial6_Better_Retrieval_via_Embedding_Retrieval.ipynb deleted file mode 100644 index 03521987ec..0000000000 --- a/tutorials/Tutorial6_Better_Retrieval_via_Embedding_Retrieval.ipynb +++ /dev/null @@ -1,450 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": { - "id": "bEH-CRbeA6NU" - }, - "source": [ - "# Better Retrieval via \"Embedding Retrieval\"\n", - "\n", - "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/deepset-ai/haystack/blob/main/tutorials/Tutorial6_Better_Retrieval_via_Embedding_Retrieval.ipynb)\n", - "\n", - "### Importance of Retrievers\n", - "\n", - "The Retriever has a huge impact on the performance of our overall search pipeline.\n", - "\n", - "\n", - "### Different types of Retrievers\n", - "#### Sparse\n", - "Family of algorithms based on counting the occurrences of words (bag-of-words) resulting in very sparse vectors with length = vocab size.\n", - "\n", - "**Examples**: BM25, TF-IDF\n", - "\n", - "**Pros**: Simple, fast, well explainable\n", - "\n", - "**Cons**: Relies on exact keyword matches between query and text\n", - " \n", - "\n", - "#### Dense\n", - "These retrievers use neural network models to create \"dense\" embedding vectors. Within this family, there are two different approaches:\n", - "\n", - "a) Single encoder: Use a **single model** to embed both the query and the passage.\n", - "b) Dual-encoder: Use **two models**, one to embed the query and one to embed the passage.\n", - "\n", - "**Examples**: REALM, DPR, Sentence-Transformers\n", - "\n", - "**Pros**: Captures semantic similarity instead of \"word matches\" (for example, synonyms, related topics).\n", - "\n", - "**Cons**: Computationally more heavy to use, initial training of the model (though this is less of an issue nowadays as many pre-trained models are available and most of the time, it's not needed to train the model).\n", - "\n", - "\n", - "### Embedding Retrieval\n", - "\n", - "In this Tutorial, we use an `EmbeddingRetriever` with [Sentence Transformers](https://www.sbert.net/index.html) models.\n", - "\n", - "These models are trained to embed similar sentences close to each other in a shared embedding space.\n", - "\n", - "Some models have been fine-tuned on massive Information Retrieval data and can be used to retrieve documents based on a short query (for example, `multi-qa-mpnet-base-dot-v1`). There are others that are more suited to semantic similarity tasks where you are trying to find the most similar documents to a given document (for example, `all-mpnet-base-v2`). There are even models that are multilingual (for example, `paraphrase-multilingual-mpnet-base-v2`). For a good overview of different models with their evaluation metrics, see the [Pretrained Models](https://www.sbert.net/docs/pretrained_models.html#) in the Sentence Transformers documentation.\n", - "\n", - "*Use this* [link](https://colab.research.google.com/github/deepset-ai/haystack/blob/main/tutorials/Tutorial6_Better_Retrieval_via_Embedding_Retrieval.ipynb) *to open the notebook in Google Colab.*\n" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "3K27Y5FbA6NV" - }, - "source": [ - "### Prepare the Environment\n", - "\n", - "#### Colab: Enable the GPU Runtime\n", - "Make sure you enable the GPU runtime to experience decent speed in this tutorial.\n", - "**Runtime -> Change Runtime type -> Hardware accelerator -> GPU**\n", - "\n", - "" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "JlZgP8q1A6NW" - }, - "outputs": [], - "source": [ - "# Make sure you have a GPU running\n", - "!nvidia-smi" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "NM36kbRFA6Nc" - }, - "outputs": [], - "source": [ - "# Install the latest release of Haystack in your own environment\n", - "#! pip install farm-haystack\n", - "\n", - "# Install the latest main of Haystack\n", - "!pip install --upgrade pip\n", - "!pip install git+https://github.com/deepset-ai/haystack.git#egg=farm-haystack[colab,faiss]" - ] - }, - { - "cell_type": "markdown", - "source": [ - "## Logging\n", - "\n", - "We configure how logging messages should be displayed and which log level should be used before importing Haystack.\n", - "Example log message:\n", - "INFO - haystack.utils.preprocessing - Converting data/tutorial1/218_Olenna_Tyrell.txt\n", - "Default log level in basicConfig is WARNING so the explicit parameter is not necessary but can be changed easily:" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - }, - "id": "GbM2ml-ozqLX" - } - }, - { - "cell_type": "code", - "execution_count": null, - "outputs": [], - "source": [ - "import logging\n", - "\n", - "logging.basicConfig(format=\"%(levelname)s - %(name)s - %(message)s\", level=logging.WARNING)\n", - "logging.getLogger(\"haystack\").setLevel(logging.INFO)" - ], - "metadata": { - "pycharm": { - "name": "#%%\n" - }, - "id": "kQWEUUMnzqLX" - } - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "xmRuhTQ7A6Nh" - }, - "outputs": [], - "source": [ - "from haystack.utils import clean_wiki_text, convert_files_to_docs, fetch_archive_from_http, print_answers\n", - "from haystack.nodes import FARMReader, TransformersReader" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "q3dSo7ZtA6Nl" - }, - "source": [ - "### Document Store\n", - "\n", - "#### Option 1: FAISS\n", - "\n", - "FAISS is a library for efficient similarity search on a cluster of dense vectors.\n", - "The `FAISSDocumentStore` uses a SQL(SQLite in-memory be default) database under-the-hood\n", - "to store the document text and other meta data. The vector embeddings of the text are\n", - "indexed on a FAISS Index that later is queried for searching answers.\n", - "The default flavour of FAISSDocumentStore is \"Flat\" but can also be set to \"HNSW\" for\n", - "faster search at the expense of some accuracy. Just set the faiss_index_factor_str argument in the constructor.\n", - "For more info on which suits your use case: https://github.com/facebookresearch/faiss/wiki/Guidelines-to-choose-an-index" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "1cYgDJmrA6Nv", - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "from haystack.document_stores import FAISSDocumentStore\n", - "\n", - "document_store = FAISSDocumentStore(faiss_index_factory_str=\"Flat\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - }, - "id": "s4HK5l0qzqLZ" - }, - "source": [ - "#### Option 2: Milvus\n", - "\n", - "Milvus is an open source database library that is also optimized for vector similarity searches like FAISS.\n", - "Like FAISS it has both a \"Flat\" and \"HNSW\" mode but it outperforms FAISS when it comes to dynamic data management.\n", - "It does require a little more setup, however, as it is run through Docker and requires the setup of some config files.\n", - "See [their docs](https://milvus.io/docs/v1.0.0/milvus_docker-cpu.md) for more details." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "pycharm": { - "name": "#%%\n" - }, - "id": "2Ur4h-E3zqLZ" - }, - "outputs": [], - "source": [ - "# Milvus cannot be run on COlab, so this cell is commented out.\n", - "# To run Milvus you need Docker (versions below 2.0.0) or a docker-compose (versions >= 2.0.0), neither of which is available on Colab.\n", - "# See Milvus' documentation for more details: https://milvus.io/docs/install_standalone-docker.md\n", - "\n", - "# !pip install git+https://github.com/deepset-ai/haystack.git#egg=farm-haystack[milvus]\n", - "\n", - "# from haystack.utils import launch_milvus\n", - "# from haystack.document_stores import MilvusDocumentStore\n", - "\n", - "# launch_milvus()\n", - "# document_store = MilvusDocumentStore()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "06LatTJBA6N0", - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "### Cleaning & indexing documents\n", - "\n", - "Similarly to the previous tutorials, we download, convert and index some Game of Thrones articles to our DocumentStore" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "iqKnu6wxA6N1", - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "# Let's first get some files that we want to use\n", - "doc_dir = \"data/tutorial6\"\n", - "s3_url = \"https://s3.eu-central-1.amazonaws.com/deepset.ai-farm-qa/datasets/documents/wiki_gameofthrones_txt6.zip\"\n", - "fetch_archive_from_http(url=s3_url, output_dir=doc_dir)\n", - "\n", - "# Convert files to dicts\n", - "docs = convert_files_to_docs(dir_path=doc_dir, clean_func=clean_wiki_text, split_paragraphs=True)\n", - "\n", - "# Now, let's write the dicts containing documents to our DB.\n", - "document_store.write_documents(docs)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "wgjedxx_A6N6" - }, - "source": [ - "### Initialize Retriever, Reader & Pipeline\n", - "\n", - "#### Retriever\n", - "\n", - "**Here:** We use an `EmbeddingRetriever`.\n", - "\n", - "**Alternatives:**\n", - "\n", - "- `BM25Retriever` with custom queries (for example, boosting) and filters\n", - "- `DensePassageRetriever` which uses two encoder models, one to embed the query and one to embed the passage, and then compares the embedding for retrieval\n", - "- `TfidfRetriever` in combination with a SQL or InMemory Document store for simple prototyping and debugging" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "kFwiPP60A6N7", - "pycharm": { - "is_executing": true - } - }, - "outputs": [], - "source": [ - "from haystack.nodes import EmbeddingRetriever\n", - "\n", - "retriever = EmbeddingRetriever(\n", - " document_store=document_store,\n", - " embedding_model=\"sentence-transformers/multi-qa-mpnet-base-dot-v1\",\n", - " model_format=\"sentence_transformers\",\n", - ")\n", - "# Important:\n", - "# Now that we initialized the Retriever, we need to call update_embeddings() to iterate over all\n", - "# previously indexed documents and update their embedding representation.\n", - "# While this can be a time consuming operation (depending on the corpus size), it only needs to be done once.\n", - "# At query time, we only need to embed the query and compare it to the existing document embeddings, which is very fast.\n", - "document_store.update_embeddings(retriever)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "rnVR28OXA6OA" - }, - "source": [ - "#### Reader\n", - "\n", - "Similar to previous Tutorials we now initalize our reader.\n", - "\n", - "Here we use a FARMReader with the *deepset/roberta-base-squad2* model (see: https://huggingface.co/deepset/roberta-base-squad2)\n", - "\n", - "\n", - "\n", - "##### FARMReader" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "fyIuWVwhA6OB" - }, - "outputs": [], - "source": [ - "# Load a local model or any of the QA models on\n", - "# Hugging Face's model hub (https://huggingface.co/models)\n", - "\n", - "reader = FARMReader(model_name_or_path=\"deepset/roberta-base-squad2\", use_gpu=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "unhLD18yA6OF" - }, - "source": [ - "### Pipeline\n", - "\n", - "With a Haystack `Pipeline` you can stick together your building blocks to a search pipeline.\n", - "Under the hood, `Pipelines` are Directed Acyclic Graphs (DAGs) that you can easily customize for your own use cases.\n", - "To speed things up, Haystack also comes with a few predefined Pipelines. One of them is the `ExtractiveQAPipeline` that combines a retriever and a reader to answer our questions.\n", - "You can learn more about `Pipelines` in the [docs](https://haystack.deepset.ai/docs/latest/pipelinesmd)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "TssPQyzWA6OG" - }, - "outputs": [], - "source": [ - "from haystack.pipelines import ExtractiveQAPipeline\n", - "\n", - "pipe = ExtractiveQAPipeline(reader, retriever)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "bXlBBxKXA6OL" - }, - "source": [ - "## Voilà! Ask a question!" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "Zi97Hif2A6OM" - }, - "outputs": [], - "source": [ - "# You can configure how many candidates the reader and retriever shall return\n", - "# The higher top_k for retriever, the better (but also the slower) your answers.\n", - "prediction = pipe.run(\n", - " query=\"Who created the Dothraki vocabulary?\", params={\"Retriever\": {\"top_k\": 10}, \"Reader\": {\"top_k\": 5}}\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "pI0wrHylzqLa" - }, - "outputs": [], - "source": [ - "print_answers(prediction, details=\"minimum\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false, - "id": "kXE84-2_zqLa" - }, - "source": [ - "## About us\n", - "\n", - "This [Haystack](https://github.com/deepset-ai/haystack/) notebook was made with love by [deepset](https://deepset.ai/) in Berlin, Germany\n", - "\n", - "We bring NLP to the industry via open source!\n", - " \n", - "Our focus: Industry specific language models & large scale QA systems. \n", - " \n", - "Some of our other work: \n", - "- [German BERT](https://deepset.ai/german-bert)\n", - "- [GermanQuAD and GermanDPR](https://deepset.ai/germanquad)\n", - "- [FARM](https://github.com/deepset-ai/FARM)\n", - "\n", - "Get in touch:\n", - "[Twitter](https://twitter.com/deepset_ai) | [LinkedIn](https://www.linkedin.com/company/deepset-ai/) | [Slack](https://haystack.deepset.ai/community/join) | [GitHub Discussions](https://github.com/deepset-ai/haystack/discussions) | [Website](https://deepset.ai)\n", - "\n", - "By the way: [we're hiring!](https://www.deepset.ai/jobs)" - ] - } - ], - "metadata": { - "accelerator": "GPU", - "colab": { - "collapsed_sections": [], - "name": "Tutorial6_Better_Retrieval_via_Embedding_Retrieval.ipynb", - "provenance": [] - }, - "kernelspec": { - "display_name": "Python 3", - "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.6.9" - }, - "gpuClass": "standard" - }, - "nbformat": 4, - "nbformat_minor": 0 -} \ No newline at end of file diff --git a/tutorials/Tutorial6_Better_Retrieval_via_Embedding_Retrieval.py b/tutorials/Tutorial6_Better_Retrieval_via_Embedding_Retrieval.py deleted file mode 100644 index 605205cffa..0000000000 --- a/tutorials/Tutorial6_Better_Retrieval_via_Embedding_Retrieval.py +++ /dev/null @@ -1,88 +0,0 @@ -import logging - -# We configure how logging messages should be displayed and which log level should be used before importing Haystack. -# Example log message: -# INFO - haystack.utils.preprocessing - Converting data/tutorial1/218_Olenna_Tyrell.txt -# Default log level in basicConfig is WARNING so the explicit parameter is not necessary but can be changed easily: -logging.basicConfig(format="%(levelname)s - %(name)s - %(message)s", level=logging.WARNING) -logging.getLogger("haystack").setLevel(logging.INFO) - -from haystack.document_stores import FAISSDocumentStore, MilvusDocumentStore -from haystack.utils import clean_wiki_text, print_answers, launch_milvus, convert_files_to_docs, fetch_archive_from_http -from haystack.nodes import FARMReader, EmbeddingRetriever - - -def tutorial6_better_retrieval_via_embedding_retrieval(): - # OPTION 1: FAISS is a library for efficient similarity search on a cluster of dense vectors. - # The FAISSDocumentStore uses a SQL(SQLite in-memory be default) document store under-the-hood - # to store the document text and other meta data. The vector embeddings of the text are - # indexed on a FAISS Index that later is queried for searching answers. - # The default flavour of FAISSDocumentStore is "Flat" but can also be set to "HNSW" for - # faster search at the expense of some accuracy. Just set the faiss_index_factor_str argument in the constructor. - # For more info on which suits your use case: https://github.com/facebookresearch/faiss/wiki/Guidelines-to-choose-an-index - - # Do not forget to install its dependencies with `pip install farm-haystack[faiss]` - document_store = FAISSDocumentStore(faiss_index_factory_str="Flat") - - # OPTION2: Milvus is an open source database library that is also optimized for vector similarity searches like FAISS. - # Like FAISS it has both a "Flat" and "HNSW" mode but it outperforms FAISS when it comes to dynamic data management. - # It does require a little more setup, however, as it is run through Docker and requires the setup of some config files. - # See https://milvus.io/docs/v1.0.0/milvus_docker-cpu.md - - # Do not forget to install its dependencies with `pip install farm-haystack[milvus]` - # launch_milvus() - # document_store = MilvusDocumentStore() - - # ## Preprocessing of documents - # Let's first get some documents that we want to query - doc_dir = "data/tutorial6" - s3_url = "https://s3.eu-central-1.amazonaws.com/deepset.ai-farm-qa/datasets/documents/wiki_gameofthrones_txt6.zip" - fetch_archive_from_http(url=s3_url, output_dir=doc_dir) - - # convert files to dicts containing documents that can be indexed to our datastore - docs = convert_files_to_docs(dir_path=doc_dir, clean_func=clean_wiki_text, split_paragraphs=True) - - # Now, let's write the docs to our DB. - document_store.write_documents(docs) - - ### Retriever - retriever = EmbeddingRetriever( - document_store=document_store, - embedding_model="sentence-transformers/multi-qa-mpnet-base-dot-v1", - model_format="sentence_transformers", - ) - - # Important: - # Now that we initialized the Retriever, we need to call update_embeddings() to iterate over all - # previously indexed documents and update their embedding representation. - # While this can be a time consuming operation (depending on the corpus size), it only needs to be done once. - # At query time, we only need to embed the query and compare it to the existing document embeddings, which is very fast. - document_store.update_embeddings(retriever) - - ### Reader - # Load a local model or any of the QA models on - # Hugging Face's model hub (https://huggingface.co/models) - reader = FARMReader(model_name_or_path="deepset/roberta-base-squad2", use_gpu=True) - - ### Pipeline - from haystack.pipelines import ExtractiveQAPipeline - - pipe = ExtractiveQAPipeline(reader, retriever) - - ## Voilà! Ask a question! - prediction = pipe.run( - query="Who is the father of Arya Stark?", params={"Retriever": {"top_k": 10}, "Reader": {"top_k": 5}} - ) - - # prediction = pipe.run(query="Who created the Dothraki vocabulary?", params={"Reader": {"top_k": 5}}) - # prediction = pipe.run(query="Who is the sister of Sansa?", params={"Reader": {"top_k": 5}}) - - print_answers(prediction, details="minimum") - - -if __name__ == "__main__": - tutorial6_better_retrieval_via_embedding_retrieval() - -# This Haystack script was made with love by deepset in Berlin, Germany -# Haystack: https://github.com/deepset-ai/haystack -# deepset: https://deepset.ai/ diff --git a/tutorials/Tutorial7_RAG_Generator.ipynb b/tutorials/Tutorial7_RAG_Generator.ipynb deleted file mode 100644 index 0931ae6eb3..0000000000 --- a/tutorials/Tutorial7_RAG_Generator.ipynb +++ /dev/null @@ -1,389 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": { - "collapsed": false - }, - "source": [ - "# Generative QA with \"Retrieval-Augmented Generation\"\n", - "\n", - "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/deepset-ai/haystack/blob/main/tutorials/Tutorial7_RAG_Generator.ipynb)\n", - "\n", - "While extractive QA highlights the span of text that answers a query,\n", - "generative QA can return a novel text answer that it has composed.\n", - "In this tutorial, you will learn how to set up a generative system using the\n", - "[RAG model](https://arxiv.org/abs/2005.11401) which conditions the\n", - "answer generator on a set of retrieved documents." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false - }, - "source": [ - "### Prepare environment\n", - "\n", - "#### Colab: Enable the GPU runtime\n", - "Make sure you enable the GPU runtime to experience decent speed in this tutorial.\n", - "**Runtime -> Change Runtime type -> Hardware accelerator -> GPU**\n", - "\n", - "" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "# Make sure you have a GPU running\n", - "!nvidia-smi" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false - }, - "source": [ - "Here are the packages and imports that we'll need:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "# Install the latest release of Haystack in your own environment\n", - "#! pip install farm-haystack\n", - "\n", - "# Install the latest main of Haystack\n", - "!pip install --upgrade pip\n", - "!pip install git+https://github.com/deepset-ai/haystack.git#egg=farm-haystack[colab,faiss]" - ] - }, - { - "cell_type": "markdown", - "source": [ - "## Logging\n", - "\n", - "We configure how logging messages should be displayed and which log level should be used before importing Haystack.\n", - "Example log message:\n", - "INFO - haystack.utils.preprocessing - Converting data/tutorial1/218_Olenna_Tyrell.txt\n", - "Default log level in basicConfig is WARNING so the explicit parameter is not necessary but can be changed easily:" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - } - }, - { - "cell_type": "code", - "execution_count": null, - "outputs": [], - "source": [ - "import logging\n", - "\n", - "logging.basicConfig(format=\"%(levelname)s - %(name)s - %(message)s\", level=logging.WARNING)\n", - "logging.getLogger(\"haystack\").setLevel(logging.INFO)" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "from typing import List\n", - "import requests\n", - "import pandas as pd\n", - "from haystack import Document\n", - "from haystack.document_stores import FAISSDocumentStore\n", - "from haystack.nodes import RAGenerator, DensePassageRetriever\n", - "from haystack.utils import fetch_archive_from_http" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false - }, - "source": [ - "Let's download a csv containing some sample text and preprocess the data.\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "# Download sample\n", - "doc_dir = \"data/tutorial7/\"\n", - "s3_url = \"https://s3.eu-central-1.amazonaws.com/deepset.ai-farm-qa/datasets/small_generator_dataset.csv.zip\"\n", - "fetch_archive_from_http(url=s3_url, output_dir=doc_dir)\n", - "\n", - "# Create dataframe with columns \"title\" and \"text\"\n", - "df = pd.read_csv(f\"{doc_dir}/small_generator_dataset.csv\", sep=\",\")\n", - "# Minimal cleaning\n", - "df.fillna(value=\"\", inplace=True)\n", - "\n", - "print(df.head())" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false - }, - "source": [ - "We can cast our data into Haystack Document objects.\n", - "Alternatively, we can also just use dictionaries with \"text\" and \"meta\" fields" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "# Use data to initialize Document objects\n", - "titles = list(df[\"title\"].values)\n", - "texts = list(df[\"text\"].values)\n", - "documents: List[Document] = []\n", - "for title, text in zip(titles, texts):\n", - " documents.append(Document(content=text, meta={\"name\": title or \"\"}))" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false - }, - "source": [ - "Here we initialize the FAISSDocumentStore, DensePassageRetriever and RAGenerator.\n", - "FAISS is chosen here since it is optimized vector storage." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "# Initialize FAISS document store.\n", - "# Set `return_embedding` to `True`, so generator doesn't have to perform re-embedding\n", - "document_store = FAISSDocumentStore(faiss_index_factory_str=\"Flat\", return_embedding=True)\n", - "\n", - "# Initialize DPR Retriever to encode documents, encode question and query documents\n", - "retriever = DensePassageRetriever(\n", - " document_store=document_store,\n", - " query_embedding_model=\"facebook/dpr-question_encoder-single-nq-base\",\n", - " passage_embedding_model=\"facebook/dpr-ctx_encoder-single-nq-base\",\n", - " use_gpu=True,\n", - " embed_title=True,\n", - ")\n", - "\n", - "# Initialize RAG Generator\n", - "generator = RAGenerator(\n", - " model_name_or_path=\"facebook/rag-token-nq\",\n", - " use_gpu=True,\n", - " top_k=1,\n", - " max_length=200,\n", - " min_length=2,\n", - " embed_title=True,\n", - " num_beams=2,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false - }, - "source": [ - "We write documents to the DocumentStore, first by deleting any remaining documents then calling `write_documents()`.\n", - "The `update_embeddings()` method uses the retriever to create an embedding for each document.\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "# Delete existing documents in documents store\n", - "document_store.delete_documents()\n", - "\n", - "# Write documents to document store\n", - "document_store.write_documents(documents)\n", - "\n", - "# Add documents embeddings to index\n", - "document_store.update_embeddings(retriever=retriever)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false - }, - "source": [ - "Here are our questions:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "QUESTIONS = [\n", - " \"who got the first nobel prize in physics\",\n", - " \"when is the next deadpool movie being released\",\n", - " \"which mode is used for short wave broadcast service\",\n", - " \"who is the owner of reading football club\",\n", - " \"when is the next scandal episode coming out\",\n", - " \"when is the last time the philadelphia won the superbowl\",\n", - " \"what is the most current adobe flash player version\",\n", - " \"how many episodes are there in dragon ball z\",\n", - " \"what is the first step in the evolution of the eye\",\n", - " \"where is gall bladder situated in human body\",\n", - " \"what is the main mineral in lithium batteries\",\n", - " \"who is the president of usa right now\",\n", - " \"where do the greasers live in the outsiders\",\n", - " \"panda is a national animal of which country\",\n", - " \"what is the name of manchester united stadium\",\n", - "]" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false - }, - "source": [ - "Now let's run our system!\n", - "The retriever will pick out a small subset of documents that it finds relevant.\n", - "These are used to condition the generator as it generates the answer.\n", - "What it should return then are novel text spans that form and answer to your question!" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "# Or alternatively use the Pipeline class\n", - "from haystack.pipelines import GenerativeQAPipeline\n", - "from haystack.utils import print_answers\n", - "\n", - "pipe = GenerativeQAPipeline(generator=generator, retriever=retriever)\n", - "for question in QUESTIONS:\n", - " res = pipe.run(query=question, params={\"Generator\": {\"top_k\": 1}, \"Retriever\": {\"top_k\": 5}})\n", - " print_answers(res, details=\"minimum\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false - }, - "source": [ - "## About us\n", - "\n", - "This [Haystack](https://github.com/deepset-ai/haystack/) notebook was made with love by [deepset](https://deepset.ai/) in Berlin, Germany\n", - "\n", - "We bring NLP to the industry via open source! \n", - "Our focus: Industry specific language models & large scale QA systems. \n", - " \n", - "Some of our other work: \n", - "- [German BERT](https://deepset.ai/german-bert)\n", - "- [GermanQuAD and GermanDPR](https://deepset.ai/germanquad)\n", - "- [FARM](https://github.com/deepset-ai/FARM)\n", - "\n", - "Get in touch:\n", - "[Twitter](https://twitter.com/deepset_ai) | [LinkedIn](https://www.linkedin.com/company/deepset-ai/) | [Slack](https://haystack.deepset.ai/community/join) | [GitHub Discussions](https://github.com/deepset-ai/haystack/discussions) | [Website](https://deepset.ai)\n", - "\n", - "By the way: [we're hiring!](https://www.deepset.ai/jobs)" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 2 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.6" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} \ No newline at end of file diff --git a/tutorials/Tutorial7_RAG_Generator.py b/tutorials/Tutorial7_RAG_Generator.py deleted file mode 100644 index a841371f62..0000000000 --- a/tutorials/Tutorial7_RAG_Generator.py +++ /dev/null @@ -1,120 +0,0 @@ -import logging - -# We configure how logging messages should be displayed and which log level should be used before importing Haystack. -# Example log message: -# INFO - haystack.utils.preprocessing - Converting data/tutorial1/218_Olenna_Tyrell.txt -# Default log level in basicConfig is WARNING so the explicit parameter is not necessary but can be changed easily: -logging.basicConfig(format="%(levelname)s - %(name)s - %(message)s", level=logging.WARNING) -logging.getLogger("haystack").setLevel(logging.INFO) - -from typing import List -import requests -import pandas as pd -from haystack import Document -from haystack.document_stores import FAISSDocumentStore -from haystack.nodes import RAGenerator, DensePassageRetriever -from haystack.utils import print_answers, fetch_archive_from_http - - -def tutorial7_rag_generator(): - # Add documents from which you want generate answers - # Download a csv containing some sample documents data - # Here some sample documents data - doc_dir = "data/tutorial7/" - s3_url = "https://s3.eu-central-1.amazonaws.com/deepset.ai-farm-qa/datasets/small_generator_dataset.csv.zip" - fetch_archive_from_http(url=s3_url, output_dir=doc_dir) - - # Get dataframe with columns "title", and "text" - df = pd.read_csv(f"{doc_dir}/small_generator_dataset.csv", sep=",") - # Minimal cleaning - df.fillna(value="", inplace=True) - - print(df.head()) - - titles = list(df["title"].values) - texts = list(df["text"].values) - - # Create to haystack document format - documents: List[Document] = [] - for title, text in zip(titles, texts): - documents.append(Document(content=text, meta={"name": title or ""})) - - # Initialize FAISS document store to documents and corresponding index for embeddings - # Set `return_embedding` to `True`, so generator doesn't have to perform re-embedding - # Don't forget to install FAISS dependencies with `pip install farm-haystack[faiss]` - document_store = FAISSDocumentStore(faiss_index_factory_str="Flat", return_embedding=True) - - # Initialize DPR Retriever to encode documents, encode question and query documents - retriever = DensePassageRetriever( - document_store=document_store, - query_embedding_model="facebook/dpr-question_encoder-single-nq-base", - passage_embedding_model="facebook/dpr-ctx_encoder-single-nq-base", - use_gpu=True, - embed_title=True, - ) - - # Initialize RAG Generator - generator = RAGenerator( - model_name_or_path="facebook/rag-token-nq", - use_gpu=True, - top_k=1, - max_length=200, - min_length=2, - embed_title=True, - num_beams=2, - ) - - # Delete existing documents in documents store - document_store.delete_documents() - # Write documents to document store - document_store.write_documents(documents) - # Add documents embeddings to index - document_store.update_embeddings(retriever=retriever) - - # Now ask your questions - # We have some sample questions - QUESTIONS = [ - "who got the first nobel prize in physics", - "when is the next deadpool movie being released", - "which mode is used for short wave broadcast service", - "who is the owner of reading football club", - "when is the next scandal episode coming out", - "when is the last time the philadelphia won the superbowl", - "what is the most current adobe flash player version", - "how many episodes are there in dragon ball z", - "what is the first step in the evolution of the eye", - "where is gall bladder situated in human body", - "what is the main mineral in lithium batteries", - "who is the president of usa right now", - "where do the greasers live in the outsiders", - "panda is a national animal of which country", - "what is the name of manchester united stadium", - ] - - # Now generate answer for question - for question in QUESTIONS: - # Retrieve related documents from retriever - retriever_results = retriever.retrieve(query=question) - - # Now generate answer from question and retrieved documents - predicted_result = generator.predict(query=question, documents=retriever_results, top_k=1) - - # Print you answer - answers = predicted_result["answers"] - print(f" -> Generated answer is '{answers[0].answer}' for the question = '{question}'") - - # Or alternatively use the Pipeline class - from haystack.pipelines import GenerativeQAPipeline - - pipe = GenerativeQAPipeline(generator=generator, retriever=retriever) - for question in QUESTIONS: - res = pipe.run(query=question, params={"Generator": {"top_k": 1}, "Retriever": {"top_k": 5}}) - print_answers(res, details="minimum") - - -if __name__ == "__main__": - tutorial7_rag_generator() - -# This Haystack script was made with love by deepset in Berlin, Germany -# Haystack: https://github.com/deepset-ai/haystack -# deepset: https://deepset.ai/ diff --git a/tutorials/Tutorial8_Preprocessing.ipynb b/tutorials/Tutorial8_Preprocessing.ipynb deleted file mode 100644 index 5056df911b..0000000000 --- a/tutorials/Tutorial8_Preprocessing.ipynb +++ /dev/null @@ -1,550 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": { - "collapsed": false - }, - "source": [ - "# Preprocessing\n", - "\n", - "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/deepset-ai/haystack/blob/main/tutorials/Tutorial8_Preprocessing.ipynb)\n", - "\n", - "Haystack includes a suite of tools to extract text from different file types, normalize white space\n", - "and split text into smaller pieces to optimize retrieval.\n", - "These data preprocessing steps can have a big impact on the systems performance and effective handling of data is key to getting the most out of Haystack." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "Ultimately, Haystack expects data to be provided as a list documents in the following dictionary format:\n", - "``` python\n", - "docs = [\n", - " {\n", - " 'content': DOCUMENT_TEXT_HERE,\n", - " 'meta': {'name': DOCUMENT_NAME, ...}\n", - " }, ...\n", - "]\n", - "```" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "This tutorial will show you all the tools that Haystack provides to help you cast your data into this format." - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "# Install the latest release of Haystack in your own environment\n", - "#! pip install farm-haystack\n", - "\n", - "# Install the latest main of Haystack\n", - "!pip install --upgrade pip\n", - "!pip install git+https://github.com/deepset-ai/haystack.git#egg=farm-haystack[colab,ocr]\n", - "\n", - "# For Colab/linux based machines\n", - "!wget --no-check-certificate https://dl.xpdfreader.com/xpdf-tools-linux-4.04.tar.gz\n", - "!tar -xvf xpdf-tools-linux-4.04.tar.gz && sudo cp xpdf-tools-linux-4.04/bin64/pdftotext /usr/local/bin\n", - "\n", - "# For Macos machines\n", - "# !wget --no-check-certificate https://dl.xpdfreader.com/xpdf-tools-mac-4.03.tar.gz\n", - "# !tar -xvf xpdf-tools-mac-4.03.tar.gz && sudo cp xpdf-tools-mac-4.03/bin64/pdftotext /usr/local/bin" - ] - }, - { - "cell_type": "markdown", - "source": [ - "## Logging\n", - "\n", - "We configure how logging messages should be displayed and which log level should be used before importing Haystack.\n", - "Example log message:\n", - "INFO - haystack.utils.preprocessing - Converting data/tutorial1/218_Olenna_Tyrell.txt\n", - "Default log level in basicConfig is WARNING so the explicit parameter is not necessary but can be changed easily:" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - } - }, - { - "cell_type": "code", - "execution_count": null, - "outputs": [], - "source": [ - "import logging\n", - "\n", - "logging.basicConfig(format=\"%(levelname)s - %(name)s - %(message)s\", level=logging.WARNING)\n", - "logging.getLogger(\"haystack\").setLevel(logging.INFO)" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "01/06/2021 14:49:14 - INFO - faiss - Loading faiss with AVX2 support.\n", - "01/06/2021 14:49:14 - INFO - faiss - Loading faiss.\n" - ] - } - ], - "source": [ - "# Here are the imports we need\n", - "from haystack.nodes import TextConverter, PDFToTextConverter, DocxToTextConverter, PreProcessor\n", - "from haystack.utils import convert_files_to_docs, fetch_archive_from_http" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "01/05/2021 12:02:30 - INFO - haystack.preprocessor.utils - Fetching from https://s3.eu-central-1.amazonaws.com/deepset.ai-farm-qa/datasets/documents/preprocessing_tutorial.zip to `data/preprocessing_tutorial`\n", - "100%|██████████| 595119/595119 [00:00<00:00, 5299765.39B/s]\n" - ] - }, - { - "data": { - "text/plain": [ - "True" - ] - }, - "execution_count": 29, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# This fetches some sample files to work with\n", - "\n", - "doc_dir = \"data/tutorial8\"\n", - "s3_url = \"https://s3.eu-central-1.amazonaws.com/deepset.ai-farm-qa/datasets/documents/preprocessing_tutorial8.zip\"\n", - "fetch_archive_from_http(url=s3_url, output_dir=doc_dir)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "## Converters\n", - "\n", - "Haystack's converter classes are designed to help you turn files on your computer into the documents\n", - "that can be processed by the Haystack pipeline.\n", - "There are file converters for txt, pdf, docx files as well as a converter that is powered by Apache Tika.\n", - "The parameter `valid_languages` does not convert files to the target language, but checks if the conversion worked as expected." - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "# Here are some examples of how you would use file converters\n", - "\n", - "converter = TextConverter(remove_numeric_tables=True, valid_languages=[\"en\"])\n", - "doc_txt = converter.convert(file_path=\"data/tutorial8/classics.txt\", meta=None)[0]\n", - "\n", - "converter = PDFToTextConverter(remove_numeric_tables=True, valid_languages=[\"en\"])\n", - "doc_pdf = converter.convert(file_path=\"data/tutorial8/bert.pdf\", meta=None)[0]\n", - "\n", - "converter = DocxToTextConverter(remove_numeric_tables=False, valid_languages=[\"en\"])\n", - "doc_docx = converter.convert(file_path=\"data/tutorial8/heavy_metal.docx\", meta=None)[0]" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "01/06/2021 14:51:06 - INFO - haystack.preprocessor.utils - Converting data/preprocessing_tutorial/heavy_metal.docx\n", - "01/06/2021 14:51:06 - INFO - haystack.preprocessor.utils - Converting data/preprocessing_tutorial/bert.pdf\n", - "01/06/2021 14:51:07 - INFO - haystack.preprocessor.utils - Converting data/preprocessing_tutorial/classics.txt\n" - ] - } - ], - "source": [ - "# Haystack also has a convenience function that will automatically apply the right converter to each file in a directory.\n", - "\n", - "all_docs = convert_files_to_docs(dir_path=doc_dir)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "## PreProcessor\n", - "\n", - "The PreProcessor class is designed to help you clean text and split text into sensible units.\n", - "File splitting can have a very significant impact on the system's performance and is absolutely mandatory for Dense Passage Retrieval models.\n", - "In general, we recommend you split the text from your files into small documents of around 100 words for dense retrieval methods\n", - "and no more than 10,000 words for sparse methods.\n", - "Have a look at the [Preprocessing](https://haystack.deepset.ai/docs/latest/preprocessingmd)\n", - "and [Optimization](https://haystack.deepset.ai/docs/latest/optimizationmd) pages on our website for more details." - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "n_docs_input: 1\n", - "n_docs_output: 51\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[nltk_data] Downloading package punkt to /home/branden/nltk_data...\n", - "[nltk_data] Package punkt is already up-to-date!\n" - ] - } - ], - "source": [ - "# This is a default usage of the PreProcessor.\n", - "# Here, it performs cleaning of consecutive whitespaces\n", - "# and splits a single large document into smaller documents.\n", - "# Each document is up to 100 words long and document breaks cannot fall in the middle of sentences\n", - "# Note how the single document passed into the document gets split into 5 smaller documents\n", - "\n", - "preprocessor = PreProcessor(\n", - " clean_empty_lines=True,\n", - " clean_whitespace=True,\n", - " clean_header_footer=False,\n", - " split_by=\"word\",\n", - " split_length=100,\n", - " split_respect_sentence_boundary=True,\n", - ")\n", - "docs_default = preprocessor.process([doc_txt])\n", - "print(f\"n_docs_input: 1\\nn_docs_output: {len(docs_default)}\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "## Cleaning\n", - "\n", - "- `clean_empty_lines` will normalize 3 or more consecutive empty lines to be just a two empty lines\n", - "- `clean_whitespace` will remove any whitespace at the beginning or end of each line in the text\n", - "- `clean_header_footer` will remove any long header or footer texts that are repeated on each page" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "## Splitting\n", - "By default, the PreProcessor will respect sentence boundaries, meaning that documents will not start or end\n", - "midway through a sentence.\n", - "This will help reduce the possibility of answer phrases being split between two documents.\n", - "This feature can be turned off by setting `split_respect_sentence_boundary=False`." - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "RESPECTING SENTENCE BOUNDARY\n", - "End of document: \"...cornerstone of a typical elite European education.\"\n", - "\n", - "NOT RESPECTING SENTENCE BOUNDARY\n", - "End of document: \"...on. In England, for instance, Oxford and Cambridge\"\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[nltk_data] Downloading package punkt to /home/branden/nltk_data...\n", - "[nltk_data] Package punkt is already up-to-date!\n" - ] - } - ], - "source": [ - "# Not respecting sentence boundary vs respecting sentence boundary\n", - "\n", - "preprocessor_nrsb = PreProcessor(split_respect_sentence_boundary=False)\n", - "docs_nrsb = preprocessor_nrsb.process([doc_txt])\n", - "\n", - "print(\"RESPECTING SENTENCE BOUNDARY\")\n", - "end_text = docs_default[0].content[-50:]\n", - "print('End of document: \"...' + end_text + '\"')\n", - "print()\n", - "print(\"NOT RESPECTING SENTENCE BOUNDARY\")\n", - "end_text_nrsb = docs_nrsb[0].content[-50:]\n", - "print('End of document: \"...' + end_text_nrsb + '\"')" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "A commonly used strategy to split long documents, especially in the field of Question Answering,\n", - "is the sliding window approach. If `split_length=10` and `split_overlap=3`, your documents will look like this:\n", - "\n", - "- doc1 = words[0:10]\n", - "- doc2 = words[7:17]\n", - "- doc3 = words[14:24]\n", - "- ...\n", - "\n", - "You can use this strategy by following the code below." - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Document 1: \"Classics or classical studies is the study of classical antiquity,...\"\n", - "Document 2: \"of classical antiquity, and in the Western world traditionally refers...\"\n", - "Document 3: \"world traditionally refers to the study of Classical Greek and...\"\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[nltk_data] Downloading package punkt to /home/branden/nltk_data...\n", - "[nltk_data] Package punkt is already up-to-date!\n" - ] - } - ], - "source": [ - "# Sliding window approach\n", - "\n", - "preprocessor_sliding_window = PreProcessor(split_overlap=3, split_length=10, split_respect_sentence_boundary=False)\n", - "docs_sliding_window = preprocessor_sliding_window.process([doc_txt])\n", - "\n", - "doc1 = docs_sliding_window[0].content[:200]\n", - "doc2 = docs_sliding_window[1].content[:100]\n", - "doc3 = docs_sliding_window[2].content[:100]\n", - "\n", - "print('Document 1: \"' + doc1 + '...\"')\n", - "print('Document 2: \"' + doc2 + '...\"')\n", - "print('Document 3: \"' + doc3 + '...\"')" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "## Bringing it all together" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "01/06/2021 14:56:12 - INFO - haystack.preprocessor.utils - Converting data/preprocessing_tutorial/heavy_metal.docx\n", - "01/06/2021 14:56:12 - INFO - haystack.preprocessor.utils - Converting data/preprocessing_tutorial/bert.pdf\n", - "01/06/2021 14:56:12 - INFO - haystack.preprocessor.utils - Converting data/preprocessing_tutorial/classics.txt\n", - "[nltk_data] Downloading package punkt to /home/branden/nltk_data...\n", - "[nltk_data] Package punkt is already up-to-date!\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "n_files_input: 3\n", - "n_docs_output: 150\n" - ] - } - ], - "source": [ - "all_docs = convert_files_to_docs(dir_path=doc_dir)\n", - "preprocessor = PreProcessor(\n", - " clean_empty_lines=True,\n", - " clean_whitespace=True,\n", - " clean_header_footer=False,\n", - " split_by=\"word\",\n", - " split_length=100,\n", - " split_respect_sentence_boundary=True,\n", - ")\n", - "docs = preprocessor.process(all_docs)\n", - "\n", - "print(f\"n_files_input: {len(all_docs)}\\nn_docs_output: {len(docs)}\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "## About us\n", - "\n", - "This [Haystack](https://github.com/deepset-ai/haystack/) notebook was made with love by [deepset](https://deepset.ai/) in Berlin, Germany\n", - "\n", - "We bring NLP to the industry via open source! \n", - "Our focus: Industry specific language models & large scale QA systems. \n", - " \n", - "Some of our other work: \n", - "- [German BERT](https://deepset.ai/german-bert)\n", - "- [GermanQuAD and GermanDPR](https://deepset.ai/germanquad)\n", - "- [FARM](https://github.com/deepset-ai/FARM)\n", - "\n", - "Get in touch:\n", - "[Twitter](https://twitter.com/deepset_ai) | [LinkedIn](https://www.linkedin.com/company/deepset-ai/) | [Slack](https://haystack.deepset.ai/community/join) | [GitHub Discussions](https://github.com/deepset-ai/haystack/discussions) | [Website](https://deepset.ai)\n", - "\n", - "By the way: [we're hiring!](https://www.deepset.ai/jobs)\n" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 2 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.6" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} \ No newline at end of file diff --git a/tutorials/Tutorial8_Preprocessing.py b/tutorials/Tutorial8_Preprocessing.py deleted file mode 100644 index 99392cdf45..0000000000 --- a/tutorials/Tutorial8_Preprocessing.py +++ /dev/null @@ -1,153 +0,0 @@ -""" -Preprocessing - -Haystack includes a suite of tools to extract text from different file types, normalize white space -and split text into smaller pieces to optimize retrieval. -These data preprocessing steps can have a big impact on the systems performance and effective handling of data is key to getting the most out of Haystack. - -Ultimately, Haystack pipelines expect data to be provided as a list documents in the following dictionary format: - -docs = [ - { - 'text': DOCUMENT_TEXT_HERE, - 'meta': {'name': DOCUMENT_NAME, ...} - }, ... -] - -This tutorial will show you all the tools that Haystack provides to help you cast your data into the right format. -""" - -import logging - -# We configure how logging messages should be displayed and which log level should be used before importing Haystack. -# Example log message: -# INFO - haystack.utils.preprocessing - Converting data/tutorial1/218_Olenna_Tyrell.txt -# Default log level in basicConfig is WARNING so the explicit parameter is not necessary but can be changed easily: -logging.basicConfig(format="%(levelname)s - %(name)s - %(message)s", level=logging.WARNING) -logging.getLogger("haystack").setLevel(logging.INFO) - -# Here are the imports we need -from pathlib import Path - -from haystack.nodes import TextConverter, PDFToTextConverter, DocxToTextConverter, PreProcessor -from haystack.utils import convert_files_to_docs, fetch_archive_from_http - - -def tutorial8_preprocessing(): - # This fetches some sample files to work with - - doc_dir = "data/tutorial8" - s3_url = "https://s3.eu-central-1.amazonaws.com/deepset.ai-farm-qa/datasets/documents/preprocessing_tutorial8.zip" - fetch_archive_from_http(url=s3_url, output_dir=doc_dir) - - """ - ## Converters - - Haystack's converter classes are designed to help you turn files on your computer into the documents - that can be processed by the Haystack pipeline. - There are file converters for txt, pdf, docx files as well as a converter that is powered by Apache Tika. - The parameter `valid_languages` does not convert files to the target language, but checks if the conversion worked as expected. - """ - - # Here are some examples of how you would use file converters - - converter = TextConverter(remove_numeric_tables=True, valid_languages=["en"]) - doc_txt = converter.convert(file_path=Path(f"{doc_dir}/classics.txt"), meta=None)[0] - - converter = PDFToTextConverter(remove_numeric_tables=True, valid_languages=["en"]) - doc_pdf = converter.convert(file_path=Path(f"{doc_dir}/bert.pdf"), meta=None)[0] - - converter = DocxToTextConverter(remove_numeric_tables=False, valid_languages=["en"]) - doc_docx = converter.convert(file_path=Path(f"{doc_dir}/heavy_metal.docx"), meta=None)[0] - - # Haystack also has a convenience function that will automatically apply the right converter to each file in a directory. - - all_docs = convert_files_to_docs(dir_path=doc_dir) - - """ - - ## PreProcessor - - The PreProcessor class is designed to help you clean text and split text into sensible units. - File splitting can have a very significant impact on the system's performance. - Have a look at the [Preprocessing](https://haystack.deepset.ai/docs/latest/preprocessingmd) - and [Optimization](https://haystack.deepset.ai/docs/latest/optimizationmd) pages on our website for more details. - """ - - # This is a default usage of the PreProcessor. - # Here, it performs cleaning of consecutive whitespaces - # and splits a single large document into smaller documents. - # Each document is up to 100 words long and document breaks cannot fall in the middle of sentences - # Note how the single document passed into the document gets split into 5 smaller documents - - preprocessor = PreProcessor( - clean_empty_lines=True, - clean_whitespace=True, - clean_header_footer=False, - split_by="word", - split_length=100, - split_respect_sentence_boundary=True, - ) - docs_default = preprocessor.process([doc_txt]) - print(f"\nn_docs_input: 1\nn_docs_output: {len(docs_default)}") - - """ - ## Cleaning - - - `clean_empty_lines` will normalize 3 or more consecutive empty lines to be just a two empty lines - - `clean_whitespace` will remove any whitespace at the beginning or end of each line in the text - - `clean_header_footer` will remove any long header or footer texts that are repeated on each page - - ## Splitting - By default, the PreProcessor will respect sentence boundaries, meaning that documents will not start or end - midway through a sentence. - This will help reduce the possibility of answer phrases being split between two documents. - This feature can be turned off by setting `split_respect_sentence_boundary=False`. - """ - - # Not respecting sentence boundary vs respecting sentence boundary - - preprocessor_nrsb = PreProcessor(split_respect_sentence_boundary=False) - docs_nrsb = preprocessor_nrsb.process([doc_txt]) - - print("\nRESPECTING SENTENCE BOUNDARY:") - end_text = docs_default[0].content[-50:] - print('End of document: "...' + end_text + '"') - - print("\nNOT RESPECTING SENTENCE BOUNDARY:") - end_text_nrsb = docs_nrsb[0].content[-50:] - print('End of document: "...' + end_text_nrsb + '"') - print() - - """ - A commonly used strategy to split long documents, especially in the field of Question Answering, - is the sliding window approach. If `split_length=10` and `split_overlap=3`, your documents will look like this: - - - doc1 = words[0:10] - - doc2 = words[7:17] - - doc3 = words[14:24] - - ... - - You can use this strategy by following the code below. - """ - - # Sliding window approach - - preprocessor_sliding_window = PreProcessor(split_overlap=3, split_length=10, split_respect_sentence_boundary=False) - docs_sliding_window = preprocessor_sliding_window.process([doc_txt]) - - doc1 = docs_sliding_window[0].content[:200] - doc2 = docs_sliding_window[1].content[:100] - doc3 = docs_sliding_window[2].content[:100] - - print('Document 1: "' + doc1 + '..."') - print('Document 2: "' + doc2 + '..."') - print('Document 3: "' + doc3 + '..."') - - -if __name__ == "__main__": - tutorial8_preprocessing() - -# This Haystack script was made with love by deepset in Berlin, Germany -# Haystack: https://github.com/deepset-ai/haystack -# deepset: https://deepset.ai/ diff --git a/tutorials/Tutorial9_DPR_training.ipynb b/tutorials/Tutorial9_DPR_training.ipynb deleted file mode 100644 index 6eb197d5af..0000000000 --- a/tutorials/Tutorial9_DPR_training.ipynb +++ /dev/null @@ -1,478 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "# Training Your Own \"Dense Passage Retrieval\" Model\n", - "\n", - "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/deepset-ai/haystack/blob/main/tutorials/Tutorial9_DPR_training.ipynb)\n", - "\n", - "Haystack contains all the tools needed to train your own Dense Passage Retrieval model.\n", - "This tutorial will guide you through the steps required to create a retriever that is specifically tailored to your domain." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "# Install the latest release of Haystack in your own environment\n", - "#! pip install farm-haystack\n", - "\n", - "# Install the latest main of Haystack\n", - "!pip install --upgrade pip\n", - "!pip install git+https://github.com/deepset-ai/haystack.git#egg=farm-haystack[colab]" - ] - }, - { - "cell_type": "markdown", - "source": [ - "## Logging\n", - "\n", - "We configure how logging messages should be displayed and which log level should be used before importing Haystack.\n", - "Example log message:\n", - "INFO - haystack.utils.preprocessing - Converting data/tutorial1/218_Olenna_Tyrell.txt\n", - "Default log level in basicConfig is WARNING so the explicit parameter is not necessary but can be changed easily:" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - } - }, - { - "cell_type": "code", - "execution_count": null, - "outputs": [], - "source": [ - "import logging\n", - "\n", - "logging.basicConfig(format=\"%(levelname)s - %(name)s - %(message)s\", level=logging.WARNING)\n", - "logging.getLogger(\"haystack\").setLevel(logging.INFO)" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "# Here are some imports that we'll need\n", - "\n", - "from haystack.nodes import DensePassageRetriever\n", - "from haystack.utils import fetch_archive_from_http\n", - "from haystack.document_stores import InMemoryDocumentStore" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "## Training Data\n", - "\n", - "DPR training performed using Information Retrieval data.\n", - "More specifically, you want to feed in pairs of queries and relevant documents.\n", - "\n", - "To train a model, we will need a dataset that has the same format as the original DPR training data.\n", - "Each data point in the dataset should have the following dictionary structure.\n", - "\n", - "``` python\n", - " {\n", - " \"dataset\": str,\n", - " \"question\": str,\n", - " \"answers\": list of str\n", - " \"positive_ctxs\": list of dictionaries of format {'title': str, 'text': str, 'score': int, 'title_score': int, 'passage_id': str}\n", - " \"negative_ctxs\": list of dictionaries of format {'title': str, 'text': str, 'score': int, 'title_score': int, 'passage_id': str}\n", - " \"hard_negative_ctxs\": list of dictionaries of format {'title': str, 'text': str, 'score': int, 'title_score': int, 'passage_id': str}\n", - " }\n", - "```\n", - "\n", - "`positive_ctxs` are context passages which are relevant to the query.\n", - "In some datasets, queries might have more than one positive context\n", - "in which case you can set the `num_positives` parameter to be higher than the default 1.\n", - "Note that `num_positives` needs to be lower or equal to the minimum number of `positive_ctxs` for queries in your data.\n", - "If you have an unequal number of positive contexts per example,\n", - "you might want to generate some soft labels by retrieving similar contexts which contain the answer.\n", - "\n", - "DPR is standardly trained using a method known as in-batch negatives.\n", - "This means that positive contexts for a given query are treated as negative contexts for the other queries in the batch.\n", - "Doing so allows for a high degree of computational efficiency, thus allowing the model to be trained on large amounts of data.\n", - "\n", - "`negative_ctxs` is not actually used in Haystack's DPR training so we recommend you set it to an empty list.\n", - "They were used by the original DPR authors in an experiment to compare it against the in-batch negatives method.\n", - "\n", - "`hard_negative_ctxs` are passages that are not relevant to the query.\n", - "In the original DPR paper, these are fetched using a retriever to find the most relevant passages to the query.\n", - "Passages which contain the answer text are filtered out.\n", - "\n", - "If you'd like to convert your SQuAD format data into something that can train a DPR model,\n", - "check out the utility script at [`haystack/utils/squad_to_dpr.py`](https://github.com/deepset-ai/haystack/blob/main/haystack/utils/squad_to_dpr.py)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "## Using Question Answering Data\n", - "\n", - "Question Answering datasets can sometimes be used as training data.\n", - "Google's Natural Questions dataset, is sufficiently large\n", - "and contains enough unique passages, that it can be converted into a DPR training set.\n", - "This is done simply by considering answer containing passages as relevant documents to the query.\n", - "\n", - "The SQuAD dataset, however, is not as suited to this use case since its question and answer pairs\n", - "are created on only a very small slice of wikipedia documents." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "## Download Original DPR Training Data\n", - "\n", - "WARNING: These files are large! The train set is 7.4GB and the dev set is 800MB\n", - "\n", - "We can download the original DPR training data with the following cell.\n", - "Note that this data is probably only useful if you are trying to train from scratch." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "# Download original DPR data\n", - "# WARNING: the train set is 7.4GB and the dev set is 800MB\n", - "\n", - "doc_dir = \"data/tutorial9\"\n", - "\n", - "s3_url_train = \"https://dl.fbaipublicfiles.com/dpr/data/retriever/biencoder-nq-train.json.gz\"\n", - "s3_url_dev = \"https://dl.fbaipublicfiles.com/dpr/data/retriever/biencoder-nq-dev.json.gz\"\n", - "\n", - "fetch_archive_from_http(s3_url_train, output_dir=doc_dir + \"/train\")\n", - "fetch_archive_from_http(s3_url_dev, output_dir=doc_dir + \"/dev\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "## Option 1: Training DPR from Scratch\n", - "\n", - "The default variables that we provide below are chosen to train a DPR model from scratch.\n", - "Here, both passage and query embedding models are initialized using BERT base\n", - "and the model is trained using Google's Natural Questions dataset (in a format specialised for DPR).\n", - "\n", - "If you are working in a language other than English,\n", - "you will want to initialize the passage and query embedding models with a language model that supports your language\n", - "and also provide a dataset in your language." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "# Here are the variables to specify our training data, the models that we use to initialize DPR\n", - "# and the directory where we'll be saving the model\n", - "\n", - "train_filename = \"train/biencoder-nq-train.json\"\n", - "dev_filename = \"dev/biencoder-nq-dev.json\"\n", - "\n", - "query_model = \"bert-base-uncased\"\n", - "passage_model = \"bert-base-uncased\"\n", - "\n", - "save_dir = \"../saved_models/dpr\"" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "## Option 2: Finetuning DPR\n", - "\n", - "If you have your own domain specific question answering or information retrieval dataset,\n", - "you might instead be interested in finetuning a pretrained DPR model.\n", - "In this case, you would initialize both query and passage models using the original pretrained model.\n", - "You will want to load something like this set of variables instead of the ones above" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "# Here are the variables you might want to use instead of the set above\n", - "# in order to perform pretraining\n", - "\n", - "doc_dir = \"PATH_TO_YOUR_DATA_DIR\"\n", - "train_filename = \"TRAIN_FILENAME\"\n", - "dev_filename = \"DEV_FILENAME\"\n", - "\n", - "query_model = \"facebook/dpr-question_encoder-single-nq-base\"\n", - "passage_model = \"facebook/dpr-ctx_encoder-single-nq-base\"\n", - "\n", - "save_dir = \"../saved_models/dpr\"" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "## Initialization\n", - "\n", - "Here we want to initialize our model either with plain language model weights for training from scratch\n", - "or else with pretrained DPR weights for finetuning.\n", - "We follow the [original DPR parameters](https://github.com/facebookresearch/DPR#best-hyperparameter-settings)\n", - "for their max passage length but set max query length to 64 since queries are very rarely longer." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "## Initialize DPR model\n", - "\n", - "retriever = DensePassageRetriever(\n", - " document_store=InMemoryDocumentStore(),\n", - " query_embedding_model=query_model,\n", - " passage_embedding_model=passage_model,\n", - " max_seq_len_query=64,\n", - " max_seq_len_passage=256,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "## Training\n", - "\n", - "Let's start training and save our trained model!\n", - "\n", - "On a V100 GPU, you can fit up to batch size 16 so we set gradient accumulation steps to 8 in order\n", - "to simulate the batch size 128 of the original DPR experiment.\n", - "\n", - "When `embed_title=True`, the document title is prepended to the input text sequence with a `[SEP]` token\n", - "between it and document text." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "When training from scratch with the above variables, 1 epoch takes around an hour and we reached the following performance:\n", - "\n", - "```\n", - "loss: 0.046580662854042276\n", - "task_name: text_similarity\n", - "acc: 0.992524064068483\n", - "f1: 0.8804297774366846\n", - "acc_and_f1: 0.9364769207525838\n", - "average_rank: 0.19631619339984652\n", - "report:\n", - " precision recall f1-score support\n", - "\n", - "hard_negative 0.9961 0.9961 0.9961 201887\n", - " positive 0.8804 0.8804 0.8804 6515\n", - "\n", - " accuracy 0.9925 208402\n", - " macro avg 0.9383 0.9383 0.9383 208402\n", - " weighted avg 0.9925 0.9925 0.9925 208402\n", - "\n", - "```" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "# Start training our model and save it when it is finished\n", - "\n", - "retriever.train(\n", - " data_dir=doc_dir,\n", - " train_filename=train_filename,\n", - " dev_filename=dev_filename,\n", - " test_filename=dev_filename,\n", - " n_epochs=1,\n", - " batch_size=16,\n", - " grad_acc_steps=8,\n", - " save_dir=save_dir,\n", - " evaluate_every=3000,\n", - " embed_title=True,\n", - " num_positives=1,\n", - " num_hard_negatives=1,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - }, - "source": [ - "## Loading\n", - "\n", - "Loading our newly trained model is simple!" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - }, - "outputs": [], - "source": [ - "reloaded_retriever = DensePassageRetriever.load(load_dir=save_dir, document_store=None)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false - }, - "source": [ - "## About us\n", - "\n", - "This [Haystack](https://github.com/deepset-ai/haystack/) notebook was made with love by [deepset](https://deepset.ai/) in Berlin, Germany\n", - "\n", - "We bring NLP to the industry via open source! \n", - "Our focus: Industry specific language models & large scale QA systems. \n", - " \n", - "Some of our other work: \n", - "- [German BERT](https://deepset.ai/german-bert)\n", - "- [GermanQuAD and GermanDPR](https://deepset.ai/germanquad)\n", - "- [FARM](https://github.com/deepset-ai/FARM)\n", - "\n", - "Get in touch:\n", - "[Twitter](https://twitter.com/deepset_ai) | [LinkedIn](https://www.linkedin.com/company/deepset-ai/) | [Slack](https://haystack.deepset.ai/community/join) | [GitHub Discussions](https://github.com/deepset-ai/haystack/discussions) | [Website](https://deepset.ai)\n", - "\n", - "By the way: [we're hiring!](https://www.deepset.ai/jobs)" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 2 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.6" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} \ No newline at end of file diff --git a/tutorials/Tutorial9_DPR_training.py b/tutorials/Tutorial9_DPR_training.py deleted file mode 100644 index 7509abd5a7..0000000000 --- a/tutorials/Tutorial9_DPR_training.py +++ /dev/null @@ -1,96 +0,0 @@ -# Training Your Own "Dense Passage Retrieval" Model - -# Here are some imports that we'll need - -import logging - -# We configure how logging messages should be displayed and which log level should be used before importing Haystack. -# Example log message: -# INFO - haystack.utils.preprocessing - Converting data/tutorial1/218_Olenna_Tyrell.txt -# Default log level in basicConfig is WARNING so the explicit parameter is not necessary but can be changed easily: -logging.basicConfig(format="%(levelname)s - %(name)s - %(message)s", level=logging.WARNING) -logging.getLogger("haystack").setLevel(logging.INFO) - -from haystack.nodes import DensePassageRetriever -from haystack.utils import fetch_archive_from_http -from haystack.document_stores import InMemoryDocumentStore - - -def tutorial9_dpr_training(): - - # Download original DPR data - # WARNING: the train set is 7.4GB and the dev set is 800MB - - doc_dir = "data/tutorial9" - - s3_url_train = "https://dl.fbaipublicfiles.com/dpr/data/retriever/biencoder-nq-train.json.gz" - s3_url_dev = "https://dl.fbaipublicfiles.com/dpr/data/retriever/biencoder-nq-dev.json.gz" - - fetch_archive_from_http(s3_url_train, output_dir=doc_dir + "/train") - fetch_archive_from_http(s3_url_dev, output_dir=doc_dir + "/dev") - - ## Option 1: Training DPR from Scratch - - # Here are the variables to specify our training data, the models that we use to initialize DPR - # and the directory where we'll be saving the model - - train_filename = "train/biencoder-nq-train.json" - dev_filename = "dev/biencoder-nq-dev.json" - - query_model = "bert-base-uncased" - passage_model = "bert-base-uncased" - - save_dir = "../saved_models/dpr" - - # ## Option 2: Finetuning DPR - # - # # Here are the variables you might want to use instead of the set above - # # in order to perform pretraining - # - # doc_dir = "PATH_TO_YOUR_DATA_DIR" - # train_filename = "TRAIN_FILENAME" - # dev_filename = "DEV_FILENAME" - # - # query_model = "facebook/dpr-question_encoder-single-nq-base" - # passage_model = "facebook/dpr-ctx_encoder-single-nq-base" - # - # save_dir = "..saved_models/dpr" - - ## Initialize DPR model - - retriever = DensePassageRetriever( - document_store=InMemoryDocumentStore(), - query_embedding_model=query_model, - passage_embedding_model=passage_model, - max_seq_len_query=64, - max_seq_len_passage=256, - ) - - # Start training our model and save it when it is finished - - retriever.train( - data_dir=doc_dir, - train_filename=train_filename, - dev_filename=dev_filename, - test_filename=dev_filename, - n_epochs=1, - batch_size=16, - grad_acc_steps=8, - save_dir=save_dir, - evaluate_every=3000, - embed_title=True, - num_positives=1, - num_hard_negatives=1, - ) - - ## Loading - - reloaded_retriever = DensePassageRetriever.load(load_dir=save_dir, document_store=None) - - -if __name__ == "__main__": - tutorial9_dpr_training() - -# This Haystack script was made with love by deepset in Berlin, Germany -# Haystack: https://github.com/deepset-ai/haystack -# deepset: https://deepset.ai/ diff --git a/tutorials/small_faq_covid.csv b/tutorials/small_faq_covid.csv deleted file mode 100644 index 8045e23e60..0000000000 --- a/tutorials/small_faq_covid.csv +++ /dev/null @@ -1,1145 +0,0 @@ -question,answer,answer_html,link,name,source,category,country,region,city,lang,last_update -What is a novel coronavirus?,"A novel coronavirus is a new coronavirus that has not been previously identified. The virus causing coronavirus disease 2019 (COVID-19), is not the same as the coronaviruses that commonly circulate among humans and cause mild illness, like the common cold. - -A diagnosis with coronavirus 229E, NL63, OC43, or HKU1 is not the same as a COVID-19 diagnosis. Patients with COVID-19 will be evaluated and cared for differently than patients with common coronavirus diagnosis.","

A novel coronavirus is a new coronavirus that has not been previously identified. The virus causing coronavirus disease 2019 (COVID-19), is not the same as the coronaviruses that commonly circulate among humans and cause mild illness, like the common cold.

-

A diagnosis with coronavirus 229E, NL63, OC43, or HKU1 is not the same as a COVID-19 diagnosis. Patients with COVID-19 will be evaluated and cared for differently than patients with common coronavirus diagnosis."," -https://www.cdc.gov/coronavirus/2019-ncov/faq.html",Frequently Asked Questions,Center for Disease Control and Prevention (CDC),Coronavirus Disease 2019 Basics,USA,,,en,2020/03/17 -"Why is the disease being called coronavirus disease 2019, COVID-19?","On February 11, 2020 the World Health Organization announced an official name for the disease that is causing the 2019 novel coronavirus outbreak, first identified in Wuhan China. The new name of this disease is coronavirus disease 2019, abbreviated as COVID-19. In COVID-19, ‘CO’ stands for ‘corona,’ ‘VI’ for ‘virus,’ and ‘D’ for disease. Formerly, this disease was referred to as “2019 novel coronavirus” or “2019-nCoV”. - -There are many types of human coronaviruses including some that commonly cause mild upper-respiratory tract illnesses. COVID-19 is a new disease, caused be a novel (or new) coronavirus that has not previously been seen in humans. The name of this disease was selected following the World Health Organization (WHO) best practiceexternal icon for naming of new human infectious diseases.","

On February 11, 2020 the World Health Organization announced an official name for the disease that is causing the 2019 novel coronavirus outbreak, first identified in Wuhan China. The new name of this disease is coronavirus disease 2019, abbreviated as COVID-19. In COVID-19, 'CO' stands for 'corona,' 'VI' for 'virus,' and 'D' for disease. Formerly, this disease was referred to as \""2019 novel coronavirus\"" or \""2019-nCoV\"". - - There are many types of human coronaviruses including some that commonly cause mild upper-respiratory tract illnesses. COVID-19 is a new disease, caused be a novel (or new) coronavirus that has not previously been seen in humans. The name of this disease was selected following the World Health Organization (WHO) best practice for naming of new human infectious diseases.

"," -https://www.cdc.gov/coronavirus/2019-ncov/faq.html",Frequently Asked Questions,Center for Disease Control and Prevention (CDC),Coronavirus Disease 2019 Basics,USA,,,en,2020/03/17 -Why might someone blame or avoid individuals and groups (create stigma) because of COVID-19?,"People in the U.S. may be worried or anxious about friends and relatives who are living in or visiting areas where COVID-19 is spreading. Some people are worried about the disease. Fear and anxiety can lead to social stigma, for example, towards Chinese or other Asian Americans or people who were in quarantine. - -Stigma is discrimination against an identifiable group of people, a place, or a nation. Stigma is associated with a lack of knowledge about how COVID-19 spreads, a need to blame someone, fears about disease and death, and gossip that spreads rumors and myths. - -Stigma hurts everyone by creating more fear or anger towards ordinary people instead of the disease that is causing the problem.","

People in the U.S. may be worried or anxious about friends and relatives who are living in or visiting areas where COVID-19 is spreading. Some people are worried about the disease. Fear and anxiety can lead to social stigma, for example, towards Chinese or other Asian Americans or people who were in quarantine.

-

Stigma is discrimination against an identifiable group of people, a place, or a nation. Stigma is associated with a lack of knowledge about how COVID-19 spreads, a need to blame someone, fears about disease and death, and gossip that spreads rumors and myths.

-

Stigma hurts everyone by creating more fear or anger towards ordinary people instead of the disease that is causing the problem.

"," -https://www.cdc.gov/coronavirus/2019-ncov/faq.html",Frequently Asked Questions,Center for Disease Control and Prevention (CDC),Coronavirus Disease 2019 Basics,USA,,,en,2020/03/17 -How can people help stop stigma related to COVID-19?,"People can fight stigma and help, not hurt, others by providing social support. Counter stigma by learning and sharing facts. Communicating the facts that viruses do not target specific racial or ethnic groups and how COVID-19 actually spreads can help stop stigma.","

People can fight stigma and help, not hurt, others by providing social support. Counter stigma by learning and sharing facts. Communicating the facts that viruses do not target specific racial or ethnic groups and how COVID-19 actually spreads can help stop stigma.

"," -https://www.cdc.gov/coronavirus/2019-ncov/faq.html",Frequently Asked Questions,Center for Disease Control and Prevention (CDC),How It Spreads,USA,,,en,2020/03/17 -What is the source of the virus?,"Coronaviruses are a large family of viruses. Some cause illness in people, and others, such as canine and feline coronaviruses, only infect animals. Rarely, animal coronaviruses that infect animals have emerged to infect people and can spread between people. This is suspected to have occurred for the virus that causes COVID-19. Middle East Respiratory Syndrome (MERS) and Severe Acute Respiratory Syndrome (SARS) are two other examples of coronaviruses that originated from animals and then spread to people. More information about the source and spread of COVID-19 is available on the Situation Summary: Source and Spread of the Virus.","

Coronaviruses are a large family of viruses. Some cause illness in people, and others, such as canine and feline coronaviruses, only infect animals. Rarely, animal coronaviruses that infect animals have emerged to infect people and can spread between people. This is suspected to have occurred for the virus that causes COVID-19. Middle East Respiratory Syndrome (MERS) and Severe Acute Respiratory Syndrome (SARS) are two other examples of coronaviruses that originated from animals and then spread to people. More information about the source and spread of COVID-19 is available on the Situation Summary: Source and Spread of the Virus.

"," -https://www.cdc.gov/coronavirus/2019-ncov/faq.html",Frequently Asked Questions,Center for Disease Control and Prevention (CDC),How It Spreads,USA,,,en,2020/03/17 -How does the virus spread?,"This virus was first detected in Wuhan City, Hubei Province, China. The first infections were linked to a live animal market, but the virus is now spreading from person-to-person. It’s important to note that person-to-person spread can happen on a continuum. Some viruses are highly contagious (like measles), while other viruses are less so. - -The virus that causes COVID-19 seems to be spreading easily and sustainably in the community (“community spread”) in some affected geographic areas. Community spread means people have been infected with the virus in an area, including some who are not sure how or where they became infected. - -Learn what is known about the spread of newly emerged coronaviruses.","

This virus was first detected in Wuhan City, Hubei Province, China. The first infections were linked to a live animal market, but the virus is now spreading from person-to-person. It’s important to note that person-to-person spread can happen on a continuum. Some viruses are highly contagious (like measles), while other viruses are less so.

-

The virus that causes COVID-19 seems to be spreading easily and sustainably in the community (“community spread”) in some affected geographic areas. Community spread means people have been infected with the virus in an area, including some who are not sure how or where they became infected.

-

Learn what is known about the spread of newly emerged coronaviruses.

"," -https://www.cdc.gov/coronavirus/2019-ncov/faq.html",Frequently Asked Questions,Center for Disease Control and Prevention (CDC),How It Spreads,USA,,,en,2020/03/17 -Can someone who has had COVID-19 spread the illness to others?,"The virus that causes COVID-19 is spreading from person-to-person. Someone who is actively sick with COVID-19 can spread the illness to others. That is why CDC recommends that these patients be isolated either in the hospital or at home (depending on how sick they are) until they are better and no longer pose a risk of infecting others. - -How long someone is actively sick can vary so the decision on when to release someone from isolation is made on a case-by-case basis in consultation with doctors, infection prevention and control experts, and public health officials and involves considering specifics of each situation including disease severity, illness signs and symptoms, and results of laboratory testing for that patient. - -Current CDC guidance for when it is OK to release someone from isolation is made on a case by case basis and includes meeting all of the following requirements: - -The patient is free from fever without the use of fever-reducing medications. -The patient is no longer showing symptoms, including cough. -The patient has tested negative on at least two consecutive respiratory specimens collected at least 24 hours apart. -Someone who has been released from isolation is not considered to pose a risk of infection to others.","

The virus that causes COVID-19 is spreading from person-to-person. Someone who is actively sick with COVID-19 can spread the illness to others. That is why CDC recommends that these patients be isolated either in the hospital or at home (depending on how sick they are) until they are better and no longer pose a risk of infecting others.

-

How long someone is actively sick can vary so the decision on when to release someone from isolation is made on a case-by-case basis in consultation with doctors, infection prevention and control experts, and public health officials and involves considering specifics of each situation including disease severity, illness signs and symptoms, and results of laboratory testing for that patient.

-

Current CDC guidance for when it is OK to release someone from isolation is made on a case by case basis and includes meeting all of the following requirements:

-
    -
  • The patient is free from fever without the use of fever-reducing medications.
  • -
  • The patient is no longer showing symptoms, including cough.
  • -
  • The patient has tested negative on at least two consecutive respiratory specimens collected at least 24 hours apart.
  • -
-

Someone who has been released from isolation is not considered to pose a risk of infection to others.

"," -https://www.cdc.gov/coronavirus/2019-ncov/faq.html",Frequently Asked Questions,Center for Disease Control and Prevention (CDC),How It Spreads,USA,,,en,2020/03/17 -Can someone who has been quarantined for COVID-19 spread the illness to others?,"Quarantine means separating a person or group of people who have been exposed to a contagious disease but have not developed illness (symptoms) from others who have not been exposed, in order to prevent the possible spread of that disease. Quarantine is usually established for the incubation period of the communicable disease, which is the span of time during which people have developed illness after exposure. For COVID-19, the period of quarantine is 14 days from the last date of exposure, because 14 days is the longest incubation period seen for similar coronaviruses. Someone who has been released from COVID-19 quarantine is not considered a risk for spreading the virus to others because they have not developed illness during the incubation period.","

Quarantine means separating a person or group of people who have been exposed to a contagious disease but have not developed illness (symptoms) from others who have not been exposed, in order to prevent the possible spread of that disease. Quarantine is usually established for the incubation period of the communicable disease, which is the span of time during which people have developed illness after exposure. For COVID-19, the period of quarantine is 14 days from the last date of exposure, because 14 days is the longest incubation period seen for similar coronaviruses. Someone who has been released from COVID-19 quarantine is not considered a risk for spreading the virus to others because they have not developed illness during the incubation period.

-"," -https://www.cdc.gov/coronavirus/2019-ncov/faq.html",Frequently Asked Questions,Center for Disease Control and Prevention (CDC),How It Spreads,USA,,,en,2020/03/17 -"Can the virus that causes COVID-19 be spread through food, including refrigerated or frozen food?","Coronaviruses are generally thought to be spread from person-to-person through respiratory droplets. Currently there is no evidence to support transmission of COVID-19 associated with food. Before preparing or eating food it is important to always wash your hands with soap and water for 20 seconds for general food safety. Throughout the day wash your hands after blowing your nose, coughing or sneezing, or going to the bathroom. - -It may be possible that a person can get COVID-19 by touching a surface or object that has the virus on it and then touching their own mouth, nose, or possibly their eyes, but this is not thought to be the main way the virus spreads. - -In general, because of poor survivability of these coronaviruses on surfaces, there is likely very low risk of spread from food products or packaging that are shipped over a period of days or weeks at ambient, refrigerated, or frozen temperatures. - -Learn what is known about the spread of COVID-19.","

Coronaviruses are generally thought to be spread from person-to-person through respiratory droplets. Currently there is no evidence to support transmission of COVID-19 associated with food. Before preparing or eating food it is important to always wash your hands with soap and water for 20 seconds for general food safety. Throughout the day wash your hands after blowing your nose, coughing or sneezing, or going to the bathroom.

-

It may be possible that a person can get COVID-19 by touching a surface or object that has the virus on it and then touching their own mouth, nose, or possibly their eyes, but this is not thought to be the main way the virus spreads.

-

In general, because of poor survivability of these coronaviruses on surfaces, there is likely very low risk of spread from food products or packaging that are shipped over a period of days or weeks at ambient, refrigerated, or frozen temperatures.

-

Learn what is known about the spread of COVID-19.

"," -https://www.cdc.gov/coronavirus/2019-ncov/faq.html",Frequently Asked Questions,Center for Disease Control and Prevention (CDC),How It Spreads,USA,,,en,2020/03/17 -Will warm weather stop the outbreak of COVID-19?,"It is not yet known whether weather and temperature impact the spread of COVID-19. Some other viruses, like the common cold and flu, spread more during cold weather months but that does not mean it is impossible to become sick with these viruses during other months. At this time, it is not known whether the spread of COVID-19 will decrease when weather becomes warmer. There is much more to learn about the transmissibility, severity, and other features associated with COVID-19 and investigations are ongoing.","

It is not yet known whether weather and temperature impact the spread of COVID-19. Some other viruses, like the common cold and flu, spread more during cold weather months but that does not mean it is impossible to become sick with these viruses during other months.  At this time, it is not known whether the spread of COVID-19 will decrease when weather becomes warmer.  There is much more to learn about the transmissibility, severity, and other features associated with COVID-19 and investigations are ongoing.

"," -https://www.cdc.gov/coronavirus/2019-ncov/faq.html",Frequently Asked Questions,Center for Disease Control and Prevention (CDC),How It Spreads,USA,,,en,2020/03/17 -What is community spread?,"Community spread means people have been infected with the virus in an area, including some who are not sure how or where they became infected.","

Community spread means people have been infected with the virus in an area, including some who are not sure how or where they became infected.

"," -https://www.cdc.gov/coronavirus/2019-ncov/faq.html",Frequently Asked Questions,Center for Disease Control and Prevention (CDC),How It Spreads,USA,,,en,2020/03/17 -Am I at risk for COVID-19 in the United States?,This is a rapidly evolving situation and the risk assessment may change daily. The latest updates are available on CDC’s Coronavirus Disease 2019 (COVID-19) website.,"

This is a rapidly evolving situation and the risk assessment may change daily. The latest updates are available on CDC’s Coronavirus Disease 2019 (COVID-19) website.

"," -https://www.cdc.gov/coronavirus/2019-ncov/faq.html",Frequently Asked Questions,Center for Disease Control and Prevention (CDC),How to Protect Yourself,USA,,,en,2020/03/17 -" -Has anyone in the United States gotten infected?",Yes. There have been cases of COVID-19 in the U.S. related to travel and through close contact. U.S. case counts are updated regularly Mondays through Fridays. See the current U.S. case count of COVID-19.,"Yes. There have been cases of COVID-19 in the U.S. related to travel and through close contact. U.S. case counts are updated regularly Mondays through Fridays. See the current U.S. case count of COVID-19.

"," -https://www.cdc.gov/coronavirus/2019-ncov/faq.html",Frequently Asked Questions,Center for Disease Control and Prevention (CDC),How to Protect Yourself,USA,,,en,2020/03/17 -How can I help protect myself?," -Visit the COVID-19 Prevention and Treatment page to learn about how to protect yourself from respiratory illnesses, like COVID-19.","p>Visit the COVID-19 Prevention and Treatment page to learn about how to protect yourself from respiratory illnesses, like COVID-19.

"," -https://www.cdc.gov/coronavirus/2019-ncov/faq.html",Frequently Asked Questions,Center for Disease Control and Prevention (CDC),How to Protect Yourself,USA,,,en,2020/03/17 -What should I do if I had close contact with someone who has COVID-19?,"There is information for people who have had close contact with a person confirmed to have, or being evaluated for, COVID-19 available online.","

There is information for people who have had close contact with a person confirmed to have, or being evaluated for, COVID-19 available online.

"," -https://www.cdc.gov/coronavirus/2019-ncov/faq.html",Frequently Asked Questions,Center for Disease Control and Prevention (CDC),How to Protect Yourself,USA,,,en,2020/03/17 -Who is at higher risk for serious illness from COVID-19?,"Early information out of China, where COVID-19 first started, shows that some people are at higher risk of getting very sick from this illness including older adults, and people who have serious chronic medical conditions like heart disease, diabetes, and lung disease.","

Early information out of China, where COVID-19 first started, shows that some people are at higher risk of getting very sick from this illness including older adults, and people who have serious chronic medical conditions like heart disease, diabetes, and lung disease.

"," -https://www.cdc.gov/coronavirus/2019-ncov/faq.html",Frequently Asked Questions,Center for Disease Control and Prevention (CDC),How to Protect Yourself,USA,,,en,2020/03/17 -What should people at higher risk of serious illness with COVID-19 do?,"If you are at higher risk of getting very sick from COVID-19, you should: stock up on supplies; take everyday precautions to keep space between yourself and others; when you go out in public, keep away from others who are sick; limit close contact and wash your hands often; and avoid crowds, cruise travel, and non-essential travel. If there is an outbreak in your community, stay home as much as possible. Watch for symptoms and emergency signs. Watch for symptoms and emergency signs. If you get sick, stay home and call your doctor. More information on how to prepare, what to do if you get sick, and how communities and caregivers can support those at higher risk is available on People at Risk for Serious Illness from COVID-19.","

If you are at higher risk of getting very sick from COVID-19, you should: stock up on supplies; take everyday precautions to keep space between yourself and others; when you go out in public, keep away from others who are sick; limit close contact and wash your hands often; and avoid crowds, cruise travel, and non-essential travel. If there is an outbreak in your community, stay home as much as possible. Watch for symptoms and emergency signs. Watch for symptoms and emergency signs. If you get sick, stay home and call your doctor. More information on how to prepare, what to do if you get sick, and how communities and caregivers can support those at higher risk is available on People at Risk for Serious Illness from COVID-19.

"," -https://www.cdc.gov/coronavirus/2019-ncov/faq.html",Frequently Asked Questions,Center for Disease Control and Prevention (CDC),How to Protect Yourself,USA,,,en,2020/03/17 -Does CDC recommend the use of facemask to prevent COVID-19?,"CDC does not recommend that people who are well wear a facemask to protect themselves from respiratory illnesses, including COVID-19. You should only wear a mask if a healthcare professional recommends it. A facemask should be used by people who have COVID-19 and are showing symptoms. This is to protect others from the risk of getting infected. The use of facemasks also is crucial for health workers and other people who are taking care of someone infected with COVID-19 in close settings (at home or in a health care facility).","

CDC does not recommend that people who are well wear a facemask to protect themselves from respiratory illnesses, including COVID-19. You should only wear a mask if a healthcare professional recommends it. A facemask should be used by people who have COVID-19 and are showing symptoms. This is to protect others from the risk of getting infected. The use of facemasks also is crucial for health workers and other people who are taking care of someone infected with COVID-19 in close settings (at home or in a health care facility).

"," -https://www.cdc.gov/coronavirus/2019-ncov/faq.html",Frequently Asked Questions,Center for Disease Control and Prevention (CDC),How to Protect Yourself,USA,,,en,2020/03/17 -Am I at risk for COVID-19 from a package or products shipping from China?,"There is still a lot that is unknown about the newly emerged COVID-19 and how it spreads. Two other coronaviruses have emerged previously to cause severe illness in people (MERS-CoV and SARS-CoV). The virus that causes COVID-19 is more genetically related to SARS-CoV than MERS-CoV, but both are betacoronaviruses with their origins in bats. While we don’t know for sure that this virus will behave the same way as SARS-CoV and MERS-CoV, we can use the information gained from both of these earlier coronaviruses to guide us. In general, because of poor survivability of these coronaviruses on surfaces, there is likely very low risk of spread from products or packaging that are shipped over a period of days or weeks at ambient temperatures. Coronaviruses are generally thought to be spread most often by respiratory droplets. Currently there is no evidence to support transmission of COVID-19 associated with imported goods and there have not been any cases of COVID-19 in the United States associated with imported goods. Information will be provided on the Coronavirus Disease 2019 (COVID-19) website as it becomes available."," -

There is still a lot that is unknown about the newly emerged COVID-19 and how it spreads. Two other coronaviruses have emerged previously to cause severe illness in people (MERS-CoV and SARS-CoV). The virus that causes COVID-19 is more genetically related to SARS-CoV than MERS-CoV, but both are betacoronaviruses with their origins in bats. While we don’t know for sure that this virus will behave the same way as SARS-CoV and MERS-CoV, we can use the information gained from both of these earlier coronaviruses to guide us. In general, because of poor survivability of these coronaviruses on surfaces, there is likely very low risk of spread from products or packaging that are shipped over a period of days or weeks at ambient temperatures. Coronaviruses are generally thought to be spread most often by respiratory droplets. Currently there is no evidence to support transmission of COVID-19 associated with imported goods and there have not been any cases of COVID-19 in the United States associated with imported goods. Information will be provided on the Coronavirus Disease 2019 (COVID-19) website as it becomes available.

"," -https://www.cdc.gov/coronavirus/2019-ncov/faq.html",Frequently Asked Questions,Center for Disease Control and Prevention (CDC),How to Protect Yourself,USA,,,en,2020/03/17 -What are the symptoms and complications that COVID-19 can cause?,"Current symptoms reported for patients with COVID-19 have included mild to severe respiratory illness with fever, cough, and difficulty breathing. Read about COVID-19 Symptoms.","

Current symptoms reported for patients with COVID-19 have included mild to severe respiratory illness with fever1, cough, and difficulty breathing. Read about COVID-19 Symptoms.

"," -https://www.cdc.gov/coronavirus/2019-ncov/faq.html",Frequently Asked Questions,Center for Disease Control and Prevention (CDC),Sympotms & Testing,USA,,,en,2020/03/17 -Should I be tested for COVID-19?,"If you develop symptoms such as fever, cough, and/or difficulty breathing, and have been in close contact with a person known to have COVID-19 or have recently traveled from an area with ongoing spread of COVID-19, stay home and call your healthcare provider. Older patients and individuals who have severe underlying medical conditions or are immunocompromised should contact their healthcare provider early, even if their illness is mild. If you have severe symptoms, such as persistent pain or pressure in the chest, new confusion or inability to arouse, or bluish lips of face, contact your healthcare provider or emergency room and seek care immediately. Your doctor will determine if you have signs and symptoms of COVID-19 and whether you should be tested.","

If you develop symptoms such as fever, cough, and/or difficulty breathing, and have been in close contact with a person known to have COVID-19 or have recently traveled from an area with ongoing spread of COVID-19, stay home and call your healthcare provider. Older patients and individuals who have severe underlying medical conditions or are immunocompromised should contact their healthcare provider early, even if their illness is mild. If you have severe symptoms, such as persistent pain or pressure in the chest, new confusion or inability to arouse, or bluish lips of face, contact your healthcare provider or emergency room and seek care immediately. Your doctor will determine if you have signs and symptoms of COVID-19 and whether you should be tested.

-"," -https://www.cdc.gov/coronavirus/2019-ncov/faq.html",Frequently Asked Questions,Center for Disease Control and Prevention (CDC),Sympotms & Testing,USA,,,en,2020/03/17 -Can a person test negative and later test positive for COVID-19?,"Using the CDC-developed diagnostic test, a negative result means that the virus that causes COVID-19 was not found in the person’s sample. In the early stages of infection, it is possible the virus will not be detected. - -For COVID-19, a negative test result for a sample collected while a person has symptoms likely means that the COVID-19 virus is not causing their current illness.","

Using the CDC-developed diagnostic test, a negative result means that the virus that causes COVID-19 was not found in the person’s sample. In the early stages of infection, it is possible the virus will not be detected.

-

For COVID-19, a negative test result for a sample collected while a person has symptoms likely means that the COVID-19 virus is not causing their current illness.

"," -https://www.cdc.gov/coronavirus/2019-ncov/faq.html",Frequently Asked Questions,Center for Disease Control and Prevention (CDC),Sympotms & Testing,USA,,,en,2020/03/17 -Why might someone blame or avoid individuals and groups (create stigma) because of COVID-19?,"People in the U.S. may be worried or anxious about friends and relatives who are living in or visiting areas where COVID-19 is spreading. Some people are worried about the disease. Fear and anxiety can lead to social stigma, for example, towards Chinese or other Asian Americans or people who were in quarantine. - -Stigma is discrimination against an identifiable group of people, a place, or a nation. Stigma is associated with a lack of knowledge about how COVID-19 spreads, a need to blame someone, fears about disease and death, and gossip that spreads rumors and myths. - -Stigma hurts everyone by creating more fear or anger towards ordinary people instead of the disease that is causing the problem.","

People in the U.S. may be worried or anxious about friends and relatives who are living in or visiting areas where COVID-19 is spreading. Some people are worried about the disease. Fear and anxiety can lead to social stigma, for example, towards Chinese or other Asian Americans or people who were in quarantine.

-

Stigma is discrimination against an identifiable group of people, a place, or a nation. Stigma is associated with a lack of knowledge about how COVID-19 spreads, a need to blame someone, fears about disease and death, and gossip that spreads rumors and myths.

-

Stigma hurts everyone by creating more fear or anger towards ordinary people instead of the disease that is causing the problem.

"," -https://www.cdc.gov/coronavirus/2019-ncov/faq.html",Frequently Asked Questions,Center for Disease Control and Prevention (CDC),Sympotms & Testing,USA,,,en,2020/03/17 -How can people help stop stigma related to COVID-19?,"People can fight stigma and help, not hurt, others by providing social support. Counter stigma by learning and sharing facts. Communicating the facts that viruses do not target specific racial or ethnic groups and how COVID-19 actually spreads can help stop stigma.","

People can fight stigma and help, not hurt, others by providing social support. Counter stigma by learning and sharing facts. Communicating the facts that viruses do not target specific racial or ethnic groups and how COVID-19 actually spreads can help stop stigma.

"," -https://www.cdc.gov/coronavirus/2019-ncov/faq.html",Frequently Asked Questions,Center for Disease Control and Prevention (CDC),Sympotms & Testing,USA,,,en,2020/03/17 -What should healthcare professionals and health departments do?,"For recommendations and guidance on persons under investigation; infection control, including personal protective equipment guidance; home care and isolation; and case investigation, see Information for Healthcare Professionals. For information on specimen collection and shipment, see Information for Laboratories. For information for public health professional on COVID-19, see Information for Public Health Professionals.",," -https://www.cdc.gov/coronavirus/2019-ncov/faq.html",Frequently Asked Questions,Center for Disease Control and Prevention (CDC),Healtcare Professionals and Health Departments,USA,,,en,2020/03/17 -Am I at risk if I go to a funeral or visitation service for someone who died of COVID-19?,There is currently no known risk associated with being in the same room at a funeral or visitation service with the body of someone who died of COVID-19.,

There is currently no known risk associated with being in the same room at a funeral or visitation service with the body of someone who died of COVID-19.

," -https://www.cdc.gov/coronavirus/2019-ncov/faq.html",Frequently Asked Questions,Center for Disease Control and Prevention (CDC),COVID-19 and Funerals,USA,,,en,2020/03/17 -Am I at risk if I touch someone who died of COVID-19 after they have passed away?,"COVID-19 is a new disease and we are still learning how it spreads. The virus that causes COVID-19 is thought to mainly spread from close contact (i.e., within about 6 feet) with a person who is currently sick with COVID-19. The virus likely spreads primarily through respiratory droplets produced when an infected person coughs or sneezes, similar to how influenza and other respiratory infections spread. These droplets can land in the mouths or noses of people who are nearby or possibly be inhaled into the lungs. This type of spread is not a concern after death. - -It may be possible that a person can get COVID-19 by touching a surface or object that has the virus on it and then touching their own mouth, nose, or possibly their eyes, but this is not thought to be the main way the virus spreads. - -People should consider not touching the body of someone who has died of COVID-19. Older people and people of all ages with severe underlying health conditions are at higher risk of developing serious COVID-19 illness. There may be less of a chance of the virus spreading from certain types of touching, such as holding the hand or hugging after the body has been prepared for viewing. Other activities, such as kissing, washing, and shrouding should be avoided before, during, and after the body has been prepared, if possible. If washing the body or shrouding are important religious or cultural practices, families are encouraged to work with their community cultural and religious leaders and funeral home staff on how to reduce their exposure as much as possible. At a minimum, people conducting these activities should wear disposable gloves. If splashing of fluids is expected, additional personal protective equipment (PPE) may be required (such as disposable gown, faceshield or goggles and facemask). - -Cleaning should be conducted in accordance with manufacturer’s instructions for all cleaning and disinfection products (e.g., concentration, application method and contact time, etc.). Products with EPA-approved emerging viral pathogens claimspdf iconexternal icon are expected to be effective against COVID-19 based on data for harder to kill viruses. After removal of PPE, perform hand hygiene by washing hands with soap and water for at least 20 seconds or using an alcohol-based hand sanitizer that contains at least 60% alcohol if soap and water are not available. Soap and water should be used if the hands are visibly soiled.","

COVID-19 is a new disease and we are still learning how it spreads. The virus that causes COVID-19 is thought to mainly spread from close contact (i.e., within about 6 feet) with a person who is currently sick with COVID-19. The virus likely spreads primarily through respiratory droplets produced when an infected person coughs or sneezes, similar to how influenza and other respiratory infections spread. These droplets can land in the mouths or noses of people who are nearby or possibly be inhaled into the lungs. This type of spread is not a concern after death.

-

It may be possible that a person can get COVID-19 by touching a surface or object that has the virus on it and then touching their own mouth, nose, or possibly their eyes, but this is not thought to be the main way the virus spreads.

-

People should consider not touching the body of someone who has died of COVID-19. Older people and people of all ages with severe underlying health conditions are at higher risk of developing serious COVID-19 illness. There may be less of a chance of the virus spreading from certain types of touching, such as holding the hand or hugging after the body has been prepared for viewing. Other activities, such as kissing, washing, and shrouding should be avoided before, during, and after the body has been prepared, if possible. If washing the body or shrouding are important religious or cultural practices, families are encouraged to work with their community cultural and religious leaders and funeral home staff on how to reduce their exposure as much as possible. At a minimum, people conducting these activities should wear disposable gloves. If splashing of fluids is expected, additional personal protective equipment (PPE) may be required (such as disposable gown, faceshield or goggles and facemask).

-

Cleaning should be conducted in accordance with manufacturer’s instructions for all cleaning and disinfection products (e.g., concentration, application method and contact time, etc.). Products with EPA-approved emerging viral pathogens claimspdf iconexternal icon are expected to be effective against COVID-19 based on data for harder to kill viruses. After removal of PPE, perform hand hygiene by washing hands with soap and water for at least 20 seconds or using an alcohol-based hand sanitizer that contains at least 60% alcohol if soap and water are not available. Soap and water should be used if the hands are visibly soiled.

"," -https://www.cdc.gov/coronavirus/2019-ncov/faq.html",Frequently Asked Questions,Center for Disease Control and Prevention (CDC),COVID-19 and Funerals,USA,,,en,2020/03/17 -What do Funeral Home Workers need to know about handling decedents who had COVID-19?,"A funeral or visitation service can be held for a person who has died of COVID-19. Funeral home workers should follow their routine infection prevention and control precautions when handling a decedent who died of COVID-19. If it is necessary to transfer a body to a bag, follow Standard Precautions, including additional personal protective equipment (PPE) if splashing of fluids is expected. For transporting a body after the body has been bagged, disinfect the outside of the bag with a product with EPA-approved emerging viral pathogens claimspdf iconexternal icon expected to be effective against COVID-19 based on data for harder to kill viruses. Follow the manufacturer’s instructions for all cleaning and disinfection products (e.g., concentration, application method and contact time, etc.). Wear disposable nitrile gloves when handling the body bag. - -Embalming can be conducted. During embalming, follow Standard Precautions including the use of additional PPE if splashing is expected (e.g. disposable gown, faceshield or goggles and facemask). Wear appropriate respiratory protection if any procedures will generate aerosols or if required for chemicals used in accordance with the manufacturer’s label. Wear heavy-duty gloves over nitrile disposable gloves if there is a risk of cuts, puncture wounds, or other injuries that break the skin. Additional information on how to safely conduct aerosol-generating procedures is in the CDC’s Postmortem Guidance. Cleaning should be conducted in accordance with manufacturer’s instructions. Products with EPA-approved emerging viral pathogens claimspdf iconexternal icon are expected to be effective against COVID-19 based on data for harder to kill viruses. Follow the manufacturer’s instructions for all cleaning and disinfection products (e.g., concentration, application method and contact time, etc.). - -After cleaning and removal of PPE, perform hand hygiene by washing hands with soap and water for at least 20 seconds or using an alcohol-based hand sanitizer that contains at least 60% alcohol if soap and water is not available. Soap and water should be used if the hands are visibly soiled. - -Decedents with COVID-19 can be buried or cremated, but check for any additional state and local requirements that may dictate the handling and disposition of the remains of individuals who have died of certain infectious diseases.","

A funeral or visitation service can be held for a person who has died of COVID-19. Funeral home workers should follow their routine infection prevention and control precautions when handling a decedent who died of COVID-19. If it is necessary to transfer a body to a bag, follow Standard Precautions, including additional personal protective equipment (PPE) if splashing of fluids is expected. For transporting a body after the body has been bagged, disinfect the outside of the bag with a product with EPA-approved emerging viral pathogens claimspdf iconexternal icon expected to be effective against COVID-19 based on data for harder to kill viruses. Follow the manufacturer’s instructions for all cleaning and disinfection products (e.g., concentration, application method and contact time, etc.). Wear disposable nitrile gloves when handling the body bag.

-

Embalming can be conducted. During embalming, follow Standard Precautions including the use of additional PPE if splashing is expected (e.g. disposable gown, faceshield or goggles and facemask). Wear appropriate respiratory protection if any procedures will generate aerosols or if required for chemicals used in accordance with the manufacturer’s label. Wear heavy-duty gloves over nitrile disposable gloves if there is a risk of cuts, puncture wounds, or other injuries that break the skin. Additional information on how to safely conduct aerosol-generating procedures is in the CDC’s Postmortem Guidance. Cleaning should be conducted in accordance with manufacturer’s instructions. Products with EPA-approved emerging viral pathogens claimspdf iconexternal icon are expected to be effective against COVID-19 based on data for harder to kill viruses. Follow the manufacturer’s instructions for all cleaning and disinfection products (e.g., concentration, application method and contact time, etc.).

-

After cleaning and removal of PPE, perform hand hygiene by washing hands with soap and water for at least 20 seconds or using an alcohol-based hand sanitizer that contains at least 60% alcohol if soap and water is not available. Soap and water should be used if the hands are visibly soiled.

-

Decedents with COVID-19 can be buried or cremated, but check for any additional state and local requirements that may dictate the handling and disposition of the remains of individuals who have died of certain infectious diseases.

"," -https://www.cdc.gov/coronavirus/2019-ncov/faq.html",Frequently Asked Questions,Center for Disease Control and Prevention (CDC),COVID-19 and Funerals,USA,,,en,2020/03/17 -What should I do if my family member died from COVID-19 while overseas?,"When a US citizen dies outside the United States, the deceased person’s next of kin or legal representative should notify US consular officials at the Department of State. Consular personnel are available 24 hours a day, 7 days a week, to provide assistance to US citizens for overseas emergencies. If a family member, domestic partner, or legal representative is in a different country from the deceased person, he or she should call the Department of State’s Office of Overseas Citizens Services in Washington, DC, from 8 am to 5 pm Eastern time, Monday through Friday, at 888-407-4747 (toll-free) or 202-501-4444. For emergency assistance after working hours or on weekends and holidays, call the Department of State switchboard at 202-647-4000 and ask to speak with the Overseas Citizens Services duty officer. In addition, the US embassyexternal icon closest to or in the country where the US citizen died can provide assistance.","

When a US citizen dies outside the United States, the deceased person’s next of kin or legal representative should notify US consular officials at the Department of State. Consular personnel are available 24 hours a day, 7 days a week, to provide assistance to US citizens for overseas emergencies. If a family member, domestic partner, or legal representative is in a different country from the deceased person, he or she should call the Department of State’s Office of Overseas Citizens Services in Washington, DC, from 8 am to 5 pm Eastern time, Monday through Friday, at 888-407-4747 (toll-free) or 202-501-4444. For emergency assistance after working hours or on weekends and holidays, call the Department of State switchboard at 202-647-4000 and ask to speak with the Overseas Citizens Services duty officer. In addition, the US embassyexternal icon closest to or in the country where the US citizen died can provide assistance.

"," -https://www.cdc.gov/coronavirus/2019-ncov/faq.html",Frequently Asked Questions,Center for Disease Control and Prevention (CDC),COVID-19 and Funerals,USA,,,en,2020/03/17 -My family member died from COVID-19 while overseas. What are the requirements for returning the body to the United States?,"CDC does not require an autopsy before the remains of a person who died overseas are returned to the United States. Depending on the circumstances surrounding the death, some countries may require an autopsy. Sources of support to the family include the local consulate or embassy, travel insurance provider, tour operator, faith-based and aid organizations, and the deceased’s employer. There likely will need to be an official identification of the body and official documents issued by the consular office. - -CDC requirements for importing human remains depend upon if the body has been embalmed, cremated, or if the person died from a quarantinable communicable disease. - -At this time, COVID-19 is a quarantinable communicable disease in the United States and the remains must meet the standards for importation found in 42 Code of Federal Regulations Part 71.55 and may be cleared, released, and authorized for entry into the United States only under the following conditions: - -The remains are cremated; OR -The remains are properly embalmed and placed in a hermetically sealed casket; OR -The remains are accompanied by a permit issued by the CDC Director. The CDC permit (if applicable) must accompany the human remains at all times during shipment. -Permits for the importation of the remains of a person known or suspected to have died from a quarantinable communicable disease may be obtained through the CDC Division of Global Migration and Quarantine by calling the CDC Emergency Operations Center at 770-488-7100 or emailing dgmqpolicyoffice@cdc.gov. -Please see CDC’s guidance for additional information.","

CDC does not require an autopsy before the remains of a person who died overseas are returned to the United States. Depending on the circumstances surrounding the death, some countries may require an autopsy. Sources of support to the family include the local consulate or embassy, travel insurance provider, tour operator, faith-based and aid organizations, and the deceased’s employer. There likely will need to be an official identification of the body and official documents issued by the consular office.

-

CDC requirements for importing human remains depend upon if the body has been embalmed, cremated, or if the person died from a quarantinable communicable disease.

-

At this time, COVID-19 is a quarantinable communicable disease in the United States and the remains must meet the standards for importation found in 42 Code of Federal Regulations Part 71.55 and may be cleared, released, and authorized for entry into the United States only under the following conditions:

-
    -
  • The remains are cremated; OR
  • -
  • The remains are properly embalmed and placed in a hermetically sealed casket; OR
  • -
  • The remains are accompanied by a permit issued by the CDC Director. The CDC permit (if applicable) must accompany the human remains at all times during shipment. -
      -
    • Permits for the importation of the remains of a person known or suspected to have died from a quarantinable communicable disease may be obtained through the CDC Division of Global Migration and Quarantine by calling the CDC Emergency Operations Center at 770-488-7100 or emailing dgmqpolicyoffice@cdc.gov.
    • -
    -
  • -
-

Please see CDC’s guidance for additional information.

"," -https://www.cdc.gov/coronavirus/2019-ncov/faq.html",Frequently Asked Questions,Center for Disease Control and Prevention (CDC),COVID-19 and Funerals,USA,,,en,2020/03/17 -What is CDC doing about COVID-19?,"This is an emerging, rapidly evolving situation and CDC will continue to provide updated information as it becomes available. CDC works 24/7 to protect people’s health. More information about CDC’s response to COVID-19 is available online.","

This is an emerging, rapidly evolving situation and CDC will continue to provide updated information as it becomes available. CDC works 24/7 to protect people’s health. More information about CDC’s response to COVID-19 is available online.

"," -https://www.cdc.gov/coronavirus/2019-ncov/faq.html",Frequently Asked Questions,Center for Disease Control and Prevention (CDC),What CDC is Doing,USA,,,en,2020/03/17 -What about imported animals or animal products?,"CDC does not have any evidence to suggest that imported animals or animal products pose a risk for spreading COVID-19 in the United States. This is a rapidly evolving situation and information will be updated as it becomes available. The U.S. Centers for Disease Control and Prevention (CDC), the U. S. Department of Agriculture (USDA), and the U.S. Fish and Wildlife Service (FWS) play distinct but complementary roles in regulating the importation of live animals and animal products into the United States. CDC regulates animals and animal products that pose a threat to human health, USDA regulatesexternal icon animals and animal products that pose a threat to agriculture; and FWS regulatesexternal icon importation of endangered species and wildlife that can harm the health and welfare of humans, the interests of agriculture, horticulture, or forestry, and the welfare and survival of wildlife resources.","

CDC does not have any evidence to suggest that imported animals or animal products pose a risk for spreading COVID-19 in the United States. This is a rapidly evolving situation and information will be updated as it becomes available. The U.S. Centers for Disease Control and Prevention (CDC), the U. S. Department of Agriculture (USDA), and the U.S. Fish and Wildlife Service (FWS) play distinct but complementary roles in regulating the importation of live animals and animal products into the United States. CDC regulates animals and animal products that pose a threat to human health, USDA regulatesexternal icon animals and animal products that pose a threat to agriculture; and FWS regulatesexternal icon importation of endangered species and wildlife that can harm the health and welfare of humans, the interests of agriculture, horticulture, or forestry, and the welfare and survival of wildlife resources.

"," -https://www.cdc.gov/coronavirus/2019-ncov/faq.html",Frequently Asked Questions,Center for Disease Control and Prevention (CDC),COVID-19 and Animals,USA,,,en,2020/03/17 -Can I travel to the United States with dogs or import dogs into the United States during the COVID-19 outbreak?,"Please refer to CDC’s requirements for bringing a dog to the United States. The current requirements for rabies vaccination apply to dogs imported from China, a high-risk country for rabies.","

Please refer to CDC’s requirements for bringing a dog to the United States. The current requirements for rabies vaccination apply to dogs imported from China, a high-risk country for rabies.

"," -https://www.cdc.gov/coronavirus/2019-ncov/faq.html",Frequently Asked Questions,Center for Disease Control and Prevention (CDC),COVID-19 and Animals,USA,,,en,2020/03/17 -Should I be concerned about pets or other animals and COVID-19?,"While this virus seems to have emerged from an animal source, it is now spreading from person-to-person in China. There is no reason to think that any animals including pets in the United States might be a source of infection with this new coronavirus. To date, CDC has not received any reports of pets or other animals becoming sick with COVID-19. At this time, there is no evidence that companion animals including pets can spread COVID-19. However, since animals can spread other diseases to people, it’s always a good idea to wash your hands after being around animals. For more information on the many benefits of pet ownership, as well as staying safe and healthy around animals including pets, livestock, and wildlife, visit CDC’s Healthy Pets, Healthy People website.","

While this virus seems to have emerged from an animal source, it is now spreading from person-to-person in China. There is no reason to think that any animals including pets in the United States might be a source of infection with this new coronavirus. To date, CDC has not received any reports of pets or other animals becoming sick with COVID-19. At this time, there is no evidence that companion animals including pets can spread COVID-19. However, since animals can spread other diseases to people, it’s always a good idea to wash your hands after being around animals. For more information on the many benefits of pet ownership, as well as staying safe and healthy around animals including pets, livestock, and wildlife, visit CDC’s Healthy Pets, Healthy People website.

-"," -https://www.cdc.gov/coronavirus/2019-ncov/faq.html",Frequently Asked Questions,Center for Disease Control and Prevention (CDC),COVID-19 and Animals,USA,,,en,2020/03/17 -Should I avoid contact with pets or other animals if I am sick with COVID-19?,"You should restrict contact with pets and other animals while you are sick with COVID-19, just like you would around other people. Although there have not been reports of pets or other animals becoming sick with COVID-19, it is still recommended that people sick with COVID-19 limit contact with animals until more information is known about the virus. When possible, have another member of your household care for your animals while you are sick. If you are sick with COVID-19, avoid contact with your pet, including petting, snuggling, being kissed or licked, and sharing food. If you must care for your pet or be around animals while you are sick, wash your hands before and after you interact with pets and wear a facemask","

You should restrict contact with pets and other animals while you are sick with COVID-19, just like you would around other people. Although there have not been reports of pets or other animals becoming sick with COVID-19, it is still recommended that people sick with COVID-19 limit contact with animals until more information is known about the virus. When possible, have another member of your household care for your animals while you are sick. If you are sick with COVID-19, avoid contact with your pet, including petting, snuggling, being kissed or licked, and sharing food. If you must care for your pet or be around animals while you are sick, wash your hands before and after you interact with pets and wear a facemask.

"," -https://www.cdc.gov/coronavirus/2019-ncov/faq.html",Frequently Asked Questions,Center for Disease Control and Prevention (CDC),COVID-19 and Animals,USA,,,en,2020/03/17 -"What precautions should be taken for animals that have recently been imported (for example, by shelters, rescue groups, or as personal pets) from China?","Animals imported from China will need to meet CDC and USDA requirements for entering the United States. At this time, there is no evidence that companion animals including pets can spread COVID-19. As with any animal introduced to a new environment, animals recently imported from China should be observed daily for signs of illness. If an animal becomes ill, the animal should be examined by a veterinarian. Call your local veterinary clinic before bringing the animal into the clinic and let them know that the animal was recently in China.","

Animals imported from China will need to meet CDC and USDAexternal icon requirements for entering the United States. At this time, there is no evidence that companion animals including pets can spread COVID-19. As with any animal introduced to a new environment, animals recently imported from China should be observed daily for signs of illness. If an animal becomes ill, the animal should be examined by a veterinarian. Call your local veterinary clinic before bringing the animal into the clinic and let them know that the animal was recently in China.

"," -https://www.cdc.gov/coronavirus/2019-ncov/faq.html",Frequently Asked Questions,Center for Disease Control and Prevention (CDC),COVID-19 and Animals,USA,,,en,2020/03/17 -Should I cancel my international trip?,"CDC provides recommendations for international travel, including guidance on when to consider postponing or canceling travel. Most of the time, this guidance is provided through travel health notices and is based on the potential health risks associated with traveling to a certain destination. - -Travel health notices are designated as Level 1, 2, or 3, depending on the situation in that destination. (See below for what each level means). A list of destinations with coronavirus disease 2019(COVID-19) travel health notices is available at www.cdc.gov/coronavirus/2019-ncov/travelers/index.html. - -Warning Level 3: CDC recommends travelers avoid all nonessential travel to these destinations. -Alert Level 2: CDC recommends older adults and people of any age with serious chronic medical conditions consider postponing nonessential travel. -Watch Level 1: CDC does not recommend canceling or postponing travel to destinations with, but it is important to take steps to prevent getting and spreading diseases during travel. -CDC also recommends all travelers, defer all cruise travel worldwide. This is particularly important for older adults and people of any age with serious chronic medical conditions. - -If you do travel, take the following steps to help reduce your chances of getting sick: - -Avoid contact with sick people. -Avoid touching your eyes, nose, or mouth with unwashed hands. -Wash your hands often with soap and water for at least 20 seconds or using an alcohol-based hand sanitizer that contains at least 60% alcohol. Soap and water should be used if hands are visibly dirty. -It is especially important to clean hands after going to the bathroom; before eating; and after coughing, sneezing or blowing your nose. -Make sure you are up to date with your routine vaccinations, including measles-mumps-rubella (MMR) vaccine and the seasonal flu vaccine. - -The COVID-19 pandemic is a rapidly evolving situation and CDC guidance is reviewed daily and updated frequently. - - -","

CDC provides recommendations for international travel, including guidance on when to consider postponing or canceling travel. Most of the time, this guidance is provided through travel health notices and is based on the potential health risks associated with traveling to a certain destination.

-

Travel health notices are designated as Level 1, 2, or 3, depending on the situation in that destination. (See below for what each level means). A list of destinations with coronavirus disease 2019(COVID-19) travel health notices is available at www.cdc.gov/coronavirus/2019-ncov/travelers/index.html.

-
    -
  • Warning Level 3: CDC recommends travelers avoid all nonessential travel to these destinations.
  • -
  • Alert Level 2: CDC recommends older adults and people of any age with serious chronic medical conditions consider postponing nonessential travel.
  • -
  • Watch Level 1: CDC does not recommend canceling or postponing travel to destinations with, but it is important to take steps to prevent getting and spreading diseases during travel.
  • -
-

CDC also recommends all travelers, defer all cruise travel worldwide. This is particularly important for older adults and people of any age with serious chronic medical conditions.

-

If you do travel, take the following steps to help reduce your chances of getting sick:

-
    -
  • Avoid contact with sick people.
  • -
  • Avoid touching your eyes, nose, or mouth with unwashed hands.
  • -
  • Wash your hands often with soap and water for at least 20 seconds or using an alcohol-based hand sanitizer that contains at least 60% alcohol. Soap and water should be used if hands are visibly dirty. -
      -
    • It is especially important to clean hands after going to the bathroom; before eating; and after coughing, sneezing or blowing your nose.
    • -
    -
  • -
-

Make sure you are up to date with your routine vaccinations, including measles-mumps-rubella (MMR) vaccine and the seasonal flu vaccine.

-

The COVID-19 pandemic is a rapidly evolving situation and CDC guidance is reviewed daily and updated frequently.

",https://www.cdc.gov/coronavirus/2019-ncov/travelers/faqs.html,Travel: Frequently Asked Questions and Answers,Center for Disease Control and Prevention (CDC),Cancelling or Postponing Travel,USA,,,en,2020/03/17 -Are international layovers included in CDC's recommendation to avoid nonessential travel?,"Yes. Airport layovers in international destinations with a level 3 travel health notice are included in CDC’s recommendation to avoid nonessential travel. If a layover is unavoidable, CDC recommends you not leave the airport. Even if you don’t leave the airport during your layover, you may still be subject to screening and monitoring when entering the United States. - -A layover is anytime you exit a plane when traveling to your final destination.","

Yes. Airport layovers in international destinations with a level 3 travel health notice are included in CDC’s recommendation to avoid nonessential travel. If a layover is unavoidable, CDC recommends you not leave the airport. Even if you don’t leave the airport during your layover, you may still be subject to screening and monitoring when entering the United States.

-

A layover is anytime you exit a plane when traveling to your final destination.

",https://www.cdc.gov/coronavirus/2019-ncov/travelers/faqs.html,Travel: Frequently Asked Questions and Answers,Center for Disease Control and Prevention (CDC),Cancelling or Postponing Travel,USA,,,en,2020/03/17 -What is the risk of getting COVID-19 on an airplane?,"Because of how air circulates and is filtered on airplanes, most viruses and other germs do not spread easily. Although the risk of infection on an airplane is low, try to avoid contact with sick passengers and wash your hands often with soap and water for at least 20 seconds or use hand sanitizer that contains at least 60% alcohol. - -For more information: Exposure Risk During Travel","

Because of how air circulates and is filtered on airplanes, most viruses and other germs do not spread easily. Although the risk of infection on an airplane is low, try to avoid contact with sick passengers and wash your hands often with soap and water for at least 20 seconds or use hand sanitizer that contains at least 60% alcohol.

-

For more information: Exposure Risk During Travel

",https://www.cdc.gov/coronavirus/2019-ncov/travelers/faqs.html,Travel: Frequently Asked Questions and Answers,Center for Disease Control and Prevention (CDC),Air or Cruise Travel,USA,,,en,2020/03/17 -What happens if there is a sick passenger on an international or domestic flight?,"Under current federal regulations, pilots must report all illnesses and deaths to CDC before arriving to a US destination. According to CDC disease protocols, if a sick traveler is considered to be a public health risk, CDC works with local and state health departments and international public health agencies to contact passengers and crew exposed to that sick traveler. - -Be sure to give the airline your current contact information when booking your ticket so you can be notified if you are exposed to a sick traveler on a flight. - -For more information: Contact Investigation","

Under current federal regulations, pilots must report all illnesses and deaths to CDC before arriving to a US destination. According to CDC disease protocols, if a sick traveler is considered to be a public health risk, CDC works with local and state health departments and international public health agencies to contact passengers and crew exposed to that sick traveler.

-

Be sure to give the airline your current contact information when booking your ticket so you can be notified if you are exposed to a sick traveler on a flight.

-

For more information: Contact Investigation

",https://www.cdc.gov/coronavirus/2019-ncov/travelers/faqs.html,Travel: Frequently Asked Questions and Answers,Center for Disease Control and Prevention (CDC),Air or Cruise Travel,USA,,,en,2020/03/17 -Should I go on a cruise?,"CDC recommends all travelers, particularly older adults and people of any age with serious chronic medical conditions defer all cruise ship travel worldwide. Recent reports of COVID-19 on cruise ships highlight the risk of infection to cruise ship passengers and crew. Like many other viruses, COVID-19 appears to spread more easily between people in close quarters aboard ships.","

CDC recommends all travelers, particularly older adults and people of any age with serious chronic medical conditions defer all cruise ship travel worldwide. Recent reports of COVID-19 on cruise ships highlight the risk of infection to cruise ship passengers and crew. Like many other viruses, COVID-19 appears to spread more easily between people in close quarters aboard ships.

",https://www.cdc.gov/coronavirus/2019-ncov/travelers/faqs.html,Travel: Frequently Asked Questions and Answers,Center for Disease Control and Prevention (CDC),Air or Cruise Travel,USA,,,en,2020/03/17 -Should travelers wear facemasks?,"CDC does not recommend that healthy travelers wear facemasks to protect themselves from COVID-19. Wear a facemask only if you are sick and coughing or sneezing to help prevent the spread of respiratory viruses to others. If you are well, it is more important to take these important steps to reduce your chances of getting sick: - -Avoid close contact with people who are sick. -Avoid touching your eyes, nose, and mouth with unwashed hands. -To the extent possible, avoid touching high-touch surfaces in public places – elevator buttons, door handles, handrails, handshaking with people, etc. -Use a tissue or your sleeve to cover your hand or finger if you must touch something. -Wash your hands after touching surfaces in public places. -Clean AND disinfect frequently touched surfaces daily. This includes tables, doorknobs, light switches, countertops, handles, desks, phones, keyboards, toilets, faucets, and sinks. -Wash your hands often with soap and water for at least 20 seconds, especially after going to the bathroom; before eating; and after blowing your nose, coughing, or sneezing. -If soap and water aren’t available, use a hand sanitizer that contains at least 60% alcohol.","

CDC does not recommend that healthy travelers wear facemasks to protect themselves from COVID-19. Wear a facemask only if you are sick and coughing or sneezing to help prevent the spread of respiratory viruses to others. If you are well, it is more important to take these important steps to reduce your chances of getting sick:

-
    -
  • Avoid close contact with people who are sick.
  • -
  • Avoid touching your eyes, nose, and mouth with unwashed hands.
  • -
  • To the extent possible, avoid touching high-touch surfaces in public places – elevator buttons, door handles, handrails, handshaking with people, etc. -
      -
    • Use a tissue or your sleeve to cover your hand or finger if you must touch something.
    • -
    • Wash your hands after touching surfaces in public places.
    • -
    -
  • -
  • Clean AND disinfect frequently touched surfaces daily. This includes tables, doorknobs, light switches, countertops, handles, desks, phones, keyboards, toilets, faucets, and sinks.
  • -
  • Wash your hands often with soap and water for at least 20 seconds, especially after going to the bathroom; before eating; and after blowing your nose, coughing, or sneezing.
  • -
  • If soap and water aren’t available, use a hand sanitizer that contains at least 60% alcohol.
  • -
",https://www.cdc.gov/coronavirus/2019-ncov/travelers/faqs.html,Travel: Frequently Asked Questions and Answers,Center for Disease Control and Prevention (CDC),Air or Cruise Travel,USA,,,en,2020/03/17 -What can I expect when departing other countries?,"Be aware that some countries are conducting exit screening for all passengers leaving their country. Before being permitted to board a departing flight, you may have your temperature taken and be asked questions about your travel history and health.","

Be aware that some countries are conducting exit screening for all passengers leaving their country. Before being permitted to board a departing flight, you may have your temperature taken and be asked questions about your travel history and health.

",https://www.cdc.gov/coronavirus/2019-ncov/travelers/faqs.html,Travel: Frequently Asked Questions and Answers,Center for Disease Control and Prevention (CDC),Returning from Travel,USA,,,en,2020/03/17 -What can I expect when arriving to the United States?,"At this time, travel restrictions and entry screening only apply to travelers arriving from countries with a level 3 travel health notice. [Note: US policies are subject to change as the COVID-19 pandemic evolves.] - -This means that if you traveled from countries other than those listed above, you: - -Won’t be subject to additional health screening upon arrival in the United States, and -Won’t be under mandatory quarantine orders upon entry to the United States. -If you are arriving to the United States from a country with level 2 travel health notice, you will be asked to monitor your health and practice social distancing. Social distancing means staying out of crowded places, avoiding group gatherings, and maintaining distance (approximately 6 feet or 2 meters) from others when possible. - -If you are coming from an international destination with a level 3 Travel Health Notice, you will be asked to stay home for 14 days from the time you return from travel, monitor your health and practice social distancing. Social distancing means staying out of crowded places, avoiding group gatherings, and maintaining distance (approximately 6 feet or 2 meters) from others when possible.","

At this time, travel restrictions and entry screening only apply to travelers arriving from countries with a level 3 travel health notice. [Note: US policies are subject to change as the COVID-19 pandemic evolves.]

-

This means that if you traveled from countries other than those listed above, you:

-
    -
  • Won’t be subject to additional health screening upon arrival in the United States, and
  • -
  • Won’t be under mandatory quarantine orders upon entry to the United States.
  • -
-

If you are arriving to the United States from a country with level 2 travel health notice, you will be asked to monitor your health and practice social distancing. Social distancing means staying out of crowded places, avoiding group gatherings, and maintaining distance (approximately 6 feet or 2 meters) from others when possible.

-

If you are coming from an international destination with a level 3 Travel Health Notice, you will be asked to stay home for 14 days from the time you return from travel, monitor your health and practice social distancing. Social distancing means staying out of crowded places, avoiding group gatherings, and maintaining distance (approximately 6 feet or 2 meters) from others when possible.

",https://www.cdc.gov/coronavirus/2019-ncov/travelers/faqs.html,Travel: Frequently Asked Questions and Answers,Center for Disease Control and Prevention (CDC),Returning from Travel,USA,,,en,2020/03/17 -How are travelers from countries with a level 3 travel health notice being screened when they enter the United States?,"At this time, American citizens, lawful permanent residents, and family members (as specified in the Presidential Proclamationexternal icon) who have been in countries with a Level 3 travel health notice within 14 days prior to their arrival will be allowed to enter the United States. Travelers from some countries with a level 3 travel health notice are being re-directed to certain airports and are screened for COVID-19 symptoms such as fever, cough or trouble breathing and asked questions about their travel and possible exposure to COVID-19. Travelers without symptoms will be told to stay home and practice social distancing. - -More information for travelers from countries with a level 3 travel health notice is available here.","

At this time, American citizens, lawful permanent residents, and family members (as specified in the Presidential Proclamationexternal icon) who have been in countries with a Level 3 travel health notice within 14 days prior to their arrival will be allowed to enter the United States. Travelers from some countries with a level 3 travel health notice are being re-directed to certain airports and are screened for COVID-19 symptoms such as fever, cough or trouble breathing and asked questions about their travel and possible exposure to COVID-19. Travelers without symptoms will be told to stay home and practice social distancing.

-

More information for travelers from countries with a level 3 travel health notice is available here.

",https://www.cdc.gov/coronavirus/2019-ncov/travelers/faqs.html,Travel: Frequently Asked Questions and Answers,Center for Disease Control and Prevention (CDC),Returning from Travel,USA,,,en,2020/03/17 -After arriving from a country with a level 3 travel health notice related to COVID-19 when can I return to work?,"Currently, any traveler arriving to the United States after leaving a country with Level 3 travel health notice related to COVID-19 in the past 14 days will have some level of restrictions on their movements. All travelers from these countries should stay home and practice social distancing for 14 days from the time they left the outbreak area. - -Foreign nationals who have visited China, Iran, and most European Countries in the past 14 days are temporarily not allowed to enter the United States.","

Currently, any traveler arriving to the United States after leaving a country with Level 3 travel health notice related to COVID-19 in the past 14 days will have some level of restrictions on their movements. All travelers from these countries should stay home and practice social distancing for 14 days from the time they left the outbreak area.

-

Foreign nationals who have visited China, Iran, and most European Countries in the past 14 days are temporarily not allowed to enter the United States.

",https://www.cdc.gov/coronavirus/2019-ncov/travelers/faqs.html,Travel: Frequently Asked Questions and Answers,Center for Disease Control and Prevention (CDC),Returning from Travel,USA,,,en,2020/03/17 -What if I recently traveled and get sick?,See CDC’s website about what to do if you get sick.,"

See CDC’s website about what to do if you get sick.

",https://www.cdc.gov/coronavirus/2019-ncov/travelers/faqs.html,Travel: Frequently Asked Questions and Answers,Center for Disease Control and Prevention (CDC),Returning from Travel,USA,,,en,2020/03/17 -How can my family and I prepare for COVID-19?,"Create a household plan of action to help protect your health and the health of those you care about in the event of an outbreak of COVID-19 in your community: - -Talk with the people who need to be included in your plan, and discuss what to do if a COVID-19 outbreak occurs in your community. -Plan ways to care for those who might be at greater risk for serious complications, particularly older adults and those with severe chronic medical conditions like heart, lung or kidney disease. -Make sure they have access to several weeks of medications and supplies in case you need to stay home for prolonged periods of time. -Get to know your neighbors and find out if your neighborhood has a website or social media page to stay connected. -Create a list of local organizations that you and your household can contact in the event you need access to information, healthcare services, support, and resources. -Create an emergency contact list of family, friends, neighbors, carpool drivers, health care providers, teachers, employers, the local public health department, and other community resources.","

Create a household plan of action to help protect your health and the health of those you care about in the event of an outbreak of COVID-19 in your community:

-
    -
  • Talk with the people who need to be included in your plan, and discuss what to do if a COVID-19 outbreak occurs in your community.
  • -
  • Plan ways to care for those who might be at greater risk for serious complications, particularly older adults and those with severe chronic medical conditions like heart, lung or kidney disease. -
      -
    • Make sure they have access to several weeks of medications and supplies in case you need to stay home for prolonged periods of time.
    • -
    -
  • -
  • Get to know your neighbors and find out if your neighborhood has a website or social media page to stay connected.
  • -
  • Create a list of local organizations that you and your household can contact in the event you need access to information, healthcare services, support, and resources.
  • -
  • Create an emergency contact list of family, friends, neighbors, carpool drivers, health care providers, teachers, employers, the local public health department, and other community resources.
  • -
",https://www.cdc.gov/coronavirus/2019-ncov/prepare/faq.html,FAQs for Individuals and Families,Center for Disease Control and Prevention (CDC),Preparing your Home for COVID-19,USA,,,en,2020/03/17 -What steps can my family take to reduce our risk of getting COVID-19?,"Practice everyday preventive actions to help reduce your risk of getting sick and remind everyone in your home to do the same. These actions are especially important for older adults and people who have severe chronic medical conditions: - -Avoid close contact with people who are sick. -Stay home when you are sick, except to get medical care. -Cover your coughs and sneezes with a tissue and throw the tissue in the trash. -Wash your hands often with soap and water for at least 20 seconds, especially after blowing your nose, coughing, or sneezing; going to the bathroom; and before eating or preparing food. -If soap and water are not readily available, use an alcohol-based hand sanitizer with at least 60% alcohol. Always wash hands with soap and water if hands are visibly dirty. -Clean and disinfect frequently touched surfaces and objects -(e.g., tables, countertops, light switches, doorknobs, and cabinet handles).","

Practice everyday preventive actions to help reduce your risk of getting sick and remind everyone in your home to do the same. These actions are especially important for older adults and people who have severe chronic medical conditions:

-
    -
  • Avoid close contact with people who are sick.
  • -
  • Stay home when you are sick, except to get medical care.
  • -
  • Cover your coughs and sneezes with a tissue and throw the tissue in the trash.
  • -
  • Wash your hands often with soap and water for at least 20 seconds, especially after blowing your nose, coughing, or sneezing; going to the bathroom; and before eating or preparing food.
  • -
  • If soap and water are not readily available, use an alcohol-based hand sanitizer with at least 60% alcohol. Always wash hands with soap and water if hands are visibly dirty.
  • -
  • Clean and disinfect frequently touched surfaces and objects
    -(e.g., tables, countertops, light switches, doorknobs, and cabinet handles).
  • -
",https://www.cdc.gov/coronavirus/2019-ncov/prepare/faq.html,FAQs for Individuals and Families,Center for Disease Control and Prevention (CDC),Preparing your Home for COVID-20,USA,,,en,2020/03/17 -What should I do if someone in my house gets sick with COVID-19?,"Most people who get COVID-19 will be able to recover at home. CDC has directions for people who are recovering at home and their caregivers, including: - -Stay home when you are sick, except to get medical care. -If you develop emergency warning signs for COVID-19 get medical attention immediately. In adults, emergency warning signs*: -Difficulty breathing or shortness of breath -Persistent pain or pressure in the chest -New confusion or inability to arouse -Bluish lips or face -*This list is not all inclusive. Please consult your medical provider for any other symptom that is severe or concerning. -Use a separate room and bathroom for sick household members (if possible). -Clean hands regularly by handwashing with soap and water or using an alcohol-based hand sanitizer with at least 60% alcohol. -Provide your sick household member with clean disposable facemasks to wear at home, if available, to help prevent spreading COVID-19 to others. -Clean the sick room and bathroom, as needed, to avoid unnecessary contact with the sick person. -Avoid sharing personal items like utensils, food, and drinks.","

Most people who get COVID-19 will be able to recover at home. CDC has directions for people who are recovering at home and their caregivers, including:

-
    -
  • Stay home when you are sick, except to get medical care.
  • -
  • If you develop emergency warning signs for COVID-19 get medical attention immediately. In adults, emergency warning signs*:
  • -
-
    -
  • -
      -
    • Difficulty breathing or shortness of breath
    • -
    • Persistent pain or pressure in the chest
    • -
    • New confusion or inability to arouse
    • -
    • Bluish lips or face
    • -
    • *This list is not all inclusive. Please consult your medical provider for any other symptom that is severe or concerning.
    • -
    -
  • -
-
    -
  • Use a separate room and bathroom for sick household members (if possible).
  • -
  • Clean hands regularly by handwashing with soap and water or using an alcohol-based hand sanitizer with at least 60% alcohol.
  • -
  • Provide your sick household member with clean disposable facemasks to wear at home, if available, to help prevent spreading COVID-19 to others.
  • -
  • Clean the sick room and bathroom, as needed, to avoid unnecessary contact with the sick person.
  • -
  • Avoid sharing personal items like utensils, food, and drinks.
  • -
",https://www.cdc.gov/coronavirus/2019-ncov/prepare/faq.html,FAQs for Individuals and Families,Center for Disease Control and Prevention (CDC),Preparing your Home for COVID-21,USA,,,en,2020/03/17 -"How can I prepare in case my child's school, childcare facility, or university is dismissed?","Talk to the school or facility about their emergency operations plan. Understand the plan for continuing education and social services (such as student meal programs) during school dismissals. If your child attends a college or university, encourage them to learn about the school’s plan for a COVID-19 outbreak.","

Talk to the school or facility about their emergency operations plan. Understand the plan for continuing education and social services (such as student meal programs) during school dismissals. If your child attends a college or university, encourage them to learn about the school’s plan for a COVID-19 outbreak.

",https://www.cdc.gov/coronavirus/2019-ncov/prepare/faq.html,FAQs for Individuals and Families,Center for Disease Control and Prevention (CDC),Preparing your Home for COVID-22,USA,,,en,2020/03/17 -How can I prepare for COVID-19 at work?,"Plan for potential changes at your workplace. Talk to your employer about their emergency operations plan, including sick-leave policies and telework options. Learn how businesses and employers can plan for and respond to COVID-19.","

Plan for potential changes at your workplace. Talk to your employer about their emergency operations plan, including sick-leave policies and telework options. Learn how businesses and employers can plan for and respond to COVID-19.

",https://www.cdc.gov/coronavirus/2019-ncov/prepare/faq.html,FAQs for Individuals and Families,Center for Disease Control and Prevention (CDC),Preparing your Home for COVID-23,USA,,,en,2020/03/17 -Should I use soap and water or a hand sanitizer to protect against COVID-19?,"Handwashing is one of the best ways to protect yourself and your family from getting sick. Wash your hands often with soap and water for at least 20 seconds, especially after blowing your nose, coughing, or sneezing; going to the bathroom; and before eating or preparing food. If soap and water are not readily available, use an alcohol-based hand sanitizer with at least 60% alcohol.","

Handwashing is one of the best ways to protect yourself and your family from getting sick. Wash your hands often with soap and water for at least 20 seconds, especially after blowing your nose, coughing, or sneezing; going to the bathroom; and before eating or preparing food. If soap and water are not readily available, use an alcohol-based hand sanitizer with at least 60% alcohol.

",https://www.cdc.gov/coronavirus/2019-ncov/prepare/faq.html,FAQs for Individuals and Families,Center for Disease Control and Prevention (CDC),Preparing your Home for COVID-24,USA,,,en,2020/03/17 -What cleaning products should I use to protect against COVID-19?,"Clean and disinfect frequently touched surfaces such as tables, doorknobs, light switches, countertops, handles, desks, phones, keyboards, toilets, faucets, and sinks. If surfaces are dirty, clean them using detergent or soap and water prior to disinfection. To disinfect, most common EPA-registered household disinfectants will work. See CDC’s recommendations for household cleaning and disinfection.","

Clean and disinfect frequently touched surfaces such as tables, doorknobs, light switches, countertops, handles, desks, phones, keyboards, toilets, faucets, and sinks.  If surfaces are dirty, clean them using detergent or soap and water prior to disinfection. To disinfect, most common EPA-registered household disinfectants will work. See CDC’s recommendations for household cleaning and disinfection.

",https://www.cdc.gov/coronavirus/2019-ncov/prepare/faq.html,FAQs for Individuals and Families,Center for Disease Control and Prevention (CDC),Preparing your Home for COVID-25,USA,,,en,2020/03/17 -What should I do if there is an outbreak in my community?,"During an outbreak, stay calm and put your preparedness plan to work. Follow the steps below: - -Protect yourself and others. - -Stay home if you are sick. Keep away from people who are sick. Limit close contact with others as much as possible (about 6 feet). -Put your household plan into action. - -Stay informed about the local COVID-19 situation. Be aware of temporary school dismissals in your area, as this may affect your household’s daily routine. -Continue practicing everyday preventive actions. Cover coughs and sneezes with a tissue and wash your hands often with soap and water for at least 20 seconds. If soap and water are not available, use a hand sanitizer that contains 60% alcohol. Clean frequently touched surfaces and objects daily using a regular household detergent and water. -Notify your workplace as soon as possible if your regular work schedule changes. Ask to work from home or take leave if you or someone in your household gets sick with COVID-19 symptoms, or if your child’s school is dismissed temporarily. Learn how businesses and employers can plan for and respond to COVID-19. -Stay in touch with others by phone or email. If you have a chronic medical condition and live alone, ask family, friends, and health care providers to check on you during an outbreak. Stay in touch with family and friends, especially those at increased risk of developing severe illness, such as older adults and people with severe chronic medical conditions.","

During an outbreak, stay calm and put your preparedness plan to work. Follow the steps below:

-

Protect yourself and others.

-
    -
  • Stay home if you are sick. Keep away from people who are sick. Limit close contact with others as much as possible (about 6 feet).
  • -
-

Put your household plan into action.

-
    -
  • Stay informed about the local COVID-19 situation. Be aware of temporary school dismissals in your area, as this may affect your household’s daily routine.
  • -
-
    -
  • Continue practicing everyday preventive actions. Cover coughs and sneezes with a tissue and wash your hands often with soap and water for at least 20 seconds. If soap and water are not available, use a hand sanitizer that contains 60% alcohol. Clean frequently touched surfaces and objects daily using a regular household detergent and water.
  • -
  • Notify your workplace as soon as possible if your regular work schedule changes. Ask to work from home or take leave if you or someone in your household gets sick with COVID-19 symptoms, or if your child’s school is dismissed temporarily. Learn how businesses and employers can plan for and respond to COVID-19.
  • -
  • Stay in touch with others by phone or email. If you have a chronic medical condition and live alone, ask family, friends, and health care providers to check on you during an outbreak. Stay in touch with family and friends, especially those at increased risk of developing severe illness, such as older adults and people with severe chronic medical conditions.
  • -
",https://www.cdc.gov/coronavirus/2019-ncov/prepare/faq.html,FAQs for Individuals and Families,Center for Disease Control and Prevention (CDC),In Case of an Outbreak in Your Community,USA,,,en,2020/03/17 -How do I prepare my children in case of COVID-19 outbreak in our community?,"Outbreaks can be stressful for adults and children. Talk with your children about the outbreak, try to stay calm, and reassure them that they are safe. If appropriate, explain to them that most illness from COVID-19 seems to be mild. Children respond differently to stressful situations than adults.","

Outbreaks can be stressful for adults and children. Talk with your children about the outbreak, try to stay calm, and reassure them that they are safe. If appropriate, explain to them that most illness from COVID-19 seems to be mild. Children respond differently to stressful situations than adults.

",https://www.cdc.gov/coronavirus/2019-ncov/prepare/faq.html,FAQs for Individuals and Families,Center for Disease Control and Prevention (CDC),In Case of an Outbreak in Your Community,USA,,,en,2020/03/17 -What steps should parents take to protect children during a community outbreak?,"This is a new virus and we are still learning about it, but so far, there does not seem to be a lot of illness in children. Most illness, including serious illness, is happening in adults of working age and older adults. If there cases of COVID-19 that impact your child’s school, the school may dismiss students. Keep track of school dismissals in your community. Read or watch local media sources that report school dismissals. If schools are dismissed temporarily, use alternative childcare arrangements, if needed. - -If your child/children become sick with COVID-19, notify their childcare facility or school. Talk with teachers about classroom assignments and activities they can do from home to keep up with their schoolwork. - -Discourage children and teens from gathering in other public places while school is dismissed to help slow the spread of COVID-19 in the community.","

This is a new virus and we are still learning about it, but so far, there does not seem to be a lot of illness in children. Most illness, including serious illness, is happening in adults of working age and older adults. If there cases of COVID-19 that impact your child’s school, the school may dismiss students. Keep track of school dismissals in your community. Read or watch local media sources that report school dismissals. If schools are dismissed temporarily, use alternative childcare arrangements, if needed.

-

If your child/children become sick with COVID-19, notify their childcare facility or school. Talk with teachers about classroom assignments and activities they can do from home to keep up with their schoolwork.

-

Discourage children and teens from gathering in other public places while school is dismissed to help slow the spread of COVID-19 in the community.

",https://www.cdc.gov/coronavirus/2019-ncov/prepare/faq.html,FAQs for Individuals and Families,Center for Disease Control and Prevention (CDC),In Case of an Outbreak in Your Community,USA,,,en,2020/03/17 -Will schools be dismissed if there is an outbreak in my community?,"Depending on the situation, public health officials may recommend community actions to reduce exposures to COVID-19, such as school dismissals. Read or watch local media sources that report school dismissals or and watch for communication from your child’s school. If schools are dismissed temporarily, discourage students and staff from gathering or socializing anywhere, like at a friend’s house, a favorite restaurant, or the local shopping mall.","

Depending on the situation, public health officials may recommend community actions to reduce exposures to COVID-19, such as school dismissals. Read or watch local media sources that report school dismissals or and watch for communication from your child’s school. If schools are dismissed temporarily, discourage students and staff from gathering or socializing anywhere, like at a friend’s house, a favorite restaurant, or the local shopping mall.

",https://www.cdc.gov/coronavirus/2019-ncov/prepare/faq.html,FAQs for Individuals and Families,Center for Disease Control and Prevention (CDC),In Case of an Outbreak in Your Community,USA,,,en,2020/03/17 -Should I go to work if there is an outbreak in my community?,"Follow the advice of your local health officials. Stay home if you can. Talk to your employer to discuss working from home, taking leave if you or someone in your household gets sick with COVID-19 symptoms, or if your child’s school is dismissed temporarily. Employers should be aware that more employees may need to stay at home to care for sick children or other sick family members than is usual in case of a community outbreak.","

Follow the advice of your local health officials. Stay home if you can. Talk to your employer to discuss working from home, taking leave if you or someone in your household gets sick with COVID-19 symptoms, or if your child’s school is dismissed temporarily. Employers should be aware that more employees may need to stay at home to care for sick children or other sick family members than is usual in case of a community outbreak.

",https://www.cdc.gov/coronavirus/2019-ncov/prepare/faq.html,FAQs for Individuals and Families,Center for Disease Control and Prevention (CDC),In Case of an Outbreak in Your Community,USA,,,en,2020/03/17 -What is the risk of my child becoming sick with COVID-19?,"Based on available evidence, children do not appear to be at higher risk for COVID-19 than adults. While some children and infants have been sick with COVID-19, adults make up most of the known cases to date. You can learn more about who is most at risk for health problems if they have COVID-19 infection on CDC’s current Risk Assessment page.","

A: Based on available evidence, children do not appear to be at higher risk for COVID-19 than adults. While some children and infants have been sick with COVID-19, adults make up most of the known cases to date. You can learn more about who is most at risk for health problems if they have COVID-19 infection on CDC’s current Risk Assessment page.

",https://www.cdc.gov/coronavirus/2019-ncov/prepare/children-faq.html,Coronavirus Disease-2019 (COVID-19) and Children,Center for Disease Control and Prevention (CDC),Children,USA,,,en,2020/03/17 -How can I protect my child from COVID-19 infection?,"You can encourage your child to help stop the spread of COVID-19 by teaching them to do the same things everyone should do to stay healthy. - -Clean hands often using soap and water or alcohol-based hand sanitizer -Avoid people who are sick (coughing and sneezing) -Clean and disinfect high-touch surfaces daily in household common areas (e.g. tables, hard-backed chairs, doorknobs, light switches, remotes, handles, desks, toilets, sinks) -Launder items including washable plush toys as appropriate in accordance with the manufacturer’s instructions. If possible, launder items using the warmest appropriate water setting for the items and dry items completely. Dirty laundry from an ill person can be washed with other people’s items. -You can find additional information on preventing COVID-19 at Prevention for 2019 Novel Coronavirus and at Preventing COVID-19 Spread in Communities. Additional information on how COVID-19 is spread is available at How COVID-19 Spreads.","

You can encourage your child to help stop the spread of COVID-19 by teaching them to do the same things everyone should do to stay healthy.

-
    -
  • Clean hands often using soap and water or alcohol-based hand sanitizer
  • -
  • Avoid people who are sick (coughing and sneezing)
  • -
  • Clean and disinfect high-touch surfaces daily in household common areas (e.g. tables, hard-backed chairs, doorknobs, light switches, remotes, handles, desks, toilets, sinks)
  • -
  • Launder items including washable plush toys as appropriate in accordance with the manufacturer’s instructions. If possible, launder items using the warmest appropriate water setting for the items and dry items completely. Dirty laundry from an ill person can be washed with other people’s items.
  • -
-

You can find additional information on preventing COVID-19 at Prevention for 2019 Novel Coronavirus and at Preventing COVID-19 Spread in Communities. Additional information on how COVID-19 is spread is available at How COVID-19 Spreads.

",https://www.cdc.gov/coronavirus/2019-ncov/prepare/children-faq.html,Coronavirus Disease-2019 (COVID-19) and Children,Center for Disease Control and Prevention (CDC),Children,USA,,,en,2020/03/17 -Are the symptoms of COVID-19 different in children than in adults?,"No. The symptoms of COVID-19 are similar in children and adults. However, children with confirmed COVID-19 have generally presented with mild symptoms. Reported symptoms in children include cold-like symptoms, such as fever, runny nose, and cough. Vomiting and diarrhea have also been reported. It’s not known yet whether some children may be at higher risk for severe illness, for example, children with underlying medical conditions and special healthcare needs. There is much more to be learned about how the disease impacts children.","

A:  No. The symptoms of COVID-19 are similar in children and adults. However, children with confirmed COVID-19 have generally presented with mild symptoms. Reported symptoms in children include cold-like symptoms, such as fever, runny nose, and cough. Vomiting and diarrhea have also been reported. It’s not known yet whether some children may be at higher risk for severe illness, for example, children with underlying medical conditions and special healthcare needs. There is much more to be learned about how the disease impacts children.

",https://www.cdc.gov/coronavirus/2019-ncov/prepare/children-faq.html,Coronavirus Disease-2019 (COVID-19) and Children,Center for Disease Control and Prevention (CDC),Children,USA,,,en,2020/03/17 -"Should children wear masks? -","No. If your child is healthy, there is no need for them to wear a facemask. Only people who have symptoms of illness or who are providing care to those who are ill should wear masks.","

A: No. If your child is healthy, there is no need for them to wear a facemask. Only people who have symptoms of illness or who are providing care to those who are ill should wear masks.

",https://www.cdc.gov/coronavirus/2019-ncov/prepare/children-faq.html,Coronavirus Disease-2019 (COVID-19) and Children,Center for Disease Control and Prevention (CDC),Children,USA,,,en,2020/03/17 -"What is the risk to pregnant women of getting COVID-19? Is it easier for pregnant women to become ill with the disease? If they become infected, will they be more sick than other people?","We do not currently know if pregnant women have a greater chance of getting sick from COVID-19 than the general public nor whether they are more likely to have serious illness as a result. Pregnant women experience changes in their bodies that may increase their risk of some infections. With viruses from the same family as COVID-19, and other viral respiratory infections, such as influenza, women have had a higher risk of developing severe illness. It is always important for pregnant women to protect themselves from illnesses.","

We do not currently know if pregnant women have a greater chance of getting sick from COVID-19 than the general public nor whether they are more likely to have serious illness as a result. Pregnant women experience changes in their bodies that may increase their risk of some infections. With viruses from the same family as COVID-19, and other viral respiratory infections, such as influenza, women have had a higher risk of developing severe illness. It is always important for pregnant women to protect themselves from illnesses.

",https://www.cdc.gov/coronavirus/2019-ncov/prepare/pregnancy-breastfeeding.html,Pregnancy & Breastfeeding,Center for Disease Control and Prevention (CDC),Pregnant Women,USA,,,en,2020/03/17 -How can pregnant women protect themselves from getting COVID-19?,"Pregnant women should do the same things as the general public to avoid infection. You can help stop the spread of COVID-19 by taking these actions: - -Cover your cough (using your elbow is a good technique) -Avoid people who are sick -Clean your hands often using soap and water or alcohol-based hand sanitizer -You can find additional information on preventing COVID-19 disease at CDC’s (Prevention for 2019 Novel Coronavirus).","

Pregnant women should do the same things as the general public to avoid infection. You can help stop the spread of COVID-19 by taking these actions:

-
    -
  • Cover your cough (using your elbow is a good technique)
  • -
  • Avoid people who are sick
  • -
  • Clean your hands often using soap and water or alcohol-based hand sanitizer
  • -
-

You can find additional information on preventing COVID-19 disease at CDC’s (Prevention for 2019 Novel Coronavirus).

",https://www.cdc.gov/coronavirus/2019-ncov/prepare/pregnancy-breastfeeding.html,Pregnancy & Breastfeeding,Center for Disease Control and Prevention (CDC),Pregnant Women,USA,,,en,2020/03/17 -"Can COVID-19 cause problems for a pregnancy? -",We do not know at this time if COVID-19 would cause problems during pregnancy or affect the health of the baby after birth.,

We do not know at this time if COVID-19 would cause problems during pregnancy or affect the health of the baby after birth.

,https://www.cdc.gov/coronavirus/2019-ncov/prepare/pregnancy-breastfeeding.html,Pregnancy & Breastfeeding,Center for Disease Control and Prevention (CDC),Pregnant Women,USA,,,en,2020/03/17 -Can COVID-19 be passed from a pregnant woman to the fetus or newborn?,"We still do not know if a pregnant woman with COVID-19 can pass the virus that causes COVID-19 to her fetus or baby during pregnancy or delivery. No infants born to mothers with COVID-19 have tested positive for the COVID-19 virus. In these cases, which are a small number, the virus was not found in samples of amniotic fluid or breastmilk. -","

We still do not know if a pregnant woman with COVID-19 can pass the virus that causes COVID-19 to her fetus or baby during pregnancy or delivery. No infants born to mothers with COVID-19 have tested positive for the COVID-19 virus. In these cases, which are a small number, the virus was not found in samples of amniotic fluid or breastmilk.

",https://www.cdc.gov/coronavirus/2019-ncov/prepare/pregnancy-breastfeeding.html,Pregnancy & Breastfeeding,Center for Disease Control and Prevention (CDC),During Pregnancy or Delivery,USA,,,en,2020/03/17 -"If a pregnant woman has COVID-19 during pregnancy, will it hurt the baby? -","We do not know at this time what if any risk is posed to infants of a pregnant woman who has COVID-19. There have been a small number of reported problems with pregnancy or delivery (e.g. preterm birth) in babies born to mothers who tested positive for COVID-19 during their pregnancy. However, it is not clear that these outcomes were related to maternal infection.","

We do not know at this time what if any risk is posed to infants of a pregnant woman who has COVID-19. There have been a small number of reported problems with pregnancy or delivery (e.g. preterm birth) in babies born to mothers who tested positive for COVID-19 during their pregnancy. However, it is not clear that these outcomes were related to maternal infection.

",https://www.cdc.gov/coronavirus/2019-ncov/prepare/pregnancy-breastfeeding.html,Pregnancy & Breastfeeding,Center for Disease Control and Prevention (CDC),Infants,USA,,,en,2020/03/17 -Can the COVID-19 virus spread through drinking water?,"The COVID-19 virus has not been detected in drinking water. Conventional water treatment methods that use filtration and disinfection, such as those in most municipal drinking water systems, should remove or inactivate the virus that causes COVID-19.","

The COVID-19 virus has not been detected in drinking water. Conventional water treatment methods that use filtration and disinfection, such as those in most municipal drinking water systems, should remove or inactivate the virus that causes COVID-19.

",https://www.cdc.gov/coronavirus/2019-ncov/php/water.html,Water Transmission and COVID-19,Center for Disease Control and Prevention (CDC),Water Transmission,USA,,,en,2020/03/17 -Is the COVID-19 virus found in feces?,"The virus that causes COVID-19 has been detected in the feces of some patients diagnosed with COVID-19. The amount of virus released from the body (shed) in stool, how long the virus is shed, and whether the virus in stool is infectious are not known. - -The risk of transmission of COVID-19 from the feces of an infected person is also unknown. However, the risk is expected to be low based on data from previous outbreaks of related coronaviruses, such as severe acute respiratory syndrome (SARS) and Middle East respiratory syndrome (MERS). There have been no reports of fecal-oral transmission of COVID-19 to date.","

The virus that causes COVID-19 has been detected in the feces of some patients diagnosed with COVID-19. The amount of virus released from the body (shed) in stool, how long the virus is shed, and whether the virus in stool is infectious are not known.

-

The risk of transmission of COVID-19 from the feces of an infected person is also unknown. However, the risk is expected to be low based on data from previous outbreaks of related coronaviruses, such as severe acute respiratory syndrome (SARS) and Middle East respiratory syndrome (MERS). There have been no reports of fecal-oral transmission of COVID-19 to date.

",https://www.cdc.gov/coronavirus/2019-ncov/php/water.html,Water Transmission and COVID-20,Center for Disease Control and Prevention (CDC),Water Transmission,USA,,,en,2020/03/17 -Can the COVID-19 virus spread through pools and hot tubs?,"There is no evidence that COVID-19 can be spread to humans through the use of pools and hot tubs. Proper operation, maintenance, and disinfection (e.g., with chlorine and bromine) of pools and hot tubs should remove or inactivate the virus that causes COVID-19.","

There is no evidence that COVID-19 can be spread to humans through the use of pools and hot tubs. Proper operation, maintenance, and disinfection (e.g., with chlorine and bromine) of pools and hot tubs should remove or inactivate the virus that causes COVID-19.

",https://www.cdc.gov/coronavirus/2019-ncov/php/water.html,Water Transmission and COVID-21,Center for Disease Control and Prevention (CDC),Water Transmission,USA,,,en,2020/03/17 -Can the COVID-19 virus spread through sewerage systems?,"CDC is reviewing all data on COVID-19 transmission as information becomes available. At this time, the risk of transmission of the virus that causes COVID-19 through sewerage systems is thought to be low. Although transmission of COVID-19 through sewage may be possible, there is no evidence to date that this has occurred. This guidance will be updated as necessary as new evidence is assessed. - -SARS, a similar coronavirus, has been detected in untreated sewage for up to 2 to 14 days. In the 2003 SARS outbreak, there was documented transmission associated with sewage aerosols. Data suggest that standard municipal wastewater system chlorination practices may be sufficient to inactivate coronaviruses, as long as utilities monitor free available chlorine during treatment to ensure it has not been depleted. - -Wastewater and sewage workers should use standard practices, practice basic hygiene precautions, and wear personal protective equipment (PPE) as prescribed for current work tasks.","

CDC is reviewing all data on COVID-19 transmission as information becomes available. At this time, the risk of transmission of the virus that causes COVID-19 through sewerage systems is thought to be low. Although transmission of COVID-19 through sewage may be possible, there is no evidence to date that this has occurred. This guidance will be updated as necessary as new evidence is assessed.

-

SARS, a similar coronavirus, has been detected in untreated sewage for up to 2 to 14 days. In the 2003 SARS outbreak, there was documented transmission associated with sewage aerosols. Data suggest that standard municipal wastewater system chlorination practices may be sufficient to inactivate coronaviruses, as long as utilities monitor free available chlorine during treatment to ensure it has not been depleted.

-

Wastewater and sewage workers should use standard practices, practice basic hygiene precautions, and wear personal protective equipment (PPE) as prescribed for current work tasks.

",https://www.cdc.gov/coronavirus/2019-ncov/php/water.html,Water Transmission and COVID-22,Center for Disease Control and Prevention (CDC),Water Transmission,USA,,,en,2020/03/17 -Should wastewater workers take extra precautions to protect themselves from the COVID-19 virus?,"Wastewater treatment plant operations should ensure workers follow routine practices to prevent exposure to wastewater. These include using engineering and administrative controls, safe work practices, and PPE normally required for work tasks when handling untreated wastewater. No additional COVID-19–specific protections are recommended for employees involved in wastewater management operations, including those at wastewater treatment facilities.","

Wastewater treatment plant operations should ensure workers follow routine practices to prevent exposure to wastewater. These include using engineering and administrative controls, safe work practices, and PPE normally required for work tasks when handling untreated wastewater. No additional COVID-19–specific protections are recommended for employees involved in wastewater management operations, including those at wastewater treatment facilities.

",https://www.cdc.gov/coronavirus/2019-ncov/php/water.html,Water Transmission and COVID-23,Center for Disease Control and Prevention (CDC),Water Transmission,USA,,,en,2020/03/17 -What are the clinical features of COVID-19?," -The clinical spectrum of COVID-19 ranges from mild disease with non-specific signs and symptoms of acute respiratory illness, to severe pneumonia with respiratory failure and septic shock. There have also been reports of asymptomatic infection with COVID-19. See also Interim Clinical Guidance for Management of Patients with Confirmed Coronavirus Disease 2019 (COVID-19).","

A: The clinical spectrum of COVID-19 ranges from mild disease with non-specific signs and symptoms of acute respiratory illness, to severe pneumonia with respiratory failure and septic shock. There have also been reports of asymptomatic infection with COVID-19. See also Interim Clinical Guidance for Management of Patients with Confirmed Coronavirus Disease 2019 (COVID-19)

",https://www.cdc.gov/coronavirus/2019-ncov/hcp/faq.html,Healthcare Professionals: Frequently Asked Questions and Answers,Center for Disease Control and Prevention (CDC),Healthcare Professionals,USA,,,en,2020/03/17 -"Who is at risk for COVID-19? -","Currently, those at greatest risk of infection are persons who have had prolonged, unprotected close contact with a patient with symptomatic, confirmed COVID-19 and those who live in or have recently been to areas with sustained transmission.","

A: Currently, those at greatest risk of infection are persons who have had prolonged, unprotected close contact with a patient with symptomatic, confirmed COVID-19 and those who live in or have recently been to areas with sustained transmission.

",https://www.cdc.gov/coronavirus/2019-ncov/hcp/faq.html,Healthcare Professionals: Frequently Asked Questions and Answers,Center for Disease Control and Prevention (CDC),Healthcare Professionals,USA,,,en,2020/03/17 -Who is at risk for severe disease from COVID-19?,"The available data are currently insufficient to identify risk factors for severe clinical outcomes. From the limited data that are available for COVID-19 infected patients, and for data from related coronaviruses such as SARS-CoV and MERS-CoV, it is possible that older adults, and persons who have underlying chronic medical conditions, such as immunocompromising conditions, may be at risk for more severe outcomes. See also See also Interim Clinical Guidance for Management of Patients with Confirmed Coronavirus Disease 2019 (COVID-19).","

The available data are currently insufficient to identify risk factors for severe clinical outcomes. From the limited data that are available for COVID-19 infected patients, and for data from related coronaviruses such as SARS-CoV and MERS-CoV, it is possible that older adults, and persons who have underlying chronic medical conditions, such as immunocompromising conditions, may be at risk for more severe outcomes. See also See also Interim Clinical Guidance for Management of Patients with Confirmed Coronavirus Disease 2019 (COVID-19).

",https://www.cdc.gov/coronavirus/2019-ncov/hcp/faq.html,Healthcare Professionals: Frequently Asked Questions and Answers,Center for Disease Control and Prevention (CDC),Healthcare Professionals,USA,,,en,2020/03/17 -When is someone infectious?,"The onset and duration of viral shedding and period of infectiousness for COVID-19 are not yet known. It is possible that SARS-CoV-2 RNA may be detectable in the upper or lower respiratory tract for weeks after illness onset, similar to infection with MERS-CoV and SARS-CoV. However, detection of viral RNA does not necessarily mean that infectious virus is present. Asymptomatic infection with SARS-CoV-2 has been reported, but it is not yet known what role asymptomatic infection plays in transmission. Similarly, the role of pre-symptomatic transmission (infection detection during the incubation period prior to illness onset) is unknown. Existing literature regarding SARS-CoV-2 and other coronaviruses (e.g. MERS-CoV, SARS-CoV) suggest that the incubation period may range from 2–14 days.","

A: The onset and duration of viral shedding and period of infectiousness for COVID-19 are not yet known. It is possible that SARS-CoV-2 RNA may be detectable in the upper or lower respiratory tract for weeks after illness onset, similar to infection with MERS-CoV and SARS-CoV. However, detection of viral RNA does not necessarily mean that infectious virus is present. Asymptomatic infection with SARS-CoV-2 has been reported, but it is not yet known what role asymptomatic infection plays in transmission. Similarly, the role of pre-symptomatic transmission (infection detection during the incubation period prior to illness onset) is unknown. Existing literature regarding SARS-CoV-2 and other coronaviruses (e.g. MERS-CoV, SARS-CoV) suggest that the incubation period may range from 2–14 days.

",https://www.cdc.gov/coronavirus/2019-ncov/hcp/faq.html,Healthcare Professionals: Frequently Asked Questions and Answers,Center for Disease Control and Prevention (CDC),Healthcare Professionals,USA,,,en,2020/03/17 -"Which body fluids can spread infection? -","Very limited data are available about detection of SARS-CoV-2 and infectious virus in clinical specimens. SARS-CoV-2 RNA has been detected from upper and lower respiratory tract specimens, and SARS-CoV-2 has been isolated from upper respiratory tract specimens and bronchoalveolar lavage fluid. SARS-CoV-2 RNA has been detected in blood and stool specimens, but whether infectious virus is present in extrapulmonary specimens is currently unknown. The duration of SARS-CoV-2 RNA detection in upper and lower respiratory tract specimens and in extrapulmonary specimens is not yet known but may be several weeks or longer, which has been observed in cases of MERS-CoV or SARS-CoV infection. While viable, infectious SARS-CoV has been isolated from respiratory, blood, urine, and stool specimens, in contrast – viable, infectious MERS-CoV has only been isolated from respiratory tract specimens. It is not yet known whether other non-respiratory body fluids from an infected person including vomit, urine, breast milk, or semen can contain viable, infectious SARS-CoV-2.","

A: Very limited data are available about detection of SARS-CoV-2 and infectious virus in clinical specimens. SARS-CoV-2 RNA has been detected from upper and lower respiratory tract specimens, and SARS-CoV-2 has been isolated from upper respiratory tract specimens and bronchoalveolar lavage fluid. SARS-CoV-2 RNA has been detected in blood and stool specimens, but whether infectious virus is present in extrapulmonary specimens is currently unknown. The duration of SARS-CoV-2 RNA detection in upper and lower respiratory tract specimens and in extrapulmonary specimens is not yet known but may be several weeks or longer, which has been observed in cases of MERS-CoV or SARS-CoV infection. While viable, infectious SARS-CoV has been isolated from respiratory, blood, urine, and stool specimens, in contrast – viable, infectious MERS-CoV has only been isolated from respiratory tract specimens. It is not yet known whether other non-respiratory body fluids from an infected person including vomit, urine, breast milk, or semen can contain viable, infectious SARS-CoV-2.

",https://www.cdc.gov/coronavirus/2019-ncov/hcp/faq.html,Healthcare Professionals: Frequently Asked Questions and Answers,Center for Disease Control and Prevention (CDC),Healthcare Professionals,USA,,,en,2020/03/17 -Can people who recover from COVID-19 be infected again?,"The immune response to COVID-19 is not yet understood. Patients with MERS-CoV infection are unlikely to be re-infected shortly after they recover, but it is not yet known whether similar immune protection will be observed for patients with COVID-19.","The immune response to COVID-19 is not yet understood. Patients with MERS-CoV infection are unlikely to be re-infected shortly after they recover, but it is not yet known whether similar immune protection will be observed for patients with COVID-19.

",https://www.cdc.gov/coronavirus/2019-ncov/hcp/faq.html,Healthcare Professionals: Frequently Asked Questions and Answers,Center for Disease Control and Prevention (CDC),Healthcare Professionals,USA,,,en,2020/03/17 -How should healthcare personnel protect themselves when evaluating a patient who may have COVID-19?,"Although the transmission dynamics have yet to be determined, CDC currently recommends a cautious approach to persons under investigation (PUI) for COVID-19. Healthcare personnel evaluating PUI or providing care for patients with confirmed COVID-19 should use, Standard Transmission-based Precautions. See the Interim Infection Prevention and Control Recommendations for Patients with Known or Patients Under Investigation for Coronavirus Disease 2019 (COVID-19) in Healthcare Settings.","

A: Although the transmission dynamics have yet to be determined, CDC currently recommends a cautious approach to persons under investigation (PUI) for COVID-19. Healthcare personnel evaluating PUI or providing care for patients with confirmed COVID-19 should use, Standard  Transmission-based Precautions. See the Interim Infection Prevention and Control Recommendations for Patients with Known or Patients Under Investigation for Coronavirus Disease 2019 (COVID-19) in Healthcare Settings.

",https://www.cdc.gov/coronavirus/2019-ncov/hcp/faq.html,Healthcare Professionals: Frequently Asked Questions and Answers,Center for Disease Control and Prevention (CDC),Healthcare Professionals,USA,,,en,2020/03/17 -Are pregnant healthcare personnel at increased risk for adverse outcomes if they care for patients with COVID-19?,"Pregnant healthcare personnel (HCP) should follow risk assessment and infection control guidelines for HCP exposed to patients with suspected or confirmed COVID-19. Adherence to recommended infection prevention and control practices is an important part of protecting all HCP in healthcare settings. Information on COVID-19 in pregnancy is very limited; facilities may want to consider limiting exposure of pregnant HCP to patients with confirmed or suspected COVID-19, especially during higher risk procedures (e.g., aerosol-generating procedures) if feasible based on staffing availability.","

A: Pregnant healthcare personnel (HCP) should follow risk assessment and infection control guidelines for HCP exposed to patients with suspected or confirmed COVID-19. Adherence to recommended infection prevention and control practices is an important part of protecting all HCP in healthcare settings. Information on COVID-19 in pregnancy is very limited; facilities may want to consider limiting exposure of pregnant HCP to patients with confirmed or suspected COVID-19, especially during higher risk procedures (e.g., aerosol-generating procedures) if feasible based on staffing availability.

",https://www.cdc.gov/coronavirus/2019-ncov/hcp/faq.html,Healthcare Professionals: Frequently Asked Questions and Answers,Center for Disease Control and Prevention (CDC),Healthcare Professionals,USA,,,en,2020/03/17 -Should any diagnostic or therapeutic interventions be withheld due to concerns about transmission of COVID-19?,Patients should receive any interventions they would normally receive as standard of care. Patients with suspected or confirmed COVID-19 should be asked to wear a surgical mask as soon as they are identified and be evaluated in a private room with the door closed. Healthcare personnel entering the room should use Standard and Transmission-based Precautions.,"p>A: Patients should receive any interventions they would normally receive as standard of care. Patients with suspected or confirmed COVID-19 should be asked to wear a surgical mask as soon as they are identified and be evaluated in a private room with the door closed. Healthcare personnel entering the room should use Standard and Transmission-based Precautions.

",https://www.cdc.gov/coronavirus/2019-ncov/hcp/faq.html,Healthcare Professionals: Frequently Asked Questions and Answers,Center for Disease Control and Prevention (CDC),Healthcare Professionals,USA,,,en,2020/03/17 -"How do you test a patient for SARS-CoV-2, the virus that causes COVID-19?","See recommendations for reporting, testing, and specimen collection at Interim Guidance for Healthcare Professionals.","

A: See recommendations for reporting, testing, and specimen collection at Interim Guidance for Healthcare Professionals.

-",https://www.cdc.gov/coronavirus/2019-ncov/hcp/faq.html,Healthcare Professionals: Frequently Asked Questions and Answers,Center for Disease Control and Prevention (CDC),Healthcare Professionals,USA,,,en,2020/03/17 -"Will existing respiratory virus panels, such as those manufactured by Biofire or Genmark, detect SARS-CoV-2, the virus that causes COVID-19?","No. These multi-pathogen molecular assays can detect a number of human respiratory viruses, including other coronaviruses that can cause acute respiratory illness, but they do not detect COVID-19.","

A: No. These multi-pathogen molecular assays can detect a number of human respiratory viruses, including other coronaviruses that can cause acute respiratory illness, but they do not detect COVID-19.

",https://www.cdc.gov/coronavirus/2019-ncov/hcp/faq.html,Healthcare Professionals: Frequently Asked Questions and Answers,Center for Disease Control and Prevention (CDC),Healthcare Professionals,USA,,,en,2020/03/17 -How is COVID-19 treated?,"Not all patients with COVID-19 will require medical supportive care. Clinical management for hospitalized patients with COVID-19 is focused on supportive care of complications, including advanced organ support for respiratory failure, septic shock, and multi-organ failure. Empiric testing and treatment for other viral or bacterial etiologies may be warranted. - -Corticosteroids are not routinely recommended for viral pneumonia or ARDS and should be avoided unless they are indicated for another reason (e.g., COPD exacerbation, refractory septic shock following Surviving Sepsis Campaign Guidelines). - -There are currently no antiviral drugs licensed by the U.S. Food and Drug Administration (FDA) to treat COVID-19. Some in-vitro or in-vivo studies suggest potential therapeutic activity of some agents against related coronaviruses, but there are no available data from observational studies or randomized controlled trials in humans to support recommending any investigational therapeutics for patients with confirmed or suspected COVID-19 at this time. Remdesivir, an investigational antiviral drug, was reported to have in-vitro activity against COVID-19. A small number of patients with COVID-19 have received intravenous remdesivir for compassionate use outside of a clinical trial setting. A randomized placebo-controlled clinical trial of remdesivirexternal icon for treatment of hospitalized patients with COVID-19 respiratory disease has been implemented in China. A randomized open label trialexternal icon of combination lopinavir-ritonavir treatment has been also been conducted in patients with COVID-19 in China, but no results are available to date. trials of other potential therapeutics for COVID-19 are being planned. For information on specific clinical trials underway for treatment of patients with COVID-19 infection, see clinicaltrials.govexternal icon. - -See Interim Clinical Guidance for Management of Patients with Confirmed Coronavirus Disease 2019 (COVID-19)","

Not all patients with COVID-19 will require medical supportive care. Clinical management for hospitalized patients with COVID-19 is focused on supportive care of complications, including advanced organ support for respiratory failure, septic shock, and multi-organ failure. Empiric testing and treatment for other viral or bacterial etiologies may be warranted.

-

Corticosteroids are not routinely recommended for viral pneumonia or ARDS and should be avoided unless they are indicated for another reason (e.g., COPD exacerbation, refractory septic shock following Surviving Sepsis Campaign Guidelines).

-

There are currently no antiviral drugs licensed by the U.S. Food and Drug Administration (FDA) to treat COVID-19. Some in-vitro or in-vivo studies suggest potential therapeutic activity of some agents against related coronaviruses, but there are no available data from observational studies or randomized controlled trials in humans to support recommending any investigational therapeutics for patients with confirmed or suspected COVID-19 at this time. Remdesivir, an investigational antiviral drug, was reported to have in-vitro activity against COVID-19. A small number of patients with COVID-19 have received intravenous remdesivir for compassionate use outside of a clinical trial setting. A randomized placebo-controlled clinical trial of remdesivirexternal icon for treatment of hospitalized patients with COVID-19 respiratory disease has been implemented in China. A randomized open label trialexternal icon of combination lopinavir-ritonavir treatment has been also been conducted in patients with COVID-19 in China, but no results are available to date. trials of other potential therapeutics for COVID-19 are being planned. For information on specific clinical trials underway for treatment of patients with COVID-19 infection, see clinicaltrials.govexternal icon.

-

See Interim Clinical Guidance for Management of Patients with Confirmed Coronavirus Disease 2019 (COVID-19)

",https://www.cdc.gov/coronavirus/2019-ncov/hcp/faq.html,Healthcare Professionals: Frequently Asked Questions and Answers,Center for Disease Control and Prevention (CDC),Healthcare Professionals,USA,,,en,2020/03/17 -Should post-exposure prophylaxis be used for people who may have been exposed to COVID-19?,"There is currently no FDA-approved post-exposure prophylaxis for people who may have been exposed to COVID-19. For more information on movement restrictions, monitoring for symptoms, and evaluation after possible exposure to COVID-19 See Interim US Guidance for Risk Assessment and Public Health Management of Persons with Potential Coronavirus Disease 2019 (COVID-19) Exposure in Travel-associated or Community Settings and Interim U.S Guidance for Risk Assessment and Public Health Management of Healthcare Personnel with Potential Exposure in a Healthcare Setting to Patients with Coronavirus Disease 2019 (COVID-19).","

A: There is currently no FDA-approved post-exposure prophylaxis for people who may have been exposed to COVID-19. For more information on movement restrictions, monitoring for symptoms, and evaluation after possible exposure to COVID-19 See Interim US Guidance for Risk Assessment and Public Health Management of Persons with Potential Coronavirus Disease 2019 (COVID-19) Exposure in Travel-associated or Community Settings and Interim U.S Guidance for Risk Assessment and Public Health Management of Healthcare Personnel with Potential Exposure in a Healthcare Setting to Patients with Coronavirus Disease 2019 (COVID-19).

",https://www.cdc.gov/coronavirus/2019-ncov/hcp/faq.html,Healthcare Professionals: Frequently Asked Questions and Answers,Center for Disease Control and Prevention (CDC),Healthcare Professionals,USA,,,en,2020/03/17 -Whom should healthcare providers notify if they suspect a patient has COVID-19?,Healthcare providers should consult with local or state health departments to determine whether patients meet criteria for a Persons Under Investigation (PUI). Providers should immediately notify infection control personnel at their facility if they suspect COVID-19 in a patient.,"

A: Healthcare providers should consult with local or state health departments to determine whether patients meet criteria for a Persons Under Investigation (PUI). Providers should immediately notify infection control personnel at their facility if they suspect COVID-19 in a patient.

",https://www.cdc.gov/coronavirus/2019-ncov/hcp/faq.html,Healthcare Professionals: Frequently Asked Questions and Answers,Center for Disease Control and Prevention (CDC),Healthcare Professionals,USA,,,en,2020/03/17 -Do patients with confirmed or suspected COVID-19 need to be admitted to the hospital?,"Not all patients with COVID-19 require hospital admission. Patients whose clinical presentation warrants in-patient clinical management for supportive medical care should be admitted to the hospital under appropriate isolation precautions. Some patients with an initial mild clinical presentation may worsen in the second week of illness. The decision to monitor these patients in the inpatient or outpatient setting should be made on a case-by-case basis. This decision will depend not only on the clinical presentation, but also on the patient’s ability to engage in monitoring, the ability for safe isolation at home, and the risk of transmission in the patient’s home environment. For more information, see Interim Infection Prevention and Control Recommendations for Patients with Known or Patients Under Investigation for Coronavirus Disease 2019 (COVID-19) in a Healthcare Setting and Interim Guidance for Implementing Home Care of People Not Requiring Hospitalization for Coronavirus Disease 2019 (COVID-19).","

A: Not all patients with COVID-19 require hospital admission. Patients whose clinical presentation warrants in-patient clinical management for supportive medical care should be admitted to the hospital under appropriate isolation precautions. Some patients with an initial mild clinical presentation may worsen in the second week of illness. The decision to monitor these patients in the inpatient or outpatient setting should be made on a case-by-case basis. This decision will depend not only on the clinical presentation, but also on the patient’s ability to engage in monitoring, the ability for safe isolation at home, and the risk of transmission in the patient’s home environment. For more information, see Interim Infection Prevention and Control Recommendations for Patients with Known or Patients Under Investigation for Coronavirus Disease 2019 (COVID-19) in a Healthcare Setting and Interim Guidance for Implementing Home Care of People Not Requiring Hospitalization for Coronavirus Disease 2019 (COVID-19).

",https://www.cdc.gov/coronavirus/2019-ncov/hcp/faq.html,Healthcare Professionals: Frequently Asked Questions and Answers,Center for Disease Control and Prevention (CDC),Healthcare Professionals,USA,,,en,2020/03/17 -When can patients with confirmed COVID-19 be discharged from the hospital?,"Patients can be discharged from the healthcare facility whenever clinically indicated. Isolation should be maintained at home if the patient returns home before the time period recommended for discontinuation of hospital Transmission-Based Precautions described below. - -Decisions to discontinue Transmission-Based Precautions or in-home isolation can be made on a case-by-case basis in consultation with clinicians, infection prevention and control specialists, and public health based upon multiple factors, including disease severity, illness signs and symptoms, and results of laboratory testing for COVID-19 in respiratory specimens. - -Criteria to discontinue Transmission-Based Precautions can be found in: Interim Considerations for Disposition of Hospitalized Patients with COVID-19","

A: Patients can be discharged from the healthcare facility whenever clinically indicated. Isolation should be maintained at home if the patient returns home before the time period recommended for discontinuation of hospital Transmission-Based Precautions described below.

-

Decisions to discontinue Transmission-Based Precautions or in-home isolation can be made on a case-by-case basis in consultation with clinicians, infection prevention and control specialists, and public health based upon multiple factors, including disease severity, illness signs and symptoms, and results of laboratory testing for COVID-19 in respiratory specimens.

-

Criteria to discontinue Transmission-Based Precautions can be found in: Interim Considerations for Disposition of Hospitalized Patients with COVID-19

",https://www.cdc.gov/coronavirus/2019-ncov/hcp/faq.html,Healthcare Professionals: Frequently Asked Questions and Answers,Center for Disease Control and Prevention (CDC),Healthcare Professionals,USA,,,en,2020/03/17 -Are pregnant healthcare personnel at increased risk for adverse outcomes if they care for patients with COVID-19?,"Pregnant healthcare personnel (HCP) should follow risk assessment and infection control guidelines for HCP exposed to patients with suspected or confirmed COVID-19. Adherence to recommended infection prevention and control practices is an important part of protecting all HCP in healthcare settings. Information on COVID-19 in pregnancy is very limited; facilities may want to consider limiting exposure of pregnant HCP to patients with confirmed or suspected COVID-19, especially during higher risk procedures (e.g., aerosol-generating procedures) if feasible based on staffing availability.","

A: Pregnant healthcare personnel (HCP) should follow risk assessment and infection control guidelines for HCP exposed to patients with suspected or confirmed COVID-19. Adherence to recommended infection prevention and control practices is an important part of protecting all HCP in healthcare settings. Information on COVID-19 in pregnancy is very limited; facilities may want to consider limiting exposure of pregnant HCP to patients with confirmed or suspected COVID-19, especially during higher risk procedures (e.g., aerosol-generating procedures) if feasible based on staffing availability.

",https://www.cdc.gov/coronavirus/2019-ncov/hcp/faq.html,Healthcare Professionals: Frequently Asked Questions and Answers,Center for Disease Control and Prevention (CDC),Healthcare Professionals,USA,,,en,2020/03/17 -What do I need to know if a patient with confirmed or suspected COVID-19 asks about having a pet or other animal in the home?,See COVID-19 and Animals.,"p>A: See COVID-19 and Animals.

",https://www.cdc.gov/coronavirus/2019-ncov/hcp/faq.html,Healthcare Professionals: Frequently Asked Questions and Answers,Center for Disease Control and Prevention (CDC),Healthcare Professionals,USA,,,en,2020/03/17 -What do waste management companies need to know about wastewater and sewage coming from a healthcare facility or community setting with either a known COVID-19 patient or person under investigation (PUI)?,"Waste generated in the care of PUIs or patients with confirmed COVID-19 does not present additional considerations for wastewater disinfection in the United States. Coronaviruses are susceptible to the same disinfection conditions in community and healthcare settings as other viruses, so current disinfection conditions in wastewater treatment facilities are expected to be sufficient. This includes conditions for practices such as oxidation with hypochlorite (i.e., chlorine bleach) and peracetic acid, as well as inactivation using UV irradiation.","

A: Waste generated in the care of PUIs or patients with confirmed COVID-19 does not present additional considerations for wastewater disinfection in the United States. Coronaviruses are susceptible to the same disinfection conditions in community and healthcare settings as other viruses, so current disinfection conditions in wastewater treatment facilities are expected to be sufficient. This includes conditions for practices such as oxidation with hypochlorite (i.e., chlorine bleach) and peracetic acid, as well as inactivation using UV irradiation.

",https://www.cdc.gov/coronavirus/2019-ncov/hcp/faq.html,Healthcare Professionals: Frequently Asked Questions and Answers,Center for Disease Control and Prevention (CDC),Waste Management,USA,,,en,2020/03/17 -Do wastewater and sewage workers need any additional protection when handling untreated waste from healthcare or community setting with either a known COVID-19 patient or PUI?,Wastewater workers should use standard practices including basic hygiene precautions and wear the recommended PPE as prescribed for their current work tasks when handling untreated waste. There is no evidence to suggest that employees of wastewater plants need any additional protections in relation to COVID-19.,"

A: Wastewater workers should use standard practices including basic hygiene precautions and wear the recommended PPE as prescribed for their current work tasks when handling untreated waste. There is no evidence to suggest that employees of wastewater plants need any additional protections in relation to COVID-19.

",https://www.cdc.gov/coronavirus/2019-ncov/hcp/faq.html,Healthcare Professionals: Frequently Asked Questions and Answers,Center for Disease Control and Prevention (CDC),Waste Management,USA,,,en,2020/03/17 -Should medical waste or general waste from healthcare facilities treating PUIs and patients with confirmed COVID-19 be handled any differently or need any additional disinfection?,"Medical waste (trash) coming from healthcare facilities treating COVID-2019 patients is no different than waste coming from facilities without COVID-19 patients. CDC’s guidance states that management of laundry, food service utensils, and medical waste should be performed in accordance with routine procedures. There is no evidence to suggest that facility waste needs any additional disinfection. - -More guidance about environmental infection control is available in section 7 of CDC’s Interim Infection Prevention and Control Recommendations for Patients with Confirmed COVID-19 or Persons Under Investigation for COVID-19 in Healthcare Settings.","

A: Medical waste (trash) coming from healthcare facilities treating COVID-2019 patients is no different than waste coming from facilities without COVID-19 patients. CDC’s guidance states that management of laundry, food service utensils, and medical waste should be performed in accordance with routine procedures. There is no evidence to suggest that facility waste needs any additional disinfection.

-

More guidance about environmental infection control is available in section 7 of CDC’s Interim Infection Prevention and Control Recommendations for Patients with Confirmed COVID-19 or Persons Under Investigation for COVID-19 in Healthcare Settings.

",https://www.cdc.gov/coronavirus/2019-ncov/hcp/faq.html,Healthcare Professionals: Frequently Asked Questions and Answers,Center for Disease Control and Prevention (CDC),Waste Management,USA,,,en,2020/03/17 -"What personal protective equipment (PPE) should be worn by individuals transporting patients who are confirmed with or under investigation for COVID-19 within a healthcare facility? For example, what PPE should be worn when transporting a patient to radiology for imaging that cannot be performed in the patient room?","In general, transport and movement of the patient outside of their room should be limited to medically essential purposes. If being transported outside of the room, such as to radiology, healthcare personnel (HCP) in the receiving area should be notified in advance of transporting the patient. For transport, the patient should wear a facemask to contain secretions and be covered with a clean sheet. - -If transport personnel must prepare the patient for transport (e.g., transfer them to the wheelchair or gurney), transport personnel should wear all recommended PPE (gloves, a gown, respiratory protection that is at least as protective as a fit-tested NIOSH-certified disposable N95 filtering facepiece respirator or facemask—if a respirator is not available—and eye protection [i.e., goggles or disposable face shield that covers the front and sides of the face]). This recommendation is needed because these interactions typically involve close, often face-to-face, contact with the patient in an enclosed space (e.g., patient room). Once the patient has been transferred to the wheelchair or gurney (and prior to exiting the room), transporters should remove their gown, gloves, and eye protection and perform hand hygiene. - -If the patient is wearing a facemask, no recommendation for PPE is made typically for HCP transporting patients with a respiratory infection from the patient’s room to the destination. However, given current limitations in knowledge regarding COVID-19 and following the currently cautious approach for risk stratification and monitoring of healthcare personnel caring for patients with COVID-19, use of a facemask by the transporter is recommended for anything more than brief encounters with COVID-19 patients. Additional PPE should not be required unless there is an anticipated need to provide medical assistance during transport (e.g., helping the patient replace a dislodged facemask). - -After arrival at their destination, receiving personnel (e.g., in radiology) and the transporter (if assisting with transfer) should perform hand hygiene and wear all recommended PPE. If still wearing their original respirator or facemask, the transporter should take care to avoid self-contamination when donning the remainder of the recommended PPE. This cautious approach will be refined and updated as more information becomes available and as response needs change in the United States. - -Interim guidance for EMS personnel transporting patients with confirmed or suspected COVID-19 is available here. EMS personnel should wear all recommended PPE because they are providing direct medical care and in close contact with the patient for longer periods of time.","

In general, transport and movement of the patient outside of  their room should be limited to medically essential purposes. If being transported outside of the room, such as to radiology, healthcare personnel (HCP) in the receiving area should be notified in advance of transporting the patient. For transport, the patient should wear a facemask to contain secretions and be covered with a clean sheet.

-

If transport personnel must prepare the patient for transport (e.g., transfer them to the wheelchair or gurney), transport personnel should wear all recommended PPE (gloves, a gown, respiratory protection that is at least as protective as a fit-tested NIOSH-certified disposable N95 filtering facepiece respirator or facemask—if a respirator is not available—and eye protection [i.e., goggles or disposable face shield that covers the front and sides of the face]). This recommendation is needed because these interactions typically involve close, often face-to-face, contact with the patient in an enclosed space (e.g., patient room). Once the patient has been transferred to the wheelchair or gurney (and prior to exiting the room), transporters should remove their gown, gloves, and eye protection and perform hand hygiene.

-

If the patient is wearing a facemask, no recommendation for PPE is made typically for HCP transporting patients with a respiratory infection from the patient’s room to the destination. However, given current limitations in knowledge regarding COVID-19 and following the currently cautious approach for risk stratification and monitoring of healthcare personnel caring for patients with COVID-19, use of a facemask by the transporter is recommended for anything more than brief encounters with COVID-19 patients. Additional PPE should not be required unless there is an anticipated need to provide medical assistance during transport (e.g., helping the patient replace a dislodged facemask).

-

After arrival at their destination, receiving personnel (e.g., in radiology) and the transporter (if assisting with transfer) should perform hand hygiene and wear all recommended PPE. If still wearing their original respirator or facemask, the transporter should take care to avoid self-contamination when donning the remainder of the recommended PPE. This cautious approach will be refined and updated as more information becomes available and as response needs change in the United States.

-

Interim guidance for EMS personnel transporting patients with confirmed or suspected COVID-19 is available here. EMS personnel should wear all recommended PPE because they are providing direct medical care and in close contact with the patient for longer periods of time.

",https://www.cdc.gov/coronavirus/2019-ncov/infection-control/infection-prevention-control-faq.html?CDC_AA_refVal=https%3A%2F%2Fwww.cdc.gov%2Fcoronavirus%2F2019-ncov%2Fhcp%2Finfection-prevention-control-faq.html,Healthcare Infection Prevention and Control FAQa for COVID-19,Center for Disease Control and Prevention (CDC),Healthcare Infection Prevention,USA,,,en,2020/03/17 -"What PPE should be worn by HCP providing care to asymptomatic patients with a history of exposure to COVID-19 who are being evaluated for a non-infectious complaint (e.g., hypertension or hyperglycemia)?","Standard Precautions should be followed when caring for any patient, regardless of suspected or confirmed COVID-19. If the patient is afebrile (temperature is less than 100.0oF) and otherwise without even mild symptoms* that might be consistent with COVID-19 (e.g., cough, sore throat, shortness of breath), then precautions specific to COVID-19 are not required. However, until the patient is determined to be without such symptoms, HCP should wear all recommended PPE for the patient encounter. If the primary evaluation confirms the patient is without symptoms, management and need for any Transmission-Based Precautions should be based with the condition for which they are being evaluated (e.g., patient colonized with a drug-resistant organism), rather than potential exposure to COVID-19. - -This public health response is an important opportunity to reinforce the importance of strict adherence to Standard Precautions during all patient encounters. Standard Precautions are based on the principles that all blood, body fluids, secretions, excretions except sweat, nonintact skin, and mucous membranes may contain transmissible infectious agents. The application of Standard Precautions is determined by the nature of the HCP-patient interaction and the extent of anticipated blood, body fluids, and pathogen exposure. For example, a facemask and eye protection should be worn during the care of any patient if splashes, sprays, or coughs could occur during the patient encounter. Similarly, gloves should be worn if contact with body fluids, mucous membranes, or nonintact skin are anticipated. - -*Note: In addition to cough and shortness of breath, nonspecific symptoms such as sore throat, myalgia, fatigue, nausea, and diarrhea have been noted as initial symptoms in some cases of COVID-19. These symptoms can have several alternative explanations; however, failure to identify and implement proper precautions in a healthcare setting for persons infected with COVID-19 can contribute to widespread transmission in that facility due to the presence of susceptible patients and close interactions with healthcare personnel. For this reason, a lower temperature of 100.0oF and the inclusion of mild and non-specific symptoms should be used by healthcare settings evaluating these patients to increase the ability to detect even mild cases of COVID-19.","

Standard Precautions should be followed when caring for any patient, regardless of suspected or confirmed COVID-19. If the patient is afebrile (temperature is less than 100.0oF) and otherwise without even mild symptoms* that might be consistent with COVID-19 (e.g., cough, sore throat, shortness of breath), then precautions specific to COVID-19 are not required. However, until the patient is determined to be without such symptoms, HCP should wear all recommended PPE for the patient encounter. If the primary evaluation confirms the patient is without symptoms, management and need for any Transmission-Based Precautions should be based with the condition for which they are being evaluated (e.g., patient colonized with a drug-resistant organism), rather than potential exposure to COVID-19.

-

This public health response is an important opportunity to reinforce the importance of strict adherence to Standard Precautions during all patient encounters. Standard Precautions are based on the principles that all blood, body fluids, secretions, excretions except sweat, nonintact skin, and mucous membranes may contain transmissible infectious agents. The application of Standard Precautions is determined by the nature of the HCP-patient interaction and the extent of anticipated blood, body fluids, and pathogen exposure. For example, a facemask and eye protection should be worn during the care of any patient if splashes, sprays, or coughs could occur during the patient encounter. Similarly, gloves should be worn if contact with body fluids, mucous membranes, or nonintact skin are anticipated.

-

*Note: In addition to cough and shortness of breath, nonspecific symptoms such as sore throat, myalgia, fatigue, nausea, and diarrhea have been noted as initial symptoms in some cases of COVID-19. These symptoms can have several alternative explanations; however, failure to identify and implement proper precautions in a healthcare setting for persons infected with COVID-19 can contribute to widespread transmission in that facility due to the presence of susceptible patients and close interactions with healthcare personnel. For this reason, a lower temperature of 100.0oF and the inclusion of mild and non-specific symptoms should be used by healthcare settings evaluating these patients to increase the ability to detect even mild cases of COVID-19.

",https://www.cdc.gov/coronavirus/2019-ncov/infection-control/infection-prevention-control-faq.html?CDC_AA_refVal=https%3A%2F%2Fwww.cdc.gov%2Fcoronavirus%2F2019-ncov%2Fhcp%2Finfection-prevention-control-faq.html,Healthcare Infection Prevention and Control FAQa for COVID-20,Center for Disease Control and Prevention (CDC),Healthcare Infection Prevention,USA,,,en,2020/03/17 -What personal protective equipment (PPE) should be worn by environmental services (EVS) personnel who clean and disinfect rooms of hospitalized patients with COVID-19?,"In general, only essential personnel should enter the room of patients with COVID-19. Healthcare facilities should consider assigning daily cleaning and disinfection of high-touch surfaces to nursing personnel who will already be in the room providing care to the patient. If this responsibility is assigned to EVS personnel, they should wear all recommended PPE when in the room. PPE should be removed upon leaving the room, immediately followed by performance of hand hygiene. - -After discharge, terminal cleaning may be performed by EVS personnel. They should delay entry into the room until a sufficient time has elapsed for enough air changes to remove potentially infectious particles. We do not yet know how long SARS-CoV-2 remains infectious in the air. Regardless, EVS personnel should refrain from entering the vacated room until sufficient time has elapsed for enough air changes to remove potentially infectious particles (more information on clearance rates under differing ventilation conditions is available). After this time has elapsed, EVS personnel may enter the room and should wear a gown and gloves when performing terminal cleaning. A facemask and eye protection should be added if splashes or sprays during cleaning and disinfection activities are anticipated or otherwise required based on the selected cleaning products. Shoe covers are not recommended at this time for personnel caring for patients with COVID-19.","

In general, only essential personnel should enter the room of patients with COVID-19. Healthcare facilities should consider assigning daily cleaning and disinfection of high-touch surfaces to nursing personnel who will already be in the room providing care to the patient. If this responsibility is assigned to EVS personnel, they should wear all recommended PPE when in the room. PPE should be removed upon leaving the room, immediately followed by performance of hand hygiene.

-

After discharge, terminal cleaning may be performed by EVS personnel. They should delay entry into the room until a sufficient time has elapsed for enough air changes to remove potentially infectious particles. We do not yet know how long SARS-CoV-2 remains infectious in the air. Regardless, EVS personnel should refrain from entering the vacated room until sufficient time has elapsed for enough air changes to remove potentially infectious particles (more information on clearance rates under differing ventilation conditions is available). After this time has elapsed, EVS personnel may enter the room and should wear a gown and gloves when performing terminal cleaning. A facemask and eye protection should be added if splashes or sprays during cleaning and disinfection activities are anticipated or otherwise required based on the selected cleaning products. Shoe covers are not recommended at this time for personnel caring for patients with COVID-19.

",https://www.cdc.gov/coronavirus/2019-ncov/infection-control/infection-prevention-control-faq.html?CDC_AA_refVal=https%3A%2F%2Fwww.cdc.gov%2Fcoronavirus%2F2019-ncov%2Fhcp%2Finfection-prevention-control-faq.html,Healthcare Infection Prevention and Control FAQa for COVID-21,Center for Disease Control and Prevention (CDC),Healthcare Infection Prevention,USA,,,en,2020/03/17 -" -What actions should school and childcare program administrators take to plan for an outbreak?","Administrators of childcare programs and K-12 schools should take the following actions to plan and prepare for COVID-19: - -Review, update, and implement school emergency operation plans, particularly for infectious disease outbreaks. -Emphasize actions for students and staff to take such as staying home when sick; appropriately covering coughs and sneezes; and washing hands often. -Cleaning frequently touched surfaces. -Monitor and plan for absenteeism. -Review the usual absenteeism patterns at your school among both students and staff. -Review attendance and sick leave policies. Encourage students and staff to stay home when sick. Use flexibility, when possible, to allow staff to stay home to care for sick family members. -Alert local health officials about increases in absences, particularly those that appear due to respiratory illnesses. -Monitor and plan for addressing fear and bullying related to COVID-19. -Communicate early and repeatedly with parents directly what the policies and procedures will be to allow parents to assure proper guardianship and care of children.","

Administrators of childcare programs and K-12 schools should take the following actions to plan and prepare for COVID-19:

-
    -
  • Review, update, and implement school emergency operation plans, particularly for infectious disease outbreaks.
  • -
  • Emphasize actions for students and staff to take such as staying home when sick; appropriately covering coughs and sneezes; and washing hands often.
  • -
  • Cleaning frequently touched surfaces.
  • -
  • Monitor and plan for absenteeism. -
      -
    • Review the usual absenteeism patterns at your school among both students and staff.
    • -
    • Review attendance and sick leave policies. Encourage students and staff to stay home when sick. Use flexibility, when possible, to allow staff to stay home to care for sick family members.
    • -
    • Alert local health officials about increases in absences, particularly those that appear due to respiratory illnesses.
    • -
    -
  • -
  • Monitor and plan for addressing fear and bullying related to COVID-19.
  • -
  • Communicate early and repeatedly with parents directly what the policies and procedures will be to allow parents to assure proper guardianship and care of children.
  • -
",https://www.cdc.gov/coronavirus/2019-ncov/community/schools-childcare/schools-faq.html,K-12 Schools and Childcare Programs,Center for Disease Control and Prevention (CDC),Planning and Preparedness,USA,,,en,2020/03/17 -What actions can staff and students take to prevent the spread of COVID-19 in my school/childcare program?,"Encourage students and staff to take everyday preventive actions to prevent the spread of respiratory illnesses, such as staying home when sick; appropriately covering coughs and sneezes; cleaning frequently touched surfaces; and washing hands often with soap and water. If soap and water are not readily available, use an alcohol-based hand sanitizer with at least 60% alcohol. Always wash hands with soap and water if hands are visibly dirty. Remember to supervise young children when they use hand sanitizer to prevent swallowing alcohol, especially in childcare facilities.","

Encourage students and staff to take everyday preventive actions to prevent the spread of respiratory illnesses, such as staying home when sick; appropriately covering coughs and sneezes; cleaning frequently touched surfaces; and washing hands often with soap and water. If soap and water are not readily available, use an alcohol-based hand sanitizer with at least 60% alcohol. Always wash hands with soap and water if hands are visibly dirty. Remember to supervise young children when they use hand sanitizer to prevent swallowing alcohol, especially in childcare facilities.

",https://www.cdc.gov/coronavirus/2019-ncov/community/schools-childcare/schools-faq.html,K-12 Schools and Childcare Programs,Center for Disease Control and Prevention (CDC),Planning and Preparedness,USA,,,en,2020/03/17 -What steps should my school take if a student or staff member shows symptoms of COVID-19?,You should establish procedures to ensure students and staff who become sick at school or who arrive at school sick are sent home as soon as possible. Keep sick students and staff separate from well students and staff until sick students and staff can be sent home.,

You should establish procedures to ensure students and staff who become sick at school or who arrive at school sick are sent home as soon as possible. Keep sick students and staff separate from well students and staff until sick students and staff can be sent home.

,https://www.cdc.gov/coronavirus/2019-ncov/community/schools-childcare/schools-faq.html,K-12 Schools and Childcare Programs,Center for Disease Control and Prevention (CDC),Planning and Preparedness,USA,,,en,2020/03/17 -Should my school screen students for cases of COVID-19?,"Schools and childcare programs are not expected to screen children, students, or staff to identify cases of COVID-19. The majority of respiratory illnesses are not COVID-19. If a community or school has cases of COVID-19, local health officials will help identify those individuals and will follow up on next steps.","

Schools and childcare programs are not expected to screen children, students, or staff to identify cases of COVID-19. The majority of respiratory illnesses are not COVID-19. If a community or school has cases of COVID-19, local health officials will help identify those individuals and will follow up on next steps.

",https://www.cdc.gov/coronavirus/2019-ncov/community/schools-childcare/schools-faq.html,K-12 Schools and Childcare Programs,Center for Disease Control and Prevention (CDC),Planning and Preparedness,USA,,,en,2020/03/17 -What environmental cleaning procedures should my school take to keep staff and students healthy?,"Perform routine environmental cleaning. Routinely clean frequently touched surfaces (e.g., doorknobs, light switches, countertops) with cleaners that you typically use. Use all cleaning products according to the directions on the label. Provide disposable wipes so that commonly used surfaces (e.g., keyboards, desks, remote controls) can be wiped down by students and staff before each use.","

Perform routine environmental cleaning. Routinely clean frequently touched surfaces (e.g., doorknobs, light switches, countertops) with cleaners that you typically use. Use all cleaning products according to the directions on the label. Provide disposable wipes so that commonly used surfaces (e.g., keyboards, desks, remote controls) can be wiped down by students and staff before each use.

",https://www.cdc.gov/coronavirus/2019-ncov/community/schools-childcare/schools-faq.html,K-12 Schools and Childcare Programs,Center for Disease Control and Prevention (CDC),Planning and Preparedness,USA,,,en,2020/03/17 -"What resources does CDC have available to share with staff, students, and parents?","Share resources with the school community to help them understand COVID-19 and steps they can take to protect themselves: - -CDC’s health communication resources -CDC information on stigma and COVID-19 -CDC information on COVID-19 and children -CDC offers several free handwashing resources that include health promotion materials, information on proper handwashing technique, and tips for families to help children develop good handwashing habits. -Other health and education professional organizations may also have helpful resources your school can use or share, such as the American Academy of Pediatricsexternal icon -CDC’s information on helping children cope with emergencies -Stigma prevention and facts about COVID-19","

Share resources with the school community to help them understand COVID-19 and steps they can take to protect themselves:

-",https://www.cdc.gov/coronavirus/2019-ncov/community/schools-childcare/schools-faq.html,K-12 Schools and Childcare Programs,Center for Disease Control and Prevention (CDC),Planning and Preparedness,USA,,,en,2020/03/17 -What actions should my school take if a sick student or staff member attended school before being confirmed as a COVID-19 case?,"Local health officials may recommend temporary school dismissals. Local health officials’ recommendations for the scope (e.g., a single school, a full district) and duration of school dismissals will be made on a case-by-case basis based on the most up-to-date information about COVID-19 and the specific cases in the impacted community. Dismissals may be 14 days or longer, depending on the situation in your community. -Schools should work with the local health department and other relevant leadership to communicate the possible COVID-19 exposure to the school community. This communication to the school community should align with the communication plan in the school’s emergency operations plan. In such a circumstance, it is critical to maintain confidentiality of the student or staff member as required by the Americans with Disabilities Act and the Family Education Rights and Privacy Act. -If a child or staff member has been identified with COVID-19, school and program administrators should seek guidance from local health officials to determine when students and staff should return to schools and what additional steps are needed for the school community. In addition, students and staff who are well but are taking care of or share a home with someone with a case of COVID-19 should follow instructions from local health officials to determine when to return to school.","
    -
  • Local health officials may recommend temporary school dismissals. Local health officials’ recommendations for the scope (e.g., a single school, a full district) and duration of school dismissals will be made on a case-by-case basis based on the most up-to-date information about COVID-19 and the specific cases in the impacted community. Dismissals may be 14 days or longer, depending on the situation in your community.
  • -
  • Schools should work with the local health department and other relevant leadership to communicate the possible COVID-19 exposure to the school community. This communication to the school community should align with the communication plan in the school’s emergency operations plan. In such a circumstance, it is critical to maintain confidentiality of the student or staff member as required by the Americans with Disabilities Act and the Family Education Rights and Privacy Act.
  • -
  • If a child or staff member has been identified with COVID-19, school and program administrators should seek guidance from local health officials to determine when students and staff should return to schools and what additional steps are needed for the school community. In addition, students and staff who are well but are taking care of or share a home with someone with a case of COVID-19 should follow instructions from local health officials to determine when to return to school.
  • -
",https://www.cdc.gov/coronavirus/2019-ncov/community/schools-childcare/schools-faq.html,K-12 Schools and Childcare Programs,Center for Disease Control and Prevention (CDC),Responding to comfirmed COVID-19 cases,USA,,,en,2020/03/17 -What should I do if my school experiences increased rates of absenteeism?,"If your school notices a substantial increase in the number of students or staff missing school due to illness, report this to your local health officials.","

If your school notices a substantial increase in the number of students or staff missing school due to illness, report this to your local health officials.

",https://www.cdc.gov/coronavirus/2019-ncov/community/schools-childcare/schools-faq.html,K-12 Schools and Childcare Programs,Center for Disease Control and Prevention (CDC),Responding to comfirmed COVID-19 cases,USA,,,en,2020/03/17 -Should I close our school/childcare program if there's been COVID-19 cases in my school?,"You may need to use temporary school dismissals of 14 days, or possibly longer, if a student or staff member attended school before being confirmed as having COVID-19. Any decision about school dismissal or cancellation of school events should be made in coordination with your local health officials. Schools are not expected to make decisions about dismissal and event cancellation independent of their local health officials. Dismissal and event cancellation decisions should be considered on a case-by-case basis using information from health officials about the local conditions.","

You may need to use temporary school dismissals of 14 days, or possibly longer, if a student or staff member attended school before being confirmed as having COVID-19. Any decision about school dismissal or cancellation of school events should be made in coordination with your local health officials. Schools are not expected to make decisions about dismissal and event cancellation independent of their local health officials. Dismissal and event cancellation decisions should be considered on a case-by-case basis using information from health officials about the local conditions.

",https://www.cdc.gov/coronavirus/2019-ncov/community/schools-childcare/schools-faq.html,K-12 Schools and Childcare Programs,Center for Disease Control and Prevention (CDC),School Dismissals,USA,,,en,2020/03/17 -"If our school is dismissed, how long should we dismiss school for?","The length (duration), geographic scope, and public health objective of school dismissals may be reassessed and changed as the local outbreak situation evolves. At this time, the recommendation is for at least 14 days. This recommendation may be updated as the situation evolves.","

The length (duration), geographic scope, and public health objective of school dismissals may be reassessed and changed as the local outbreak situation evolves. At this time, the recommendation is for at least 14 days. This recommendation may be updated as the situation evolves.

",https://www.cdc.gov/coronavirus/2019-ncov/community/schools-childcare/schools-faq.html,K-12 Schools and Childcare Programs,Center for Disease Control and Prevention (CDC),School Dismissals,USA,,,en,2020/03/17 -Are there ways for students to keep learning if we decide to dismiss schools?,"Yes, many schools may use e-learning plans and distance learning options for continuity of education, if available. Your school or district’s emergency operations plan should have recommended strategies for ensuring continuity of education and may provide guidance on how to proceed during a school dismissal. In addition, you may be able to use and/or scale up approaches used in other situations when students have not been able to attend school (e.g. inclement weather, facility damage, power outages).",">

Yes, many schools may use e-learning plans and distance learning options for continuity of education, if available. Your school or district’s emergency operations plan should have recommended strategies for ensuring continuity of education and may provide guidance on how to proceed during a school dismissal. In addition, you may be able to use and/or scale up approaches used in other situations when students have not been able to attend school (e.g. inclement weather, facility damage, power outages).

",https://www.cdc.gov/coronavirus/2019-ncov/community/schools-childcare/schools-faq.html,K-12 Schools and Childcare Programs,Center for Disease Control and Prevention (CDC),School Dismissals,USA,,,en,2020/03/17 -"If I make the decision for a school dismissal, what else should I consider?","In the event of a school dismissal, extracurricular group activities and large events, such as performances, field trips, and sporting events should also be cancelled. This may require close coordination with other partners and organizations (e.g., high school athletics associations, music associations). In addition, discourage students and staff from gathering or socializing anywhere, like at a friend’s house, a favorite restaurant, or the local shopping mall. - -Ensure continuity of meal programs for your students. Consider ways to distribute food to students who receive free or reduced cost meals. Check with the US Department of Agriculture – Food and Nutrition Service for additional information: https://www.fns.usda.gov/disaster/USDAfoodsPandemicSchools.external icon If there is community spread of COVID-19, design strategies to avoid distribution in settings where people might gather in a group or crowd. Consider options such as “grab-and-go” bagged lunches or meal delivery. - -Consider alternatives for providing essential medical and social services for students. Continue providing necessary services for children with special healthcare needs, or work with the state Title V Children and Youth with Special Health Care Needs (CYSHCN) Program.","

In the event of a school dismissal, extracurricular group activities and large events, such as performances, field trips, and sporting events should also be cancelled. This may require close coordination with other partners and organizations (e.g., high school athletics associations, music associations). In addition, discourage students and staff from gathering or socializing anywhere, like at a friend’s house, a favorite restaurant, or the local shopping mall.

-

Ensure continuity of meal programs for your students. Consider ways to distribute food to students who receive free or reduced cost meals. Check with the US Department of Agriculture – Food and Nutrition Service for additional information: https://www.fns.usda.gov/disaster/USDAfoodsPandemicSchools.external icon If there is community spread of COVID-19, design strategies to avoid distribution in settings where people might gather in a group or crowd. Consider options such as “grab-and-go” bagged lunches or meal delivery.

-

Consider alternatives for providing essential medical and social services for students. Continue providing necessary services for children with special healthcare needs, or work with the state Title V Children and Youth with Special Health Care Needs (CYSHCN) Program.

",https://www.cdc.gov/coronavirus/2019-ncov/community/schools-childcare/schools-faq.html,K-12 Schools and Childcare Programs,Center for Disease Control and Prevention (CDC),School Dismissals,USA,,,en,2020/03/17 -"If we dismiss school, what do we need to consider when re-opening the building to students?","CDC is currently working on additional guidance to help schools determine when and how to re-open their buildings to students. If you need immediate assistance with this, consult local health officials for guidance.","

CDC is currently working on additional guidance to help schools determine when and how to re-open their buildings to students. If you need immediate assistance with this, consult local health officials for guidance.

",https://www.cdc.gov/coronavirus/2019-ncov/community/schools-childcare/schools-faq.html,K-12 Schools and Childcare Programs,Center for Disease Control and Prevention (CDC),School Dismissals,USA,,,en,2020/03/17 -"What should we do if a child, student, or staff member has recently traveled to an area with COVID-19 or has a family member who has traveled to an area with COVID-19?","Review updated CDC information for travelers, including FAQ for travelers, and consult with state and local health officials. Health officials may use CDC’s Interim US Guidance for Risk Assessment and Public Health Management of Persons with Potential Coronavirus Disease 2019 (COVID-19) Exposure in Travel-associated or Community Settings to make recommendations. Individuals returning from travel to areas with community spread of COVID-19 must follow guidance they have received from health officials.","

Review updated CDC information for travelers, including FAQ for travelers, and consult with state and local health officials. Health officials may use CDC’s Interim US Guidance for Risk Assessment and Public Health Management of Persons with Potential Coronavirus Disease 2019 (COVID-19) Exposure in Travel-associated or Community Settings to make recommendations. Individuals returning from travel to areas with community spread of COVID-19 must follow guidance they have received from health officials.

",https://www.cdc.gov/coronavirus/2019-ncov/community/schools-childcare/schools-faq.html,K-12 Schools and Childcare Programs,Center for Disease Control and Prevention (CDC),Recent Travel,USA,,,en,2020/03/17 -What is a coronavirus?,"Coronaviruses are a large family of viruses which may cause illness in animals or humans. In humans, several coronaviruses are known to cause respiratory infections ranging from the common cold to more severe diseases such as Middle East Respiratory Syndrome (MERS) and Severe Acute Respiratory Syndrome (SARS). The most recently discovered coronavirus causes coronavirus disease COVID-19.","

Coronaviruses are a large family of viruses which may cause illness in animals or humans.  In humans, several coronaviruses are known to cause respiratory infections ranging from the common cold to more severe diseases such as Middle East Respiratory Syndrome (MERS) and Severe Acute Respiratory Syndrome (SARS). The most recently discovered coronavirus causes coronavirus disease COVID-19.

",https://www.who.int/news-room/q-a-detail/q-a-coronaviruses,Q&A on coronaviruses (COVID-19),World Health Organization (WHO),,,,,en,2020/03/17 -What is COVID-19?,"COVID-19 is the infectious disease caused by the most recently discovered coronavirus. This new virus and disease were unknown before the outbreak began in Wuhan, China, in December 2019.","

COVID-19 is the infectious disease caused by the most recently discovered coronavirus. This new virus and disease were unknown before the outbreak began in Wuhan, China, in December 2019.

-",https://www.who.int/news-room/q-a-detail/q-a-coronaviruses,Q&A on coronaviruses (COVID-19),World Health Organization (WHO),,,,,en,2020/03/17 -What are the symptoms of COVID-19?,"The most common symptoms of COVID-19 are fever, tiredness, and dry cough. Some patients may have aches and pains, nasal congestion, runny nose, sore throat or diarrhea. These symptoms are usually mild and begin gradually. Some people become infected but don’t develop any symptoms and don't feel unwell. Most people (about 80%) recover from the disease without needing special treatment. Around 1 out of every 6 people who gets COVID-19 becomes seriously ill and develops difficulty breathing. Older people, and those with underlying medical problems like high blood pressure, heart problems or diabetes, are more likely to develop serious illness. People with fever, cough and difficulty breathing should seek medical attention.","

The most common symptoms of COVID-19 are fever, tiredness, and dry cough. Some patients may have aches and pains, nasal congestion, runny nose, sore throat or diarrhea. These symptoms are usually mild and begin gradually. Some people become infected but don’t develop any symptoms and don't feel unwell. Most people (about 80%) recover from the disease without needing special treatment. Around 1 out of every 6 people who gets COVID-19 becomes seriously ill and develops difficulty breathing. Older people, and those with underlying medical problems like high blood pressure, heart problems or diabetes, are more likely to develop serious illness. People with fever, cough and difficulty breathing should seek medical attention.

",https://www.who.int/news-room/q-a-detail/q-a-coronaviruses,Q&A on coronaviruses (COVID-19),World Health Organization (WHO),,,,,en,2020/03/17 -How does COVID-19 spread?,"People can catch COVID-19 from others who have the virus. The disease can spread from person to person through small droplets from the nose or mouth which are spread when a person with COVID-19 coughs or exhales. These droplets land on objects and surfaces around the person. Other people then catch COVID-19 by touching these objects or surfaces, then touching their eyes, nose or mouth. People can also catch COVID-19 if they breathe in droplets from a person with COVID-19 who coughs out or exhales droplets. This is why it is important to stay more than 1 meter (3 feet) away from a person who is sick. - -WHO is assessing ongoing research on the ways COVID-19 is spread and will continue to share updated findings. ","

People can catch COVID-19 from others who have the virus. The disease can spread from person to person through small droplets from the nose or mouth which are spread when a person with COVID-19 coughs or exhales. These droplets land on objects and surfaces around the person. Other people then catch COVID-19 by touching these objects or surfaces, then touching their eyes, nose or mouth. People can also catch COVID-19 if they breathe in droplets from a person with COVID-19 who coughs out or exhales droplets. This is why it is important to stay more than 1 meter (3 feet) away from a person who is sick.

WHO is assessing ongoing research on the ways COVID-19 is spread and will continue to share updated findings.    

",https://www.who.int/news-room/q-a-detail/q-a-coronaviruses,Q&A on coronaviruses (COVID-19),World Health Organization (WHO),,,,,en,2020/03/17 -Can the virus that causes COVID-19 be transmitted through the air?,Studies to date suggest that the virus that causes COVID-19 is mainly transmitted through contact with respiratory droplets rather than through the air. See previous answer on “How does COVID-19 spread?”,

Studies to date suggest that the virus that causes COVID-19 is mainly transmitted through contact with respiratory droplets rather than through the air.  See previous answer on “How does COVID-19 spread?”

,https://www.who.int/news-room/q-a-detail/q-a-coronaviruses,Q&A on coronaviruses (COVID-19),World Health Organization (WHO),,,,,en,2020/03/17 -Can CoVID-19 be caught from a person who has no symptoms?,"The main way the disease spreads is through respiratory droplets expelled by someone who is coughing. The risk of catching COVID-19 from someone with no symptoms at all is very low. However, many people with COVID-19 experience only mild symptoms. This is particularly true at the early stages of the disease. It is therefore possible to catch COVID-19 from someone who has, for example, just a mild cough and does not feel ill. WHO is assessing ongoing research on the period of transmission of COVID-19 and will continue to share updated findings. ","

The main way the disease spreads is through respiratory droplets expelled by someone who is coughing. The risk of catching COVID-19 from someone with no symptoms at all is very low. However, many people with COVID-19 experience only mild symptoms. This is particularly true at the early stages of the disease. It is therefore possible to catch COVID-19 from someone who has, for example, just a mild cough and does not feel ill.  WHO is assessing ongoing research on the period of transmission of COVID-19 and will continue to share updated findings.    

",https://www.who.int/news-room/q-a-detail/q-a-coronaviruses,Q&A on coronaviruses (COVID-19),World Health Organization (WHO),,,,,en,2020/03/17 -Can I catch COVID-19 from the feces of someone with the disease?,"The risk of catching COVID-19 from the feces of an infected person appears to be low. While initial investigations suggest the virus may be present in feces in some cases, spread through this route is not a main feature of the outbreak. WHO is assessing ongoing research on the ways COVID-19 is spread and will continue to share new findings. Because this is a risk, however, it is another reason to clean hands regularly, after using the bathroom and before eating. ","

The risk of catching COVID-19 from the feces of an infected person appears to be low. While initial investigations suggest the virus may be present in feces in some cases, spread through this route is not a main feature of the outbreak. WHO is assessing ongoing research on the ways COVID-19 is spread and will continue to share new findings. Because this is a risk, however, it is another reason to clean hands regularly, after using the bathroom and before eating. 

",https://www.who.int/news-room/q-a-detail/q-a-coronaviruses,Q&A on coronaviruses (COVID-19),World Health Organization (WHO),,,,,en,2020/03/17 -What can I do to protect myself and prevent the spread of disease?,"Protection measures for everyone - -Stay aware of the latest information on the COVID-19 outbreak, available on the WHO website and through your national and local public health authority. Many countries around the world have seen cases of COVID-19 and several have seen outbreaks. Authorities in China and some other countries have succeeded in slowing or stopping their outbreaks. However, the situation is unpredictable so check regularly for the latest news. - -You can reduce your chances of being infected or spreading COVID-19 by taking some simple precautions: - -Regularly and thoroughly clean your hands with an alcohol-based hand rub or wash them with soap and water. -Why? Washing your hands with soap and water or using alcohol-based hand rub kills viruses that may be on your hands. -Maintain at least 1 metre (3 feet) distance between yourself and anyone who is coughing or sneezing. -Why? When someone coughs or sneezes they spray small liquid droplets from their nose or mouth which may contain virus. If you are too close, you can breathe in the droplets, including the COVID-19 virus if the person coughing has the disease. -Avoid touching eyes, nose and mouth. -Why? Hands touch many surfaces and can pick up viruses. Once contaminated, hands can transfer the virus to your eyes, nose or mouth. From there, the virus can enter your body and can make you sick. -Make sure you, and the people around you, follow good respiratory hygiene. This means covering your mouth and nose with your bent elbow or tissue when you cough or sneeze. Then dispose of the used tissue immediately. -Why? Droplets spread virus. By following good respiratory hygiene you protect the people around you from viruses such as cold, flu and COVID-19. -Stay home if you feel unwell. If you have a fever, cough and difficulty breathing, seek medical attention and call in advance. Follow the directions of your local health authority. -Why? National and local authorities will have the most up to date information on the situation in your area. Calling in advance will allow your health care provider to quickly direct you to the right health facility. This will also protect you and help prevent spread of viruses and other infections. -Keep up to date on the latest COVID-19 hotspots (cities or local areas where COVID-19 is spreading widely). If possible, avoid traveling to places – especially if you are an older person or have diabetes, heart or lung disease. -Why? You have a higher chance of catching COVID-19 in one of these areas. - - - - -Protection measures for persons who are in or have recently visited (past 14 days) areas where COVID-19 is spreading - -Follow the guidance outlined above (Protection measures for everyone) -Self-isolate by staying at home if you begin to feel unwell, even with mild symptoms such as headache, low grade fever (37.3 C or above) and slight runny nose, until you recover. If it is essential for you to have someone bring you supplies or to go out, e.g. to buy food, then wear a mask to avoid infecting other people. -Why? Avoiding contact with others and visits to medical facilities will allow these facilities to operate more effectively and help protect you and others from possible COVID-19 and other viruses. -If you develop fever, cough and difficulty breathing, seek medical advice promptly as this may be due to a respiratory infection or other serious condition. Call in advance and tell your provider of any recent travel or contact with travelers. -Why? Calling in advance will allow your health care provider to quickly direct you to the right health facility. This will also help to prevent possible spread of COVID-19 and other viruses.","

-

Protection measures for everyone

Stay aware of the latest information on the COVID-19 outbreak, available on the WHO website and through your national and local public health authority. Many countries around the world have seen cases of COVID-19 and several have seen outbreaks. Authorities in China and some other countries have succeeded in slowing or stopping their outbreaks. However, the situation is unpredictable so check regularly for the latest news.

You can reduce your chances of being infected or spreading COVID-19 by taking some simple precautions:

  • Regularly and thoroughly clean your hands with an alcohol-based hand rub or wash them with soap and water.
    Why? Washing your hands with soap and water or using alcohol-based hand rub kills viruses that may be on your hands.
  • Maintain at least 1 metre (3 feet) distance between yourself and anyone who is coughing or sneezing.
    Why? When someone coughs or sneezes they spray small liquid droplets from their nose or mouth which may contain virus. If you are too close, you can breathe in the droplets, including the COVID-19 virus if the person coughing has the disease.
  • Avoid touching eyes, nose and mouth.
    Why? Hands touch many surfaces and can pick up viruses. Once contaminated, hands can transfer the virus to your eyes, nose or mouth. From there, the virus can enter your body and can make you sick.
  • Make sure you, and the people around you, follow good respiratory hygiene. This means covering your mouth and nose with your bent elbow or tissue when you cough or sneeze. Then dispose of the used tissue immediately.
    Why? Droplets spread virus. By following good respiratory hygiene you protect the people around you from viruses such as cold, flu and COVID-19.
  • Stay home if you feel unwell. If you have a fever, cough and difficulty breathing, seek medical attention and call in advance. Follow the directions of your local health authority.
    Why? National and local authorities will have the most up to date information on the situation in your area. Calling in advance will allow your health care provider to quickly direct you to the right health facility. This will also protect you and help prevent spread of viruses and other infections.
  • Keep up to date on the latest COVID-19 hotspots (cities or local areas where COVID-19 is spreading widely). If possible, avoid traveling to places  – especially if you are an older person or have diabetes, heart or lung disease.
    Why? You have a higher chance of catching COVID-19 in one of these areas.

 


Protection measures for persons who are in or have recently visited (past 14 days) areas where COVID-19 is spreading

  • Follow the guidance outlined above (Protection measures for everyone)
  • Self-isolate by staying at home if you begin to feel unwell, even with mild symptoms such as headache, low grade fever (37.3 C or above) and slight runny nose, until you recover. If it is essential for you to have someone bring you supplies or to go out, e.g. to buy food, then wear a mask to avoid infecting other people.
    Why? Avoiding contact with others and visits to medical facilities will allow these facilities to operate more effectively and help protect you and others from possible COVID-19 and other viruses.
  • If you develop fever, cough and difficulty breathing, seek medical advice promptly as this may be due to a respiratory infection or other serious condition. Call in advance and tell your provider of any recent travel or contact with travelers.
    Why? Calling in advance will allow your health care provider to quickly direct you to the right health facility. This will also help to prevent possible spread of COVID-19 and other viruses.

 

 

 

 

 

-

",https://www.who.int/news-room/q-a-detail/q-a-coronaviruses,Q&A on coronaviruses (COVID-19),World Health Organization (WHO),,,,,en,2020/03/17 -How likely am I to catch COVID-19?,"The risk depends on where you are - and more specifically, whether there is a COVID-19 outbreak unfolding there. - -For most people in most locations the risk of catching COVID-19 is still low. However, there are now places around the world (cities or areas) where the disease is spreading. For people living in, or visiting, these areas the risk of catching COVID-19 is higher. Governments and health authorities are taking vigorous action every time a new case of COVID-19 is identified. Be sure to comply with any local restrictions on travel, movement or large gatherings. Cooperating with disease control efforts will reduce your risk of catching or spreading COVID-19. - -COVID-19 outbreaks can be contained and transmission stopped, as has been shown in China and some other countries. Unfortunately, new outbreaks can emerge rapidly. It’s important to be aware of the situation where you are or intend to go. WHO publishes daily updates on the COVID-19 situation worldwide. - -You can see these at https://www.who.int/emergencies/diseases/novel-coronavirus-2019/situation-reports/","

The risk depends on where you  are - and more specifically, whether there is a COVID-19 outbreak unfolding there.

For most people in most locations the risk of catching COVID-19 is still low. However, there are now places around the world (cities or areas) where the disease is spreading. For people living in, or visiting, these areas the risk of catching COVID-19 is higher. Governments and health authorities are taking vigorous action every time a new case of COVID-19 is identified. Be sure to comply with any local restrictions on travel, movement or large gatherings. Cooperating with disease control efforts will reduce your risk of catching or spreading COVID-19.

COVID-19 outbreaks can be contained and transmission stopped, as has been shown in China and some other countries. Unfortunately, new outbreaks can emerge rapidly. It’s important to be aware of the situation where you are or intend to go. WHO publishes daily updates on the COVID-19 situation worldwide.

You can see these at https://www.who.int/emergencies/diseases/novel-coronavirus-2019/situation-reports/

",https://www.who.int/news-room/q-a-detail/q-a-coronaviruses,Q&A on coronaviruses (COVID-19),World Health Organization (WHO),,,,,en,2020/03/17 -Should I worry about COVID-19?,"Illness due to COVID-19 infection is generally mild, especially for children and young adults. However, it can cause serious illness: about 1 in every 5 people who catch it need hospital care. It is therefore quite normal for people to worry about how the COVID-19 outbreak will affect them and their loved ones. - -We can channel our concerns into actions to protect ourselves, our loved ones and our communities. First and foremost among these actions is regular and thorough hand-washing and good respiratory hygiene. Secondly, keep informed and follow the advice of the local health authorities including any restrictions put in place on travel, movement and gatherings. -Learn more about how to protect yourself at https://www.who.int/emergencies/diseases/novel-coronavirus-2019/advice-for-public","

Illness due to COVID-19 infection is generally mild, especially for children and young adults. However, it can cause serious illness: about 1 in every 5 people who catch it need hospital care. It is therefore quite normal for people to worry about how the COVID-19 outbreak will affect them and their loved ones.

We can channel our concerns into actions to protect ourselves, our loved ones and our communities. First and foremost among these actions is regular and thorough hand-washing and good respiratory hygiene. Secondly, keep informed and follow the advice of the local health authorities including any restrictions put in place on travel, movement and gatherings.

Learn more about how to protect yourself at https://www.who.int/emergencies/diseases/novel-coronavirus-2019/advice-for-public

",https://www.who.int/news-room/q-a-detail/q-a-coronaviruses,Q&A on coronaviruses (COVID-19),World Health Organization (WHO),,,,,en,2020/03/17 -Who is at risk of developing severe illness?,"While we are still learning about how COVID-2019 affects people, older persons and persons with pre-existing medical conditions (such as high blood pressure, heart disease, lung disease, cancer or diabetes) appear to develop serious illness more often than others. ","

While we are still learning about how COVID-2019 affects people, older persons and persons with pre-existing medical conditions (such as high blood pressure, heart disease, lung disease, cancer or diabetes)  appear to develop serious illness more often than others. 

",https://www.who.int/news-room/q-a-detail/q-a-coronaviruses,Q&A on coronaviruses (COVID-19),World Health Organization (WHO),,,,,en,2020/03/17 -Are antibiotics effective in preventing or treating the COVID-19?,"No. Antibiotics do not work against viruses, they only work on bacterial infections. COVID-19 is caused by a virus, so antibiotics do not work. Antibiotics should not be used as a means of prevention or treatment of COVID-19. They should only be used as directed by a physician to treat a bacterial infection. ","

No. Antibiotics do not work against viruses, they only work on bacterial infections. COVID-19 is caused by a virus, so antibiotics do not work. Antibiotics should not be used as a means of prevention or treatment of COVID-19. They should only be used as directed by a physician to treat a bacterial infection. 

",https://www.who.int/news-room/q-a-detail/q-a-coronaviruses,Q&A on coronaviruses (COVID-19),World Health Organization (WHO),,,,,en,2020/03/17 -Are there any medicines or therapies that can prevent or cure COVID-19?,"While some western, traditional or home remedies may provide comfort and alleviate symptoms of COVID-19, there is no evidence that current medicine can prevent or cure the disease. WHO does not recommend self-medication with any medicines, including antibiotics, as a prevention or cure for COVID-19. However, there are several ongoing clinical trials that include both western and traditional medicines. WHO will continue to provide updated information as soon as clinical findings are available.","

While some western, traditional or home remedies may provide comfort and alleviate symptoms of COVID-19, there is no evidence that current medicine can prevent or cure the disease. WHO does not recommend self-medication with any medicines, including antibiotics, as a prevention or cure for COVID-19. However, there are several ongoing clinical trials that include both western and traditional medicines. WHO will continue to provide updated information as soon as clinical findings are available.

 

",https://www.who.int/news-room/q-a-detail/q-a-coronaviruses,Q&A on coronaviruses (COVID-19),World Health Organization (WHO),,,,,en,2020/03/17 -"Is there a vaccine, drug or treatment for COVID-19?","Not yet. To date, there is no vaccine and no specific antiviral medicine to prevent or treat COVID-2019. However, those affected should receive care to relieve symptoms. People with serious illness should be hospitalized. Most patients recover thanks to supportive care. - -Possible vaccines and some specific drug treatments are under investigation. They are being tested through clinical trials. WHO is coordinating efforts to develop vaccines and medicines to prevent and treat COVID-19. - -The most effective ways to protect yourself and others against COVID-19 are to frequently clean your hands, cover your cough with the bend of elbow or tissue, and maintain a distance of at least 1 meter (3 feet) from people who are coughing or sneezing. (See Basic protective measures against the new coronavirus).","

Not yet. To date, there is no vaccine and no specific antiviral medicine to prevent or treat COVID-2019. However, those affected should receive care to relieve symptoms. People with serious illness should be hospitalized. Most patients recover thanks to supportive care.

Possible vaccines and some specific drug treatments are under investigation. They are being tested through clinical trials. WHO is coordinating efforts to develop vaccines and medicines to prevent and treat COVID-19.

The most effective ways to protect yourself and others against COVID-19 are to frequently clean your hands, cover your cough with the bend of elbow or tissue, and maintain a distance of at least 1 meter (3 feet) from people who are coughing or sneezing. (See Basic protective measures against the new coronavirus).

 

",https://www.who.int/news-room/q-a-detail/q-a-coronaviruses,Q&A on coronaviruses (COVID-19),World Health Organization (WHO),,,,,en,2020/03/17 -Is COVID-19 the same as SARS?,"No. The virus that causes COVID-19 and the one that caused the outbreak of Severe Acute Respiratory Syndrome (SARS) in 2003 are related to each other genetically, but the diseases they cause are quite different. - -SARS was more deadly but much less infectious than COVID-19. There have been no outbreaks of SARS anywhere in the world since 2003.","

No. The virus that causes COVID-19 and the one that caused the outbreak of Severe Acute Respiratory Syndrome (SARS) in 2003 are related to each other genetically, but the diseases they cause are quite different.

SARS was more deadly but much less infectious than COVID-19. There have been no outbreaks of SARS anywhere in the world since 2003.

",https://www.who.int/news-room/q-a-detail/q-a-coronaviruses,Q&A on coronaviruses (COVID-19),World Health Organization (WHO),,,,,en,2020/03/17 -Should I wear a mask to protect myself?,"Only wear a mask if you are ill with COVID-19 symptoms (especially coughing) or looking after someone who may have COVID-19. Disposable face mask can only be used once. If you are not ill or looking after someone who is ill then you are wasting a mask. There is a world-wide shortage of masks, so WHO urges people to use masks wisely. - -WHO advises rational use of medical masks to avoid unnecessary wastage of precious resources and mis-use of masks (see Advice on the use of masks). - -The most effective ways to protect yourself and others against COVID-19 are to frequently clean your hands, cover your cough with the bend of elbow or tissue and maintain a distance of at least 1 meter (3 feet) from people who are coughing or sneezing. See basic protective measures against the new coronavirus for more information. -","

Only wear a mask if you are ill with COVID-19 symptoms (especially coughing) or looking after someone who may have COVID-19. Disposable face mask can only be used once. If you are not ill or looking after someone who is ill then you are wasting a mask. There is a world-wide shortage of masks, so WHO urges people to use masks wisely.

WHO advises rational use of medical masks to avoid unnecessary wastage of precious resources and mis-use of masks  (see Advice on the use of masks).

The most effective ways to protect yourself and others against COVID-19 are to frequently clean your hands, cover your cough with the bend of elbow or tissue and maintain a distance of at least 1 meter (3 feet) from people who are coughing or sneezing. See basic protective measures against the new coronavirus for more information.


 

-",https://www.who.int/news-room/q-a-detail/q-a-coronaviruses,Q&A on coronaviruses (COVID-19),World Health Organization (WHO),,,,,en,2020/03/17 -"How to put on, use, take off and dispose of a mask?","Remember, a mask should only be used by health workers, care takers, and individuals with respiratory symptoms, such as fever and cough. -Before touching the mask, clean hands with an alcohol-based hand rub or soap and water -Take the mask and inspect it for tears or holes. -Orient which side is the top side (where the metal strip is). -Ensure the proper side of the mask faces outwards (the coloured side). -Place the mask to your face. Pinch the metal strip or stiff edge of the mask so it moulds to the shape of your nose. -Pull down the mask’s bottom so it covers your mouth and your chin. -After use, take off the mask; remove the elastic loops from behind the ears while keeping the mask away from your face and clothes, to avoid touching potentially contaminated surfaces of the mask. -Discard the mask in a closed bin immediately after use. -Perform hand hygiene after touching or discarding the mask – Use alcohol-based hand rub or, if visibly soiled, wash your hands with soap and water.","
  1. Remember, a mask should only be used by health workers, care takers, and individuals with respiratory symptoms, such as fever and cough.
  2. Before touching the mask, clean hands with an alcohol-based hand rub or soap and water
  3. Take the mask and inspect it for tears or holes.
  4. Orient which side is the top side (where the metal strip is).
  5. Ensure the proper side of the mask faces outwards (the coloured side).
  6. Place the mask to your face. Pinch the metal strip or stiff edge of the mask so it moulds to the shape of your nose.
  7. Pull down the mask’s bottom so it covers your mouth and your chin.
  8. After use, take off the mask; remove the elastic loops from behind the ears while keeping the mask away from your face and clothes, to avoid touching potentially contaminated surfaces of the mask.
  9. Discard the mask in a closed bin immediately after use.
  10. Perform hand hygiene after touching or discarding the mask – Use alcohol-based hand rub or, if visibly soiled, wash your hands with soap and water.
",https://www.who.int/news-room/q-a-detail/q-a-coronaviruses,Q&A on coronaviruses (COVID-19),World Health Organization (WHO),,,,,en,2020/03/17 -How long is the incubation period for COVID-19?,"The “incubation period” means the time between catching the virus and beginning to have symptoms of the disease. Most estimates of the incubation period for COVID-19 range from 1-14 days, most commonly around five days. These estimates will be updated as more data become available.","

The “incubation period” means the time between catching the virus and beginning to have symptoms of the disease. Most estimates of the incubation period for COVID-19 range from 1-14 days, most commonly around five days. These estimates will be updated as more data become available.

",https://www.who.int/news-room/q-a-detail/q-a-coronaviruses,Q&A on coronaviruses (COVID-19),World Health Organization (WHO),,,,,en,2020/03/17 -Can humans become infected with the COVID-19 from an animal source?,"Coronaviruses are a large family of viruses that are common in animals. Occasionally, people get infected with these viruses which may then spread to other people. For example, SARS-CoV was associated with civet cats and MERS-CoV is transmitted by dromedary camels. Possible animal sources of COVID-19 have not yet been confirmed. - -To protect yourself, such as when visiting live animal markets, avoid direct contact with animals and surfaces in contact with animals. Ensure good food safety practices at all times. Handle raw meat, milk or animal organs with care to avoid contamination of uncooked foods and avoid consuming raw or undercooked animal products.","

Coronaviruses are a large family of viruses that are common in animals. Occasionally, people get infected with these viruses which may then spread to other people. For example, SARS-CoV was associated with civet cats and MERS-CoV is transmitted by dromedary camels. Possible animal sources of COVID-19 have not yet been confirmed.  

To protect yourself, such as when visiting live animal markets, avoid direct contact with animals and surfaces in contact with animals. Ensure good food safety practices at all times. Handle raw meat, milk or animal organs with care to avoid contamination of uncooked foods and avoid consuming raw or undercooked animal products.

",https://www.who.int/news-room/q-a-detail/q-a-coronaviruses,Q&A on coronaviruses (COVID-19),World Health Organization (WHO),,,,,en,2020/03/17 -Can I catch COVID-19 from my pet?,"While there has been one instance of a dog being infected in Hong Kong, to date, there is no evidence that a dog, cat or any pet can transmit COVID-19. COVID-19 is mainly spread through droplets produced when an infected person coughs, sneezes, or speaks. To protect yourself, clean your hands frequently and thoroughly. - -WHO continues to monitor the latest research on this and other COVID-19 topics and will update as new findings are available. -","

While there has been one instance of a dog being infected in Hong Kong, to date, there is no evidence that a dog, cat or any pet can transmit COVID-19. COVID-19 is mainly spread through droplets produced when an infected person coughs, sneezes, or speaks. To protect yourself, clean your hands frequently and thoroughly. 

WHO continues to monitor the latest research on this and other COVID-19 topics and will update as new findings are available.

 

",https://www.who.int/news-room/q-a-detail/q-a-coronaviruses,Q&A on coronaviruses (COVID-19),World Health Organization (WHO),,,,,en,2020/03/17 -How long does the virus survive on surfaces?,"It is not certain how long the virus that causes COVID-19 survives on surfaces, but it seems to behave like other coronaviruses. Studies suggest that coronaviruses (including preliminary information on the COVID-19 virus) may persist on surfaces for a few hours or up to several days. This may vary under different conditions (e.g. type of surface, temperature or humidity of the environment). - -If you think a surface may be infected, clean it with simple disinfectant to kill the virus and protect yourself and others. Clean your hands with an alcohol-based hand rub or wash them with soap and water. Avoid touching your eyes, mouth, or nose","

It is not certain how long the virus that causes COVID-19 survives on surfaces, but it seems to behave like other coronaviruses. Studies suggest that coronaviruses (including preliminary information on the COVID-19 virus) may persist on surfaces for a few hours or up to several days. This may vary under different conditions (e.g. type of surface, temperature or humidity of the environment).

If you think a surface may be infected, clean it with simple disinfectant to kill the virus and protect yourself and others. Clean your hands with an alcohol-based hand rub or wash them with soap and water. Avoid touching your eyes, mouth, or nose.

",https://www.who.int/news-room/q-a-detail/q-a-coronaviruses,Q&A on coronaviruses (COVID-19),World Health Organization (WHO),,,,,en,2020/03/17 -Is it safe to receive a package from any area where COVID-19 has been reported?,"Yes. The likelihood of an infected person contaminating commercial goods is low and the risk of catching the virus that causes COVID-19 from a package that has been moved, travelled, and exposed to different conditions and temperature is also low. ","

Yes. The likelihood of an infected person contaminating commercial goods is low and the risk of catching the virus that causes COVID-19 from a package that has been moved, travelled, and exposed to different conditions and temperature is also low. 

",https://www.who.int/news-room/q-a-detail/q-a-coronaviruses,Q&A on coronaviruses (COVID-19),World Health Organization (WHO),,,,,en,2020/03/17 -Is there anything I should not do?,"The following measures ARE NOT effective against COVID-2019 and can be harmful: - -Smoking -Wearing multiple masks -Taking antibiotics (See question 10 ""Are there any medicines of therapies that can prevent or cure COVID-19?"") -In any case, if you have fever, cough and difficulty breathing seek medical care early to reduce the risk of developing a more severe infection and be sure to share your recent travel history with your health care provider.","

The following measures ARE NOT effective against COVID-2019 and can be harmful:

  • Smoking
  • Wearing multiple masks
  • Taking antibiotics (See question 10 ""Are there any medicines of therapies that can prevent or cure COVID-19?"")

In any case, if you have fever, cough and difficulty breathing seek medical care early to reduce the risk of developing a more severe infection and be sure to share your recent travel history with your health care provider.

",https://www.who.int/news-room/q-a-detail/q-a-coronaviruses,Q&A on coronaviruses (COVID-19),World Health Organization (WHO),,,,,en,2020/03/17 -What should I do if I have symptoms or have been exposed?,"Call your healthcare provider, or call before going to the emergency room. -We have guidance available for people who have or think they may have COVID-19: -What to do if you have confirmed or suspected coronavirus disease (COVID-19) (PDF) -What to do if you were potentially exposed to someone with confirmed coronavirus disease (COVID-19) (PDF) -What to do if you have symptoms of coronavirus disease 2019 (COVID-19) and have not been around anyone who has been diagnosed with COVID-19 (PDF)","",https://www.doh.wa.gov/Emergencies/Coronavirus,2019 Novel Coronavirus Outbreak (COVID-19),Washington State Department of Health,Symptoms and Testing,USA,Washington,,en,2020/03/17 -How do I get tested?,"If you have symptoms, call your healthcare provider. -Learn more about testing.","",https://www.doh.wa.gov/Emergencies/Coronavirus,2019 Novel Coronavirus Outbreak (COVID-19),Washington State Department of Health,Symptoms and Testing,USA,Washington,,en,2020/03/17 -What's the current risk?,"The risk posed by a virus outbreak depends on factors including how well it spreads between people, the severity of the illness it causes, and the medical or other measures we have to control the impact of the virus (for example, vaccine or treatment medications). - -COVID-19 is spreading in several communities in Washington, the risk of exposure is increasing for people who live in our state. -Healthcare workers caring for patients with COVID-19 are at elevated risk of exposure. -Those who have had close contact with persons with COVID-19 are at elevated risk of exposure. -Travelers returning from affected international locations where community spread is occurring are at elevated risk of exposure. -Our knowledge of COVID-19 is still rapidly evolving. The risk assessment will be updated as needed.","

The risk posed by a virus outbreak depends on factors including how well it spreads between people, the severity of the illness it causes, and the medical or other measures we have to control the impact of the virus (for example, vaccine or treatment medications).

- -
    -
  • COVID-19 is spreading in several communities in Washington, the risk of exposure is increasing for people who live in our state.
  • -
  • Healthcare workers caring for patients with COVID-19 are at elevated risk of exposure.
  • -
  • Those who have had close contact with persons with COVID-19 are at elevated risk of exposure.
  • -
  • Travelers returning from affected international locations where community spread is occurring are at elevated risk of exposure.
  • -
- -

Our knowledge of COVID-19 is still rapidly evolving. The risk assessment will be updated as needed.

",https://www.doh.wa.gov/Emergencies/Coronavirus,2019 Novel Coronavirus Outbreak (COVID-19),Washington State Department of Health,,USA,Washington,,en,2020/03/17 -How can people protect themselves?,"There is currently no vaccine to prevent COVID-19. The best way to prevent illness is to avoid being exposed to this virus. The virus is thought to spread mainly from person-to-person between people who are in close contact with one another (within about 6 feet). This occurs through respiratory droplets produced when an infected person coughs or sneezes. These droplets can land in the mouths or noses of people who are nearby or possibly be inhaled into the lungs. Older adults and people who have severe underlying chronic medical conditions like heart or lung disease or diabetes seem to be at higher risk for developing more serious complications from COVID-19 illness. Every person has a role to play. So much of protecting yourself and your family comes down to common sense: - -Washing hands with soap and water. -Clean and disinfect frequently touched surfaces daily. If surfaces are dirty, clean them using detergent or soap and water prior to disinfection. -Avoiding touching eyes, nose or mouth with unwashed hands. -Cover your cough or sneeze with a tissue or your elbow. -Avoiding close contact with people who are sick. -Staying away from work, school or other people if you become sick with respiratory symptoms like fever and cough. -Following guidance from public health officials. -Please consult with your health care provider about additional steps you may be able to take to protect yourself. -","There is currently no vaccine to prevent COVID-19. The best way to prevent illness is to avoid being exposed to this virus. The virus is thought to spread mainly from person-to-person between people who are in close contact with one another (within about 6 feet). This occurs through respiratory droplets produced when an infected person coughs or sneezes. These droplets can land in the mouths or noses of people who are nearby or possibly be inhaled into the lungs. Older adults and people who have severe underlying chronic medical conditions like heart or lung disease or diabetes seem to be at higher risk for developing more serious complications from COVID-19 illness. Every person has a role to play. So much of protecting yourself and your family comes down to common sense: 

  • Washing hands with soap and water.
  • Clean and disinfect frequently touched surfaces daily. If surfaces are dirty, clean them using detergent or soap and water prior to disinfection.
  • Avoiding touching eyes, nose or mouth with unwashed hands.
  • Cover your cough or sneeze with a tissue or your elbow.
  • Avoiding close contact with people who are sick.
  • Staying away from work, school or other people if you become sick with respiratory symptoms like fever and cough.
  • Following guidance from public health officials.
Please consult with your health care provider about additional steps you may be able to take to protect yourself.",https://www.cdph.ca.gov/Programs/CID/DCDC/Pages/Immunization/nCoV2019.aspx#,Coronavirus Disease-2019 (COVID-19),California Department of Public Health,,USA,California,,en,2020/03/17 -Who is at Higher Risk for Serious Illness from COVID-19?,"Early information out of China, where COVID-19 first started, shows that some people are at higher risk of getting very sick from this illness. This includes: - -Older adults (65+) -Individuals with compromised immune systems -Individuals who have serious chronic medical conditions like: -Heart disease -Diabetes -Lung disease -If you are at higher risk for serious illness from COVID-19 because of your age or health condition, it is important for you to take actions to reduce your risk of getting sick with the disease, including: - -Isolate at home and practice social distancing. -Wash your hands often with soap and water for at least 20 seconds, especially after blowing your nose, coughing, or sneezing, or having been in a public place. -Avoiding touching eyes, nose or mouth with unwashed hands. -Avoid close contact with people who are sick, and stay away from large gatherings and crowds. -Consider ways of getting food brought to your house through family, social, or commercial networks. -It is also important that you listen to public health officials who may recommend community actions to reduce potential exposure to COVID-19, especially if COVID-19 is spreading in your community. - -For more information visit the CDC's website. -","

Early information out of China, where COVID-19 first started, shows that some people are at higher risk of getting very sick from this illness. This includes:

  • Older adults (65+)
  • Individuals with compromised immune systems
  • Individuals who have serious chronic medical conditions like:
    • Heart disease
    • Diabetes
    • Lung disease

If you are at higher risk for serious illness from COVID-19 because of your age or health condition, it is important for you to take actions to reduce your risk of getting sick with the disease, including: 

    • Isolate at home and practice social distancing.
    • Wash your hands often with soap and water for at least 20 seconds, especially after blowing your nose, coughing, or sneezing, or having been in a public place.
    • Avoiding touching eyes, nose or mouth with unwashed hands.
    • Avoid close contact with people who are sick, and stay away from large gatherings and crowds.
    • Consider ways of getting food brought to your house through family, social, or commercial networks.

It is also important that you listen to public health officials who may recommend community actions to reduce potential exposure to COVID-19, especially if COVID-19 is spreading in your community.

For more information visit the CDC's website.

",https://www.cdph.ca.gov/Programs/CID/DCDC/Pages/Immunization/nCoV2019.aspx#,Coronavirus Disease-2019 (COVID-19),California Department of Public Health,,USA,California,,en,2020/03/17 -What should you do if you think you're sick?,"Call ahead: If you are experiencing symptoms of COVID-19, and may have had contact with a person with COVID-19 or recently traveled to countries with apparent community spread, call your health care provider or local public health department first before seeking medical care so that appropriate precautions can be taken.","

Call ahead: If you are experiencing symptoms of COVID-19, and may have had contact with a person with COVID-19 or recently traveled to countries with apparent community spread, call your health care provider or local public health department first before seeking medical care so that appropriate precautions can be taken.

",https://www.cdph.ca.gov/Programs/CID/DCDC/Pages/Immunization/nCoV2019.aspx#,Coronavirus Disease-2019 (COVID-19),California Department of Public Health,,USA,California,,en,2020/03/17 -"What is Novel Coronavirus (COVID-19)? -","Coronaviruses are a large group of viruses that are common among animals and humans. This novel coronavirus that causes COVID-19 is a newly discovered coronavirus that has not been previously detected in animals or humans. The source of this virus is not yet known. -",

Coronaviruses are a large group of viruses that are common among animals and humans. This novel coronavirus that causes COVID-19 is a newly discovered coronavirus that has not been previously detected in animals or humans. The source of this virus is not yet known.

,https://www.cdph.ca.gov/Programs/CID/DCDC/Pages/Immunization/nCoV2019.aspx#,Coronavirus Disease-2019 (COVID-19),California Department of Public Health,,USA,California,,en,2020/03/17 -"What are the symptoms of COVID-19? -","Typically, human coronaviruses cause mild-to-moderate respiratory illness. Symptoms are very similar to the flu, including: - -Fever -Cough -Shortness of breath -COVID-19 can cause more severe respiratory illness.","

Typically, human coronaviruses cause mild-to-moderate respiratory illness. Symptoms are very similar to the flu, including:

  • Fever
  • Cough
  • Shortness of breath

COVID-19 can cause more severe respiratory illness.

",https://www.cdph.ca.gov/Programs/CID/DCDC/Pages/Immunization/nCoV2019.aspx#,Coronavirus Disease-2019 (COVID-19),California Department of Public Health,,USA,California,,en,2020/03/17 -"What is the treatment for COVID-19? -","From the international data we have, of those who have tested positive for COVID-19, approximately 80 percent do not exhibit symptoms that would require hospitalization. For patients who are more severely ill, hospitals can provide supportive care. We are continuing to learn more about this novel coronavirus and treatment may change over time. ","

From the international data we have, of those who have tested positive for COVID-19, approximately 80 percent do not exhibit symptoms that would require hospitalization. For patients who are more severely ill, hospitals can provide supportive care. We are continuing to learn more about this novel coronavirus and treatment may change over time. 

",https://www.cdph.ca.gov/Programs/CID/DCDC/Pages/Immunization/nCoV2019.aspx#,Coronavirus Disease-2019 (COVID-19),California Department of Public Health,,USA,California,,en,2020/03/17 -"How is it decided whether a person with a confirmed case of COVID-19 can self-isolate at home or must be confined to a hospital or elsewhere? -","Local health departments are working in partnership with the California Department of Public Health and the CDC, and making determinations on whether a person ill with COVID-19 requires hospitalization or if home isolation is appropriate. That decision may be based on multiple factors including severity of illness, need for testing, and appropriateness of home for isolation purposes. -","

Local health departments are working in partnership with the California Department of Public Health and the CDC, and making determinations on whether a person ill with COVID-19 requires hospitalization or if home isolation is appropriate. That decision may be based on multiple factors including severity of illness, need for testing, and appropriateness of home for isolation purposes.

",https://www.cdph.ca.gov/Programs/CID/DCDC/Pages/Immunization/nCoV2019.aspx#,Coronavirus Disease-2019 (COVID-19),California Department of Public Health,,USA,California,,en,2020/03/17 -"What is the difference between COVID-19 and other coronaviruses? -","Coronaviruses are a large family of viruses. There are some coronaviruses that commonly circulate in humans. These viruses cause mild to moderate respiratory illness, although rarely they can cause severe disease. COVID-19 is closely related to two other animal coronaviruses that have caused outbreaks in people—the SARS coronavirus and the MERS (middle east respiratory syndrome) coronavirus. -","

Coronaviruses are a large family of viruses. There are some coronaviruses that commonly circulate in humans. These viruses cause mild to moderate respiratory illness, although rarely they can cause severe disease. COVID-19 is closely related to two other animal coronaviruses that have caused outbreaks in people—the SARS coronavirus and the MERS (middle east respiratory syndrome) coronavirus. 

",https://www.cdph.ca.gov/Programs/CID/DCDC/Pages/Immunization/nCoV2019.aspx#,Coronavirus Disease-2019 (COVID-19),California Department of Public Health,,USA,California,,en,2020/03/17 -"Is California able to test for COVID-19? -","Eighteen public health labs in California are testing for COVID-19. These labs include the California Department of Public Health's Laboratory in Richmond, Alameda, Contra Costa, Humboldt, Los Angeles, Monterey, Napa-Solano-Yolo-Marin (located in Solano), Orange, Sacramento, San Bernardino, San Diego, San Francisco, San Luis Obispo, Santa Clara, Shasta, Sonoma, Tulare and Ventura County public health laboratories. The Richmond Laboratory will provide diagnostic testing within a 48-hour turnaround time. More public health labs will soon be able to test for COVID-19. This means California public health officials will get test results sooner, so that patients will get the best care. -","

Eighteen public health labs in California are testing for COVID-19. These labs include the California Department of Public Health's Laboratory in Richmond, Alameda, Contra Costa, Humboldt, Los Angeles, Monterey, Napa-Solano-Yolo-Marin (located in Solano), Orange, Sacramento, San Bernardino, San Diego, San Francisco, San Luis Obispo, Santa Clara, Shasta, Sonoma, Tulare and Ventura County public health laboratories. The Richmond Laboratory will provide diagnostic testing within a 48-hour turnaround time. More public health labs will soon be able to test for COVID-19. This means California public health officials will get test results sooner, so that patients will get the best care.

",https://www.cdph.ca.gov/Programs/CID/DCDC/Pages/Immunization/nCoV2019.aspx#,Coronavirus Disease-2019 (COVID-19),California Department of Public Health,,USA,California,,en,2020/03/17 -"Should public events be cancelled? -","The California Department of Public Health has determined that gatherings should be postponed or canceled across the state until at least the end of March. Non-essential gatherings must be limited to no more than 250 people, while smaller events can proceed only if the organizers can implement social distancing of 6 feet per person. Gatherings of individuals who are at higher risk for severe illness from COVID-19 should be limited to no more than 10 people, while also following social distancing guidelines. - -The updated PDF guidance is available.","

The California Department of Public Health has determined that gatherings should be postponed or canceled across the state until at least the end of March. Non-essential gatherings must be limited to no more than 250 people, while smaller events can proceed only if the organizers can implement social distancing of 6 feet per person. Gatherings of individuals who are at higher risk for severe illness from COVID-19 should be limited to no more than 10 people, while also following social distancing guidelines.

The updated PDF guidance is available.

",https://www.cdph.ca.gov/Programs/CID/DCDC/Pages/Immunization/nCoV2019.aspx#,Coronavirus Disease-2019 (COVID-19),California Department of Public Health,,USA,California,,en,2020/03/17 -"Is it safe to go to restaurants and bars? -","California public health officials have directed bars, night clubs, breweries and wine tasting rooms to close. Restaurants should focus on food delivery and takeout while maximizing social distancing for those who are inside their restaurant. - -Food, Beverage and Other Services Guidance (PDF).","

California public health officials have directed bars, night clubs, breweries and wine tasting rooms to close. Restaurants should focus on food delivery and takeout while maximizing social distancing for those who are inside their restaurant.

Food, Beverage and Other Services Guidance  (PDF).

",https://www.cdph.ca.gov/Programs/CID/DCDC/Pages/Immunization/nCoV2019.aspx#,Coronavirus Disease-2019 (COVID-19),California Department of Public Health,,USA,California,,en,2020/03/17 -"What is Social Distancing? -","Social distancing is a practice recommended by public health officials to stop or slow down the spread of contagious diseases. It requires the creation of physical space between individuals who may spread certain infectious diseases. The key is to minimize the number of gatherings as much as possible and to achieve space between individuals when events or activities cannot be modified, postponed, or canceled. Although the Department of Public Health expects most events with more than 250 attendees to be postponed or canceled, we emphasize that the venue space does matter. Achieving space between individuals of approximately six feet is advisable. Additionally, there is a particular focus on creating space between individuals who have come together on a one-time or rare basis and who have very different travel patterns such as those coming from multiple countries, states or counties.","

Social distancing is a practice recommended by public health officials to stop or slow down the spread of contagious diseases. It requires the creation of physical space between individuals who may spread certain infectious diseases. The key is to minimize the number of gatherings as much as possible and to achieve space between individuals when events or activities cannot be modified, postponed, or canceled. Although the Department of Public Health expects most events with more than 250 attendees to be postponed or canceled, we emphasize that the venue space does matter. Achieving space between individuals of approximately six feet is advisable. Additionally, there is a particular focus on creating space between individuals who have come together on a one-time or rare basis and who have very different travel patterns such as those coming from multiple countries, states or counties.

",https://www.cdph.ca.gov/Programs/CID/DCDC/Pages/Immunization/nCoV2019.aspx#,Coronavirus Disease-2019 (COVID-19),California Department of Public Health,,USA,California,,en,2020/03/17 -"Should I wear a mask? -","The California Department of Public Health, along with the CDC, does not recommend that healthy people wear masks at this time. However, masks are recommended to limit the spread of disease for people who are exhibiting respiratory symptoms. -","

The California Department of Public Health, along with the CDC, does not recommend that healthy people wear masks at this time. However, masks are recommended to limit the spread of disease for people who are exhibiting respiratory symptoms.

",https://www.cdph.ca.gov/Programs/CID/DCDC/Pages/Immunization/nCoV2019.aspx#,Coronavirus Disease-2019 (COVID-19),California Department of Public Health,,USA,California,,en,2020/03/17 -"What if I have symptoms? -","Patient: If a person develops symptoms of COVID-19 including fever, cough or shortness of breath, and has reason to believe they may have been exposed, they should call their health care provider before seeking care. Contacting them in advance will make sure that people can get the care they need without putting others at risk. Please be sure to tell your health care provider about your travel history. You can also take the following precautionary measures: avoid contact with sick individuals, wash hands often with soap and warm water for at least 20 seconds. -Health Care Provider: Patients who may have infection with this novel coronavirus should wear a surgical mask and be placed in an airborne infection isolation room. If an airborne infection isolation room is not available, the patient should be placed in a private room with the door closed. Health care providers should use standard, contact and airborne precautions and use eye protection. Please see ""Update and Interim Guidance on Outbreak of 2019 Novel Coronavirus (2019-nCoV) in Wuhan, China"" for more information about infection control. The Public Health Department will issue All Facility Letters to regulated healthcare facilities within California with updated information and guidance; these can be found on the AFL webpage. ","Patient: If a person develops symptoms of COVID-19 including fever, cough or shortness of breath, and has reason to believe they may have been exposed, they should call their health care provider before seeking care. Contacting them in advance will make sure that people can get the care they need without putting others at risk. Please be sure to tell your health care provider about your travel history. You can also take the following precautionary measures: avoid contact with sick individuals, wash hands often with soap and warm water for at least 20 seconds.
Health Care Provider: Patients who may have infection with this novel coronavirus should wear a surgical mask and be placed in an airborne infection isolation room. If an airborne infection isolation room is not available, the patient should be placed in a private room with the door closed. Health care providers should use standard, contact and airborne precautions and use eye protection. Please see "Update and Interim Guidance on Outbreak of 2019 Novel Coronavirus (2019-nCoV) in Wuhan, China" for more information about infection control. The Public Health Department will issue All Facility Letters to regulated healthcare facilities within California with updated information and guidance; these can be found on the AFL webpage",https://www.cdph.ca.gov/Programs/CID/DCDC/Pages/Immunization/nCoV2019.aspx#,Coronavirus Disease-2019 (COVID-19),California Department of Public Health,,USA,California,,en,2020/03/17 -"What should I do if I am unable to work after being exposed to COVID-19? -","Individuals who are unable to work due to having or being exposed to COVID-19 (certified by a medical professional) can file a Disability Insurance (DI) claim. - -Disability Insurance provides short-term benefit payments to eligible workers who have full or partial loss of wages due to a non-work-related illness, injury, or pregnancy. Benefit amounts are approximately 60-70 percent of wages (depending on income) and range from $50 - $1,300 a week. - -Californians who are unable to work because they are caring for an ill or quarantined family member with COVID-19 (certified by a medical professional) can file a Paid Family Leave (PFL) claim. - -Paid Family Leave provides up to six weeks of benefit payments to eligibile workers who have a full or partial loss of wages because they need time off work to care for a seriously ill family member or to bond with a new child. Benefit amounts are approximately 60-70 percent of wages (depending on income) and range from $50-$1,300 a week. - -For more information related to resources for California's Employers and Workers, please visit this Labor and Workforce Development Agency webpage. -","

Individuals who are unable to work due to having or being exposed to COVID-19 (certified by a medical professional) can file a Disability Insurance (DI) claim.

-

Disability Insurance provides short-term benefit payments to eligible workers who have full or partial loss of wages due to a non-work-related illness, injury, or pregnancy. Benefit amounts are approximately 60-70 percent of wages (depending on income) and range from $50 - $1,300 a week.

-

Californians who are unable to work because they are caring for an ill or quarantined family member with COVID-19 (certified by a medical professional) can file a Paid Family Leave (PFL) claim.

Paid Family Leave provides up to six weeks of benefit payments to eligibile workers who have a full or partial loss of wages because they need time off work to care for a seriously ill family member or to bond with a new child. Benefit amounts are approximately 60-70 percent of wages (depending on income) and range from $50-$1,300 a week.

For more information related to resources for California's Employers and Workers, please visit this Labor and Workforce Development Agency webpage. 

",https://www.cdph.ca.gov/Programs/CID/DCDC/Pages/Immunization/nCoV2019.aspx#,Coronavirus Disease-2019 (COVID-19),California Department of Public Health,,USA,California,,en,2020/03/17 -"What is the state doing to protect our health? -","California has been actively and extensively planning with our local public health and health care delivery systems. Here are some of the things we are already doing: - -As in any public health event, our Medical and Health Coordination Center has been activated and is coordinating response efforts across the state and preparing for possible community transmission. -In coordination with the CDC, state and local health departments, we are actively responding to cases of COVID-19. -The Public Health Department is supporting hospitals and local public health laboratories in the collection of specimens and testing for COVID-19. -California activated the State Operations Center to its highest level to coordinate response efforts across the state. -Governor Gavin Newsom requested the Legislature make up to $20 million available for state government to respond to the spread of COVID-19. -California made available some of its emergency planning reserves of 21 million N95 filtering facepiece masks for use in certain health care settings to ease shortages of personal protective equipment. -We are providing information, guidance documents, and technical support to local health departments, health care facilities, providers, schools, universities, colleges, elder care and congregate living facilities and childcare facilities across California. -California obtained approval to provide meal service during school closures to minimize potential exposure to the coronavirus. These meals are available at no cost to low-income children – and are not required to be served in a group setting – to ensure kids receive nutritious meals while schools are temporarily closed. -The state directed mass gatherings be postponed or cancelled to slow the spread of the virus. -The Franchise Tax Board is providing a 90-day extension to file California tax returns for taxpayers affected by the COVID-19 pandemic. -CalTrans launched a statewide educational campaign on more than 700 electronic highway signs, urging all Californians to be more diligent about containing the spread of the virus. -The state is allowing local and state legislative bodies to hold meetings via conference calls while still meeting state transparency requirements. -The California Business, Consumer Services and Housing Agency released guidance for homeless assistance providers in the state. -The California Department of Public Health is coordinating with federal authorities and local health departments that have implemented screening, monitoring and, in some cases, quarantine of returning travelers. -In coordination with state and local health departments, we have actively managed suspect and confirmed cases of COVID-19 patients. -California worked in partnership with the federal government to aid in the safe return of 962 Californians from the Grand Princess cruise ship. This mission centered around protecting the health of the passengers, and ensuring that when the passengers disembarked, the public health of the United States, the State of California, and partner communities was protected. -24 million more Californians are now eligible for free medically necessary COVID-19 testing. -The state is taking aggressive social distancing steps - bars, night clubs, breweries and wine tasting rooms should close and restaurants should focus on food delivery and takeout while maximizing social distancing for those who are inside their restaurant. -California is recommending older Californians (65+) socially isolate in their homes. -The state is providing safe, wrap around services to vulnerable residents who are isolating at home – ramping up existing meal delivery and home visiting services. -The California Employee Development Department (EDD) is encouraging individuals who are unable to work due to exposure to COVID-19 to file a Disability Insurance claim. Californians unable to work because they are caring for an ill or quarantined family member can file a Paid Family Leave claim. -The Governor removed the waiting period for unemployment and disability insurance for Californians who lose work as a result of the COVID-19 outbreak. -EDD is also encouraging employers who are experiencing a slowdown in their businesses or services as a result of the Coronavirus impact on the economy to apply for an Unemployment Insurance work sharing program. -The Governor declared a State of Emergency to make additional resources available, formalize emergency actions already underway across multiple state agencies and departments, and help the state prepare for broader spread of COVID-19. -The California Department of Public Health’s state laboratory in Richmond and 20 other public health department laboratories now have tests for the virus that causes COVID-19. -Twenty public health labs in California, including the Department of Public Health's state laboratory in Richmond, are now testing for the virus that causes COVID-19. -","

California has been actively and extensively planning with our local public health and health care delivery systems. Here are some of the things we are already doing:  

  • As in any public health event, our Medical and Health Coordination Center has been activated and is coordinating response efforts across the state and preparing for possible community transmission. 
  • In coordination with the CDC, state and local health departments, we are actively responding to cases of COVID-19. 
  • The Public Health Department is supporting hospitals and local public health laboratories in the collection of specimens and testing for COVID-19. 
  • California activated the State Operations Center to its highest level to coordinate response efforts across the state. 
  • Governor Gavin Newsom requested the Legislature make up to $20 million available for state government to respond to the spread of COVID-19. 
  • California made available some of its emergency planning reserves of 21 million N95 filtering facepiece masks for use in certain health care settings to ease shortages of personal protective equipment. 
  • We are providing information, guidance documents, and technical support to local health departments, health care facilities, providers, schools, universities, colleges, elder care and congregate living facilities and childcare facilities across California. 
  • California obtained approval to provide meal service during school closures to minimize potential exposure to the coronavirus. These meals are available at no cost to low-income children – and are not required to be served in a group setting – to ensure kids receive nutritious meals while schools are temporarily closed. 
  • The state directed mass gatherings be postponed or cancelled to slow the spread of the virus. 
  • The Franchise Tax Board is providing a 90-day extension to file California tax returns for taxpayers affected by the COVID-19 pandemic. 
  • CalTrans launched a statewide educational campaign on more than 700 electronic highway signs, urging all Californians to be more diligent about containing the spread of the virus.  
  • The state is allowing local and state legislative bodies to hold meetings via conference calls while still meeting state transparency requirements.  
  • The California Business, Consumer Services and Housing Agency released guidance for homeless assistance providers in the state. 
  • The California Department of Public Health is coordinating with federal authorities and local health departments that have implemented screening, monitoring and, in some cases, quarantine of returning travelers.  
  • In coordination with state and local health departments, we have actively managed suspect and confirmed cases of COVID-19 patients. 
  • California worked in partnership with the federal government to aid in the safe return of 962 Californians from the Grand Princess cruise ship. This mission centered around protecting the health of the passengers, and ensuring that when the passengers disembarked, the public health of the United States, the State of California, and partner communities was protected. 
  • 24 million more Californians are now eligible for free medically necessary COVID-19 testing. 
  • The state is taking aggressive social distancing steps - bars, night clubs, breweries and wine tasting rooms should close and restaurants should focus on food delivery and takeout while maximizing social distancing for those who are inside their restaurant. 
  • California is recommending older Californians (65+) socially isolate in their homes.  
  • The state is providing safe, wrap around services to vulnerable residents who are isolating at home – ramping up existing meal delivery and home visiting services.
  • The California Employee Development Department (EDD) is encouraging individuals who are unable to work due to exposure to COVID-19 to file a Disability Insurance claim. Californians unable to work because they are caring for an ill or quarantined family member can file a Paid Family Leave claim.  
  • The Governor removed the waiting period for unemployment and disability insurance for Californians who lose work as a result of the COVID-19 outbreak.  
  • EDD is also encouraging employers who are experiencing a slowdown in their businesses or services as a result of the Coronavirus impact on the economy to apply for an Unemployment Insurance work sharing program.  
  • The Governor declared a State of Emergency to make additional resources available, formalize emergency actions already underway across multiple state agencies and departments, and help the state prepare for broader spread of COVID-19.  
  • The California Department of Public Health’s state laboratory in Richmond and 20 other public health department laboratories now have tests for the virus that causes COVID-19. 

Twenty public health labs in California, including the Department of Public Health's state laboratory in Richmond, are now testing for the virus that causes COVID-19.

More Information

",https://www.cdph.ca.gov/Programs/CID/DCDC/Pages/Immunization/nCoV2019.aspx#,Coronavirus Disease-2019 (COVID-19),California Department of Public Health,,USA,California,,en,2020/03/17 -What is SARS-CoV-2? What is COVID-19?,Severe Acute Respiratory Syndrome Coronavirus-2 (SARS-CoV-2) is the name given to the 2019 novel coronavirus. COVID-19 is the name given to the disease associated with the virus. SARS-CoV-2 is a new strain of coronavirus that has not been previously identified in humans.,

Severe Acute Respiratory Syndrome Coronavirus-2 (SARS-CoV-2) is the name given to the 2019 novel coronavirus. COVID-19 is the name given to the disease associated with the virus. SARS-CoV-2 is a new strain of coronavirus that has not been previously identified in humans.

,https://www.ecdc.europa.eu/en/novel-coronavirus-china/questions-answers,Q & A on COVID-19,European Centre for Disease Prevention and Control (ECDC),,EU,,,en,2020/03/18 -Where do coronaviruses come from?,"Coronaviruses are viruses that circulate among animals with some of them also known to infect humans. - -Bats are considered as natural hosts of these viruses yet several other species of animals are also known to be a source. For instance, the Middle East Respiratory Syndrome Coronavirus (MERS-CoV) is transmitted to humans from camels, and the Severe Acute Respiratory Syndrome Coronavirus-1 (SARS-CoV-1) is transmitted to humans from civet cats. More information on coronaviruses can be found on the ECDC factsheet.","

Coronaviruses are viruses that circulate among animals with some of them also known to infect humans.

-

Bats are considered as natural hosts of these viruses yet several other species of animals are also known to be a source. For instance, the Middle East Respiratory Syndrome Coronavirus (MERS-CoV) is transmitted to humans from camels, and the Severe Acute Respiratory Syndrome Coronavirus-1 (SARS-CoV-1) is transmitted to humans from civet cats. More information on coronaviruses can be found on the ECDC factsheet.

",https://www.ecdc.europa.eu/en/novel-coronavirus-china/questions-answers,Q & A on COVID-20,European Centre for Disease Prevention and Control (ECDC),,EU,,,en,2020/03/18 -Is this virus comparable to SARS or to the seasonal flu?,"The novel coronavirus detected in China is genetically closely related to the SARS-CoV-1 virus. SARS emerged at the end of 2002 in China, and it caused more than 8 000 cases in 33 countries over a period of eight months. Around one in ten of the people who developed SARS died. - -The current COVID-19 outbreak caused around 7 000 reported cases in China during the first month after initial reports (January 2020), with a further 80 000 cases reported globally during the second month (February 2020). Of these first 87 000 cases, about 3 000 died. Cases are now being detected in Europe and across the globe. See the situation updates for the latest available information. - -While the viruses that cause both COVID-19 and seasonal influenza are transmitted from person-to-person and may cause similar symptoms, the two viruses are very different and do not behave in the same way. ECDC estimates that between 15 000 and 75 000 people die prematurely due to causes associated with seasonal influenza each year in the EU, the UK, Norway, Iceland and Liechtenstein. This is approximately 1 in every 1 000 people who are infected. By comparison, the current estimated mortality rate for COVID-19 is 20-30 per 1 000 people. - -Despite the relatively low mortality rate for seasonal influenza, many people die from the disease due to the large number of people who contract it each year. The concern about COVID-19 is that, unlike influenza, there is no vaccine and no specific treatment for the disease. It also appears to be as transmissible as influenza if not more so. As it is a new virus, nobody has prior immunity which in theory means that the entire human population is potentially susceptible to COVID-19 infection.","

The novel coronavirus detected in China is genetically closely related to the SARS-CoV-1 virus. SARS emerged at the end of 2002 in China, and it caused more than 8 000 cases in 33 countries over a period of eight months. Around one in ten of the people who developed SARS died.

-

The current COVID-19 outbreak caused around 7 000 reported cases in China during the first month after initial reports (January 2020), with a further 80 000 cases reported globally during the second month (February 2020). Of these first 87 000 cases, about 3 000 died. Cases are now being detected in Europe and across the globe. See the situation updates for the latest available information. 

-

While the viruses that cause both COVID-19 and seasonal influenza are transmitted from person-to-person and may cause similar symptoms, the two viruses are very different and do not behave in the same way. ECDC estimates that between 15 000 and 75 000 people die prematurely due to causes associated with seasonal influenza each year in the EU, the UK, Norway, Iceland and Liechtenstein. This is approximately 1 in every 1 000 people who are infected. By comparison, the current estimated mortality rate for COVID-19 is 20-30 per 1 000 people.

-

Despite the relatively low mortality rate for seasonal influenza, many people die from the disease due to the large number of people who contract it each year. The concern about COVID-19 is that, unlike influenza, there is no vaccine and no specific treatment for the disease. It also appears to be as transmissible as influenza if not more so. As it is a new virus, nobody has prior immunity which in theory means that the entire human population is potentially susceptible to COVID-19 infection.

",https://www.ecdc.europa.eu/en/novel-coronavirus-china/questions-answers,Q & A on COVID-21,European Centre for Disease Prevention and Control (ECDC),,EU,,,en,2020/03/18 -How severe is COVID-19 infection?,"Preliminary findings indicate that the mortality rate for COVID-19 is 20-30 per thousand people diagnosed. This is significantly less than the 2003 SARS outbreak. However, it is much higher than the mortality rate for seasonal influenza.","

Preliminary findings indicate that the mortality rate for COVID-19 is 20-30 per thousand people diagnosed. This is significantly less than the 2003 SARS outbreak. However, it is much higher than the mortality rate for seasonal influenza.

",https://www.ecdc.europa.eu/en/novel-coronavirus-china/questions-answers,Q & A on COVID-22,European Centre for Disease Prevention and Control (ECDC),,EU,,,en,2020/03/18 -What is the mode of transmission? How (easily) does it spread?,"While animals are the original source of the virus, it is now spreading from person to person (human-to-human transmission). There is not enough epidemiological information at this time to determine how easily and sustainably this virus spreads between people, but it is currently estimated that, on average, one infected person will infect between two and three more. The virus seems to be transmitted mainly via respiratory droplets that people sneeze, cough, or exhale. The virus can also survive for several hours on surfaces such as tables and door handles. - -The incubation period for COVID-19 (i.e. the time between exposure to the virus and onset of symptoms) is currently estimated at between two and 14 days. At this stage, we know that the virus can be transmitted when people who are infected show flu-like symptoms such as coughing. There is evidence suggesting that transmission can occur from an infected person with no symptoms; however, uncertainties remain about the effect of transmission by non symptomatic persons on the epidemic.","

While animals are the original source of the virus, it is now spreading from person to person (human-to-human transmission). There is not enough epidemiological information at this time to determine how easily and sustainably this virus spreads between people, but it is currently estimated that, on average, one infected person will infect between two and three more. The virus seems to be transmitted mainly via respiratory droplets that people sneeze, cough, or exhale. The virus can also survive for several hours on surfaces such as tables and door handles.

-

The incubation period for COVID-19 (i.e. the time between exposure to the virus and onset of symptoms) is currently estimated at between two and 14 days. At this stage, we know that the virus can be transmitted when people who are infected show flu-like symptoms such as coughing.  There is evidence suggesting that transmission can occur from an infected person with no symptoms; however, uncertainties remain about the effect of transmission by non symptomatic persons on the epidemic.

",https://www.ecdc.europa.eu/en/novel-coronavirus-china/questions-answers,Q & A on COVID-23,European Centre for Disease Prevention and Control (ECDC),,EU,,,en,2020/03/18 -What are the symptoms of COVID-19 infection,"The virus can cause mild, flu-like symptoms such as: - -fever -cough -difficulty breathing -muscle pain -tiredness -More serious cases develop severe pneumonia, acute respiratory distress syndrome, sepsis and septic shock that can lead to death. ","

The virus can cause mild, flu-like symptoms such as:

-
  • fever
  • -
  • cough
  • -
  • difficulty breathing
  • -
  • muscle pain
  • -
  • tiredness
  • -

More serious cases develop severe pneumonia, acute respiratory distress syndrome, sepsis and septic shock that can lead to death. 

",https://www.ecdc.europa.eu/en/novel-coronavirus-china/questions-answers,Q & A on COVID-24,European Centre for Disease Prevention and Control (ECDC),Medical information,EU,,,en,2020/03/18 -Are some people more at risk than others?,"Generally elderly people and those with underlying health conditions (e.g. hypertension, diabetes, cardiovascular disease, chronic respiratory disease and cancer) are considered to be more at risk of developing severe symptoms.","

Generally elderly people and those with underlying health conditions (e.g. hypertension, diabetes, cardiovascular disease, chronic respiratory disease and cancer) are considered to be more at risk of developing severe symptoms.

",https://www.ecdc.europa.eu/en/novel-coronavirus-china/questions-answers,Q & A on COVID-25,European Centre for Disease Prevention and Control (ECDC),Medical information,EU,,,en,2020/03/18 -Are children also at risk of infection?,"Disease in children appears to be relatively rare and mild. A large study from China suggested that just over 2% of cases were under 18 years of age. Of these, fewer than 3% developed severe or critical disease.","

Disease in children appears to be relatively rare and mild. A large study from China suggested that just over 2% of cases were under 18 years of age. Of these, fewer than 3% developed severe or critical disease.

",https://www.ecdc.europa.eu/en/novel-coronavirus-china/questions-answers,Q & A on COVID-26,European Centre for Disease Prevention and Control (ECDC),Medical information,EU,,,en,2020/03/18 -What about pregnant women?,"There is limited scientific evidence on the severity of illness in pregnant women after COVID-19 infection. That said, current evidence suggests that severity of illness among pregnant women after COVID-19 infection is similar to that in non-pregnant adult COVID-19 cases, and there is no data that suggests infection with COVID-19 during pregnancy has a negative effect on the foetus. At present, there is no evidence of transmission of COVID-19 from mother to baby occurring during pregnancy. ECDC will continue to monitor the emerging scientific literature on this question, and suggests that all pregnant women follow the same precautions for the prevention of COVID-19, including regular handwashing, avoiding individuals who are sick, and self-isolating in case of any symptoms, while consulting a healthcare provider by telephone for advice.","There is limited scientific evidence on the severity of illness in pregnant women after COVID-19 infection. That said, current evidence suggests that severity of illness among pregnant women after COVID-19 infection is similar to that in non-pregnant adult COVID-19 cases, and there is no data that suggests infection with COVID-19 during pregnancy has a negative effect on the foetus. At present, there is no evidence of transmission of COVID-19 from mother to baby occurring during pregnancy. ECDC will continue to monitor the emerging scientific literature on this question, and suggests that all pregnant women follow the same precautions for the prevention of COVID-19, including regular handwashing, avoiding individuals who are sick, and self-isolating in case of any symptoms, while consulting a healthcare provider by telephone for advice.",https://www.ecdc.europa.eu/en/novel-coronavirus-china/questions-answers,Q & A on COVID-27,European Centre for Disease Prevention and Control (ECDC),Medical information,EU,,,en,2020/03/18 -Is there a treatment for the COVID-19 disease?,"There is no specific treatment for this disease, so healthcare providers treat the clinical symptoms (e.g. fever, difficulty breathing) of patients. Supportive care (e.g. fluid management, oxygen therapy etc.) can be highly effective for patients with symptoms.","

There is no specific treatment for this disease, so healthcare providers treat the clinical symptoms (e.g. fever, difficulty breathing) of patients. Supportive care (e.g. fluid management, oxygen therapy etc.) can be highly effective for patients with symptoms.

",https://www.ecdc.europa.eu/en/novel-coronavirus-china/questions-answers,Q & A on COVID-28,European Centre for Disease Prevention and Control (ECDC),Medical information,EU,,,en,2020/03/18 -When should I be tested for COVID-19?,"Current advice for testing depends on the stage of the outbreak in the country or area where you live. Countries across the EU/EEA might be in different scenarios, even within the same country, and testing approaches will be adapted to the situation at national and local level. - -National authorities may decide to only test subgroups of suspected cases based on the national capacity to test, the availability of necessary equipment for testing, the level of community transmission of COVID-19, or any other criteria. As a rational approach, national authorities may consider prioritising testing in the following groups: - -hospitalised patients with severe respiratory infections; -cases with acute respiratory infections in hospital or long-term care facilities; -patients with acute respiratory infections or influenza-like illness in certain outpatient clinics or hospitals in order to assess the extent of virus circulation in the population; -elderly people with underlying chronic medical conditions such as lung disease, cancer, heart failure, cerebrovascular disease, renal disease, liver disease, diabetes, and immunocompromising conditions","

Current advice for testing depends on the stage of the outbreak in the country or area where you live. Countries across the EU/EEA might be in different scenarios, even within the same country, and testing approaches will be adapted to the situation at national and local level.

-

National authorities may decide to only test subgroups of suspected cases based on the national capacity to test, the availability of necessary equipment for testing, the level of community transmission of COVID-19, or any other criteria. As a rational approach, national authorities may consider prioritising testing in the following groups:

-
  • hospitalised patients with severe respiratory infections;
  • -
  • cases with acute respiratory infections in hospital or long-term care facilities;
  • -
  • patients with acute respiratory infections or influenza-like illness in certain outpatient clinics or hospitals in order to assess the extent of virus circulation in the population;
  • -
  • elderly people with underlying chronic medical conditions such as lung disease, cancer, heart failure, cerebrovascular disease, renal disease, liver disease, diabetes, and immunocompromising conditions
  • -
",https://www.ecdc.europa.eu/en/novel-coronavirus-china/questions-answers,Q & A on COVID-29,European Centre for Disease Prevention and Control (ECDC),Medical information,EU,,,en,2020/03/18 -Where can I get tested?,"If you are feeling ill with COVID-19 symptoms (such as fever, cough, difficulty breathing, muscle pain or tiredness) it is recommended that you contact healthcare services by telephone or online. If your healthcare provider believes there is a need for a laboratory test for the virus that causes COVID-19, he/she will inform you of the procedure to follow and advise where and how the test can be performed.","

If you are feeling ill with COVID-19 symptoms (such as fever, cough, difficulty breathing, muscle pain or tiredness) it is recommended that you contact healthcare services by telephone or online. If your healthcare provider believes there is a need for a laboratory test for the virus that causes COVID-19, he/she will inform you of the procedure to follow and advise where and how the test can be performed.

",https://www.ecdc.europa.eu/en/novel-coronavirus-china/questions-answers,Q & A on COVID-30,European Centre for Disease Prevention and Control (ECDC),Medical Information,EU,,,en,2020/03/18 -How can I avoid getting infected?,"The virus enters your body via your eyes, nose and/or mouth, so it is important to avoid touching your face with unwashed hands. - -Washing of hands with soap and water for at least 20 seconds, or cleaning hands with alcohol-based solutions, gels or tissues is recommended in all settings. - -It is also recommended to stay 1 metre or more away from people infected with COVID-19 who are showing symptoms, to reduce the risk of infection through respiratory droplets.","

The virus enters your body via your eyes, nose and/or mouth, so it is important to avoid touching your face with unwashed hands.

-

Washing of hands with soap and water for at least 20 seconds, or cleaning hands with alcohol-based solutions, gels or tissues is recommended in all settings.

-

It is also recommended to stay 1 metre or more away from people infected with COVID-19 who are showing symptoms, to reduce the risk of infection through respiratory droplets.

",https://www.ecdc.europa.eu/en/novel-coronavirus-china/questions-answers,Q & A on COVID-31,European Centre for Disease Prevention and Control (ECDC),Prevention,EU,,,en,2020/03/18 -What should I do if I have had close contact with someone who has COVID-19?,"Notify public health authorities in your area who will provide guidance on further steps to take. If you develop any symptoms, you should immediately call your healthcare provider for advice, mentioning that you have been in contact with someone with COVID-19.","

Notify public health authorities in your area who will provide guidance on further steps to take. If you develop any symptoms, you should immediately call your healthcare provider for advice, mentioning that you have been in contact with someone with COVID-19.

",https://www.ecdc.europa.eu/en/novel-coronavirus-china/questions-answers,Q & A on COVID-32,European Centre for Disease Prevention and Control (ECDC),Prevention,EU,,,en,2020/03/18 -Are face masks effective in protecting against COVID-19?,"If you are infected, the use of surgical face masks may reduce the risk of you infecting other people, but there is no evidence that face masks will effectively prevent you from being infected with the virus. In fact, it is possible that the use of face masks may even increase the risk of infection due to a false sense of security and increased contact between hands, mouth and eyes.","p>If you are infected, the use of surgical face masks may reduce the risk of you infecting other people, but there is no evidence that face masks will effectively prevent you from being infected with the virus. In fact, it is possible that the use of face masks may even increase the risk of infection due to a false sense of security and increased contact between hands, mouth and eyes.

",https://www.ecdc.europa.eu/en/novel-coronavirus-china/questions-answers,Q & A on COVID-33,European Centre for Disease Prevention and Control (ECDC),Prevention,EU,,,en,2020/03/18 -Is there a vaccine against the virus? How long will it take to develop a vaccine?,"There are currently no vaccines against human coronaviruses, including the virus that causes COVID-19. This is why it is very important to prevent infection and to contain further spread of the virus. - -The development of vaccines takes time. Several pharmaceutical companies are working on vaccine candidates. It will, however, take months or years before any vaccine can be widely used, as it needs to undergo extensive testing to determine its safety and efficacy. ","There are currently no vaccines against human coronaviruses, including the virus that causes COVID-19. This is why it is very important to prevent infection and to contain further spread of the virus.",https://www.ecdc.europa.eu/en/novel-coronavirus-china/questions-answers,Q & A on COVID-34,European Centre for Disease Prevention and Control (ECDC),Prevention,EU,,,en,2020/03/18 -Am I protected against COVID-19 if I had the influenza vaccine this year?,Influenza and the virus that causes COVID-19 are two very different viruses and the seasonal influenza vaccine will not protect against COVID-19. ,"

Influenza and the virus that causes COVID-19 are two very different viruses and the seasonal influenza vaccine will not protect against COVID-19.  

-",https://www.ecdc.europa.eu/en/novel-coronavirus-china/questions-answers,Q & A on COVID-35,European Centre for Disease Prevention and Control (ECDC),Prevention,EU,,,en,2020/03/18 -How prepared is Europe for COVID-19 and what is the EU doing?,"The European Centre for Disease Prevention and Control (ECDC) is in continuous contact with the European Commission and the World Health Organization regarding the assessment of this outbreak. To inform the European Commission and the public health authorities in Member States of the ongoing situation, ECDC publishes daily summaries and continuously assesses the risk for EU citizens. ECDC and WHO have developed technical guidance to support the EU Member States in their response. The European Commission is ensuring the coordination of risk management activities at EU level.","

The European Centre for Disease Prevention and Control (ECDC) is in continuous contact with the European Commission and the World Health Organization regarding the assessment of this outbreak. To inform the European Commission and the public health authorities in Member States of the ongoing situation, ECDC publishes daily summaries and continuously assesses the risk for EU citizens. ECDC and WHO have developed technical guidance to support the EU Member States in their response. The European Commission is ensuring the coordination of risk management activities at EU level.

",https://www.ecdc.europa.eu/en/novel-coronavirus-china/questions-answers,Q & A on COVID-36,European Centre for Disease Prevention and Control (ECDC),Current Situation in the EU,EU,,,en,2020/03/18 -Am I at risk of contracting COVID-19 infection in the EU?,This outbreak is evolving rapidly and the risk assessment is changing accordingly. ECDC is continuously assessing the risk for EU citizens and you can find the latest information in the daily updated ECDC risk assessment.,

This outbreak is evolving rapidly and the risk assessment is changing accordingly. ECDC is continuously assessing the risk for EU citizens and you can find the latest information in the daily updated ECDC risk assessment.

,https://www.ecdc.europa.eu/en/novel-coronavirus-china/questions-answers,Q & A on COVID-37,European Centre for Disease Prevention and Control (ECDC),Current Situation in the EU,EU,,,en,2020/03/18 -How many people have been infected in the EU/EEA?,"See the ECDC daily situation update for the latest available information. Given the extensive movement of people and the fact that the virus is transmitted from person to person, further cases are expected in Europe.","

See the ECDC daily situation update for the latest available information. Given the extensive movement of people and the fact that the virus is transmitted from person to person, further cases are expected in Europe.

-",https://www.ecdc.europa.eu/en/novel-coronavirus-china/questions-answers,Q & A on COVID-38,European Centre for Disease Prevention and Control (ECDC),Current Situation in the EU,EU,,,en,2020/03/18 -How long will this outbreak last?,"Unfortunately, it is not possible to predict how long the outbreak will last and how the epidemic will unfold. We are dealing with a new virus and therefore a lot of uncertainty remains. For instance, it is not known whether transmission within the EU/EEA will naturally decrease during the northern hemisphere summer, as is observed for seasonal influenza. -","

Unfortunately, it is not possible to predict how long the outbreak will last and how the epidemic will unfold. We are dealing with a new virus and therefore a lot of uncertainty remains. For instance, it is not known whether transmission within the EU/EEA will naturally decrease during the northern hemisphere summer, as is observed for seasonal influenza.

",https://www.ecdc.europa.eu/en/novel-coronavirus-china/questions-answers,Q & A on COVID-39,European Centre for Disease Prevention and Control (ECDC),Current Situation in the EU,EU,,,en,2020/03/18 -Should schools and day centres be closed?,"The evidence we have to date indicates that COVID-19 does not affect children nearly as much as it affects adults. However, the extent to which children play a role in the transmission of the virus is still unknown. Due to this uncertainty, it is especially important to encourage children to wash their hands carefully to reduce any possible risk of them becoming infected themselves, and then of passing on the virus. If children do become ill, they should be strictly isolated at home. - -Depending on local circumstances, local authorities may decide to temporarily close schools and daycare centres to reduce transmission. Wherever this happens, it is important that parents and caregivers are supported, for example by their employers, so they can stay at home and take care of their children. -","

The evidence we have to date indicates that COVID-19 does not affect children nearly as much as it affects adults. However, the extent to which children play a role in the transmission of the virus is still unknown. Due to this uncertainty, it is especially important to encourage children to wash their hands carefully to reduce any possible risk of them becoming infected themselves, and then of passing on the virus. If children do become ill, they should be strictly isolated at home.

-

Depending on local circumstances, local authorities may decide to temporarily close schools and daycare centres to reduce transmission. Wherever this happens, it is important that parents and caregivers are supported, for example by their employers, so they can stay at home and take care of their children.

",https://www.ecdc.europa.eu/en/novel-coronavirus-china/questions-answers,Q & A on COVID-40,European Centre for Disease Prevention and Control (ECDC),Current Situation in the EU,EU,,,en,2020/03/18 -What precautions should I take if I am visiting an area of local or community transmission?,"Travellers visiting areas of local or community COVID-19 transmission should adhere to strict hygiene measures, wash hands with soap and water regularly, and/or use alcohol-based hand sanitisers. Touching the face with unwashed hands should be avoided. Travellers should avoid contact with sick persons, in particular those with respiratory symptoms and fever. It should be emphasised that older people and those with underlying health conditions should take these precautionary measures very seriously.","

Travellers visiting areas of local or community COVID-19 transmission should adhere to strict hygiene measures, wash hands with soap and water regularly, and/or use alcohol-based hand sanitisers. Touching the face with unwashed hands should be avoided. Travellers should avoid contact with sick persons, in particular those with respiratory symptoms and fever. It should be emphasised that older people and those with underlying health conditions should take these precautionary measures very seriously.

",https://www.ecdc.europa.eu/en/novel-coronavirus-china/questions-answers,Q & A on COVID-41,European Centre for Disease Prevention and Control (ECDC),Information for travellers,EU,,,en,2020/03/18 -What if I have recently been in an area of local or community transmission?,"Travellers returning from areas of local or community transmission should monitor their health for 14 days. People with symptoms should contact their healthcare specialist via telephone first, and indicate their exposure and travel history before seeking medical attention in person. Symptomatic people should avoid contact with others until they have received advice from a healthcare specialist.","

Travellers returning from areas of local or community transmission should monitor their health for 14 days. People with symptoms should contact their healthcare specialist via telephone first, and indicate their exposure and travel history before seeking medical attention in person. Symptomatic people should avoid contact with others until they have received advice from a healthcare specialist.

",https://www.ecdc.europa.eu/en/novel-coronavirus-china/questions-answers,Q & A on COVID-42,European Centre for Disease Prevention and Control (ECDC),Information for travellers,EU,,,en,2020/03/18 -What is the risk of infection when travelling by plane?,"If it is established that a COVID-19 case has been on an airplane, other passengers who were at risk (as defined by how near they were seated to the infected passenger) will be contacted by public health authorities. Should you have questions about a flight you have taken, please contact your local health authority for advice. The risk of being infected on an airplane cannot be excluded, but is currently considered to be low for an individual traveller. The risk of being infected in an airport is similar to that of any other place where many people gather. -","

If it is established that a COVID-19 case has been on an airplane, other passengers who were at risk (as defined by how near they were seated to the infected passenger) will be contacted by public health authorities. Should you have questions about a flight you have taken, please contact your local health authority for advice. The risk of being infected on an airplane cannot be excluded, but is currently considered to be low for an individual traveller. The risk of being infected in an airport is similar to that of any other place where many people gather.

",https://www.ecdc.europa.eu/en/novel-coronavirus-china/questions-answers,Q & A on COVID-43,European Centre for Disease Prevention and Control (ECDC),Information for travellers,EU,,,en,2020/03/18 -Why are people not being checked for COVID-19 at the airport when arriving from areas of local or community transmission?,"There is evidence that checking people at the airport (known as entry screening) is not very effective in preventing the spread of the virus, especially when people do not have symptoms. It is generally considered more useful to provide those arriving at airports with clear information explaining what to do if they develop symptoms after arrival. -","

There is evidence that checking people at the airport (known as entry screening) is not very effective in preventing the spread of the virus, especially when people do not have symptoms. It is generally considered more useful to provide those arriving at airports with clear information explaining what to do if they develop symptoms after arrival.

-",https://www.ecdc.europa.eu/en/novel-coronavirus-china/questions-answers,Q & A on COVID-44,European Centre for Disease Prevention and Control (ECDC),Information for travellers,EU,,,en,2020/03/18 -Where can I learn more?,"Each EU/EEA country may issue specific advice to travellers to areas with local or community transmission of COVID-19. Consult your local health authority or the Ministry of Foreign Affairs to get advice tailored for residents in your setting. - -For an updated list of areas of presumed community transmission, please refer to WHO situation reports for country classification.","

Each EU/EEA country may issue specific advice to travellers to areas with local or community transmission of COVID-19. Consult your local health authority or the Ministry of Foreign Affairs to get advice tailored for residents in your setting. 

-

For an updated list of areas of presumed community transmission, please refer to WHO situation reports for country classification.

",https://www.ecdc.europa.eu/en/novel-coronavirus-china/questions-answers,Q & A on COVID-45,European Centre for Disease Prevention and Control (ECDC),Information for travellers,EU,,,en,2020/03/18 -What is the risk of COVID-19 infection from animals or animal products imported from affected areas?,"There is no evidence that any of the animals or animal products authorised for entry into the European Union pose a risk to the health of EU citizens as a result of the presence of COVID-19. - -",

There is no evidence that any of the animals or animal products authorised for entry into the European Union pose a risk to the health of EU citizens as a result of the presence of COVID-19.

,https://www.ecdc.europa.eu/en/novel-coronavirus-china/questions-answers,Q & A on COVID-46,European Centre for Disease Prevention and Control (ECDC),COVID-19 and animals and food products,EU,,,en,2020/03/18 -What is the risk of COVID-19 infection from food products imported from affected areas?,"There has been no report of transmission of COVID-19 via food and therefore there is no evidence that food items imported into the European Union in accordance with the applicable animal and public health regulations pose a risk for the health of EU citizens in relation to COVID-19. The main mode of transmission is from person to person. - -","

There has been no report of transmission of COVID-19 via food and therefore there is no evidence that food items imported into the European Union in accordance with the applicable animal and public health regulations pose a risk for the health of EU citizens in relation to COVID-19. The main mode of transmission is from person to person.

-",https://www.ecdc.europa.eu/en/novel-coronavirus-china/questions-answers,Q & A on COVID-47,European Centre for Disease Prevention and Control (ECDC),COVID-19 and animals and food products,EU,,,en,2020/03/18 -What is the risk of COVID-19 infection from contact with pets and other animals in the EU?,"Current research links COVID-19 to certain types of bat as the original source, but does not exclude the involvement of other animals. Several types of coronaviruses can infect animals and can be transmitted to other animals and people. There is no evidence that companion animals (e.g. dogs or cats) pose a risk of infection to humans. As a general precaution, it is always wise to observe basic principles of hygiene when in contact with animals.","

Current research links COVID-19 to certain types of bat as the original source, but does not exclude the involvement of other animals. Several types of coronaviruses can infect animals and can be transmitted to other animals and people. There is no evidence that companion animals (e.g. dogs or cats) pose a risk of infection to humans. As a general precaution, it is always wise to observe basic principles of hygiene when in contact with animals.

-",https://www.ecdc.europa.eu/en/novel-coronavirus-china/questions-answers,Q & A on COVID-48,European Centre for Disease Prevention and Control (ECDC),COVID-19 and animals and food products,EU,,,en,2020/03/18 -"How can I protect myself from the coronavirus? -","You should behave in the same way you do to protect yourself from a flu virus: regular and thorough hand washing, proper coughing and sneezing as well as keeping your distance from sick persons – these are the most effective protective measures in everyday life. You should also refrain from shaking hands. - -Available downloads -How can I protect myself from infection? -Download in German | English | Turkish (accessible PDF-Files) - -If possible, avoid going on trips, using public transport and instead work from home. - -Generally, all contact with others should be reduced to the bare minimum and the attendance of events with crowds of people should be avoided. - -Citizens who are older than 70 years of age should obtain a vaccine against pneumococcal infection.","

You should behave in the same way you do to protect yourself from a flu virus: regular and thorough hand washing, proper coughing and sneezing as well as keeping your distance from sick persons – these are the most effective protective measures in everyday life. You should also refrain from shaking hands.

- -
-
- - - -

Available downloads

- -
-
- -

How can I protect myself from infection?

-

Download in German | English | Turkish (accessible PDF-Files)

- -
- - - - -
- -
- - - - - - -

If possible, avoid going on trips, using public transport and instead work from home. -

-

Generally, all contact with others should be reduced to the bare minimum and the attendance of events with crowds of people should be avoided. -

-

Citizens who are older than 70 years of age should obtain a vaccine against pneumococcal infection.

",https://www.bundesgesundheitsministerium.de/en/press/2020/coronavirus.html,Frequently asked questions,Bundesministerium für Gesundheit,,Germany,,,en,2020/03/18 -What should be done if a coronavirus infection is suspected? What are the symptoms?,"Persons who have had personal contact with someone confirmed as carrying SARS-CoV-2 should immediately, and irrespective of symptoms, contact their competent health office, get in touch with the doctor or call 116117 – and stay at home. - -A coronavirus infection causes flu-like symptoms such as dry cough, fever, a runny nose and fatigue. There have also been reports of difficulties breathing, an itchy throat, headaches, joint pains, nausea, diarrhoea and shivering.","

Persons who have had personal contact with someone confirmed as carrying SARS-CoV-2 should immediately, and irrespective of symptoms, contact their competent health office, get in touch with the doctor or call 116117 – and stay at home. -

-

A coronavirus infection causes flu-like symptoms such as dry cough, fever, a runny nose and fatigue. There have also been reports of difficulties breathing, an itchy throat, headaches, joint pains, nausea, diarrhoea and shivering.

",https://www.bundesgesundheitsministerium.de/en/press/2020/coronavirus.html,Frequently asked questions,Bundesministerium für Gesundheit,,Germany,,,en,2020/03/18 -"If I have a mild respiratory disease, do I need to go to my doctor's practice to pick up a sick leave certificate?","Starting immediately, patients with mild respiratory diseases of the upper respiratory tract can have a certificate a certificate of unfitness for work issued for a maximum of seven days, after consulting with their doctor by phone. There is no need to go to your doctor’s practice for this purpose. This agreement has been in force since 9 March 2020, for an initial period of four weeks. -","

Starting immediately, patients with mild respiratory diseases of the upper respiratory tract can have a certificate a certificate of unfitness for work issued for a maximum of seven days, after consulting with their doctor by phone. There is no need to go to your doctor’s practice for this purpose. This agreement has been in force since 9 March 2020, for an initial period of four weeks.

",https://www.bundesgesundheitsministerium.de/en/press/2020/coronavirus.html,Frequently asked questions,Bundesministerium für Gesundheit,,Germany,,,en,2020/03/18 -"What should I do after returning from a trip abroad? -","People who have spent time in a risk area as identified by the Robert Koch Institute, or in regions where COVID-19 cases have occurred, should avoid unnecessary contact with others and stay at home, if possible. Should you develop symptoms within 14 days, you should visit a doctor after calling in advance to announce your visit. - -Persons arriving in Germany from Iran, Italy, Japan or South Korea must provide information on where they can be reached for the 30 days after arrival. Passengers arriving in Germany from China must provide additional information.","

People who have spent time in a risk area as identified by the Robert Koch Institute, or in regions where COVID-19 cases have occurred, should avoid unnecessary contact with others and stay at home, if possible. Should you develop symptoms within 14 days, you should visit a doctor after calling in advance to announce your visit. -

-

Persons arriving in Germany from Iran, Italy, Japan or South Korea must provide information on where they can be reached for the 30 days after arrival. Passengers arriving in Germany from China must provide additional information.

",https://www.bundesgesundheitsministerium.de/en/press/2020/coronavirus.html,Frequently asked questions,Bundesministerium für Gesundheit,,Germany,,,en,2020/03/18 -"WHO has declared a pandemic. What does it mean for Germany? -","On 11 March 2020, the Director-General of WHO declared the spate of infections cuased by SARS-CoV-2 (COVID-19) a pandemic. - -This declaration of a pandemic by WHO has no direct impact on the preparation and measures being conducted in Germany. Germany has taken the situation very seriously from the outset and also conducted the same measures that WHO is now emphasising once again. These are: - -Inform the population on the risks posed by the disease - -Inform the population on how each individual can protect him/herself and appeal to everyone to do so - -Do everything to find, isolate, test and treat every case, as well as locate every contact person, so as to prevent further spread of the disease - -Prepare hospitals and clinics for the emergency situation that is to be expected - -Prepare medical personnel and protect them from infection - -Help each other and take care of one another. - -On 30 January 2020, WHO had already declared the situation to be a “Public Health Emergency of International Concern, (PHEIC)” and issued recommendations to contain and control the outbreak.","

On 11 March 2020, the Director-General of WHO declared the spate of infections cuased by SARS-CoV-2 (COVID-19) a pandemic. -

-

This declaration of a pandemic by WHO has no direct impact on the preparation and measures being conducted in Germany. Germany has taken the situation very seriously from the outset and also conducted the same measures that WHO is now emphasising once again. These are:

  • Inform the population on the risks posed by the disease

  • Inform the population on how each individual can protect him/herself and appeal to everyone to do so

  • Do everything to find, isolate, test and treat every case, as well as locate every contact person, so as to prevent further spread of the disease

  • Prepare hospitals and clinics for the emergency situation that is to be expected

  • Prepare medical personnel and protect them from infection

  • Help each other and take care of one another.

On 30 January 2020, WHO had already declared the situation to be a “Public Health Emergency of International Concern, (PHEIC)” and issued recommendations to contain and control the outbreak.

",https://www.bundesgesundheitsministerium.de/en/press/2020/coronavirus.html,Frequently asked questions,Bundesministerium für Gesundheit,,Germany,,,en,2020/03/18 -"What do SARS-CoV-2 and Covid-19 stand for? -","On 11 February, the novel coronavirus that had provisionally been known as 2019-nCoV, was given a new name: SARS-CoV-2. The acronym SARS stands for severe acute respiratory syndrome. The name denotes its close relationship to the SARS coronavirus that caused an epidemic in 2002/2003. - -The respiratory disease that can be caused by SARS-CoV-2 has also been given a new name. It is now called Covid-19 (Corona Virus Disease 2019).","

On 11 February, the novel coronavirus that had provisionally been known as 2019-nCoV, was given a new name: SARS-CoV-2. The acronym SARS stands for severe acute respiratory syndrome. The name denotes its close relationship to the SARS coronavirus that caused an epidemic in 2002/2003. -

-

The respiratory disease that can be caused by SARS-CoV-2 has also been given a new name. It is now called Covid-19 (Corona Virus Disease 2019).

",https://www.bundesgesundheitsministerium.de/en/press/2020/coronavirus.html,Frequently asked questions,Bundesministerium für Gesundheit,,Germany,,,en,2020/03/18 -"How does the novel virus spread? -","The novel coronavirus SARS-CoV-2 spreads from person to person. Droplet infection is the main mode of transmission. Transmission can take place directly, from person-to-person, or indirectly through contact between hands and the mucous membranes of the mouth, the nose or the conjunctiva of the eyes. There have been reports of persons who were infected by individuals who had only shown slight or non-specific symptoms of disease. The percentage of asymptomatic cases is unclear; according to data from WHO and China, however, such cases do not play a significant role in the spread of SARS-CoV-2.","

The novel coronavirus SARS-CoV-2 spreads from person to person. Droplet infection is the main mode of transmission. Transmission can take place directly, from person-to-person, or indirectly through contact between hands and the mucous membranes of the mouth, the nose or the conjunctiva of the eyes. There have been reports of persons who were infected by individuals who had only shown slight or non-specific symptoms of disease. The percentage of asymptomatic cases is unclear; according to data from WHO and China, however, such cases do not play a significant role in the spread of SARS-CoV-2.

",https://www.bundesgesundheitsministerium.de/en/press/2020/coronavirus.html,Frequently asked questions,Bundesministerium für Gesundheit,,Germany,,,en,2020/03/18 -"How long does it take from infection to the onset of disease? -","It is currently thought that an infected person can go up to 14 days before noticing any symptoms. According to WHO, the incubation period is, on average, five to six days. -","

It is currently thought that an infected person can go up to 14 days before noticing any symptoms. According to WHO, the incubation period is, on average, five to six days.

",https://www.bundesgesundheitsministerium.de/en/press/2020/coronavirus.html,Frequently asked questions,Bundesministerium für Gesundheit,,Germany,,,en,2020/03/18 -"How dangerous is an infection with SARS-CoV-2? -","Among the cases reported to date, in four out of five cases infection was mild. In some patients, the virus can lead to severe illness, including difficult breathing, and to pneumonia. Deaths have mainly occurred among patients who were elderly and/or had prior underlying chronic illnesses. -","

Among the cases reported to date, in four out of five cases infection was mild. In some patients, the virus can lead to severe illness, including difficult breathing, and to pneumonia. Deaths have mainly occurred among patients who were elderly and/or had prior underlying chronic illnesses.

Currently, hospitals and family physicians decide who will be tested. They base their decision on the recommendations of the Robert Koch Institute. According to these recommendations, symptoms such as fever, a sore throat and respiratory complaints, on their own, are not sufficient. The person must additionally have had contact with an infected person, or have spent time in a region in which the virus was proven to exist over large areas. -

-

Testing should be done only if disease symptoms are present. If you are healthy, a test will not be able to tell you whether or not you will fall ill in the coming days. At the same time, this puts an unnecessary strain on our testing capacities.

",https://www.bundesgesundheitsministerium.de/en/press/2020/coronavirus.html,Frequently asked questions,Bundesministerium für Gesundheit,,Germany,,,en,2020/03/18 -Does the health insurance pay for the SARS-CoV-2 test?,"By and large, health insurance funds have been covering the cost of coronavirus testing since 28 February 2020. The prerequisite is that the attending physician decides whether the patient should be tested. -","

By and large, health insurance funds have been covering the cost of coronavirus testing since 28 February 2020. The prerequisite is that the attending physician decides whether the patient should be tested.

",https://www.bundesgesundheitsministerium.de/en/press/2020/coronavirus.html,Frequently asked questions,Bundesministerium für Gesundheit,,Germany,,,en,2020/03/18 -"Is there a quick test for SARS-CoV-2 for home use? -","A quick test, similar to a pregnancy test, by means of which you can verify an infection with the novel coronavirus SARS-CoV-2 on your own, does not exist. Persons who suspect that they might be infected with SARS-CoV-2, should (after announcing your visit by phone) visit their doctor who will have a laboratory diagnosis conducted. -","

A quick test, similar to a pregnancy test, by means of which you can verify an infection with the novel coronavirus SARS-CoV-2 on your own, does not exist. Persons who suspect that they might be infected with SARS-CoV-2, should (after announcing your visit by phone) visit their doctor who will have a laboratory diagnosis conducted.

",https://www.bundesgesundheitsministerium.de/en/press/2020/coronavirus.html,Frequently asked questions,Bundesministerium für Gesundheit,,Germany,,,en,2020/03/18 -"Is there a vaccine? -","Efforts to develop a vaccine are already underway. As yet, there is no vaccine available, however. -","

Efforts to develop a vaccine are already underway. As yet, there is no vaccine available, however.

",https://www.bundesgesundheitsministerium.de/en/press/2020/coronavirus.html,Frequently asked questions,Bundesministerium für Gesundheit,,Germany,,,en,2020/03/18 -"What are the treatment options? -","Not all diseases that follow a SARS-CoV-2 infection take a serious course and require treatment. Even in most of the cases reported from China, disease progression was mild. Treatment of the infection depends on the severity of the disease presentation (e.g administering oxygen, maintaining fluid balance, if necessary administering antibiotics to combat bacterial co-infections) and also includes the treatment of relevant underlying chronic illnesses. A specific treatment, in other words, one that is directed at the new coronavirus itself, is currently not yet available. -","

Not all diseases that follow a SARS-CoV-2 infection take a serious course and require treatment. Even in most of the cases reported from China, disease progression was mild.  Treatment of the infection depends on the severity of the disease presentation (e.g administering oxygen, maintaining fluid balance, if necessary administering antibiotics to combat bacterial co-infections) and also includes the treatment of relevant underlying chronic illnesses. A specific treatment, in other words, one that is directed at the new coronavirus itself, is currently not yet available.

",https://www.bundesgesundheitsministerium.de/en/press/2020/coronavirus.html,Frequently asked questions,Bundesministerium für Gesundheit,,Germany,,,en,2020/03/18 -"How prepared is Germany? -","Germany is as prepared as it can possibly be. Above all, our network of centres of expertise and special clinics is unmatched by international standards. We have a very good disease warning and notification system, as well as excellent pandemic preparedness plans. In addition, regular emergency training exercises are conducted at airports in Germany. The Robert Koch Institute is responsible for coordination and information. -","

Germany is as prepared as it can possibly be. Above all, our network of centres of expertise and special clinics is unmatched by international standards. We have a very good disease warning and notification system, as well as excellent pandemic preparedness plans. In addition, regular emergency training exercises are conducted at airports in Germany. The Robert Koch Institute is responsible for coordination and information.

",https://www.bundesgesundheitsministerium.de/en/press/2020/coronavirus.html,Frequently asked questions,Bundesministerium für Gesundheit,,Germany,,,en,2020/03/18 -"What does it mean for Germany if the SARS-CoV-2 coronavirus continues to spread throughout the country? -","We do not know how many people in total will be infected with the SARS-CoV-2 coronavirus in Germany. Estimates speak of up to 70% of the population; however it is unclear over what period of time this will take place. We cannot anticipate the impact this will have on Germany. It could be more severe than a serious wave of influenza; progression could, however, also be much milder. There is no way to predict this. In Germany, we have also seen cases of severe disease progression and have recorded our first deaths. -","

We do not know how many people in total will be infected with the SARS-CoV-2 coronavirus in Germany. Estimates speak of up to 70% of the population; however it is unclear over what period of time this will take place. We cannot anticipate the impact this will have on Germany. It could be more severe than a serious wave of influenza; progression could, however, also be much milder. There is no way to predict this. In Germany, we have also seen cases of severe disease progression and have recorded our first deaths.

",https://www.bundesgesundheitsministerium.de/en/press/2020/coronavirus.html,Frequently asked questions,Bundesministerium für Gesundheit,,Germany,,,en,2020/03/18 -"Which areas are to be considered risk areas? -","The Robert Koch Institute updates the international risk areas and especially affected areas in Germany on its website, constantly, based on the current situation. -","

The Robert Koch Institute updates the international risk areas and especially affected areas in Germany on its website, constantly, based on the current situation.

",https://www.bundesgesundheitsministerium.de/en/press/2020/coronavirus.html,Frequently asked questions,Bundesministerium für Gesundheit,,Germany,,,en,2020/03/18 -"What are the recommendations for persons travelling to areas in which transmission is occurring? -","The Federal Foreign Office warns against all non-essential tourist trips abroad, as strict and increasingly more drastic restrictions in international air and other travel, worldwide restrictions on admission, quarantine measures and restrictions on public life in many countries are to be expected. - -The current travel and safety recommendations can be found on the web page of the Federal Foreign Office (AA). In addition, general information on COVID-19 for travellers has been prepared also by the AA.","

The Federal Foreign Office warns against all non-essential tourist trips abroad, as strict and increasingly more drastic restrictions in international air and other travel, worldwide restrictions on admission, quarantine measures and restrictions on public life in many countries are to be expected. -

-

The current travel and safety recommendations can be found on the web page of the Federal Foreign Office (AA). In addition, general information on COVID-19 for travellers has been prepared also by the AA.

",https://www.bundesgesundheitsministerium.de/en/press/2020/coronavirus.html,Frequently asked questions,Bundesministerium für Gesundheit,,Germany,,,en,2020/03/18 -"What arrangements have been put in place for travellers coming into Germany on flights from risk areas? -","Carriers of passengers, who arrive in Germany by plane, ship, train or bus from China, Iran, Italy, Japan, or South Korea, must distribute the following instructions on recommended behaviour to prevent the disease or in case of symptoms: www.rki.de/ncov-handzettel - -The same applies to all operators of airports, ports, passenger train stations and coach stations. - -Before landing in Germany, pilots on flights from Iran, Italy, Japan, South Korea or China must transmit the Aircraft Declaration of Health to the authorities. - -Before disembarking from the aircraft or ship, passengers arriving in Germany from Iran, Italy, Japan or South Korea by plane or ship, must provide information on their flight/trip and on where they can be reached for the 30 days after arrival. This is done with the disembarkation card: - -Aircraft disembarkation card - -Ship disembarkation card - -Passengers from China to Germany must provide additional information on where they were staying in China, persons with whom they were in contact and their state of health. In this case, this disembarkation card must be used. - -Airlines, ship-owners, charterers and all other persons and all other persons responsible for operating ships must keep the data on flights and trips to Germany from Iran, Italy, Japan, South Korea and China available for a period of 30 days after arrival.","

Carriers of passengers, who arrive in Germany by plane, ship, train or bus from China, Iran, Italy, Japan, or South Korea, must distribute the following instructions on recommended behaviour to prevent the disease or in case of symptoms: www.rki.de/ncov-handzettel -

-

The same applies to all operators of airports, ports, passenger train stations and coach stations. -

-

Before landing in Germany, pilots on flights from Iran, Italy, Japan, South Korea or China must transmit the Aircraft Declaration of Health to the authorities. -

-

Before disembarking from the aircraft or ship, passengers arriving in Germany from Iran, Italy, Japan or South Korea by plane or ship, must provide information on their flight/trip and on where they can be reached for the 30 days after arrival. This is done with the disembarkation card: -

-

Aircraft disembarkation card -

-

Ship disembarkation card -

-

Passengers from China to Germany must provide additional information on where they were staying in China, persons with whom they were in contact and their state of health. In this case, this disembarkation card must be used. -

-

Airlines, ship-owners, charterers and all other persons and all other persons responsible for operating ships must keep the data on flights and trips to Germany from Iran, Italy, Japan, South Korea and China available for a period of 30 days after arrival.

",https://www.bundesgesundheitsministerium.de/en/press/2020/coronavirus.html,Frequently asked questions,Bundesministerium für Gesundheit,,Germany,,,en,2020/03/18 -"Are there measures for train passengers? -","In addition to the measures for passengers arriving from especially affected countries (see above), the following general order by the Federal Police applies: - -Railway companies operating public passenger long-distance and regional trains are required to notify the command and location service of the Federal Police of suspected COVID-19 cases immediately. Contact data and information on how the notification must be phrased are to be found in the General order. - -Should a suspected case arise, travellers on said train must fill out the ""Train disembarkation card"". These forms will be handed out to passengers if necessary. - -The Federal Ministry of Transport and Digital Infrastructure (BMVi) has made additional information on rail transport available on its website. - -What other arrangements have been put in place to protect the German public from the novel coronavirus SARS-CoV-2? -The Robert Koch Institute has been granted wider powers in coordinating response measures with the Federal Laender. - -Regular coordination meetings are being held among the EU Health Ministers so as to guarantee as unified an approach as possible. - -To ensure that suspected cases are detected as early as possible, doctors, hospitals and laboratories have also been required to report any cases where there are reasonable grounds for suspicion (CoronaVMeldeV). - -Additional, possible measures will continually be under scrutiny depending on the risk assessment for Germany. - -Non-budgeted expenditure of up to 23 million euros are earmarked to fund, inter alia, measures related to repatriation and outbreak control, measures taken by the RKI, as well as research promotion and risk communication measures.","

In addition to the measures for passengers arriving from especially affected countries (see above), the following general order by the Federal Police applies:

  • Railway companies operating public passenger long-distance and regional trains are required to notify the command and location service of the Federal Police of suspected COVID-19 cases immediately. Contact data and information on how the notification must be phrased are to be found in the General order.

  • Should a suspected case arise, travellers on said train must fill out the "Train disembarkation card". These forms will be handed out to passengers if necessary.

The Federal Ministry of Transport and Digital Infrastructure (BMVi) has made additional information on rail transport available on its website.

",https://www.bundesgesundheitsministerium.de/en/press/2020/coronavirus.html,Frequently asked questions,Bundesministerium für Gesundheit,,Germany,,,en,2020/03/18 -"What other arrangements have been put in place to protect the German public from the novel coronavirus SARS-CoV-2? -","The Robert Koch Institute has been granted wider powers in coordinating response measures with the Federal Laender. - -Regular coordination meetings are being held among the EU Health Ministers so as to guarantee as unified an approach as possible. - -To ensure that suspected cases are detected as early as possible, doctors, hospitals and laboratories have also been required to report any cases where there are reasonable grounds for suspicion (CoronaVMeldeV). - -Additional, possible measures will continually be under scrutiny depending on the risk assessment for Germany. - -Non-budgeted expenditure of up to 23 million euros are earmarked to fund, inter alia, measures related to repatriation and outbreak control, measures taken by the RKI, as well as research promotion and risk communication measures.","

The Robert Koch Institute has been granted wider powers in coordinating response measures with the Federal Laender. -

-

Regular coordination meetings are being held among the EU Health Ministers so as to guarantee as unified an approach as possible. -

-

To ensure that suspected cases are detected as early as possible, doctors, hospitals and laboratories have also been required to report any cases where there are reasonable grounds for suspicion (CoronaVMeldeV). -

-

Additional, possible measures will continually be under scrutiny depending on the risk assessment for Germany. -

-

Non-budgeted expenditure of up to 23 million euros are earmarked to fund, inter alia, measures related to repatriation and outbreak control, measures taken by the RKI, as well as research promotion and risk communication measures.

",https://www.bundesgesundheitsministerium.de/en/press/2020/coronavirus.html,Frequently asked questions,Bundesministerium für Gesundheit,,Germany,,,en,2020/03/18 -Will I continue to get my salary if I have been placed under quarantine?,"Yes, your employer will continue to pay your salary. Your employer will then be entitled to reimbursement, from the Federal Land, of the sums used for the continued payment of wages. Should, contrary to expectations, your employer not pay, you are entitled to compensation from the competent authority (according to Section 56 of the Protection against Infection Act (IfSG)). In the first six weeks, this compensation will correspond to your net salary. After this period, you will receive the amount you would receive as sick pay. -","

Yes, your employer will continue to pay your salary. Your employer will then be entitled to reimbursement, from the Federal Land, of the sums used for the continued payment of wages. Should, contrary to expectations, your employer not pay, you are entitled to compensation from the competent authority (according to Section 56 of the Protection against Infection Act (IfSG)). In the first six weeks, this compensation will correspond to your net salary. After this period, you will receive the amount you would receive as sick pay.

",https://www.bundesgesundheitsministerium.de/en/press/2020/coronavirus.html,Frequently asked questions,Bundesministerium für Gesundheit,,Germany,,,en,2020/03/18 -Will self-employed persons receive financial compensation if they are no longer able to work as a result of the virus?,"Yes, self-employed persons and freelancers will receive compensation for loss of earnings according to the Act on the Prevention and Control of Infectious Diseases. The competent authority will base compensation on the profit established in the tax declaration of the previous calendar year.","

Yes, self-employed persons and freelancers will receive compensation for loss of earnings according to the Act on the Prevention and Control of Infectious Diseases. The competent authority will base compensation on the profit established in the tax declaration of the previous calendar year.

",https://www.bundesgesundheitsministerium.de/en/press/2020/coronavirus.html,Frequently asked questions,Bundesministerium für Gesundheit,,Germany,,,en,2020/03/18 -What precautions must be taken at large-scale events?,"The cancellation of events and the closure of schools and kindergartens fall within the responsibility of the Federal Laender and/or the local authorities. In the meantime, all the Federal Laender have cancelled events and closed schools and kindergartens. Only in a very few exceptional cases may an event be allowed. - -The Robert Koch Institute has published “General Principles of Risk Assessment and Recommendations for Action with respect to Large-Scale Events” (PDF-File) to support local authorities in deciding on whether to cancel an event. -","

The cancellation of events and the closure of schools and kindergartens fall within the responsibility of the Federal Laender and/or the local authorities. In the meantime, all the Federal Laender have cancelled events and closed schools and kindergartens. Only in a very few exceptional cases may an event be allowed. -

-

The Robert Koch Institute has published “General Principles of Risk Assessment and Recommendations for Action with respect to Large-Scale Events” (PDF-File) to support local authorities in deciding on whether to cancel an event.

",https://www.bundesgesundheitsministerium.de/en/press/2020/coronavirus.html,Frequently asked questions,Bundesministerium für Gesundheit,,Germany,,,en,2020/03/18 -"Is there a danger that a person can become infected with the novel coronavirus (SARS-CoV-2) through foodstuffs or objects? -","According to the Federal Institute for Risk Assessment, no proven case has been reported to date of a person being infected by consuming contaminated foodstuffs or through contact with objects contaminated with the SARS-CoV-2 virus. Nor have there been any reports of other coronaviruses causing infection through foodstuffs or contact with dry surfaces. However, virus transmission by way of smear infection is considered possible from surfaces contaminated shortly before contact. Owing to the relatively poor stability demonstrated by coronaviruses in the environment, it is likely that the window of contamination only exists for a short period. - -The risk assessment of foods or objects falls within the remit of the Federal Institute for Risk Assessment (BfR); the Federal Institute for Occupational Safety and Health (BAuA) is responsible for occupational safety and health.","

According to the Federal Institute for Risk Assessment, no proven case has been reported to date of a person being infected by consuming contaminated foodstuffs or through contact with objects contaminated with the SARS-CoV-2 virus. Nor have there been any reports of other coronaviruses causing infection through foodstuffs or contact with dry surfaces. However, virus transmission by way of smear infection is considered possible from surfaces contaminated shortly before contact. Owing to the relatively poor stability demonstrated by coronaviruses in the environment, it is likely that the window of contamination only exists for a short period. -

-

The risk assessment of foods or objects falls within the remit of the Federal Institute for Risk Assessment (BfR); the Federal Institute for Occupational Safety and Health (BAuA) is responsible for occupational safety and health.

",https://www.bundesgesundheitsministerium.de/en/press/2020/coronavirus.html,Frequently asked questions,Bundesministerium für Gesundheit,,Germany,,,en,2020/03/18 -"Is water a possible source of infection in the transmission of SARS-CoV-2? -","SARS-CoV-2 is similar to other coronaviruses for which water does not constitute a relevant route of transmission. The direct transmission of coronaviruses via the stools of infected persons also appears negligible; to date, no case of a faecal-oral transmission of the virus has been reported. - -The German Environment Agency has published a detailed statement on coronavirus and drinking water. -","

SARS-CoV-2 is similar to other coronaviruses for which water does not constitute a relevant route of transmission. The direct transmission of coronaviruses via the stools of infected persons also appears negligible; to date, no case of a faecal-oral transmission of the virus has been reported. -

-

The German Environment Agency has published a detailed statement on coronavirus and drinking water.

",https://www.bundesgesundheitsministerium.de/en/press/2020/coronavirus.html,Frequently asked questions,Bundesministerium für Gesundheit,,Germany,,,en,2020/03/18 -"Where can doctors and clinics obtain additional information? -","The Robert Koch Institute posts information for professionals (in German) online. Here you can find, among other things, a flowchart for doctors (in German) to assist them in clarifying suspected cases and deciding on the measures to be taken as well as Recommendations on hygienic measures when treating patients with a SARS-CoV-2 infection. -","

The Robert Koch Institute posts information for professionals (in German) online. Here you can find, among other things, a flowchart for doctors (in German) to assist them in clarifying suspected cases and deciding on the measures to be taken as well as Recommendations on hygienic measures when treating patients with a SARS-CoV-2 infection.

On 31 December 2019, China’s WHO country office was informed of a cluster of patients with pneumonia of unknown cause in Wuhan, a city of 90 million inhabitants in the province of Hubei, China.

",https://www.bundesgesundheitsministerium.de/en/press/2020/coronavirus.html,Frequently asked questions,Bundesministerium für Gesundheit,,Germany,,,en,2020/03/18 -"Where did the outbreak start? -","According to information from the Chinese authorities in Wuhan, some patients worked as traders or vendors at the Huanan Seafood Market in Wuhan. It is the largest seafood market in Wuhan with over 600 stalls and 1,500 workers. It has been reported that wild animals and/or organs of other animals and reptiles were also offered for sale at the market. It is currently assumed that SARS-CoV-2 was spread to human beings from bats. -","

According to information from the Chinese authorities in Wuhan, some patients worked as traders or vendors at the Huanan Seafood Market in Wuhan. It is the largest seafood market in Wuhan with over 600 stalls and 1,500 workers. It has been reported that wild animals and/or organs of other animals and reptiles were also offered for sale at the market. It is currently assumed that SARS-CoV-2 was spread to human beings from bats.

",https://www.bundesgesundheitsministerium.de/en/press/2020/coronavirus.html,Frequently asked questions,Bundesministerium für Gesundheit,,Germany,,,en,2020/03/18 -"Have there been similar outbreaks in the past? -","This new virus is a pathogen belonging to the coronavirus family, which is the same family as SARS (severe acute respiratory syndrome) and MERS-CoV (Middle East respiratory syndrome coronavirus). - -In 2003, Germany recorded a small number of SARS cases. The disease did not spread further within Germany. -","

This new virus is a pathogen belonging to the coronavirus family, which is the same family as SARS (severe acute respiratory syndrome) and MERS-CoV (Middle East respiratory syndrome coronavirus). -

-

In 2003, Germany recorded a small number of SARS cases. The disease did not spread further within Germany.

",https://www.bundesgesundheitsministerium.de/en/press/2020/coronavirus.html,Frequently asked questions,Bundesministerium für Gesundheit,,Germany,,,en,2020/03/18 \ No newline at end of file diff --git a/tutorials/small_generator_dataset.csv b/tutorials/small_generator_dataset.csv deleted file mode 100644 index d6055f6c83..0000000000 --- a/tutorials/small_generator_dataset.csv +++ /dev/null @@ -1,76 +0,0 @@ -title,text -"""Albert Einstein""","to Einstein in 1922. Footnotes Citations Albert Einstein Albert Einstein (; ; 14 March 1879 – 18 April 1955) was a German-born theoretical physicist who developed the theory of relativity, one of the two pillars of modern physics (alongside quantum mechanics). His work is also known for its influence on the philosophy of science. He is best known to the general public for his mass–energy equivalence formula , which has been dubbed ""the world's most famous equation"". He received the 1921 Nobel Prize in Physics ""for his services to theoretical physics, and especially for his discovery of the law of" -"""Albert Einstein""","Albert Einstein Albert Einstein (; ; 14 March 1879 – 18 April 1955) was a German-born theoretical physicist who developed the theory of relativity, one of the two pillars of modern physics (alongside quantum mechanics). His work is also known for its influence on the philosophy of science. He is best known to the general public for his mass–energy equivalence formula , which has been dubbed ""the world's most famous equation"". He received the 1921 Nobel Prize in Physics ""for his services to theoretical physics, and especially for his discovery of the law of the photoelectric effect"", a pivotal step" -"""Albert Einstein""","observations were published in the international media, making Einstein world-famous. On 7 November 1919, the leading British newspaper ""The Times"" printed a banner headline that read: ""Revolution in Science – New Theory of the Universe – Newtonian Ideas Overthrown"". In 1920, he became a Foreign Member of the Royal Netherlands Academy of Arts and Sciences. In 1922, he was awarded the 1921 Nobel Prize in Physics ""for his services to Theoretical Physics, and especially for his discovery of the law of the photoelectric effect"". While the general theory of relativity was still considered somewhat controversial, the citation also does not" -"""Albert Einstein""","model for depictions of mad scientists and absent-minded professors; his expressive face and distinctive hairstyle have been widely copied and exaggerated. ""Time"" magazine's Frederic Golden wrote that Einstein was ""a cartoonist's dream come true"". Many popular quotations are often misattributed to him. Einstein received numerous awards and honors and in 1922 he was awarded the 1921 Nobel Prize in Physics ""for his services to Theoretical Physics, and especially for his discovery of the law of the photoelectric effect"". None of the nominations in 1921 met the criteria set by Alfred Nobel, so the 1921 prize was carried forward and awarded" -"""Alfred Nobel""","was adopted as the standard technology for mining in the ""Age of Engineering"" bringing Nobel a great amount of financial success, though at a significant cost to his health. An offshoot of this research resulted in Nobel's invention of ballistite, the precursor of many modern smokeless powder explosives and still used as a rocket propellant. In 1888 Alfred's brother Ludvig died while visiting Cannes and a French newspaper erroneously published Alfred's obituary. It condemned him for his invention of dynamite and is said to have brought about his decision to leave a better legacy after his death. The obituary stated," -"""Akira Kurosawa""","for 2020. Patrick Frater writing for ""Variety"" magazine in May 2017 stated that another two unfinished films by Kurosawa were planned, with ""Silvering Spear"" to start filming in 2018. In September 2011, it was reported that remake rights to most of Kurosawa's movies and unproduced screenplays were assigned by the Akira Kurosawa 100 Project to the L.A.-based company Splendent. Splendent's chief Sakiko Yamada, stated that he aimed to ""help contemporary film-makers introduce a new generation of moviegoers to these unforgettable stories"". Kurosawa Production Co., established in 1959, continues to oversee many of the aspects of Kurosawa's legacy. The director's son," -"""Apple Inc.""","a near bezel-less design along with wireless charging. On September 12, 2018, Apple introduced the iPhone XS, iPhone XS Max and iPhone XR. The iPhone XS and iPhone XS Max features Super Retina displays, a faster and improved dual camera system that offers breakthrough photo and video features, the first 7-nanometer chip in a smartphone — the A12 Bionic chip with next-generation Neural Engine — faster Face ID, wider stereo sound and introduces Dual SIM to iPhone. The iPhone XR comes in an all-screen glass and aluminium design with the most advanced LCD in a smartphone featuring a 6.1-inch Liquid" -"""Akira Kurosawa""","through the Second World War and beyond. The narrative centers on yearly birthday celebrations with his former students, during which the protagonist declares his unwillingness to die just yet—a theme that was becoming increasingly relevant for the film's 81-year-old creator. Filming began in February 1992 and wrapped by the end of September. Its release on April 17, 1993, was greeted by an even more disappointed reaction than had been the case with his two preceding works. Kurosawa nevertheless continued to work. He wrote the original screenplays ""The Sea is Watching"" in 1993 and ""After the Rain"" in 1995. While putting" -"""Apple Inc.""","2016, Apple introduced the iPhone 7 and the iPhone 7 Plus, which feature improved system and graphics performance, add water resistance, a new rear dual-camera system on the 7 Plus model, and, controversially, remove the 3.5 mm headphone jack. On September 12, 2017, Apple introduced the iPhone 8 and iPhone 8 Plus, standing as evolutionary updates to its previous phones with a faster processor, improved display technology, upgraded camera systems and wireless charging. The company also announced iPhone X, which radically changes the hardware of the iPhone lineup, removing the home button in favor of facial recognition technology and featuring" -"""Apple Inc.""","a faster processor, and brighter display. On September 12, 2017, Apple introduced the Apple Watch Series 3 featuring LTE cellular connectivity, giving the wearable independence from an iPhone except for the setup process. On September 12, 2018, Apple introduced the Apple Watch Series 4, featuring new display, electrocardiogram and fall detection. At the 2007 Macworld conference, Jobs demonstrated the Apple TV (previously known as the iTV), a set-top video device intended to bridge the sale of content from iTunes with high-definition televisions. The device links up to a user's TV and syncs, either via Wi-Fi or a wired network, with" -"""Amplitude modulation""","Amplitude modulation Amplitude modulation (AM) is a modulation technique used in electronic communication, most commonly for transmitting information via a radio carrier wave. In amplitude modulation, the amplitude (signal strength) of the carrier wave is varied in proportion to that of the message signal being transmitted. The message signal is, for example, a function of the sound to be reproduced by a loudspeaker, or the light intensity of pixels of a television screen. This technique contrasts with frequency modulation, in which the frequency of the carrier signal is varied, and phase modulation, in which its phase is varied. AM was" -"""Amplitude modulation""","AM transmission (refer to Figure 2, but only considering positive frequencies) is twice the bandwidth of the modulating (or ""baseband"") signal, since the upper and lower sidebands around the carrier frequency each have a bandwidth as wide as the highest modulating frequency. Although the bandwidth of an AM signal is narrower than one using frequency modulation (FM), it is twice as wide as single-sideband techniques; it thus may be viewed as spectrally inefficient. Within a frequency band, only half as many transmissions (or ""channels"") can thus be accommodated. For this reason analog television employs a variant of single-sideband (known as" -"""Amplitude modulation""","the earliest modulation method used to transmit voice by radio. It was developed during the first quarter of the 20th century beginning with Landell de Moura and Reginald Fessenden's radiotelephone experiments in 1900. It remains in use today in many forms of communication; for example it is used in portable two-way radios, VHF aircraft radio, citizens band radio, and in computer modems in the form of QAM. ""AM"" is often used to refer to mediumwave AM radio broadcasting. In electronics and telecommunications, modulation means varying some aspect of a continuous wave carrier signal with an information-bearing modulation waveform, such as" -"""Amplitude modulation""","in which ones and zeros are represented by the presence or absence of a carrier. On-off keying is likewise used by radio amateurs to transmit Morse code where it is known as continuous wave (CW) operation, even though the transmission is not strictly ""continuous."" A more complex form of AM, quadrature amplitude modulation is now more commonly used with digital data, while making more efficient use of the available bandwidth. In 1982, the International Telecommunication Union (ITU) designated the types of amplitude modulation: Although AM was used in a few crude experiments in multiplex telegraph and telephone transmission in the" -"""Amplitude modulation""","reduced-carrier transmission or DSB-RC) to use in the demodulation process. Even with the carrier totally eliminated in double-sideband suppressed-carrier transmission, carrier regeneration is possible using a Costas phase-locked loop. This doesn't work however for single-sideband suppressed-carrier transmission (SSB-SC), leading to the characteristic ""Donald Duck"" sound from such receivers when slightly detuned. Single sideband is nevertheless used widely in amateur radio and other voice communications both due to its power efficiency and bandwidth efficiency (cutting the RF bandwidth in half compared to standard AM). On the other hand, in medium wave and short wave broadcasting, standard AM with the full carrier" -"""The Ashes""","In England and Wales, the grounds used are: Old Trafford in Manchester (1884), The Oval in Kennington, South London (1884); Lord's in St John's Wood, North London (1884); Trent Bridge at West Bridgford, Nottinghamshire (1899), Headingley in Leeds (1899); Edgbaston in Birmingham (1902); Sophia Gardens in Cardiff, Wales (2009); and the Riverside Ground in Chester-le-Street, County Durham (2013). One Test was also held at Bramall Lane in Sheffield in 1902. Traditionally the final Test of the series is played at the Oval. Sophia Gardens and the Riverside were excluded as Test grounds between the years of 2020 and 2024 and" -"""The Ashes""","captain Alastair Cook being bowled out for 0 (his first duck in 26 innings as captain), Australia looked to be in with a significant chance of a win, keeping its series hopes alive. By lunch England were 37–3, but on resumption of play only 3 balls were bowled before rain stopped play. This rain persisted and, at 16:40, the captains shook hands and the match was declared a draw. With England 2–0 up with two Tests to play, England retained the Ashes on 5 August 2013. In the Fourth Test, England won the toss and batted first, putting on 238" -"""The Ashes""","the quickest - in terms of balls faced - a team has been bowled out in the first innings of a Test match. With victory by an innings and 78 runs on the morning of the third day of the Fourth Test, England regained the Ashes. During the buildup, the 2017–18 Ashes series was regarded as a turning point for both sides. Australia were criticised for being too reliant on captain Steve Smith and vice-captain David Warner, while England was said to have a shoddy middle to lower order. Off the field, England all-rounder Ben Stokes was ruled out of" -"""The Ashes""","The Ashes The Ashes is a Test cricket series played between England and Australia. The Ashes are regarded as being held by the team that most recently won the Test series. If the test series is drawn, the team that currently holds the Ashes retains the trophy. The term originated in a satirical obituary published in a British newspaper, ""The Sporting Times"", immediately after Australia's 1882 victory at The Oval, its first Test win on English soil. The obituary stated that English cricket had died, and ""the body will be cremated and the ashes taken to Australia"". The mythical ashes" -"""The Ashes""","therefore will not host an Ashes Test until at least 2027. Trent Bridge is also not due to host an Ashes Test in 2019 or 2023. The popularity and reputation of the cricket series has led to other sports or games, and/or their followers, using the name ""Ashes"" for contests between England and Australia. The best-known and longest-running of these events is the rugby league rivalry between Great Britain and Australia (see rugby league ""Ashes""). Use of the name ""Ashes"" was suggested by the Australian team when rugby league matches between the two countries commenced in 1908. Other examples included" -"""Apple Inc.""","an app that allows iPad and iPhone users to make and edit videos. The app provides a way to produce short videos to share with other users on the Messages app, Instagram, Facebook and other social networks. Apple also introduced Live Titles for Clips that allows users to add live animated captions and titles using their voice. In May 2017, Apple refreshed two of its website designs. Their public relations ""Apple Press Info"" website was changed to an ""Apple Newsroom"" site, featuring a greater emphasis on imagery and therefore lower information density, and combines press releases, news items, and photos." -"""Apple Inc.""","2018 after being delayed from its initial December 2017 release. It also features 7 tweeters in the base, a four-inch woofer in the top, and six microphones for voice control and acoustic optimization On September 12, 2018, Apple announced that HomePod is adding new features—search by lyrics, set multiple timers, make and receive phone calls, Find My iPhone, Siri Shortcuts—and Siri languages. Apple develops its own operating systems to run on its devices, including macOS for Mac personal computers, iOS for its iPhone, iPad and iPod Touch smartphones and tablets, watchOS for its Apple Watch smartwatches, and tvOS for its" -"""A Modest Proposal""","a letter to a local Aspen newspaper informing them that, on Christmas Eve, he was going to use napalm to burn a number of dogs and hopefully any humans they find. The letter protests against the burning of Vietnamese people occurring overseas. The 2012 film ""Butcher Boys,"" written by Kim Henkel, is said to be loosely based on Jonathan Swift's ""A Modest Proposal."" The film's opening scene takes place in a restaurant named ""J. Swift's"". On November 30, 2017, Jonathan Swift's 350th birthday, The Washington Post published a column entitled 'Why Alabamians should consider eating Democrats' babies"", by the humorous" -"""Apollo 11""","""Friendship 7"". ""Columbia"" was moved in 2017 to the NASM Mary Baker Engen Restoration Hangar at the Steven F. Udvar-Hazy Center in Chantilly, Virginia, to be readied for a four-city tour titled ""Destination Moon: The Apollo 11 Mission"". This included Space Center Houston from October 14, 2017 to March 18, 2018, the Saint Louis Science Center from April 14 to September 3, 2018, the Senator John Heinz History Center in Pittsburgh from September 29, 2018 to February 18, 2019, and the Seattle Museum of Flight from March 16 to September 2, 2019. For 40 years Armstrong's and Aldrin's space suits" -"""Apple Inc.""","a faster processor, and brighter display. On September 12, 2017, Apple introduced the Apple Watch Series 3 featuring LTE cellular connectivity, giving the wearable independence from an iPhone except for the setup process. On September 12, 2018, Apple introduced the Apple Watch Series 4, featuring new display, electrocardiogram and fall detection. At the 2007 Macworld conference, Jobs demonstrated the Apple TV (previously known as the iTV), a set-top video device intended to bridge the sale of content from iTunes with high-definition televisions. The device links up to a user's TV and syncs, either via Wi-Fi or a wired network, with" -"""American Revolutionary War""","14, 1784. Copies were sent back to Europe for ratification by the other parties involved, the first reaching France in March 1784. British ratification occurred on April 9, 1784, and the ratified versions were exchanged in Paris on May 12, 1784. The war formally concluded on September 3, 1783. The last British troops departed New York City on November 25, 1783, marking the end of British rule in the new United States. The total loss of life throughout the conflict is largely unknown. As was typical in wars of the era, diseases such as smallpox claimed more lives than battle." -"""American Civil War""","ranging from the reenactment of battles, to statues and memorial halls erected, to films being produced, to stamps and coins with Civil War themes being issued, all of which helped to shape public memory. This varied advent occurred in greater proportions on the 100th and 150th anniversary. Hollywood's take on the war has been especially influential in shaping public memory, as seen in such film classics as ""Birth of a Nation"" (1915), ""Gone with the Wind"" (1939), and more recently ""Lincoln"" (2012). Ken Burns produced a notable PBS series on television titled ""The Civil War"" (1990). It was digitally remastered" -"""American Revolutionary War""","signed the Treaty of Paris in which Great Britain agreed to recognize the sovereignty of the United States and formally end the war. French involvement had proven decisive, but France made few gains and incurred crippling debts. Spain made some territorial gains but failed in its primary aim of recovering Gibraltar. The Dutch were defeated on all counts and were compelled to cede territory to Great Britain. In India, the war against Mysore and its allies concluded in 1784 without any territorial changes. Parliament passed the Stamp Act in 1765. Colonists condemned the tax because their rights as Englishmen protected" -"""American Civil War""","been achieved and that Reconstruction should end. They ran a presidential ticket in 1872 but were decisively defeated. In 1874, Democrats, primarily Southern, took control of Congress and opposed any more reconstruction. The Compromise of 1877 closed with a national consensus that the Civil War had finally ended. With the withdrawal of federal troops, however, whites retook control of every Southern legislature; the Jim Crow period of disenfranchisement and legal segregation was about to begin. The Civil War is one of the central events in American collective memory. There are innumerable statues, commemorations, books and archival collections. The memory includes" -"""American Revolutionary War""","desire to support the Americans the following year, hoping to weaken Britain's empire. The Portuguese threat was neutralized in the Spanish–Portuguese War (1776–77). On 12 April 1779, Spain signed the Treaty of Aranjuez with France and went to war against Britain. Spain sought to recover Gibraltar and Menorca in Europe, as well as Mobile and Pensacola in Florida, and also to expel the British from Central America. Meanwhile, George III had given up on subduing America while Britain had a European war to fight. He did not welcome war with France, but he believed that Britain had made all necessary" -"""Apple Inc.""","Flash to store games, programs, and to cache the current media playing. The release also coincided with the opening of a separate Apple TV App Store and a new Siri Remote with a glass touchpad, gyroscope, and microphone. At the September 12, 2017 event, Apple released a new 4K Apple TV with the same form factor as the 4th Generation model. The 4K model is powered by the A10X SoC designed in-house that also powers their second-generation iPad Pro. The 4K model also has support for high dynamic range. Apple's first smart speaker, the HomePod was released on February 9," -"""Apple Inc.""","a near bezel-less design along with wireless charging. On September 12, 2018, Apple introduced the iPhone XS, iPhone XS Max and iPhone XR. The iPhone XS and iPhone XS Max features Super Retina displays, a faster and improved dual camera system that offers breakthrough photo and video features, the first 7-nanometer chip in a smartphone — the A12 Bionic chip with next-generation Neural Engine — faster Face ID, wider stereo sound and introduces Dual SIM to iPhone. The iPhone XR comes in an all-screen glass and aluminium design with the most advanced LCD in a smartphone featuring a 6.1-inch Liquid" -"""Apple Inc.""","include access to the iTunes Store to rent movies and TV shows (purchasing has been discontinued), streaming from internet video sources, including YouTube and Netflix, and media streaming from an iTunes library. Apple also reduced the price of the device to $99. A third generation of the device was introduced at an Apple event on March 7, 2012, with new features such as higher resolution (1080p) and a new user interface. At the September 9, 2015, event, Apple unveiled an overhauled Apple TV, which now runs a variant of macOS, called tvOS, and contains 32GB or 64 GB of NAND" -"""Apple Inc.""","2018 after being delayed from its initial December 2017 release. It also features 7 tweeters in the base, a four-inch woofer in the top, and six microphones for voice control and acoustic optimization On September 12, 2018, Apple announced that HomePod is adding new features—search by lyrics, set multiple timers, make and receive phone calls, Find My iPhone, Siri Shortcuts—and Siri languages. Apple develops its own operating systems to run on its devices, including macOS for Mac personal computers, iOS for its iPhone, iPad and iPod Touch smartphones and tablets, watchOS for its Apple Watch smartwatches, and tvOS for its" -"""Apple Inc.""","a faster processor, and brighter display. On September 12, 2017, Apple introduced the Apple Watch Series 3 featuring LTE cellular connectivity, giving the wearable independence from an iPhone except for the setup process. On September 12, 2018, Apple introduced the Apple Watch Series 4, featuring new display, electrocardiogram and fall detection. At the 2007 Macworld conference, Jobs demonstrated the Apple TV (previously known as the iTV), a set-top video device intended to bridge the sale of content from iTunes with high-definition televisions. The device links up to a user's TV and syncs, either via Wi-Fi or a wired network, with" -"""Apollo 8""","as early as May 1967 that there would be at least four additional missions. Apollo 8 was planned as the ""D"" mission, a test of the LM in a low Earth orbit in December 1968 by James McDivitt, David Scott, and Russell Schweickart, while Borman's crew would fly the ""E"" mission, a more rigorous LM test in an elliptical medium Earth orbit as Apollo 9, in early 1969. The ""F"" Mission would test the CSM and LM in lunar orbit, and the ""G"" mission would be the finale, the Moon landing. Production of the LM fell behind schedule, and when" -Anime,"Osamu Tezuka adapted and simplified many Disney animation techniques to reduce costs and to limit the number of frames in productions. He intended this as a temporary measure to allow him to produce material on a tight schedule with inexperienced animation staff. ""Three Tales"", aired in 1960, was the first anime shown on television. The first anime television series was ""Otogi Manga Calendar"", aired from 1961 to 1964. The 1970s saw a surge of growth in the popularity of ""manga"", Japanese comic books and graphic novels, many of which were later animated. The work of Osamu Tezuka drew particular attention:" -"""Akira Kurosawa""","Akira Kurosawa Akira Kurosawa (, ""Kurosawa Akira""; March 23, 1910 – September 6, 1998) was a Japanese film director and screenwriter, who directed 30 films in a career spanning 57 years. He is regarded as one of the most important and influential filmmakers in the history of cinema. Kurosawa entered the Japanese film industry in 1936, following a brief stint as a painter. After years of working on numerous films as an assistant director and scriptwriter, he made his debut as a director during World War II with the popular action film ""Sanshiro Sugata"" (a.k.a. ""Judo Saga""). After the war," -"""Aquarius (constellation)""","Aquarii among its 12 stars. 88, 89, and 98 Aquarii represent ""Fou-youe"", the axes used as weapons and for hostage executions. Also in Aquarius is ""Loui-pi-tchin"", the ramparts that stretch from 29 and 27 Piscium and 33 and 30 Aquarii through Phi, Lambda, Sigma, and Iota Aquarii to Delta, Gamma, Kappa, and Epsilon Capricorni. Near the border with Cetus, the axe ""Fuyue"" was represented by three stars; its position is disputed and may have instead been located in Sculptor. ""Tienliecheng"" also has a disputed position; the 13-star castle replete with ramparts may have possessed Nu and Xi Aquarii but may" -Anime,"mind, but are also aimed at the general music market, and therefore often allude only vaguely or not at all to the themes or plot of the series. Pop and rock songs are also sometimes used as incidental music (""insert songs"") in an episode, often to highlight particularly important scenes. The animation industry consists of more than 430 production companies with some of the major studios including Toei Animation, Gainax, Madhouse, Gonzo, Sunrise, Bones, TMS Entertainment, Nippon Animation, P.A.Works, Studio Pierrot and Studio Ghibli. Many of the studios are organized into a trade association, The Association of Japanese Animations. There" -Anatomy,"seen with the naked eye, and also includes superficial anatomy or surface anatomy, the study by sight of the external body features. Microscopic anatomy is the study of structures on a microscopic scale, along with histology (the study of tissues), and embryology (the study of an organism in its immature condition). Anatomy can be studied using both invasive and non-invasive methods with the goal of obtaining information about the structure and organization of organs and systems. Methods used include dissection, in which a body is opened and its organs studied, and endoscopy, in which a video camera-equipped instrument is inserted" -Anatomy,"related disciplines, and they are often studied together. Human anatomy is one of the essential basic sciences that are applied in medicine. The discipline of anatomy is divided into macroscopic and microscopic anatomy. Macroscopic anatomy, or gross anatomy, is the examination of an animal's body parts using unaided eyesight. Gross anatomy also includes the branch of superficial anatomy. Microscopic anatomy involves the use of optical instruments in the study of the tissues of various structures, known as histology, and also in the study of cells. The history of anatomy is characterized by a progressive understanding of the functions of the" -Anatomy,"Magnetic resonance imaging, computed tomography, and ultrasound imaging have all enabled examination of internal structures in unprecedented detail to a degree far beyond the imagination of earlier generations. Anatomy Anatomy (Greek anatomē, ""dissection"") is the branch of biology concerned with the study of the structure of organisms and their parts. Anatomy is a branch of natural science which deals with the structural organization of living things. It is an old science, having its beginnings in prehistoric times. Anatomy is inherently tied to developmental biology, embryology, comparative anatomy, evolutionary biology, and phylogeny, as these are the processes by which anatomy is" -Anatomy,"tail which continues the spinal cord and vertebrae but not the gut. The mouth is found at the anterior end of the animal, and the anus at the base of the tail. The defining characteristic of a vertebrate is the vertebral column, formed in the development of the segmented series of vertebrae. In most vertebrates the notochord becomes the nucleus pulposus of the intervertebral discs. However, a few vertebrates, such as the sturgeon and the coelacanth retain the notochord into adulthood. Jawed vertebrates are typified by paired appendages, fins or legs, which may be secondarily lost. The limbs of vertebrates" -"""Augustin-Jean Fresnel""","theory and stellar aberration. He was informed that he was trying to break down open doors (""""il enfonçait des portes ouvertes""""), and directed to classical works on optics. On 12 July 1815, as Fresnel was about to leave Paris, Arago left him a note on a new topic: Fresnel would not have ready access to these works outside Paris, and could not read English. But, in Mathieu — with a point-source of light made by focusing sunlight with a drop of honey, a crude micrometer of his own construction, and supporting apparatus made by a local locksmith — he began" -Anatomy,"to venom glands as most spiders are venomous. They have a second pair of appendages called pedipalps attached to the cephalothorax. These have similar segmentation to the legs and function as taste and smell organs. At the end of each male pedipalp is a spoon-shaped cymbium that acts to support the copulatory organ. In 1600 BCE, the Edwin Smith Papyrus, an Ancient Egyptian medical text, described the heart, its vessels, liver, spleen, kidneys, hypothalamus, uterus and bladder, and showed the blood vessels diverging from the heart. The Ebers Papyrus (c. 1550 BCE) features a ""treatise on the heart"", with vessels" -Anatomy,"in such organs as sea anemone tentacles and the body wall of sea cucumbers. Skeletal muscle contracts rapidly but has a limited range of extension. It is found in the movement of appendages and jaws. Obliquely striated muscle is intermediate between the other two. The filaments are staggered and this is the type of muscle found in earthworms that can extend slowly or make rapid contractions. In higher animals striated muscles occur in bundles attached to bone to provide movement and are often arranged in antagonistic sets. Smooth muscle is found in the walls of the uterus, bladder, intestines, stomach," -Anatomy,"organs, including the stomach. All vertebrates have a similar basic body plan and at some point in their lives, mostly in the embryonic stage, share the major chordate characteristics; a stiffening rod, the notochord; a dorsal hollow tube of nervous material, the neural tube; pharyngeal arches; and a tail posterior to the anus. The spinal cord is protected by the vertebral column and is above the notochord and the gastrointestinal tract is below it. Nervous tissue is derived from the ectoderm, connective tissues are derived from mesoderm, and gut is derived from the endoderm. At the posterior end is a" -Anatomy,"pouch where it latches on to a nipple and completes its development. Humans have the overall body plan of a mammal. Humans have a head, neck, trunk (which includes the thorax and abdomen), two arms and hands, and two legs and feet. Generally, students of certain biological sciences, paramedics, prosthetists and orthotists, physiotherapists, occupational therapists, nurses, podiatrists, and medical students learn gross anatomy and microscopic anatomy from anatomical models, skeletons, textbooks, diagrams, photographs, lectures and tutorials, and in addition, medical students generally also learn gross anatomy through practical experience of dissection and inspection of cadavers. The study of microscopic anatomy" -Anatomy,"has three pairs of segmented legs, one pair each for the three segments that compose the thorax and one or two pairs of wings. The abdomen is composed of eleven segments, some of which may be fused and houses the digestive, respiratory, excretory and reproductive systems. There is considerable variation between species and many adaptations to the body parts, especially wings, legs, antennae and mouthparts. Spiders a class of arachnids have four pairs of legs; a body of two segments—a cephalothorax and an abdomen. Spiders have no wings and no antennae. They have mouthparts called chelicerae which are often connected" -"""Alkali metal""","million (ppm) or 25 micromolar. Its diagonal relationship with magnesium often allows it to replace magnesium in ferromagnesium minerals, where its crustal concentration is about 18 ppm, comparable to that of gallium and niobium. Commercially, the most important lithium mineral is spodumene, which occurs in large deposits worldwide. Rubidium is approximately as abundant as zinc and more abundant than copper. It occurs naturally in the minerals leucite, pollucite, carnallite, zinnwaldite, and lepidolite, although none of these contain only rubidium and no other alkali metals. Caesium is more abundant than some commonly known elements, such as antimony, cadmium, tin, and tungsten," -"""Alkali metal""","Lithium salts have to be extracted from the water of mineral springs, brine pools, and brine deposits. The metal is produced electrolytically from a mixture of fused lithium chloride and potassium chloride. Sodium occurs mostly in seawater and dried seabed, but is now produced through electrolysis of sodium chloride by lowering the melting point of the substance to below 700 °C through the use of a Downs cell. Extremely pure sodium can be produced through the thermal decomposition of sodium azide. Potassium occurs in many minerals, such as sylvite (potassium chloride). Previously, potassium was generally made from the electrolysis of" -"""Alkali metal""","and the Dead Sea. Despite their near-equal abundance in Earth's crust, sodium is far more common than potassium in the ocean, both because potassium's larger size makes its salts less soluble, and because potassium is bound by silicates in soil and what potassium leaches is absorbed far more readily by plant life than sodium. Despite its chemical similarity, lithium typically does not occur together with sodium or potassium due to its smaller size. Due to its relatively low reactivity, it can be found in seawater in large amounts; it is estimated that seawater is approximately 0.14 to 0.25 parts per" -"""Alkali metal""","of lithium in humans has yet to be identified. Sodium and potassium occur in all known biological systems, generally functioning as electrolytes inside and outside cells. Sodium is an essential nutrient that regulates blood volume, blood pressure, osmotic equilibrium and pH; the minimum physiological requirement for sodium is 500 milligrams per day. Sodium chloride (also known as common salt) is the principal source of sodium in the diet, and is used as seasoning and preservative, such as for pickling and jerky; most of it comes from processed foods. The Dietary Reference Intake for sodium is 1.5 grams per day, but" -"""Alkali metal""","react with carbon dioxide to form the alkali metal carbonate and oxygen gas, which allows them to be used in submarine air purifiers; the presence of water vapour, naturally present in breath, makes the removal of carbon dioxide by potassium superoxide even more efficient. All the stable alkali metals except lithium can form red ozonides (MO) through low-temperature reaction of the powdered anhydrous hydroxide with ozone: the ozonides may be then extracted using liquid ammonia. They slowly decompose at standard conditions to the superoxides and oxygen, and hydrolyse immediately to the hydroxides when in contact with water. Potassium, rubidium, and" -"""Apple Inc.""","CEO. Two months later, Jobs died, marking the end of an era for the company. Apple is well known for its size and revenues. Its worldwide annual revenue totaled $265billion for the 2018 fiscal year. Apple is the world's largest information technology company by revenue and the world's third-largest mobile phone manufacturer after Samsung and Huawei. In August 2018, Apple became the first public U.S. company to be valued at over US$1 trillion. The company employs 123,000 full-time employees and maintains 504 retail stores in 24 countries . It operates the iTunes Store, which is the world's largest music retailer." -"""Apple Inc.""","of $250 billion, officially confirmed by Apple as specifically $256.8 billion a few days later. , Apple is the largest publicly traded corporation in the world by market capitalization. On August 2, 2018, Apple became the first publicly traded U.S. company to reach a $1 trillion market value. Apple is currently ranked #4 on the Fortune 500 rankings of the largest United States corporations by total revenue. Apple has created subsidiaries in low-tax places such as Ireland, the Netherlands, Luxembourg and the British Virgin Islands to cut the taxes it pays around the world. According to ""The New York Times,""" -"""America the Beautiful""","broadcast of the Tiangong-1 launch. The song is often included in songbooks in a wide variety of religious congregations in the United States. Bing Crosby included the song in a medley on his album ""101 Gang Songs"" (1961). In 1976, while the United States celebrated its bicentennial, a soulful version popularized by Ray Charles peaked at number 98 on the US R&B Charts. Ray Charles did this again in 1984 to re-elect Ronald Reagan. Ray Charles did this yet again in Miami, Florida in 1999. Three different renditions of the song have entered the Hot Country Songs charts. The first" -"""Apple Inc.""","A mid-October 2013 announcement revealed that Burberry executive Angela Ahrendts will commence as a senior vice president at Apple in mid-2014. Ahrendts oversaw Burberry's digital strategy for almost eight years and, during her tenure, sales increased to about US$3.2 billion and shares gained more than threefold. Alongside Google vice-president Vint Cerf and AT&T CEO Randall Stephenson, Cook attended a closed-door summit held by President Obama on August 8, 2013, in regard to government surveillance and the Internet in the wake of the Edward Snowden NSA incident. On February 4, 2014, Cook met with Abdullah Gül, the President of Turkey, in" -"""American (word)""","""the United States of North America"" in the first sentence, then ""the said United States"" afterwards; ""the United States of America"" and ""the United States of North America"" derive from ""the United Colonies of America"" and ""the United Colonies of North America"". The Treaty of Peace and Amity of September 5, 1795, between the United States and the Barbary States contains the usages ""the United States of North America"", ""citizens of the United States"", and ""American Citizens"". U.S. President George Washington, in his 1796 ""Farewell Address"", declaimed that ""The name of American, which belongs to you in your national capacity," -"""Achill Island""","for outdoor adventure activities, like surfing, kite-surfing and sea kayaking. Fishing and watersports are also popular. Sailing regattas featuring a local vessel type, the Achill Yawl, have been popular since the 19th century, though most present-day yawls, unlike their traditional working boat ancestors, have been structurally modified to promote greater speed under sail. The island's waters and underwater sites are occasionally visited by scuba divers, though Achill's unpredictable weather generally has precluded a commercially successful recreational diving industry. In 2011, the population was 2,569. The island's population has declined from around 6,000 before the Great Hunger. The table below reports" -"""Achill Island""","these houses since the time of the Famine, however, the families that moved to Dooagh and their descendants, continued to use the village as a 'booley village'. This means that during the summer season, the younger members of the family, teenage boys and girls, would take the cattle to graze on the hillside and they would stay in the houses of the Deserted Village. This custom continued until the 1940s. Boolying was also carried out in other areas of Achill, including Annagh on Croaghaun mountain and in Curraun. At Ailt, Kildownet, you can see the remains of a similar deserted" -"""Alexander Graham Bell""","status as: ""I am not one of those hyphenated Americans who claim allegiance to two countries."" Despite this declaration, Bell has been proudly claimed as a ""native son"" by all three countries he resided in: the United States, Canada, and the United Kingdom. By 1885, a new summer retreat was contemplated. That summer, the Bells had a vacation on Cape Breton Island in Nova Scotia, spending time at the small village of Baddeck. Returning in 1886, Bell started building an estate on a point across from Baddeck, overlooking Bras d'Or Lake. By 1889, a large house, christened ""The Lodge"" was" -Alaska,"Jack London's novel and starring Ethan Hawke, was filmed in and around Haines. Steven Seagal's 1994 ""On Deadly Ground"", starring Michael Caine, was filmed in part at the Worthington Glacier near Valdez. The 1999 John Sayles film ""Limbo"", starring David Strathairn, Mary Elizabeth Mastrantonio, and Kris Kristofferson, was filmed in Juneau. The psychological thriller ""Insomnia"", starring Al Pacino and Robin Williams, was shot in Canada, but was set in Alaska. The 2007 film directed by Sean Penn, ""Into The Wild"", was partially filmed and set in Alaska. The film, which is based on the novel of the same name, follows" -"""Ainu people""","D1b is found throughout the Japanese Archipelago, but with very high frequencies among the Ainu of Hokkaido in the far north, and to a lesser extent among the Ryukyuans in the Ryukyu Islands of the far south. The only places outside Japan in which Y-haplogroup D is common are Tibet in China and the Andaman Islands in the Indian Ocean. A study by Tajima ""et al."" (2004) found two out of a sample of sixteen (or 12.5%) Ainu men to belong to Haplogroup C-M217, which is the most common Y-chromosome haplogroup among the indigenous populations of Siberia and Mongolia. Hammer" -Ashoka,"(""Ashoka Chakra"") from its base was placed onto the center of the National Flag of India. The capital contains four lions (Indian / Asiatic Lions), standing back to back, mounted on a short cylindrical abacus, with a frieze carrying sculptures in high relief of an elephant, a galloping horse, a bull, and a lion, separated by intervening spoked chariot-wheels over a bell-shaped lotus. Carved out of a single block of polished sandstone, the capital was believed to be crowned by a 'Wheel of Dharma' (Dharmachakra popularly known in India as the ""Ashoka Chakra""). The Sarnath pillar bears one of the" -Ashoka,"pre-independence versions of the flag. The Ashoka Chakra can also been seen on the base of the Lion Capital of Ashoka which has been adopted as the National Emblem of India. The Ashoka Chakra was created by Ashoka during his reign. Chakra is a Sanskrit word which also means ""cycle"" or ""self-repeating process"". The process it signifies is the cycle of time—as in how the world changes with time. A few days before India became independent in August 1947, the specially-formed Constituent Assembly decided that the flag of India must be acceptable to all parties and communities. A flag with" -Ashoka,"Wheel of Dharma). The wheel has 24 spokes which represent the 12 Laws of Dependent Origination and the 12 Laws of Dependent Termination. The Ashoka Chakra has been widely inscribed on many relics of the Mauryan Emperor, most prominent among which is the Lion Capital of Sarnath and The Ashoka Pillar. The most visible use of the Ashoka Chakra today is at the centre of the National flag of the Republic of India (adopted on 22 July 1947), where it is rendered in a Navy-blue color on a White background, by replacing the symbol of Charkha (Spinning wheel) of the" -Azerbaijan,"The national animal of Azerbaijan is the Karabakh horse, a mountain-steppe racing and riding horse endemic to Azerbaijan. The Karabakh horse has a reputation for its good temper, speed, elegance and intelligence. It is one of the oldest breeds, with ancestry dating to the ancient world. However, today the horse is an endangered species. Azerbaijan's flora consists of more than 4,500 species of higher plants. Due to the unique climate in Azerbaijan, the flora is much richer in the number of species than the flora of the other republics of the South Caucasus. About 67 percent of the species growing" -"""Ainu people""","both names. On June 6, 2008, the Japanese Diet passed a bipartisan, non-binding resolution calling upon the government to recognize the Ainu people as indigenous to Japan, and urging an end to discrimination against the group. The resolution recognised the Ainu people as ""an indigenous people with a distinct language, religion and culture"". The government immediately followed with a statement acknowledging its recognition, stating, ""The government would like to solemnly accept the historical fact that many Ainu were discriminated against and forced into poverty with the advancement of modernization, despite being legally equal to (Japanese) people."" As a result of" -"""The Ashes""","In England and Wales, the grounds used are: Old Trafford in Manchester (1884), The Oval in Kennington, South London (1884); Lord's in St John's Wood, North London (1884); Trent Bridge at West Bridgford, Nottinghamshire (1899), Headingley in Leeds (1899); Edgbaston in Birmingham (1902); Sophia Gardens in Cardiff, Wales (2009); and the Riverside Ground in Chester-le-Street, County Durham (2013). One Test was also held at Bramall Lane in Sheffield in 1902. Traditionally the final Test of the series is played at the Oval. Sophia Gardens and the Riverside were excluded as Test grounds between the years of 2020 and 2024 and" -"""The Ashes""","1978–79; 1981; 1985; 1989; 1993 and 1997). Australians have made 264 centuries in Ashes Tests, of which 23 have been scores over 200, while Englishmen have scored 212 centuries, of which 10 have been over 200. Australians have taken 10 wickets in a match on 41 occasions, Englishmen 38 times. The series alternates between the United Kingdom and Australia, and within each country each of the usually five matches is held at different grounds. In Australia, the grounds currently used are the Gabba in Brisbane (first staged an England–Australia Test in the 1932–33 season), Adelaide Oval (1884–85), the Melbourne Cricket" -"""The Ashes""","Ground (MCG) (1876–77), and the Sydney Cricket Ground (SCG) (1881–82). A single Test was held at the Brisbane Exhibition Ground in 1928–29. Traditionally, Melbourne hosts the Boxing Day Test and Sydney hosts the New Year Test. Additionally the WACA in Perth (1970–71) hosted its final Ashes Test in 2017–18 and is due to be replaced by Perth Stadium for the 2021–22 series. Cricket Australia proposed that the 2010–11 series consist of six Tests, with the additional game to be played at Bellerive Oval in Hobart. The England and Wales Cricket Board declined and the series was played over five Tests." -"""The Ashes""","therefore will not host an Ashes Test until at least 2027. Trent Bridge is also not due to host an Ashes Test in 2019 or 2023. The popularity and reputation of the cricket series has led to other sports or games, and/or their followers, using the name ""Ashes"" for contests between England and Australia. The best-known and longest-running of these events is the rugby league rivalry between Great Britain and Australia (see rugby league ""Ashes""). Use of the name ""Ashes"" was suggested by the Australian team when rugby league matches between the two countries commenced in 1908. Other examples included" -"""The Ashes""","The Ashes The Ashes is a Test cricket series played between England and Australia. The Ashes are regarded as being held by the team that most recently won the Test series. If the test series is drawn, the team that currently holds the Ashes retains the trophy. The term originated in a satirical obituary published in a British newspaper, ""The Sporting Times"", immediately after Australia's 1882 victory at The Oval, its first Test win on English soil. The obituary stated that English cricket had died, and ""the body will be cremated and the ashes taken to Australia"". The mythical ashes"