{
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "v5hvo8QWN-a9"
      },
      "source": [
        "# Installing Whisper\n",
        "\n",
        "The commands below will install the Python packages needed to use Whisper models and evaluate the transcription results."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 1,
      "metadata": {
        "id": "ZsJUxc0aRsAf"
      },
      "outputs": [],
      "source": [
        "! pip install git+https://github.com/openai/whisper.git"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 2,
      "metadata": {
        "id": "3CqtR2Fi5-vP"
      },
      "outputs": [],
      "source": [
        "import io\n",
        "import os\n",
        "import numpy as np\n",
        "\n",
        "try:\n",
        "    import tensorflow  # required in Colab to avoid protobuf compatibility issues\n",
        "except ImportError:\n",
        "    pass\n",
        "\n",
        "import torch\n",
        "import pandas as pd\n",
        "import urllib\n",
        "import tarfile\n",
        "import whisper\n",
        "import torchaudio\n",
        "\n",
        "from scipy.io import wavfile\n",
        "from tqdm.notebook import tqdm\n",
        "\n",
        "\n",
        "pd.options.display.max_rows = 100\n",
        "pd.options.display.max_colwidth = 1000\n",
        "DEVICE = \"cuda\" if torch.cuda.is_available() else \"cpu\""
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "1IMEkgyagYto"
      },
      "source": [
        "# Loading the Fleurs dataset\n",
        "\n",
        "Select the language of the Fleur dataset to download. Please note that the transcription and translation performance varies widely depending on the language. Appendix D.2 in the paper contains the performance breakdown by language."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 3,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 49,
          "referenced_widgets": [
            "9cf878888ef0434b9cf5883cb29a4d3f",
            "26369a54159f4f46bb7ba89d0c66f6cb",
            "c78c2f0f2945498a93257ce00a5ee9a7"
          ]
        },
        "id": "L4lPK5106Of2",
        "outputId": "f4b56c91-41fb-4dc3-d905-3d05ce944f87"
      },
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "Dropdown(description='Language:', index=39, options=(('Select language', None), ('----------', None), ('Afrika…"
            ],
            "application/vnd.jupyter.widget-view+json": {
              "version_major": 2,
              "version_minor": 0,
              "model_id": "9cf878888ef0434b9cf5883cb29a4d3f"
            }
          },
          "metadata": {}
        }
      ],
      "source": [
        "import ipywidgets as widgets\n",
        "\n",
        "languages = {\"af_za\": \"Afrikaans\", \"am_et\": \"Amharic\", \"ar_eg\": \"Arabic\", \"as_in\": \"Assamese\", \"az_az\": \"Azerbaijani\", \"be_by\": \"Belarusian\", \"bg_bg\": \"Bulgarian\", \"bn_in\": \"Bengali\", \"bs_ba\": \"Bosnian\", \"ca_es\": \"Catalan\", \"cmn_hans_cn\": \"Chinese\", \"cs_cz\": \"Czech\", \"cy_gb\": \"Welsh\", \"da_dk\": \"Danish\", \"de_de\": \"German\", \"el_gr\": \"Greek\", \"en_us\": \"English\", \"es_419\": \"Spanish\", \"et_ee\": \"Estonian\", \"fa_ir\": \"Persian\", \"fi_fi\": \"Finnish\", \"fil_ph\": \"Tagalog\", \"fr_fr\": \"French\", \"gl_es\": \"Galician\", \"gu_in\": \"Gujarati\", \"ha_ng\": \"Hausa\", \"he_il\": \"Hebrew\", \"hi_in\": \"Hindi\", \"hr_hr\": \"Croatian\", \"hu_hu\": \"Hungarian\", \"hy_am\": \"Armenian\", \"id_id\": \"Indonesian\", \"is_is\": \"Icelandic\", \"it_it\": \"Italian\", \"ja_jp\": \"Japanese\", \"jv_id\": \"Javanese\", \"ka_ge\": \"Georgian\", \"kk_kz\": \"Kazakh\", \"km_kh\": \"Khmer\", \"kn_in\": \"Kannada\", \"ko_kr\": \"Korean\", \"lb_lu\": \"Luxembourgish\", \"ln_cd\": \"Lingala\", \"lo_la\": \"Lao\", \"lt_lt\": \"Lithuanian\", \"lv_lv\": \"Latvian\", \"mi_nz\": \"Maori\", \"mk_mk\": \"Macedonian\", \"ml_in\": \"Malayalam\", \"mn_mn\": \"Mongolian\", \"mr_in\": \"Marathi\", \"ms_my\": \"Malay\", \"mt_mt\": \"Maltese\", \"my_mm\": \"Myanmar\", \"nb_no\": \"Norwegian\", \"ne_np\": \"Nepali\", \"nl_nl\": \"Dutch\", \"oc_fr\": \"Occitan\", \"pa_in\": \"Punjabi\", \"pl_pl\": \"Polish\", \"ps_af\": \"Pashto\", \"pt_br\": \"Portuguese\", \"ro_ro\": \"Romanian\", \"ru_ru\": \"Russian\", \"sd_in\": \"Sindhi\", \"sk_sk\": \"Slovak\", \"sl_si\": \"Slovenian\", \"sn_zw\": \"Shona\", \"so_so\": \"Somali\", \"sr_rs\": \"Serbian\", \"sv_se\": \"Swedish\", \"sw_ke\": \"Swahili\", \"ta_in\": \"Tamil\", \"te_in\": \"Telugu\", \"tg_tj\": \"Tajik\", \"th_th\": \"Thai\", \"tr_tr\": \"Turkish\", \"uk_ua\": \"Ukrainian\", \"ur_pk\": \"Urdu\", \"uz_uz\": \"Uzbek\", \"vi_vn\": \"Vietnamese\", \"yo_ng\": \"Yoruba\"}\n",
        "selection = widgets.Dropdown(\n",
        "    options=[(\"Select language\", None), (\"----------\", None)] + sorted([(f\"{v} ({k})\", k) for k, v in languages.items()]),\n",
        "    value=\"ko_kr\",\n",
        "    description='Language:',\n",
        "    disabled=False,\n",
        ")\n",
        "\n",
        "selection"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 4,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "4eihI6oK6Of2",
        "outputId": "064878a2-569c-4914-e92c-94280ce13dad"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Selected language: Korean (ko_kr)\n"
          ]
        }
      ],
      "source": [
        "lang = selection.value\n",
        "language = languages[lang]\n",
        "\n",
        "assert lang is not None, \"Please select a language\"\n",
        "print(f\"Selected language: {language} ({lang})\")"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 5,
      "metadata": {
        "id": "GuCCB2KYOJCE"
      },
      "outputs": [],
      "source": [
        "def download(url: str, target_path: str):\n",
        "    with urllib.request.urlopen(url) as source, open(target_path, \"wb\") as output:\n",
        "        with tqdm(total=int(source.info().get(\"Content-Length\")), ncols=80, unit='iB', unit_scale=True, unit_divisor=1024) as loop:\n",
        "            while True:\n",
        "                buffer = source.read(8192)\n",
        "                if not buffer:\n",
        "                    break\n",
        "\n",
        "                output.write(buffer)\n",
        "                loop.update(len(buffer))\n",
        "\n",
        "\n",
        "class Fleurs(torch.utils.data.Dataset):\n",
        "    \"\"\"\n",
        "    A simple class to wrap Fleurs and subsample a portion of the dataset as needed.\n",
        "    \"\"\"\n",
        "    def __init__(self, lang, split=\"test\", subsample_rate=1, device=DEVICE):\n",
        "        url = f\"https://storage.googleapis.com/xtreme_translations/FLEURS102/{lang}.tar.gz\"\n",
        "        tar_path = os.path.expanduser(f\"~/.cache/fleurs/{lang}.tgz\")\n",
        "        os.makedirs(os.path.dirname(tar_path), exist_ok=True)\n",
        "\n",
        "        if not os.path.exists(tar_path):\n",
        "            download(url, tar_path)\n",
        "\n",
        "        all_audio = {}\n",
        "        with tarfile.open(tar_path, \"r:gz\") as tar:\n",
        "            for member in tar.getmembers():\n",
        "                name = member.name\n",
        "                if name.endswith(f\"{split}.tsv\"):\n",
        "                    labels = pd.read_table(tar.extractfile(member), names=(\"id\", \"file_name\", \"raw_transcription\", \"transcription\", \"_\", \"num_samples\", \"gender\"))\n",
        "\n",
        "                if f\"/{split}/\" in name and name.endswith(\".wav\"):\n",
        "                    audio_bytes = tar.extractfile(member).read()\n",
        "                    all_audio[os.path.basename(name)] = wavfile.read(io.BytesIO(audio_bytes))[1]                    \n",
        "\n",
        "        self.labels = labels.to_dict(\"records\")[::subsample_rate]\n",
        "        self.all_audio = all_audio\n",
        "        self.device = device\n",
        "\n",
        "    def __len__(self):\n",
        "        return len(self.labels)\n",
        "\n",
        "    def __getitem__(self, item):\n",
        "        record = self.labels[item]\n",
        "        audio = torch.from_numpy(self.all_audio[record[\"file_name\"]].copy())\n",
        "        text = record[\"transcription\"]\n",
        "        \n",
        "        return (audio, text)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 6,
      "metadata": {
        "id": "-YcRU5jqNqo2"
      },
      "outputs": [],
      "source": [
        "dataset = Fleurs(lang, subsample_rate=10)  # subsample 10% of the dataset for a quick demo"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "0ljocCNuUAde"
      },
      "source": [
        "# Running inference on the dataset using a medium Whisper model\n",
        "\n",
        "The following will take a few minutes to transcribe and translate utterances in the dataset."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 7,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "_PokfNJtOYNu",
        "outputId": "5ace74d4-ff20-4830-fe78-958881ec3905"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Model is multilingual and has 762,321,920 parameters.\n"
          ]
        }
      ],
      "source": [
        "model = whisper.load_model(\"medium\")\n",
        "print(\n",
        "    f\"Model is {'multilingual' if model.is_multilingual else 'English-only'} \"\n",
        "    f\"and has {sum(np.prod(p.shape) for p in model.parameters()):,} parameters.\"\n",
        ")"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 8,
      "metadata": {
        "id": "F74Yfr696Of5"
      },
      "outputs": [],
      "source": [
        "options = dict(language=language, beam_size=5, best_of=5)\n",
        "transcribe_options = dict(task=\"transcribe\", **options)\n",
        "translate_options = dict(task=\"translate\", **options)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 9,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 49,
          "referenced_widgets": [
            "8cdc3b2a910748e98327462922dc008a",
            "32bd3d1217f24bb8a5e2f853633098d8",
            "dd93a997785a41568a8aba9cf5c0d83a",
            "956741460c504706aa097058dbc6eecf",
            "e4024c536d594ea2be54f471eacd485f",
            "f8eb2f7fc8c1400bb8dc351ea7fa6cfa",
            "76677587cf184477bafcc9d5459b5767",
            "50a75e807f144f438032a8fcdb9cdbe0",
            "dafffcc9b35c4bca95f19079d7c8be60",
            "73a0e8df4bb940bc8feae14e0a66d9c5",
            "ccdbe78adf2f4011946e290c81bd1a51"
          ]
        },
        "id": "7OWTn_KvNk59",
        "outputId": "7fc0731d-fba1-42da-8145-387d280f4bb1",
        "scrolled": false
      },
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "  0%|          | 0/39 [00:00<?, ?it/s]"
            ],
            "application/vnd.jupyter.widget-view+json": {
              "version_major": 2,
              "version_minor": 0,
              "model_id": "8cdc3b2a910748e98327462922dc008a"
            }
          },
          "metadata": {}
        }
      ],
      "source": [
        "references = []\n",
        "transcriptions = []\n",
        "translations = []\n",
        "\n",
        "for audio, text in tqdm(dataset):\n",
        "    transcription = model.transcribe(audio, **transcribe_options)[\"text\"]\n",
        "    translation = model.transcribe(audio, **translate_options)[\"text\"]\n",
        "    \n",
        "    transcriptions.append(transcription)\n",
        "    translations.append(translation)\n",
        "    references.append(text)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 10,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 1000
        },
        "id": "4nTyynELQ42j",
        "outputId": "c883e334-67bd-462a-89d9-8c011fe42a09",
        "scrolled": false
      },
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "                                                                                                                                       reference  \\\n",
              "0                                                                                  재입국 충격은 신혼 단계가 없기 때문에 문화 충격보다 빠르게 발생하며 더 오래 지속하고 더 극심할 수 있습니다   \n",
              "1                                                                                         불행히도 운전자의 행동이 100% 확실하다고 예측할 수 없기 때문에 교통 흐름을 연구하기란 어렵다   \n",
              "2                                                                                         합금은 기본적으로 금속 두 개 이상의 혼합물이다 주기율표 상에 원소가 많이 있다는 것을 잊지 마라   \n",
              "3                                                                                          홍콩 섬은 홍콩 영토에 홍콩이라는 이름을 부여한 곳이자 많은 관광객들이 주안점으로 여기는 곳이다   \n",
              "4                                                                                남자들을 단호히 거절하고 자신의 입장을 고수하는 것을 두려워하지 말라문화적 차이든 아니든 희롱은 간과될 수 없다!   \n",
              "5                                                                                        좀 더 작은 섬의 대부분은 독립 국가이거나 프랑스와 관련이 있고 호화로운 비치 리조트로 알려져 있다   \n",
              "6                                                                           사실 이게 존재한다는 사실을 아는 사람이 있다고 해도 찾는 것조차 쉽지 않습니다 일단 동굴 안에 들어가면 완전한 고립입니다   \n",
              "7                                                                                                     원단이 너무 뜨거워지지 않도록 주의하세요원단이 수축하거나 그을릴 수 있습니다   \n",
              "8                                                                           도널드 트럼프 미국 대통령은 늦은 일요일 시간대에 대변인을 통해 발표한 성명에서 미군이 시리아에서 철수할 것이라고 발표했다   \n",
              "9                                                         미국 체조 협회는 미국 올림픽 위원회의 서한을 지지하며 미국의 전 운동선수가 안전한 환경을 가질 수 있도록 돕는 올림픽 관계자의 절대적 필요성을 인정합니다   \n",
              "10  \"이건 작별 인사가 아닙니다. 이것은 한 장의 끝이며 새로운 장의 시작입니다.\"\\t \" \" 이 건 | 작 별 | 인 사 가 | 아 닙 니 다 . | 이 것 은 | 한 | 장 의 | 끝 이 며 | 새 로 운 | 장 의 | 시 작 입 니 다 . \" \" |   \n",
              "11                                                                    남아프리카 공화국의 특정 공원 또는 남아프리카 공화국 국립공원 전체에 입장할 수 있는 와일드 카드를 구매하는 것이 이득일 수 있습니다   \n",
              "12                                                                                   높은 고도나 산길을 넘어 운전하려고 하면 눈 빙판 또는 영하의 기온 등이 생길 가능성에 대해 고려해야 한다   \n",
              "13                                                                                       이 이야기에 관계된 두 명의 성인 자녀를 둔 기혼자인 듀발은 밀러에게 깊은 인상을 남기지 않았습니다   \n",
              "14                                                                                                  찬드라 셰카르 솔랑키 경찰서장은 피고인이 얼굴을 가린 채 법정에 나왔다고 말했다   \n",
              "15                                            지하철의 정규 안내 방송은 카탈로니아어로만 제공되나 계획에 없던 운행 중단 시에는 자동 시스템을 통해 스페인어 영어 프랑스어 아라비아어 일본어를 포함한 다양한 언어로 방송됩니다   \n",
              "16                                                                                                            그는 그 소문을 정치적 수다와 어리석음\"\"이라고 언급했습니다.   \n",
              "17                                                                                                    지구가 마치 움직이지 않는 것처럼 느껴지기에 언뜻 보면 맞는 말 같기도 하죠   \n",
              "18                                                                                               어린이와 노약자를 포함한 6명의 인질들은 필리핀 사진작가들과 마찬가지로 일찍 풀려났다   \n",
              "19                                                                                                           같은 줄을 따라 남자는 무릎을 덮는 바지를 입을 것을 요구받는다   \n",
              "20                                                                                                               그것은 기차와 자동차 및 여러 교통수단을 가져다주었습니다   \n",
              "21                                                               모로코 술탄은 다루 이 바드야daru l-badya라는 도시로 재건축하고 여기에 무역 거점을 세운 스페인 상인들은 이곳을 카사블랑카라고 불렀다   \n",
              "22                                                                                         비록 대부분 이론에 의존하긴 해도 프로그램은 궁수자리 은하 관측을 시뮬레이션하도록 짜여 있습니다   \n",
              "23                                                                                        아동이 위탁 보호를 받게 되는 이유는 방치에서 학대 심지어 강탈에 이르기까지 광범위하게 다양합니다   \n",
              "24                                                                                                             뇌 병리와 행동 사이의 상관관계가 과학자들의 연구를 돕습니다   \n",
              "25                                                                                            사람들은 귀국길에 오르는 여행객들에게도 인내심과 이해심이 필요하다고 생각하지 않을 수 있다   \n",
              "26                                                                                                             교전이 발발한 직후 영국은 독일에 대한 해상 봉쇄를 시작한다   \n",
              "27                                                                                               이렇게 되면 플레이어들이 장치를 허공에서 움직여 동작과 움직임을 제어할 수 있게 된다   \n",
              "28                                                                    스펙트럼의 또 다른 끝에서는 팀이 해오던 모든 것을 바꾸고 자신만의 방식으로 만들어야 한다고 생각하는 인지하지 못한 개인으로 바뀝니다   \n",
              "29                                                                                       피라미드 사운드와 광선 쇼는 이 지역에서 어린이들의 흥미를 가장 많이 끌어들이는 것들 중 하나입니다   \n",
              "30                                                                                                          장면들이 피라미드들 위에 비쳤고 다른 피라미드들에는 불이 밝혀졌다   \n",
              "31                                                                                              이곳은 남아프리카의 명소 중 하나로 남아프리카 국립 공원sanparks의 플래그십입니다   \n",
              "32                                                              아직도 존재하는 것으로 알려진 25개의 던랩 브로드 사이드는 이 문서의 남아있는 가장 오래된 사본이다 손으로 쓴 원본은 더 이상 남아 있지 않다   \n",
              "33                                                                                 상트페테르부르크 크루즈는 시내에서의 시간이 포함됩니다. 크루즈 승객은 비자 요건에서 제외됩니다약관을 확인하세요   \n",
              "34                                                블로그는 학생들의 글쓰기를 개선하는 데에도 도움이 됩니다 학생들이 종종 부족한 문법과 철자법으로 블로그를 시작하지만 독자들의 존재가 일반적으로 그러한 점들을 변화시킵니다   \n",
              "35                                                                                       델 포트로가 2세트에서 먼저 어드밴티지를 얻었지만 6 대 6이 된 후 다시 타이 브레이크가 필요했다   \n",
              "36                                                                                                                  이것은 몇몇 동사와 사물을 구별하는 중요한 방법이다   \n",
              "37                                                                                교회의 핵심 권력은 천 년 넘게 로마에 머물렀다 이런 힘과 돈의 편중은 이 교리가 합당한지에 대한 의문을 낳았다   \n",
              "38                                                                                 보고서는 행정부의 현재 이라크 정책에 대해 거의 모든 측면에서 매우 비판적이며 즉각적인 방향 변경을 촉구합니다   \n",
              "\n",
              "                                                                                               transcription  \\\n",
              "0                                             재입국 충격은 신혼 단계가 없기 때문에 문화 충격보다 빠르게 발생하며 더 오래 지속하고 더 극심할 수 있습니다.   \n",
              "1                                                    불행히도 운전자의 행동이 100% 확실하다고 예측할 수 없기 때문에 교통 흐름을 연구하기란 어렵다.   \n",
              "2                                                     합금은 기본적으로 금속 2개 이상의 혼합물이다. 주기율표상의 원소가 많이 있다는 것을 잊지 마라.   \n",
              "3                                                      홍콩섬은 홍콩 영토에 홍콩이라는 이름을 부여한 곳이자 많은 관광객들이 주한점으로 여기는 곳이다.   \n",
              "4                                         남자들을 단호히 거절하고 자신의 입장을 고수하는 것을 두려워하지 말라. 문화적 차이든 아니든 희롱은 간과 될 수 없다.   \n",
              "5                                                   좀 더 작은 섬의 대부분은 독립국가이거나 프랑스와 관련이 있고, 호화로운 비치 리조트로 알려져 있다.   \n",
              "6                                      사실 이게 존재한다는 사실을 아는 사람이 있다고 해도 찾는 것조차 쉽지 않습니다. 일단 동그란에 들어가면 완전한 고립입니다.   \n",
              "7                                                              원단이 너무 뜨거워지지 않도록 주의하세요. 원단이 수축하거나 그을릴 수 있습니다.   \n",
              "8                                      도널드 트럼프 미국 대통령은 늦은 일요일 시간대에 대변인을 통해 발표한 성명에서 미군이 시리아에서 철수할 것이라고 발표했다.   \n",
              "9                      미국 체조협회는 미국 올림픽위원회의 서한을 지지하며 미국의 전 운동선수가 안전한 환경을 가질 수 있도록 돕는 올림픽 관계자의 절대적 필요성을 인정합니다.   \n",
              "10                                                                  이건 작별인사가 아닙니다. 이것은 한작의 끝이며 새로운 작의 시작입니다.   \n",
              "11                                남아프리카 공화국의 특정 공원 또는 남아프리카 공화국 국립공원 전체에 입장할 수 있는 와일드카드를 구매하는 것이 이득일 수 있습니다.   \n",
              "12                                             높은 고도나 산길을 넘어 운전하려고 하면 눈, 빙판 또는 영하의 기온 등이 생길 가능성에 대해 고려해야 한다.   \n",
              "13                                                  이 이야기에 관계된 두 명의 성인 자녀를 둔 기혼자인 듀발은 밀러에게 깊은 임상을 남기지 않았습니다.   \n",
              "14                                                            찬드라 시에카르 솔랑키 경찰서장은 피고인이 얼굴을 가린 채 법적에 나왔다고 말했다.   \n",
              "15   지하철의 정규 안내 방송은 카탈로니아어로만 제공되나 계획에 없던 운행 중단 시에는 자동 시스템을 통해 스페인어, 영어, 프랑스어, 아라비아어, 일본어를 포함한 다양한 언어로 방송됩니다.   \n",
              "16                                                                          그는 그 소문을 정치적 수다와 어리석음이라고 언급했습니다.   \n",
              "17                                                                지구가 마치 움직이지 않은 것처럼 느껴지기에 언특보면 맞는 말 같기도 하죠?   \n",
              "18                                                          어린이와 노약자를 포함한 6명의 인질들은 필리핀 사진작가들과 마찬가지로 일찍 풀려났다.   \n",
              "19                                                                      같은 줄을 따라 남자는 무릎을 덮는 바지를 입을 것을 요구받는다.   \n",
              "20                                                                         그것은 기차와 자동차 및 여러 교통수단을 가져다 주었습니다.   \n",
              "21                                       모로코 슬타는 다루이 바드야라는 도시로 재건축하고 여기에 무역 거점을 세운 스페인 상인들은 이곳을 카사블랑카라고 불렀다.   \n",
              "22                                                    비록 대부분 이론에 의존하긴 해도, 프로그램은 궁수자리 은하관측을 시뮬레이션하도록 짜여 있습니다.   \n",
              "23                                                   아동이 위탁보호를 받게 되는 이유는 방치에서 학대, 심지어 강탈에 이르기까지 광범위하게 다양합니다.   \n",
              "24                                                                          뇌병리와 행동사이의 상관관계가 과학자들의 연구를 돕습니다.   \n",
              "25                                                       사람들은 귀국길에 오르는 여행객들에게도 인내심과 이해심이 필요하다고 생각하지 않을 수 있다.   \n",
              "26                                                                         교전이 발발한 직후 영국은 독일에 대한 해상붕쇄를 시작한다.   \n",
              "27                                                          이렇게 되면 플레이어들이 장치를 허공해서 움직여 동작과 움직임을 제어할 수 있게 된다.   \n",
              "28                               스펙트럼의 또 다른 끝에서는 팀이 해오던 모든 것을 바꾸고 자신만의 방식으로 만들어야 한다고 생각하는 인지하지 못한 개인으로 바뀝니다.   \n",
              "29                                                   피라미드 사운드와 광선쇼는 이 지역에서 어린이들의 흥미를 가장 많이 끌어들이는 것들 중 하나입니다.   \n",
              "30                                                                     장면들이 피라미드들 위에 비쳤고 다른 피라미드들에는 불이 밝혀졌다.   \n",
              "31                                                                  이곳은 남아프리카의 명소 중 하나로 남아프리카 국립공원의 플래그십입니다.   \n",
              "32                         아직도 존재하는 것으로 알려진 25개의 덜랩 브로드 사이드는 이 문서에 남아있는 가장 오래된 사번이다. 손으로 쓴 원보는 더 이상 남아있지 않다.   \n",
              "33                                         상트 페테르브르크 크루즈는 시내에서의 시간이 포함됩니다. 크루즈 승객은 비자 요건에서 제외됩니다. 약관을 확인하세요.   \n",
              "34          블로그는 학생들의 글쓰기를 개선하는 데에도 도움이 됩니다. 학생들이 종종 부족한 문법과 철자법으로 블로그를 시작하지만 독자들의 존재가 일반적으로 그러한 점들을 변화시킵니다.   \n",
              "35                                                      델포트로가 2세트에서 먼저 어드벤티즈를 얻었지만 6대6이 된 후 다시 타이브레이크가 필요했다.   \n",
              "36                                                                             이것은 몇몇 동사와 사물을 구별하는 중요한 방법이다.   \n",
              "37                                       교회의 핵심 권력은 1000년 넘게 로마에 머물렀다. 이러한 힘과 돈의 편중은 이 교리가 합당한지에 대한 의문을 낳았다.   \n",
              "38                                             보고서는 행정부의 현재 이라크 정책에 대해 거의 모든 측면에서 매우 비판적이며 즉각적인 방향변경을 촉구합니다.   \n",
              "\n",
              "                                                                                                                                                             translation  \n",
              "0                                The re-entry shock does not have a honeymoon stage, so it occurs faster than the cultural shock and can last longer and be more severe.  \n",
              "1                                                         Unfortunately, it is difficult to study the flow of traffic because the driver's behavior is not 100% certain.  \n",
              "2                                          Don't forget that there are more than two metals in the alloy. Don't forget that there are more than two metals in the alloy.  \n",
              "3                                                   Hong Kong Island is a place named Hong Kong on Hong Kong territory, and it is the main destination of many tourists.  \n",
              "4                                             Do not be afraid to reject men and defend your position. Whether it is a cultural difference or not, it cannot be ignored.  \n",
              "5                                                            Most of the smaller islands are independent or related to France, and are known as luxurious beach resorts.  \n",
              "6                           In fact, even if there are people who know that this exists, it is not easy to find it. Once you enter the cave, it is a complete isolation.  \n",
              "7                                                                                        Be careful not to heat the fabric too much. The fabric may shrink or get dirty.  \n",
              "8                                                        U.S. President Donald Trump announced on Sunday that the U.S. military would withdraw from Syria in his speech.  \n",
              "9                                  The U.S. Sports Association supports the call of the U.S. Olympic Committee to help all athletes in the U.S. have a safe environment.  \n",
              "10                                                                                  This is not a farewell. This is the end of one work and the beginning of a new work.  \n",
              "11                                             It may be beneficial to purchase a wild card that allows you to enter a specific park or a national park of South Africa.  \n",
              "12                          If you want to drive over high altitude or mountain roads, you have to consider the possibility of snow, ice, or the temperature of a movie.  \n",
              "13                                                                   Duval, who had two adult children related to this story, did not leave a deep impression on Miller.  \n",
              "14                                                            The police chief of Chandra Shekhar Solanki said that the defendant covered his face and came out legally.  \n",
              "15                     Subway's regular announcement broadcast is only available in Catalan, but it will be broadcast in Spanish, English, French, Arabic, and Japanese.  \n",
              "16                                                                                                             He mentioned the rumor as political talk and foolishness.  \n",
              "17                                                                                                     It feels as if the earth is not moving, and it seems to be right.  \n",
              "18                                                             Children and old people, including 6 people, were released early, just like the Philippine photographers.  \n",
              "19                                                                                              The man is asked to wear pants that cover his knees along the same line.  \n",
              "20                                                                                                           It was given by trains, cars, and other means of transport.  \n",
              "21                         Morocco Sultan was re-constructed as a city called Darui Badia The Spanish merchants who built a trade hub here called this place Casablanca.  \n",
              "22                                                                Although most of them rely on theory, the program is designed to simulate the Milky Way of the palace.  \n",
              "23                                                                            The reason why children are protected is that they can be abused, abused, and even robbed.  \n",
              "24                                                                                         The relationship between the brain and the action helps scientists' research.  \n",
              "25                                                              People may not think that patience and understanding are necessary for travelers on their way back home.  \n",
              "26                                                                                                      After the conflict, UK has a problem of remorse towards Germany.  \n",
              "27                                                                                        In this way, players can control the movement by moving the device in the air.  \n",
              "28        At the other end of the spectrum, you have to change everything your team has been doing and make it your own way. It turns into an unrecognizable individual.  \n",
              "29                                                             Pyramid Sound and Glow Show is one of the things that attracts children's interest the most in this area.  \n",
              "30                                                                                The scenes were reflected on the pyramids, and the fire was lit on the other pyramids.  \n",
              "31                                                                    This is one of the famous places in South Africa and is a flagship of South African National Park.  \n",
              "32            The 25th Dunlap Broadside, which is known to still exist, is the oldest document in this document. The original document written by hand no longer exists.  \n",
              "33                                   Saint-Petersburg Cruise includes time in the city. Cruise passengers are excluded from visa conditions. Please check your passport.  \n",
              "34   Blogs are helpful in improving students' writing skills. Students often start blogs with poor grammar and spelling, which normally can change their writing skills.  \n",
              "35                                                                               Del Potro got an advantage in the second set, but he needed a tiebreak again after 6-6.  \n",
              "36                                                                                                  This is an important method of distinguishing some verbs and things.  \n",
              "37                            The main power of the church has remained in Rome for over 1,000 years. The power of the church has remained in Rome for over 1,000 years.  \n",
              "38                                        The report is very critical of the current Iraqi policy of the administration, and calls for an immediate change of direction.  "
            ],
            "text/html": [
              "\n",
              "  <div id=\"df-70dfb3e0-7b39-4f16-915d-5da1fc4ea0c2\">\n",
              "    <div class=\"colab-df-container\">\n",
              "      <div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>reference</th>\n",
              "      <th>transcription</th>\n",
              "      <th>translation</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>재입국 충격은 신혼 단계가 없기 때문에 문화 충격보다 빠르게 발생하며 더 오래 지속하고 더 극심할 수 있습니다</td>\n",
              "      <td>재입국 충격은 신혼 단계가 없기 때문에 문화 충격보다 빠르게 발생하며 더 오래 지속하고 더 극심할 수 있습니다.</td>\n",
              "      <td>The re-entry shock does not have a honeymoon stage, so it occurs faster than the cultural shock and can last longer and be more severe.</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>불행히도 운전자의 행동이 100% 확실하다고 예측할 수 없기 때문에 교통 흐름을 연구하기란 어렵다</td>\n",
              "      <td>불행히도 운전자의 행동이 100% 확실하다고 예측할 수 없기 때문에 교통 흐름을 연구하기란 어렵다.</td>\n",
              "      <td>Unfortunately, it is difficult to study the flow of traffic because the driver's behavior is not 100% certain.</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>합금은 기본적으로 금속 두 개 이상의 혼합물이다 주기율표 상에 원소가 많이 있다는 것을 잊지 마라</td>\n",
              "      <td>합금은 기본적으로 금속 2개 이상의 혼합물이다. 주기율표상의 원소가 많이 있다는 것을 잊지 마라.</td>\n",
              "      <td>Don't forget that there are more than two metals in the alloy. Don't forget that there are more than two metals in the alloy.</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>홍콩 섬은 홍콩 영토에 홍콩이라는 이름을 부여한 곳이자 많은 관광객들이 주안점으로 여기는 곳이다</td>\n",
              "      <td>홍콩섬은 홍콩 영토에 홍콩이라는 이름을 부여한 곳이자 많은 관광객들이 주한점으로 여기는 곳이다.</td>\n",
              "      <td>Hong Kong Island is a place named Hong Kong on Hong Kong territory, and it is the main destination of many tourists.</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>남자들을 단호히 거절하고 자신의 입장을 고수하는 것을 두려워하지 말라문화적 차이든 아니든 희롱은 간과될 수 없다!</td>\n",
              "      <td>남자들을 단호히 거절하고 자신의 입장을 고수하는 것을 두려워하지 말라. 문화적 차이든 아니든 희롱은 간과 될 수 없다.</td>\n",
              "      <td>Do not be afraid to reject men and defend your position. Whether it is a cultural difference or not, it cannot be ignored.</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>5</th>\n",
              "      <td>좀 더 작은 섬의 대부분은 독립 국가이거나 프랑스와 관련이 있고 호화로운 비치 리조트로 알려져 있다</td>\n",
              "      <td>좀 더 작은 섬의 대부분은 독립국가이거나 프랑스와 관련이 있고, 호화로운 비치 리조트로 알려져 있다.</td>\n",
              "      <td>Most of the smaller islands are independent or related to France, and are known as luxurious beach resorts.</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>6</th>\n",
              "      <td>사실 이게 존재한다는 사실을 아는 사람이 있다고 해도 찾는 것조차 쉽지 않습니다 일단 동굴 안에 들어가면 완전한 고립입니다</td>\n",
              "      <td>사실 이게 존재한다는 사실을 아는 사람이 있다고 해도 찾는 것조차 쉽지 않습니다. 일단 동그란에 들어가면 완전한 고립입니다.</td>\n",
              "      <td>In fact, even if there are people who know that this exists, it is not easy to find it. Once you enter the cave, it is a complete isolation.</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>7</th>\n",
              "      <td>원단이 너무 뜨거워지지 않도록 주의하세요원단이 수축하거나 그을릴 수 있습니다</td>\n",
              "      <td>원단이 너무 뜨거워지지 않도록 주의하세요. 원단이 수축하거나 그을릴 수 있습니다.</td>\n",
              "      <td>Be careful not to heat the fabric too much. The fabric may shrink or get dirty.</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>8</th>\n",
              "      <td>도널드 트럼프 미국 대통령은 늦은 일요일 시간대에 대변인을 통해 발표한 성명에서 미군이 시리아에서 철수할 것이라고 발표했다</td>\n",
              "      <td>도널드 트럼프 미국 대통령은 늦은 일요일 시간대에 대변인을 통해 발표한 성명에서 미군이 시리아에서 철수할 것이라고 발표했다.</td>\n",
              "      <td>U.S. President Donald Trump announced on Sunday that the U.S. military would withdraw from Syria in his speech.</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>9</th>\n",
              "      <td>미국 체조 협회는 미국 올림픽 위원회의 서한을 지지하며 미국의 전 운동선수가 안전한 환경을 가질 수 있도록 돕는 올림픽 관계자의 절대적 필요성을 인정합니다</td>\n",
              "      <td>미국 체조협회는 미국 올림픽위원회의 서한을 지지하며 미국의 전 운동선수가 안전한 환경을 가질 수 있도록 돕는 올림픽 관계자의 절대적 필요성을 인정합니다.</td>\n",
              "      <td>The U.S. Sports Association supports the call of the U.S. Olympic Committee to help all athletes in the U.S. have a safe environment.</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>10</th>\n",
              "      <td>\"이건 작별 인사가 아닙니다. 이것은 한 장의 끝이며 새로운 장의 시작입니다.\"\\t \" \" 이 건 | 작 별 | 인 사 가 | 아 닙 니 다 . | 이 것 은 | 한 | 장 의 | 끝 이 며 | 새 로 운 | 장 의 | 시 작 입 니 다 . \" \" |</td>\n",
              "      <td>이건 작별인사가 아닙니다. 이것은 한작의 끝이며 새로운 작의 시작입니다.</td>\n",
              "      <td>This is not a farewell. This is the end of one work and the beginning of a new work.</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>11</th>\n",
              "      <td>남아프리카 공화국의 특정 공원 또는 남아프리카 공화국 국립공원 전체에 입장할 수 있는 와일드 카드를 구매하는 것이 이득일 수 있습니다</td>\n",
              "      <td>남아프리카 공화국의 특정 공원 또는 남아프리카 공화국 국립공원 전체에 입장할 수 있는 와일드카드를 구매하는 것이 이득일 수 있습니다.</td>\n",
              "      <td>It may be beneficial to purchase a wild card that allows you to enter a specific park or a national park of South Africa.</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>12</th>\n",
              "      <td>높은 고도나 산길을 넘어 운전하려고 하면 눈 빙판 또는 영하의 기온 등이 생길 가능성에 대해 고려해야 한다</td>\n",
              "      <td>높은 고도나 산길을 넘어 운전하려고 하면 눈, 빙판 또는 영하의 기온 등이 생길 가능성에 대해 고려해야 한다.</td>\n",
              "      <td>If you want to drive over high altitude or mountain roads, you have to consider the possibility of snow, ice, or the temperature of a movie.</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>13</th>\n",
              "      <td>이 이야기에 관계된 두 명의 성인 자녀를 둔 기혼자인 듀발은 밀러에게 깊은 인상을 남기지 않았습니다</td>\n",
              "      <td>이 이야기에 관계된 두 명의 성인 자녀를 둔 기혼자인 듀발은 밀러에게 깊은 임상을 남기지 않았습니다.</td>\n",
              "      <td>Duval, who had two adult children related to this story, did not leave a deep impression on Miller.</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>14</th>\n",
              "      <td>찬드라 셰카르 솔랑키 경찰서장은 피고인이 얼굴을 가린 채 법정에 나왔다고 말했다</td>\n",
              "      <td>찬드라 시에카르 솔랑키 경찰서장은 피고인이 얼굴을 가린 채 법적에 나왔다고 말했다.</td>\n",
              "      <td>The police chief of Chandra Shekhar Solanki said that the defendant covered his face and came out legally.</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>15</th>\n",
              "      <td>지하철의 정규 안내 방송은 카탈로니아어로만 제공되나 계획에 없던 운행 중단 시에는 자동 시스템을 통해 스페인어 영어 프랑스어 아라비아어 일본어를 포함한 다양한 언어로 방송됩니다</td>\n",
              "      <td>지하철의 정규 안내 방송은 카탈로니아어로만 제공되나 계획에 없던 운행 중단 시에는 자동 시스템을 통해 스페인어, 영어, 프랑스어, 아라비아어, 일본어를 포함한 다양한 언어로 방송됩니다.</td>\n",
              "      <td>Subway's regular announcement broadcast is only available in Catalan, but it will be broadcast in Spanish, English, French, Arabic, and Japanese.</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>16</th>\n",
              "      <td>그는 그 소문을 정치적 수다와 어리석음\"\"이라고 언급했습니다.</td>\n",
              "      <td>그는 그 소문을 정치적 수다와 어리석음이라고 언급했습니다.</td>\n",
              "      <td>He mentioned the rumor as political talk and foolishness.</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>17</th>\n",
              "      <td>지구가 마치 움직이지 않는 것처럼 느껴지기에 언뜻 보면 맞는 말 같기도 하죠</td>\n",
              "      <td>지구가 마치 움직이지 않은 것처럼 느껴지기에 언특보면 맞는 말 같기도 하죠?</td>\n",
              "      <td>It feels as if the earth is not moving, and it seems to be right.</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>18</th>\n",
              "      <td>어린이와 노약자를 포함한 6명의 인질들은 필리핀 사진작가들과 마찬가지로 일찍 풀려났다</td>\n",
              "      <td>어린이와 노약자를 포함한 6명의 인질들은 필리핀 사진작가들과 마찬가지로 일찍 풀려났다.</td>\n",
              "      <td>Children and old people, including 6 people, were released early, just like the Philippine photographers.</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>19</th>\n",
              "      <td>같은 줄을 따라 남자는 무릎을 덮는 바지를 입을 것을 요구받는다</td>\n",
              "      <td>같은 줄을 따라 남자는 무릎을 덮는 바지를 입을 것을 요구받는다.</td>\n",
              "      <td>The man is asked to wear pants that cover his knees along the same line.</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>20</th>\n",
              "      <td>그것은 기차와 자동차 및 여러 교통수단을 가져다주었습니다</td>\n",
              "      <td>그것은 기차와 자동차 및 여러 교통수단을 가져다 주었습니다.</td>\n",
              "      <td>It was given by trains, cars, and other means of transport.</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>21</th>\n",
              "      <td>모로코 술탄은 다루 이 바드야daru l-badya라는 도시로 재건축하고 여기에 무역 거점을 세운 스페인 상인들은 이곳을 카사블랑카라고 불렀다</td>\n",
              "      <td>모로코 슬타는 다루이 바드야라는 도시로 재건축하고 여기에 무역 거점을 세운 스페인 상인들은 이곳을 카사블랑카라고 불렀다.</td>\n",
              "      <td>Morocco Sultan was re-constructed as a city called Darui Badia The Spanish merchants who built a trade hub here called this place Casablanca.</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>22</th>\n",
              "      <td>비록 대부분 이론에 의존하긴 해도 프로그램은 궁수자리 은하 관측을 시뮬레이션하도록 짜여 있습니다</td>\n",
              "      <td>비록 대부분 이론에 의존하긴 해도, 프로그램은 궁수자리 은하관측을 시뮬레이션하도록 짜여 있습니다.</td>\n",
              "      <td>Although most of them rely on theory, the program is designed to simulate the Milky Way of the palace.</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>23</th>\n",
              "      <td>아동이 위탁 보호를 받게 되는 이유는 방치에서 학대 심지어 강탈에 이르기까지 광범위하게 다양합니다</td>\n",
              "      <td>아동이 위탁보호를 받게 되는 이유는 방치에서 학대, 심지어 강탈에 이르기까지 광범위하게 다양합니다.</td>\n",
              "      <td>The reason why children are protected is that they can be abused, abused, and even robbed.</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>24</th>\n",
              "      <td>뇌 병리와 행동 사이의 상관관계가 과학자들의 연구를 돕습니다</td>\n",
              "      <td>뇌병리와 행동사이의 상관관계가 과학자들의 연구를 돕습니다.</td>\n",
              "      <td>The relationship between the brain and the action helps scientists' research.</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>25</th>\n",
              "      <td>사람들은 귀국길에 오르는 여행객들에게도 인내심과 이해심이 필요하다고 생각하지 않을 수 있다</td>\n",
              "      <td>사람들은 귀국길에 오르는 여행객들에게도 인내심과 이해심이 필요하다고 생각하지 않을 수 있다.</td>\n",
              "      <td>People may not think that patience and understanding are necessary for travelers on their way back home.</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>26</th>\n",
              "      <td>교전이 발발한 직후 영국은 독일에 대한 해상 봉쇄를 시작한다</td>\n",
              "      <td>교전이 발발한 직후 영국은 독일에 대한 해상붕쇄를 시작한다.</td>\n",
              "      <td>After the conflict, UK has a problem of remorse towards Germany.</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>27</th>\n",
              "      <td>이렇게 되면 플레이어들이 장치를 허공에서 움직여 동작과 움직임을 제어할 수 있게 된다</td>\n",
              "      <td>이렇게 되면 플레이어들이 장치를 허공해서 움직여 동작과 움직임을 제어할 수 있게 된다.</td>\n",
              "      <td>In this way, players can control the movement by moving the device in the air.</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>28</th>\n",
              "      <td>스펙트럼의 또 다른 끝에서는 팀이 해오던 모든 것을 바꾸고 자신만의 방식으로 만들어야 한다고 생각하는 인지하지 못한 개인으로 바뀝니다</td>\n",
              "      <td>스펙트럼의 또 다른 끝에서는 팀이 해오던 모든 것을 바꾸고 자신만의 방식으로 만들어야 한다고 생각하는 인지하지 못한 개인으로 바뀝니다.</td>\n",
              "      <td>At the other end of the spectrum, you have to change everything your team has been doing and make it your own way. It turns into an unrecognizable individual.</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>29</th>\n",
              "      <td>피라미드 사운드와 광선 쇼는 이 지역에서 어린이들의 흥미를 가장 많이 끌어들이는 것들 중 하나입니다</td>\n",
              "      <td>피라미드 사운드와 광선쇼는 이 지역에서 어린이들의 흥미를 가장 많이 끌어들이는 것들 중 하나입니다.</td>\n",
              "      <td>Pyramid Sound and Glow Show is one of the things that attracts children's interest the most in this area.</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>30</th>\n",
              "      <td>장면들이 피라미드들 위에 비쳤고 다른 피라미드들에는 불이 밝혀졌다</td>\n",
              "      <td>장면들이 피라미드들 위에 비쳤고 다른 피라미드들에는 불이 밝혀졌다.</td>\n",
              "      <td>The scenes were reflected on the pyramids, and the fire was lit on the other pyramids.</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>31</th>\n",
              "      <td>이곳은 남아프리카의 명소 중 하나로 남아프리카 국립 공원sanparks의 플래그십입니다</td>\n",
              "      <td>이곳은 남아프리카의 명소 중 하나로 남아프리카 국립공원의 플래그십입니다.</td>\n",
              "      <td>This is one of the famous places in South Africa and is a flagship of South African National Park.</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>32</th>\n",
              "      <td>아직도 존재하는 것으로 알려진 25개의 던랩 브로드 사이드는 이 문서의 남아있는 가장 오래된 사본이다 손으로 쓴 원본은 더 이상 남아 있지 않다</td>\n",
              "      <td>아직도 존재하는 것으로 알려진 25개의 덜랩 브로드 사이드는 이 문서에 남아있는 가장 오래된 사번이다. 손으로 쓴 원보는 더 이상 남아있지 않다.</td>\n",
              "      <td>The 25th Dunlap Broadside, which is known to still exist, is the oldest document in this document. The original document written by hand no longer exists.</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>33</th>\n",
              "      <td>상트페테르부르크 크루즈는 시내에서의 시간이 포함됩니다. 크루즈 승객은 비자 요건에서 제외됩니다약관을 확인하세요</td>\n",
              "      <td>상트 페테르브르크 크루즈는 시내에서의 시간이 포함됩니다. 크루즈 승객은 비자 요건에서 제외됩니다. 약관을 확인하세요.</td>\n",
              "      <td>Saint-Petersburg Cruise includes time in the city. Cruise passengers are excluded from visa conditions. Please check your passport.</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>34</th>\n",
              "      <td>블로그는 학생들의 글쓰기를 개선하는 데에도 도움이 됩니다 학생들이 종종 부족한 문법과 철자법으로 블로그를 시작하지만 독자들의 존재가 일반적으로 그러한 점들을 변화시킵니다</td>\n",
              "      <td>블로그는 학생들의 글쓰기를 개선하는 데에도 도움이 됩니다. 학생들이 종종 부족한 문법과 철자법으로 블로그를 시작하지만 독자들의 존재가 일반적으로 그러한 점들을 변화시킵니다.</td>\n",
              "      <td>Blogs are helpful in improving students' writing skills. Students often start blogs with poor grammar and spelling, which normally can change their writing skills.</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>35</th>\n",
              "      <td>델 포트로가 2세트에서 먼저 어드밴티지를 얻었지만 6 대 6이 된 후 다시 타이 브레이크가 필요했다</td>\n",
              "      <td>델포트로가 2세트에서 먼저 어드벤티즈를 얻었지만 6대6이 된 후 다시 타이브레이크가 필요했다.</td>\n",
              "      <td>Del Potro got an advantage in the second set, but he needed a tiebreak again after 6-6.</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>36</th>\n",
              "      <td>이것은 몇몇 동사와 사물을 구별하는 중요한 방법이다</td>\n",
              "      <td>이것은 몇몇 동사와 사물을 구별하는 중요한 방법이다.</td>\n",
              "      <td>This is an important method of distinguishing some verbs and things.</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>37</th>\n",
              "      <td>교회의 핵심 권력은 천 년 넘게 로마에 머물렀다 이런 힘과 돈의 편중은 이 교리가 합당한지에 대한 의문을 낳았다</td>\n",
              "      <td>교회의 핵심 권력은 1000년 넘게 로마에 머물렀다. 이러한 힘과 돈의 편중은 이 교리가 합당한지에 대한 의문을 낳았다.</td>\n",
              "      <td>The main power of the church has remained in Rome for over 1,000 years. The power of the church has remained in Rome for over 1,000 years.</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>38</th>\n",
              "      <td>보고서는 행정부의 현재 이라크 정책에 대해 거의 모든 측면에서 매우 비판적이며 즉각적인 방향 변경을 촉구합니다</td>\n",
              "      <td>보고서는 행정부의 현재 이라크 정책에 대해 거의 모든 측면에서 매우 비판적이며 즉각적인 방향변경을 촉구합니다.</td>\n",
              "      <td>The report is very critical of the current Iraqi policy of the administration, and calls for an immediate change of direction.</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>\n",
              "      <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-70dfb3e0-7b39-4f16-915d-5da1fc4ea0c2')\"\n",
              "              title=\"Convert this dataframe to an interactive table.\"\n",
              "              style=\"display:none;\">\n",
              "        \n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "       width=\"24px\">\n",
              "    <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\n",
              "    <path d=\"M18.56 5.44l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94zm-11 1L8.5 8.5l.94-2.06 2.06-.94-2.06-.94L8.5 2.5l-.94 2.06-2.06.94zm10 10l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94z\"/><path d=\"M17.41 7.96l-1.37-1.37c-.4-.4-.92-.59-1.43-.59-.52 0-1.04.2-1.43.59L10.3 9.45l-7.72 7.72c-.78.78-.78 2.05 0 2.83L4 21.41c.39.39.9.59 1.41.59.51 0 1.02-.2 1.41-.59l7.78-7.78 2.81-2.81c.8-.78.8-2.07 0-2.86zM5.41 20L4 18.59l7.72-7.72 1.47 1.35L5.41 20z\"/>\n",
              "  </svg>\n",
              "      </button>\n",
              "      \n",
              "  <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      flex-wrap:wrap;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "      <script>\n",
              "        const buttonEl =\n",
              "          document.querySelector('#df-70dfb3e0-7b39-4f16-915d-5da1fc4ea0c2 button.colab-df-convert');\n",
              "        buttonEl.style.display =\n",
              "          google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "        async function convertToInteractive(key) {\n",
              "          const element = document.querySelector('#df-70dfb3e0-7b39-4f16-915d-5da1fc4ea0c2');\n",
              "          const dataTable =\n",
              "            await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                     [key], {});\n",
              "          if (!dataTable) return;\n",
              "\n",
              "          const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "            '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "            + ' to learn more about interactive tables.';\n",
              "          element.innerHTML = '';\n",
              "          dataTable['output_type'] = 'display_data';\n",
              "          await google.colab.output.renderOutput(dataTable, element);\n",
              "          const docLink = document.createElement('div');\n",
              "          docLink.innerHTML = docLinkHtml;\n",
              "          element.appendChild(docLink);\n",
              "        }\n",
              "      </script>\n",
              "    </div>\n",
              "  </div>\n",
              "  "
            ]
          },
          "metadata": {},
          "execution_count": 10
        }
      ],
      "source": [
        "data = pd.DataFrame(dict(reference=references, transcription=transcriptions, translation=translations))\n",
        "data"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "83LRfd1plYEb"
      },
      "source": [
        "# Word-level timestamps using attention weights\n",
        "\n",
        "Below, we use the cross-attention weights to determine more granular, word-level timestamps. It uses a set of heuristics and dynamic time warping (DTW) to find the alignment between the audio and the transcript."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 11,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "KGtZWNaQlOVC",
        "outputId": "8a03465b-d4c9-40ca-a959-0454a7a8118a"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/\n",
            "Requirement already satisfied: dtw-python in /usr/local/lib/python3.8/dist-packages (1.3.0)\n",
            "Requirement already satisfied: scipy>=1.1 in /usr/local/lib/python3.8/dist-packages (from dtw-python) (1.7.3)\n",
            "Requirement already satisfied: numpy>=1.19 in /usr/local/lib/python3.8/dist-packages (from dtw-python) (1.21.6)\n"
          ]
        }
      ],
      "source": [
        "! pip install dtw-python"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 12,
      "metadata": {
        "id": "3HTv8KmzlZtc",
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "outputId": "63f96356-106d-4404-aa48-885e2ca1f7db"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Importing the dtw module. When using in academic works please cite:\n",
            "  T. Giorgino. Computing and Visualizing Dynamic Time Warping Alignments in R: The dtw Package.\n",
            "  J. Stat. Soft., doi:10.18637/jss.v031.i07.\n",
            "\n"
          ]
        }
      ],
      "source": [
        "import string\n",
        "import matplotlib.pyplot as plt\n",
        "import matplotlib.font_manager as fm\n",
        "import matplotlib.ticker as ticker\n",
        "\n",
        "from IPython.display import display, HTML\n",
        "from whisper.tokenizer import get_tokenizer\n",
        "from dtw import dtw\n",
        "from scipy.ndimage import median_filter\n",
        "\n",
        "%matplotlib inline\n",
        "%config InlineBackend.figure_format = \"retina\""
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 13,
      "metadata": {
        "id": "jqSiARgqlb6X"
      },
      "outputs": [],
      "source": [
        "AUDIO_SAMPLES_PER_TOKEN = whisper.audio.HOP_LENGTH * 2\n",
        "AUDIO_TIME_PER_TOKEN = AUDIO_SAMPLES_PER_TOKEN / whisper.audio.SAMPLE_RATE\n",
        "\n",
        "medfilt_width = 7\n",
        "qk_scale = 1.0\n",
        "\n",
        "tokenizer = get_tokenizer(model.is_multilingual, language=languages[lang])"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 14,
      "metadata": {
        "id": "ZTVen0YkldgU"
      },
      "outputs": [],
      "source": [
        "# This part downloads a repackaged version of the Noto Sans font (either CJK or non-CJK)\n",
        "# to render various languages in Matplotlib figures.\n",
        "\n",
        "if languages[lang] in {\"Chinese\", \"Japanese\", \"Korean\"}:\n",
        "    font = \"GoNotoCJKCore.ttf\"\n",
        "else:\n",
        "    font = \"GoNotoCurrent.ttf\"\n",
        "\n",
        "font_release = \"https://github.com/satbyy/go-noto-universal/releases/download/v5.2\"\n",
        "if not os.path.exists(font):\n",
        "    download(f\"{font_release}/{font}\", font)\n",
        "\n",
        "prop = fm.FontProperties(fname=font)\n",
        "props = {'fontproperties': prop}"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 15,
      "metadata": {
        "id": "UiOFv8X5lhQA"
      },
      "outputs": [],
      "source": [
        "def split_tokens_on_unicode(tokens: torch.Tensor):\n",
        "    words = []\n",
        "    word_tokens = []\n",
        "    current_tokens = []\n",
        "    \n",
        "    for token in tokens.tolist():\n",
        "        current_tokens.append(token)\n",
        "        decoded = tokenizer.decode_with_timestamps(current_tokens)\n",
        "        if \"\\ufffd\" not in decoded:\n",
        "            words.append(decoded)\n",
        "            word_tokens.append(current_tokens)\n",
        "            current_tokens = []\n",
        "    \n",
        "    return words, word_tokens"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 16,
      "metadata": {
        "id": "CkhsL9xUmHjt"
      },
      "outputs": [],
      "source": [
        "def split_tokens_on_spaces(tokens: torch.Tensor):\n",
        "    subwords, subword_tokens_list = split_tokens_on_unicode(tokens)\n",
        "    words = []\n",
        "    word_tokens = []\n",
        "    \n",
        "    for subword, subword_tokens in zip(subwords, subword_tokens_list):\n",
        "        special = subword_tokens[0] >= tokenizer.eot\n",
        "        with_space = subword.startswith(\" \")\n",
        "        punctuation = subword.strip() in string.punctuation\n",
        "        if special or with_space or punctuation:\n",
        "            words.append(subword)\n",
        "            word_tokens.append(subword_tokens)\n",
        "        else:\n",
        "            words[-1] = words[-1] + subword\n",
        "            word_tokens[-1].extend(subword_tokens)\n",
        "    \n",
        "    return words, word_tokens"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 17,
      "metadata": {
        "id": "pQOl_4TSmIgB"
      },
      "outputs": [],
      "source": [
        "if languages[lang] in {\"Chinese\", \"Japanese\", \"Thai\", \"Lao\", \"Myanmar\"}:\n",
        "    # These languages don't typically use spaces, so it is difficult to split words\n",
        "    # without morpheme analysis. Here, we instead split words at any\n",
        "    # position where the tokens are decoded as valid unicode points\n",
        "    split_tokens = split_tokens_on_unicode\n",
        "else:\n",
        "    split_tokens = split_tokens_on_spaces"
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# install hooks on the cross attention layers to retrieve the attention weights\n",
        "QKs = [None] * model.dims.n_text_layer\n",
        "\n",
        "for i, block in enumerate(model.decoder.blocks):\n",
        "    block.cross_attn.register_forward_hook(\n",
        "        lambda _, ins, outs, index=i: QKs.__setitem__(index, outs[-1])\n",
        "    )"
      ],
      "metadata": {
        "id": "DGwrymCo5SUe"
      },
      "execution_count": 18,
      "outputs": []
    },
    {
      "cell_type": "code",
      "execution_count": 19,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 1000
        },
        "id": "6q-mBLVNmJ1i",
        "outputId": "75aba6d9-389a-4959-b0e5-452424411055"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            " 재입국 충격은 신혼 단계가 없기 때문에 문화 충격보다 빠르게 발생하며 더 오래 지속하고 더 극심할 수 있습니다.\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 576x576 with 1 Axes>"
            ],
            "image/png": "[encoded data, 583008 characters]\n"
          },
          "metadata": {
            "image/png": {
              "width": 581,
              "height": 479
            },
            "needs_background": "light"
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "     word  begin    end\n",
              "0     재입국   2.28   2.86\n",
              "1     충격은   2.86   3.64\n",
              "2      신혼   3.64   3.98\n",
              "3     단계가   3.98   4.54\n",
              "4      없기   4.54   5.50\n",
              "5     때문에   5.50   5.86\n",
              "6      문화   5.86   6.16\n",
              "7    충격보다   6.16   6.94\n",
              "8     빠르게   6.94   7.52\n",
              "9    발생하며   7.52   8.70\n",
              "10      더   8.70   9.00\n",
              "11     오래   9.00   9.20\n",
              "12   지속하고   9.20  10.32\n",
              "13      더  10.32  10.40\n",
              "14    극심할  10.40  11.12\n",
              "15      수  11.12  11.54\n",
              "16   있습니다  11.54  12.20"
            ],
            "text/html": [
              "\n",
              "  <div id=\"df-11c3b1ef-dd9f-4bd8-8103-641b6b173989\">\n",
              "    <div class=\"colab-df-container\">\n",
              "      <div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>word</th>\n",
              "      <th>begin</th>\n",
              "      <th>end</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>재입국</td>\n",
              "      <td>2.28</td>\n",
              "      <td>2.86</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>충격은</td>\n",
              "      <td>2.86</td>\n",
              "      <td>3.64</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>신혼</td>\n",
              "      <td>3.64</td>\n",
              "      <td>3.98</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>단계가</td>\n",
              "      <td>3.98</td>\n",
              "      <td>4.54</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>없기</td>\n",
              "      <td>4.54</td>\n",
              "      <td>5.50</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>5</th>\n",
              "      <td>때문에</td>\n",
              "      <td>5.50</td>\n",
              "      <td>5.86</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>6</th>\n",
              "      <td>문화</td>\n",
              "      <td>5.86</td>\n",
              "      <td>6.16</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>7</th>\n",
              "      <td>충격보다</td>\n",
              "      <td>6.16</td>\n",
              "      <td>6.94</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>8</th>\n",
              "      <td>빠르게</td>\n",
              "      <td>6.94</td>\n",
              "      <td>7.52</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>9</th>\n",
              "      <td>발생하며</td>\n",
              "      <td>7.52</td>\n",
              "      <td>8.70</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>10</th>\n",
              "      <td>더</td>\n",
              "      <td>8.70</td>\n",
              "      <td>9.00</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>11</th>\n",
              "      <td>오래</td>\n",
              "      <td>9.00</td>\n",
              "      <td>9.20</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>12</th>\n",
              "      <td>지속하고</td>\n",
              "      <td>9.20</td>\n",
              "      <td>10.32</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>13</th>\n",
              "      <td>더</td>\n",
              "      <td>10.32</td>\n",
              "      <td>10.40</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>14</th>\n",
              "      <td>극심할</td>\n",
              "      <td>10.40</td>\n",
              "      <td>11.12</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>15</th>\n",
              "      <td>수</td>\n",
              "      <td>11.12</td>\n",
              "      <td>11.54</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>16</th>\n",
              "      <td>있습니다</td>\n",
              "      <td>11.54</td>\n",
              "      <td>12.20</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>\n",
              "      <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-11c3b1ef-dd9f-4bd8-8103-641b6b173989')\"\n",
              "              title=\"Convert this dataframe to an interactive table.\"\n",
              "              style=\"display:none;\">\n",
              "        \n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "       width=\"24px\">\n",
              "    <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\n",
              "    <path d=\"M18.56 5.44l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94zm-11 1L8.5 8.5l.94-2.06 2.06-.94-2.06-.94L8.5 2.5l-.94 2.06-2.06.94zm10 10l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94z\"/><path d=\"M17.41 7.96l-1.37-1.37c-.4-.4-.92-.59-1.43-.59-.52 0-1.04.2-1.43.59L10.3 9.45l-7.72 7.72c-.78.78-.78 2.05 0 2.83L4 21.41c.39.39.9.59 1.41.59.51 0 1.02-.2 1.41-.59l7.78-7.78 2.81-2.81c.8-.78.8-2.07 0-2.86zM5.41 20L4 18.59l7.72-7.72 1.47 1.35L5.41 20z\"/>\n",
              "  </svg>\n",
              "      </button>\n",
              "      \n",
              "  <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      flex-wrap:wrap;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "      <script>\n",
              "        const buttonEl =\n",
              "          document.querySelector('#df-11c3b1ef-dd9f-4bd8-8103-641b6b173989 button.colab-df-convert');\n",
              "        buttonEl.style.display =\n",
              "          google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "        async function convertToInteractive(key) {\n",
              "          const element = document.querySelector('#df-11c3b1ef-dd9f-4bd8-8103-641b6b173989');\n",
              "          const dataTable =\n",
              "            await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                     [key], {});\n",
              "          if (!dataTable) return;\n",
              "\n",
              "          const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "            '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "            + ' to learn more about interactive tables.';\n",
              "          element.innerHTML = '';\n",
              "          dataTable['output_type'] = 'display_data';\n",
              "          await google.colab.output.renderOutput(dataTable, element);\n",
              "          const docLink = document.createElement('div');\n",
              "          docLink.innerHTML = docLinkHtml;\n",
              "          element.appendChild(docLink);\n",
              "        }\n",
              "      </script>\n",
              "    </div>\n",
              "  </div>\n",
              "  "
            ]
          },
          "metadata": {}
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ],
            "text/html": [
              "<hr>"
            ]
          },
          "metadata": {}
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            " 불행히도 운전자의 행동이 100% 확실하다고 예측할 수 없기 때문에 교통 흐름을 연구하기란 어렵다.\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 576x576 with 1 Axes>"
            ],
            "image/png": "[encoded data, 595264 characters]\n"
          },
          "metadata": {
            "image/png": {
              "width": 583,
              "height": 479
            },
            "needs_background": "light"
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "      word  begin   end\n",
              "0     불행히도   1.42  2.10\n",
              "1     운전자의   2.10  2.70\n",
              "2      행동이   2.70  3.20\n",
              "3      100   3.20  3.44\n",
              "4        %   3.44  3.58\n",
              "5    확실하다고   3.58  4.26\n",
              "6      예측할   4.26  4.74\n",
              "7        수   4.74  4.90\n",
              "8       없기   4.90  5.80\n",
              "9      때문에   5.80  6.02\n",
              "10      교통   6.02  6.32\n",
              "11     흐름을   6.32  6.80\n",
              "12   연구하기란   6.80  7.58\n",
              "13     어렵다   7.58  8.72"
            ],
            "text/html": [
              "\n",
              "  <div id=\"df-18077ba0-2503-4c0b-a706-25249da6402f\">\n",
              "    <div class=\"colab-df-container\">\n",
              "      <div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>word</th>\n",
              "      <th>begin</th>\n",
              "      <th>end</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>불행히도</td>\n",
              "      <td>1.42</td>\n",
              "      <td>2.10</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>운전자의</td>\n",
              "      <td>2.10</td>\n",
              "      <td>2.70</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>행동이</td>\n",
              "      <td>2.70</td>\n",
              "      <td>3.20</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>100</td>\n",
              "      <td>3.20</td>\n",
              "      <td>3.44</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>%</td>\n",
              "      <td>3.44</td>\n",
              "      <td>3.58</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>5</th>\n",
              "      <td>확실하다고</td>\n",
              "      <td>3.58</td>\n",
              "      <td>4.26</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>6</th>\n",
              "      <td>예측할</td>\n",
              "      <td>4.26</td>\n",
              "      <td>4.74</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>7</th>\n",
              "      <td>수</td>\n",
              "      <td>4.74</td>\n",
              "      <td>4.90</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>8</th>\n",
              "      <td>없기</td>\n",
              "      <td>4.90</td>\n",
              "      <td>5.80</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>9</th>\n",
              "      <td>때문에</td>\n",
              "      <td>5.80</td>\n",
              "      <td>6.02</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>10</th>\n",
              "      <td>교통</td>\n",
              "      <td>6.02</td>\n",
              "      <td>6.32</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>11</th>\n",
              "      <td>흐름을</td>\n",
              "      <td>6.32</td>\n",
              "      <td>6.80</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>12</th>\n",
              "      <td>연구하기란</td>\n",
              "      <td>6.80</td>\n",
              "      <td>7.58</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>13</th>\n",
              "      <td>어렵다</td>\n",
              "      <td>7.58</td>\n",
              "      <td>8.72</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>\n",
              "      <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-18077ba0-2503-4c0b-a706-25249da6402f')\"\n",
              "              title=\"Convert this dataframe to an interactive table.\"\n",
              "              style=\"display:none;\">\n",
              "        \n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "       width=\"24px\">\n",
              "    <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\n",
              "    <path d=\"M18.56 5.44l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94zm-11 1L8.5 8.5l.94-2.06 2.06-.94-2.06-.94L8.5 2.5l-.94 2.06-2.06.94zm10 10l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94z\"/><path d=\"M17.41 7.96l-1.37-1.37c-.4-.4-.92-.59-1.43-.59-.52 0-1.04.2-1.43.59L10.3 9.45l-7.72 7.72c-.78.78-.78 2.05 0 2.83L4 21.41c.39.39.9.59 1.41.59.51 0 1.02-.2 1.41-.59l7.78-7.78 2.81-2.81c.8-.78.8-2.07 0-2.86zM5.41 20L4 18.59l7.72-7.72 1.47 1.35L5.41 20z\"/>\n",
              "  </svg>\n",
              "      </button>\n",
              "      \n",
              "  <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      flex-wrap:wrap;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "      <script>\n",
              "        const buttonEl =\n",
              "          document.querySelector('#df-18077ba0-2503-4c0b-a706-25249da6402f button.colab-df-convert');\n",
              "        buttonEl.style.display =\n",
              "          google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "        async function convertToInteractive(key) {\n",
              "          const element = document.querySelector('#df-18077ba0-2503-4c0b-a706-25249da6402f');\n",
              "          const dataTable =\n",
              "            await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                     [key], {});\n",
              "          if (!dataTable) return;\n",
              "\n",
              "          const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "            '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "            + ' to learn more about interactive tables.';\n",
              "          element.innerHTML = '';\n",
              "          dataTable['output_type'] = 'display_data';\n",
              "          await google.colab.output.renderOutput(dataTable, element);\n",
              "          const docLink = document.createElement('div');\n",
              "          docLink.innerHTML = docLinkHtml;\n",
              "          element.appendChild(docLink);\n",
              "        }\n",
              "      </script>\n",
              "    </div>\n",
              "  </div>\n",
              "  "
            ]
          },
          "metadata": {}
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ],
            "text/html": [
              "<hr>"
            ]
          },
          "metadata": {}
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            " 합금은 기본적으로 금속 2개 이상의 혼합물이다. 주기율표상의 원소가 많이 있다는 것을 잊지 마라.\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 576x576 with 1 Axes>"
            ],
            "image/png": "[encoded data, 536848 characters]\n"
          },
          "metadata": {
            "image/png": {
              "width": 579,
              "height": 479
            },
            "needs_background": "light"
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "       word  begin   end\n",
              "0       합금은   1.20  1.82\n",
              "1     기본적으로   1.82  2.58\n",
              "2        금속   2.58  2.96\n",
              "3        2개   2.96  3.34\n",
              "4       이상의   3.34  3.62\n",
              "5     혼합물이다   3.62  4.58\n",
              "6    주기율표상의   4.78  5.68\n",
              "7       원소가   5.68  6.34\n",
              "8        많이   6.34  6.70\n",
              "9       있다는   6.70  7.12\n",
              "10       것을   7.12  7.44\n",
              "11       잊지   7.44  7.72\n",
              "12       마라   7.72  8.74"
            ],
            "text/html": [
              "\n",
              "  <div id=\"df-e69c2518-4d82-4fee-a494-80a634fd2609\">\n",
              "    <div class=\"colab-df-container\">\n",
              "      <div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>word</th>\n",
              "      <th>begin</th>\n",
              "      <th>end</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>합금은</td>\n",
              "      <td>1.20</td>\n",
              "      <td>1.82</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>기본적으로</td>\n",
              "      <td>1.82</td>\n",
              "      <td>2.58</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>금속</td>\n",
              "      <td>2.58</td>\n",
              "      <td>2.96</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>2개</td>\n",
              "      <td>2.96</td>\n",
              "      <td>3.34</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>이상의</td>\n",
              "      <td>3.34</td>\n",
              "      <td>3.62</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>5</th>\n",
              "      <td>혼합물이다</td>\n",
              "      <td>3.62</td>\n",
              "      <td>4.58</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>6</th>\n",
              "      <td>주기율표상의</td>\n",
              "      <td>4.78</td>\n",
              "      <td>5.68</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>7</th>\n",
              "      <td>원소가</td>\n",
              "      <td>5.68</td>\n",
              "      <td>6.34</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>8</th>\n",
              "      <td>많이</td>\n",
              "      <td>6.34</td>\n",
              "      <td>6.70</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>9</th>\n",
              "      <td>있다는</td>\n",
              "      <td>6.70</td>\n",
              "      <td>7.12</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>10</th>\n",
              "      <td>것을</td>\n",
              "      <td>7.12</td>\n",
              "      <td>7.44</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>11</th>\n",
              "      <td>잊지</td>\n",
              "      <td>7.44</td>\n",
              "      <td>7.72</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>12</th>\n",
              "      <td>마라</td>\n",
              "      <td>7.72</td>\n",
              "      <td>8.74</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>\n",
              "      <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-e69c2518-4d82-4fee-a494-80a634fd2609')\"\n",
              "              title=\"Convert this dataframe to an interactive table.\"\n",
              "              style=\"display:none;\">\n",
              "        \n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "       width=\"24px\">\n",
              "    <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\n",
              "    <path d=\"M18.56 5.44l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94zm-11 1L8.5 8.5l.94-2.06 2.06-.94-2.06-.94L8.5 2.5l-.94 2.06-2.06.94zm10 10l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94z\"/><path d=\"M17.41 7.96l-1.37-1.37c-.4-.4-.92-.59-1.43-.59-.52 0-1.04.2-1.43.59L10.3 9.45l-7.72 7.72c-.78.78-.78 2.05 0 2.83L4 21.41c.39.39.9.59 1.41.59.51 0 1.02-.2 1.41-.59l7.78-7.78 2.81-2.81c.8-.78.8-2.07 0-2.86zM5.41 20L4 18.59l7.72-7.72 1.47 1.35L5.41 20z\"/>\n",
              "  </svg>\n",
              "      </button>\n",
              "      \n",
              "  <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      flex-wrap:wrap;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "      <script>\n",
              "        const buttonEl =\n",
              "          document.querySelector('#df-e69c2518-4d82-4fee-a494-80a634fd2609 button.colab-df-convert');\n",
              "        buttonEl.style.display =\n",
              "          google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "        async function convertToInteractive(key) {\n",
              "          const element = document.querySelector('#df-e69c2518-4d82-4fee-a494-80a634fd2609');\n",
              "          const dataTable =\n",
              "            await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                     [key], {});\n",
              "          if (!dataTable) return;\n",
              "\n",
              "          const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "            '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "            + ' to learn more about interactive tables.';\n",
              "          element.innerHTML = '';\n",
              "          dataTable['output_type'] = 'display_data';\n",
              "          await google.colab.output.renderOutput(dataTable, element);\n",
              "          const docLink = document.createElement('div');\n",
              "          docLink.innerHTML = docLinkHtml;\n",
              "          element.appendChild(docLink);\n",
              "        }\n",
              "      </script>\n",
              "    </div>\n",
              "  </div>\n",
              "  "
            ]
          },
          "metadata": {}
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ],
            "text/html": [
              "<hr>"
            ]
          },
          "metadata": {}
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            " 홍콩섬은 홍콩 영토에 홍콩이라는 이름을 부여한 곳이자 많은 관광객들이 주한점으로 여기는 곳이다.\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 576x576 with 1 Axes>"
            ],
            "image/png": "[encoded data, 561068 characters]\n"
          },
          "metadata": {
            "image/png": {
              "width": 579,
              "height": 479
            },
            "needs_background": "light"
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "      word  begin   end\n",
              "0     홍콩섬은   1.50  2.36\n",
              "1       홍콩   2.36  2.76\n",
              "2      영토에   2.76  3.26\n",
              "3    홍콩이라는   3.26  4.06\n",
              "4      이름을   4.06  4.40\n",
              "5      부여한   4.40  4.78\n",
              "6      곳이자   4.78  5.56\n",
              "7       많은   5.56  5.78\n",
              "8    관광객들이   5.78  6.62\n",
              "9    주한점으로   6.62  7.40\n",
              "10     여기는   7.40  7.64\n",
              "11     곳이다   7.64  8.58"
            ],
            "text/html": [
              "\n",
              "  <div id=\"df-ef725362-0aa1-4c5c-ae44-a9f9575b0a24\">\n",
              "    <div class=\"colab-df-container\">\n",
              "      <div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>word</th>\n",
              "      <th>begin</th>\n",
              "      <th>end</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>홍콩섬은</td>\n",
              "      <td>1.50</td>\n",
              "      <td>2.36</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>홍콩</td>\n",
              "      <td>2.36</td>\n",
              "      <td>2.76</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>영토에</td>\n",
              "      <td>2.76</td>\n",
              "      <td>3.26</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>홍콩이라는</td>\n",
              "      <td>3.26</td>\n",
              "      <td>4.06</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>이름을</td>\n",
              "      <td>4.06</td>\n",
              "      <td>4.40</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>5</th>\n",
              "      <td>부여한</td>\n",
              "      <td>4.40</td>\n",
              "      <td>4.78</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>6</th>\n",
              "      <td>곳이자</td>\n",
              "      <td>4.78</td>\n",
              "      <td>5.56</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>7</th>\n",
              "      <td>많은</td>\n",
              "      <td>5.56</td>\n",
              "      <td>5.78</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>8</th>\n",
              "      <td>관광객들이</td>\n",
              "      <td>5.78</td>\n",
              "      <td>6.62</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>9</th>\n",
              "      <td>주한점으로</td>\n",
              "      <td>6.62</td>\n",
              "      <td>7.40</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>10</th>\n",
              "      <td>여기는</td>\n",
              "      <td>7.40</td>\n",
              "      <td>7.64</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>11</th>\n",
              "      <td>곳이다</td>\n",
              "      <td>7.64</td>\n",
              "      <td>8.58</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>\n",
              "      <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-ef725362-0aa1-4c5c-ae44-a9f9575b0a24')\"\n",
              "              title=\"Convert this dataframe to an interactive table.\"\n",
              "              style=\"display:none;\">\n",
              "        \n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "       width=\"24px\">\n",
              "    <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\n",
              "    <path d=\"M18.56 5.44l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94zm-11 1L8.5 8.5l.94-2.06 2.06-.94-2.06-.94L8.5 2.5l-.94 2.06-2.06.94zm10 10l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94z\"/><path d=\"M17.41 7.96l-1.37-1.37c-.4-.4-.92-.59-1.43-.59-.52 0-1.04.2-1.43.59L10.3 9.45l-7.72 7.72c-.78.78-.78 2.05 0 2.83L4 21.41c.39.39.9.59 1.41.59.51 0 1.02-.2 1.41-.59l7.78-7.78 2.81-2.81c.8-.78.8-2.07 0-2.86zM5.41 20L4 18.59l7.72-7.72 1.47 1.35L5.41 20z\"/>\n",
              "  </svg>\n",
              "      </button>\n",
              "      \n",
              "  <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      flex-wrap:wrap;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "      <script>\n",
              "        const buttonEl =\n",
              "          document.querySelector('#df-ef725362-0aa1-4c5c-ae44-a9f9575b0a24 button.colab-df-convert');\n",
              "        buttonEl.style.display =\n",
              "          google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "        async function convertToInteractive(key) {\n",
              "          const element = document.querySelector('#df-ef725362-0aa1-4c5c-ae44-a9f9575b0a24');\n",
              "          const dataTable =\n",
              "            await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                     [key], {});\n",
              "          if (!dataTable) return;\n",
              "\n",
              "          const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "            '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "            + ' to learn more about interactive tables.';\n",
              "          element.innerHTML = '';\n",
              "          dataTable['output_type'] = 'display_data';\n",
              "          await google.colab.output.renderOutput(dataTable, element);\n",
              "          const docLink = document.createElement('div');\n",
              "          docLink.innerHTML = docLinkHtml;\n",
              "          element.appendChild(docLink);\n",
              "        }\n",
              "      </script>\n",
              "    </div>\n",
              "  </div>\n",
              "  "
            ]
          },
          "metadata": {}
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ],
            "text/html": [
              "<hr>"
            ]
          },
          "metadata": {}
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            " 남자들을 단호히 거절하고 자신의 입장을 고수하는 것을 두려워하지 말라. 문화적 차이든 아니든 희롱은 간과 될 수 없다.\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 576x576 with 1 Axes>"
            ],
            "image/png": "[encoded data, 579948 characters]\n"
          },
          "metadata": {
            "image/png": {
              "width": 583,
              "height": 479
            },
            "needs_background": "light"
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "      word  begin    end\n",
              "0     남자들을   1.58   2.38\n",
              "1      단호히   2.38   2.70\n",
              "2     거절하고   2.70   3.92\n",
              "3      자신의   3.92   4.22\n",
              "4      입장을   4.22   4.70\n",
              "5     고수하는   4.70   5.38\n",
              "6       것을   5.38   5.60\n",
              "7    두려워하지   5.60   6.26\n",
              "8       말라   6.26   6.96\n",
              "9      문화적   7.14   7.66\n",
              "10     차이든   7.66   8.38\n",
              "11     아니든   8.38   8.96\n",
              "12     희롱은   8.96   9.62\n",
              "13      간과   9.62   9.94\n",
              "14       될   9.94  10.20\n",
              "15       수  10.20  10.52\n",
              "16      없다  10.52  11.10"
            ],
            "text/html": [
              "\n",
              "  <div id=\"df-c54753a1-d58e-4a9e-b52b-80ae365d64ad\">\n",
              "    <div class=\"colab-df-container\">\n",
              "      <div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>word</th>\n",
              "      <th>begin</th>\n",
              "      <th>end</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>남자들을</td>\n",
              "      <td>1.58</td>\n",
              "      <td>2.38</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>단호히</td>\n",
              "      <td>2.38</td>\n",
              "      <td>2.70</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>거절하고</td>\n",
              "      <td>2.70</td>\n",
              "      <td>3.92</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>자신의</td>\n",
              "      <td>3.92</td>\n",
              "      <td>4.22</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>입장을</td>\n",
              "      <td>4.22</td>\n",
              "      <td>4.70</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>5</th>\n",
              "      <td>고수하는</td>\n",
              "      <td>4.70</td>\n",
              "      <td>5.38</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>6</th>\n",
              "      <td>것을</td>\n",
              "      <td>5.38</td>\n",
              "      <td>5.60</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>7</th>\n",
              "      <td>두려워하지</td>\n",
              "      <td>5.60</td>\n",
              "      <td>6.26</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>8</th>\n",
              "      <td>말라</td>\n",
              "      <td>6.26</td>\n",
              "      <td>6.96</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>9</th>\n",
              "      <td>문화적</td>\n",
              "      <td>7.14</td>\n",
              "      <td>7.66</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>10</th>\n",
              "      <td>차이든</td>\n",
              "      <td>7.66</td>\n",
              "      <td>8.38</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>11</th>\n",
              "      <td>아니든</td>\n",
              "      <td>8.38</td>\n",
              "      <td>8.96</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>12</th>\n",
              "      <td>희롱은</td>\n",
              "      <td>8.96</td>\n",
              "      <td>9.62</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>13</th>\n",
              "      <td>간과</td>\n",
              "      <td>9.62</td>\n",
              "      <td>9.94</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>14</th>\n",
              "      <td>될</td>\n",
              "      <td>9.94</td>\n",
              "      <td>10.20</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>15</th>\n",
              "      <td>수</td>\n",
              "      <td>10.20</td>\n",
              "      <td>10.52</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>16</th>\n",
              "      <td>없다</td>\n",
              "      <td>10.52</td>\n",
              "      <td>11.10</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>\n",
              "      <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-c54753a1-d58e-4a9e-b52b-80ae365d64ad')\"\n",
              "              title=\"Convert this dataframe to an interactive table.\"\n",
              "              style=\"display:none;\">\n",
              "        \n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "       width=\"24px\">\n",
              "    <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\n",
              "    <path d=\"M18.56 5.44l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94zm-11 1L8.5 8.5l.94-2.06 2.06-.94-2.06-.94L8.5 2.5l-.94 2.06-2.06.94zm10 10l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94z\"/><path d=\"M17.41 7.96l-1.37-1.37c-.4-.4-.92-.59-1.43-.59-.52 0-1.04.2-1.43.59L10.3 9.45l-7.72 7.72c-.78.78-.78 2.05 0 2.83L4 21.41c.39.39.9.59 1.41.59.51 0 1.02-.2 1.41-.59l7.78-7.78 2.81-2.81c.8-.78.8-2.07 0-2.86zM5.41 20L4 18.59l7.72-7.72 1.47 1.35L5.41 20z\"/>\n",
              "  </svg>\n",
              "      </button>\n",
              "      \n",
              "  <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      flex-wrap:wrap;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "      <script>\n",
              "        const buttonEl =\n",
              "          document.querySelector('#df-c54753a1-d58e-4a9e-b52b-80ae365d64ad button.colab-df-convert');\n",
              "        buttonEl.style.display =\n",
              "          google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "        async function convertToInteractive(key) {\n",
              "          const element = document.querySelector('#df-c54753a1-d58e-4a9e-b52b-80ae365d64ad');\n",
              "          const dataTable =\n",
              "            await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                     [key], {});\n",
              "          if (!dataTable) return;\n",
              "\n",
              "          const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "            '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "            + ' to learn more about interactive tables.';\n",
              "          element.innerHTML = '';\n",
              "          dataTable['output_type'] = 'display_data';\n",
              "          await google.colab.output.renderOutput(dataTable, element);\n",
              "          const docLink = document.createElement('div');\n",
              "          docLink.innerHTML = docLinkHtml;\n",
              "          element.appendChild(docLink);\n",
              "        }\n",
              "      </script>\n",
              "    </div>\n",
              "  </div>\n",
              "  "
            ]
          },
          "metadata": {}
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ],
            "text/html": [
              "<hr>"
            ]
          },
          "metadata": {}
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            " 좀 더 작은 섬의 대부분은 독립국가이거나 프랑스와 관련이 있고, 호화로운 비치 리조트로 알려져 있다.\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 576x576 with 1 Axes>"
            ],
            "image/png": "[encoded data, 560724 characters]\n"
          },
          "metadata": {
            "image/png": {
              "width": 583,
              "height": 479
            },
            "needs_background": "light"
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "        word  begin    end\n",
              "0          좀   2.68   3.06\n",
              "1          더   3.06   3.24\n",
              "2         작은   3.24   3.42\n",
              "3         섬의   3.42   3.74\n",
              "4       대부분은   3.74   4.86\n",
              "5    독립국가이거나   4.86   6.08\n",
              "6       프랑스와   6.08   6.90\n",
              "7        관련이   6.90   7.82\n",
              "8         있고   7.82   8.08\n",
              "9       호화로운   8.16   8.78\n",
              "10        비치   8.78   9.18\n",
              "11      리조트로   9.18   9.88\n",
              "12       알려져   9.88  10.46\n",
              "13        있다  10.46  10.70"
            ],
            "text/html": [
              "\n",
              "  <div id=\"df-e11b6226-cd74-4dee-84c6-02fb64f68d80\">\n",
              "    <div class=\"colab-df-container\">\n",
              "      <div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>word</th>\n",
              "      <th>begin</th>\n",
              "      <th>end</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>좀</td>\n",
              "      <td>2.68</td>\n",
              "      <td>3.06</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>더</td>\n",
              "      <td>3.06</td>\n",
              "      <td>3.24</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>작은</td>\n",
              "      <td>3.24</td>\n",
              "      <td>3.42</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>섬의</td>\n",
              "      <td>3.42</td>\n",
              "      <td>3.74</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>대부분은</td>\n",
              "      <td>3.74</td>\n",
              "      <td>4.86</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>5</th>\n",
              "      <td>독립국가이거나</td>\n",
              "      <td>4.86</td>\n",
              "      <td>6.08</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>6</th>\n",
              "      <td>프랑스와</td>\n",
              "      <td>6.08</td>\n",
              "      <td>6.90</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>7</th>\n",
              "      <td>관련이</td>\n",
              "      <td>6.90</td>\n",
              "      <td>7.82</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>8</th>\n",
              "      <td>있고</td>\n",
              "      <td>7.82</td>\n",
              "      <td>8.08</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>9</th>\n",
              "      <td>호화로운</td>\n",
              "      <td>8.16</td>\n",
              "      <td>8.78</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>10</th>\n",
              "      <td>비치</td>\n",
              "      <td>8.78</td>\n",
              "      <td>9.18</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>11</th>\n",
              "      <td>리조트로</td>\n",
              "      <td>9.18</td>\n",
              "      <td>9.88</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>12</th>\n",
              "      <td>알려져</td>\n",
              "      <td>9.88</td>\n",
              "      <td>10.46</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>13</th>\n",
              "      <td>있다</td>\n",
              "      <td>10.46</td>\n",
              "      <td>10.70</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>\n",
              "      <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-e11b6226-cd74-4dee-84c6-02fb64f68d80')\"\n",
              "              title=\"Convert this dataframe to an interactive table.\"\n",
              "              style=\"display:none;\">\n",
              "        \n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "       width=\"24px\">\n",
              "    <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\n",
              "    <path d=\"M18.56 5.44l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94zm-11 1L8.5 8.5l.94-2.06 2.06-.94-2.06-.94L8.5 2.5l-.94 2.06-2.06.94zm10 10l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94z\"/><path d=\"M17.41 7.96l-1.37-1.37c-.4-.4-.92-.59-1.43-.59-.52 0-1.04.2-1.43.59L10.3 9.45l-7.72 7.72c-.78.78-.78 2.05 0 2.83L4 21.41c.39.39.9.59 1.41.59.51 0 1.02-.2 1.41-.59l7.78-7.78 2.81-2.81c.8-.78.8-2.07 0-2.86zM5.41 20L4 18.59l7.72-7.72 1.47 1.35L5.41 20z\"/>\n",
              "  </svg>\n",
              "      </button>\n",
              "      \n",
              "  <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      flex-wrap:wrap;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "      <script>\n",
              "        const buttonEl =\n",
              "          document.querySelector('#df-e11b6226-cd74-4dee-84c6-02fb64f68d80 button.colab-df-convert');\n",
              "        buttonEl.style.display =\n",
              "          google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "        async function convertToInteractive(key) {\n",
              "          const element = document.querySelector('#df-e11b6226-cd74-4dee-84c6-02fb64f68d80');\n",
              "          const dataTable =\n",
              "            await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                     [key], {});\n",
              "          if (!dataTable) return;\n",
              "\n",
              "          const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "            '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "            + ' to learn more about interactive tables.';\n",
              "          element.innerHTML = '';\n",
              "          dataTable['output_type'] = 'display_data';\n",
              "          await google.colab.output.renderOutput(dataTable, element);\n",
              "          const docLink = document.createElement('div');\n",
              "          docLink.innerHTML = docLinkHtml;\n",
              "          element.appendChild(docLink);\n",
              "        }\n",
              "      </script>\n",
              "    </div>\n",
              "  </div>\n",
              "  "
            ]
          },
          "metadata": {}
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ],
            "text/html": [
              "<hr>"
            ]
          },
          "metadata": {}
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            " 사실 이게 존재한다는 사실을 아는 사람이 있다고 해도 찾는 것조차 쉽지 않습니다. 일단 동그란에 들어가면 완전한 고립입니다.\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 576x576 with 1 Axes>"
            ],
            "image/png": "[encoded data, 588940 characters]\n"
          },
          "metadata": {
            "image/png": {
              "width": 579,
              "height": 479
            },
            "needs_background": "light"
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "      word  begin   end\n",
              "0       사실   1.62  2.04\n",
              "1       이게   2.04  2.20\n",
              "2    존재한다는   2.20  3.08\n",
              "3      사실을   3.08  3.40\n",
              "4       아는   3.40  3.84\n",
              "5      사람이   3.84  4.16\n",
              "6      있다고   4.16  4.64\n",
              "7       해도   4.64  4.88\n",
              "8       찾는   4.88  5.22\n",
              "9      것조차   5.22  5.72\n",
              "10      쉽지   5.72  6.08\n",
              "11    않습니다   6.08  7.14\n",
              "12      일단   7.34  7.56\n",
              "13    동그란에   7.56  8.18\n",
              "14    들어가면   8.18  8.98\n",
              "15     완전한   8.98  9.40\n",
              "16   고립입니다   9.40  9.98"
            ],
            "text/html": [
              "\n",
              "  <div id=\"df-66351244-b8b2-46fe-bb3e-b5b003e92037\">\n",
              "    <div class=\"colab-df-container\">\n",
              "      <div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>word</th>\n",
              "      <th>begin</th>\n",
              "      <th>end</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>사실</td>\n",
              "      <td>1.62</td>\n",
              "      <td>2.04</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>이게</td>\n",
              "      <td>2.04</td>\n",
              "      <td>2.20</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>존재한다는</td>\n",
              "      <td>2.20</td>\n",
              "      <td>3.08</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>사실을</td>\n",
              "      <td>3.08</td>\n",
              "      <td>3.40</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>아는</td>\n",
              "      <td>3.40</td>\n",
              "      <td>3.84</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>5</th>\n",
              "      <td>사람이</td>\n",
              "      <td>3.84</td>\n",
              "      <td>4.16</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>6</th>\n",
              "      <td>있다고</td>\n",
              "      <td>4.16</td>\n",
              "      <td>4.64</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>7</th>\n",
              "      <td>해도</td>\n",
              "      <td>4.64</td>\n",
              "      <td>4.88</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>8</th>\n",
              "      <td>찾는</td>\n",
              "      <td>4.88</td>\n",
              "      <td>5.22</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>9</th>\n",
              "      <td>것조차</td>\n",
              "      <td>5.22</td>\n",
              "      <td>5.72</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>10</th>\n",
              "      <td>쉽지</td>\n",
              "      <td>5.72</td>\n",
              "      <td>6.08</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>11</th>\n",
              "      <td>않습니다</td>\n",
              "      <td>6.08</td>\n",
              "      <td>7.14</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>12</th>\n",
              "      <td>일단</td>\n",
              "      <td>7.34</td>\n",
              "      <td>7.56</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>13</th>\n",
              "      <td>동그란에</td>\n",
              "      <td>7.56</td>\n",
              "      <td>8.18</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>14</th>\n",
              "      <td>들어가면</td>\n",
              "      <td>8.18</td>\n",
              "      <td>8.98</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>15</th>\n",
              "      <td>완전한</td>\n",
              "      <td>8.98</td>\n",
              "      <td>9.40</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>16</th>\n",
              "      <td>고립입니다</td>\n",
              "      <td>9.40</td>\n",
              "      <td>9.98</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>\n",
              "      <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-66351244-b8b2-46fe-bb3e-b5b003e92037')\"\n",
              "              title=\"Convert this dataframe to an interactive table.\"\n",
              "              style=\"display:none;\">\n",
              "        \n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "       width=\"24px\">\n",
              "    <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\n",
              "    <path d=\"M18.56 5.44l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94zm-11 1L8.5 8.5l.94-2.06 2.06-.94-2.06-.94L8.5 2.5l-.94 2.06-2.06.94zm10 10l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94z\"/><path d=\"M17.41 7.96l-1.37-1.37c-.4-.4-.92-.59-1.43-.59-.52 0-1.04.2-1.43.59L10.3 9.45l-7.72 7.72c-.78.78-.78 2.05 0 2.83L4 21.41c.39.39.9.59 1.41.59.51 0 1.02-.2 1.41-.59l7.78-7.78 2.81-2.81c.8-.78.8-2.07 0-2.86zM5.41 20L4 18.59l7.72-7.72 1.47 1.35L5.41 20z\"/>\n",
              "  </svg>\n",
              "      </button>\n",
              "      \n",
              "  <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      flex-wrap:wrap;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "      <script>\n",
              "        const buttonEl =\n",
              "          document.querySelector('#df-66351244-b8b2-46fe-bb3e-b5b003e92037 button.colab-df-convert');\n",
              "        buttonEl.style.display =\n",
              "          google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "        async function convertToInteractive(key) {\n",
              "          const element = document.querySelector('#df-66351244-b8b2-46fe-bb3e-b5b003e92037');\n",
              "          const dataTable =\n",
              "            await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                     [key], {});\n",
              "          if (!dataTable) return;\n",
              "\n",
              "          const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "            '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "            + ' to learn more about interactive tables.';\n",
              "          element.innerHTML = '';\n",
              "          dataTable['output_type'] = 'display_data';\n",
              "          await google.colab.output.renderOutput(dataTable, element);\n",
              "          const docLink = document.createElement('div');\n",
              "          docLink.innerHTML = docLinkHtml;\n",
              "          element.appendChild(docLink);\n",
              "        }\n",
              "      </script>\n",
              "    </div>\n",
              "  </div>\n",
              "  "
            ]
          },
          "metadata": {}
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ],
            "text/html": [
              "<hr>"
            ]
          },
          "metadata": {}
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            " 원단이 너무 뜨거워지지 않도록 주의하세요. 원단이 수축하거나 그을릴 수 있습니다.\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 576x576 with 1 Axes>"
            ],
            "image/png": "[encoded data, 556372 characters]\n"
          },
          "metadata": {
            "image/png": {
              "width": 579,
              "height": 479
            },
            "needs_background": "light"
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "     word  begin   end\n",
              "0     원단이   2.54  3.20\n",
              "1      너무   3.20  3.42\n",
              "2   뜨거워지지   3.42  4.20\n",
              "3     않도록   4.20  4.64\n",
              "4   주의하세요   4.64  5.92\n",
              "5     원단이   5.96  6.46\n",
              "6   수축하거나   6.46  7.50\n",
              "7     그을릴   7.50  8.00\n",
              "8       수   8.00  8.64\n",
              "9    있습니다   8.64  9.06"
            ],
            "text/html": [
              "\n",
              "  <div id=\"df-af0af724-1c5e-4cd0-846a-f670583dcbca\">\n",
              "    <div class=\"colab-df-container\">\n",
              "      <div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>word</th>\n",
              "      <th>begin</th>\n",
              "      <th>end</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>원단이</td>\n",
              "      <td>2.54</td>\n",
              "      <td>3.20</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>너무</td>\n",
              "      <td>3.20</td>\n",
              "      <td>3.42</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>뜨거워지지</td>\n",
              "      <td>3.42</td>\n",
              "      <td>4.20</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>않도록</td>\n",
              "      <td>4.20</td>\n",
              "      <td>4.64</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>주의하세요</td>\n",
              "      <td>4.64</td>\n",
              "      <td>5.92</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>5</th>\n",
              "      <td>원단이</td>\n",
              "      <td>5.96</td>\n",
              "      <td>6.46</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>6</th>\n",
              "      <td>수축하거나</td>\n",
              "      <td>6.46</td>\n",
              "      <td>7.50</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>7</th>\n",
              "      <td>그을릴</td>\n",
              "      <td>7.50</td>\n",
              "      <td>8.00</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>8</th>\n",
              "      <td>수</td>\n",
              "      <td>8.00</td>\n",
              "      <td>8.64</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>9</th>\n",
              "      <td>있습니다</td>\n",
              "      <td>8.64</td>\n",
              "      <td>9.06</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>\n",
              "      <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-af0af724-1c5e-4cd0-846a-f670583dcbca')\"\n",
              "              title=\"Convert this dataframe to an interactive table.\"\n",
              "              style=\"display:none;\">\n",
              "        \n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "       width=\"24px\">\n",
              "    <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\n",
              "    <path d=\"M18.56 5.44l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94zm-11 1L8.5 8.5l.94-2.06 2.06-.94-2.06-.94L8.5 2.5l-.94 2.06-2.06.94zm10 10l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94z\"/><path d=\"M17.41 7.96l-1.37-1.37c-.4-.4-.92-.59-1.43-.59-.52 0-1.04.2-1.43.59L10.3 9.45l-7.72 7.72c-.78.78-.78 2.05 0 2.83L4 21.41c.39.39.9.59 1.41.59.51 0 1.02-.2 1.41-.59l7.78-7.78 2.81-2.81c.8-.78.8-2.07 0-2.86zM5.41 20L4 18.59l7.72-7.72 1.47 1.35L5.41 20z\"/>\n",
              "  </svg>\n",
              "      </button>\n",
              "      \n",
              "  <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      flex-wrap:wrap;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "      <script>\n",
              "        const buttonEl =\n",
              "          document.querySelector('#df-af0af724-1c5e-4cd0-846a-f670583dcbca button.colab-df-convert');\n",
              "        buttonEl.style.display =\n",
              "          google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "        async function convertToInteractive(key) {\n",
              "          const element = document.querySelector('#df-af0af724-1c5e-4cd0-846a-f670583dcbca');\n",
              "          const dataTable =\n",
              "            await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                     [key], {});\n",
              "          if (!dataTable) return;\n",
              "\n",
              "          const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "            '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "            + ' to learn more about interactive tables.';\n",
              "          element.innerHTML = '';\n",
              "          dataTable['output_type'] = 'display_data';\n",
              "          await google.colab.output.renderOutput(dataTable, element);\n",
              "          const docLink = document.createElement('div');\n",
              "          docLink.innerHTML = docLinkHtml;\n",
              "          element.appendChild(docLink);\n",
              "        }\n",
              "      </script>\n",
              "    </div>\n",
              "  </div>\n",
              "  "
            ]
          },
          "metadata": {}
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ],
            "text/html": [
              "<hr>"
            ]
          },
          "metadata": {}
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            " 도널드 트럼프 미국 대통령은 늦은 일요일 시간대에 대변인을 통해 발표한 성명에서 미군이 시리아에서 철수할 것이라고 발표했다.\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 576x576 with 1 Axes>"
            ],
            "image/png": "[encoded data, 579260 characters]\n"
          },
          "metadata": {
            "image/png": {
              "width": 579,
              "height": 479
            },
            "needs_background": "light"
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "      word  begin    end\n",
              "0      도널드   1.62   2.14\n",
              "1      트럼프   2.14   2.72\n",
              "2       미국   2.72   3.16\n",
              "3     대통령은   3.16   3.94\n",
              "4       늦은   3.94   4.48\n",
              "5      일요일   4.48   4.90\n",
              "6     시간대에   4.90   5.70\n",
              "7     대변인을   5.70   6.26\n",
              "8       통해   6.26   6.68\n",
              "9      발표한   6.68   7.14\n",
              "10    성명에서   7.14   8.30\n",
              "11     미군이   8.30   8.84\n",
              "12   시리아에서   8.84   9.54\n",
              "13     철수할   9.54  10.12\n",
              "14    것이라고  10.12  10.64\n",
              "15    발표했다  10.64  11.52"
            ],
            "text/html": [
              "\n",
              "  <div id=\"df-ea49f446-442d-489b-b2c7-ec658fb8c6ee\">\n",
              "    <div class=\"colab-df-container\">\n",
              "      <div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>word</th>\n",
              "      <th>begin</th>\n",
              "      <th>end</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>도널드</td>\n",
              "      <td>1.62</td>\n",
              "      <td>2.14</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>트럼프</td>\n",
              "      <td>2.14</td>\n",
              "      <td>2.72</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>미국</td>\n",
              "      <td>2.72</td>\n",
              "      <td>3.16</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>대통령은</td>\n",
              "      <td>3.16</td>\n",
              "      <td>3.94</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>늦은</td>\n",
              "      <td>3.94</td>\n",
              "      <td>4.48</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>5</th>\n",
              "      <td>일요일</td>\n",
              "      <td>4.48</td>\n",
              "      <td>4.90</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>6</th>\n",
              "      <td>시간대에</td>\n",
              "      <td>4.90</td>\n",
              "      <td>5.70</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>7</th>\n",
              "      <td>대변인을</td>\n",
              "      <td>5.70</td>\n",
              "      <td>6.26</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>8</th>\n",
              "      <td>통해</td>\n",
              "      <td>6.26</td>\n",
              "      <td>6.68</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>9</th>\n",
              "      <td>발표한</td>\n",
              "      <td>6.68</td>\n",
              "      <td>7.14</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>10</th>\n",
              "      <td>성명에서</td>\n",
              "      <td>7.14</td>\n",
              "      <td>8.30</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>11</th>\n",
              "      <td>미군이</td>\n",
              "      <td>8.30</td>\n",
              "      <td>8.84</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>12</th>\n",
              "      <td>시리아에서</td>\n",
              "      <td>8.84</td>\n",
              "      <td>9.54</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>13</th>\n",
              "      <td>철수할</td>\n",
              "      <td>9.54</td>\n",
              "      <td>10.12</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>14</th>\n",
              "      <td>것이라고</td>\n",
              "      <td>10.12</td>\n",
              "      <td>10.64</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>15</th>\n",
              "      <td>발표했다</td>\n",
              "      <td>10.64</td>\n",
              "      <td>11.52</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>\n",
              "      <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-ea49f446-442d-489b-b2c7-ec658fb8c6ee')\"\n",
              "              title=\"Convert this dataframe to an interactive table.\"\n",
              "              style=\"display:none;\">\n",
              "        \n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "       width=\"24px\">\n",
              "    <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\n",
              "    <path d=\"M18.56 5.44l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94zm-11 1L8.5 8.5l.94-2.06 2.06-.94-2.06-.94L8.5 2.5l-.94 2.06-2.06.94zm10 10l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94z\"/><path d=\"M17.41 7.96l-1.37-1.37c-.4-.4-.92-.59-1.43-.59-.52 0-1.04.2-1.43.59L10.3 9.45l-7.72 7.72c-.78.78-.78 2.05 0 2.83L4 21.41c.39.39.9.59 1.41.59.51 0 1.02-.2 1.41-.59l7.78-7.78 2.81-2.81c.8-.78.8-2.07 0-2.86zM5.41 20L4 18.59l7.72-7.72 1.47 1.35L5.41 20z\"/>\n",
              "  </svg>\n",
              "      </button>\n",
              "      \n",
              "  <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      flex-wrap:wrap;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "      <script>\n",
              "        const buttonEl =\n",
              "          document.querySelector('#df-ea49f446-442d-489b-b2c7-ec658fb8c6ee button.colab-df-convert');\n",
              "        buttonEl.style.display =\n",
              "          google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "        async function convertToInteractive(key) {\n",
              "          const element = document.querySelector('#df-ea49f446-442d-489b-b2c7-ec658fb8c6ee');\n",
              "          const dataTable =\n",
              "            await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                     [key], {});\n",
              "          if (!dataTable) return;\n",
              "\n",
              "          const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "            '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "            + ' to learn more about interactive tables.';\n",
              "          element.innerHTML = '';\n",
              "          dataTable['output_type'] = 'display_data';\n",
              "          await google.colab.output.renderOutput(dataTable, element);\n",
              "          const docLink = document.createElement('div');\n",
              "          docLink.innerHTML = docLinkHtml;\n",
              "          element.appendChild(docLink);\n",
              "        }\n",
              "      </script>\n",
              "    </div>\n",
              "  </div>\n",
              "  "
            ]
          },
          "metadata": {}
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ],
            "text/html": [
              "<hr>"
            ]
          },
          "metadata": {}
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            " 미국 체조협회는 미국 올림픽위원회의 서한을 지지하며 미국의 전 운동선수가 안전한 환경을 가질 수 있도록 돕는 올림픽 관계자의 절대적 필요성을 인정합니다.\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 576x576 with 1 Axes>"
            ],
            "image/png": "[encoded data, 640324 characters]\n"
          },
          "metadata": {
            "image/png": {
              "width": 579,
              "height": 479
            },
            "needs_background": "light"
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "        word  begin    end\n",
              "0         미국   2.36   2.58\n",
              "1      체조협회는   2.58   4.24\n",
              "2         미국   4.24   4.60\n",
              "3    올림픽위원회의   4.60   5.78\n",
              "4        서한을   5.78   6.26\n",
              "5       지지하며   6.26   7.76\n",
              "6        미국의   7.76   8.40\n",
              "7          전   8.40   8.66\n",
              "8      운동선수가   8.66   9.86\n",
              "9        안전한   9.86  10.46\n",
              "10       환경을  10.46  10.96\n",
              "11        가질  10.96  11.30\n",
              "12         수  11.30  11.52\n",
              "13       있도록  11.52  11.90\n",
              "14        돕는  11.90  12.86\n",
              "15       올림픽  12.86  13.46\n",
              "16      관계자의  13.46  14.28\n",
              "17       절대적  14.28  14.72\n",
              "18      필요성을  14.72  15.30\n",
              "19     인정합니다  15.30  15.84"
            ],
            "text/html": [
              "\n",
              "  <div id=\"df-6e095589-f440-4cee-ab7e-86b0c4f0deef\">\n",
              "    <div class=\"colab-df-container\">\n",
              "      <div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>word</th>\n",
              "      <th>begin</th>\n",
              "      <th>end</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>미국</td>\n",
              "      <td>2.36</td>\n",
              "      <td>2.58</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>체조협회는</td>\n",
              "      <td>2.58</td>\n",
              "      <td>4.24</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>미국</td>\n",
              "      <td>4.24</td>\n",
              "      <td>4.60</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>올림픽위원회의</td>\n",
              "      <td>4.60</td>\n",
              "      <td>5.78</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>서한을</td>\n",
              "      <td>5.78</td>\n",
              "      <td>6.26</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>5</th>\n",
              "      <td>지지하며</td>\n",
              "      <td>6.26</td>\n",
              "      <td>7.76</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>6</th>\n",
              "      <td>미국의</td>\n",
              "      <td>7.76</td>\n",
              "      <td>8.40</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>7</th>\n",
              "      <td>전</td>\n",
              "      <td>8.40</td>\n",
              "      <td>8.66</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>8</th>\n",
              "      <td>운동선수가</td>\n",
              "      <td>8.66</td>\n",
              "      <td>9.86</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>9</th>\n",
              "      <td>안전한</td>\n",
              "      <td>9.86</td>\n",
              "      <td>10.46</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>10</th>\n",
              "      <td>환경을</td>\n",
              "      <td>10.46</td>\n",
              "      <td>10.96</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>11</th>\n",
              "      <td>가질</td>\n",
              "      <td>10.96</td>\n",
              "      <td>11.30</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>12</th>\n",
              "      <td>수</td>\n",
              "      <td>11.30</td>\n",
              "      <td>11.52</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>13</th>\n",
              "      <td>있도록</td>\n",
              "      <td>11.52</td>\n",
              "      <td>11.90</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>14</th>\n",
              "      <td>돕는</td>\n",
              "      <td>11.90</td>\n",
              "      <td>12.86</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>15</th>\n",
              "      <td>올림픽</td>\n",
              "      <td>12.86</td>\n",
              "      <td>13.46</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>16</th>\n",
              "      <td>관계자의</td>\n",
              "      <td>13.46</td>\n",
              "      <td>14.28</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>17</th>\n",
              "      <td>절대적</td>\n",
              "      <td>14.28</td>\n",
              "      <td>14.72</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>18</th>\n",
              "      <td>필요성을</td>\n",
              "      <td>14.72</td>\n",
              "      <td>15.30</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>19</th>\n",
              "      <td>인정합니다</td>\n",
              "      <td>15.30</td>\n",
              "      <td>15.84</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>\n",
              "      <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-6e095589-f440-4cee-ab7e-86b0c4f0deef')\"\n",
              "              title=\"Convert this dataframe to an interactive table.\"\n",
              "              style=\"display:none;\">\n",
              "        \n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "       width=\"24px\">\n",
              "    <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\n",
              "    <path d=\"M18.56 5.44l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94zm-11 1L8.5 8.5l.94-2.06 2.06-.94-2.06-.94L8.5 2.5l-.94 2.06-2.06.94zm10 10l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94z\"/><path d=\"M17.41 7.96l-1.37-1.37c-.4-.4-.92-.59-1.43-.59-.52 0-1.04.2-1.43.59L10.3 9.45l-7.72 7.72c-.78.78-.78 2.05 0 2.83L4 21.41c.39.39.9.59 1.41.59.51 0 1.02-.2 1.41-.59l7.78-7.78 2.81-2.81c.8-.78.8-2.07 0-2.86zM5.41 20L4 18.59l7.72-7.72 1.47 1.35L5.41 20z\"/>\n",
              "  </svg>\n",
              "      </button>\n",
              "      \n",
              "  <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      flex-wrap:wrap;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "      <script>\n",
              "        const buttonEl =\n",
              "          document.querySelector('#df-6e095589-f440-4cee-ab7e-86b0c4f0deef button.colab-df-convert');\n",
              "        buttonEl.style.display =\n",
              "          google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "        async function convertToInteractive(key) {\n",
              "          const element = document.querySelector('#df-6e095589-f440-4cee-ab7e-86b0c4f0deef');\n",
              "          const dataTable =\n",
              "            await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                     [key], {});\n",
              "          if (!dataTable) return;\n",
              "\n",
              "          const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "            '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "            + ' to learn more about interactive tables.';\n",
              "          element.innerHTML = '';\n",
              "          dataTable['output_type'] = 'display_data';\n",
              "          await google.colab.output.renderOutput(dataTable, element);\n",
              "          const docLink = document.createElement('div');\n",
              "          docLink.innerHTML = docLinkHtml;\n",
              "          element.appendChild(docLink);\n",
              "        }\n",
              "      </script>\n",
              "    </div>\n",
              "  </div>\n",
              "  "
            ]
          },
          "metadata": {}
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ],
            "text/html": [
              "<hr>"
            ]
          },
          "metadata": {}
        }
      ],
      "source": [
        "# for the first 10 examples in the dataset\n",
        "for (audio, label), transcription in zip(dataset, transcriptions[:10]):\n",
        "    print(transcription)\n",
        "  \n",
        "    duration = len(audio)\n",
        "    mel = whisper.log_mel_spectrogram(whisper.pad_or_trim(audio)).cuda()\n",
        "    tokens = torch.tensor(\n",
        "        [\n",
        "            *tokenizer.sot_sequence,\n",
        "            tokenizer.timestamp_begin,\n",
        "        ] + tokenizer.encode(transcription) + [\n",
        "            tokenizer.timestamp_begin + duration // AUDIO_SAMPLES_PER_TOKEN,\n",
        "            tokenizer.eot,\n",
        "        ]\n",
        "    ).cuda()\n",
        "    with torch.no_grad():\n",
        "        logits = model(mel.unsqueeze(0), tokens.unsqueeze(0))\n",
        "\n",
        "    weights = torch.cat(QKs)  # layers * heads * tokens * frames    \n",
        "    weights = weights[:, :, :, : duration // AUDIO_SAMPLES_PER_TOKEN].cpu()\n",
        "    weights = median_filter(weights, (1, 1, 1, medfilt_width))\n",
        "    weights = torch.tensor(weights * qk_scale).softmax(dim=-1)\n",
        "    \n",
        "    w = weights / weights.norm(dim=-2, keepdim=True)\n",
        "    matrix = w[-6:].mean(axis=(0, 1))\n",
        "\n",
        "    alignment = dtw(-matrix.double().numpy())\n",
        "\n",
        "    jumps = np.pad(np.diff(alignment.index1s), (1, 0), constant_values=1).astype(bool)\n",
        "    jump_times = alignment.index2s[jumps] * AUDIO_TIME_PER_TOKEN\n",
        "    words, word_tokens = split_tokens(tokens)\n",
        "\n",
        "    # display the normalized attention weights and the alignment\n",
        "    plt.figure(figsize=(8, 8))\n",
        "    plt.imshow(matrix, aspect=\"auto\")\n",
        "    plt.plot(alignment.index2s, alignment.index1s, color=\"red\")\n",
        "\n",
        "    xticks = np.arange(0, matrix.shape[1], 1 / AUDIO_TIME_PER_TOKEN)\n",
        "    xticklabels = (xticks * AUDIO_TIME_PER_TOKEN).round().astype(np.int32) \n",
        "    plt.xticks(xticks, xticklabels)\n",
        "    plt.xlabel(\"Time (s)\")\n",
        "    \n",
        "    # display tokens and words as tick labels\n",
        "    ylims = plt.gca().get_ylim()\n",
        "\n",
        "    ax = plt.gca()\n",
        "    ax.tick_params('both', length=0, width=0, which='minor', pad=6)\n",
        "\n",
        "    ax.yaxis.set_ticks_position(\"left\")\n",
        "    ax.yaxis.set_label_position(\"left\")\n",
        "    ax.invert_yaxis()\n",
        "    ax.set_ylim(ylims)\n",
        "\n",
        "    major_ticks = [-0.5]\n",
        "    minor_ticks = []\n",
        "    current_y = 0\n",
        "    \n",
        "    for word, word_token in zip(words, word_tokens):\n",
        "        minor_ticks.append(current_y + len(word_token) / 2 - 0.5)\n",
        "        current_y += len(word_token)\n",
        "        major_ticks.append(current_y - 0.5)\n",
        "        \n",
        "    ax.yaxis.set_minor_locator(ticker.FixedLocator(minor_ticks))\n",
        "    ax.yaxis.set_minor_formatter(ticker.FixedFormatter(words))\n",
        "    ax.set_yticks(major_ticks)\n",
        "    ax.yaxis.set_major_formatter(ticker.NullFormatter())\n",
        "    \n",
        "    for label in ax.get_yminorticklabels():\n",
        "        label.set_fontproperties(prop)\n",
        "\n",
        "    plt.ylabel(\"Words\")\n",
        "    plt.show()\n",
        "\n",
        "    # display the word-level timestamps in a table\n",
        "    word_boundaries = np.pad(np.cumsum([len(t) for t in word_tokens[:-1]]), (1, 0))\n",
        "    begin_times = jump_times[word_boundaries[:-1]]\n",
        "    end_times = jump_times[word_boundaries[1:]]\n",
        "\n",
        "    data = [\n",
        "        dict(word=word, begin=begin, end=end)\n",
        "        for word, begin, end in zip(words[:-1], begin_times, end_times)\n",
        "        if not word.startswith(\"<|\") and word.strip() not in \".,!?、。\"\n",
        "    ]\n",
        "\n",
        "    display(pd.DataFrame(data))\n",
        "    display(HTML(\"<hr>\"))"
      ]
    }
  ],
  "metadata": {
    "accelerator": "GPU",
    "colab": {
      "provenance": []
    },
    "gpuClass": "standard",
    "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.9.9"
    },
    "widgets": {
      "application/vnd.jupyter.widget-state+json": {
        "9cf878888ef0434b9cf5883cb29a4d3f": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "DropdownModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "DropdownModel",
            "_options_labels": [
              "Select language",
              "----------",
              "Afrikaans (af_za)",
              "Amharic (am_et)",
              "Arabic (ar_eg)",
              "Armenian (hy_am)",
              "Assamese (as_in)",
              "Azerbaijani (az_az)",
              "Belarusian (be_by)",
              "Bengali (bn_in)",
              "Bosnian (bs_ba)",
              "Bulgarian (bg_bg)",
              "Catalan (ca_es)",
              "Chinese (cmn_hans_cn)",
              "Croatian (hr_hr)",
              "Czech (cs_cz)",
              "Danish (da_dk)",
              "Dutch (nl_nl)",
              "English (en_us)",
              "Estonian (et_ee)",
              "Finnish (fi_fi)",
              "French (fr_fr)",
              "Galician (gl_es)",
              "Georgian (ka_ge)",
              "German (de_de)",
              "Greek (el_gr)",
              "Gujarati (gu_in)",
              "Hausa (ha_ng)",
              "Hebrew (he_il)",
              "Hindi (hi_in)",
              "Hungarian (hu_hu)",
              "Icelandic (is_is)",
              "Indonesian (id_id)",
              "Italian (it_it)",
              "Japanese (ja_jp)",
              "Javanese (jv_id)",
              "Kannada (kn_in)",
              "Kazakh (kk_kz)",
              "Khmer (km_kh)",
              "Korean (ko_kr)",
              "Lao (lo_la)",
              "Latvian (lv_lv)",
              "Lingala (ln_cd)",
              "Lithuanian (lt_lt)",
              "Luxembourgish (lb_lu)",
              "Macedonian (mk_mk)",
              "Malay (ms_my)",
              "Malayalam (ml_in)",
              "Maltese (mt_mt)",
              "Maori (mi_nz)",
              "Marathi (mr_in)",
              "Mongolian (mn_mn)",
              "Myanmar (my_mm)",
              "Nepali (ne_np)",
              "Norwegian (nb_no)",
              "Occitan (oc_fr)",
              "Pashto (ps_af)",
              "Persian (fa_ir)",
              "Polish (pl_pl)",
              "Portuguese (pt_br)",
              "Punjabi (pa_in)",
              "Romanian (ro_ro)",
              "Russian (ru_ru)",
              "Serbian (sr_rs)",
              "Shona (sn_zw)",
              "Sindhi (sd_in)",
              "Slovak (sk_sk)",
              "Slovenian (sl_si)",
              "Somali (so_so)",
              "Spanish (es_419)",
              "Swahili (sw_ke)",
              "Swedish (sv_se)",
              "Tagalog (fil_ph)",
              "Tajik (tg_tj)",
              "Tamil (ta_in)",
              "Telugu (te_in)",
              "Thai (th_th)",
              "Turkish (tr_tr)",
              "Ukrainian (uk_ua)",
              "Urdu (ur_pk)",
              "Uzbek (uz_uz)",
              "Vietnamese (vi_vn)",
              "Welsh (cy_gb)",
              "Yoruba (yo_ng)"
            ],
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "DropdownView",
            "description": "Language:",
            "description_tooltip": null,
            "disabled": false,
            "index": 39,
            "layout": "IPY_MODEL_26369a54159f4f46bb7ba89d0c66f6cb",
            "style": "IPY_MODEL_c78c2f0f2945498a93257ce00a5ee9a7"
          }
        },
        "26369a54159f4f46bb7ba89d0c66f6cb": {
          "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
          }
        },
        "c78c2f0f2945498a93257ce00a5ee9a7": {
          "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": ""
          }
        },
        "8cdc3b2a910748e98327462922dc008a": {
          "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_32bd3d1217f24bb8a5e2f853633098d8",
              "IPY_MODEL_dd93a997785a41568a8aba9cf5c0d83a",
              "IPY_MODEL_956741460c504706aa097058dbc6eecf"
            ],
            "layout": "IPY_MODEL_e4024c536d594ea2be54f471eacd485f"
          }
        },
        "32bd3d1217f24bb8a5e2f853633098d8": {
          "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_f8eb2f7fc8c1400bb8dc351ea7fa6cfa",
            "placeholder": "​",
            "style": "IPY_MODEL_76677587cf184477bafcc9d5459b5767",
            "value": "100%"
          }
        },
        "dd93a997785a41568a8aba9cf5c0d83a": {
          "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_50a75e807f144f438032a8fcdb9cdbe0",
            "max": 39,
            "min": 0,
            "orientation": "horizontal",
            "style": "IPY_MODEL_dafffcc9b35c4bca95f19079d7c8be60",
            "value": 39
          }
        },
        "956741460c504706aa097058dbc6eecf": {
          "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_73a0e8df4bb940bc8feae14e0a66d9c5",
            "placeholder": "​",
            "style": "IPY_MODEL_ccdbe78adf2f4011946e290c81bd1a51",
            "value": " 39/39 [03:30&lt;00:00,  6.04s/it]"
          }
        },
        "e4024c536d594ea2be54f471eacd485f": {
          "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
          }
        },
        "f8eb2f7fc8c1400bb8dc351ea7fa6cfa": {
          "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
          }
        },
        "76677587cf184477bafcc9d5459b5767": {
          "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": ""
          }
        },
        "50a75e807f144f438032a8fcdb9cdbe0": {
          "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
          }
        },
        "dafffcc9b35c4bca95f19079d7c8be60": {
          "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": ""
          }
        },
        "73a0e8df4bb940bc8feae14e0a66d9c5": {
          "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
          }
        },
        "ccdbe78adf2f4011946e290c81bd1a51": {
          "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": 0
}
