diff --git "a/colabs/ithaca_inference.ipynb" "b/colabs/ithaca_inference.ipynb" new file mode 100644--- /dev/null +++ "b/colabs/ithaca_inference.ipynb" @@ -0,0 +1,8171 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "accelerator": "GPU", + "colab": { + "name": "ithaca_inference.ipynb", + "provenance": [], + "collapsed_sections": [] + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + } + }, + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "hnK8uNKnDZlD" + }, + "source": [ + "

Restoring and attributing ancient texts with deep neural networks

\n", + "\n", + "
\n", + "Yannis Assael*, Thea Sommerschield*, Brendan Shillingford, Mahyar Bordbar, John Pavlopoulos, Marita Chatzipanagiotou, Ion Androutsopoulos, Jonathan Prag, Nando de Freitas\n", + "
\n", + "
\n", + "\n", + "Ancient history relies on disciplines such as epigraphy, the study of ancient inscribed texts, for evidence of the recorded past. However, these texts, \"inscriptions\", are often damaged over the centuries, and illegible parts of the text must be restored by specialists, known as epigraphists. This work presents a novel assistive method for providing text restorations using deep neural networks.To the best of our knowledge, Pythia is the first ancient text restoration model that recovers missing characters from a damaged text input. Its architecture is carefully designed to handle long-term context information, and deal efficiently with missing or corrupted character and word representations. To train it, we wrote a non-trivial pipeline to convert PHI, the largest digital corpus of ancient Greek inscriptions, to machine actionable text, which we call PHI-ML. On PHI-ML, Pythia's predictions achieve a 30.1% character error rate, compared to the 57.3% of human epigraphists. Moreover, in 73.5% of cases the ground-truth sequence was among the Top-20 hypotheses of Pythia, which effectively demonstrates the impact of such an assistive method on the field of digital epigraphy, and sets the state-of-the-art in ancient text restoration.\n", + "

\n", + "\n", + "---\n", + "### References\n", + "\n", + "When using any of the source code of this project please cite:\n", + "\n", + "\n", + "\n", + "### License\n", + "\n", + "```\n", + "Copyright 2021 the Ithaca Authors\n", + "\n", + "Licensed under the Apache License, Version 2.0 (the \"License\");\n", + "you may not use this file except in compliance with the License.\n", + "You may obtain a copy of the License at\n", + "\n", + " http://www.apache.org/licenses/LICENSE-2.0\n", + "\n", + "Unless required by applicable law or agreed to in writing, software\n", + "distributed under the License is distributed on an \"AS IS\" BASIS,\n", + "WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n", + "See the License for the specific language governing permissions and\n", + "limitations under the License.\n", + "```\n", + "---" + ] + }, + { + "cell_type": "code", + "metadata": { + "cellView": "form", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 517 + }, + "id": "kYKxUFWaM4Zd", + "outputId": "d7df9eb5-f9a8-4856-847e-32f794234d65" + }, + "source": [ + "#@markdown\n", + "%%html\n", + "\n", + "

Interactive notebook instructions

\n", + "

Χαῖρε (or welcome) to the Interactive Notebook of Ithaca.

\n", + "

Please follow the instructions below to begin restoring and attributing ancient Greek inscriptions.

\n", + "
    \n", + "
  1. \n", + " Execute each of the cells below using Shift+Enter to prepare Ithaca.\n", + "
  2. \n", + "
  3. \n", + " In the Setup section, which you should execute but can skip reading, we:\n", + " \n", + "
  4. \n", + "
  5. \n", + " In the section Use Ithaca for your research, input 50 to 750 characters of ancient Greek text to process with Ithaca.\n", + "
  6. \n", + "
  7. \n", + " After executing the Restoration section, you will see Ithaca's top 20 restoration hypotheses ranked by\n", + " probability, along with the saliency map for Ithaca's top restoration.\n", + "
  8. \n", + "
  9. \n", + " In the Attribution section, one can find:\n", + " \n", + "
  10. \n", + "
\n", + "

If you wish to save your changes or outputs, click FileSave a copy in Drive. This is a read-only notebook, so changes are not saved by default.

" + ], + "execution_count": 1, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/html": [ + "\n", + "

Interactive notebook instructions

\n", + "

Χαῖρε (or welcome) to the Interactive Notebook of Ithaca.

\n", + "

Please follow the instructions below to begin restoring and attributing ancient Greek inscriptions.

\n", + "
    \n", + "
  1. \n", + " Execute each of the cells below using Shift+Enter to prepare Ithaca.\n", + "
  2. \n", + "
  3. \n", + " In the Setup section, which you should execute but can skip reading, we:\n", + " \n", + "
  4. \n", + "
  5. \n", + " In the section Use Ithaca for your research, input 50 to 750 characters of ancient Greek text to process with Ithaca.\n", + "
  6. \n", + "
  7. \n", + " After executing the Restoration section, you will see Ithaca's top 20 restoration hypotheses ranked by\n", + " probability, along with the saliency map for Ithaca's top restoration.\n", + "
  8. \n", + "
  9. \n", + " In the Attribution section, one can find:\n", + " \n", + "
  10. \n", + "
\n", + "

If you wish to save your changes or outputs, click FileSave a copy in Drive. This is a read-only notebook, so changes are not saved by default.

" + ], + "text/plain": [ + "" + ] + }, + "metadata": {} + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "TM-bePoLGzCT" + }, + "source": [ + "# Setup (execute these, but you can skip reading them)" + ] + }, + { + "cell_type": "code", + "metadata": { + "cellView": "form", + "id": "KNSaoKrRKjkh" + }, + "source": [ + "#@title Install Ithaca, download the checkpoint\n", + "!pip install -q git+https://github.com/deepmind/ithaca || echo \"*** FAILED TO INSTALL ITHACA ***\"\n", + "!curl --output checkpoint.pkl https://storage.googleapis.com/ithaca-resources/models/checkpoint_v1.pkl" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "cellView": "form", + "id": "_m_HNL2kDm3W" + }, + "source": [ + "#@title Install geopandas for map visualization\n", + "!pip install -q geopandas" + ], + "execution_count": 3, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "cellView": "form", + "id": "w_3pF892wv6G" + }, + "source": [ + "#@title Imports\n", + "from IPython.core.display import HTML, display\n", + "\n", + "try:\n", + " import ithaca\n", + " import flax\n", + "except ModuleNotFoundError:\n", + " display(HTML('

Failed to import ithaca. Did installation fail above?

'))\n", + " raise\n", + "\n", + "import functools\n", + "\n", + "from flax import linen as nn\n", + "import folium\n", + "import jax\n", + "import jinja2\n", + "import matplotlib.pyplot as plt\n", + "from ml_collections import config_dict\n", + "import numpy as np\n", + "import pickle as pkl\n", + "\n", + "from ithaca.eval import inference\n", + "from ithaca.models.model import Model\n", + "from ithaca.util.alphabet import GreekAlphabet" + ], + "execution_count": 4, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "cwlmZKYGKVPE", + "cellView": "form" + }, + "source": [ + "#@title Configuration and auxiliary functions\n", + "\n", + "class dataset_config:\n", + " date_interval = 10\n", + " date_max = 800\n", + " date_min = -800\n", + "\n", + "def get_subregion_name(id, region_map):\n", + " return region_map['sub']['names_inv'][region_map['sub']['ids_inv'][id]]\n", + "\n", + "def bce_ad(d):\n", + " if d < 0:\n", + " return f'{abs(d)} BCE'\n", + " elif d > 0:\n", + " return f'{abs(d)} AD'\n", + " return 0\n", + "\n", + "\n", + "SALIENCY_SNIPPET_TEMPLATE = jinja2.Template(\"\"\"\n", + "
\n", + " {% for char, score in pairs -%}\n", + " {{ char }}\n", + " {%- endfor %}\n", + "
\n", + "\"\"\")\n", + "\n", + "SALIENCY_TEMPLATE = jinja2.Template(\"\"\"\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "{{body_html|safe}}\n", + "\n", + "\n", + "\"\"\")\n", + "\n", + "\n", + "def generate_saliency(text, saliency, snippet=False):\n", + " \"\"\"Generates saliency visualisation.\"\"\"\n", + " snippet_html = SALIENCY_SNIPPET_TEMPLATE.render(\n", + " pairs=list(zip(text, saliency)))\n", + " if snippet:\n", + " return snippet_html\n", + " return SALIENCY_TEMPLATE.render(body_html=snippet_html)\n" + ], + "execution_count": 5, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "KgTLPcxo7nlq", + "cellView": "form" + }, + "source": [ + "#@title Load and create model\n", + "with open(\"checkpoint.pkl\", \"rb\") as f:\n", + " checkpoint = pkl.load(f)\n", + "\n", + "model_config = config_dict.ConfigDict(checkpoint['model_config'])\n", + "params = jax.device_put(checkpoint['params'])\n", + "\n", + "alphabet = GreekAlphabet()\n", + "alphabet.idx2word = checkpoint['alphabet']['idx2word']\n", + "alphabet.word2idx = checkpoint['alphabet']['word2idx']\n", + "\n", + "vocab_char_size = checkpoint['model_config']['vocab_char_size']\n", + "vocab_word_size = checkpoint['model_config']['vocab_word_size']\n", + "\n", + "region_map = checkpoint['region_map']\n", + "\n", + "forward = functools.partial(Model(**model_config).apply, params)" + ], + "execution_count": 6, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "oTrYS2DhDmcX" + }, + "source": [ + "# Use Ithaca for your research\n", + "\n", + "Input your ancient Greek epigraphic text in the box below to attribute the text to its original place and time of writing, and restore any missing characters. \n", + "\n", + "Mark **missing characters to be skipped** as **dashes (-)**, and **missing characters to be predicted** as **question marks (?)**.\n", + "\n", + "The text should be between 50 and 750 characters long." + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "lqk_dO9zDm6L", + "cellView": "form" + }, + "source": [ + "#@title { run: \"auto\", vertical-output: true }\n", + "text = '\\u1F14\\u03B4\\u03BF\\u03BE\\u03B5\\u03BD \\u03C4\\u1FC6\\u03B9 \\u03B2\\u03BF\\u03C5\\u03BB\\u1FC6\\u03B9 \\u03BA\\u03B1\\u1F76 \\u03C4\\u1FF6\\u03B9 \\u03B4\\u1F75\\u03BC\\u03C9\\u03B9 \\u03BB\\u03C5\\u03C3\\u1F77\\u03C3\\u03C4\\u03C1\\u03B1\\u03C4\\u03BF\\u03C2 \\u03B5\\u1F36\\u03C0\\u03B5- \\u1F10\\u03C0\\u03B5\\u03B9\\u03B4\\u1F74 \\u03B4\\u03B9\\u03BF\\u03C6\\u1F71\\u03BD\\u03B7\\u03C2 \\u1F00\\u03BD\\u1F74\\u03C1 \\u1F00\\u03B3\\u03B1\\u03B8\\u1F78\\u03C2 \\u1F62\\u03BD \\u03B4\\u03B9\\u03B1\\u03C4\\u03B5\\u03BB\\u03B5\\u1FD6 \\u03C0\\u03B5\\u03C1\\u1F76 \\u03B4\\u03B7\\u03BB\\u1F77\\u03BF\\u03C5\\u03C2 \\u03B4\\u03B5\\u03B4\\u1F79\\u03C7\\u03B8\\u03B1\\u03B9 \\u03C4\\u1FF6\\u03B9 ----- \\u03B4\\u03B9\\u03BF\\u03C6\\u1F71\\u03BD\\u03B7\\u03BD \\u03BA\\u03B1\\u03BB\\u03BB\\u03B9-------- --\\u03B7\\u03BD\\u03B1\\u1FD6\\u03BF\\u03BD \\u03C0\\u03C1\\u1F79\\u03BE\\u03B5\\u03BD\\u03BF\\u03BD \\u03B5\\u1F36\\u03BD\\u03B1\\u03B9 \\u03B4--------- \\u03B1\\u1F50\\u03C4\\u1F78\\u03B3 \\u03BA\\u03B1\\u1F76 \\u1F10\\u03BA\\u03B3\\u1F79\\u03BD\\u03BF\\u03C5\\u03C2 \\u03BA-- \\u03B5\\u1F36\\u03BD\\u03B1\\u03B9 \\u03B1\\u1F50\\u03C4\\u03BF\\u1FD6\\u03C2 \\u1F00\\u03C4\\u1F73\\u03BB\\u03B5\\u03B9\\u03B1\\u03BD \\u1F10\\u03BD \\u03B4\\u1F75\\u03BB\\u03C9\\u03B9 \\u03C0\\u1F71\\u03BD\\u03C4\\u03C9\\u03BD \\u03BA\\u03B1\\u1F76 \\u03B3\\u1FC6\\u03C2 \\u03BA\\u03B1\\u1F76 \\u03BF\\u1F30\\u03BA\\u1F77\\u03B1\\u03C2 \\u1F14\\u03B3\\u03BA\\u03C4\\u03B7\\u03C3\\u03B9\\u03BD \\u03BA\\u03B1\\u1F76 \\u03C0\\u03C1\\u1F79\\u03C3\\u03BF\\u03B4\\u03BF\\u03BD \\u03C0\\u03C1\\u1F78\\u03C2 \\u03C4\\u1F74\\u03BC \\u03B2\\u03BF\\u03C5\\u03BB\\u1F74\\u03B3 \\u03BA\\u03B1\\u1F76 \\u03C4\\u1F78\\u03BD \\u03B4\\u1FC6\\u03BC\\u03BF\\u03BD \\u03C0\\u03C1\\u1F7D\\u03C4\\u03BF\\u03B9\\u03C2 \\u03BC\\u03B5\\u03C4\\u1F70 \\u03C4\\u1F70 \\u1F31\\u03B5\\u03C1\\u1F70 \\u03BA\\u03B1\\u1F76 \\u03C4\\u1F70 \\u1F04\\u03BB\\u03BB\\u03B1 \\u1F45\\u03C3\\u03B1 \\u03BA\\u03B1\\u1F76 \\u03C4\\u03BF\\u1FD6\\u03C2 \\u1F04\\u03BB\\u03BB\\u03BF\\u03B9\\u03C2 \\u03C0\\u03C1\\u03BF\\u03BE\\u1F73\\u03BD\\u03BF\\u03B9\\u03C2 \\u03BA\\u03B1\\u1F76 \\u03B5\\u1F50\\u03B5\\u03C1\\u03B3\\u1F73\\u03C4\\u03B1\\u03B9\\u03C2 \\u03C4\\u03BF\\u1FE6 \\u1F31\\u03B5\\u03C1\\u03BF\\u1FE6 \\u03B4\\u1F73\\u03B4\\u03BF\\u03C4\\u03B1\\u03B9 \\u03C0\\u03B1\\u03C1\\u1F70 ---\\u1F77\\u03C9\\u03BD \\u1F00\\u03BD\\u03B1\\u03B3\\u03C1\\u1F71\\u03C8\\u03B1\\u03B9 \\u03B4\\u1F72 \\u03C4\\u1F79\\u03B4\\u03B5 ?????????\\u03B1 \\u03C4\\u1F74\\u03BD \\u03B2\\u03BF\\u03C5\\u03BB\\u1F74\\u03BD \\u03B5\\u1F30\\u03C2 -----------\\u03C1\\u03B9\\u03BF\\u03BD \\u03C4\\u03BF\\u1F7A\\u03C2 -\\u1F72 -----------------------.' #@param {type:\"string\"}\n", + "assert 50 <= len(text) <= 750, \"text should be between 50 and 750 chars long, got \" + str(len(text))" + ], + "execution_count": 7, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "p9EmORGaxn8u" + }, + "source": [ + "# Restoration\n", + "[Back to top](#scrollTo=oTrYS2DhDmcX)\n", + "[Attribution](#scrollTo=M3h8nL22HvTh)\n", + "\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 635 + }, + "id": "5s0YKY6eLKyI", + "cellView": "form", + "outputId": "db8fa31d-9ef6-4a92-ed8d-199adfae230d" + }, + "source": [ + "#@title Restoration hypotheses\n", + "#@markdown Ithaca’s list of Top-20 restoration hypotheses ranked by probability.\n", + "#@markdown\n", + "#@markdown This visualization enables the pairing of Ithaca's suggestions with historians'\n", + "#@markdown contextual knowledge. Ithaca uses non-sequential beam search, where each beam starts\n", + "#@markdown with the prediction scoring the highest confidence, then proceeds iteratively at each timestep to restore\n", + "#@markdown the characters with the highest certainty (probability according to the model).\n", + "#@markdown \n", + "#@markdown **This step may take several minutes.**\n", + "\n", + "restoration_results = inference.restore(\n", + " text=text,\n", + " forward=forward,\n", + " params=params,\n", + " alphabet=alphabet,\n", + " vocab_char_size=vocab_char_size,\n", + " vocab_word_size=vocab_word_size,\n", + ")\n", + "prediction_idx = set(i for i, c in enumerate(restoration_results.input_text) if c == '?')\n", + "\n", + "template = jinja2.Template(\"\"\"\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Scroll sideways to see all the text if it is wider than the screen.\n", + "\n", + "
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " {% for pred in restoration_results.predictions %}\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " {% endfor %}\n", + "
Input text:\n", + " {% for char in restoration_results.input_text -%}\n", + " {%- if loop.index0 in prediction_idx -%}\n", + " {{char}}\n", + " {%- else -%}\n", + " {{char}}\n", + " {%- endif -%}\n", + " {%- endfor %}\n", + "
Hypothesis {{ loop.index }}:{{ \"%.1f%%\"|format(100 * pred.score) }}\n", + " {% for char in pred.text -%}\n", + " {%- if loop.index0 in prediction_idx -%}\n", + " {{char}}\n", + " {%- else -%}\n", + " {{char}}\n", + " {%- endif -%}\n", + " {%- endfor %}\n", + "
\n", + "
\n", + "\n", + "\n", + "\n", + "\"\"\")\n", + "display(HTML(template.render(\n", + " restoration_results=restoration_results,\n", + " prediction_idx=prediction_idx\n", + ")))" + ], + "execution_count": 8, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "/usr/local/lib/python3.7/dist-packages/jax/_src/numpy/lax_numpy.py:5269: UserWarning: 'kind' argument to argsort is ignored.\n", + " warnings.warn(\"'kind' argument to argsort is ignored.\")\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Scroll sideways to see all the text if it is wider than the screen.\n", + "\n", + "
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Input text:\n", + " εδοξεν τηι βουληι και τωι δημωι λυσιστρατος ειπε- επειδη διοφανης ανηρ αγαθος ων διατελει περι δηλιους δεδοχθαι τωι ----- διοφανην καλλι-------- --ηναιον προξενον ειναι δ--------- αυτογ και εκγονους κ-- ειναι αυτοις ατελειαν εν δηλωι παντων και γης και οικιας εγκτησιν και προσοδον προς τημ βουληγ και τον δημον πρωτοις μετα τα ιερα και τα αλλα οσα και τοις αλλοις προξενοις και ευεργεταις του ιερου δεδοται παρα ---ιων αναγραψαι δε τοδε ?????????α την βουλην εις -----------ριον τους -ε -----------------------.\n", + "
Hypothesis 1:66.1%\n", + " εδοξεν τηι βουληι και τωι δημωι λυσιστρατος ειπε- επειδη διοφανης ανηρ αγαθος ων διατελει περι δηλιους δεδοχθαι τωι ----- διοφανην καλλι-------- --ηναιον προξενον ειναι δ--------- αυτογ και εκγονους κ-- ειναι αυτοις ατελειαν εν δηλωι παντων και γης και οικιας εγκτησιν και προσοδον προς τημ βουληγ και τον δημον πρωτοις μετα τα ιερα και τα αλλα οσα και τοις αλλοις προξενοις και ευεργεταις του ιερου δεδοται παρα ---ιων αναγραψαι δε τοδε το ψηφισμα την βουλην εις -----------ριον τους -ε -----------------------.\n", + "
Hypothesis 2:0.1%\n", + " εδοξεν τηι βουληι και τωι δημωι λυσιστρατος ειπε- επειδη διοφανης ανηρ αγαθος ων διατελει περι δηλιους δεδοχθαι τωι ----- διοφανην καλλι-------- --ηναιον προξενον ειναι δ--------- αυτογ και εκγονους κ-- ειναι αυτοις ατελειαν εν δηλωι παντων και γης και οικιας εγκτησιν και προσοδον προς τημ βουληγ και τον δημον πρωτοις μετα τα ιερα και τα αλλα οσα και τοις αλλοις προξενοις και ευεργεταις του ιερου δεδοται παρα ---ιων αναγραψαι δε τοδε το ψημισμα την βουλην εις -----------ριον τους -ε -----------------------.\n", + "
Hypothesis 3:0.1%\n", + " εδοξεν τηι βουληι και τωι δημωι λυσιστρατος ειπε- επειδη διοφανης ανηρ αγαθος ων διατελει περι δηλιους δεδοχθαι τωι ----- διοφανην καλλι-------- --ηναιον προξενον ειναι δ--------- αυτογ και εκγονους κ-- ειναι αυτοις ατελειαν εν δηλωι παντων και γης και οικιας εγκτησιν και προσοδον προς τημ βουληγ και τον δημον πρωτοις μετα τα ιερα και τα αλλα οσα και τοις αλλοις προξενοις και ευεργεταις του ιερου δεδοται παρα ---ιων αναγραψαι δε τοδε το ψηφιζμα την βουλην εις -----------ριον τους -ε -----------------------.\n", + "
Hypothesis 4:0.1%\n", + " εδοξεν τηι βουληι και τωι δημωι λυσιστρατος ειπε- επειδη διοφανης ανηρ αγαθος ων διατελει περι δηλιους δεδοχθαι τωι ----- διοφανην καλλι-------- --ηναιον προξενον ειναι δ--------- αυτογ και εκγονους κ-- ειναι αυτοις ατελειαν εν δηλωι παντων και γης και οικιας εγκτησιν και προσοδον προς τημ βουληγ και τον δημον πρωτοις μετα τα ιερα και τα αλλα οσα και τοις αλλοις προξενοις και ευεργεταις του ιερου δεδοται παρα ---ιων αναγραψαι δε τοδε τογψηφισμα την βουλην εις -----------ριον τους -ε -----------------------.\n", + "
Hypothesis 5:0.1%\n", + " εδοξεν τηι βουληι και τωι δημωι λυσιστρατος ειπε- επειδη διοφανης ανηρ αγαθος ων διατελει περι δηλιους δεδοχθαι τωι ----- διοφανην καλλι-------- --ηναιον προξενον ειναι δ--------- αυτογ και εκγονους κ-- ειναι αυτοις ατελειαν εν δηλωι παντων και γης και οικιας εγκτησιν και προσοδον προς τημ βουληγ και τον δημον πρωτοις μετα τα ιερα και τα αλλα οσα και τοις αλλοις προξενοις και ευεργεταις του ιερου δεδοται παρα ---ιων αναγραψαι δε τοδε τοδψηφισμα την βουλην εις -----------ριον τους -ε -----------------------.\n", + "
Hypothesis 6:0.1%\n", + " εδοξεν τηι βουληι και τωι δημωι λυσιστρατος ειπε- επειδη διοφανης ανηρ αγαθος ων διατελει περι δηλιους δεδοχθαι τωι ----- διοφανην καλλι-------- --ηναιον προξενον ειναι δ--------- αυτογ και εκγονους κ-- ειναι αυτοις ατελειαν εν δηλωι παντων και γης και οικιας εγκτησιν και προσοδον προς τημ βουληγ και τον δημον πρωτοις μετα τα ιερα και τα αλλα οσα και τοις αλλοις προξενοις και ευεργεταις του ιερου δεδοται παρα ---ιων αναγραψαι δε τοδε ψη ψηφισμα την βουλην εις -----------ριον τους -ε -----------------------.\n", + "
Hypothesis 7:0.1%\n", + " εδοξεν τηι βουληι και τωι δημωι λυσιστρατος ειπε- επειδη διοφανης ανηρ αγαθος ων διατελει περι δηλιους δεδοχθαι τωι ----- διοφανην καλλι-------- --ηναιον προξενον ειναι δ--------- αυτογ και εκγονους κ-- ειναι αυτοις ατελειαν εν δηλωι παντων και γης και οικιας εγκτησιν και προσοδον προς τημ βουληγ και τον δημον πρωτοις μετα τα ιερα και τα αλλα οσα και τοις αλλοις προξενοις και ευεργεταις του ιερου δεδοται παρα ---ιων αναγραψαι δε τοδε τοξψηφισμα την βουλην εις -----------ριον τους -ε -----------------------.\n", + "
Hypothesis 8:0.1%\n", + " εδοξεν τηι βουληι και τωι δημωι λυσιστρατος ειπε- επειδη δι��φανης ανηρ αγαθος ων διατελει περι δηλιους δεδοχθαι τωι ----- διοφανην καλλι-------- --ηναιον προξενον ειναι δ--------- αυτογ και εκγονους κ-- ειναι αυτοις ατελειαν εν δηλωι παντων και γης και οικιας εγκτησιν και προσοδον προς τημ βουληγ και τον δημον πρωτοις μετα τα ιερα και τα αλλα οσα και τοις αλλοις προξενοις και ευεργεταις του ιερου δεδοται παρα ---ιων αναγραψαι δε τοδε τψ ψηφισμα την βουλην εις -----------ριον τους -ε -----------------------.\n", + "
Hypothesis 9:0.1%\n", + " εδοξεν τηι βουληι και τωι δημωι λυσιστρατος ειπε- επειδη διοφανης ανηρ αγαθος ων διατελει περι δηλιους δεδοχθαι τωι ----- διοφανην καλλι-------- --ηναιον προξενον ειναι δ--------- αυτογ και εκγονους κ-- ειναι αυτοις ατελειαν εν δηλωι παντων και γης και οικιας εγκτησιν και προσοδον προς τημ βουληγ και τον δημον πρωτοις μετα τα ιερα και τα αλλα οσα και τοις αλλοις προξενοις και ευεργεταις του ιερου δεδοται παρα ---ιων αναγραψαι δε τοδε τοφψηφισμα την βουλην εις -----------ριον τους -ε -----------------------.\n", + "
Hypothesis 10:0.1%\n", + " εδοξεν τηι βουληι και τωι δημωι λυσιστρατος ειπε- επειδη διοφανης ανηρ αγαθος ων διατελει περι δηλιους δεδοχθαι τωι ----- διοφανην καλλι-------- --ηναιον προξενον ειναι δ--------- αυτογ και εκγονους κ-- ειναι αυτοις ατελειαν εν δηλωι παντων και γης και οικιας εγκτησιν και προσοδον προς τημ βουληγ και τον δημον πρωτοις μετα τα ιερα και τα αλλα οσα και τοις αλλοις προξενοις και ευεργεταις του ιερου δεδοται παρα ---ιων αναγραψαι δε τοδε τοψψηφισμα την βουλην εις -----------ριον τους -ε -----------------------.\n", + "
Hypothesis 11:0.1%\n", + " εδοξεν τηι βουληι και τωι δημωι λυσιστρατος ειπε- επειδη διοφανης ανηρ αγαθος ων διατελει περι δηλιους δεδοχθαι τωι ----- διοφανην καλλι-------- --ηναιον προξενον ειναι δ--------- αυτογ και εκγονους κ-- ειναι αυτοις ατελειαν εν δηλωι παντων και γης και οικιας εγκτησιν και προσοδον προς τημ βουληγ και τον δημον πρωτοις μετα τα ιερα και τα αλλα οσα και τοις αλλοις προξενοις και ευεργεταις του ιερου δεδοται παρα ---ιων αναγραψαι δε τοδε τοϙψηφισμα την βουλην εις -----------ριον τους -ε -----------------------.\n", + "
Hypothesis 12:0.1%\n", + " εδοξεν τηι βουληι και τωι δημωι λυσιστρατος ειπε- επειδη διοφανης ανηρ αγαθος ων διατελει περι δηλιους δεδοχθαι τωι ----- διοφανην καλλι-------- --ηναιον προξενον ειναι δ--------- αυτογ και εκγονους κ-- ειναι αυτοις ατελειαν εν δηλωι παντων και γης και οικιας εγκτησιν και προσοδον προς τημ βουληγ και τον δημον πρωτοις μετα τα ιερα και τα αλλα οσα και τοις αλλοις προξενοις και ευεργεταις του ιερου δεδοται παρα ---ιων αναγραψαι δε τοδε το.ψηφισμα την βουλην εις -----------ριον τους -ε -----------------------.\n", + "
Hypothesis 13:0.1%\n", + " εδοξεν τηι βουληι και τωι δημωι λυσιστρατος ειπε- επειδη διοφανης ανηρ αγαθος ων διατελει περι δηλιους δεδοχθαι τωι ----- διοφανην καλλι-------- --ηναιον προξενον ειναι δ--------- αυτογ και εκγονους κ-- ειναι αυτοις ατελειαν εν δηλωι παντων και γης και οικιας εγκτησιν και προσοδον προς τημ βουληγ και τον δημον πρωτοις μετα τα ιερα και τα αλλα οσα και τοις αλλοις προξενοις και ευεργεταις του ιερου δεδοται παρα ---ιων αναγραψαι δε τοδε τϙ ψηφισμα την βουλην εις -----------ριον τους -ε -----------------------.\n", + "
Hypothesis 14:0.1%\n", + " εδοξεν τηι βουληι και τωι δημωι λυσιστρατος ειπε- επειδη διοφανης ανηρ αγαθος ων διατελει περι δηλιους δεδοχθαι τωι ----- διοφανην καλλι-------- --ηναιον προξενον ειναι δ--------- αυτογ και εκγονους κ-- ειναι αυτοις ατελειαν εν δηλωι παντων και γης και οικιας εγκτησιν και προσοδον προς τημ βουληγ και τον δημον πρωτοις μετα τα ιερα και τα αλλα οσα και τοις αλλοις προξενοις και ευεργεταις του ιερου δεδοται παρα ---ιων αναγραψαι δε τοδε τοϛψηφισμα την βουλην εις -----------ριον τους -ε -----------------------.\n", + "
Hypothesis 15:0.1%\n", + " εδοξεν τηι βουληι και τωι δημωι λυσιστρατος ειπε- επειδη διοφανης ανηρ αγαθος ων διατελει περι δηλιους δεδοχθαι τωι ----- διοφανην καλλι-------- --ηναιον προξενον ειναι δ--------- αυτογ και εκγονους κ-- ειναι αυτοις ατελειαν εν δηλωι παντων και γης και οικιας εγκτησιν και προσοδον προς τημ βουληγ και τον δημον πρωτοις μετα τα ιερα και τα αλλα οσα και τοις αλλοις προξενοις και ευεργεταις του ιερου δεδοται παρα ---ιων αναγραψαι δε τοδε το ψηφιξμα την βουλην εις -----------ριον τους -ε -----------------------.\n", + "
Hypothesis 16:0.1%\n", + " εδοξεν τηι βουληι και τωι δημωι λυσιστρατος ειπε- επειδη διοφανης ανηρ αγαθος ων διατελει περι δηλιους δεδοχθαι τωι ----- διοφανην καλλι-------- --ηναιον προξενον ειναι δ--------- αυτογ και εκγονους κ-- ειναι αυτοις ατελειαν εν δηλωι παντων και γης και οικιας εγκτησιν και προσοδον προς τημ βουληγ και τον δημον πρωτοις μετα τα ιερα και τα αλλα οσα και τοις αλλοις προξενοις και ευεργεταις του ιερου δεδοται παρα ---ιων αναγραψαι δε τοδε το0ψηφισμα την βουλην εις -----------ριον τους -ε -----------------------.\n", + "
Hypothesis 17:0.1%\n", + " εδοξεν τηι βουληι και τωι δημωι λυσιστρατος ειπε- επειδη διοφανης ανηρ αγαθος ων διατελει περι δηλιους δεδοχθαι τωι ----- διοφανην καλλι-------- --ηναιον προξενον ειναι δ--------- αυτογ και εκγονους κ-- ειναι αυτοις ατελειαν εν δηλωι παντων και γης και οικιας εγκτησιν και προσοδον προς τημ βουληγ και τον δημον πρωτοις μετα τα ιερα και τα αλλα οσα και τοις αλλοις προξενοις και ευεργεταις του ιερου δεδοται παρα ---ιων αναγραψαι δε τοδε τομψηφισμα την βουλην εις -----------ριον τους -ε -----------------------.\n", + "
Hypothesis 18:0.1%\n", + " εδοξεν τηι βουληι και τωι δημωι λυσιστρατος ειπε- επειδη διοφανης ανηρ αγαθος ων διατελει περι δηλιους δεδοχθαι τωι ----- διοφανην καλλι-------- --ηναιον προξενον ειναι δ--------- αυτογ και εκγονους κ-- ειναι αυτοις ατελειαν εν δηλωι παντων και γης και οικιας εγκτησιν και προσοδον προς τημ βουληγ και τον δημον πρωτοις μετα τα ιερα και τα αλλα οσα και τοις αλλοις προξενοις και ευεργεταις του ιερου δεδοται παρα ---ιων αναγραψαι δε τοδε τολψηφισμα την βουλην εις -----------ριον τους -ε -----------------------.\n", + "
Hypothesis 19:0.1%\n", + " εδοξεν τηι βουληι και τωι δημωι λυσιστρατος ειπε- επειδη διοφανης ανηρ αγαθος ων διατελει περι δηλιους δεδοχθαι τωι ----- διοφανην καλλι-------- --ηναιον προξενον ειναι δ--------- αυτογ και εκγονους κ-- ειναι αυτοις ατελειαν εν δηλωι παντων και γης και οικιας εγκτησιν και προσοδον προς τημ βουληγ και τον δημον πρωτοις μετα τα ιερα και τα αλλα οσα και τοις αλλοις προξενοις και ευεργεταις του ιερου δεδοται παρα ---ιων αναγραψαι δε τοδε το ψηφισγα την βουλην εις -----------ριον τους -ε -----------------------.\n", + "
Hypothesis 20:0.1%\n", + " εδοξεν τηι βουληι και τωι δημωι λυσιστρατος ειπε- επειδη διοφανης ανηρ αγαθος ων διατελει περι δηλιους δεδοχθαι τωι ----- διοφανην καλλι-------- --ηναιον προξενον ειναι δ--------- αυτογ και εκγονους κ-- ειναι αυτοις ατελειαν εν δηλωι παντων και γης και οικιας εγκτησιν και προσοδον προς τημ βουληγ και τον δημον πρωτοις μετα τα ιερα και τα αλλα οσα και τοις αλλοις προξενοις και ευεργεταις του ιερου δεδοται παρα ---ιων αναγραψαι δε τοδε τϛ ψηφισμα την βουλην εις -----------ριον τους -ε -----------------------.\n", + "
\n", + "
\n", + "\n", + "\n", + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 313 + }, + "id": "cZBrZtfRPNco", + "cellView": "form", + "outputId": "6579c238-e474-4302-e0b4-6004af50a658" + }, + "source": [ + "#@title Restoration saliency map\n", + "#@markdown Saliency maps for each character predicted in Ithaca’s top restoration hypothesis. Highlighted in purple shading are the unique input text features which contributed most to the prediction.\n", + "\n", + "prediction_idx = set(i for i, c in enumerate(restoration_results.input_text) if c == '?')\n", + "\n", + "template = jinja2.Template(\"\"\"\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Scroll sideways to see all the text if it is wider than the screen.\n", + "\n", + "
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " {% for sal in restoration_results.prediction_saliency %}\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " {% endfor %}\n", + "
Input text:\n", + " {% for char in restoration_results.input_text -%}\n", + " {%- if loop.index0 in prediction_idx -%}\n", + " {{char}}\n", + " {%- else -%}\n", + " {{char}}\n", + " {%- endif -%}\n", + " {%- endfor %}\n", + "
Step {{ loop.index }}:{{ sal.text[sal.restored_idx].replace(\" \", \"⎵\") }}\n", + " {% for char in sal.text -%}\n", + " {%- if loop.index0 == sal.restored_idx -%}\n", + " {{char}}\n", + " {%- elif loop.index0 in prediction_idx and char == \"-\" -%}\n", + " {{char}}\n", + " {%- else -%}\n", + " {%- set sal = sal.saliency[loop.index0] -%}\n", + " {{char}}\n", + " {%- endif -%}\n", + " {%- endfor %}\n", + "
\n", + "
\n", + "\n", + "\n", + "\n", + "\"\"\")\n", + "display(HTML(template.render(\n", + " restoration_results=restoration_results,\n", + " prediction_idx=prediction_idx)))" + ], + "execution_count": 9, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Scroll sideways to see all the text if it is wider than the screen.\n", + "\n", + "
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Input text:\n", + " εδοξεν τηι βουληι και τωι δημωι λυσιστρατος ειπε- επειδη διοφανης ανηρ αγαθος ων διατελει περι δηλιους δεδοχθαι τωι ----- διοφανην καλλι-------- --ηναιον προξενον ειναι δ--------- αυτογ και εκγονους κ-- ειναι αυτοις ατελειαν εν δηλωι παντων και γης και οικιας εγκτησιν και προσοδον προς τημ βουληγ και τον δημον πρωτοις μετα τα ιερα και τα αλλα οσα και τοις αλλοις προξενοις και ευεργεταις του ιερου δεδοται παρα ---ιων αναγραψαι δε τοδε ?????????α την βουλην εις -----------ριον τους -ε -----------------------.\n", + "
Step 1:ψ\n", + " εδοξεν τηι βουληι και τωι δημωι λυσιστρατος ειπε- επειδη διοφανης ανηρ αγαθος ων διατελει περι δηλιους δεδοχθαι τωι ----- διοφανην καλλι-------- --ηναιον προξενον ειναι δ--------- αυτογ και εκγονους κ-- ειναι αυτοις ατελειαν εν δηλωι παντων και γης και οικιας εγκτησιν και προσοδον προς τημ βουληγ και τον δημον πρωτοις μετα τα ιερα και τα αλλα οσα και τοις αλλοις προξενοις και ευεργεταις του ιερου δεδοται παρα ---ιων αναγραψαι δε τοδε ---ψ-----α την βουλην εις -----------ριον τους -ε -----------------------.\n", + "
Step 2:τ\n", + " εδοξεν τηι βουληι και τωι δημωι λυσιστρατος ειπε- επειδη διοφανης ανηρ αγαθος ων διατελει περι δηλιους δεδοχθαι τωι ----- διοφανην καλλι-------- --ηναιον προξενον ειναι δ--------- αυτογ και εκγονους κ-- ειναι αυτοις ατελειαν εν δηλωι παντων και γης και οικιας εγκτησιν και προσοδον προς τημ βουληγ και τον δημον πρωτοις μετα τα ιερα και τα αλλα οσα και τοις αλλοις προξενοις και ευεργεταις του ιερου δεδοται παρα ---ιων αναγραψαι δε τοδε τ--ψ-----α την βουλην εις -----------ριον τους -ε -----------------------.\n", + "
Step 3:φ\n", + " εδοξεν τηι βουληι και τωι δημωι λυσιστρατος ειπε- επειδη διοφανης ανηρ αγαθος ων διατελει περι δηλιους δεδοχθαι τωι ----- διοφανην καλλι-------- --ηναιον προξενον ειναι δ--------- αυτογ και εκγονους κ-- ειναι αυτοις ατελειαν εν δηλωι παντων και γης και οικιας εγκτησιν και προσοδον προς τημ βουληγ και τον δημον πρωτοις μετα τα ιερα και τα αλλα οσα και τοις αλλοις προξενοις και ευεργεταις του ιερου δεδοται παρα ---ιων αναγραψαι δε τοδε τ--ψ-φ---α την βουλην εις -----------ριον τους -ε -----------------------.\n", + "
Step 4:η\n", + " εδοξεν τηι βουληι και τωι δημωι λυσιστρατος ειπε- επειδη διοφανης ανηρ αγαθος ων διατελει περι δηλιους δεδοχθαι τωι ----- διοφανην καλλι-------- --ηναιον προξενον ειναι δ--------- αυτογ και εκγονους κ-- ειναι αυτοις ατελειαν εν δηλωι παντων και γης και οικιας εγκτησιν και προσοδον προς τημ βουληγ και τον δημον πρωτοις μετα τα ιερα και τα αλλα οσα και τοις αλλοις προξενοις και ευεργεταις του ιερου δεδοται παρα ---ιων αναγραψαι δε τοδε τ--ψηφ---α την βουλην εις -----------ριον τους -ε -----------------------.\n", + "
Step 5:μ\n", + " εδοξεν τηι βουληι και τωι δημωι λυσιστρατος ειπε- επειδη διοφανης ανηρ αγαθος ων διατελει περι δηλιους δεδοχθαι τωι ----- διοφανην καλλι-------- --ηναιον προξενον ειναι δ--------- αυτογ και εκγονους κ-- ειναι αυτοις ατελειαν εν δηλωι παντων και γης και οικιας εγκτησιν και προσοδον προς τημ βουληγ και τον δημον πρωτοις μετα τα ιερα και τα αλλα οσα και τοις αλλοις προξενοις και ευεργεταις του ιερου δεδοται παρα ---ιων αναγραψαι δε τοδε τ--ψηφ--μα την βουλην εις -----------ριον τους -ε -----------------------.\n", + "
Step 6:σ\n", + " εδοξεν τηι βουληι και τωι δημω�� λυσιστρατος ειπε- επειδη διοφανης ανηρ αγαθος ων διατελει περι δηλιους δεδοχθαι τωι ----- διοφανην καλλι-------- --ηναιον προξενον ειναι δ--------- αυτογ και εκγονους κ-- ειναι αυτοις ατελειαν εν δηλωι παντων και γης και οικιας εγκτησιν και προσοδον προς τημ βουληγ και τον δημον πρωτοις μετα τα ιερα και τα αλλα οσα και τοις αλλοις προξενοις και ευεργεταις του ιερου δεδοται παρα ---ιων αναγραψαι δε τοδε τ--ψηφ-σμα την βουλην εις -----------ριον τους -ε -----------------------.\n", + "
Step 7:ο\n", + " εδοξεν τηι βουληι και τωι δημωι λυσιστρατος ειπε- επειδη διοφανης ανηρ αγαθος ων διατελει περι δηλιους δεδοχθαι τωι ----- διοφανην καλλι-------- --ηναιον προξενον ειναι δ--------- αυτογ και εκγονους κ-- ειναι αυτοις ατελειαν εν δηλωι παντων και γης και οικιας εγκτησιν και προσοδον προς τημ βουληγ και τον δημον πρωτοις μετα τα ιερα και τα αλλα οσα και τοις αλλοις προξενοις και ευεργεταις του ιερου δεδοται παρα ---ιων αναγραψαι δε τοδε το-ψηφ-σμα την βουλην εις -----------ριον τους -ε -----------------------.\n", + "
Step 8:ι\n", + " εδοξεν τηι βουληι και τωι δημωι λυσιστρατος ειπε- επειδη διοφανης ανηρ αγαθος ων διατελει περι δηλιους δεδοχθαι τωι ----- διοφανην καλλι-------- --ηναιον προξενον ειναι δ--------- αυτογ και εκγονους κ-- ειναι αυτοις ατελειαν εν δηλωι παντων και γης και οικιας εγκτησιν και προσοδον προς τημ βουληγ και τον δημον πρωτοις μετα τα ιερα και τα αλλα οσα και τοις αλλοις προξενοις και ευεργεταις του ιερου δεδοται παρα ---ιων αναγραψαι δε τοδε το-ψηφισμα την βουλην εις -----------ριον τους -ε -----------------------.\n", + "
Step 9:\n", + " εδοξεν τηι βουληι και τωι δημωι λυσιστρατος ειπε- επειδη διοφανης ανηρ αγαθος ων διατελει περι δηλιους δεδοχθαι τωι ----- διοφανην καλλι-------- --ηναιον προξενον ειναι δ--------- αυτογ και εκγονους κ-- ειναι αυτοις ατελειαν εν δηλωι παντων και γης και οικιας εγκτησιν και προσοδον προς τημ βουληγ και τον δημον πρωτοις μετα τα ιερα και τα αλλα οσα και τοις αλλοις προξενοις και ευεργεταις του ιερου δεδοται παρα ---ιων αναγραψαι δε τοδε το ψηφισμα την βουλην εις -----------ριον τους -ε -----------------------.\n", + "
\n", + "
\n", + "\n", + "\n", + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {} + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "M3h8nL22HvTh" + }, + "source": [ + "# Attribution\n", + "[Back to top](#scrollTo=oTrYS2DhDmcX)\n", + "[Restoration](#scrollTo=p9EmORGaxn8u)" + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 489 + }, + "id": "6HKz8BJS9cxo", + "cellView": "form", + "outputId": "c19e2e01-d5aa-4a71-a7a2-65f3e23a5e0b" + }, + "source": [ + "#@title Geographical attribution\n", + "#@markdown Bar chart and map distribution for Ithaca's top 10 geographical attribution hypotheses, ranked by probability among 84 regions of the ancient world. The circle size on the map is directly proportional to the prediction’s probability.\n", + "\n", + "attribution_results = inference.attribute(\n", + " text=text,\n", + " forward=forward,\n", + " params=params,\n", + " alphabet=alphabet,\n", + " vocab_char_size=vocab_char_size,\n", + " vocab_word_size=vocab_word_size,\n", + " region_map=region_map\n", + ")\n", + "\n", + "locations = []\n", + "scores = []\n", + "for l in attribution_results.locations[:10]:\n", + " locations.append(get_subregion_name(l.location_id, region_map))\n", + " scores.append(l.score)\n", + "\n", + "# Generate figure\n", + "fig, ax = plt.subplots(figsize=(5, 5), dpi=100)\n", + "y_pos = range(len(locations))\n", + "ax.barh(y_pos, scores, color='#5da2e2')\n", + "\n", + "# x-axis\n", + "xticks = np.arange(0, 1.1, 0.25)\n", + "xticks_str = list(map(lambda x: f'{int(x*100)}%', xticks))\n", + "ax.set_xticks(xticks)\n", + "ax.set_xticklabels(xticks_str, fontsize=12)\n", + "\n", + "# y-axis\n", + "ax.set_yticks(y_pos)\n", + "ax.set_yticklabels(locations, fontsize=12)\n", + "ax.invert_yaxis()\n", + "ax.set_xlabel('Probability', fontsize=14)\n", + "ax.set_title('Geographical attribution')\n", + "\n", + "plt.show()" + ], + "execution_count": 10, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "code", + "metadata": { + "cellView": "form", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 859 + }, + "id": "hMUYjrT3Ev5z", + "outputId": "28785985-a98e-4626-f377-a434743db5f6" + }, + "source": [ + "#@title Geographical attribution map\n", + "locations_ll = {\n", + " 474: {'latitude': 35.20052306, 'longitude': 25.00709816},\n", + " 899: {'latitude': 39.6, 'longitude': 22.2},\n", + " 1012: {'latitude': 38.84330517, 'longitude': 27.01538508},\n", + " 1090: {'latitude': 34.0725, 'longitude': -5.5548},\n", + " 1146: {'latitude': 38.5, 'longitude': 57.5},\n", + " 1147: {'latitude': 36.607058, 'longitude': 2.1918495},\n", + " 1272: {'latitude': 38.482289, 'longitude': 22.501169},\n", + " 1324: {'latitude': 34.5, 'longitude': 46.5},\n", + " 1377: {'latitude': 41.4407791, 'longitude': 33.25503893},\n", + " 1381: {'latitude': 36.52285575, 'longitude': 3.6414695},\n", + " 1399: {'latitude': 30.5, 'longitude': 51.5},\n", + " 1417: {'latitude': 32.5, 'longitude': 62.5},\n", + " 1421: {'latitude': 41.833638, 'longitude': 44.672277},\n", + " 1434: {'latitude': 38.75, 'longitude': 22.25},\n", + " 1443: {'latitude': 36.833333, 'longitude': 25.9},\n", + " 1445: {'latitude': 52.5, 'longitude': -2.5},\n", + " 1453: {'latitude': 29.5, 'longitude': 45.5},\n", + " 1463: {'latitude': 39.54648402, 'longitude': 20.78770214},\n", + " 1474: {'latitude': 32.5, 'longitude': 7.5},\n", + " 1477: {'latitude': 37.5, 'longitude': 37.5},\n", + " 1480: {'latitude': 32.5, 'longitude': 48.5},\n", + " 1482: {'latitude': 39.61497321, 'longitude': 27.87494434},\n", + " 1485: {'latitude': 41.25, 'longitude': 21.75},\n", + " 1497: {'latitude': 39.5, 'longitude': 40.5},\n", + " 1502: {'latitude': 51.6054836, 'longitude': 5.795502625},\n", + " 1535: {'latitude': 32.5, 'longitude': 44.5},\n", + " 1547: {'latitude': 36.683333000000005, 'longitude': 24.416667},\n", + " 1554: {'latitude': 39.16075203, 'longitude': 26.25450897},\n", + " 1558: {'latitude': 36.76782566, 'longitude': 66.90106879999999},\n", + " 1574: {'latitude': 47.727498, 'longitude': 10.326578},\n", + " 1578: {'latitude': 33.17039367, 'longitude': 10.90091267},\n", + " 1585: {'latitude': 36.92625341, 'longitude': 25.41590803},\n", + " 1589: {'latitude': 32.5, 'longitude': 12.5},\n", + " 1590: {'latitude': 36.526222, 'longitude': 37.9555335},\n", + " 1595: {'latitude': 40.18650564, 'longitude': -3.736305805},\n", + " 1596: {'latitude': 40.683333000000005, 'longitude': 24.65},\n", + " 1607: {'latitude': 39.25, 'longitude': 35.75},\n", + " 1617: {'latitude': 36.74330537, 'longitude': 29.0371858},\n", + " 1621: {'latitude': 38.099043, 'longitude': 22.4314905},\n", + " 1624: {'latitude': 38.414, 'longitude': 26.053},\n", + " 1626: {'latitude': 37.5, 'longitude': 39.5},\n", + " 1627: {'latitude': 36.195597, 'longitude': 27.964125},\n", + " 1631: {'latitude': 39.813107, 'longitude': 26.164143},\n", + " 1632: {'latitude': 37.61781583, 'longitude': 22.17000731},\n", + " 1633: {'latitude': 32.49965333, 'longitude': 20.87174333},\n", + " 1635: {'latitude': 46.70543722, 'longitude': 1.013706367},\n", + " 1639: {'latitude': 38.22219067, 'longitude': 24.02740133},\n", + " 1640: {'latitude': 38.041101, 'longitude': 23.537401000000003},\n", + " 1641: {'latitude': 42.5, 'longitude': 22.5},\n", + " 1643: {'latitude': 37.6334625, 'longitude': 23.16015635},\n", + " 1646: {'latitude': 36.844, 'longitude': 27.17},\n", + " 1647: {'latitude': 37.891781, 'longitude': 21.375091},\n", + " 1651: {'latitude': 36.990721, 'longitude': 30.98638},\n", + " 1653: {'latitude': 38.53, 'longitude': 23.87},\n", + " 1654: {'latitude': 38.32544739, 'longitude': 28.2612252},\n", + " 1656: {'latitude': 39.13121333, 'longitude': 27.18453033},\n", + " 1657: {'latitude': 31.25, 'longitude': 34.75},\n", + " 1658: {'latitude': 37.0557778, 'longitude': 21.9809211},\n", + " 1659: {'latitude': 38.763022, 'longitude': 21.06285},\n", + " 1661: {'latitude': 37.25, 'longitude': 32.75},\n", + " 1662: {'latitude': 36.25, 'longitude': 33.25},\n", + " 1663: {'latitude': 39.75, 'longitude': 32.75},\n", + " 1665: {'latitude': 37.73, 'longitude': 26.84},\n", + " 1666: {'latitude': 40.7561925, 'longitude': 31.585856500000002},\n", + " 1667: {'latitude': 37.80840845, 'longitude': 22.86776751},\n", + " 1668: {'latitude': 32.5, 'longitude': 37.5},\n", + " 1669: {'latitude': 36.513532500000004, 'longitude': 29.129310999999998},\n", + " 1671: {'latitude': 37.25, 'longitude': 30.75},\n", + " 1672: {'latitude': 37.393333, 'longitude': 25.271110999999998},\n", + " 1673: {'latitude': 45.5, 'longitude': 22.5},\n", + " 1674: {'latitude': 39.13121333, 'longitude': 27.18453033},\n", + " 1675: {'latitude': 44.5, 'longitude': 28.5},\n", + " 1676: {'latitude': 33.25, 'longitude': 35.25},\n", + " 1679: {'latitude': 38.75, 'longitude': 29.75},\n", + " 1681: {'latitude': 34.94752576, 'longitude': 33.17932161},\n", + " 1682: {'latitude': 37.042901, 'longitude': 27.420201000000002},\n", + " 1684: {'latitude': 46.691895, 'longitude': 31.901597},\n", + " 1686: {'latitude': 37.67337489, 'longitude': 13.90469368},\n", + " 1687: {'latitude': 40.288041, 'longitude': 23.129407999999998},\n", + " 1688: {'latitude': 38.06312675, 'longitude': 27.062852000000003},\n", + " 1689: {'latitude': 41.891775, 'longitude': 12.486137},\n", + " 1691: {'latitude': 38.254405299999995, 'longitude': 23.1821091},\n", + " 1694: {'latitude': 19.21140877, 'longitude': 30.56732963},\n", + " 1700: {'latitude': 37.97278669, 'longitude': 23.99374594}}\n", + "\n", + "# Compute map center\n", + "center_location = np.zeros(2)\n", + "for l in attribution_results.locations:\n", + " if l.location_id not in locations_ll:\n", + " continue\n", + " row = locations_ll[l.location_id]\n", + " center_location += np.array([row['latitude'], row['longitude']]) * l.score\n", + " \n", + "# Create map\n", + "folium_map = folium.Map(location = center_location, \n", + " tiles=\"Stamen Water Color\", \n", + " zoom_start = 6)\n", + "\n", + "# Create markers\n", + "for l in attribution_results.locations:\n", + " if l.location_id not in locations_ll:\n", + " continue\n", + " if l.score < 0.01:\n", + " continue\n", + " row = locations_ll[l.location_id]\n", + " folium.Circle(location=[row['latitude'], row['longitude']], \n", + " radius=l.score * 50000,\n", + " fill=True,\n", + " popup= f\"{l.score * 100:.1f}% - {get_subregion_name(l.location_id, region_map)}\", \n", + " fill_color=\"darkred\",\n", + " color=\"darkred\",\n", + " ).add_to(folium_map)\n", + "folium_map" + ], + "execution_count": 11, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/html": [ + "
Make this Notebook Trusted to load map: File -> Trust Notebook
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "execution_count": 11 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Mv70mQ8mEFTq" + }, + "source": [ + "Map tiles by Stamen Design (unmodified), under CC BY 3.0. Data by OpenStreetMap, under CC BY SA." + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 85 + }, + "id": "DNZsu_du92iK", + "cellView": "form", + "outputId": "f7a5500b-4fc9-4c8e-b597-71e8abd5b2e3" + }, + "source": [ + "#@title Geographical attribution saliency map\n", + "#@markdown Saliency map shows unique input text features contributed the most to Ithaca's top geographical\n", + "#@markdown attribution hypothesis, where deeper purple indicates a greater contribution.\n", + "display(HTML(generate_saliency(\n", + " text=attribution_results.input_text,\n", + " saliency=attribution_results.location_saliency, snippet=False)))" + ], + "execution_count": 12, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
\n", + " εδοξεν τηι βουληι και τωι δημωι λυσιστρατος ειπε- επειδη διοφανης ανηρ αγαθος ων διατελει περι δηλιους δεδοχθαι τωι ----- διοφανην καλλι-------- --ηναιον προξενον ειναι δ--------- αυτογ και εκγονους κ-- ειναι αυτοις ατελειαν εν δηλωι παντων και γης και οικιας εγκτησιν και προσοδον προς τημ βουληγ και τον δημον πρωτοις μετα τα ιερα και τα αλλα οσα και τοις αλλοις προξενοις και ευεργεταις του ιερου δεδοται παρα ---ιων αναγραψαι δε τοδε ?????????α την βουλην εις -----------ριον τους -ε -----------------------.\n", + "
\n", + "\n", + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "metadata": { + "cellView": "form", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 473 + }, + "id": "KhgrneU792dU", + "outputId": "ae5c9878-5701-49ab-a0da-f04171e4de88" + }, + "source": [ + "#@title Chronological attribution\n", + "#@markdown Ithaca’s chronological attribution hypotheses, visualized as a categorical distribution over decades, in yellow, between 800 BCE and 800 CE. This visualisation enables the handling of date intervals more effectively and aids the interpretability of the hypotheses.\n", + "\n", + "# Compute scores\n", + "date_pred_y = np.array(attribution_results.year_scores)\n", + "date_pred_x = np.arange(\n", + " dataset_config.date_min + dataset_config.date_interval / 2,\n", + " dataset_config.date_max + dataset_config.date_interval / 2,\n", + " dataset_config.date_interval)\n", + "date_pred_argmax = date_pred_y.argmax(\n", + ") * dataset_config.date_interval + dataset_config.date_min + dataset_config.date_interval // 2\n", + "date_pred_avg = np.dot(date_pred_y, date_pred_x)\n", + "\n", + "# Plot figure\n", + "fig = plt.figure(figsize=(10, 5), dpi=100)\n", + "\n", + "plt.bar(date_pred_x, date_pred_y, color='#f2c852', width=10., label='Ithaca distribution')\n", + "plt.axvline(x=date_pred_avg, color='#67ac5b', linewidth=2., label='Ithaca average')\n", + "\n", + "\n", + "plt.ylabel('Probability', fontsize=14)\n", + "yticks = np.arange(0, 1.1, 0.1)\n", + "yticks_str = list(map(lambda x: f'{int(x*100)}%', yticks))\n", + "plt.yticks(yticks, yticks_str, fontsize=12, rotation=0)\n", + "plt.ylim(0, int((date_pred_y.max()+0.1)*10)/10)\n", + "\n", + "plt.xlabel('Date', fontsize=14)\n", + "xticks = list(range(dataset_config.date_min, dataset_config.date_max + 1, 25))\n", + "xticks_str = list(map(bce_ad, xticks))\n", + "plt.xticks(xticks, xticks_str, fontsize=12, rotation=0)\n", + "plt.xlim(int(date_pred_avg - 100), int(date_pred_avg + 100))\n", + "plt.legend(loc='upper right', fontsize=12)\n", + "\n", + "plt.show()" + ], + "execution_count": 13, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "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1997773ZY489KrSNHTuW3XffnWbNmrHFFltw3HHH8f7771foM3DgQHbeeWf+9re/0b9/f5o3b86ll14KwP/8z//w3e9+t+w1d+/enauuuoqVK1dW2f8tt9xCt27daNasGX369OF///d/GThwIAMHDqzQb/ny5VxxxRVsv/32FBcX07lzZ37yk5+wfPnyar1Pm7LG9V2AJEmSVFeGDx/O/PnzmTp1Kvfff3/BPuPHj2fJkiUMHz6ciOC6665j6NChzJ49m8022wyAqVOnMnv2bE455RQ6dOjAzJkzueOOO5g5cyYvvfRSWRCcP38+ffr0YdGiRZxxxhn06tWLefPmMWnSJJYuXUqTJk2YPXs2kydP5uijj6Zr16589NFH3H777QwYMIB//OMfbLPNNmt8Tbfddhs77bQThx12GI0bN+axxx7jrLPOYtWqVfzwhz8E4Nhjj+Xkk0/mlVdeYc899yxb99133+Wll17il7/8ZVnbz372M0aOHMkxxxzD6aefzieffMJ///d/079/f/7+97/Ttm3bsr6fffYZgwcP5rjjjuPEE09k6623BnLXErZs2ZILLriAli1b8swzz3D55ZdTUlJSYV+33XYbZ599Nvvuuy/nn38+c+fO5YgjjmDzzTdn2223Leu3atUqDjvsMJ5//nnOOOMMevfuzeuvv86NN97IW2+9xeTJk6t1/DdVhjZJkqQG6pqnR1KyfFF9l1GmdXFbLj3gqlptY++996ZHjx5MnTqVE088sWCf9957j1mzZrH55psD0LNnTw4//HCefPJJhgwZAsBZZ53FhRdeWGG9vn37cvzxx/P888+z7777AnDJJZfw4YcfMm3atAqjWVdeeSUpJQB22WUX3nrrLRo1+s9JbieddBK9evXirrvuYuTIkWt8TX/+859p1qxZ2fOzzz6bgw8+mBtuuKEstB1++OEUFxfz4IMPVghtEyZMICI45phjgFyIu+KKK7j66qvLRs0Ahg4dyre+9S1uvfXWCu0ffvghv/3tbxk+fHiFmsaPH1+hpjPPPJMzzzyTW2+9lauvvpri4mJWrFjByJEj2XPPPXnmmWdo3DgXPXbddVeGDRtWIbSNHz+eP/3pT/z5z39mn332KWvfeeedOfPMM3nhhRfo16/fGt+nTZmnR0qSJDVQJcsXsejLhZn52VAB8thjjy0LbEBZAJs9e3ZZW/lAsmzZMj799FP69u0LwKuvvgrkRocmT57MoYceWuX0Q6BsNK64uLgssK1cuZLPPvuMli1b0rNnz7JtrUn5WhYvXsynn37KgAEDmD17NosXLwYoO+VywoQJZWER4MEHH6Rv37584xvfAODhhx9m1apVHHPMMXz66adlPx06dGCHHXbg2WefrbDv4uJiTjnllDXWtGTJEj799FP23Xdfli5dyptvvgnA9OnT+eyzz/jBD35QFtgATjjhhArvP8DEiRPp3bs3vXr1qlDX/vvvD1ClrobGkTZJkqQGqnVx27V32oA2VD2lAaZUaYBYuHBhWduCBQsYPXo0DzzwAB9//HGF/qVB6ZNPPqGkpISdd955jftbtWoVN998M7feeitz5sypcN3XlltuudZ6//rXv3LFFVfw4osvVpkIZPHixbRp0wbIhdHJkyfz4osv0q9fP9555x3+9re/cdNNN5X1nzVrFikldthhh4L7Kj09tFSnTp1o0qRJlX4zZ87ksssu45lnnqGkpKRKTZAb1QPYfvvtKyxv3LgxXbp0qdA2a9Ys/vnPf9KuXbuCdVU+Bg2NoU2SJKmBqu2piBuroqKigu3lR6iOOeYYXnjhBX784x+z22670bJlS1atWsXBBx/MqlWrarS/a665hpEjR3Lqqady1VVXscUWW9CoUSN+9KMfrXVb77zzDgcccAC9evXihhtuoHPnzjRp0oQpU6Zw4403Vlj/0EMPpXnz5kyYMIF+/foxYcIEGjVqxNFHH13WZ9WqVUQEf/jDHwq+Dy1btqzwvPyIWqlFixYxYMAAWrduzZVXXkn37t1p2rQpr776Kj/96U9r/P6U1rXLLrtwww03FFzeuXPnGm9zU2JokyRJ0ial0GyRNbFw4UKefvppRo8ezeWXX17WPmvWrAr92rVrR+vWrXnjjTfWuL1Jkyax3377cdddd1VoX7RoEVtttdUa133sscdYvnw5jz76aIURwkKnC7Zo0YIhQ4YwceJEbrjhBh588EH23XffChOddO/enZQSXbt2pUePHmvc9+o899xzfPbZZzz88MP079+/rH3OnDkV+m233XYAvP322+y3335l7V9//TVz585l1113rVDXjBkzOOCAA2p9/DZFXtMmSZKkTUqLFi2AXChaF6UjUOVH3oAKpxkCNGrUiCOOOILHHnuM6dOnV9lO6fpFRUVVtjVx4kTmzZu3TrUsXryYu+++u2D/Y489lvnz53PnnXcyY8YMjj322ArLhw4dSlFREaNHj65SU0qp4C0NqlPTihUruPXWWyv022OPPdhyyy0ZM2YMX3/9dVn7uHHjKpyKCrmRzXnz5jFmzJgq+/vyyy/54osv1lrXpsyRNkmSJG1Sdt99dwDOPfdcBg0aRFFREccdd1y112/dujX9+/fnuuuu46uvvqJTp0489dRTVUaSIHfq41NPPcWAAQPKpqr/4IMPmDhxIs8//zxt27ZlyJAhXHnllZxyyin069eP119/nXHjxq32vmrlHXTQQTRp0oRDDz2U4cOH8/nnnzNmzBjat2/PBx98UKX/IYccQqtWrbjooosoKiriyCOPrLC8e/fuXH311VxyySVl0++3atWKOXPm8Mgjj3DGGWdw0UUXrbGmfv36sfnmm/P973+fc889l4jg/vvvrxICmzRpwqhRozjnnHPYf//9OeaYY5g7dy733HMP3bt3rzCidtJJJzFhwgTOPPNMnn32Wb7zne+wcuVK3nzzTSZMmMCTTz5ZcLKXhsLQJkmSpE3K0KFDOeecc3jggQcYO3YsKaUahTbITUF/zjnncMstt5BS4qCDDuIPf/hDlXuqderUiWnTpjFy5EjGjRtHSUkJnTp1YvDgwTRv3hyASy+9lC+++ILx48fz4IMP8u1vf5snnniCiy++eK119OzZk0mTJnHZZZdx0UUX0aFDB0aMGEG7du049dRTq/Rv2rQphx12GOPGjePAAw+kffv2VfpcfPHF9OjRgxtvvJHRo0cDuWvGDjroIA477LC11rTlllvy+OOPc+GFF3LZZZex+eabc+KJJ3LAAQcwaNCgCn3PPvtsUkr86le/4qKLLuKb3/wmjz76KOeeey5NmzYt69eoUSMmT57MjTfeyH333ccjjzxC8+bN6datG+edd946n8q5qYjKiVg1ExGtgcWLFy+mdevW9V2OJGkD+unkE1i8MmhTlLis47L6LqdMq70equ8SlDHLli1jzpw5dO3atcJ/KEv1YdWqVbRr146hQ4cWPB0yy9b2WSopKSmdzbNNSqmkSod15DVtkiRJktaLZcuWVTlt8r777mPBggUMHDiwforaCHl6pCRJkqT14qWXXuL888/n6KOPZsstt+TVV1/lrrvuYuedd65wKwKtmaFNkiRJ0nrRpUsXOnfuzK9//WsWLFjAFltswcknn8zPf/7zgjftVmGGNkmSJEnrRZcuXXj00Ufru4yNnte0SZIkSVKGGdokSZIkKcMMbZIkSZKUYYY2SZIkScowQ5skSZIkZZihTZIkSZIyzNAmSZIkSRlmaJMkSVKDMHfuXCKC66+/vr5LqRMRwahRo8qe33PPPUQEc+fOXe/7HjZsGF26dCl7vqHf21GjRhERG2RfWWBokyRJ0karNKhMnz69rG3KlCkVwoxWb+nSpYwaNYrnnnuuvkupIsu1bWiN67sASZIk1Z8l046s7xIAaLXXQ3W2rSlTpnDLLbc0uOB20kkncdxxx1FcXFztdZYuXcro0aMBGDhwYLXXGzNmDKtWrappiTWyptouu+wyLr744vW6/ywxtEmSJEmbgKKiIoqKitbrPr744gtatGjBZptttl73szaNGzemceOGE2U8PVKSJEmbjGHDhnHLLbcAuWu+Sn8qu+OOO+jevTvFxcXsueeevPLKKxWWv/baawwbNoxu3brRtGlTOnTowKmnnspnn31WZVvz5s3jtNNOY5tttqG4uJiuXbsyYsQIVqxYAcCCBQu46KKL2GWXXWjZsiWtW7dm8ODBzJgxo1qvafny5Zx//vm0a9eOVq1acdhhh/Hvf/+7Sr9C17RNnz6dQYMGsdVWW9GsWTO6du3KqaeeCuSuQ2vXrh0Ao0ePLnuvSkcohw0bRsuWLXnnnXc45JBDaNWqFSeccELZsvLXtJV34403st1229GsWTMGDBjAG2+8UWH5wIEDC47qld/m2mordE3b119/zVVXXVV2XLt06cKll17K8uXLK/Tr0qULQ4YM4fnnn6dPnz40bdqUbt26cd999xV8PVnQcOKpJEmSNnnDhw9n/vz5TJ06lfvvv79gn/Hjx7NkyRKGDx9ORHDdddcxdOhQZs+eXTaCNHXqVGbPns0pp5xChw4dmDlzJnfccQczZ87kpZdeKgsM8+fPp0+fPixatIgzzjiDXr16MW/ePCZNmsTSpUtp0qQJs2fPZvLkyRx99NF07dqVjz76iNtvv50BAwbwj3/8g2222WaNr+n0009n7Nix/Nd//Rf9+vXjmWee4bvf/e5a34uPP/6Ygw46iHbt2nHxxRfTtm1b5s6dy8MPPwxAu3btuO222xgxYgTf+973GDp0KAC77rpr2Ta+/vprBg0axD777MP1119P8+bN17jP++67jyVLlvDDH/6QZcuWcfPNN7P//vvz+uuvs/XWW6+15lLVqa2y008/nXvvvZejjjqKCy+8kGnTpnHttdfyz3/+k0ceeaRC37fffpujjjqK0047je9///v87ne/Y9iwYey+++7stNNO1a5zQzG0SZIkaZOx995706NHD6ZOncqJJ55YsM97773HrFmz2HzzzQHo2bMnhx9+OE8++SRDhgwB4KyzzuLCCy+ssF7fvn05/vjjef7559l3330BuOSSS/jwww+ZNm0ae+yxR1nfK6+8kpQSALvssgtvvfUWjRr95yS3k046iV69enHXXXcxcuTI1b6eGTNmMHbsWM4666yyEcQf/vCHnHDCCbz22mtrfC9eeOEFFi5cyFNPPVWhtquvvhqAFi1acNRRRzFixAh23XXXgu/X8uXLOfroo7n22mvXuK9Sb7/9NrNmzaJTp04AHHzwwey111784he/4IYbbqjWNqpbW3kzZszg3nvv5fTTT2fMmDFA7hi2b9+e66+/nmeffZb99tuvrP+//vUv/vKXv5Qdx2OOOYbOnTtz9913Z3J2UU+PlCRJUoNy7LHHlgU2oOw/3GfPnl3W1qxZs7Lfly1bxqeffkrfvn0BePXVVwFYtWoVkydP5tBDD60QikqVjsYVFxeXBbaVK1fy2Wef0bJlS3r27Fm2rdWZMmUKAOeee26F9h/96EdrfZ1t27YF4PHHH+err75aa//VGTFiRLX7HnHEEWWBDaBPnz7stddeZa9jfSnd/gUXXFChvTR4P/HEExXad9xxx7LjDrmRvZ49e1b4G8gSQ5skSZIalG984xsVnpcGuIULF5a1LViwgPPOO4+tt96aZs2a0a5dO7p27QrA4sWLAfjkk08oKSlh5513XuP+Vq1axY033sgOO+xAcXExW221Fe3ateO1114r29bqvPvuuzRq1Iju3btXaO/Zs+daX+eAAQM48sgjGT16NFtttRWHH344d999d5VrvNakcePGbLvtttXuv8MOO1Rp69Gjx3q/d1zp+7T99ttXaO/QoQNt27bl3XffrdBe+W8Acn8H5f8GssTQJkmSpAZldTMslp7OCLnT5caMGcOZZ57Jww8/zFNPPcUf//hHgBpPdX/NNddwwQUX0L9/f8aOHcuTTz7J1KlT2WmnndbrtPkRwaRJk3jxxRc5++yzmTdvHqeeeiq77747n3/+ebW2UX6UsC7rKmTlypXrbduVVedvIEu8pk2SJEmblOr+h/vqLFy4kKeffprRo0dz+eWXl7XPmjWrQr927drRunXrKrMjVjZp0iT2228/7rrrrgrtixYtYquttlrjuttttx2rVq3inXfeqTC69q9//au6L4e+ffvSt29ffvaznzF+/HhOOOEEHnjgAU4//fRav1eVVX6PAN56660KM01uvvnmBU9DrDwaVpPaSt+nWbNm0bt377L2jz76iEWLFrHddttVe1tZ5EibJEmSNiktWrQAcqFoXZSOwlQedbnpppsqPG/UqBFHHHEEjz32GNOnT6+yndL1i4qKqmxr4sSJzJs3b621DB48GIBf//rXa6ylkIULF1bZ72677QZQdopk6WyQ6/peVTZ58uQKr+vll19m2rRpZa8DoHv37rz55pt88sknZW0zZszgr3/9a4Vt1aS2Qw45BKj6vpROflKd2TazzJE2SZIkbVJ23313IDd5x6BBgygqKuK4446r9vqtW7emf//+XHfddXz11Vd06tSJp556ijlz5lTpe8011/DUU08xYMAAzjjjDHr37s0HH3zAxIkTef7552nbti1Dhgzhyiuv5JRTTqFfv368/vrrjBs3jm7duq21lt12243jjz+eW2+9lcWLF9OvXz+efvpp3n777bWue++993Lrrbfyve99j+7du7NkyRLGjBlD69aty0JOs2bN2HHHHXnwwQfp0aMHW2yxBTvvvPNar9Nbne2335599tmHESNGsHz5cm666Sa23HJLfvKTn5T1OfXUU7nhhhsYNGgQp512Gh9//DG//e1v2WmnnSgpKSnrV5PavvnNb/L973+fO+64g0WLFjFgwABefvll7r33Xo444ogKM0dujAxtkiRJ2qQMHTqUc845hwceeICxY8eSUqpRaIPcvdzOOeccbrnlFlJKHHTQQfzhD3+ock+1Tp06MW3aNEaOHMm4ceMoKSmhU6dODB48uGyk6NJLL+WLL75g/PjxPPjgg3z729/miSee4OKLL65WLb/73e9o164d48aNY/Lkyey///488cQTdO7ceY3rlQaXBx54gI8++og2bdrQp08fxo0bVzapCsCdd97JOeecw/nnn8+KFSu44oor1jm0nXzyyTRq1IibbrqJjz/+mD59+vCb3/yGjh07lvXp3bs3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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 85 + }, + "id": "pfFAAnO492aq", + "cellView": "form", + "outputId": "ab06436b-e0ff-4482-8267-e23de1983e2b" + }, + "source": [ + "#@title Chronological attribution saliency map\n", + "#@markdown Saliency map shows which unique input text features contributed the most to Ithaca’s top chronological attribution hypothesis.\n", + "display(HTML(generate_saliency(\n", + " text=attribution_results.input_text,\n", + " saliency=attribution_results.date_saliency)))" + ], + "execution_count": 14, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
\n", + " εδοξεν τηι βουληι και τωι δημωι λυσιστρατος ειπε- επειδη διοφανης ανηρ αγαθος ων διατελει περι δηλιους δεδοχθαι τωι ----- διοφανην καλλι-------- --ηναιον προξενον ειναι δ--------- αυτογ και εκγονους κ-- ειναι αυτοις ατελειαν εν δηλωι παντων και γης και οικιας εγκτησιν και προσοδον προς τημ βουληγ και τον δημον πρωτοις μετα τα ιερα και τα αλλα οσα και τοις αλλοις προξενοις και ευεργεταις του ιερου δεδοται παρα ---ιων αναγραψαι δε τοδε ?????????α την βουλην εις -----------ριον τους -ε -----------------------.\n", + "
\n", + "\n", + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {} + } + ] + } + ] +}