diff --git a/Transcribe_TransformerKoreanChatbot.ipynb b/Transcribe_TransformerKoreanChatbot.ipynb
new file mode 100644
index 0000000..d32d64c
--- /dev/null
+++ b/Transcribe_TransformerKoreanChatbot.ipynb
@@ -0,0 +1,982 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "view-in-github",
+ "colab_type": "text"
+ },
+ "source": [
+ "
"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "## Transformer를 사용하는 데 쓰이는 라이브러리\n",
+ "- transformer에 기반하는 다른 모델을 사용할 수 있는 라이브러리가 많았고, transformer 기능을 구현하는 코드를 통해서 짚어보기로 함.\n",
+ "- tensorflow(아래 구현 코드에서 확인 가능)\n",
+ "- pytorch\n",
+ " - https://pytorch.kr/hub/huggingface_pytorch-transformers/\n",
+ "- huggingface transformers\n",
+ " - https://github.com/huggingface/transformers/blob/main/README_ko.md\n",
+ "- fairseq\n",
+ " - https://cloud.google.com/tpu/docs/tutorials/transformer-pytorch?hl=ko"
+ ],
+ "metadata": {
+ "id": "DXRgJAGiD0-Z"
+ },
+ "id": "DXRgJAGiD0-Z"
+ },
+ {
+ "cell_type": "markdown",
+ "id": "2fe11c0f",
+ "metadata": {
+ "id": "2fe11c0f"
+ },
+ "source": [
+ "## 필요 라이브러리 import"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "bbebe731",
+ "metadata": {
+ "id": "bbebe731"
+ },
+ "outputs": [],
+ "source": [
+ "import numpy as np\n",
+ "import matplotlib.pyplot as plt\n",
+ "import tensorflow as tf"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "5cd2132b",
+ "metadata": {
+ "id": "5cd2132b"
+ },
+ "source": [
+ "TypeError: Unable to convert function return value to a Python type! The signature was\n",
+ "\t() -> handle\n",
+ "- tensorflow를 import 할 때, 해당 오류가 발생하는 건 tensorflow 라이브러리 버전이 낮기 때문임.\n",
+ " - pip install --upgrade tensorflow\n",
+ " - pip uninstall tensorflow 하고서 pip install tensorflow 하기"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "b9c7b06c",
+ "metadata": {
+ "id": "b9c7b06c"
+ },
+ "source": [
+ "ERROR: Could not install packages due to an OSError: [WinError 5] 액세스가 거부되었습니다: \n",
+ "- 해당 에러가 cmd 창에서 나타나는 경우, 다음 명령문을 conda install 전에 입력한다.\n",
+ " - conda config --set ssl_verify false\n",
+ " - conda install pip tensorflow"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "위의 방식대로 했는데도 안 됐음...\n",
+ "--> 근데 그냥... 코랩으로 돌리면 되는 거였음..."
+ ],
+ "metadata": {
+ "id": "mSVrStdeJrjB"
+ },
+ "id": "mSVrStdeJrjB"
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "92cc660a",
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 35
+ },
+ "id": "92cc660a",
+ "outputId": "d0cb368f-7bd3-4880-beac-acfea6e2db1e"
+ },
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "'2.12.0'"
+ ],
+ "application/vnd.google.colaboratory.intrinsic+json": {
+ "type": "string"
+ }
+ },
+ "metadata": {},
+ "execution_count": 4
+ }
+ ],
+ "source": [
+ "tf.__version__ #2.6.0 이상 버전에서 작업 진행 필요"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "6f9aa344",
+ "metadata": {
+ "id": "6f9aa344"
+ },
+ "source": [
+ "## Positional Encoding 구현"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "Tensorflow 및 Keras에서 Positional Encoding 레이어를 정의하는 내용.\n",
+ "- transformer의 입력 시퀀스에 위치 인코딩을 추가해주는 역할\n",
+ " - 위치 인코딩 : 입력 시퀀스의 토큰 위치에 대한 정보를 모델에 제공하기 위해 사용되며, 이는 시퀀스의 순서와 문맥을 이해하는 데 중요함."
+ ],
+ "metadata": {
+ "id": "5mPnbVw6T50X"
+ },
+ "id": "5mPnbVw6T50X"
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "d833813b",
+ "metadata": {
+ "id": "d833813b"
+ },
+ "outputs": [],
+ "source": [
+ "class PositionalEncoding(tf.keras.layers.Layer): #tf.keras.layers.Layer를 상속받음\n",
+ " def __init__(self, position, d_model): \n",
+ " #position:입력시퀀스의 최대길이, d_model:입력 임베딩의 차원\n",
+ " super(PositionalEncoding, self).__init__()\n",
+ " self.pos_encoding = self.positional_encoding(position, d_model)\n",
+ "\n",
+ " def get_angles(self, position, i, d_model):\n",
+ " #모든 위치, 임베딩 차원에 대한 각도 배열 반환.\n",
+ " # i : 각도의 인덱스\n",
+ " ## 짝수면 2로 나뉘어져서 지수가 0 -> sin함수 쓸 때 사용되는 각도 생성\n",
+ " ## 홀수면 지수가 1 -> cos함수 쓸 때 사용되는 각도 생성\n",
+ " angles = 1 / tf.pow(10000, (2 * (i // 2)) / tf.cast(d_model, tf.float32))\n",
+ " return position * angles\n",
+ " # tf.pow : x^y\n",
+ " # tf.cast:배열의 데이터타입을 바꿔줌. 여기선 d_model을 float32형태로 변화.\n",
+ "\n",
+ " def positional_encoding(self, position, d_model):\n",
+ " \n",
+ " #get_angles 함수 : 인코딩할 단어 위치(position), 임베딩 차원(d_model),\n",
+ " #인덱스(i)에 따라 각도(angles) 계산함\n",
+ " angle_rads = self.get_angles(\n",
+ " position=tf.range(position, dtype=tf.float32)[:, tf.newaxis],\n",
+ " i=tf.range(d_model, dtype=tf.float32)[tf.newaxis, :],\n",
+ " d_model=d_model) \n",
+ "\n",
+ " # 배열의 짝수 인덱스(2i)에는 사인 함수 적용\n",
+ " sines = tf.math.sin(angle_rads[:, 0::2])\n",
+ "\n",
+ " # 배열의 홀수 인덱스(2i+1)에는 코사인 함수 적용\n",
+ " cosines = tf.math.cos(angle_rads[:, 1::2])\n",
+ "\n",
+ " angle_rads = np.zeros(angle_rads.shape) \n",
+ " #계산된 sines와 cosines를 이용해 각도 배열(angle_rads) 만듦\n",
+ " angle_rads[:, 0::2] = sines\n",
+ " angle_rads[:, 1::2] = cosines\n",
+ " pos_encoding = tf.constant(angle_rads)\n",
+ " #angle_rads 기반으로 pos_encoding 배열을 만듦\n",
+ " #이 배열은 angle_rads를 그대로 복사한 다음에, tf.newaxis로 차원을 추가하고\n",
+ " pos_encoding = pos_encoding[tf.newaxis, ...]\n",
+ "\n",
+ " print(pos_encoding.shape)\n",
+ " #tf.cast를 이용해 float32형태로 변경함\n",
+ " return tf.cast(pos_encoding, tf.float32)\n",
+ " #해당 배열의 모양은 (1=배치차원, position, d_model)임.\n",
+ " \n",
+ " '''\n",
+ " 딥러닝 모델 학습 시, 데이터셋은 일반적으로 미니배치(minibatch) 단위로 처리됨\n",
+ " 전체 데이터셋이 아닌 일부 데이터(ex. 32개의 이미지)를 한번에 모델에 입력하고, 그 출력을 이용해 모델을 학습시킴\n",
+ " 이렇게 모델에 입력되는 데이터의 묶음을 미니 배치라고 하며, 미니배치 단위로 \n",
+ " 처리하는 건 GPU를 비롯한 하드웨어의 병렬 처리 기능을 활용해 연산 속도를 높일 수 있음.\n",
+ "\n",
+ " 배치 차원 = 미니 배치의 크기\n",
+ " 배열은 1개의 미니배치를 처리함.\n",
+ " '''\n",
+ "\n",
+ " def call(self, inputs): \n",
+ " #input sequence에 tensor 추가되고, \n",
+ " #브로드캐스팅을 사용해 위치 인코딩이 시퀀스의 올바른 부분에 추가되도록 보장함.\n",
+ " ## 브로드캐스팅 : NumPy 및 TensorFlow와 같은 배열/텐서 연산에서 자동으로 배열/텐서의 크기를 조정해 연산이 가능하도록 하는 기능\n",
+ " return inputs + self.pos_encoding[:, :tf.shape(inputs)[1], :]\n",
+ " ##self는 pos_encoding의 첫번째 차원인 배치 차원과 동일함."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "026d42a0",
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 473
+ },
+ "id": "026d42a0",
+ "outputId": "650011ba-be03-4c83-d2fb-7135aea515d1"
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "(1, 50, 128)\n"
+ ]
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "image/png": "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QmvSpIn2+eefa/v27dM+/vhjLTY2VnvkkUfEMhfCeZ84cUL78ccftR9//FEDoM2ePVv78ccfRfVMbc5x0KBBWteuXbXNmzdr3377rda6dWvt1ltv9dYp1UpN511ZWaldd911WtOmTbXt27frfs5VVFSIbfjieZP7LtiJi6Zp2iuvvKIlJSVpVqtV69Gjh7Zp0yZvH1K9AuDytXDhQrFMWVmZdu+992pRUVFacHCw9ve//107fPiw9w76HDl94nKhnveKFSu0Sy65RLPZbFrbtm21N998U/e+0+nUpkyZosXFxWk2m03r37+/tnv3bi8dbf0oLi7WHnjgAS0pKUmz2+3aRRddpD3++OO6/3FdCOf9zTffuPz3PGLECE3TaneOx44d02699VYtNDRUCw8P10aOHKmdOHHCC2dTezWd9759+wx/zn3zzTdiG7543uQ+k6Yp7SeJiIiIGrAL8h4XIiIiujBx4kJEREQ+gxMXIiIi8hmcuBAREZHP4MSFiIiIfAYnLkREROQzOHEhIiIin8GJCxHVyv79+2EymbB9+3ZvHwoR+TFOXIh8xB133AGTyQSTyYTAwEDExcXhqquuwoIFC8Rze+pzX0OHDq3XbRIR1QdOXIh8yKBBg3D48GHs378fq1atwpVXXokHHngA11xzDaqrq719eERE5xwnLkQ+xGazIT4+Hk2aNMGll16Kxx57DJ9++ilWrVqFd999FwBQWFiIu+66C40aNUJ4eDj69euHn376SWxj+vTp6NKlC9544w00a9YMwcHBuOmmm1BUVCTef++99/Dpp5+KKzzr168X6//555+48sorERwcjM6dOyMjI+N8fgmIyM9x4kLk4/r164fOnTvj448/BgDceOONyM/Px6pVq5CZmYlLL70U/fv3R0FBgVhn7969+PDDD7FixQqsXr0aP/74I+69914AwEMPPYSbbrpJXN05fPgwevbsKdZ9/PHH8dBDD2H79u24+OKLceutt/JqDxGdN5y4EF0A2rZti/379+Pbb7/Fli1bsGzZMnTv3h2tW7fGiy++iMjISHz00Udi+fLycixatAhdunRBnz598Morr2Dp0qXIzc1FaGgogoKCxNWd+Ph4WK1Wse5DDz2EIUOG4OKLL8aMGTNw4MAB7N271xunTUR+iBMXoguApmkwmUz46aefUFJSgpiYGISGhorXvn378Mcff4jlk5KS0KRJE/Hn1NRUOJ1O7N69+6z76tSpk8gJCQkAgPz8/Ho8GyIiYwHePgAi8tzOnTvRokULlJSUICEhQXdPyl8iIyPrZV+BgYEim0wmAKj3qiYiIiOcuBD5uHXr1uGXX37BhAkT0LRpU+Tm5iIgIADJycmG62RlZSEnJweJiYkAgE2bNsFsNqNNmzYAAKvVCofDcT4On4ioTjhxIfIhFRUVyM3NhcPhQF5eHlavXo1Zs2bhmmuuwe233w6z2YzU1FQMHToUzz//PC6++GLk5ORg5cqV+Pvf/47u3bsDAOx2O0aMGIEXX3wRxcXFuP/++3HTTTchPj4eAJCcnIwvv/wSu3fvRkxMDCIiIrx52kREAicuRD5k9erVSEhIQEBAAKKiotC5c2fMmzcPI0aMgNl86pa1L774Ao8//jhGjhyJI0eOID4+Hn369EFcXJzYTqtWrXDDDTfg6quvRkFBAa655hq89tpr4v3Ro0dj/fr16N69O0pKSvDNN9/UeAWHiOh8MWmapnn7IIjo/Jk+fTqWL1/O1v1E5JNYVUREREQ+gxMXIiIi8hn8qIiIiIh8Bq+4EBERkc/gxIWIiIh8BicuRERE5DM4cSEiIiKfwYkLERER+QxOXIiIiMhncOJCREREPoMTFyIiIvIZnLgQERGRz/h/EUZqzUoz920AAAAASUVORK5CYII=\n"
+ },
+ "metadata": {}
+ }
+ ],
+ "source": [
+ "sample_pos_encoding = PositionalEncoding(50, 128)\n",
+ "#아까 만든 클래스를 사용해서 생성한 sample_pos_encoding 배열을 시각화함.\n",
+ "\n",
+ "#pcolormesh : 2차원 배열을 시각화할 때 사용하며, 배열 값에 따라 색상을 적용해서 이미지 생성함.\n",
+ "\n",
+ "#sample_pos_encoding은 tensor 객체이므로, \n",
+ "#numpy 메소드를 사용해서 tensor를 numpy 배열로 변환한 다음\n",
+ "#[0]을 사용해서 (batch 차원, position, d_model)에서 인덱스 0인 batch 차원을 없앤 채로 반환함.\n",
+ "\n",
+ "plt.pcolormesh(sample_pos_encoding.pos_encoding.numpy()[0], cmap='RdBu')\n",
+ "plt.xlabel('Depth')\n",
+ "plt.xlim((0, 128))\n",
+ "plt.ylabel('Position')\n",
+ "plt.colorbar()\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "0d531b2b",
+ "metadata": {
+ "id": "0d531b2b"
+ },
+ "source": [
+ "## Scaled dot product attention"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "efddecf0",
+ "metadata": {
+ "id": "efddecf0"
+ },
+ "outputs": [],
+ "source": [
+ "def scaled_dot_product_attention(query, key, value, mask):\n",
+ " # query 크기 : (batch_size, num_heads, query의 문장 길이, d_model/num_heads)\n",
+ " # key 크기 : (batch_size, num_heads, key의 문장 길이, d_model/num_heads)\n",
+ " # value 크기 : (batch_size, num_heads, value의 문장 길이, d_model/num_heads)\n",
+ " # padding_mask : (batch_size, 1, 1, key의 문장 길이)\n",
+ "\n",
+ " # Q와 K의 곱. 어텐션 스코어 행렬. \n",
+ " matmul_qk = tf.matmul(query, key, transpose_b=True) \n",
+ " #'key'의 transpose를 사용해 key와 query의 dot product를 계산\n",
+ "\n",
+ " # 스케일링\n",
+ " # dk의 루트값으로 나눠준다.\n",
+ " depth = tf.cast(tf.shape(key)[-1], tf.float32)\n",
+ " logits = matmul_qk / tf.math.sqrt(depth)\n",
+ "\n",
+ " # 마스킹. 어텐션 스코어 행렬의 마스킹 할 위치에 매우 작은 음수값을 넣는다.\n",
+ " # 매우 작은 값이므로 소프트맥스 함수를 지나면 행렬의 해당 위치의 값은 0이 된다.\n",
+ " if mask is not None:\n",
+ " logits += (mask * -1e9)\n",
+ "\n",
+ " # 소프트맥스 함수는 마지막 차원인 key의 문장 길이 방향으로 수행된다.\n",
+ " # attention weight : (batch_size, num_heads, query의 문장 길이, key의 문장 길이)\n",
+ " attention_weights = tf.nn.softmax(logits, axis=-1)\n",
+ "\n",
+ " # output : (batch_size, num_heads, query의 문장 길이, d_model/num_heads)\n",
+ " output = tf.matmul(attention_weights, value)\n",
+ "\n",
+ " return output, attention_weights"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "728a5cc3",
+ "metadata": {
+ "id": "728a5cc3"
+ },
+ "source": [
+ "## Multi Head Attention"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "7618539d",
+ "metadata": {
+ "id": "7618539d"
+ },
+ "outputs": [],
+ "source": [
+ "class MultiHeadAttention(tf.keras.layers.Layer):\n",
+ "\n",
+ " def __init__(self, d_model, num_heads, name=\"multi_head_attention\"):\n",
+ " super(MultiHeadAttention, self).__init__(name=name)\n",
+ " self.num_heads = num_heads\n",
+ " self.d_model = d_model\n",
+ "\n",
+ " assert d_model % self.num_heads == 0 \n",
+ " #d_model을 num_heads로 나눈 값이 정확하게 나누어 떨어지는지 확인하는 용도\n",
+ "\n",
+ " # d_model을 num_heads로 나눈 값.\n",
+ " # 논문 기준 : 64\n",
+ " self.depth = d_model // self.num_heads\n",
+ "\n",
+ " # WQ, WK, WV에 해당하는 밀집층 정의\n",
+ " self.query_dense = tf.keras.layers.Dense(units=d_model)\n",
+ " self.key_dense = tf.keras.layers.Dense(units=d_model)\n",
+ " self.value_dense = tf.keras.layers.Dense(units=d_model)\n",
+ "\n",
+ " # WO에 해당하는 밀집층 정의\n",
+ " self.dense = tf.keras.layers.Dense(units=d_model)\n",
+ "\n",
+ " # num_heads 개수만큼 q, k, v를 split하는 함수\n",
+ " def split_heads(self, inputs, batch_size):\n",
+ " inputs = tf.reshape(\n",
+ " inputs, shape=(batch_size, -1, self.num_heads, self.depth))\n",
+ " return tf.transpose(inputs, perm=[0, 2, 1, 3])\n",
+ "\n",
+ " def call(self, inputs):\n",
+ " '''\n",
+ " 1. query, key, value를 각각 Dense 레이어를 통과시켜서 출력값을 얻습니다.\n",
+ " 2. 각 head로 나눠진 query, key, value를 scaled_dot_product_attention() 함수에 입력값으로 넣어 어텐션을 수행합니다.\n",
+ " 3. 어텐션의 결과를 다시 transpose() 함수를 이용해 축을 변환합니다.\n",
+ " 4. 각 head를 다시 연결(concatenate)하여 최종 결과를 얻습니다.\n",
+ " 5. 결과값을 dense 레이어를 통과시켜 최종 출력값을 구합니다.\n",
+ " \n",
+ " query, key, value가 multi-heads 수만큼 나뉘어서 어텐션을 계산\n",
+ " 각 head는 서로 다른 부분을 학습하기 위해서 존재하며, 이를 통해 모델이 더욱 효과적으로 특징을 추출함\n",
+ " 출력값으로는 각 단어의 위치와 상관없이 모든 단어가 attention을 받은 정보가 담긴 벡터를 반환함\n",
+ " '''\n",
+ " query, key, value, mask = inputs['query'], inputs['key'], inputs[\n",
+ " 'value'], inputs['mask']\n",
+ " batch_size = tf.shape(query)[0]\n",
+ "\n",
+ " # 1. WQ, WK, WV에 해당하는 밀집층 지나기\n",
+ " # q : (batch_size, query의 문장 길이, d_model)\n",
+ " # k : (batch_size, key의 문장 길이, d_model)\n",
+ " # v : (batch_size, value의 문장 길이, d_model)\n",
+ " # 참고) 인코더(k, v)-디코더(q) 어텐션에서는 query 길이와 key, value의 길이는 다를 수 있다.\n",
+ " query = self.query_dense(query)\n",
+ " key = self.key_dense(key)\n",
+ " value = self.value_dense(value)\n",
+ "\n",
+ " # 2. 헤드 나누기\n",
+ " # q : (batch_size, num_heads, query의 문장 길이, d_model/num_heads)\n",
+ " # k : (batch_size, num_heads, key의 문장 길이, d_model/num_heads)\n",
+ " # v : (batch_size, num_heads, value의 문장 길이, d_model/num_heads)\n",
+ " query = self.split_heads(query, batch_size)\n",
+ " key = self.split_heads(key, batch_size)\n",
+ " value = self.split_heads(value, batch_size)\n",
+ "\n",
+ " # 3. 스케일드 닷 프로덕트 어텐션. 앞서 구현한 함수 사용.\n",
+ " # (batch_size, num_heads, query의 문장 길이, d_model/num_heads)\n",
+ " scaled_attention, _ = scaled_dot_product_attention(query, key, value, mask)\n",
+ " # (batch_size, query의 문장 길이, num_heads, d_model/num_heads)\n",
+ " scaled_attention = tf.transpose(scaled_attention, perm=[0, 2, 1, 3])\n",
+ "\n",
+ " # 4. 헤드 연결(concatenate)하기\n",
+ " # (batch_size, query의 문장 길이, d_model)\n",
+ " concat_attention = tf.reshape(scaled_attention,\n",
+ " (batch_size, -1, self.d_model))\n",
+ "\n",
+ " # 5. WO에 해당하는 밀집층 지나기\n",
+ " # (batch_size, query의 문장 길이, d_model)\n",
+ " outputs = self.dense(concat_attention)\n",
+ "\n",
+ " return outputs"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "1d31bfe6",
+ "metadata": {
+ "id": "1d31bfe6"
+ },
+ "source": [
+ "## padding mask 만들기"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "3d76ee2e",
+ "metadata": {
+ "id": "3d76ee2e"
+ },
+ "outputs": [],
+ "source": [
+ "def create_padding_mask(x):\n",
+ "#입력으로 들어온 'x' tensor에서 값이 0인 위치에 1을, 그 외의 위치에 0을 가지는 텐서를 생성하는 함수\n",
+ " mask = tf.cast(tf.math.equal(x, 0), tf.float32)\n",
+ " # (batch_size, 1, 1, key의 문장 길이)\n",
+ " ## 입력으로 (batch_size, seq_len) 크기의 텐서 x가 주어졌다면, \n",
+ " ## 이 함수는 (batch_size, 1, 1, seq_len) 크기의 텐서를 반환\n",
+ " return mask[:, tf.newaxis, tf.newaxis, :]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "a87d6db3",
+ "metadata": {
+ "id": "a87d6db3"
+ },
+ "source": [
+ "## encoder"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "75149d08",
+ "metadata": {
+ "id": "75149d08"
+ },
+ "outputs": [],
+ "source": [
+ "def encoder_layer(dff, d_model, num_heads, dropout, name=\"encoder_layer\"):\n",
+ " '''\n",
+ " dff : feedforward network의 hidden layer에 있는 뉴런 수를 나타내는 정수\n",
+ " d_model : 모델의 차원을 나타내는 정수. 즉, 임베딩 크기\n",
+ " num_heads : attention head 개수를 나타내는 정수\n",
+ " dropout : 드롭아웃 비율을 나타내는 실수\n",
+ " name : 레이어 이름을 나타내는 문자열\n",
+ " '''\n",
+ "\n",
+ " '''\n",
+ " 간단히 말하자면\n",
+ " 1. 입력 데이터(inputs)와 패딩 마스크(padding_mask)를 받고\n",
+ " 2. 멀티 헤드 어텐션을 수행한 뒤\n",
+ " 3. 드롭아웃을 적용하고 잔차 연결(residual connection)과 \n",
+ " 층 정규화(layer normalization)를 수행함\n",
+ " 4. 포지션 와이즈 피드 포워드 신경망을 수행하는데, \n",
+ " 이때 입력으로 받은 어텐션 출력(attention)을 사용하고\n",
+ " 5. 드롭아웃을 적용하고 잔차 연결과 층 정규화를 수행함\n",
+ "\n",
+ " return에선 \n",
+ " - 입력 데이터(inputs)와 패딩 마스크(padding_mask)를 입력으로 받음\n",
+ " - 출력으로는 두번째 서브층의 입력으로 사용될 어텐션 출력(attention)에 \n",
+ " 두번째 서브층을 수행한 결과를 더한 결과\n",
+ " 를 반환하는 tf.keras.Model 객체를 생성\n",
+ " '''\n",
+ " inputs = tf.keras.Input(shape=(None, d_model), name=\"inputs\")\n",
+ "\n",
+ " # 인코더는 패딩 마스크 사용\n",
+ " padding_mask = tf.keras.Input(shape=(1, 1, None), name=\"padding_mask\")\n",
+ "\n",
+ " # 멀티-헤드 어텐션 (첫번째 서브층 / 셀프 어텐션)\n",
+ " attention = MultiHeadAttention(\n",
+ " d_model, num_heads, name=\"attention\")({\n",
+ " 'query': inputs, 'key': inputs, 'value': inputs, # Q = K = V\n",
+ " 'mask': padding_mask # 패딩 마스크 사용\n",
+ " })\n",
+ "\n",
+ " # 드롭아웃 + 잔차 연결과 층 정규화\n",
+ " attention = tf.keras.layers.Dropout(rate=dropout)(attention)\n",
+ " attention = tf.keras.layers.LayerNormalization(\n",
+ " epsilon=1e-6)(inputs + attention)\n",
+ "\n",
+ " # 포지션 와이즈 피드 포워드 신경망 (두번째 서브층)\n",
+ " outputs = tf.keras.layers.Dense(units=dff, activation='relu')(attention) #ReLU와\n",
+ " outputs = tf.keras.layers.Dense(units=d_model)(outputs) \n",
+ " #선형활성화 함수가 있는 두 개의 고밀도 레이어로 구성됨\n",
+ "\n",
+ " # 드롭아웃 + 잔차 연결과 층 정규화\n",
+ " outputs = tf.keras.layers.Dropout(rate=dropout)(outputs)\n",
+ " outputs = tf.keras.layers.LayerNormalization(\n",
+ " epsilon=1e-6)(attention + outputs) \n",
+ " #attention tensor에 드롭아웃 적용된 출력텐서를 더함\n",
+ " #그리고 레이어 정규화를 적용해 다른 잔차 연결을 얻음\n",
+ "\n",
+ " #최종 출력은 output tensor, 출력 텐서를 출력으로 하는 tf.keras.Model 객체를 반환\n",
+ " #모델 이름은 name\n",
+ " return tf.keras.Model(\n",
+ " inputs=[inputs, padding_mask], outputs=outputs, name=name)\n",
+ " "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "edda14f2",
+ "metadata": {
+ "id": "edda14f2"
+ },
+ "outputs": [],
+ "source": [
+ "def encoder(vocab_size, num_layers, dff,\n",
+ " d_model, num_heads, dropout,\n",
+ " name=\"encoder\"):\n",
+ " '''\n",
+ " 다수의 self attention과 feedfoward 신경망으로 구성된 인코더를 구현하는 함수\n",
+ " '''\n",
+ " inputs = tf.keras.Input(shape=(None,), name=\"inputs\")\n",
+ "\n",
+ " # 인코더는 패딩 마스크 사용\n",
+ " padding_mask = tf.keras.Input(shape=(1, 1, None), name=\"padding_mask\")\n",
+ " #입력문장을 받아들이고 입력 문장에 대한 패딩마스크를 입력으로 받음\n",
+ " #그리고 입력 문장의 임베딩을 구성한 뒤, positional encoding을 적용함 \n",
+ " # 포지셔널 인코딩 + 드롭아웃\n",
+ " embeddings = tf.keras.layers.Embedding(vocab_size, d_model)(inputs)\n",
+ " embeddings *= tf.math.sqrt(tf.cast(d_model, tf.float32))\n",
+ " #이때 임베딩 차원 수와 포지셔널 인코딩 차원 수가 같도록 조정해줌\n",
+ " embeddings = PositionalEncoding(vocab_size, d_model)(embeddings)\n",
+ " #마지막으로 드롭아웃을 적용함.\n",
+ " outputs = tf.keras.layers.Dropout(rate=dropout)(embeddings)\n",
+ "\n",
+ " # 인코더 층을 num_layers개 쌓기\n",
+ " for i in range(num_layers):\n",
+ " outputs = encoder_layer(dff=dff, d_model=d_model, num_heads=num_heads,\n",
+ " dropout=dropout, name=\"encoder_layer_{}\".format(i),\n",
+ " )([outputs, padding_mask])\n",
+ " #encoder_layer 함수를 for문 만큼 사용\n",
+ "\n",
+ " return tf.keras.Model(\n",
+ " inputs=[inputs, padding_mask], outputs=outputs, name=name)\n",
+ " #tf.keras.Model 객체를 반환하는데, 반환되는 모델명은 name으로 지정됨."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "3277dd47",
+ "metadata": {
+ "id": "3277dd47"
+ },
+ "source": [
+ "## decoder"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "fed9cc2c",
+ "metadata": {
+ "id": "fed9cc2c"
+ },
+ "outputs": [],
+ "source": [
+ "# 디코더의 첫번째 서브층(sublayer)에서 미래 토큰을 Mask하는 함수\n",
+ "def create_look_ahead_mask(x):\n",
+ " '''\n",
+ " 디코더는 현재 위치의 이전 토큰들을 이용해 다음 토큰을 예측하므로, \n",
+ " 현재 위치 이후에 등장하는 토큰들은 모두 가려주어야 함\n",
+ " '''\n",
+ " seq_len = tf.shape(x)[1]\n",
+ " #x 텐서의 shape을 이용해 seq_len을 구함\n",
+ " look_ahead_mask = 1 - tf.linalg.band_part(tf.ones((seq_len, seq_len)), -1, 0)\n",
+ " #tf.linalg.band_part() : seq_len 크기의 전체 1ㄹ로 구성된 정방행렬 만듦\n",
+ " padding_mask = create_padding_mask(x) # 패딩 마스크도 포함\n",
+ " return tf.maximum(look_ahead_mask, padding_mask)\n",
+ "'''tf.maximum() 함수: element-wise maximum(각 element 별로 큰 값을 선택하는 함수)\n",
+ "이전에 만든 패딩 마스크와 조합해 현재 위치의 이후 위치들을 모두 가려주는 마스크를 만들고 반환함.\n",
+ "\n",
+ "tf.maximum(look_ahead_mask, padding_mask): element-wise maximum(각 element 별로 큰 값을 선택하는 함수)\n",
+ "\n",
+ "- look_ahead_mask : 미래 토큰을 Masking 하는데 사용되는 마스크\n",
+ "- padding_mask : 패딩 토큰을 Masking 하는데 사용되는 마스크\n",
+ "\n",
+ "두 마스크를 maximum 함수에 적용해서 \n",
+ "\"각 위치에서 패딩토큰과 미래토큰 중 하나가 존재하는 경우에는 해당 위치를 마스킹하도록 결정\"\n",
+ "-> 이렇게 결합된 마스크는 패딩 및 미래 토큰 모두를 마스킹하는 마스크를 생성함.\n",
+ "'''"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "e9ba8f4b",
+ "metadata": {
+ "id": "e9ba8f4b"
+ },
+ "outputs": [],
+ "source": [
+ "def decoder_layer(dff, d_model, num_heads, dropout, name=\"decoder_layer\"):\n",
+ " #디코더의 sublayer를 구성하는 함수\n",
+ " inputs = tf.keras.Input(shape=(None, d_model), name=\"inputs\")\n",
+ " enc_outputs = tf.keras.Input(shape=(None, d_model), name=\"encoder_outputs\")\n",
+ "\n",
+ " # 디코더는 룩어헤드 마스크(첫번째 서브층)와 패딩 마스크(두번째 서브층) 둘 다 사용.\n",
+ " look_ahead_mask = tf.keras.Input(\n",
+ " shape=(1, None, None), name=\"look_ahead_mask\") #미래토큰을 masking 하도록 사용\n",
+ " padding_mask = tf.keras.Input(shape=(1, 1, None), name='padding_mask')\n",
+ " # 패딩된 부분을 masking하도록 padding_mask를 사용함.\n",
+ "\n",
+ " \n",
+ "\n",
+ " # 멀티-헤드 어텐션 (첫번째 서브층 / 마스크드 셀프 어텐션)\n",
+ " attention1 = MultiHeadAttention(\n",
+ " d_model, num_heads, name=\"attention_1\")(inputs={\n",
+ " 'query': inputs, 'key': inputs, 'value': inputs, # Q = K = V\n",
+ " 'mask': look_ahead_mask # 룩어헤드 마스크\n",
+ " #look_ahed_mask랑 padding mask 모두 사용하려면\n",
+ " #look_ahed_mask 함수 내 tf.maximum 함수를 사용해 둘 중 더 큰 값을 선택함.\n",
+ " \n",
+ " #그러면 디코더의 첫번째 sublayer에선 미래 정보를 참조 못하고, \n",
+ " #두번째 sublayer에선 패딩된 부분을 참조하지 못하게 함.\n",
+ " })\n",
+ "\n",
+ " # 잔차 연결과 층 정규화\n",
+ " attention1 = tf.keras.layers.LayerNormalization(\n",
+ " epsilon=1e-6)(attention1 + inputs)\n",
+ "\n",
+ " # 멀티-헤드 어텐션 (두번째 서브층 / 디코더-인코더 어텐션)\n",
+ " attention2 = MultiHeadAttention(\n",
+ " d_model, num_heads, name=\"attention_2\")(inputs={\n",
+ " 'query': attention1, 'key': enc_outputs, 'value': enc_outputs, # Q != K = V\n",
+ " 'mask': padding_mask # 패딩 마스크\n",
+ " })\n",
+ "\n",
+ " # 드롭아웃 + 잔차 연결과 층 정규화\n",
+ " attention2 = tf.keras.layers.Dropout(rate=dropout)(attention2)\n",
+ " attention2 = tf.keras.layers.LayerNormalization(\n",
+ " epsilon=1e-6)(attention2 + attention1)\n",
+ "\n",
+ " # 포지션 와이즈 피드 포워드 신경망 (세번째 서브층)\n",
+ " outputs = tf.keras.layers.Dense(units=dff, activation='relu')(attention2)\n",
+ " outputs = tf.keras.layers.Dense(units=d_model)(outputs)\n",
+ "\n",
+ " # 드롭아웃 + 잔차 연결과 층 정규화\n",
+ " outputs = tf.keras.layers.Dropout(rate=dropout)(outputs)\n",
+ " outputs = tf.keras.layers.LayerNormalization(\n",
+ " epsilon=1e-6)(outputs + attention2)\n",
+ "\n",
+ " return tf.keras.Model(\n",
+ " inputs=[inputs, enc_outputs, look_ahead_mask, padding_mask],\n",
+ " outputs=outputs,\n",
+ " name=name)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "66f05031",
+ "metadata": {
+ "id": "66f05031"
+ },
+ "outputs": [],
+ "source": [
+ "def decoder(vocab_size, num_layers, dff,\n",
+ " d_model, num_heads, dropout,\n",
+ " name='decoder'):\n",
+ " inputs = tf.keras.Input(shape=(None,), name='inputs')\n",
+ " enc_outputs = tf.keras.Input(shape=(None, d_model), name='encoder_outputs')\n",
+ "\n",
+ " # 디코더는 룩어헤드 마스크(첫번째 서브층)와 패딩 마스크(두번째 서브층) 둘 다 사용.\n",
+ " look_ahead_mask = tf.keras.Input(\n",
+ " shape=(1, None, None), name='look_ahead_mask')\n",
+ " padding_mask = tf.keras.Input(shape=(1, 1, None), name='padding_mask')\n",
+ "\n",
+ " # 포지셔널 인코딩 + 드롭아웃\n",
+ " embeddings = tf.keras.layers.Embedding(vocab_size, d_model)(inputs)\n",
+ " embeddings *= tf.math.sqrt(tf.cast(d_model, tf.float32))\n",
+ " embeddings = PositionalEncoding(vocab_size, d_model)(embeddings)\n",
+ " outputs = tf.keras.layers.Dropout(rate=dropout)(embeddings)\n",
+ "\n",
+ " # 디코더를 num_layers개 쌓기\n",
+ " for i in range(num_layers):\n",
+ " outputs = decoder_layer(dff=dff, d_model=d_model, num_heads=num_heads,\n",
+ " dropout=dropout, name='decoder_layer_{}'.format(i),\n",
+ " )(inputs=[outputs, enc_outputs, look_ahead_mask, padding_mask])\n",
+ "\n",
+ " return tf.keras.Model(\n",
+ " inputs=[inputs, enc_outputs, look_ahead_mask, padding_mask],\n",
+ " outputs=outputs,\n",
+ " name=name)\n",
+ " "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "2e5d5fc8",
+ "metadata": {
+ "id": "2e5d5fc8"
+ },
+ "source": [
+ "## Transformer 구현"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "dcc9c225",
+ "metadata": {
+ "id": "dcc9c225"
+ },
+ "outputs": [],
+ "source": [
+ "def transformer(vocab_size, num_layers, dff,\n",
+ " d_model, num_heads, dropout,\n",
+ " name=\"transformer\"):\n",
+ "\n",
+ " # 인코더의 입력\n",
+ " inputs = tf.keras.Input(shape=(None,), name=\"inputs\")\n",
+ "\n",
+ " # 디코더의 입력\n",
+ " dec_inputs = tf.keras.Input(shape=(None,), name=\"dec_inputs\")\n",
+ "\n",
+ " # 인코더의 패딩 마스크\n",
+ " enc_padding_mask = tf.keras.layers.Lambda(\n",
+ " create_padding_mask, output_shape=(1, 1, None),\n",
+ " name='enc_padding_mask')(inputs)\n",
+ "\n",
+ " # 디코더의 룩어헤드 마스크(첫번째 서브층)\n",
+ " look_ahead_mask = tf.keras.layers.Lambda(\n",
+ " create_look_ahead_mask, output_shape=(1, None, None),\n",
+ " name='look_ahead_mask')(dec_inputs)\n",
+ "\n",
+ " # 디코더의 패딩 마스크(두번째 서브층)\n",
+ " dec_padding_mask = tf.keras.layers.Lambda(\n",
+ " create_padding_mask, output_shape=(1, 1, None),\n",
+ " name='dec_padding_mask')(inputs)\n",
+ "\n",
+ " # 인코더의 출력은 enc_outputs. 디코더로 전달된다.\n",
+ " enc_outputs = encoder(vocab_size=vocab_size, num_layers=num_layers, dff=dff,\n",
+ " d_model=d_model, num_heads=num_heads, dropout=dropout,\n",
+ " )(inputs=[inputs, enc_padding_mask]) # 인코더의 입력은 입력 문장과 패딩 마스크\n",
+ "\n",
+ " # 디코더의 출력은 dec_outputs. 출력층으로 전달된다.\n",
+ " dec_outputs = decoder(vocab_size=vocab_size, num_layers=num_layers, dff=dff,\n",
+ " d_model=d_model, num_heads=num_heads, dropout=dropout,\n",
+ " )(inputs=[dec_inputs, enc_outputs, look_ahead_mask, dec_padding_mask])\n",
+ "\n",
+ " # 다음 단어 예측을 위한 출력층\n",
+ " outputs = tf.keras.layers.Dense(units=vocab_size, name=\"outputs\")(dec_outputs)\n",
+ "\n",
+ " return tf.keras.Model(inputs=[inputs, dec_inputs], outputs=outputs, name=name)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "157eba42",
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 323
+ },
+ "id": "157eba42",
+ "outputId": "52e4255a-815c-473f-9279-eaabddba93f7"
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "(1, 9000, 128)\n",
+ "(1, 9000, 128)\n"
+ ]
+ },
+ {
+ "output_type": "execute_result",
+ "data": {
+ "image/png": "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knrnnXdWrlz51VdfNTQ0MJ0FAAAAACTB4AIAACivwMDAt2/fnjhxgukgAAAAACAJBhcAAEB59e3bd968eREREUwHAQAAAABJMLgAAABKbdWqVQ8ePLhy5QrTQQAAAACgQxhcUDfLli3T1dVlsViZmZmSXzp37py+vv5PP/3ERMzu27lzp76+frs7KA8q2ktycunSpZCQkKSkJBsbGxaLxWKxWs0ROHXqVF1dXU1NzWHDht27d09hwRiJdPr06d27d4tEIhm2Ce1ycnJ69913v/nmG6aDAACAspNQCfeQutaEarZf/v7+rL8sXLiw5UuoY1tqW8empKSIu87ExKR7zWJwQd0cPXr022+/leYliqIUFUqWQkJC/vnPfypscyraS/KwZcuWqKioDRs2eHt7P3361NbW1tjYOC4u7uzZs+J1Ll68mJCQMGvWrOzsbCcnJ4VlYySSp6cnl8t1d3cvLy+XYbPQrsDAwNTU1KdPnzIdBAAAlJqESriH1LUmVL/9MjIySktLy8nJiYmJES9EHdtK2zp29uzZBQUFV69e9fDw6HazGFzovWbOnFlRUTFr1iymgyg1efdSXV2dq6urnBqXoV27dp08efLUqVO6urrihVFRURoaGgKBoKKigsFsLSk4UmBg4MiRIz08PJqamhSwud7My8vL0tKyZZUAAACgSOpaE6rffvF4vOnTp9vb22tra9NLUMe2q1Udy2KxLC0t3dzcBg0a1O02MbighlgsVjdekh5FUQkJCUeOHOl5UxATE1NUVMR0ik7k5eVt3rx569atXC635XJXV9egoKCXL1+uWbOGqWytKD5SWFhYZmbmvn37FLO5XovNZi9YsCAuLk79/sECAACyJZNyV/FUoibsBsb3C3WsBDKvYzG40AUikSg0NNTa2prH440YMSI+Pp4QEh0draOjw+fzU1NTZ8yYoaenZ2Vl1XLWtGPHjo0dO5bL5ero6AwYMGD79u0SNhEVFcXlcs3MzPz9/fv27cvlcl1dXTMyMuhXr1275uDgoK+vz+VyHR0dL1y4QC+nKGrPnj2DBw/W1tbW19dfu3atuMGOXrp+/bq1tTWLxTpw4ECneyESib788svBgwfzeDwTE5OBAwd++eWX8+bNk7Aj+/bt09HR0dDQGDNmjLm5OYfD0dHRcXJycnNz69evH5fLNTAw+OKLL8Trd7RrV65c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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "execution_count": 16
+ }
+ ],
+ "source": [
+ "small_transformer = transformer(\n",
+ " vocab_size = 9000,\n",
+ " num_layers = 4,\n",
+ " dff = 512,\n",
+ " d_model = 128,\n",
+ " num_heads = 4,\n",
+ " dropout = 0.3,\n",
+ " name=\"small_transformer\")\n",
+ "\n",
+ "tf.keras.utils.plot_model(\n",
+ " small_transformer, to_file='small_transformer.png', show_shapes=True)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "6f6a3a83",
+ "metadata": {
+ "id": "6f6a3a83"
+ },
+ "source": [
+ "## 손실함수\n",
+ "- seq2seq에서 사용되는 손실함수\n",
+ "- 인코더에서 출력된 context vector를 decoder에 입력하고, 디코더에서 이를 기반으로 출력된 문장을 실제 정답 문장과 비교해서 손실을 계산함."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "87a3d5ec",
+ "metadata": {
+ "id": "87a3d5ec"
+ },
+ "outputs": [],
+ "source": [
+ "def loss_function(y_true, y_pred):\n",
+ " #y_true : 실제 정답 문장\n",
+ " #y_pred : 디코더에서 출력된 모델의 예측값\n",
+ " y_true = tf.reshape(y_true, shape=(-1, MAX_LENGTH - 1)) \n",
+ " '''\n",
+ " MAX_LENGTH -1의 형태로 reshape하는 이유는 \n",
+ " 디코더에서 사용되는 'start token'을 제외한 모든 토큰을 포함하기 위함.\n",
+ " '''\n",
+ " loss = tf.keras.losses.SparseCategoricalCrossentropy(\n",
+ " from_logits=True, reduction='none')(y_true, y_pred)\n",
+ " #SparseCategoricalCrossentropy : y_true와 y_pred 간의 손실 계산\n",
+ " #from_logits=True : y_pred가 확률이 아니라 logit값이므로 softmax함수를 거치지 않게끔 함.\n",
+ " #reduction=none : 배치 단위의 데이터의 평균 대신 각각의 샘플에 대한 손실값을 반환함.\n",
+ "\n",
+ " mask = tf.cast(tf.not_equal(y_true, 0), tf.float32)\n",
+ " #y_true가 패딩 토큰인 경우에 대한 손실을 제외하고자 마스크를 적용\n",
+ " #패딩토큰에 해당하는 부분은 mask 변수를 사용해 0으로 설정함.\n",
+ " loss = tf.multiply(loss, mask)\n",
+ " #손실값과 마스크를 곱해 마스크가 적용된 손실을 계산하고, \n",
+ " #이를 평균 내어 반환함.\n",
+ " return tf.reduce_mean(loss)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "8a831e8a",
+ "metadata": {
+ "id": "8a831e8a"
+ },
+ "source": [
+ "## custom schedule\n",
+ "- tf.keras.optimizers.schedules.LearningRateSchedule를 상속\n",
+ "- 낮은 학습률로 시작하여 점차적으로 학습률을 높여 다시 감소하기 시작하는 지점까지 학습률을 높이도록 설계됨\n",
+ " - 신경망 훈련에서 일반적으로 사용되는 방식"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "2f74e232",
+ "metadata": {
+ "id": "2f74e232"
+ },
+ "outputs": [],
+ "source": [
+ "class CustomSchedule(tf.keras.optimizers.schedules.LearningRateSchedule):\n",
+ "\n",
+ " def __init__(self, d_model, warmup_steps=4000):\n",
+ " '''모델의 차원 크기(`d_model`)와 워밍업 단계 수(`warmup_steps`)를 포함하여 \n",
+ " 스케줄의 하이퍼파라미터를 초기화함\n",
+ " '''\n",
+ " super(CustomSchedule, self).__init__()\n",
+ " self.d_model = d_model\n",
+ " self.d_model = tf.cast(self.d_model, tf.float32)\n",
+ " self.warmup_steps = warmup_steps\n",
+ " \n",
+ "\n",
+ " def __call__(self, step):\n",
+ " '''d_model` 매개 변수는 `__call__` 메서드 내부의 나누기 연산이 \n",
+ " 정수를 반환하도록 하기 위해 정수로 캐스팅됨.\n",
+ " '''\n",
+ " #현재 훈련 단계를 나타내는 `step` 매개 변수를 받음\n",
+ " #이 메서드는 현재 단계에서 학습률을 계산하는 데 사용되는 두 개의 인수인 `arg1`과 `arg2`를 계산\n",
+ " arg1 = tf.math.rsqrt(step)\n",
+ " #'arg1'은 스텝 수의 역제곱근으로 계산\n",
+ " arg2 = step * (self.warmup_steps**-1.5)\n",
+ " #'arg2'는 스텝 수에 'warmup_steps'의 역제곱근을 `-1.5`의 거듭제곱으로 곱한 값으로 계산\n",
+ " \n",
+ " return tf.math.rsqrt(self.d_model) * tf.math.minimum(arg1, arg2)\n",
+ " #학습률은 `d_model`의 역제곱근에 `arg1`과 `arg2`의 최소값을 곱한 값으로 계산"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "4fb94965",
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 467
+ },
+ "id": "4fb94965",
+ "outputId": "27bd8827-3790-446e-e14b-d287a3b1d71b"
+ },
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "Text(0.5, 0, 'Train Step')"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 19
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "image/png": "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kydL+3NzczFy5Ejcdddd2LNnD3788UcUFhbioYcesql+zUlaUsEOd/9ZDOwQCpkMOKwtRb6+6voHEBER3cyEjXbu3Ck2bdokhBAiPz9fJCUlicDAQHHLLbeInJwcm841YMAAMWXKFOmzyWQSkZGRIi0trd74Rx99VIwYMcJqW3x8vHjqqaeEEEKYzWah0WjEokWLpP0lJSVCqVSKL774QgghxMGDBwUAsXPnTinmhx9+EDKZTJw9e1YIIcTatWuFt7e3MJlMUsy3334rZDKZMBqNja6fTqcTAIROp2v0MU018p2tInrGevHTAa1dz/tA3Xm/yDpl1/MSERG5qqa23zb3VPXr1w933nkngNrhv/T0dOj1emRnZ6N3796NPo/RaER2djYSExOlbXK5HImJicjMzKz3mMzMTKt4AEhKSpLic3NzodVqrWLUajXi4+OlmMzMTAQHB6Nfv35STGJiIuRyObKysgAAffv2hVwuxyeffAKTyQSdTof//Oc/SExMhI/Pte+CMxgM0Ov1Vq/mIi2p4GWfJRUs7uocBgDYdLj+3kMiIiKqZbcJOLt378Z9993X6PjCwkKYTCaEh4dbbQ8PD4dWq633GK1W22C85f16MWFhYVb7vb29ERISIsXExMTgp59+wqxZs6BUKhEcHIwzZ87gyy+/bLBOaWlpUKvV0isqKqrBeHtyxJwqALirS+3vauuxQhhqrn6QNhEREdWyqQX+8ccf8cILL2DWrFk4ceIEAODw4cNITk5G//79pUfZuDutVotJkyZh/Pjx2LlzJ3755RcoFAr85S9/gRDimsfNnDkTOp1OejVl4n5TWdapsteSChbdI4PQKlCJCqMJO3K5tAIREdG1NHrxz48++giTJk1CSEgILl68iA8//BCvv/46nnvuOYwaNQr79+9H165dG33h0NBQeHl5IT8/32p7fn4+NBpNvcdoNJoG4y3v+fn5iIiIsIqxDE1qNJqrJsLX1NSguLhYOn7p0qVQq9VYuHChFPPZZ58hKioKWVlZuPXWW+stn1KphFKpvF7VHcLogInqACCXy3Bn51b4ctcZbD58AYNjW9n1/ERERJ6i0d0ab731Fv7973+jsLAQX375JQoLC/Huu+/ijz/+wLJly2xKqABAoVCgb9++yMjIkLaZzWZkZGQgISGh3mMSEhKs4gFg48aNUnxMTAw0Go1V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I1bb3fW727x5c73/TY4fP14IUXub+Jw5c0R4eLhQKpVi6NChV9W9qKhIjBkzRgQEBIigoCAxYcIEUVpaahWzd+9eMWjQIKFUKkXr1q3FggULrirLl19+KTp16iQUCoXo3r27+P777632N6YsttQvNzf3mv8mLWuPZWdni/j4eKFWq4VKpRJdu3YV//rXv6wSEmfW73p1rKioEPfcc49o1aqV8PHxEdHR0WLSpElXJeDu+h1avP/++8LX11eUlJRcdbyrf4fXaxeEcK2/nY0py/XI6ipORERERDeAc6qIiIiI7IBJFREREZEdMKkiIiIisgMmVURERER2wKSKiIiIyA6YVBERERHZAZMqIiIiIjtgUkVERERkB0yqiIgAtGvXDm+++aazi0FEboxJFRG5FZlM1uDrH//4R5POu3PnTkyePPmGypabm4u//vWviIyMhEqlQps2bTBy5EgcPnwYAHDy5EnIZDLpgdRE5Fm8nV0AIiJbnD9/Xvp5zZo1SE1NxZEjR6RtAQEB0s9CCJhMJnh7X/9PXatWrW6oXNXV1bj77rvRuXNnfP3114iIiMCZM2fwww8/oKSk5IbOTUTugT1VRORWNBqN9FKr1ZDJZNLnw4cPIzAwED/88AP69u0LpVKJrVu34vjx4xg5ciTCw8MREBCA/v374+eff7Y675XDfzKZDB9++CEefPBB+Pn5ITY2Ft9+++01y3XgwAEcP34c7777Lm699VZER0fjtttuw/z583HrrbcCAGJiYgAAffr0gUwmwx133CEd/+GHH6Jr165QqVTo0qUL3n33XWmfpYdr9erVGDhwIFQqFXr06IFffvnFDr9RIrIXJlVE5HFefvllLFiwAIcOHULPnj1RVlaG4cOHIyMjAzk5ORg2bBjuv/9+5OXlNXieV155BY8++ij27duH4cOHY+zYsSguLq43tlWrVpDL5fjqq69gMpnqjdmxYwcA4Oeff8b58+fx9ddfAwA+//xzpKam4tVXX8WhQ4fwr3/9C3PmzMHKlSutjn/xxRcxffp05OTkICEhAffffz+Kiops/fUQkaMIIiI39cknnwi1Wi193rx5swAg1q1bd91ju3fvLt5++23pc3R0tHjjjTekzwDE7Nmzpc9lZWUCgPjhhx+uec533nlH+Pn5icDAQHHnnXeKefPmiePHj0v7c3NzBQCRk5NjdVyHDh3EqlWrrLb985//FAkJCVbHLViwQNpfXV0t2rRpI/79739ft65E1DzYU0VEHqdfv35Wn8vKyvDCCy+ga9euCA4ORkBAAA4dOnTdnqqePXtKP/v7+yMoKAgFBQXXjJ8yZQq0Wi0+//xzJCQkYO3atejevTs2btx4zWPKy8tx/PhxTJw4EQEBAdJr/vz5OH78uFVsQkKC9LO3tzf69euHQ4cONVgHImo+nKhORB7H39/f6vMLL7yAjRs3YvHixejYsSN8fX3xl7/8BUajscHz+Pj4WH2WyWQwm80NHhMYGIj7778f999/P+bPn4+kpCTMnz8fd999d73xZWVlAIAPPvgA8fHxVvu8vLwavBYRuRb2VBGRx9u2bRsef/xxPPjgg4iLi4NGo8HJkycdfl2ZTIYuXbqgvLwcAKBQKADAas5VeHg4IiMjceLECXTs2NHqZZnYbvH7779LP9fU1CA7Oxtdu3Z1eD2IqHHYU0VEHi82NhZff/017r//fshkMsyZM+e6PU622rNnD+bOnYvHHnsM3bp1g0KhwC+//IKPP/4YM2bMAACEhYXB19cX6enpaNOmDVQqFdRqNV555RU8//zzUKvVGDZsGAwGA3bt2oWLFy8iJSVFusbSpUsRGxuLrl274o033sDFixfxxBNP2LUeRNR0TKqIyOO9/vrreOKJJzBw4ECEhoZixowZ0Ov1dr1GmzZt0K5dO7zyyivSEgiWz3/7298A1M6DWrJkCebNm4fU1FQMHjwYW7ZswZNPPgk/Pz8sWrQIL774Ivz9/REXF4dp06ZZXWPBggVYsGAB9uzZg44dO+Lbb79FaGioXetBRE0nE0IIZxeCiIiu7eTJk4iJiUFOTg569+7t7OIQ0TVwThURERGRHTCpIiIiIrIDDv8RERER2QF7qoiIiIjsgEkVERERkR0wqSIiIiKyAyZVRERERHbApIqIiIjIDphUEREREdkBkyoiIiIiO2BSRURERGQH/x9J7OoaV4icwwAAAABJRU5ErkJggg==\n"
+ },
+ "metadata": {}
+ }
+ ],
+ "source": [
+ "sample_learning_rate = CustomSchedule(d_model=128)\n",
+ "#각 단어를 모델에서 128차원의 벡터로 표현하도록 함\n",
+ "\n",
+ "plt.plot(sample_learning_rate(tf.range(200000, dtype=tf.float32)))\n",
+ "#training step이 200000번임.\n",
+ "plt.ylabel(\"Learning Rate\")\n",
+ "plt.xlabel(\"Train Step\")"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.9.12"
+ },
+ "colab": {
+ "provenance": [],
+ "include_colab_link": true
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
\ No newline at end of file
diff --git "a/Transcribe_TransformerKoreanChatbot_ipynb\354\235\230_\354\202\254\353\263\270.ipynb" "b/Transcribe_TransformerKoreanChatbot_ipynb\354\235\230_\354\202\254\353\263\270.ipynb"
new file mode 100644
index 0000000..a1b9935
--- /dev/null
+++ "b/Transcribe_TransformerKoreanChatbot_ipynb\354\235\230_\354\202\254\353\263\270.ipynb"
@@ -0,0 +1,1004 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "view-in-github",
+ "colab_type": "text"
+ },
+ "source": [
+ "
"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "## Transformer를 사용하는 데 쓰이는 라이브러리\n",
+ "- transformer에 기반하는 다른 모델을 사용할 수 있는 라이브러리가 많았고, transformer 기능을 구현하는 코드를 통해서 짚어보기로 함.\n",
+ "- tensorflow(아래 구현 코드에서 확인 가능)\n",
+ "- pytorch\n",
+ " - https://pytorch.kr/hub/huggingface_pytorch-transformers/\n",
+ "- huggingface transformers\n",
+ " - https://github.com/huggingface/transformers/blob/main/README_ko.md\n",
+ "- fairseq\n",
+ " - https://cloud.google.com/tpu/docs/tutorials/transformer-pytorch?hl=ko"
+ ],
+ "metadata": {
+ "id": "DXRgJAGiD0-Z"
+ },
+ "id": "DXRgJAGiD0-Z"
+ },
+ {
+ "cell_type": "markdown",
+ "id": "2fe11c0f",
+ "metadata": {
+ "id": "2fe11c0f"
+ },
+ "source": [
+ "## 필요 라이브러리 import"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "bbebe731",
+ "metadata": {
+ "id": "bbebe731"
+ },
+ "outputs": [],
+ "source": [
+ "import numpy as np\n",
+ "import matplotlib.pyplot as plt\n",
+ "import tensorflow as tf"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "5cd2132b",
+ "metadata": {
+ "id": "5cd2132b"
+ },
+ "source": [
+ "TypeError: Unable to convert function return value to a Python type! The signature was\n",
+ "\t() -> handle\n",
+ "- tensorflow를 import 할 때, 해당 오류가 발생하는 건 tensorflow 라이브러리 버전이 낮기 때문임.\n",
+ " - pip install --upgrade tensorflow\n",
+ " - pip uninstall tensorflow 하고서 pip install tensorflow 하기"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "b9c7b06c",
+ "metadata": {
+ "id": "b9c7b06c"
+ },
+ "source": [
+ "ERROR: Could not install packages due to an OSError: [WinError 5] 액세스가 거부되었습니다: \n",
+ "- 해당 에러가 cmd 창에서 나타나는 경우, 다음 명령문을 conda install 전에 입력한다.\n",
+ " - conda config --set ssl_verify false\n",
+ " - conda install pip tensorflow"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "위의 방식대로 했는데도 안 됐음...\n",
+ "--> 근데 그냥... 코랩으로 돌리면 되는 거였음..."
+ ],
+ "metadata": {
+ "id": "mSVrStdeJrjB"
+ },
+ "id": "mSVrStdeJrjB"
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "92cc660a",
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 35
+ },
+ "id": "92cc660a",
+ "outputId": "d0cb368f-7bd3-4880-beac-acfea6e2db1e"
+ },
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "'2.12.0'"
+ ],
+ "application/vnd.google.colaboratory.intrinsic+json": {
+ "type": "string"
+ }
+ },
+ "metadata": {},
+ "execution_count": 4
+ }
+ ],
+ "source": [
+ "tf.__version__ #2.6.0 이상 버전에서 작업 진행 필요"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "6f9aa344",
+ "metadata": {
+ "id": "6f9aa344"
+ },
+ "source": [
+ "## Positional Encoding 구현"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "Tensorflow 및 Keras에서 Positional Encoding 레이어를 정의하는 내용.\n",
+ "- transformer의 입력 시퀀스에 위치 인코딩을 추가해주는 역할\n",
+ " - 위치 인코딩 : 입력 시퀀스의 토큰 위치에 대한 정보를 모델에 제공하기 위해 사용되며, 이는 시퀀스의 순서와 문맥을 이해하는 데 중요함."
+ ],
+ "metadata": {
+ "id": "5mPnbVw6T50X"
+ },
+ "id": "5mPnbVw6T50X"
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "d833813b",
+ "metadata": {
+ "id": "d833813b"
+ },
+ "outputs": [],
+ "source": [
+ "class PositionalEncoding(tf.keras.layers.Layer): #tf.keras.layers.Layer를 상속받음\n",
+ " def __init__(self, position, d_model): \n",
+ " #position:입력시퀀스의 최대길이, d_model:입력 임베딩의 차원\n",
+ " super(PositionalEncoding, self).__init__()\n",
+ " self.pos_encoding = self.positional_encoding(position, d_model)\n",
+ "\n",
+ " def get_angles(self, position, i, d_model):\n",
+ " #모든 위치, 임베딩 차원에 대한 각도 배열 반환.\n",
+ " # i : 각도의 인덱스\n",
+ " ## 짝수면 2로 나뉘어져서 지수가 0 -> sin함수 쓸 때 사용되는 각도 생성\n",
+ " ## 홀수면 지수가 1 -> cos함수 쓸 때 사용되는 각도 생성\n",
+ " angles = 1 / tf.pow(10000, (2 * (i // 2)) / tf.cast(d_model, tf.float32))\n",
+ " return position * angles\n",
+ " # tf.pow : x^y\n",
+ " # tf.cast:배열의 데이터타입을 바꿔줌. 여기선 d_model을 float32형태로 변화.\n",
+ "\n",
+ " def positional_encoding(self, position, d_model):\n",
+ " \n",
+ " #get_angles 함수 : 인코딩할 단어 위치(position), 임베딩 차원(d_model),\n",
+ " #인덱스(i)에 따라 각도(angles) 계산함\n",
+ " angle_rads = self.get_angles(\n",
+ " position=tf.range(position, dtype=tf.float32)[:, tf.newaxis],\n",
+ " i=tf.range(d_model, dtype=tf.float32)[tf.newaxis, :],\n",
+ " d_model=d_model) \n",
+ "\n",
+ " # 배열의 짝수 인덱스(2i)에는 사인 함수 적용\n",
+ " sines = tf.math.sin(angle_rads[:, 0::2])\n",
+ "\n",
+ " # 배열의 홀수 인덱스(2i+1)에는 코사인 함수 적용\n",
+ " cosines = tf.math.cos(angle_rads[:, 1::2])\n",
+ "\n",
+ " angle_rads = np.zeros(angle_rads.shape) \n",
+ " #계산된 sines와 cosines를 이용해 각도 배열(angle_rads) 만듦\n",
+ " angle_rads[:, 0::2] = sines\n",
+ " angle_rads[:, 1::2] = cosines\n",
+ " pos_encoding = tf.constant(angle_rads)\n",
+ " #angle_rads 기반으로 pos_encoding 배열을 만듦\n",
+ " #이 배열은 angle_rads를 그대로 복사한 다음에, tf.newaxis로 차원을 추가하고\n",
+ " pos_encoding = pos_encoding[tf.newaxis, ...]\n",
+ "\n",
+ " print(pos_encoding.shape)\n",
+ " #tf.cast를 이용해 float32형태로 변경함\n",
+ " return tf.cast(pos_encoding, tf.float32)\n",
+ " #해당 배열의 모양은 (1=배치차원, position, d_model)임.\n",
+ " \n",
+ " '''\n",
+ " 딥러닝 모델 학습 시, 데이터셋은 일반적으로 미니배치(minibatch) 단위로 처리됨\n",
+ " 전체 데이터셋이 아닌 일부 데이터(ex. 32개의 이미지)를 한번에 모델에 입력하고, 그 출력을 이용해 모델을 학습시킴\n",
+ " 이렇게 모델에 입력되는 데이터의 묶음을 미니 배치라고 하며, 미니배치 단위로 \n",
+ " 처리하는 건 GPU를 비롯한 하드웨어의 병렬 처리 기능을 활용해 연산 속도를 높일 수 있음.\n",
+ "\n",
+ " 배치 차원 = 미니 배치의 크기\n",
+ " 배열은 1개의 미니배치를 처리함.\n",
+ " '''\n",
+ "\n",
+ " def call(self, inputs): \n",
+ " #input sequence에 tensor 추가되고, \n",
+ " #브로드캐스팅을 사용해 위치 인코딩이 시퀀스의 올바른 부분에 추가되도록 보장함.\n",
+ " ## 브로드캐스팅 : NumPy 및 TensorFlow와 같은 배열/텐서 연산에서 자동으로 배열/텐서의 크기를 조정해 연산이 가능하도록 하는 기능\n",
+ " return inputs + self.pos_encoding[:, :tf.shape(inputs)[1], :]\n",
+ " ##self는 pos_encoding의 첫번째 차원인 배치 차원과 동일함."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "026d42a0",
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 473
+ },
+ "id": "026d42a0",
+ "outputId": "650011ba-be03-4c83-d2fb-7135aea515d1"
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "(1, 50, 128)\n"
+ ]
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "image/png": "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QmvSpIn2+eefa/v27dM+/vhjLTY2VnvkkUfEMhfCeZ84cUL78ccftR9//FEDoM2ePVv78ccfRfVMbc5x0KBBWteuXbXNmzdr3377rda6dWvt1ltv9dYp1UpN511ZWaldd911WtOmTbXt27frfs5VVFSIbfjieZP7LtiJi6Zp2iuvvKIlJSVpVqtV69Gjh7Zp0yZvH1K9AuDytXDhQrFMWVmZdu+992pRUVFacHCw9ve//107fPiw9w76HDl94nKhnveKFSu0Sy65RLPZbFrbtm21N998U/e+0+nUpkyZosXFxWk2m03r37+/tnv3bi8dbf0oLi7WHnjgAS0pKUmz2+3aRRddpD3++OO6/3FdCOf9zTffuPz3PGLECE3TaneOx44d02699VYtNDRUCw8P10aOHKmdOHHCC2dTezWd9759+wx/zn3zzTdiG7543uQ+k6Yp7SeJiIiIGrAL8h4XIiIiujBx4kJEREQ+gxMXIiIi8hmcuBAREZHP4MSFiIiIfAYnLkREROQzOHEhIiIin8GJCxHVyv79+2EymbB9+3ZvHwoR+TFOXIh8xB133AGTyQSTyYTAwEDExcXhqquuwoIFC8Rze+pzX0OHDq3XbRIR1QdOXIh8yKBBg3D48GHs378fq1atwpVXXokHHngA11xzDaqrq719eERE5xwnLkQ+xGazIT4+Hk2aNMGll16Kxx57DJ9++ilWrVqFd999FwBQWFiIu+66C40aNUJ4eDj69euHn376SWxj+vTp6NKlC9544w00a9YMwcHBuOmmm1BUVCTef++99/Dpp5+KKzzr168X6//555+48sorERwcjM6dOyMjI+N8fgmIyM9x4kLk4/r164fOnTvj448/BgDceOONyM/Px6pVq5CZmYlLL70U/fv3R0FBgVhn7969+PDDD7FixQqsXr0aP/74I+69914AwEMPPYSbbrpJXN05fPgwevbsKdZ9/PHH8dBDD2H79u24+OKLceutt/JqDxGdN5y4EF0A2rZti/379+Pbb7/Fli1bsGzZMnTv3h2tW7fGiy++iMjISHz00Udi+fLycixatAhdunRBnz598Morr2Dp0qXIzc1FaGgogoKCxNWd+Ph4WK1Wse5DDz2EIUOG4OKLL8aMGTNw4MAB7N271xunTUR+iBMXoguApmkwmUz46aefUFJSgpiYGISGhorXvn378Mcff4jlk5KS0KRJE/Hn1NRUOJ1O7N69+6z76tSpk8gJCQkAgPz8/Ho8GyIiYwHePgAi8tzOnTvRokULlJSUICEhQXdPyl8iIyPrZV+BgYEim0wmAKj3qiYiIiOcuBD5uHXr1uGXX37BhAkT0LRpU+Tm5iIgIADJycmG62RlZSEnJweJiYkAgE2bNsFsNqNNmzYAAKvVCofDcT4On4ioTjhxIfIhFRUVyM3NhcPhQF5eHlavXo1Zs2bhmmuuwe233w6z2YzU1FQMHToUzz//PC6++GLk5ORg5cqV+Pvf/47u3bsDAOx2O0aMGIEXX3wRxcXFuP/++3HTTTchPj4eAJCcnIwvv/wSu3fvRkxMDCIiIrx52kREAicuRD5k9erVSEhIQEBAAKKiotC5c2fMmzcPI0aMgNl86pa1L774Ao8//jhGjhyJI0eOID4+Hn369EFcXJzYTqtWrXDDDTfg6quvRkFBAa655hq89tpr4v3Ro0dj/fr16N69O0pKSvDNN9/UeAWHiOh8MWmapnn7IIjo/Jk+fTqWL1/O1v1E5JNYVUREREQ+gxMXIiIi8hn8qIiIiIh8Bq+4EBERkc/gxIWIiIh8BicuRERE5DM4cSEiIiKfwYkLERER+QxOXIiIiMhncOJCREREPoMTFyIiIvIZnLgQERGRz/h/EUZqzUoz920AAAAASUVORK5CYII=\n"
+ },
+ "metadata": {}
+ }
+ ],
+ "source": [
+ "sample_pos_encoding = PositionalEncoding(50, 128)\n",
+ "#아까 만든 클래스를 사용해서 생성한 sample_pos_encoding 배열을 시각화함.\n",
+ "\n",
+ "#pcolormesh : 2차원 배열을 시각화할 때 사용하며, 배열 값에 따라 색상을 적용해서 이미지 생성함.\n",
+ "\n",
+ "#sample_pos_encoding은 tensor 객체이므로, \n",
+ "#numpy 메소드를 사용해서 tensor를 numpy 배열로 변환한 다음\n",
+ "#[0]을 사용해서 (batch 차원, position, d_model)에서 인덱스 0인 batch 차원을 없앤 채로 반환함.\n",
+ "\n",
+ "plt.pcolormesh(sample_pos_encoding.pos_encoding.numpy()[0], cmap='RdBu')\n",
+ "plt.xlabel('Depth')\n",
+ "plt.xlim((0, 128))\n",
+ "plt.ylabel('Position')\n",
+ "plt.colorbar()\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "미니배치에서 첫번째 꺼는 항상 제외하고 계산하는 건지"
+ ],
+ "metadata": {
+ "id": "ZKfG3N0BhTEK"
+ },
+ "id": "ZKfG3N0BhTEK"
+ },
+ {
+ "cell_type": "markdown",
+ "id": "0d531b2b",
+ "metadata": {
+ "id": "0d531b2b"
+ },
+ "source": [
+ "## Scaled dot product attention"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "efddecf0",
+ "metadata": {
+ "id": "efddecf0"
+ },
+ "outputs": [],
+ "source": [
+ "def scaled_dot_product_attention(query, key, value, mask):\n",
+ " # query 크기 : (batch_size, num_heads, query의 문장 길이, d_model/num_heads)\n",
+ " # key 크기 : (batch_size, num_heads, key의 문장 길이, d_model/num_heads)\n",
+ " # value 크기 : (batch_size, num_heads, value의 문장 길이, d_model/num_heads)\n",
+ " # padding_mask : (batch_size, 1, 1, key의 문장 길이)\n",
+ "\n",
+ " # Q와 K의 곱. 어텐션 스코어 행렬. \n",
+ " matmul_qk = tf.matmul(query, key, transpose_b=True) \n",
+ " #'key'의 transpose를 사용해 key와 query의 dot product를 계산\n",
+ "\n",
+ " # 스케일링\n",
+ " # dk의 루트값으로 나눠준다.\n",
+ " depth = tf.cast(tf.shape(key)[-1], tf.float32)\n",
+ " logits = matmul_qk / tf.math.sqrt(depth)\n",
+ "\n",
+ " # 마스킹. 어텐션 스코어 행렬의 마스킹 할 위치에 매우 작은 음수값을 넣는다.\n",
+ " # 매우 작은 값이므로 소프트맥스 함수를 지나면 행렬의 해당 위치의 값은 0이 된다.\n",
+ " if mask is not None:\n",
+ " logits += (mask * -1e9)\n",
+ "\n",
+ " # 소프트맥스 함수는 마지막 차원인 key의 문장 길이 방향으로 수행된다.\n",
+ " # attention weight : (batch_size, num_heads, query의 문장 길이, key의 문장 길이)\n",
+ " attention_weights = tf.nn.softmax(logits, axis=-1)\n",
+ "\n",
+ " # output : (batch_size, num_heads, query의 문장 길이, d_model/num_heads)\n",
+ " output = tf.matmul(attention_weights, value)\n",
+ "\n",
+ " return output, attention_weights"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "query, key, value, padding_mask에서 기본값은 없는지, 특별히 조정 가능한 건지 확인"
+ ],
+ "metadata": {
+ "id": "g2oqX1Z2iXSd"
+ },
+ "id": "g2oqX1Z2iXSd"
+ },
+ {
+ "cell_type": "markdown",
+ "id": "728a5cc3",
+ "metadata": {
+ "id": "728a5cc3"
+ },
+ "source": [
+ "## Multi Head Attention"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "7618539d",
+ "metadata": {
+ "id": "7618539d"
+ },
+ "outputs": [],
+ "source": [
+ "class MultiHeadAttention(tf.keras.layers.Layer):\n",
+ "\n",
+ " def __init__(self, d_model, num_heads, name=\"multi_head_attention\"):\n",
+ " super(MultiHeadAttention, self).__init__(name=name)\n",
+ " self.num_heads = num_heads\n",
+ " self.d_model = d_model\n",
+ "\n",
+ " assert d_model % self.num_heads == 0 \n",
+ " #d_model을 num_heads로 나눈 값이 정확하게 나누어 떨어지는지 확인하는 용도\n",
+ "\n",
+ " # d_model을 num_heads로 나눈 값.\n",
+ " # 논문 기준 : 64\n",
+ " self.depth = d_model // self.num_heads\n",
+ "\n",
+ " # WQ, WK, WV에 해당하는 밀집층 정의\n",
+ " self.query_dense = tf.keras.layers.Dense(units=d_model)\n",
+ " self.key_dense = tf.keras.layers.Dense(units=d_model)\n",
+ " self.value_dense = tf.keras.layers.Dense(units=d_model)\n",
+ "\n",
+ " # WO에 해당하는 밀집층 정의 : 모르겠음\n",
+ " self.dense = tf.keras.layers.Dense(units=d_model)\n",
+ "\n",
+ " # num_heads 개수만큼 q, k, v를 split하는 함수\n",
+ " def split_heads(self, inputs, batch_size):\n",
+ " inputs = tf.reshape(\n",
+ " inputs, shape=(batch_size, -1, self.num_heads, self.depth))\n",
+ " return tf.transpose(inputs, perm=[0, 2, 1, 3])\n",
+ "\n",
+ " def call(self, inputs):\n",
+ " '''\n",
+ " 1. query, key, value를 각각 Dense 레이어를 통과시켜서 출력값을 얻습니다.\n",
+ " 2. 각 head로 나눠진 query, key, value를 scaled_dot_product_attention() 함수에 입력값으로 넣어 어텐션을 수행합니다.\n",
+ " 3. 어텐션의 결과를 다시 transpose() 함수를 이용해 축을 변환합니다.\n",
+ " 4. 각 head를 다시 연결(concatenate)하여 최종 결과를 얻습니다.\n",
+ " 5. 결과값을 dense 레이어를 통과시켜 최종 출력값을 구합니다.\n",
+ " \n",
+ " query, key, value가 multi-heads 수만큼 나뉘어서 어텐션을 계산\n",
+ " 각 head는 서로 다른 부분을 학습하기 위해서 존재하며, 이를 통해 모델이 더욱 효과적으로 특징을 추출함\n",
+ " 출력값으로는 각 단어의 위치와 상관없이 모든 단어가 attention을 받은 정보가 담긴 벡터를 반환함\n",
+ " '''\n",
+ " query, key, value, mask = inputs['query'], inputs['key'], inputs[\n",
+ " 'value'], inputs['mask']\n",
+ " batch_size = tf.shape(query)[0]\n",
+ "\n",
+ " # 1. WQ, WK, WV에 해당하는 밀집층 지나기\n",
+ " # q : (batch_size, query의 문장 길이, d_model)\n",
+ " # k : (batch_size, key의 문장 길이, d_model)\n",
+ " # v : (batch_size, value의 문장 길이, d_model)\n",
+ " # 참고) 인코더(k, v)-디코더(q) 어텐션에서는 query 길이와 key, value의 길이는 다를 수 있다.\n",
+ " query = self.query_dense(query)\n",
+ " key = self.key_dense(key)\n",
+ " value = self.value_dense(value)\n",
+ "\n",
+ " # 2. 헤드 나누기\n",
+ " # q : (batch_size, num_heads, query의 문장 길이, d_model/num_heads)\n",
+ " # k : (batch_size, num_heads, key의 문장 길이, d_model/num_heads)\n",
+ " # v : (batch_size, num_heads, value의 문장 길이, d_model/num_heads)\n",
+ " query = self.split_heads(query, batch_size)\n",
+ " key = self.split_heads(key, batch_size)\n",
+ " value = self.split_heads(value, batch_size)\n",
+ "\n",
+ " # 3. 스케일드 닷 프로덕트 어텐션. 앞서 구현한 함수 사용.\n",
+ " # (batch_size, num_heads, query의 문장 길이, d_model/num_heads)\n",
+ " scaled_attention, _ = scaled_dot_product_attention(query, key, value, mask)\n",
+ " # (batch_size, query의 문장 길이, num_heads, d_model/num_heads)\n",
+ " scaled_attention = tf.transpose(scaled_attention, perm=[0, 2, 1, 3])\n",
+ "\n",
+ " # 4. 헤드 연결(concatenate)하기\n",
+ " # (batch_size, query의 문장 길이, d_model)\n",
+ " concat_attention = tf.reshape(scaled_attention,\n",
+ " (batch_size, -1, self.d_model))\n",
+ "\n",
+ " # 5. WO에 해당하는 밀집층 지나기\n",
+ " # (batch_size, query의 문장 길이, d_model)\n",
+ " outputs = self.dense(concat_attention)\n",
+ "\n",
+ " return outputs"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "1d31bfe6",
+ "metadata": {
+ "id": "1d31bfe6"
+ },
+ "source": [
+ "## padding mask 만들기"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "3d76ee2e",
+ "metadata": {
+ "id": "3d76ee2e"
+ },
+ "outputs": [],
+ "source": [
+ "def create_padding_mask(x):\n",
+ "#입력으로 들어온 'x' tensor에서 값이 0인 위치에 1을, 그 외의 위치에 0을 가지는 텐서를 생성하는 함수\n",
+ " mask = tf.cast(tf.math.equal(x, 0), tf.float32)\n",
+ " # (batch_size, 1, 1, key의 문장 길이)\n",
+ " ## 입력으로 (batch_size, seq_len) 크기의 텐서 x가 주어졌다면, \n",
+ " ## 이 함수는 (batch_size, 1, 1, seq_len) 크기의 텐서를 반환\n",
+ " return mask[:, tf.newaxis, tf.newaxis, :]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "a87d6db3",
+ "metadata": {
+ "id": "a87d6db3"
+ },
+ "source": [
+ "## encoder"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "75149d08",
+ "metadata": {
+ "id": "75149d08"
+ },
+ "outputs": [],
+ "source": [
+ "def encoder_layer(dff, d_model, num_heads, dropout, name=\"encoder_layer\"):\n",
+ " '''\n",
+ " dff : feedforward network의 hidden layer에 있는 뉴런 수를 나타내는 정수\n",
+ " d_model : 모델의 차원을 나타내는 정수. 즉, 임베딩 크기\n",
+ " num_heads : attention head 개수를 나타내는 정수\n",
+ " dropout : 드롭아웃 비율을 나타내는 실수\n",
+ " name : 레이어 이름을 나타내는 문자열\n",
+ " '''\n",
+ "\n",
+ " '''\n",
+ " 간단히 말하자면\n",
+ " 1. 입력 데이터(inputs)와 패딩 마스크(padding_mask)를 받고\n",
+ " 2. 멀티 헤드 어텐션을 수행한 뒤\n",
+ " 3. 드롭아웃을 적용하고 잔차 연결(residual connection)과 \n",
+ " 층 정규화(layer normalization)를 수행함\n",
+ " 4. 포지션 와이즈 피드 포워드 신경망을 수행하는데, \n",
+ " 이때 입력으로 받은 어텐션 출력(attention)을 사용하고\n",
+ " 5. 드롭아웃을 적용하고 잔차 연결과 층 정규화를 수행함\n",
+ "\n",
+ " return에선 \n",
+ " - 입력 데이터(inputs)와 패딩 마스크(padding_mask)를 입력으로 받음\n",
+ " - 출력으로는 두번째 서브층의 입력으로 사용될 어텐션 출력(attention)에 \n",
+ " 두번째 서브층을 수행한 결과를 더한 결과\n",
+ " 를 반환하는 tf.keras.Model 객체를 생성\n",
+ " '''\n",
+ " inputs = tf.keras.Input(shape=(None, d_model), name=\"inputs\")\n",
+ "\n",
+ " # 인코더는 패딩 마스크 사용\n",
+ " padding_mask = tf.keras.Input(shape=(1, 1, None), name=\"padding_mask\")\n",
+ "\n",
+ " # 멀티-헤드 어텐션 (첫번째 서브층 / 셀프 어텐션)\n",
+ " attention = MultiHeadAttention(\n",
+ " d_model, num_heads, name=\"attention\")({\n",
+ " 'query': inputs, 'key': inputs, 'value': inputs, # Q = K = V\n",
+ " 'mask': padding_mask # 패딩 마스크 사용\n",
+ " })\n",
+ "\n",
+ " # 드롭아웃 + 잔차 연결과 층 정규화\n",
+ " attention = tf.keras.layers.Dropout(rate=dropout)(attention)\n",
+ " attention = tf.keras.layers.LayerNormalization(\n",
+ " epsilon=1e-6)(inputs + attention)\n",
+ "\n",
+ " # 포지션 와이즈 피드 포워드 신경망 (두번째 서브층)\n",
+ " outputs = tf.keras.layers.Dense(units=dff, activation='relu')(attention) #ReLU와\n",
+ " outputs = tf.keras.layers.Dense(units=d_model)(outputs) \n",
+ " #선형활성화 함수가 있는 두 개의 고밀도 레이어로 구성됨\n",
+ "\n",
+ " # 드롭아웃 + 잔차 연결과 층 정규화\n",
+ " outputs = tf.keras.layers.Dropout(rate=dropout)(outputs)\n",
+ " outputs = tf.keras.layers.LayerNormalization(\n",
+ " epsilon=1e-6)(attention + outputs) \n",
+ " #attention tensor에 드롭아웃 적용된 출력텐서를 더함\n",
+ " #그리고 레이어 정규화를 적용해 다른 잔차 연결을 얻음\n",
+ "\n",
+ " #최종 출력은 output tensor, 출력 텐서를 출력으로 하는 tf.keras.Model 객체를 반환\n",
+ " #모델 이름은 name\n",
+ " return tf.keras.Model(\n",
+ " inputs=[inputs, padding_mask], outputs=outputs, name=name)\n",
+ " "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "edda14f2",
+ "metadata": {
+ "id": "edda14f2"
+ },
+ "outputs": [],
+ "source": [
+ "def encoder(vocab_size, num_layers, dff,\n",
+ " d_model, num_heads, dropout,\n",
+ " name=\"encoder\"):\n",
+ " '''\n",
+ " 다수의 self attention과 feedfoward 신경망으로 구성된 인코더를 구현하는 함수\n",
+ " '''\n",
+ " inputs = tf.keras.Input(shape=(None,), name=\"inputs\")\n",
+ "\n",
+ " # 인코더는 패딩 마스크 사용\n",
+ " padding_mask = tf.keras.Input(shape=(1, 1, None), name=\"padding_mask\")\n",
+ " #입력문장을 받아들이고 입력 문장에 대한 패딩마스크를 입력으로 받음\n",
+ " #그리고 입력 문장의 임베딩을 구성한 뒤, positional encoding을 적용함 \n",
+ " # 포지셔널 인코딩 + 드롭아웃\n",
+ " embeddings = tf.keras.layers.Embedding(vocab_size, d_model)(inputs)\n",
+ " embeddings *= tf.math.sqrt(tf.cast(d_model, tf.float32))\n",
+ " #이때 임베딩 차원 수와 포지셔널 인코딩 차원 수가 같도록 조정해줌\n",
+ " embeddings = PositionalEncoding(vocab_size, d_model)(embeddings)\n",
+ " #마지막으로 드롭아웃을 적용함.\n",
+ " outputs = tf.keras.layers.Dropout(rate=dropout)(embeddings)\n",
+ "\n",
+ " # 인코더 층을 num_layers개 쌓기\n",
+ " for i in range(num_layers):\n",
+ " outputs = encoder_layer(dff=dff, d_model=d_model, num_heads=num_heads,\n",
+ " dropout=dropout, name=\"encoder_layer_{}\".format(i),\n",
+ " )([outputs, padding_mask])\n",
+ " #encoder_layer 함수를 for문 만큼 사용\n",
+ "\n",
+ " return tf.keras.Model(\n",
+ " inputs=[inputs, padding_mask], outputs=outputs, name=name)\n",
+ " #tf.keras.Model 객체를 반환하는데, 반환되는 모델명은 name으로 지정됨."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "3277dd47",
+ "metadata": {
+ "id": "3277dd47"
+ },
+ "source": [
+ "## decoder"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "fed9cc2c",
+ "metadata": {
+ "id": "fed9cc2c"
+ },
+ "outputs": [],
+ "source": [
+ "# 디코더의 첫번째 서브층(sublayer)에서 미래 토큰을 Mask하는 함수\n",
+ "def create_look_ahead_mask(x):\n",
+ " '''\n",
+ " 디코더는 현재 위치의 이전 토큰들을 이용해 다음 토큰을 예측하므로, \n",
+ " 현재 위치 이후에 등장하는 토큰들은 모두 가려주어야 함\n",
+ " '''\n",
+ " seq_len = tf.shape(x)[1]\n",
+ " #x 텐서의 shape을 이용해 seq_len을 구함\n",
+ " look_ahead_mask = 1 - tf.linalg.band_part(tf.ones((seq_len, seq_len)), -1, 0) #-1랑 0: 하삼각행렬/0, -1 : 상삼각행렬\n",
+ " #이게 다 0, 0이면 대각선 제외하고 다 0이 됨.\n",
+ "\n",
+ " #tf.linalg.band_part() : seq_len 크기의 전체 1로 구성된 정방행렬 만듦\n",
+ " padding_mask = create_padding_mask(x) # 패딩 마스크도 포함\n",
+ " return tf.maximum(look_ahead_mask, padding_mask)\n",
+ "'''tf.maximum() 함수: element-wise maximum(각 element 별로 큰 값을 선택하는 함수)\n",
+ "이전에 만든 패딩 마스크와 조합해 현재 위치의 이후 위치들을 모두 가려주는 마스크를 만들고 반환함.\n",
+ "\n",
+ "tf.maximum(look_ahead_mask, padding_mask): element-wise maximum(각 element 별로 큰 값을 선택하는 함수)\n",
+ "\n",
+ "- look_ahead_mask : 미래 토큰을 Masking 하는데 사용되는 마스크\n",
+ "- padding_mask : 패딩 토큰을 Masking 하는데 사용되는 마스크\n",
+ "\n",
+ "두 마스크를 maximum 함수에 적용해서 \n",
+ "\"각 위치에서 패딩토큰과 미래토큰 중 하나가 존재하는 경우에는 해당 위치를 마스킹하도록 결정\"\n",
+ "-> 이렇게 결합된 마스크는 패딩 및 미래 토큰 모두를 마스킹하는 마스크를 생성함.\n",
+ "'''"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "e9ba8f4b",
+ "metadata": {
+ "id": "e9ba8f4b"
+ },
+ "outputs": [],
+ "source": [
+ "def decoder_layer(dff, d_model, num_heads, dropout, name=\"decoder_layer\"):\n",
+ " #디코더의 sublayer를 구성하는 함수\n",
+ " inputs = tf.keras.Input(shape=(None, d_model), name=\"inputs\")\n",
+ " enc_outputs = tf.keras.Input(shape=(None, d_model), name=\"encoder_outputs\")\n",
+ "\n",
+ " # 디코더는 룩어헤드 마스크(첫번째 서브층)와 패딩 마스크(두번째 서브층) 둘 다 사용.\n",
+ " look_ahead_mask = tf.keras.Input(\n",
+ " shape=(1, None, None), name=\"look_ahead_mask\") #미래토큰을 masking 하도록 사용\n",
+ " padding_mask = tf.keras.Input(shape=(1, 1, None), name='padding_mask')\n",
+ " # 패딩된 부분을 masking하도록 padding_mask를 사용함.\n",
+ "\n",
+ " \n",
+ "\n",
+ " # 멀티-헤드 어텐션 (첫번째 서브층 / 마스크드 셀프 어텐션)\n",
+ " attention1 = MultiHeadAttention(\n",
+ " d_model, num_heads, name=\"attention_1\")(inputs={\n",
+ " 'query': inputs, 'key': inputs, 'value': inputs, # Q = K = V\n",
+ " 'mask': look_ahead_mask # 룩어헤드 마스크\n",
+ " #look_ahed_mask랑 padding mask 모두 사용하려면\n",
+ " #look_ahed_mask 함수 내 tf.maximum 함수를 사용해 둘 중 더 큰 값을 선택함.\n",
+ " \n",
+ " #그러면 디코더의 첫번째 sublayer에선 미래 정보를 참조 못하고, \n",
+ " #두번째 sublayer에선 패딩된 부분을 참조하지 못하게 함.\n",
+ " })\n",
+ "\n",
+ " # 잔차 연결과 층 정규화\n",
+ " attention1 = tf.keras.layers.LayerNormalization(\n",
+ " epsilon=1e-6)(attention1 + inputs)\n",
+ "\n",
+ " # 멀티-헤드 어텐션 (두번째 서브층 / 디코더-인코더 어텐션)\n",
+ " attention2 = MultiHeadAttention(\n",
+ " d_model, num_heads, name=\"attention_2\")(inputs={\n",
+ " 'query': attention1, 'key': enc_outputs, 'value': enc_outputs, # Q != K = V\n",
+ " 'mask': padding_mask # 패딩 마스크\n",
+ " })\n",
+ "\n",
+ " # 드롭아웃 + 잔차 연결과 층 정규화\n",
+ " attention2 = tf.keras.layers.Dropout(rate=dropout)(attention2)\n",
+ " attention2 = tf.keras.layers.LayerNormalization(\n",
+ " epsilon=1e-6)(attention2 + attention1)\n",
+ "\n",
+ " # 포지션 와이즈 피드 포워드 신경망 (세번째 서브층)\n",
+ " outputs = tf.keras.layers.Dense(units=dff, activation='relu')(attention2)\n",
+ " outputs = tf.keras.layers.Dense(units=d_model)(outputs)\n",
+ "\n",
+ " # 드롭아웃 + 잔차 연결과 층 정규화\n",
+ " outputs = tf.keras.layers.Dropout(rate=dropout)(outputs)\n",
+ " outputs = tf.keras.layers.LayerNormalization(\n",
+ " epsilon=1e-6)(outputs + attention2)\n",
+ "\n",
+ " return tf.keras.Model(\n",
+ " inputs=[inputs, enc_outputs, look_ahead_mask, padding_mask],\n",
+ " outputs=outputs,\n",
+ " name=name)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "66f05031",
+ "metadata": {
+ "id": "66f05031"
+ },
+ "outputs": [],
+ "source": [
+ "def decoder(vocab_size, num_layers, dff,\n",
+ " d_model, num_heads, dropout,\n",
+ " name='decoder'):\n",
+ " inputs = tf.keras.Input(shape=(None,), name='inputs')\n",
+ " enc_outputs = tf.keras.Input(shape=(None, d_model), name='encoder_outputs')\n",
+ "\n",
+ " # 디코더는 룩어헤드 마스크(첫번째 서브층)와 패딩 마스크(두번째 서브층) 둘 다 사용.\n",
+ " look_ahead_mask = tf.keras.Input(\n",
+ " shape=(1, None, None), name='look_ahead_mask')\n",
+ " padding_mask = tf.keras.Input(shape=(1, 1, None), name='padding_mask')\n",
+ "\n",
+ " # 포지셔널 인코딩 + 드롭아웃\n",
+ " embeddings = tf.keras.layers.Embedding(vocab_size, d_model)(inputs)\n",
+ " embeddings *= tf.math.sqrt(tf.cast(d_model, tf.float32))\n",
+ " embeddings = PositionalEncoding(vocab_size, d_model)(embeddings)\n",
+ " outputs = tf.keras.layers.Dropout(rate=dropout)(embeddings)\n",
+ "\n",
+ " # 디코더를 num_layers개 쌓기\n",
+ " for i in range(num_layers):\n",
+ " outputs = decoder_layer(dff=dff, d_model=d_model, num_heads=num_heads,\n",
+ " dropout=dropout, name='decoder_layer_{}'.format(i),\n",
+ " )(inputs=[outputs, enc_outputs, look_ahead_mask, padding_mask])\n",
+ "\n",
+ " return tf.keras.Model(\n",
+ " inputs=[inputs, enc_outputs, look_ahead_mask, padding_mask],\n",
+ " outputs=outputs,\n",
+ " name=name)\n",
+ " "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "2e5d5fc8",
+ "metadata": {
+ "id": "2e5d5fc8"
+ },
+ "source": [
+ "## Transformer 구현"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "dcc9c225",
+ "metadata": {
+ "id": "dcc9c225"
+ },
+ "outputs": [],
+ "source": [
+ "def transformer(vocab_size, num_layers, dff,\n",
+ " d_model, num_heads, dropout,\n",
+ " name=\"transformer\"):\n",
+ "\n",
+ " # 인코더의 입력\n",
+ " inputs = tf.keras.Input(shape=(None,), name=\"inputs\")\n",
+ "\n",
+ " # 디코더의 입력\n",
+ " dec_inputs = tf.keras.Input(shape=(None,), name=\"dec_inputs\")\n",
+ "\n",
+ " # 인코더의 패딩 마스크\n",
+ " enc_padding_mask = tf.keras.layers.Lambda(\n",
+ " create_padding_mask, output_shape=(1, 1, None),\n",
+ " name='enc_padding_mask')(inputs)\n",
+ "\n",
+ " # 디코더의 룩어헤드 마스크(첫번째 서브층)\n",
+ " look_ahead_mask = tf.keras.layers.Lambda(\n",
+ " create_look_ahead_mask, output_shape=(1, None, None),\n",
+ " name='look_ahead_mask')(dec_inputs)\n",
+ "\n",
+ " # 디코더의 패딩 마스크(두번째 서브층)\n",
+ " dec_padding_mask = tf.keras.layers.Lambda(\n",
+ " create_padding_mask, output_shape=(1, 1, None),\n",
+ " name='dec_padding_mask')(inputs)\n",
+ "\n",
+ " # 인코더의 출력은 enc_outputs. 디코더로 전달된다.\n",
+ " enc_outputs = encoder(vocab_size=vocab_size, num_layers=num_layers, dff=dff,\n",
+ " d_model=d_model, num_heads=num_heads, dropout=dropout,\n",
+ " )(inputs=[inputs, enc_padding_mask]) # 인코더의 입력은 입력 문장과 패딩 마스크\n",
+ "\n",
+ " # 디코더의 출력은 dec_outputs. 출력층으로 전달된다.\n",
+ " dec_outputs = decoder(vocab_size=vocab_size, num_layers=num_layers, dff=dff,\n",
+ " d_model=d_model, num_heads=num_heads, dropout=dropout,\n",
+ " )(inputs=[dec_inputs, enc_outputs, look_ahead_mask, dec_padding_mask])\n",
+ "\n",
+ " # 다음 단어 예측을 위한 출력층\n",
+ " outputs = tf.keras.layers.Dense(units=vocab_size, name=\"outputs\")(dec_outputs)\n",
+ "\n",
+ " return tf.keras.Model(inputs=[inputs, dec_inputs], outputs=outputs, name=name)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "157eba42",
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 323
+ },
+ "id": "157eba42",
+ "outputId": "52e4255a-815c-473f-9279-eaabddba93f7"
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "(1, 9000, 128)\n",
+ "(1, 9000, 128)\n"
+ ]
+ },
+ {
+ "output_type": "execute_result",
+ "data": {
+ "image/png": "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knrnnXdWrlz51VdfNTQ0MJ0FAAAAACTB4AIAACivwMDAt2/fnjhxgukgAAAAACAJBhcAAEB59e3bd968eREREUwHAQAAAABJMLgAAABKbdWqVQ8ePLhy5QrTQQAAAACgQxhcUDfLli3T1dVlsViZmZmSXzp37py+vv5PP/3ERMzu27lzp76+frs7KA8q2ktycunSpZCQkKSkJBsbGxaLxWKxWs0ROHXqVF1dXU1NzWHDht27d09hwRiJdPr06d27d4tEIhm2Ce1ycnJ69913v/nmG6aDAACAspNQCfeQutaEarZf/v7+rL8sXLiw5UuoY1tqW8empKSIu87ExKR7zWJwQd0cPXr022+/leYliqIUFUqWQkJC/vnPfypscyraS/KwZcuWqKioDRs2eHt7P3361NbW1tjYOC4u7uzZs+J1Ll68mJCQMGvWrOzsbCcnJ4VlYySSp6cnl8t1d3cvLy+XYbPQrsDAwNTU1KdPnzIdBAAAlJqESriH1LUmVL/9MjIySktLy8nJiYmJES9EHdtK2zp29uzZBQUFV69e9fDw6HazGFzovWbOnFlRUTFr1iymgyg1efdSXV2dq6urnBqXoV27dp08efLUqVO6urrihVFRURoaGgKBoKKigsFsLSk4UmBg4MiRIz08PJqamhSwud7My8vL0tKyZZUAAACgSOpaE6rffvF4vOnTp9vb22tra9NLUMe2q1Udy2KxLC0t3dzcBg0a1O02MbighlgsVjdekh5FUQkJCUeOHOl5UxATE1NUVMR0ik7k5eVt3rx569atXC635XJXV9egoKCXL1+uWbOGqWytKD5SWFhYZmbmvn37FLO5XovNZi9YsCAuLk79/sECAACyJZNyV/FUoibsBsb3C3WsBDKvYzG40AUikSg0NNTa2prH440YMSI+Pp4QEh0draOjw+fzU1NTZ8yYoaenZ2Vl1XLWtGPHjo0dO5bL5ero6AwYMGD79u0SNhEVFcXlcs3MzPz9/fv27cvlcl1dXTMyMuhXr1275uDgoK+vz+VyHR0dL1y4QC+nKGrPnj2DBw/W1tbW19dfu3atuMGOXrp+/bq1tTWLxTpw4ECneyESib788svBgwfzeDwTE5OBAwd++eWX8+bNk7Aj+/bt09HR0dDQGDNmjLm5OYfD0dHRcXJycnNz69evH5fLNTAw+OKLL8Trd7RrV65c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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "execution_count": 16
+ }
+ ],
+ "source": [
+ "small_transformer = transformer(\n",
+ " vocab_size = 9000,\n",
+ " num_layers = 4,\n",
+ " dff = 512,\n",
+ " d_model = 128,\n",
+ " num_heads = 4,\n",
+ " dropout = 0.3,\n",
+ " name=\"small_transformer\")\n",
+ "\n",
+ "tf.keras.utils.plot_model(\n",
+ " small_transformer, to_file='small_transformer.png', show_shapes=True)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "6f6a3a83",
+ "metadata": {
+ "id": "6f6a3a83"
+ },
+ "source": [
+ "## 손실함수\n",
+ "- seq2seq에서 사용되는 손실함수\n",
+ "- 인코더에서 출력된 context vector를 decoder에 입력하고, 디코더에서 이를 기반으로 출력된 문장을 실제 정답 문장과 비교해서 손실을 계산함."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "87a3d5ec",
+ "metadata": {
+ "id": "87a3d5ec"
+ },
+ "outputs": [],
+ "source": [
+ "def loss_function(y_true, y_pred):\n",
+ " #y_true : 실제 정답 문장\n",
+ " #y_pred : 디코더에서 출력된 모델의 예측값\n",
+ " y_true = tf.reshape(y_true, shape=(-1, MAX_LENGTH - 1)) \n",
+ " '''\n",
+ " MAX_LENGTH -1의 형태로 reshape하는 이유는 \n",
+ " 디코더에서 사용되는 'start token'을 제외한 모든 토큰을 포함하기 위함.\n",
+ " '''\n",
+ " loss = tf.keras.losses.SparseCategoricalCrossentropy(\n",
+ " from_logits=True, reduction='none')(y_true, y_pred)\n",
+ " #SparseCategoricalCrossentropy : y_true와 y_pred 간의 손실 계산\n",
+ " #from_logits=True : y_pred가 확률이 아니라 logit값이므로 softmax함수를 거치지 않게끔 함.\n",
+ " #reduction=none : 배치 단위의 데이터의 평균 대신 각각의 샘플에 대한 손실값을 반환함.\n",
+ "\n",
+ " mask = tf.cast(tf.not_equal(y_true, 0), tf.float32)\n",
+ " #y_true가 패딩 토큰인 경우에 대한 손실을 제외하고자 마스크를 적용\n",
+ " #패딩토큰에 해당하는 부분은 mask 변수를 사용해 0으로 설정함.\n",
+ " loss = tf.multiply(loss, mask)\n",
+ " #손실값과 마스크를 곱해 마스크가 적용된 손실을 계산하고, \n",
+ " #이를 평균 내어 반환함.\n",
+ " return tf.reduce_mean(loss)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "8a831e8a",
+ "metadata": {
+ "id": "8a831e8a"
+ },
+ "source": [
+ "## custom schedule\n",
+ "- tf.keras.optimizers.schedules.LearningRateSchedule를 상속\n",
+ "- 낮은 학습률로 시작하여 점차적으로 학습률을 높여 다시 감소하기 시작하는 지점까지 학습률을 높이도록 설계됨\n",
+ " - 신경망 훈련에서 일반적으로 사용되는 방식"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "2f74e232",
+ "metadata": {
+ "id": "2f74e232"
+ },
+ "outputs": [],
+ "source": [
+ "class CustomSchedule(tf.keras.optimizers.schedules.LearningRateSchedule):\n",
+ "\n",
+ " def __init__(self, d_model, warmup_steps=4000):\n",
+ " '''모델의 차원 크기(`d_model`)와 워밍업 단계 수(`warmup_steps`)를 포함하여 \n",
+ " 스케줄의 하이퍼파라미터를 초기화함\n",
+ " '''\n",
+ " super(CustomSchedule, self).__init__()\n",
+ " self.d_model = d_model\n",
+ " self.d_model = tf.cast(self.d_model, tf.float32)\n",
+ " self.warmup_steps = warmup_steps\n",
+ " \n",
+ "\n",
+ " def __call__(self, step):\n",
+ " '''d_model` 매개 변수는 `__call__` 메서드 내부의 나누기 연산이 \n",
+ " 정수를 반환하도록 하기 위해 정수로 캐스팅됨.\n",
+ " '''\n",
+ " #현재 훈련 단계를 나타내는 `step` 매개 변수를 받음\n",
+ " #이 메서드는 현재 단계에서 학습률을 계산하는 데 사용되는 두 개의 인수인 `arg1`과 `arg2`를 계산\n",
+ " arg1 = tf.math.rsqrt(step)\n",
+ " #'arg1'은 스텝 수의 역제곱근으로 계산\n",
+ " arg2 = step * (self.warmup_steps**-1.5)\n",
+ " #'arg2'는 스텝 수에 'warmup_steps'의 역제곱근을 `-1.5`의 거듭제곱으로 곱한 값으로 계산\n",
+ " \n",
+ " return tf.math.rsqrt(self.d_model) * tf.math.minimum(arg1, arg2)\n",
+ " #학습률은 `d_model`의 역제곱근에 `arg1`과 `arg2`의 최소값을 곱한 값으로 계산"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "4fb94965",
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 467
+ },
+ "id": "4fb94965",
+ "outputId": "27bd8827-3790-446e-e14b-d287a3b1d71b"
+ },
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "Text(0.5, 0, 'Train Step')"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 19
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "image/png": "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kydL+3NzczFy5Ejcdddd2LNnD3788UcUFhbioYcesql+zUlaUsEOd/9ZDOwQCpkMOKwtRb6+6voHEBER3cyEjXbu3Ck2bdokhBAiPz9fJCUlicDAQHHLLbeInJwcm841YMAAMWXKFOmzyWQSkZGRIi0trd74Rx99VIwYMcJqW3x8vHjqqaeEEEKYzWah0WjEokWLpP0lJSVCqVSKL774QgghxMGDBwUAsXPnTinmhx9+EDKZTJw9e1YIIcTatWuFt7e3MJlMUsy3334rZDKZMBqNja6fTqcTAIROp2v0MU018p2tInrGevHTAa1dz/tA3Xm/yDpl1/MSERG5qqa23zb3VPXr1w933nkngNrhv/T0dOj1emRnZ6N3796NPo/RaER2djYSExOlbXK5HImJicjMzKz3mMzMTKt4AEhKSpLic3NzodVqrWLUajXi4+OlmMzMTAQHB6Nfv35STGJiIuRyObKysgAAffv2hVwuxyeffAKTyQSdTof//Oc/SExMhI/Pte+CMxgM0Ov1Vq/mIi2p4GWfJRUs7uocBgDYdLj+3kMiIiKqZbcJOLt378Z9993X6PjCwkKYTCaEh4dbbQ8PD4dWq633GK1W22C85f16MWFhYVb7vb29ERISIsXExMTgp59+wqxZs6BUKhEcHIwzZ87gyy+/bLBOaWlpUKvV0isqKqrBeHtyxJwqALirS+3vauuxQhhqrn6QNhEREdWyqQX+8ccf8cILL2DWrFk4ceIEAODw4cNITk5G//79pUfZuDutVotJkyZh/Pjx2LlzJ3755RcoFAr85S9/gRDimsfNnDkTOp1OejVl4n5TWdapsteSChbdI4PQKlCJCqMJO3K5tAIREdG1NHrxz48++giTJk1CSEgILl68iA8//BCvv/46nnvuOYwaNQr79+9H165dG33h0NBQeHl5IT8/32p7fn4+NBpNvcdoNJoG4y3v+fn5iIiIsIqxDE1qNJqrJsLX1NSguLhYOn7p0qVQq9VYuHChFPPZZ58hKioKWVlZuPXWW+stn1KphFKpvF7VHcLogInqACCXy3Bn51b4ctcZbD58AYNjW9n1/ERERJ6i0d0ab731Fv7973+jsLAQX375JQoLC/Huu+/ijz/+wLJly2xKqABAoVCgb9++yMjIkLaZzWZkZGQgISGh3mMSEhKs4gFg48aNUnxMTAw0Go1V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I1bb3fW727x5c73/TY4fP14IUXub+Jw5c0R4eLhQKpVi6NChV9W9qKhIjBkzRgQEBIigoCAxYcIEUVpaahWzd+9eMWjQIKFUKkXr1q3FggULrirLl19+KTp16iQUCoXo3r27+P777632N6YsttQvNzf3mv8mLWuPZWdni/j4eKFWq4VKpRJdu3YV//rXv6wSEmfW73p1rKioEPfcc49o1aqV8PHxEdHR0WLSpElXJeDu+h1avP/++8LX11eUlJRcdbyrf4fXaxeEcK2/nY0py/XI6ipORERERDeAc6qIiIiI7IBJFREREZEdMKkiIiIisgMmVURERER2wKSKiIiIyA6YVBERERHZAZMqIiIiIjtgUkVERERkB0yqiIgAtGvXDm+++aazi0FEboxJFRG5FZlM1uDrH//4R5POu3PnTkyePPmGypabm4u//vWviIyMhEqlQps2bTBy5EgcPnwYAHDy5EnIZDLpgdRE5Fm8nV0AIiJbnD9/Xvp5zZo1SE1NxZEjR6RtAQEB0s9CCJhMJnh7X/9PXatWrW6oXNXV1bj77rvRuXNnfP3114iIiMCZM2fwww8/oKSk5IbOTUTugT1VRORWNBqN9FKr1ZDJZNLnw4cPIzAwED/88AP69u0LpVKJrVu34vjx4xg5ciTCw8MREBCA/v374+eff7Y675XDfzKZDB9++CEefPBB+Pn5ITY2Ft9+++01y3XgwAEcP34c7777Lm699VZER0fjtttuw/z583HrrbcCAGJiYgAAffr0gUwmwx133CEd/+GHH6Jr165QqVTo0qUL3n33XWmfpYdr9erVGDhwIFQqFXr06IFffvnFDr9RIrIXJlVE5HFefvllLFiwAIcOHULPnj1RVlaG4cOHIyMjAzk5ORg2bBjuv/9+5OXlNXieV155BY8++ij27duH4cOHY+zYsSguLq43tlWrVpDL5fjqq69gMpnqjdmxYwcA4Oeff8b58+fx9ddfAwA+//xzpKam4tVXX8WhQ4fwr3/9C3PmzMHKlSutjn/xxRcxffp05OTkICEhAffffz+Kiops/fUQkaMIIiI39cknnwi1Wi193rx5swAg1q1bd91ju3fvLt5++23pc3R0tHjjjTekzwDE7Nmzpc9lZWUCgPjhhx+uec533nlH+Pn5icDAQHHnnXeKefPmiePHj0v7c3NzBQCRk5NjdVyHDh3EqlWrrLb985//FAkJCVbHLViwQNpfXV0t2rRpI/79739ft65E1DzYU0VEHqdfv35Wn8vKyvDCCy+ga9euCA4ORkBAAA4dOnTdnqqePXtKP/v7+yMoKAgFBQXXjJ8yZQq0Wi0+//xzJCQkYO3atejevTs2btx4zWPKy8tx/PhxTJw4EQEBAdJr/vz5OH78uFVsQkKC9LO3tzf69euHQ4cONVgHImo+nKhORB7H39/f6vMLL7yAjRs3YvHixejYsSN8fX3xl7/8BUajscHz+Pj4WH2WyWQwm80NHhMYGIj7778f999/P+bPn4+kpCTMnz8fd999d73xZWVlAIAPPvgA8fHxVvu8vLwavBYRuRb2VBGRx9u2bRsef/xxPPjgg4iLi4NGo8HJkycdfl2ZTIYuXbqgvLwcAKBQKADAas5VeHg4IiMjceLECXTs2NHqZZnYbvH7779LP9fU1CA7Oxtdu3Z1eD2IqHHYU0VEHi82NhZff/017r//fshkMsyZM+e6PU622rNnD+bOnYvHHnsM3bp1g0KhwC+//IKPP/4YM2bMAACEhYXB19cX6enpaNOmDVQqFdRqNV555RU8//zzUKvVGDZsGAwGA3bt2oWLFy8iJSVFusbSpUsRGxuLrl274o033sDFixfxxBNP2LUeRNR0TKqIyOO9/vrreOKJJzBw4ECEhoZixowZ0Ov1dr1GmzZt0K5dO7zyyivSEgiWz3/7298A1M6DWrJkCebNm4fU1FQMHjwYW7ZswZNPPgk/Pz8sWrQIL774Ivz9/REXF4dp06ZZXWPBggVYsGAB9uzZg44dO+Lbb79FaGioXetBRE0nE0IIZxeCiIiu7eTJk4iJiUFOTg569+7t7OIQ0TVwThURERGRHTCpIiIiIrIDDv8RERER2QF7qoiIiIjsgEkVERERkR0wqSIiIiKyAyZVRERERHbApIqIiIjIDphUEREREdkBkyoiIiIiO2BSRURERGQH/x9J7OoaV4icwwAAAABJRU5ErkJggg==\n"
+ },
+ "metadata": {}
+ }
+ ],
+ "source": [
+ "sample_learning_rate = CustomSchedule(d_model=128)\n",
+ "#각 단어를 모델에서 128차원의 벡터로 표현하도록 함\n",
+ "\n",
+ "plt.plot(sample_learning_rate(tf.range(200000, dtype=tf.float32)))\n",
+ "#training step이 200000번임.\n",
+ "plt.ylabel(\"Learning Rate\")\n",
+ "plt.xlabel(\"Train Step\")"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.9.12"
+ },
+ "colab": {
+ "provenance": [],
+ "include_colab_link": true
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
\ No newline at end of file
diff --git "a/\353\252\250\353\215\270\353\247\2013_\353\260\225\354\247\204\354\230\201_huggingface.ipynb" "b/\353\252\250\353\215\270\353\247\2013_\353\260\225\354\247\204\354\230\201_huggingface.ipynb"
new file mode 100644
index 0000000..8923a05
--- /dev/null
+++ "b/\353\252\250\353\215\270\353\247\2013_\353\260\225\354\247\204\354\230\201_huggingface.ipynb"
@@ -0,0 +1,10073 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "view-in-github",
+ "colab_type": "text"
+ },
+ "source": [
+ "
"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "# Details\n",
+ "Training : 빠른 학습속도를 위한 AMP 사용\n",
+ "Epoch : 10\n",
+ "Data : 각 모델별로 5 Fold 학습\n",
+ "Model : 'monologg/kobert', 'klue/roberta-base', 'klue/roberta-small', 'klue/roberta-large', 'xlm-roberta-large', 'bert-base-multilingual-uncased'\n",
+ "Ensemble : logit ensemble"
+ ],
+ "metadata": {
+ "id": "mpZY6sFLDjmm"
+ },
+ "id": "mpZY6sFLDjmm"
+ },
+ {
+ "cell_type": "markdown",
+ "id": "0343a98b",
+ "metadata": {
+ "id": "0343a98b"
+ },
+ "source": [
+ "## 시작"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "!pip install torch_optimizer\n",
+ "#torch_optimizer는 PyTorch를 기반으로 하는 \"딥러닝 모델의 최적화\"를 위한 여러 알고리즘을 제공하는 라이브러리"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "L0hQWVizkqoO",
+ "outputId": "4ec43b95-037a-4e32-f646-a00538c5bd51"
+ },
+ "id": "L0hQWVizkqoO",
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/\n",
+ "Collecting torch_optimizer\n",
+ " Downloading torch_optimizer-0.3.0-py3-none-any.whl (61 kB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m61.9/61.9 KB\u001b[0m \u001b[31m1.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[?25hCollecting pytorch-ranger>=0.1.1\n",
+ " Downloading pytorch_ranger-0.1.1-py3-none-any.whl (14 kB)\n",
+ "Requirement already satisfied: torch>=1.5.0 in /usr/local/lib/python3.9/dist-packages (from torch_optimizer) (2.0.0+cu118)\n",
+ "Requirement already satisfied: filelock in /usr/local/lib/python3.9/dist-packages (from torch>=1.5.0->torch_optimizer) (3.10.7)\n",
+ "Requirement already satisfied: jinja2 in /usr/local/lib/python3.9/dist-packages (from torch>=1.5.0->torch_optimizer) (3.1.2)\n",
+ "Requirement already satisfied: triton==2.0.0 in /usr/local/lib/python3.9/dist-packages (from torch>=1.5.0->torch_optimizer) (2.0.0)\n",
+ "Requirement already satisfied: networkx in /usr/local/lib/python3.9/dist-packages (from torch>=1.5.0->torch_optimizer) (3.0)\n",
+ "Requirement already satisfied: sympy in /usr/local/lib/python3.9/dist-packages (from torch>=1.5.0->torch_optimizer) (1.11.1)\n",
+ "Requirement already satisfied: typing-extensions in /usr/local/lib/python3.9/dist-packages (from torch>=1.5.0->torch_optimizer) (4.5.0)\n",
+ "Requirement already satisfied: lit in /usr/local/lib/python3.9/dist-packages (from triton==2.0.0->torch>=1.5.0->torch_optimizer) (16.0.0)\n",
+ "Requirement already satisfied: cmake in /usr/local/lib/python3.9/dist-packages (from triton==2.0.0->torch>=1.5.0->torch_optimizer) (3.25.2)\n",
+ "Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.9/dist-packages (from jinja2->torch>=1.5.0->torch_optimizer) (2.1.2)\n",
+ "Requirement already satisfied: mpmath>=0.19 in /usr/local/lib/python3.9/dist-packages (from sympy->torch>=1.5.0->torch_optimizer) (1.3.0)\n",
+ "Installing collected packages: pytorch-ranger, torch_optimizer\n",
+ "Successfully installed pytorch-ranger-0.1.1 torch_optimizer-0.3.0\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "!pip install transformers\n",
+ "#transformers : 딥러닝 자연어 처리 모델 구현 라이브러리\n",
+ "##다양한 pre-trained 언어 모델을 제공하고, 이를 fine-tunning 해서 특정 자연어 처리 task에 맞는 모델을 만들 수 있음"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "O-hRaYsBkwrr",
+ "outputId": "1290dce9-58c6-47c3-cb9b-ff87c55ab41a"
+ },
+ "id": "O-hRaYsBkwrr",
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/\n",
+ "Collecting transformers\n",
+ " Downloading transformers-4.27.4-py3-none-any.whl (6.8 MB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m6.8/6.8 MB\u001b[0m \u001b[31m46.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[?25hRequirement already satisfied: tqdm>=4.27 in /usr/local/lib/python3.9/dist-packages (from transformers) (4.65.0)\n",
+ "Requirement already satisfied: regex!=2019.12.17 in /usr/local/lib/python3.9/dist-packages (from transformers) (2022.10.31)\n",
+ "Requirement already satisfied: pyyaml>=5.1 in /usr/local/lib/python3.9/dist-packages (from transformers) (6.0)\n",
+ "Requirement already satisfied: numpy>=1.17 in /usr/local/lib/python3.9/dist-packages (from transformers) (1.22.4)\n",
+ "Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.9/dist-packages (from transformers) (23.0)\n",
+ "Requirement already satisfied: requests in /usr/local/lib/python3.9/dist-packages (from transformers) (2.27.1)\n",
+ "Requirement already satisfied: filelock in /usr/local/lib/python3.9/dist-packages (from transformers) (3.10.7)\n",
+ "Collecting huggingface-hub<1.0,>=0.11.0\n",
+ " Downloading huggingface_hub-0.13.4-py3-none-any.whl (200 kB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m200.1/200.1 KB\u001b[0m \u001b[31m12.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[?25hCollecting tokenizers!=0.11.3,<0.14,>=0.11.1\n",
+ " Downloading tokenizers-0.13.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.8 MB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m7.8/7.8 MB\u001b[0m \u001b[31m64.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[?25hRequirement already satisfied: typing-extensions>=3.7.4.3 in /usr/local/lib/python3.9/dist-packages (from huggingface-hub<1.0,>=0.11.0->transformers) (4.5.0)\n",
+ "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.9/dist-packages (from requests->transformers) (2022.12.7)\n",
+ "Requirement already satisfied: urllib3<1.27,>=1.21.1 in /usr/local/lib/python3.9/dist-packages (from requests->transformers) (1.26.15)\n",
+ "Requirement already satisfied: charset-normalizer~=2.0.0 in /usr/local/lib/python3.9/dist-packages (from requests->transformers) (2.0.12)\n",
+ "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.9/dist-packages (from requests->transformers) (3.4)\n",
+ "Installing collected packages: tokenizers, huggingface-hub, transformers\n",
+ "Successfully installed huggingface-hub-0.13.4 tokenizers-0.13.3 transformers-4.27.4\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "- pre-trained\n",
+ " - pre-trained model : 대규모 데이터 셋에서 미리 학습된 모델 -> 다른 자연어 처리 task에서도 유용(BERT가 Wikipedia 대규모 데이터셋에서 사전학습되었고, 다양한 자연어 처리 업무에 사용 가능)\n",
+ " - 학습시간을 줄이고 소규모 데이터셋에서도 높은 성능 획득 가능\n",
+ "- fine-tunning\n",
+ " - pre-trained 모델을 사용해 특정 자연어 처리 업무에 맞는 모델을 만드는 과정\n",
+ " - 단계\n",
+ " > pre-trained model을 특정 자연어 처리 태스크에 맞게 fine-tunning\n",
+ " > --> 이 fine-tuned 모델은 특정 태스크에 대해 더 좋은 성능 발휘"
+ ],
+ "metadata": {
+ "id": "PhkA0kWajgNQ"
+ },
+ "id": "PhkA0kWajgNQ"
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "9892bce4",
+ "metadata": {
+ "code_folding": [
+ 0
+ ],
+ "id": "9892bce4"
+ },
+ "outputs": [],
+ "source": [
+ "# ------ LIBRARY -------#\n",
+ "import numpy as np\n",
+ "import os\n",
+ "import pickle\n",
+ "import sys\n",
+ "import pandas as pd\n",
+ "import re\n",
+ "import cv2\n",
+ "\n",
+ "# PyTorch 관련 라이브러리\n",
+ "import torch\n",
+ "import torch.cuda.amp as amp #Automatic Mixed Precision, GPU 메모리 사용량을 줄이고 학습 속도를 높이고자 사용하는 기술\n",
+ "\n",
+ "#데이터 로딩을 위한 라이브러리 : torch.utils.data, torch.utils.data.sampler\n",
+ "from torch.utils.data.dataset import Dataset\n",
+ "from torch.utils.data import DataLoader\n",
+ "from torch.utils.data.sampler import *\n",
+ "\n",
+ "#모델 학습 및 최적화를 위한 라이브러리 : torch.nn, torch.optim, torch.optim.lr_scheduler\n",
+ "import torch.nn as nn\n",
+ "import torch.nn.functional as F\n",
+ "from torch.optim.lr_scheduler import CosineAnnealingWarmRestarts, CosineAnnealingLR, ReduceLROnPlateau, MultiStepLR, OneCycleLR\n",
+ "\n",
+ "import math\n",
+ "\n",
+ "#optimizer는 학습 중 모델의 가중치를 업데이트하는 알고리즘\n",
+ "#required는 optimizer 클래스의 메소드에서 필수적으로 사용되는 인자를 표시하는 데 사용됨.\n",
+ "from torch.optim.optimizer import Optimizer, required\n",
+ "import torch_optimizer as optim\n",
+ "#defaultdict는 일반적인 dict와 유사하지만 존재하지 않는 키를 새로 만들 때 디폴트값을 반환함.\n",
+ "from collections import defaultdict\n",
+ "#itertools는 반복 가능한 객체를 다루는 유용한 함수들을 제공함\n",
+ "import itertools as it\n",
+ "\n",
+ "import tqdm #진행상황을 시각화하는 라이브러리(진행 바 같은 걸 출력해줌)\n",
+ "import random\n",
+ "#import time\n",
+ "import matplotlib.pyplot as plt\n",
+ "from timeit import default_timer as timer\n",
+ "from sklearn.model_selection import KFold\n",
+ "from sklearn.metrics import f1_score\n",
+ "from sklearn.preprocessing import LabelEncoder\n",
+ "from sklearn.preprocessing import StandardScaler\n",
+ "from sklearn.metrics import accuracy_score\n",
+ "\n",
+ "\n",
+ "# transformer 모델들과 tokenizer import\n",
+ "# trainsformer 모델들 : pretrained\n",
+ "from transformers import XLMPreTrainedModel, XLMRobertaModel, XLMRobertaConfig, XLMRobertaTokenizer\n",
+ "from transformers import XLMRobertaForSequenceClassification, BertForSequenceClassification\n",
+ "from transformers import AutoTokenizer\n",
+ "from transformers import BertForSequenceClassification, DistilBertForSequenceClassification, XLNetForSequenceClassification,\\\n",
+ "XLMRobertaForSequenceClassification, XLMForSequenceClassification, RobertaForSequenceClassification\n",
+ "#AdamW 최적화 알고리즘을 사용\n",
+ "from transformers import AdamW\n",
+ "#학습률 조절에 사용하는 함수\n",
+ "from transformers import get_linear_schedule_with_warmup"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "f87869f9",
+ "metadata": {
+ "code_folding": [],
+ "id": "f87869f9"
+ },
+ "outputs": [],
+ "source": [
+ "# class args\n",
+ "class args: #여러 학습 인자의 값을 설정\n",
+ " # ---- factor ---- #\n",
+ " debug=False #디버그 모드 여부\n",
+ " amp = True #mixed precision을 사용할 지 여부\n",
+ " gpu = '0' #GPU 번호\n",
+ "\n",
+ " epochs=10 #에포크 수\n",
+ " batch_size=1 #배치 크기\n",
+ " weight_decay=1e-6 #가중치 감소 값\n",
+ " n_fold=5 #교차 검증(fold) 수\n",
+ " fold=3 # [0, 1, 2, 3, 4] # 원래는 3\n",
+ "\n",
+ " exp_name = 'experiment_name_folder'\n",
+ " dir_ = f'./saved_models/'\n",
+ " pt = 'your_model_name'\n",
+ " max_len = 33 #모델 입력 시퀀스의 최대 길이 설정\n",
+ " #학습률을 설정하는 파라미터\n",
+ " start_lr = 1e-5#1e-3,5e-5 #학습시 초기학습률 값을 의미. 학습 초기에 빠르게 수렴할 가능성이 있지만, 값이 너무 크면 수렴이 불안정해짐\n",
+ " min_lr=1e-6 #학습 중 학습율이 더이상 작아지지 않게 제한하는 값. 해당 값 이하로 떨어지지 않게 보장함.\n",
+ " # ---- Dataset ---- #\n",
+ "\n",
+ " # ---- Else ---- #\n",
+ " num_workers=8\n",
+ " seed=2021\n",
+ " scheduler = None#모델의 학습률을 조정하는 방법을 지정. 방법은 사용하지 않겠지만, 다른 변수를 이용해 학습률 조정 방식을 선택할 수 있음.\n",
+ "\n",
+ "\n",
+ "data_dir = './' # 데이터가 저장된 디렉토리 경로를 나타냄\n",
+ "os.environ[\"CUDA_VISIBLE_DEVICES\"] = args.gpu #args.gpu : 코드 실행 시 지정된 GPU의 인덱스\n",
+ "device = torch.device(f\"cuda\" if torch.cuda.is_available() else \"cpu\") #디바이스 유형 설정.\n",
+ "#만약 CUDA 디바이스가 사용 가능하면 \"cuda\"로 설정하고, 그렇지 않으면 \"cpu\"로 설정함. 이를 통해 디바이스 유형에 맞게 모델을 초기화할 수 있음.\n",
+ "\n",
+ "##모델 학습 시 랜덤 시드를 설정해 재현성을 보장\n",
+ "def set_seeds(seed=42):\n",
+ " random.seed(seed)\n",
+ " os.environ['PYTHONHASHSEED'] = str(seed)\n",
+ " np.random.seed(seed)\n",
+ " torch.manual_seed(seed)\n",
+ " torch.cuda.manual_seed(seed)\n",
+ " torch.cuda.manual_seed_all(seed)\n",
+ " #torch.backends.cudnn : NVIDIA cuDNN 라이브러리를 사용해서 PyTorch 연산의 실행 속도를 높이는 데 사용됨.\n",
+ " #cuDNN : Deep Neural Network 라이브러리, NVIDIA GPU에서 딥러닝 모델을 학습 및 추론할 때 연산속도를 높이기 위한 최적화된 기능을 제공\n",
+ " #torch.backends.cudnn을 쓰면 이런 최적화를 활용해 PyTorch 연산 속도를 높일 수 있음.\n",
+ " torch.backends.cudnn.deterministic = True #기본값이 True. 연산 실행 시간을 단축하고자 cuDNN 라이브러리가 실행 시간을 측정하고 최적화를 수행하는 걸 의미\n",
+ " torch.backends.cudnn.benchmark = False # 연산 결과가 항상 동일하지 않을 수 있다는 걸 의미함. -> 연산 속도 및 학습을 빠르게함\n",
+ "\n",
+ "set_seeds(seed=args.seed)\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "299e9265",
+ "metadata": {
+ "code_folding": [
+ 1,
+ 11
+ ],
+ "id": "299e9265"
+ },
+ "outputs": [],
+ "source": [
+ "# - util - #\n",
+ "def get_learning_rate(optimizer): #현재 학습률을 가져와서 반환하는 함수\n",
+ " lr=[]\n",
+ " for param_group in optimizer.param_groups:\n",
+ " #param_groups : optimizer의 학습률과 weight decay 같은 하이퍼파라미터 관리\n",
+ " lr +=[ param_group['lr'] ]\n",
+ "\n",
+ " assert(len(lr)==1)\n",
+ " #'lr'의 길이가 1인지 확인하는데, 이건 현재 이 코드에서 하나의 학습률만 사용하기 때문임.\n",
+ " lr = lr[0]\n",
+ "\n",
+ " return lr\n",
+ "\n",
+ "def load_data(): #데이터 로드 합수\n",
+ " train=pd.read_csv('./train_data.csv')\n",
+ " test=pd.read_csv('./test_data.csv')\n",
+ "\n",
+ " #일부 column을 지정\n",
+ " train=train[['title','topic_idx']]\n",
+ " test=test[['title']]\n",
+ " #5-fold 교차 검증 수행\n",
+ " from sklearn.model_selection import StratifiedKFold\n",
+ " skf = StratifiedKFold(n_splits=5, random_state=42, shuffle=True)\n",
+ " train['fold'] = -1\n",
+ " for n_fold, (_,v_idx) in enumerate(skf.split(train, train['topic_idx'])):\n",
+ " train.loc[v_idx, 'fold'] = n_fold\n",
+ " #train 데이터에 fold와 id열을 추가\n",
+ " train['id'] = [x for x in range(len(train))]\n",
+ "\n",
+ " return train, test\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "86ed46c9",
+ "metadata": {
+ "heading_collapsed": true,
+ "id": "86ed46c9"
+ },
+ "source": [
+ "# 전처리"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "6feb9fe2",
+ "metadata": {
+ "code_folding": [
+ 0
+ ],
+ "hidden": true,
+ "id": "6feb9fe2"
+ },
+ "outputs": [],
+ "source": [
+ "# make KoBertTokenizer\n",
+ "# 한글을 토큰화할 수 있는 KoBert 모델용 custom tokenizer를 만드는 데 사용함.\n",
+ "import logging\n",
+ "import os\n",
+ "import unicodedata #유니코드 문자 처리를 위함\n",
+ "from shutil import copyfile #파일 복사\n",
+ "\n",
+ "from transformers import PreTrainedTokenizer\n",
+ "\n",
+ "logger = logging.getLogger(__name__)\n",
+ "#logger : 스크립트 실행되는 동안 메세지를 기록하는 데 사용함.\n",
+ "# 로거명을 __name__로 설정하면 현재 모듈명을 로거의 이름으로 사용함\n",
+ "# 이렇게 하면 각 모듈이 자체 로거를 가질 수 있으므로 대규모 애플리케이션에서 로그 메세지를 더 잘 구성할 수 있음.\n",
+ "\n",
+ "VOCAB_FILES_NAMES = {\"vocab_file\": \"tokenizer_78b3253a26.model\", # 어휘파일의 위치 지정\n",
+ " \"vocab_txt\": \"vocab.txt\"} # 어휘에 대한 토큰-index mapping 사전을 구축하는 데 쓰임.\n",
+ "#PRETRAINED_VOCAB_FILES_MAP 변수를 정의하는 코드\n",
+ "# hugging face의 transformer 라이브러리에서 사용되고, 사전 학습된 모델의 tokenizer와 관련된 파일들의 URL을 매핑함\n",
+ "#즉, 해당 모델에 대한 토크나이저와 어휘파일을 쉽게 다운로드할 수 있음.\n",
+ "PRETRAINED_VOCAB_FILES_MAP = {\n",
+ " #vocab_file과 vocab_txt는 각각 토크나이저 파이과 어휘 파일의 URL을 가리키는 사전임\n",
+ " \"vocab_file\": {\n",
+ " \"monologg/kobert\": \"https://s3.amazonaws.com/models.huggingface.co/bert/monologg/kobert/tokenizer_78b3253a26.model\",\n",
+ " #각각의 어휘파일의 링크가 제공됨.\n",
+ " #이 링크들은 Hugging Face에서 제공하는 S3 버킷에서 해당 어휘 파일을 다운로드할 수 있는 주소를 제공함.\n",
+ " \"monologg/kobert-lm\": \"https://s3.amazonaws.com/models.huggingface.co/bert/monologg/kobert-lm/tokenizer_78b3253a26.model\",\n",
+ " \"monologg/distilkobert\": \"https://s3.amazonaws.com/models.huggingface.co/bert/monologg/distilkobert/tokenizer_78b3253a26.model\"\n",
+ " #세 개의 다른 모델명, 각각 해당 모델에 대한 토크나이저와 어휘 파일을 가짐.\n",
+ " },\n",
+ " \"vocab_txt\": {\n",
+ " \"monologg/kobert\": \"https://s3.amazonaws.com/models.huggingface.co/bert/monologg/kobert/vocab.txt\",\n",
+ " \"monologg/kobert-lm\": \"https://s3.amazonaws.com/models.huggingface.co/bert/monologg/kobert-lm/vocab.txt\",\n",
+ " \"monologg/distilkobert\": \"https://s3.amazonaws.com/models.huggingface.co/bert/monologg/distilkobert/vocab.txt\"\n",
+ " }\n",
+ "}\n",
+ "\n",
+ "#KoBERT의 tokenizer와 관련된 변수들을 정의하는 부분\n",
+ "#positional embedding의 크기를 지정\n",
+ "PRETRAINED_POSITIONAL_EMBEDDINGS_SIZES = {\n",
+ " \"monologg/kobert\": 512,\n",
+ " \"monologg/kobert-lm\": 512,\n",
+ " \"monologg/distilkobert\": 512\n",
+ "}\n",
+ "#초기화 설정값 지정.\n",
+ "PRETRAINED_INIT_CONFIGURATION = {\n",
+ " \"monologg/kobert\": {\"do_lower_case\": False}, #do_lower_case를 False로 설정하면 대소문자를 구분함.\n",
+ " \"monologg/kobert-lm\": {\"do_lower_case\": False},\n",
+ " \"monologg/distilkobert\": {\"do_lower_case\": False}\n",
+ "}\n",
+ "\n",
+ "SPIECE_UNDERLINE = u'▁'\n",
+ "#KOBERT tokenizer에서 사용되는 특수 토큰.\n",
+ "#\"__\"은 subword를 나타내며, 이는 단어 일부분이 다른 단어와 함께 subword 단위로 나눠지는 경우 사용됨.\n",
+ "\n",
+ "class KoBertTokenizer(PreTrainedTokenizer):\n",
+ " # KoBertTokenizer 클래스 : 문장 조각 기반 tokenizer를 구축하는 데 사용하는 transformer library의 PreTrainedTokenizer class를 상속받음\n",
+ " \"\"\"\n",
+ " SentencePiece based tokenizer. Peculiarities:\n",
+ " - requires `SentencePiece `_\n",
+ " \"\"\"\n",
+ " vocab_files_names = VOCAB_FILES_NAMES\n",
+ " pretrained_vocab_files_map = PRETRAINED_VOCAB_FILES_MAP\n",
+ " pretrained_init_configuration = PRETRAINED_INIT_CONFIGURATION\n",
+ " max_model_input_sizes = PRETRAINED_POSITIONAL_EMBEDDINGS_SIZES\n",
+ "\n",
+ " def __init__(\n",
+ " self,\n",
+ " vocab_file,\n",
+ " vocab_txt,\n",
+ " do_lower_case=False,\n",
+ " remove_space=True,\n",
+ " keep_accents=False,\n",
+ " unk_token=\"[UNK]\",\n",
+ " sep_token=\"[SEP]\",\n",
+ " pad_token=\"[PAD]\",\n",
+ " cls_token=\"[CLS]\",\n",
+ " mask_token=\"[MASK]\",\n",
+ " **kwargs):\n",
+ " super().__init__(\n",
+ " unk_token=unk_token,\n",
+ " sep_token=sep_token,\n",
+ " pad_token=pad_token,\n",
+ " cls_token=cls_token,\n",
+ " mask_token=mask_token,\n",
+ " **kwargs\n",
+ " )\n",
+ "\n",
+ " # Build vocab\n",
+ " self.token2idx = dict()\n",
+ " self.idx2token = []\n",
+ " with open(vocab_txt, 'r', encoding='utf-8') as f:\n",
+ " #vocabtxt 파일을 열어서 어휘(vocabulary) 만듦.\n",
+ " #해당 텍스트 파일은 각 단어가 한 줄씩 적혀 있음\n",
+ " for idx, token in enumerate(f):\n",
+ " token = token.strip()\n",
+ " self.token2idx[token] = idx\n",
+ " self.idx2token.append(token)\n",
+ "\n",
+ " #self.max_len_single_sentence = self.max_len - 2 # take into account special tokens\n",
+ " #self.max_len_sentences_pair = self.max_len - 3 # take into account special tokens\n",
+ "\n",
+ " #sentencepiece 패키지를 이용해, SentencePiece모델 파일(tokenizer_78b3253a26.model)을 로드함.\n",
+ " #이 모델 파일은 BytePairEncoding 기반의 subword tokenization 정보를 담고 있으며,\n",
+ " #각 subwork token을 생서하기 위한 기준 정보를 담음\n",
+ " try:\n",
+ " import sentencepiece as spm\n",
+ " except ImportError:\n",
+ " logger.warning(\"You need to install SentencePiece to use KoBertTokenizer: https://github.com/google/sentencepiece\"\n",
+ " \"pip install sentencepiece\")\n",
+ "\n",
+ " #KoBertTokenizer 객체의 어휘 변수로 어휘 파일(vocab_txt), SentencePiece 모델 파일(vocab_file) 경로,\n",
+ " #대소문자 구분 여부(do_lower_case), 공백 제거 여부(remove_space), 악센트 유지 여부(keep_accents) 등이 저장됨\n",
+ " self.do_lower_case = do_lower_case\n",
+ " self.remove_space = remove_space\n",
+ " self.keep_accents = keep_accents\n",
+ " self.vocab_file = vocab_file\n",
+ " self.vocab_txt = vocab_txt\n",
+ "\n",
+ " self.sp_model = spm.SentencePieceProcessor() #sentencepiece 패키지를 사용하여 SentencePieceProcessor 객체를 초기화\n",
+ " self.sp_model.Load(vocab_file)\n",
+ "\n",
+ " @property\n",
+ " #메서드를 클래스 속성의 \"getter\"로 정의할 수 있는 파이썬 데코레이터.\n",
+ " #메서드 저의 앞에서 @property를 쓰면 해당 메서드를 클래스 인스턴스의 속성으로 접근 가능함.\n",
+ " #(ex. KoBertTokenizer 클래스에서 vocab_size는 속성이지만,\n",
+ " #KoBertTokenizer 인스턴스의 속성처럼 전근 가능하되 실제 토큰화 어휘의 길이를 반환하는 method)\n",
+ " def vocab_size(self):\n",
+ " return len(self.idx2token)\n",
+ "\n",
+ " def __getstate__(self):\n",
+ " state = self.__dict__.copy()\n",
+ " state[\"sp_model\"] = None\n",
+ " return state\n",
+ "\n",
+ " def __setstate__(self, d):\n",
+ " self.__dict__ = d\n",
+ " try:\n",
+ " import sentencepiece as spm\n",
+ " except ImportError:\n",
+ " logger.warning(\"You need to install SentencePiece to use KoBertTokenizer: https://github.com/google/sentencepiece\"\n",
+ " \"pip install sentencepiece\")\n",
+ " self.sp_model = spm.SentencePieceProcessor()\n",
+ " self.sp_model.Load(self.vocab_file)\n",
+ "\n",
+ " def preprocess_text(self, inputs):\n",
+ " if self.remove_space:\n",
+ " outputs = \" \".join(inputs.strip().split())\n",
+ " else:\n",
+ " outputs = inputs\n",
+ " outputs = outputs.replace(\"``\", '\"').replace(\"''\", '\"')\n",
+ "\n",
+ " if not self.keep_accents:\n",
+ " outputs = unicodedata.normalize('NFKD', outputs)\n",
+ " outputs = \"\".join([c for c in outputs if not unicodedata.combining(c)])\n",
+ " if self.do_lower_case:\n",
+ " outputs = outputs.lower()\n",
+ "\n",
+ " return outputs\n",
+ "\n",
+ " def _tokenize(self, text, return_unicode=True, sample=False):\n",
+ " \"\"\" Tokenize a string. \"\"\"\n",
+ " text = self.preprocess_text(text)\n",
+ "\n",
+ " if not sample:\n",
+ " pieces = self.sp_model.EncodeAsPieces(text)\n",
+ " else:\n",
+ " pieces = self.sp_model.SampleEncodeAsPieces(text, 64, 0.1)\n",
+ " new_pieces = []\n",
+ " for piece in pieces:\n",
+ " if len(piece) > 1 and piece[-1] == str(\",\") and piece[-2].isdigit():\n",
+ " cur_pieces = self.sp_model.EncodeAsPieces(piece[:-1].replace(SPIECE_UNDERLINE, \"\"))\n",
+ " if piece[0] != SPIECE_UNDERLINE and cur_pieces[0][0] == SPIECE_UNDERLINE:\n",
+ " if len(cur_pieces[0]) == 1:\n",
+ " cur_pieces = cur_pieces[1:]\n",
+ " else:\n",
+ " cur_pieces[0] = cur_pieces[0][1:]\n",
+ " cur_pieces.append(piece[-1])\n",
+ " new_pieces.extend(cur_pieces)\n",
+ " else:\n",
+ " new_pieces.append(piece)\n",
+ "\n",
+ " return new_pieces\n",
+ "\n",
+ " def _convert_token_to_id(self, token):\n",
+ " \"\"\" 어휘를 사용하여 아이디의 토큰(문자열/유니코드)을 변환함 \"\"\"\n",
+ " return self.token2idx.get(token, self.token2idx[self.unk_token])\n",
+ "\n",
+ " def _convert_id_to_token(self, index, return_unicode=True):\n",
+ " \"\"\"어휘를 사용하여 인덱스(정수)를 토큰(문자열/유니코드)으로 변환함\"\"\"\n",
+ " return self.idx2token[index]\n",
+ "\n",
+ " def convert_tokens_to_string(self, tokens):\n",
+ " \"\"\"토큰 시퀀스(하위 단어의 문자열)를 단일 문자열로 변환함\"\"\"\n",
+ " out_string = \"\".join(tokens).replace(SPIECE_UNDERLINE, \" \").strip()\n",
+ " return out_string\n",
+ "\n",
+ " def build_inputs_with_special_tokens(self, token_ids_0, token_ids_1=None):\n",
+ " \"\"\"\n",
+ " 특수 토큰을 연결하고 추가하여 시퀀스 또는 시퀀스 쌍에서 시퀀스 분류 작업을 위한 모델 입력을 구축함.\n",
+ " RoBERTa 시퀀스의 형식은 다음과 같다:\n",
+ " single sequence: [CLS] X [SEP]\n",
+ " pair of sequences: [CLS] A [SEP] B [SEP]\n",
+ " \"\"\"\n",
+ " if token_ids_1 is None:\n",
+ " return [self.cls_token_id] + token_ids_0 + [self.sep_token_id]\n",
+ " cls = [self.cls_token_id]\n",
+ " sep = [self.sep_token_id]\n",
+ " return cls + token_ids_0 + sep + token_ids_1 + sep\n",
+ "\n",
+ " def get_special_tokens_mask(self, token_ids_0, token_ids_1=None, already_has_special_tokens=False):\n",
+ " \"\"\"\n",
+ " 특수 토큰이 추가되지 않은 토큰 목록에서 시퀀스 ID를 검색함.\n",
+ " 이 메서드는 토큰화기 ``prepare_for_model`` 또는 ``encode_plus`` 메서드를 사용하여 특수 토큰을 추가할 때 호출됨.\n",
+ " Args:\n",
+ " token_ids_0: ID 목록(특수 토큰을 포함하지 않아야 함)\n",
+ " token_ids_1: 시퀀스 쌍에 대한 시퀀스 ID를 가져올 때 필요한 선택적 ID 목록(특수 토큰을 포함하지 않아야 함)\n",
+ " already_has_special_tokens: (default False) 토큰 목록이 모델에 대한 특수 토큰으로 이미 형식화되어 있으면 True로 설정\n",
+ " Returns:\n",
+ " [0, 1] 범위의 정수 목록: 특수 토큰은 0, 시퀀스 토큰은 1\n",
+ " \"\"\"\n",
+ "\n",
+ " if already_has_special_tokens:\n",
+ " if token_ids_1 is not None:\n",
+ " raise ValueError(\n",
+ " \"You should not supply a second sequence if the provided sequence of \"\n",
+ " \"ids is already formated with special tokens for the model.\"\n",
+ " )\n",
+ " return list(map(lambda x: 1 if x in [self.sep_token_id, self.cls_token_id] else 0, token_ids_0))\n",
+ "\n",
+ " if token_ids_1 is not None:\n",
+ " return [1] + ([0] * len(token_ids_0)) + [1] + ([0] * len(token_ids_1)) + [1]\n",
+ " return [1] + ([0] * len(token_ids_0)) + [1]\n",
+ "\n",
+ " def create_token_type_ids_from_sequences(self, token_ids_0, token_ids_1=None):\n",
+ " \"\"\"\n",
+ " 전달된 두 시퀀스로부터 시퀀스 쌍 분류 작업에 사용할 마스크를 만듦.\n",
+ " BERT 시퀀스 쌍 마스크의 형식은 다음과 같음:\n",
+ " 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1\n",
+ " | first sequence | second sequence\n",
+ " token_ids_1이 None이면 마스크의 첫 번째 부분(0)만 반환함\n",
+ " \"\"\"\n",
+ " sep = [self.sep_token_id]\n",
+ " cls = [self.cls_token_id]\n",
+ " if token_ids_1 is None:\n",
+ " return len(cls + token_ids_0 + sep) * [0]\n",
+ " return len(cls + token_ids_0 + sep) * [0] + len(token_ids_1 + sep) * [1]\n",
+ "\n",
+ " def save_vocabulary(self, save_directory):\n",
+ " \"\"\" 문장 조각 어휘(원본 파일 복사)와 특수 토큰 파일을 디렉토리에 저장\"\"\"\n",
+ " if not os.path.isdir(save_directory):\n",
+ " logger.error(\"Vocabulary path ({}) should be a directory\".format(save_directory))\n",
+ " return\n",
+ "\n",
+ " # 1. Save sentencepiece model\n",
+ " out_vocab_model = os.path.join(save_directory, VOCAB_FILES_NAMES[\"vocab_file\"])\n",
+ "\n",
+ " if os.path.abspath(self.vocab_file) != os.path.abspath(out_vocab_model):\n",
+ " copyfile(self.vocab_file, out_vocab_model)\n",
+ "\n",
+ " # 2. Save vocab.txt\n",
+ " index = 0\n",
+ " out_vocab_txt = os.path.join(save_directory, VOCAB_FILES_NAMES[\"vocab_txt\"])\n",
+ " with open(out_vocab_txt, \"w\", encoding=\"utf-8\") as writer:\n",
+ " for token, token_index in sorted(self.token2idx.items(), key=lambda kv: kv[1]):\n",
+ " if index != token_index:\n",
+ " logger.warning(\n",
+ " \"{}에 어휘 저장:어휘 인덱스가 연속적이지 않음.\"\n",
+ " \" 어휘가 손상되지 않았는지 확인하세요!\".format(out_vocab_txt)\n",
+ " )\n",
+ " index = token_index\n",
+ " writer.write(token + \"\\n\")\n",
+ " index += 1\n",
+ "\n",
+ " return out_vocab_model, out_vocab_txt"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "ac556bf5",
+ "metadata": {
+ "code_folding": [
+ 0,
+ 17,
+ 69
+ ],
+ "hidden": true,
+ "id": "ac556bf5"
+ },
+ "outputs": [],
+ "source": [
+ "#bert_tokenizer는 preprocessing_train() 및 preprocessing_test() 함수에서 각 문장을 토큰화 및 인코딩하는 데 사용됨.\n",
+ "#이 함수는 문장, MAX_LEN 매개변수, 토큰화 객체를 입력으로 받아 input_ids, attention_mask, token_type_ids 텐서를 반환함\n",
+ "def bert_tokenizer(sent, MAX_LEN, tokenizer):\n",
+ "\n",
+ " encoded_dict=tokenizer.encode_plus(\n",
+ " text = sent,\n",
+ " add_special_tokens=True,\n",
+ " max_length=MAX_LEN,\n",
+ " pad_to_max_length=True,\n",
+ " return_attention_mask=True,\n",
+ " truncation = True)\n",
+ "\n",
+ " input_id=encoded_dict['input_ids']\n",
+ " attention_mask=encoded_dict['attention_mask']\n",
+ " #token_type_id = encoded_dict['token_type_ids']\n",
+ " token_type_id = 0\n",
+ "\n",
+ " return input_id, attention_mask, token_type_id\n",
+ "#텍스트 분류 작업을 위해서, 각각 훈련데이터와 테스트 데이터의 전처리 단계를 수행하는\n",
+ "#preprocessing_train() 및 preprocessing_test()의 두 가지 함수를 정의\n",
+ "\n",
+ "'''\n",
+ "이 함수들은 BERT 기반 토큰화기를 사용하여 입력 텍스트를 토큰화하고\n",
+ "토큰을 BERT 기반 모델을 미세 조정하는 데 필요한 입력인 input_ids, attention_masks, token_type_ids로 인코딩함\n",
+ "\n",
+ "인코딩된 입력은 훈련 세트의 경우 train_data, 테스트 세트의 경우 test_data라는 딕셔너리에 저장된 다음 피클 파일 형식으로 디스크에 저장됨\n",
+ "파일 저장 경로는 사전 학습된 모델 이름 또는 디렉터리인 args.pt 매개변수를 기반으로 함.\n",
+ "'''\n",
+ "def preprocessing_train():\n",
+ "\n",
+ " pt = args.pt#'monologg/kobert'\n",
+ "\n",
+ " if 'kobert' in pt:\n",
+ " tokenizer = KoBertTokenizer.from_pretrained(pt, cache_dir='bert_ckpt', do_lower_case=False) #do_lower_case : 모든 문자를 소문자로 변환할지 여부설정\n",
+ " print('load kobert')\n",
+ " else:\n",
+ " tokenizer = AutoTokenizer.from_pretrained(args.pt)\n",
+ "\n",
+ " MAX_LEN = args.max_len\n",
+ " #MAX_LEN 매개변수는 입력 시퀀스의 최대 길이를 지정하며, 토큰화기는 이 길이에 맞게 시퀀스를 자르거나 패딩\n",
+ " train = pd.read_csv('./train_data.csv')\n",
+ " train=train[['title','topic_idx']]\n",
+ "\n",
+ " input_ids =[]\n",
+ " attention_masks =[]\n",
+ " token_type_ids =[]\n",
+ " train_data_labels = []\n",
+ "\n",
+ " for train_sent, train_label in tqdm.tqdm(zip(train['title'], train['topic_idx'])):\n",
+ " try:\n",
+ " input_id, attention_mask,_ = bert_tokenizer(train_sent, MAX_LEN=MAX_LEN, tokenizer=tokenizer)\n",
+ "\n",
+ " input_ids.append(input_id)\n",
+ " attention_masks.append(attention_mask)\n",
+ " token_type_ids.append(0)\n",
+ " #########################################\n",
+ " train_data_labels.append(train_label)\n",
+ "\n",
+ " except Exception as e:\n",
+ " print(e)\n",
+ " pass\n",
+ "\n",
+ " train_input_ids=np.array(input_ids, dtype=int)\n",
+ " train_attention_masks=np.array(attention_masks, dtype=int)\n",
+ " train_token_type_ids=np.array(token_type_ids, dtype=int)\n",
+ " ###########################################################\n",
+ " train_inputs=(train_input_ids, train_attention_masks, train_token_type_ids)\n",
+ " train_labels=np.asarray(train_data_labels, dtype=np.int32)\n",
+ "\n",
+ " # save\n",
+ " train_data = {}\n",
+ "\n",
+ " train_data['input_ids'] = train_input_ids\n",
+ " train_data['attention_mask'] = train_attention_masks\n",
+ " train_data['token_type_ids'] = train_token_type_ids\n",
+ " train_data['targets'] = np.asarray(train_data_labels, dtype=np.int32)\n",
+ "\n",
+ " os.makedirs(f'./data/{pt}/', exist_ok=True)\n",
+ " with open(f'./data/{pt}/train_data_{MAX_LEN}.pickle', 'wb') as f:\n",
+ " pickle.dump(train_data, f, pickle.HIGHEST_PROTOCOL)\n",
+ "\n",
+ "def preprocessing_test():\n",
+ "\n",
+ " pt = args.pt\n",
+ " if 'kobert' in pt:\n",
+ " tokenizer = KoBertTokenizer.from_pretrained(pt, cache_dir='bert_ckpt', do_lower_case=False)\n",
+ " print('load kobert')\n",
+ " else:\n",
+ " tokenizer = AutoTokenizer.from_pretrained(args.pt)\n",
+ " MAX_LEN = args.max_len\n",
+ "\n",
+ " test = pd.read_csv('./test_data.csv')\n",
+ " test=test[['title']]\n",
+ "\n",
+ " input_ids =[]\n",
+ " attention_masks =[]\n",
+ " token_type_ids =[]\n",
+ "\n",
+ " for test_sent in tqdm.tqdm(test['title']):\n",
+ " try:\n",
+ " input_id, attention_mask,_ = bert_tokenizer(test_sent, MAX_LEN=MAX_LEN, tokenizer=tokenizer)\n",
+ "\n",
+ " input_ids.append(input_id)\n",
+ " attention_masks.append(attention_mask)\n",
+ " token_type_ids.append(0)\n",
+ " #########################################\n",
+ "\n",
+ " except Exception as e:\n",
+ " print(e)\n",
+ " pass\n",
+ "\n",
+ " test_input_ids=np.array(input_ids, dtype=int)\n",
+ " test_attention_masks=np.array(attention_masks, dtype=int)\n",
+ " test_token_type_ids=np.array(token_type_ids, dtype=int)\n",
+ " ###########################################################\n",
+ " test_inputs=(test_input_ids, test_attention_masks, test_token_type_ids)\n",
+ "\n",
+ "\n",
+ " # save\n",
+ " test_data = {}\n",
+ "\n",
+ " test_data['input_ids'] = test_input_ids\n",
+ " test_data['attention_mask'] = test_attention_masks\n",
+ " test_data['token_type_ids'] = test_token_type_ids\n",
+ "\n",
+ " os.makedirs(f'./data/{pt}/', exist_ok=True)\n",
+ " with open(f'./data/{pt}/test_data_{MAX_LEN}.pickle', 'wb') as f:\n",
+ " pickle.dump(test_data, f, pickle.HIGHEST_PROTOCOL)\n",
+ ""
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "!pip install sentencepiece # spm은 KoBertTokenizer class의 일부이고, args.pt 변수 값에 따라 다른 토크나이저가 선택됨.\n",
+ "#오류 메세지가 떴을 때는 KoBertTokenizer 대신에 BertTokenizer가 선택되어 있는데, 이는 KoBertTokenizer가 의존하는 SentencePiece 패키지가 안 설치 되어 있기 때문임"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "_0Ac6tbGqSDM",
+ "outputId": "3492264b-a91f-4f31-930a-66e4c88d137d"
+ },
+ "id": "_0Ac6tbGqSDM",
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/\n",
+ "Collecting sentencepiece\n",
+ " Downloading sentencepiece-0.1.97-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.3/1.3 MB\u001b[0m \u001b[31m40.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[?25hInstalling collected packages: sentencepiece\n",
+ "Successfully installed sentencepiece-0.1.97\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "#마운트 시키고 cd 명령어 사용 -> 근데 이 마운크를 굳이 코드로 안 해도 되는 거였음... 방식 알려주기\n",
+ "from google.colab import drive\n",
+ "drive.mount('/content/drive')\n",
+ "%cd /content/drive/My Drive/4J"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "41AJ0YEpqvPK",
+ "outputId": "effd56c4-b852-4631-9f47-1c75510df57c"
+ },
+ "id": "41AJ0YEpqvPK",
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "Mounted at /content/drive\n",
+ "/content/drive/My Drive/4J\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "fd7db76a",
+ "metadata": {
+ "hidden": true,
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "referenced_widgets": [
+ "265d58264cb44d71b8af68940bf31e56",
+ "28d3b20cb6ea4f4c9c72c10072d246e8",
+ "1d18879aaf8943b09503d61e78773f37",
+ "8c609b8177e44af89f7e35f2879721c9",
+ "f707fba56e7141d78891d53ee74a259e",
+ "bb841ec0e55a45b9bfe5179d764cc05d",
+ "5916603561134a779856a7366679e448",
+ "3646753908c740649027e069cd8de136",
+ "620fe7178e6c46b6b7486bebdbc62aa8",
+ "554b2ff17b82433d898fefc6fd6f1888",
+ "50f71915c0934804a05a1fa20c7c16d4",
+ "e19099aad499415bb2460740c0618632",
+ "592e02aac4834d488a86abf0ac9de161",
+ "bdf5b15134fe49959fc6ae43245ac9da",
+ "f11334304f5f47ef864576420c7773f4",
+ "309130246636451fb0c8d260eba51362",
+ "1708a31d597b467a82f624a4b7413eff",
+ "284d8a5b895b4fbd936b99752a774972",
+ "b6fd5128436741c98da9dca9ffa206be",
+ "9508da1c1a034d32a54184848f623cd6",
+ "e79e6a5f223e4628be73c0a8958a614c",
+ "c018678480b94f9185d5171ecaebb83c",
+ "b6200a2256da485183c393bbc798e61b",
+ "bdd16c6c006d4caabc73c9d2281d2e3f",
+ "6a54274d88994f82a841cfdd6d64b2ae",
+ "23022de1e9744471b3698d963e03774c",
+ "b16247821a1949688f4cc9036eca0d80",
+ "9dd713a34e7b42e695a80dfb274accee",
+ "e544c367b1e147ccbf5034b4c3e8bb44",
+ "681379aa4c9440e1b52717aa2152c43e",
+ "bd1c303bbfc34155964705b4809c980a",
+ "fc13c5b3a69b40079832122954285ee1",
+ "9409bae71a19445aabe5128050d515e2",
+ "f413126d65144f74835cdc7c8f8066fd",
+ "a13e738d23e847a4ac024eb33c861dbd",
+ "8c03dc9206c246fb8097db0ca231d6db",
+ "37797bfaa693445cabf39a89898eb6b5",
+ "72809d66d0854c0baa67125a312c204b",
+ "06ce2be29b574129901e3c574b05f2d4",
+ "cc59c893ed454c51a92b72b4a1f3e5c3",
+ "265faaf2dd234ca1b2b564e4c05ccd12",
+ "5e8a24d5528f405d8ec9c3bc3076a82f",
+ "3b3f48432b2a44f7b5399f13a7f3f9e5",
+ "766eb8e5e64c43da842b82b728de8315",
+ "66656f6cd75a4752b2ab42aba9630cb2",
+ "77b092f984124ef3b20e949e794759db",
+ "64ea592689824dd99c2206be5b973f24",
+ "b907ffa02f0a48dc861a01a3590b9ddc",
+ "017c025167734aa986a4225493d6b892",
+ "f829b7b1bee8490e8e541bb85b33b046",
+ "03ca09bcc5ef42bbbf3fbd79f9a1b75e",
+ "9ec6996bc36b4aae9614c09c471977a3",
+ "afcc94d046194196a1445c4a9a5a10ca",
+ "de10e0bca4f64a29b0f97a47769056fc",
+ "8de79158d5fc4e7798e6ec17a0cb8359",
+ "8f79c3be45234bd6b82be1fcf535b56a",
+ "34ed45155a0c406ab3eeb358ffa1f23d",
+ "9ef7f690f9394e0e871cbeb3a4f9c074",
+ "18101aa88c124c91a6f91cc00183c140",
+ "4dbc376168444a1892e6565048dbbee8",
+ "8fc34bda9bc2434f86434bfc996003d0",
+ "ef7fa97a2caa4be2856c9b1c799e0e01",
+ "6ef574e796474fd9b816adfdf2996e69",
+ "e7afa624c3b448abb9d97dcc19bd79bc",
+ "e8ee348b8a1641638a7896b0a7826941",
+ "f1375674453847fb9beb80694d5053b5",
+ "4577e5b3ae014e78a9df350a272ea0c8",
+ "e97b6d15983d444cb9b0d9c106a98fe7",
+ "62ca38c626d94edda3440566412b8c6b",
+ "8f7ab930d07443529e0540155e2a186b",
+ "8980fbe163c44cf48bf452364a1f5012",
+ "8b73e58bb16b494982366382dd47ba5e",
+ "96bf1f55d9474b62ba634fe04db459c3",
+ "ccd9a614a299432bbe24b667f27f9079",
+ "90b4a14f201d4681b53dc85911eae8cd",
+ "e52278d4919048e8895035bab37bdc40",
+ "6b41100258e64ea19c614133aa6c8d00",
+ "0088a0b55b49413bb142546deec7a230",
+ "eb9d9f98cad241ad81a1f54c769cd1bd",
+ "cb37af934f734aea9b7cfcaecb2d7f08",
+ "8564f07f1a814676be264bbde286da82",
+ "4604dfa3b73444d388ba16a9ef55ac78",
+ "42d6092eed3d418fa2d8ac12dafcb2bd",
+ "53f953c1cd2f4924a055409227dc3e7a",
+ "caa145c4ec574bd1aae875bf19a680f3",
+ "6f50fce310c143af967cd6bf74c7bb49",
+ "c0393d413ebb45489d1e20b45b150f6f",
+ "80925dfdc6af4bb08ce1d8b3b1afacf7",
+ "e58cac3a40634e6d81d55477df36de85",
+ "9cf89a3e788c487ab4f53292763f1dc8",
+ "bf512cc764e14c9596bebe8d02cb0786",
+ "b04082a3db8a474b825c965d531c0954",
+ "0df5705875c6427ab4423a14acee87ef",
+ "04ed1e744cb44d2ebb61eaa0584b5298",
+ "80069a4370cb401c80121dba364391aa",
+ "74fe7e6409c049cdb18ca24fe9f1d621",
+ "2d387d8f89264abfb93eb014db2f191a",
+ "40fedaebe5cd485284d654117a5294da",
+ "8663e0e8ca694482bd6b09a5428ad728",
+ "b0bc95f5472e4531b29fe33b09a4d36c",
+ "720c88fe32da498d94f05551b7da1cac",
+ "ef804c95503541a9b39ac3a8511e7e85",
+ "c888c88074ab4fd48b68a3aee8e9fd22",
+ "e0173bd95c4941c1a77760e6a0a4ca54",
+ "14ccf32079a142f89dc1c98437c7c171",
+ "1020f0d261ac4b67bf013339849de275",
+ "a8df45aea3864ee685d5e7a2bc90089c",
+ "33753b59355e449c9fb0309e63b31b0f",
+ "44caee2e2d814520b728f415225590fd",
+ "d1866ceaf58a469d8bfaa43b768a365a",
+ "8288953050cf4a87b3db5d8fdbe67d9b",
+ "d73fc41b72de468196d84f3c8b3c0200",
+ "b41543c9d8c649ee9f64e50b11c6ae14",
+ "b1ae87f9375b4132897fc7b837b28fbd",
+ "a6bd3e27f5cd4453957abe5a590b16cf",
+ "960cc22366f2464388d255a6486bd10e",
+ "7838f14b7ba64452a397a05f556f25f5",
+ "b0df16ca17be4620b30338a178986a9b",
+ "0257b66188b647ac9e2dc410a2886bca",
+ "4ab6e6f31da645c5907a6bba7fb1123b",
+ "539c83d11d744635a73458baec674794",
+ "2a4b8cabad1c4bf29dfc11380b298dd0",
+ "d7ab63d9b3544825b2dd9ca4e9da8bc4",
+ "53ffd0362e3541c5b37ed678c52de9bb",
+ "1ee0027d989e4ac79b5bcb58be4a6861",
+ "385d38c30b0b43eca6e9087c8f940957",
+ "c048e4fb18ea4a5eb6b9ffaf15e41ac0",
+ "6e4271d504e0489ebef9922e4c17469f",
+ "b1fad86df4454c9d99b808166cfdf279",
+ "5ad0767da8db47f7b9badf288ac734f9",
+ "4b05bc71e79c4a39a0df48db1c81080a",
+ "f80feafed211460f91fa43ca7e875190",
+ "6e85f86433f74ae88bb45a17a51c69b5",
+ "711fed0039c04bb0a727d8153a7f67a4",
+ "733626879544456cbc72fd6dc9f8d856",
+ "a203e8286e094b2e89e1d35877999f75",
+ "4f05871c1a424f929a349d48c9c51bd4",
+ "b1c758d8f64045ec89f2ec64028b7a7f",
+ "00680b63bf464d17a6dd6a3077fb986f",
+ "570b8de9ad53403f805c559e4f9592bc",
+ "75fc6ac62ebf4477a1873e74b72591a1",
+ "8ab3f4504d9b45ada6f4c192092d969d",
+ "b20c18308e914f50bc6f27da41a5fc10",
+ "65d914265588433589ab59433a9f37f1",
+ "281efada42e34f0cbdb256e07b5cf3eb",
+ "294f93e6bebc4dbdad817f901574944f",
+ "fba61f3da3ea4cfcb57175fd35bd8ef5",
+ "40021a9175da4e528babf528edd41f14",
+ "0eb4f7c4b5904be48c69cf3ac4c1122c",
+ "00410518ae984713b0f2c9540bdd2789",
+ "b3c662c827c64b09849acd63838583f8",
+ "e7698d59fd404a4785b5cd616703b968",
+ "f1c6d510bfa140c48159b839e8673ea5",
+ "149bb646b6fb46138fc60c9c041f872f",
+ "a9d9485a697642089f3d8ca18301b8a3",
+ "9a68253e718a496096b1ff68488f1e5c",
+ "9c1c3f3918ae4c6fad369a507f7263ed",
+ "6db1f76443374653b9f07c7fa97c2541",
+ "8fd5173aa11c43e1a43550c31ef6115e",
+ "a2bba57856554a7b9d27cffc0be0d8cb",
+ "d831d42338754b2fb27410f1b68c4bef",
+ "a4efeb8660214bd08f8b56880a9d7366",
+ "e0eff06d626b4d45acba52aa4a888e34",
+ "dfe44a5da1484f83a11e0b2c649671a7",
+ "21bf9ae5622241e38969c57b1d638a09",
+ "8b7c743043ec4c208efcb10777ca8d7b",
+ "fd765d0dbfe541cb9507b0b079c967c4",
+ "2bf17eee97e9415b91bf4f65ff96ebe0",
+ "46ac8b7079c544098fa4724dc74532ba",
+ "b5affe7fde7149298cbffbbc8ba74c1b",
+ "79e101bb06b040ee879d39335a3dad46",
+ "f49037c4d405436584f573e226214e14",
+ "fbce263c1b0c4096bade0a8c2c365fc9",
+ "6e8b1f658adb4cfd8c44d1e1f7654f21",
+ "f5fc3218202244179ec7d005bc4b079b",
+ "a127875ffe704645bfabfb6303c498c9",
+ "9e4ff39cf7eb4cf8afc22d53a2f30f01",
+ "943bf4dd97ee4766a1e97572bceeb408",
+ "35d501bb7f104d5a96dc4697b7964fcc",
+ "c9f41bef5b1d4d6a83e895fbf27c297f",
+ "2c4de5c9b6ab4eae94792d896ccc1e64",
+ "6b112b5d8c8b45e5abf49d8003f2844e",
+ "24183aecc7604328a686246ad722561b",
+ "4b53c4d8c3054a7fa22e0c8c414c282b",
+ "ae84b73ce2db42ca92c5d47010226088",
+ "0893ae402bc540d2ad22edaf02281d15",
+ "e662dcebe976458f9e82d9283e5a6bf8",
+ "72bb231a18cd420b98d68ff20c6e9ba3",
+ "e5deaa84a9b54853a608c6ef84785695",
+ "7a7da9562c06465f84c7c13e989c4567",
+ "9f382345dca24290a4b30ccf7725ae4a",
+ "f404624183054a4da60b875fa2cd11e4",
+ "e16f0923b5214cffa01b4abe44207f01",
+ "b38a270cb89b4bf9a0bbe6431285184d",
+ "e080c28dad4d4d81ac57b91a465e33e1",
+ "c87f2163fa1e45218bf4f0c16cc131b6",
+ "e7c84a7f482449efa673cbaa1827fc59",
+ "7887928960044ffca14abe437467c206",
+ "8e3cfc5e197e451fa3aa9d231dda52a1",
+ "7f043eae39594350bfa59c71ff90430e",
+ "9eb7d4cc7817421e970617eef8538652",
+ "37d11178fcc1451191a2e8d41130746e",
+ "618d8b9d899540429bafb1bbc5750e76",
+ "6948e1f520cd486fa4a72214e1e07093",
+ "6822647c69784bc988a3e8354457219c",
+ "3b5ca4c4e8f54a28a762b7cc9af2adb0",
+ "e58e9e2839cf4572abd06e1e96ae55bd",
+ "dd375cd60ac54434b3ef78f4fd15c437",
+ "19b20f738e03483ba062ff4a3cb3b578",
+ "ce3a3b4238344f8c8898ce22a13bcddc",
+ "53a37b6c7dbf43cdb0b426a209bc9a7d",
+ "d4ecf0ec7dab46a2925a31261d830444",
+ "636206c306b24596b7caf1980be4ec47",
+ "b503f438dcc94a2c8e4feb11bdec53be",
+ "0d6a1d5e3a3c43b4aad257b0c2df3114",
+ "36cde43ac29244569819ce5d2a2fa955",
+ "900a95dc077c4d64a19383c8553721c1",
+ "9a6a9bffd81f44ce932460f13e303ad4",
+ "d44e289145ec42aca4e376d8cf5e6e8a",
+ "73e79d9e0abe4dc2ad638ef0aeaec68b",
+ "2622a3c4f8814c6a899982788435f702",
+ "62f2fa1b9d7b449089de00623bb20a68",
+ "748890444a154ef6a49698394c810f3c",
+ "d0b9b80d61b84529b2e3b14f06d082b9",
+ "a08eeaeb49c54da5bcec3e369be00151",
+ "a09cf480023349c9bec9daddade90e91",
+ "447f80b186ed41d3a405b58494d3e410",
+ "debe3dda1c824088848d526d0d840e13",
+ "d535c1fc215a4e658fb4f485e87e3e46",
+ "ce087aafeb084c37b1f2097cb041bfef",
+ "3969d441f073405985cd0a1eadc92154",
+ "825255d506e749789af57bb5587b026b",
+ "3fa6946a123f43f7ab05acb3ab7aeb14",
+ "449d2a6116204739bd9d2ad32f976085",
+ "054fe8d86d344304994d8ce70e0be7ac",
+ "c476cba899184c5c8885029d1a4f218a",
+ "9a078879844a4ef68226978173aa274e",
+ "159607b8f0c1484da356a1b4faf5ada3",
+ "ab5e5becdddb4cb8aa4a68ce5ff6d085",
+ "b1e10471c905486e83fac3e1739a818e",
+ "26e0ea94e7374a6eb1797de01b43c291",
+ "c75797202f8d461da2ad22934b430718",
+ "70dea0d82f05461cabe81830551c22da",
+ "fd3dbe48d23f4aeca586d6dc24c94eaf",
+ "bb961ba002ca446ba937c05c26bc677c",
+ "b9f919a089054ab2a7faaf70cfab4baf",
+ "3a89823e13c342028df88106c5b803e4",
+ "e51ecaad661a4634acbeb84e3dba0b7c",
+ "d102602e099342ada758779502f153ed",
+ "c8bc0f0f53de4364a6348ce583b9c73e",
+ "a0e199e803a94361b63bc2e4d26515c2",
+ "2afdfd4753dd45af95153ef1bedb7f5a",
+ "9aac61202ab34d8086d458f30e3c8ef4"
+ ],
+ "height": 1000
+ },
+ "id": "fd7db76a",
+ "outputId": "66c5c808-b578-4d40-8f7f-0f563649f53c"
+ },
+ "outputs": [
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ "Downloading (…)zer_78b3253a26.model: 0%| | 0.00/371k [00:00, ?B/s]"
+ ],
+ "application/vnd.jupyter.widget-view+json": {
+ "version_major": 2,
+ "version_minor": 0,
+ "model_id": "265d58264cb44d71b8af68940bf31e56"
+ }
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ "Downloading (…)solve/main/vocab.txt: 0%| | 0.00/77.8k [00:00, ?B/s]"
+ ],
+ "application/vnd.jupyter.widget-view+json": {
+ "version_major": 2,
+ "version_minor": 0,
+ "model_id": "e19099aad499415bb2460740c0618632"
+ }
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ "Downloading (…)okenizer_config.json: 0%| | 0.00/51.0 [00:00, ?B/s]"
+ ],
+ "application/vnd.jupyter.widget-view+json": {
+ "version_major": 2,
+ "version_minor": 0,
+ "model_id": "b6200a2256da485183c393bbc798e61b"
+ }
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ "Downloading (…)lve/main/config.json: 0%| | 0.00/426 [00:00, ?B/s]"
+ ],
+ "application/vnd.jupyter.widget-view+json": {
+ "version_major": 2,
+ "version_minor": 0,
+ "model_id": "f413126d65144f74835cdc7c8f8066fd"
+ }
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "stream",
+ "name": "stderr",
+ "text": [
+ "The tokenizer class you load from this checkpoint is not the same type as the class this function is called from. It may result in unexpected tokenization. \n",
+ "The tokenizer class you load from this checkpoint is 'BertTokenizer'. \n",
+ "The class this function is called from is 'KoBertTokenizer'.\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "load kobert\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "name": "stderr",
+ "text": [
+ "0it [00:00, ?it/s]/usr/local/lib/python3.9/dist-packages/transformers/tokenization_utils_base.py:2346: FutureWarning: The `pad_to_max_length` argument is deprecated and will be removed in a future version, use `padding=True` or `padding='longest'` to pad to the longest sequence in the batch, or use `padding='max_length'` to pad to a max length. In this case, you can give a specific length with `max_length` (e.g. `max_length=45`) or leave max_length to None to pad to the maximal input size of the model (e.g. 512 for Bert).\n",
+ " warnings.warn(\n",
+ "45654it [00:14, 3098.29it/s]\n",
+ "The tokenizer class you load from this checkpoint is not the same type as the class this function is called from. It may result in unexpected tokenization. \n",
+ "The tokenizer class you load from this checkpoint is 'BertTokenizer'. \n",
+ "The class this function is called from is 'KoBertTokenizer'.\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "load kobert\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "name": "stderr",
+ "text": [
+ " 0%| | 0/9131 [00:00, ?it/s]/usr/local/lib/python3.9/dist-packages/transformers/tokenization_utils_base.py:2346: FutureWarning: The `pad_to_max_length` argument is deprecated and will be removed in a future version, use `padding=True` or `padding='longest'` to pad to the longest sequence in the batch, or use `padding='max_length'` to pad to a max length. In this case, you can give a specific length with `max_length` (e.g. `max_length=45`) or leave max_length to None to pad to the maximal input size of the model (e.g. 512 for Bert).\n",
+ " warnings.warn(\n",
+ "100%|██████████| 9131/9131 [00:06<00:00, 1411.72it/s]\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "monologg/kobert 모델 전처리 완료\n"
+ ]
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ "Downloading (…)okenizer_config.json: 0%| | 0.00/375 [00:00, ?B/s]"
+ ],
+ "application/vnd.jupyter.widget-view+json": {
+ "version_major": 2,
+ "version_minor": 0,
+ "model_id": "66656f6cd75a4752b2ab42aba9630cb2"
+ }
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ "Downloading (…)solve/main/vocab.txt: 0%| | 0.00/248k [00:00, ?B/s]"
+ ],
+ "application/vnd.jupyter.widget-view+json": {
+ "version_major": 2,
+ "version_minor": 0,
+ "model_id": "8f79c3be45234bd6b82be1fcf535b56a"
+ }
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ "Downloading (…)/main/tokenizer.json: 0%| | 0.00/752k [00:00, ?B/s]"
+ ],
+ "application/vnd.jupyter.widget-view+json": {
+ "version_major": 2,
+ "version_minor": 0,
+ "model_id": "4577e5b3ae014e78a9df350a272ea0c8"
+ }
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ "Downloading (…)cial_tokens_map.json: 0%| | 0.00/173 [00:00, ?B/s]"
+ ],
+ "application/vnd.jupyter.widget-view+json": {
+ "version_major": 2,
+ "version_minor": 0,
+ "model_id": "0088a0b55b49413bb142546deec7a230"
+ }
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "stream",
+ "name": "stderr",
+ "text": [
+ "0it [00:00, ?it/s]/usr/local/lib/python3.9/dist-packages/transformers/tokenization_utils_base.py:2346: FutureWarning: The `pad_to_max_length` argument is deprecated and will be removed in a future version, use `padding=True` or `padding='longest'` to pad to the longest sequence in the batch, or use `padding='max_length'` to pad to a max length. In this case, you can give a specific length with `max_length` (e.g. `max_length=45`) or leave max_length to None to pad to the maximal input size of the model (e.g. 512 for Bert).\n",
+ " warnings.warn(\n",
+ "45654it [00:14, 3195.75it/s]\n",
+ " 0%| | 0/9131 [00:00, ?it/s]/usr/local/lib/python3.9/dist-packages/transformers/tokenization_utils_base.py:2346: FutureWarning: The `pad_to_max_length` argument is deprecated and will be removed in a future version, use `padding=True` or `padding='longest'` to pad to the longest sequence in the batch, or use `padding='max_length'` to pad to a max length. In this case, you can give a specific length with `max_length` (e.g. `max_length=45`) or leave max_length to None to pad to the maximal input size of the model (e.g. 512 for Bert).\n",
+ " warnings.warn(\n",
+ "100%|██████████| 9131/9131 [00:01<00:00, 7638.86it/s]\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "klue/roberta-base 모델 전처리 완료\n"
+ ]
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ "Downloading (…)okenizer_config.json: 0%| | 0.00/375 [00:00, ?B/s]"
+ ],
+ "application/vnd.jupyter.widget-view+json": {
+ "version_major": 2,
+ "version_minor": 0,
+ "model_id": "e58cac3a40634e6d81d55477df36de85"
+ }
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ "Downloading (…)solve/main/vocab.txt: 0%| | 0.00/248k [00:00, ?B/s]"
+ ],
+ "application/vnd.jupyter.widget-view+json": {
+ "version_major": 2,
+ "version_minor": 0,
+ "model_id": "b0bc95f5472e4531b29fe33b09a4d36c"
+ }
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ "Downloading (…)/main/tokenizer.json: 0%| | 0.00/752k [00:00, ?B/s]"
+ ],
+ "application/vnd.jupyter.widget-view+json": {
+ "version_major": 2,
+ "version_minor": 0,
+ "model_id": "8288953050cf4a87b3db5d8fdbe67d9b"
+ }
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ "Downloading (…)cial_tokens_map.json: 0%| | 0.00/173 [00:00, ?B/s]"
+ ],
+ "application/vnd.jupyter.widget-view+json": {
+ "version_major": 2,
+ "version_minor": 0,
+ "model_id": "2a4b8cabad1c4bf29dfc11380b298dd0"
+ }
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "stream",
+ "name": "stderr",
+ "text": [
+ "0it [00:00, ?it/s]/usr/local/lib/python3.9/dist-packages/transformers/tokenization_utils_base.py:2346: FutureWarning: The `pad_to_max_length` argument is deprecated and will be removed in a future version, use `padding=True` or `padding='longest'` to pad to the longest sequence in the batch, or use `padding='max_length'` to pad to a max length. In this case, you can give a specific length with `max_length` (e.g. `max_length=45`) or leave max_length to None to pad to the maximal input size of the model (e.g. 512 for Bert).\n",
+ " warnings.warn(\n",
+ "45654it [00:04, 9235.02it/s]\n",
+ " 0%| | 0/9131 [00:00, ?it/s]/usr/local/lib/python3.9/dist-packages/transformers/tokenization_utils_base.py:2346: FutureWarning: The `pad_to_max_length` argument is deprecated and will be removed in a future version, use `padding=True` or `padding='longest'` to pad to the longest sequence in the batch, or use `padding='max_length'` to pad to a max length. In this case, you can give a specific length with `max_length` (e.g. `max_length=45`) or leave max_length to None to pad to the maximal input size of the model (e.g. 512 for Bert).\n",
+ " warnings.warn(\n",
+ "100%|██████████| 9131/9131 [00:00<00:00, 10005.79it/s]\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "klue/roberta-small 모델 전처리 완료\n"
+ ]
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ "Downloading (…)okenizer_config.json: 0%| | 0.00/375 [00:00, ?B/s]"
+ ],
+ "application/vnd.jupyter.widget-view+json": {
+ "version_major": 2,
+ "version_minor": 0,
+ "model_id": "6e85f86433f74ae88bb45a17a51c69b5"
+ }
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ "Downloading (…)solve/main/vocab.txt: 0%| | 0.00/248k [00:00, ?B/s]"
+ ],
+ "application/vnd.jupyter.widget-view+json": {
+ "version_major": 2,
+ "version_minor": 0,
+ "model_id": "65d914265588433589ab59433a9f37f1"
+ }
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ "Downloading (…)/main/tokenizer.json: 0%| | 0.00/752k [00:00, ?B/s]"
+ ],
+ "application/vnd.jupyter.widget-view+json": {
+ "version_major": 2,
+ "version_minor": 0,
+ "model_id": "a9d9485a697642089f3d8ca18301b8a3"
+ }
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ "Downloading (…)cial_tokens_map.json: 0%| | 0.00/173 [00:00, ?B/s]"
+ ],
+ "application/vnd.jupyter.widget-view+json": {
+ "version_major": 2,
+ "version_minor": 0,
+ "model_id": "8b7c743043ec4c208efcb10777ca8d7b"
+ }
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "stream",
+ "name": "stderr",
+ "text": [
+ "0it [00:00, ?it/s]/usr/local/lib/python3.9/dist-packages/transformers/tokenization_utils_base.py:2346: FutureWarning: The `pad_to_max_length` argument is deprecated and will be removed in a future version, use `padding=True` or `padding='longest'` to pad to the longest sequence in the batch, or use `padding='max_length'` to pad to a max length. In this case, you can give a specific length with `max_length` (e.g. `max_length=45`) or leave max_length to None to pad to the maximal input size of the model (e.g. 512 for Bert).\n",
+ " warnings.warn(\n",
+ "45654it [00:05, 7728.46it/s]\n",
+ " 0%| | 0/9131 [00:00, ?it/s]/usr/local/lib/python3.9/dist-packages/transformers/tokenization_utils_base.py:2346: FutureWarning: The `pad_to_max_length` argument is deprecated and will be removed in a future version, use `padding=True` or `padding='longest'` to pad to the longest sequence in the batch, or use `padding='max_length'` to pad to a max length. In this case, you can give a specific length with `max_length` (e.g. `max_length=45`) or leave max_length to None to pad to the maximal input size of the model (e.g. 512 for Bert).\n",
+ " warnings.warn(\n",
+ "100%|██████████| 9131/9131 [00:00<00:00, 9659.59it/s]\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "klue/roberta-large 모델 전처리 완료\n"
+ ]
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ "Downloading (…)lve/main/config.json: 0%| | 0.00/616 [00:00, ?B/s]"
+ ],
+ "application/vnd.jupyter.widget-view+json": {
+ "version_major": 2,
+ "version_minor": 0,
+ "model_id": "9e4ff39cf7eb4cf8afc22d53a2f30f01"
+ }
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ "Downloading (…)tencepiece.bpe.model: 0%| | 0.00/5.07M [00:00, ?B/s]"
+ ],
+ "application/vnd.jupyter.widget-view+json": {
+ "version_major": 2,
+ "version_minor": 0,
+ "model_id": "72bb231a18cd420b98d68ff20c6e9ba3"
+ }
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ "Downloading (…)/main/tokenizer.json: 0%| | 0.00/9.10M [00:00, ?B/s]"
+ ],
+ "application/vnd.jupyter.widget-view+json": {
+ "version_major": 2,
+ "version_minor": 0,
+ "model_id": "8e3cfc5e197e451fa3aa9d231dda52a1"
+ }
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "stream",
+ "name": "stderr",
+ "text": [
+ "0it [00:00, ?it/s]/usr/local/lib/python3.9/dist-packages/transformers/tokenization_utils_base.py:2346: FutureWarning: The `pad_to_max_length` argument is deprecated and will be removed in a future version, use `padding=True` or `padding='longest'` to pad to the longest sequence in the batch, or use `padding='max_length'` to pad to a max length. In this case, you can give a specific length with `max_length` (e.g. `max_length=45`) or leave max_length to None to pad to the maximal input size of the model (e.g. 512 for Bert).\n",
+ " warnings.warn(\n",
+ "45654it [00:07, 6164.61it/s]\n",
+ " 0%| | 0/9131 [00:00, ?it/s]/usr/local/lib/python3.9/dist-packages/transformers/tokenization_utils_base.py:2346: FutureWarning: The `pad_to_max_length` argument is deprecated and will be removed in a future version, use `padding=True` or `padding='longest'` to pad to the longest sequence in the batch, or use `padding='max_length'` to pad to a max length. In this case, you can give a specific length with `max_length` (e.g. `max_length=45`) or leave max_length to None to pad to the maximal input size of the model (e.g. 512 for Bert).\n",
+ " warnings.warn(\n",
+ "100%|██████████| 9131/9131 [00:01<00:00, 8542.76it/s]\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "xlm-roberta-large 모델 전처리 완료\n"
+ ]
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ "Downloading (…)okenizer_config.json: 0%| | 0.00/28.0 [00:00, ?B/s]"
+ ],
+ "application/vnd.jupyter.widget-view+json": {
+ "version_major": 2,
+ "version_minor": 0,
+ "model_id": "ce3a3b4238344f8c8898ce22a13bcddc"
+ }
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ "Downloading (…)lve/main/config.json: 0%| | 0.00/625 [00:00, ?B/s]"
+ ],
+ "application/vnd.jupyter.widget-view+json": {
+ "version_major": 2,
+ "version_minor": 0,
+ "model_id": "2622a3c4f8814c6a899982788435f702"
+ }
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ "Downloading (…)solve/main/vocab.txt: 0%| | 0.00/872k [00:00, ?B/s]"
+ ],
+ "application/vnd.jupyter.widget-view+json": {
+ "version_major": 2,
+ "version_minor": 0,
+ "model_id": "825255d506e749789af57bb5587b026b"
+ }
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ "Downloading (…)/main/tokenizer.json: 0%| | 0.00/1.72M [00:00, ?B/s]"
+ ],
+ "application/vnd.jupyter.widget-view+json": {
+ "version_major": 2,
+ "version_minor": 0,
+ "model_id": "70dea0d82f05461cabe81830551c22da"
+ }
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "stream",
+ "name": "stderr",
+ "text": [
+ "0it [00:00, ?it/s]/usr/local/lib/python3.9/dist-packages/transformers/tokenization_utils_base.py:2346: FutureWarning: The `pad_to_max_length` argument is deprecated and will be removed in a future version, use `padding=True` or `padding='longest'` to pad to the longest sequence in the batch, or use `padding='max_length'` to pad to a max length. In this case, you can give a specific length with `max_length` (e.g. `max_length=45`) or leave max_length to None to pad to the maximal input size of the model (e.g. 512 for Bert).\n",
+ " warnings.warn(\n",
+ "45654it [00:09, 4913.81it/s]\n",
+ " 0%| | 0/9131 [00:00, ?it/s]/usr/local/lib/python3.9/dist-packages/transformers/tokenization_utils_base.py:2346: FutureWarning: The `pad_to_max_length` argument is deprecated and will be removed in a future version, use `padding=True` or `padding='longest'` to pad to the longest sequence in the batch, or use `padding='max_length'` to pad to a max length. In this case, you can give a specific length with `max_length` (e.g. `max_length=45`) or leave max_length to None to pad to the maximal input size of the model (e.g. 512 for Bert).\n",
+ " warnings.warn(\n",
+ "100%|██████████| 9131/9131 [00:01<00:00, 6670.01it/s]\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "bert-base-multilingual-uncased 모델 전처리 완료\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "name": "stderr",
+ "text": [
+ "0it [00:00, ?it/s]/usr/local/lib/python3.9/dist-packages/transformers/tokenization_utils_base.py:2346: FutureWarning: The `pad_to_max_length` argument is deprecated and will be removed in a future version, use `padding=True` or `padding='longest'` to pad to the longest sequence in the batch, or use `padding='max_length'` to pad to a max length. In this case, you can give a specific length with `max_length` (e.g. `max_length=45`) or leave max_length to None to pad to the maximal input size of the model (e.g. 512 for Bert).\n",
+ " warnings.warn(\n",
+ "45654it [00:04, 9148.30it/s]\n",
+ " 0%| | 0/9131 [00:00, ?it/s]/usr/local/lib/python3.9/dist-packages/transformers/tokenization_utils_base.py:2346: FutureWarning: The `pad_to_max_length` argument is deprecated and will be removed in a future version, use `padding=True` or `padding='longest'` to pad to the longest sequence in the batch, or use `padding='max_length'` to pad to a max length. In this case, you can give a specific length with `max_length` (e.g. `max_length=45`) or leave max_length to None to pad to the maximal input size of the model (e.g. 512 for Bert).\n",
+ " warnings.warn(\n",
+ "100%|██████████| 9131/9131 [00:00<00:00, 10022.46it/s]\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "klue/roberta-large 모델 전처리 완료\n"
+ ]
+ }
+ ],
+ "source": [
+ "##이름과 입력값을 보면 주어진 사전 학습된 모델에 사용하기 위해 훈련 및 테스트 데이터에 대해 일종의 전처리를 수행##\n",
+ "for pt, max_len in zip(['monologg/kobert','klue/roberta-base','klue/roberta-small','klue/roberta-large','xlm-roberta-large',\n",
+ " 'bert-base-multilingual-uncased', 'klue/roberta-large'],[33,33,33,33,33,33,28]):\n",
+ " #각 반복마다 args.max_len 및 args.pt 변수를 각각 max_len 및 pt 값으로 설정\n",
+ " args.max_len = max_len\n",
+ " args.pt = pt\n",
+ " #그런 다음 업데이트된 args 변수를 사용하여 preprocessing_train() 및 preprocessing_test() 함수를 호출\n",
+ " preprocessing_train()\n",
+ " preprocessing_test()\n",
+ " #마지막으로 현재 모델에 대한 전처리가 완료되었음을 나타내는 메시지를 인쇄\n",
+ " print(f'{args.pt} 모델 전처리 완료')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "fbff676f",
+ "metadata": {
+ "heading_collapsed": true,
+ "id": "fbff676f"
+ },
+ "source": [
+ "# models"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "de6900c5",
+ "metadata": {
+ "code_folding": [
+ 3
+ ],
+ "hidden": true,
+ "id": "de6900c5"
+ },
+ "outputs": [],
+ "source": [
+ "# ------------------------\n",
+ "# dataset\n",
+ "# ------------------------\n",
+ "class KobertDataSet(Dataset):#파이토치를 이용한 데이터셋 크래스\n",
+ "\n",
+ " def __init__(self, data, test=False): #데이터와 테스트 여부(test)를 받아서 저장\n",
+ "\n",
+ " self.data = data\n",
+ " self.test = test\n",
+ "\n",
+ " def __len__(self): #데이터 길이 반환. 여기선 input_ids의 길이를 기준으로 함.\n",
+ "\n",
+ " return self.data['input_ids'].shape[0]\n",
+ "\n",
+ " def __getitem__(self,idx): #인덱스(idx)를 받아 해당 인덱스의 데이터 반환\n",
+ " #이 데이터는 input_ids, attention_mask, token_type_ids 그리고 targets로 이뤄짐\n",
+ " ids = torch.tensor(self.data['input_ids'][idx], dtype=torch.long)\n",
+ " mask = torch.tensor(self.data['attention_mask'][idx], dtype=torch.long)\n",
+ " token_type_ids = torch.tensor(self.data['token_type_ids'][idx], dtype=torch.long)\n",
+ "\n",
+ "\n",
+ " if self.test: #test 데이터인 경우에는 targets가 없으므로 ids, mask, token_type_ids만 반환\n",
+ " return {\n",
+ " 'ids': ids,\n",
+ " 'mask': mask,\n",
+ " 'token_type_ids': token_type_ids\n",
+ " }\n",
+ "\n",
+ " else:\n",
+ " target = torch.tensor(self.data['targets'][idx],dtype=torch.long) #train 데이터는 targets도 반환\n",
+ "\n",
+ " return {\n",
+ " 'ids': ids,\n",
+ " 'mask': mask,\n",
+ " 'token_type_ids': token_type_ids,\n",
+ " 'targets': target\n",
+ " }"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "f2fd0f29",
+ "metadata": {
+ "id": "f2fd0f29"
+ },
+ "source": [
+ "# training"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "89dee00d",
+ "metadata": {
+ "code_folding": [
+ 4,
+ 46,
+ 71,
+ 223
+ ],
+ "id": "89dee00d"
+ },
+ "outputs": [],
+ "source": [
+ "# ------------------------\n",
+ "# scheduler\n",
+ "# ------------------------\n",
+ "#do_valid와 do_predict 함수는 모델 학습 파이프라인에서 각각 모델의 유효성을 검사하고 예측하는 데 사용\n",
+ "def do_valid(net, valid_loader):\n",
+ "#학습된 모델과 유효성 검사 데이터로더를 받아서 모델 유효성 검사 손실, F1 score 및 정확도를 반환함.\n",
+ "#예측된 출력확률, 대상레이블, 유효성 검사 데이터의 로그도 반환함.\n",
+ " val_loss = 0\n",
+ " target_lst = []\n",
+ " pred_lst = []\n",
+ " logit = []\n",
+ " loss_fn = nn.CrossEntropyLoss()\n",
+ "\n",
+ " net.eval()\n",
+ " start_timer = timer()\n",
+ " for t, data in enumerate(tqdm.tqdm(valid_loader)):\n",
+ " ids = data['ids'].to(device)\n",
+ " mask = data['mask'].to(device)\n",
+ " tokentype = data['token_type_ids'].to(device)\n",
+ " target = data['targets'].to(device)\n",
+ "\n",
+ " with torch.no_grad():\n",
+ " if args.amp:\n",
+ " with amp.autocast():\n",
+ " # output\n",
+ " output = net(ids, mask)\n",
+ " output = output[0]\n",
+ "\n",
+ " # loss\n",
+ " loss = loss_fn(output, target)\n",
+ "\n",
+ " else:\n",
+ " output = net(ids, mask)#.squeeze(0)\n",
+ " loss = loss_fn(output, target)\n",
+ "\n",
+ " val_loss += loss\n",
+ " target_lst.extend(target.detach().cpu().numpy())\n",
+ " pred_lst.extend(output.argmax(dim=1).tolist())\n",
+ " logit.extend(output.tolist())\n",
+ "\n",
+ " val_mean_loss = val_loss / len(valid_loader)\n",
+ " validation_score = f1_score(y_true=target_lst, y_pred=pred_lst, average='macro')\n",
+ " validation_acc = accuracy_score(y_true=target_lst, y_pred=pred_lst)\n",
+ "\n",
+ "\n",
+ " return val_mean_loss, validation_score, validation_acc, logit\n",
+ "\n",
+ "def do_predict(net, valid_loader):\n",
+ "#학습된 모델과 테스트데이터로더를 받아 테스트 데이터의 예측된 레이블과 로그를 반환함\n",
+ "\n",
+ " val_loss = 0\n",
+ " pred_lst = []\n",
+ " logit=[]\n",
+ " net.eval()\n",
+ " for t, data in enumerate(tqdm.tqdm(valid_loader)):\n",
+ " ids = data['ids'].to(device)\n",
+ " mask = data['mask'].to(device)\n",
+ " tokentype = data['token_type_ids'].to(device)\n",
+ "\n",
+ " with torch.no_grad():\n",
+ " if args.amp:\n",
+ " with amp.autocast():\n",
+ " # output\n",
+ " output = net(ids, mask)[0]\n",
+ "\n",
+ " else:\n",
+ " output = net(ids, mask)\n",
+ "\n",
+ " pred_lst.extend(output.argmax(dim=1).tolist())\n",
+ " logit.extend(output.tolist())\n",
+ "\n",
+ " return pred_lst,logit\n",
+ "\"\"\"\n",
+ "두 함수 모두 손실함수로, nn.CorssEntropyLoss()를 사용해 예측된 레이블과 대상 레이블 사이의 손실을 계산함.\n",
+ "모델을 평가 모드로 전환하려면 net.eval()을 사용해서 드롭아웃을 비활성화하고, 일괄 정규화를 평가 모드로 설정함.\n",
+ "유효성 검사 및 테스트 중에 기울기를 추적하지 않으려면 torch.no_grad()를 사용\n",
+ "\"\"\"\n",
+ "\n",
+ "def run_train(folds=3):\n",
+ " out_dir = args.dir_+ f'/fold{args.fold}/{args.exp_name}/'\n",
+ " os.makedirs(out_dir, exist_ok=True)\n",
+ "\n",
+ " # load dataset\n",
+ " train, test = load_data()\n",
+ " with open(f'./data/{args.pt}/train_data_{args.max_len}.pickle', 'rb') as f:\n",
+ " train_data = pickle.load(f)\n",
+ " with open(f'./data/{args.pt}/test_data_{args.max_len}.pickle', 'rb') as f:\n",
+ " test_data = pickle.load(f)\n",
+ "\n",
+ " # split fold\n",
+ " for n_fold in range(5):\n",
+ " if n_fold != folds:\n",
+ " print(f'{n_fold} fold pass'+'\\n')\n",
+ " continue\n",
+ "\n",
+ " if args.debug:\n",
+ " train = train.sample(1000).copy()\n",
+ "\n",
+ " trn_idx = train[train['fold']!=n_fold]['id'].values\n",
+ " val_idx = train[train['fold']==n_fold]['id'].values\n",
+ "\n",
+ "\n",
+ " train_dict = {'input_ids' : train_data['input_ids'][trn_idx] , 'attention_mask' : train_data['attention_mask'][trn_idx] ,\n",
+ " 'token_type_ids' : train_data['token_type_ids'][trn_idx], 'targets' : train_data['targets'][trn_idx]}\n",
+ " val_dict = {'input_ids' : train_data['input_ids'][val_idx] , 'attention_mask' : train_data['attention_mask'][val_idx] ,\n",
+ " 'token_type_ids' : train_data['token_type_ids'][val_idx], 'targets' : train_data['targets'][val_idx]}\n",
+ "\n",
+ " ## dataset ------------------------------------\n",
+ " train_dataset = KobertDataSet(data = train_dict)\n",
+ " valid_dataset = KobertDataSet(data = val_dict)\n",
+ " trainloader = DataLoader(dataset=train_dataset, batch_size=args.batch_size,\n",
+ " num_workers=8, shuffle=True, pin_memory=True)\n",
+ " validloader = DataLoader(dataset=valid_dataset, batch_size=args.batch_size,\n",
+ " num_workers=8, shuffle=False, pin_memory=True)\n",
+ "\n",
+ " ## net ----------------------------------------\n",
+ " scaler = amp.GradScaler()\n",
+ " if 'xlm-roberta' in args.pt:\n",
+ " net = XLMRobertaForSequenceClassification.from_pretrained(args.pt, num_labels = 7)\n",
+ "\n",
+ " elif 'klue/roberta' in args.pt:\n",
+ " net = RobertaForSequenceClassification.from_pretrained(args.pt, num_labels = 7)\n",
+ " else:\n",
+ " net = BertForSequenceClassification.from_pretrained(args.pt, num_labels = 7)\n",
+ "\n",
+ " net.to(device)\n",
+ " if len(args.gpu)>1:\n",
+ " net = nn.DataParallel(net)\n",
+ "\n",
+ " # ------------------------\n",
+ " # loss\n",
+ " # ------------------------\n",
+ " loss_fn = nn.CrossEntropyLoss()\n",
+ "\n",
+ " # ------------------------\n",
+ " # Optimizer\n",
+ " # ------------------------\n",
+ " optimizer = optim.Lookahead(optim.RAdam(filter(lambda p: p.requires_grad,net.parameters()), lr=args.start_lr), alpha=0.5, k=5)\n",
+ "\n",
+ " scheduler = get_linear_schedule_with_warmup(optimizer, num_warmup_steps = 0, num_training_steps = len(trainloader)*args.epochs)\n",
+ "\n",
+ "\n",
+ " # ----\n",
+ " start_timer = timer()\n",
+ " best_score = 0\n",
+ "\n",
+ " for epoch in range(1, args.epochs+1):\n",
+ " train_loss = 0\n",
+ " valid_loss = 0\n",
+ "\n",
+ " target_lst = []\n",
+ " pred_lst = []\n",
+ " lr = get_learning_rate(optimizer)\n",
+ " print(f'-------------------')\n",
+ " print(f'{epoch}epoch start')\n",
+ " print(f'-------------------'+'\\n')\n",
+ " print(f'learning rate : {lr : .6f}')\n",
+ " for t, data in enumerate(tqdm.tqdm(trainloader)):\n",
+ "\n",
+ " # one iteration update -------------\n",
+ " ids = data['ids'].to(device)\n",
+ " mask = data['mask'].to(device)\n",
+ " tokentype = data['token_type_ids'].to(device)\n",
+ " target = data['targets'].to(device)\n",
+ "\n",
+ " # ------------\n",
+ " net.train()\n",
+ " optimizer.zero_grad()\n",
+ "\n",
+ "\n",
+ " if args.amp:\n",
+ " with amp.autocast():\n",
+ " # output\n",
+ " output = net(ids, mask)\n",
+ " output = output[0]\n",
+ "\n",
+ " # loss\n",
+ " loss = loss_fn(output, target)\n",
+ " train_loss += loss\n",
+ "\n",
+ "\n",
+ " scaler.scale(loss).backward()\n",
+ " scaler.step(optimizer)\n",
+ " scaler.update()\n",
+ "\n",
+ " else:\n",
+ " # output\n",
+ " output = net(ids, mask)\n",
+ "\n",
+ " # loss\n",
+ " loss = loss_fn(output, target)\n",
+ " train_loss += loss\n",
+ "\n",
+ " # update\n",
+ " loss.backward()\n",
+ " optimizer.step()\n",
+ "\n",
+ "\n",
+ " # for calculate f1 score\n",
+ " target_lst.extend(target.detach().cpu().numpy())\n",
+ " pred_lst.extend(output.argmax(dim=1).tolist())\n",
+ "\n",
+ "\n",
+ " if scheduler is not None:\n",
+ " scheduler.step()\n",
+ " train_loss = train_loss / len(trainloader)\n",
+ " train_score = f1_score(y_true=target_lst, y_pred=pred_lst, average='macro')\n",
+ " train_acc = accuracy_score(y_true=target_lst, y_pred=pred_lst)\n",
+ "\n",
+ " # validation\n",
+ " valid_loss, valid_score, valid_acc, _ = do_valid(net, validloader)\n",
+ "\n",
+ "\n",
+ " if valid_acc > best_score:\n",
+ " best_score = valid_acc\n",
+ " best_epoch = epoch\n",
+ " best_loss = valid_loss\n",
+ "\n",
+ " torch.save(net.state_dict(), out_dir + f'/{folds}f_{epoch}e_{best_score:.4f}_s.pth')\n",
+ " print('best model saved'+'\\n')\n",
+ "\n",
+ "\n",
+ " print(f'train loss : {train_loss:.4f}, train f1 score : {train_score : .4f}, train acc : {train_acc : .4f}'+'\\n')\n",
+ " print(f'valid loss : {valid_loss:.4f}, valid f1 score : {valid_score : .4f}, valid acc : {valid_acc : .4f}'+'\\n')\n",
+ "\n",
+ "\n",
+ " print(f'best valid loss : {best_loss : .4f}'+'\\n')\n",
+ " print(f'best epoch : {best_epoch }'+'\\n')\n",
+ " print(f'best accuracy : {best_score : .4f}'+'\\n')\n",
+ "\n",
+ "def run_predict(model_path):\n",
+ " ## dataset ------------------------------------\n",
+ " # load\n",
+ " with open(f'./data/{args.pt}/test_data_{args.max_len}.pickle', 'rb') as f:\n",
+ " test_dict = pickle.load(f)\n",
+ "\n",
+ " print('test load')\n",
+ " test_dataset = KobertDataSet(data = test_dict, test=True)\n",
+ " testloader = DataLoader(dataset=test_dataset, batch_size=args.batch_size,\n",
+ " num_workers=8, shuffle=False, pin_memory=True)\n",
+ " print('set testloader')\n",
+ " ## net ----------------------------------------\n",
+ " scaler = amp.GradScaler()\n",
+ " if 'xlm-roberta' in args.pt:\n",
+ " net = XLMRobertaForSequenceClassification.from_pretrained(args.pt, num_labels = 7)\n",
+ "\n",
+ " elif 'klue/roberta' in args.pt:\n",
+ " net = RobertaForSequenceClassification.from_pretrained(args.pt, num_labels = 7)\n",
+ " else:\n",
+ " net = BertForSequenceClassification.from_pretrained(args.pt, num_labels = 7)\n",
+ "\n",
+ " net.to(device)\n",
+ "\n",
+ " if len(args.gpu)>1:\n",
+ " net = nn.DataParallel(net)\n",
+ "\n",
+ " f = torch.load(model_path)\n",
+ " net.load_state_dict(f, strict=True) # True\n",
+ " print('load saved models')\n",
+ " # ------------------------\n",
+ " # validation\n",
+ " preds, logit = do_predict(net, testloader) #outputs\n",
+ "\n",
+ " print('complete predict')\n",
+ "\n",
+ " return preds, np.array(logit)\n",
+ "# 예측된 레이블과 로그는 각각 pred_lst 및 logit 목록에 저장\n",
+ ""
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "aa4fb075",
+ "metadata": {
+ "id": "aa4fb075",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 247
+ },
+ "outputId": "c46734a8-ee54-4c76-a974-059ffa01324b"
+ },
+ "outputs": [
+ {
+ "output_type": "error",
+ "ename": "NameError",
+ "evalue": "ignored",
+ "traceback": [
+ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
+ "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)",
+ "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 6\u001b[0m 'bert-base-multilingual-uncased', 'klue/roberta-large'],[33,33,33,33,33,33,28]):\n\u001b[1;32m 7\u001b[0m \u001b[0;31m#일부 매개변수(args.max_len, args.pt, args.exp_name)를 정의한 다음\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 8\u001b[0;31m \u001b[0margs\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmax_len\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmax_len\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 9\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpt\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpt\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 10\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mexp_name\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mstr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpt\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0;34m'_'\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mstr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmax_len\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+ "\u001b[0;31mNameError\u001b[0m: name 'args' is not defined"
+ ]
+ }
+ ],
+ "source": [
+ "\"\"\"5fold 전용\"\"\"\n",
+ "if __name__ == '__main__':\n",
+ " #스크립트를 모듈로 가져오는 것이 아니라 직접 실행할 때만 실행해야 하는 코드를 지정할 수 있는 Python 코드의 일반적인 패턴\n",
+ "\n",
+ " for pt, max_len in zip(['monologg/kobert','klue/roberta-base','klue/roberta-small','klue/roberta-large','xlm-roberta-large',\n",
+ " 'bert-base-multilingual-uncased', 'klue/roberta-large'],[33,33,33,33,33,33,28]):\n",
+ " #일부 매개변수(args.max_len, args.pt, args.exp_name)를 정의한 다음\n",
+ " args.max_len = max_len\n",
+ " args.pt = pt\n",
+ " args.exp_name = str(args.pt) + '_' + str(args.max_len)\n",
+ " #교차 유효성 검사의 5배수에 걸쳐 pt와 max_len의 각 조합에 대해 run_train 함수를 호출\n",
+ " for i in [0,1,2,3,4]: # 5fold\n",
+ " run_train(folds=i)\n",
+ " #5 교차 유효성 검사를 사용해 다양한 최대 시퀀스 길이(max_len)을 가진 사전 학습 언어 모델(pt)에 학습 스크립트를 실행하는 루프"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "63f1e8a2",
+ "metadata": {
+ "id": "63f1e8a2"
+ },
+ "source": [
+ "# ensemble"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "efa34f47",
+ "metadata": {
+ "code_folding": [
+ 0
+ ],
+ "id": "efa34f47"
+ },
+ "outputs": [],
+ "source": [
+ "#여러 transformer 모델을 앙상블시킴\n",
+ "def ensemble():\n",
+ " final_logit=0 #final_logit 변수를 0으로 초기화한 다음 각 모델에서 예측 로그를 추가함.\n",
+ " #각 모델은 예측된 레이블과 예측 로그를 반환하는 run_predict() 함수를 사용해 호출됨\n",
+ " args.max_len=33\n",
+ " args.pt = 'monologg/kobert'\n",
+ " _, logit1 = run_predict(\"./saved_models/fold3/kobert/0f_9e_0.8895_s.pth\")\n",
+ " _, logit2 = run_predict(\"./saved_models/fold3/kobert/1f_10e_0.8823_s.pth\")\n",
+ " _, logit3 = run_predict(\"./saved_models/fold3/kobert/2f_8e_0.8888_s.pth\")\n",
+ " _, logit4 = run_predict(\"./saved_models/fold3/kobert/3f_10e_0.8897_s.pth\")\n",
+ " _, logit5 = run_predict(\"./saved_models/fold3/kobert/4f_8e_0.8867_s.pth\")\n",
+ " final_logit += (logit1+logit2+logit3+logit4+logit5)/5\n",
+ " #여기선 레이블은 안 쓰고 logit만 사용\n",
+ " #예측 로짓의 평균을 취해 final_logit에 추가함\n",
+ " #####################\n",
+ "\n",
+ " args.pt = 'klue/roberta-base'\n",
+ " _, logit1 = run_predict(\"./saved_models/fold3/roberta-base/0f_5e_0.8920_s.pth\")\n",
+ " _, logit2 = run_predict(\"./saved_models/fold3/roberta-base/1f_4e_0.8879_s.pth\")\n",
+ " _, logit3 = run_predict(\"./saved_models/fold3/roberta-base/2f_5e_0.8889_s.pth\")\n",
+ " _, logit4 = run_predict(\"./saved_models/fold3/roberta-base/3f_4e_0.8951_s.pth\")\n",
+ " _, logit5 = run_predict(\"./saved_models/fold3/roberta-base/4f_4e_0.8887_s.pth\")\n",
+ "\n",
+ " final_logit += (logit1+logit2+logit3+logit4+logit5)/5\n",
+ "\n",
+ " #####################\n",
+ " args.pt = 'klue/roberta-small'\n",
+ " preds1, logit1 = run_predict(\"./saved_models/fold3/roberta-small/0f_8e_0.8900_s.pth\")\n",
+ " preds2, logit2 = run_predict(\"./saved_models/fold3/roberta-small/1f_9e_0.8813_s.pth\")\n",
+ " preds3, logit3 = run_predict(\"./saved_models/fold3/roberta-small/2f_7e_0.8884_s.pth\")\n",
+ " preds4, logit4 = run_predict(\"./saved_models/fold3/roberta-small/3f_3e_0.8958_s.pth\")\n",
+ " preds5, logit5 = run_predict(\"./saved_models/fold3/roberta-small/4f_4e_0.8881_s.pth\") # 8884 가능\n",
+ " final_logit += (logit1+logit2+logit3+logit4+logit5)/5\n",
+ " #####################\n",
+ "\n",
+ " args.pt = 'bert-base-multilingual-uncased'\n",
+ " preds1, logit1 = run_predict(\"./saved_models/fold3/bert-base-multilingual-uncased/0f_5e_0.8624_s.pth\")\n",
+ " preds2, logit2 = run_predict(\"./saved_models/fold3/bert-base-multilingual-uncased/1f_8e_0.8573_s.pth\")\n",
+ " preds3, logit3 = run_predict(\"./saved_models/fold3/bert-base-multilingual-uncased/2f_9e_0.8674_s.pth\")\n",
+ " preds4, logit4 = run_predict(\"./saved_models/fold3/bert-base-multilingual-uncased/3f_8e_0.8649_s.pth\")\n",
+ " preds5, logit5 = run_predict(\"./saved_models/fold3/bert-base-multilingual-uncased/4f_9e_0.8673_s.pth\")\n",
+ " final_logit += (logit1+logit2+logit3+logit4+logit5)/5\n",
+ " #####################\n",
+ " args.pt = 'klue/roberta-large'\n",
+ " preds1, logit1 = run_predict(\"./saved_models/fold3/klue-roberta-large/0f_2e_0.8905_s.pth\")\n",
+ " preds2, logit2 = run_predict(\"./saved_models/fold3/klue-roberta-large/1f_4e_0.8897_s.pth\")\n",
+ " preds3, logit3 = run_predict(\"./saved_models/fold3/klue-roberta-large/2f_3e_0.8887_s.pth\")\n",
+ " preds4, logit4 = run_predict(\"./saved_models/fold3/klue-roberta-large/3f_3e_0.8949_s.pth\")\n",
+ " preds5, logit5 = run_predict(\"./saved_models/fold3/klue-roberta-large/4f_2e_0.8939_s.pth\")\n",
+ " final_logit += (logit1+logit2+logit3+logit4+logit5)/5\n",
+ " #####################\n",
+ " args.pt = 'xlm-roberta-large'\n",
+ " preds1, logit1 = run_predict(\"./saved_models/fold3/xlm-roberta-large_radam/0f_6e_0.8928_s.pth\")\n",
+ " preds2, logit2 = run_predict(\"./saved_models/fold3/xlm-roberta-large_radam/1f_5e_0.8850_s.pth\")\n",
+ " preds3, logit3 = run_predict(\"./saved_models/fold3/xlm-roberta-large_radam/2f_5e_0.8891_s.pth\")\n",
+ " preds4, logit4 = run_predict(\"./saved_models/fold3/xlm-roberta-large_radam/3f_8e_0.8938_s.pth\")\n",
+ " preds5, logit5 = run_predict(\"./saved_models/fold3/xlm-roberta-large_radam/4f_6e_0.8911_s.pth\")\n",
+ " final_logit += (logit1+logit2+logit3+logit4+logit5)/5\n",
+ " #####################\n",
+ " args.max_len=28\n",
+ " args.pt = 'klue/roberta-large'\n",
+ " preds1, logit1 = run_predict(\"./saved_models/fold3/klue-roberta-large_28/0f_6e_0.8912_s.pth\")\n",
+ " preds2, logit2 = run_predict(\"./saved_models/fold3//klue-roberta-large_28/1f_3e_0.8891_s.pth\")\n",
+ " preds3, logit3 = run_predict(\"./saved_models/fold3//klue-roberta-large_28/2f_5e_0.8891_s.pth\")\n",
+ " preds4, logit4 = run_predict(\"./saved_models/fold3//klue-roberta-large_28/3f_4e_0.8961_s.pth\")\n",
+ " preds5, logit5 = run_predict(\"./saved_models/fold3//klue-roberta-large_28/4f_2e_0.8938_s.pth\")\n",
+ " final_logit += (logit1+logit2+logit3+logit4+logit5)/5\n",
+ " #최종적으로 final_logit에는 모든 모델의 평균 예측 로짓이 포함됨 -> 함수의 최종 출력으로 반환됨\n",
+ " return final_logit\n",
+ "\n",
+ "## 평균 예측 로그를 취하는 목적 : 분산을 줄이고 전체 예측의 정확도를 개선하기 위함"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "8bb613ee",
+ "metadata": {
+ "scrolled": true,
+ "id": "8bb613ee"
+ },
+ "outputs": [],
+ "source": [
+ "final_logit = ensemble()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "3cba9d8a",
+ "metadata": {
+ "heading_collapsed": true,
+ "id": "3cba9d8a"
+ },
+ "source": [
+ "# submission"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "9a6b633c",
+ "metadata": {
+ "hidden": true,
+ "id": "9a6b633c"
+ },
+ "outputs": [],
+ "source": [
+ "sub = pd.read_csv(\"./sample_submission.csv\")\n",
+ "sub['topic_idx'] = final_logit.argmax(1)\n",
+ "# preds\n",
+ "sub.to_csv('./submission/final_submission.csv', index=False)"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.9.12"
+ },
+ "toc": {
+ "base_numbering": 1,
+ "nav_menu": {},
+ "number_sections": true,
+ "sideBar": true,
+ "skip_h1_title": false,
+ "title_cell": "Table of Contents",
+ "title_sidebar": "Contents",
+ "toc_cell": false,
+ "toc_position": {},
+ "toc_section_display": true,
+ "toc_window_display": false
+ },
+ "varInspector": {
+ "cols": {
+ "lenName": 16,
+ "lenType": 16,
+ "lenVar": 40
+ },
+ "kernels_config": {
+ "python": {
+ "delete_cmd_postfix": "",
+ "delete_cmd_prefix": "del ",
+ "library": "var_list.py",
+ "varRefreshCmd": "print(var_dic_list())"
+ },
+ "r": {
+ "delete_cmd_postfix": ") ",
+ "delete_cmd_prefix": "rm(",
+ "library": "var_list.r",
+ "varRefreshCmd": "cat(var_dic_list()) "
+ }
+ },
+ "types_to_exclude": [
+ "module",
+ "function",
+ "builtin_function_or_method",
+ "instance",
+ "_Feature"
+ ],
+ "window_display": false
+ },
+ "colab": {
+ "provenance": [],
+ "include_colab_link": true
+ },
+ "widgets": {
+ "application/vnd.jupyter.widget-state+json": {
+ "265d58264cb44d71b8af68940bf31e56": {
+ "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_28d3b20cb6ea4f4c9c72c10072d246e8",
+ "IPY_MODEL_1d18879aaf8943b09503d61e78773f37",
+ "IPY_MODEL_8c609b8177e44af89f7e35f2879721c9"
+ ],
+ "layout": "IPY_MODEL_f707fba56e7141d78891d53ee74a259e"
+ }
+ },
+ "28d3b20cb6ea4f4c9c72c10072d246e8": {
+ "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_bb841ec0e55a45b9bfe5179d764cc05d",
+ "placeholder": "",
+ "style": "IPY_MODEL_5916603561134a779856a7366679e448",
+ "value": "Downloading (…)zer_78b3253a26.model: 100%"
+ }
+ },
+ "1d18879aaf8943b09503d61e78773f37": {
+ "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_3646753908c740649027e069cd8de136",
+ "max": 371391,
+ "min": 0,
+ "orientation": "horizontal",
+ "style": "IPY_MODEL_620fe7178e6c46b6b7486bebdbc62aa8",
+ "value": 371391
+ }
+ },
+ "8c609b8177e44af89f7e35f2879721c9": {
+ "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_554b2ff17b82433d898fefc6fd6f1888",
+ "placeholder": "",
+ "style": "IPY_MODEL_50f71915c0934804a05a1fa20c7c16d4",
+ "value": " 371k/371k [00:00<00:00, 1.52MB/s]"
+ }
+ },
+ "f707fba56e7141d78891d53ee74a259e": {
+ "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
+ }
+ },
+ "bb841ec0e55a45b9bfe5179d764cc05d": {
+ "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
+ }
+ },
+ "5916603561134a779856a7366679e448": {
+ "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": ""
+ }
+ },
+ "3646753908c740649027e069cd8de136": {
+ "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
+ }
+ },
+ "620fe7178e6c46b6b7486bebdbc62aa8": {
+ "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": ""
+ }
+ },
+ "554b2ff17b82433d898fefc6fd6f1888": {
+ "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
+ }
+ },
+ "50f71915c0934804a05a1fa20c7c16d4": {
+ "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": ""
+ }
+ },
+ "e19099aad499415bb2460740c0618632": {
+ "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_592e02aac4834d488a86abf0ac9de161",
+ "IPY_MODEL_bdf5b15134fe49959fc6ae43245ac9da",
+ "IPY_MODEL_f11334304f5f47ef864576420c7773f4"
+ ],
+ "layout": "IPY_MODEL_309130246636451fb0c8d260eba51362"
+ }
+ },
+ "592e02aac4834d488a86abf0ac9de161": {
+ "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_1708a31d597b467a82f624a4b7413eff",
+ "placeholder": "",
+ "style": "IPY_MODEL_284d8a5b895b4fbd936b99752a774972",
+ "value": "Downloading (…)solve/main/vocab.txt: 100%"
+ }
+ },
+ "bdf5b15134fe49959fc6ae43245ac9da": {
+ "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_b6fd5128436741c98da9dca9ffa206be",
+ "max": 77779,
+ "min": 0,
+ "orientation": "horizontal",
+ "style": "IPY_MODEL_9508da1c1a034d32a54184848f623cd6",
+ "value": 77779
+ }
+ },
+ "f11334304f5f47ef864576420c7773f4": {
+ "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_e79e6a5f223e4628be73c0a8958a614c",
+ "placeholder": "",
+ "style": "IPY_MODEL_c018678480b94f9185d5171ecaebb83c",
+ "value": " 77.8k/77.8k [00:00<00:00, 2.07MB/s]"
+ }
+ },
+ "309130246636451fb0c8d260eba51362": {
+ "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
+ }
+ },
+ "1708a31d597b467a82f624a4b7413eff": {
+ "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
+ }
+ },
+ "284d8a5b895b4fbd936b99752a774972": {
+ "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": ""
+ }
+ },
+ "b6fd5128436741c98da9dca9ffa206be": {
+ "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
+ }
+ },
+ "9508da1c1a034d32a54184848f623cd6": {
+ "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": ""
+ }
+ },
+ "e79e6a5f223e4628be73c0a8958a614c": {
+ "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
+ }
+ },
+ "c018678480b94f9185d5171ecaebb83c": {
+ "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": ""
+ }
+ },
+ "b6200a2256da485183c393bbc798e61b": {
+ "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_bdd16c6c006d4caabc73c9d2281d2e3f",
+ "IPY_MODEL_6a54274d88994f82a841cfdd6d64b2ae",
+ "IPY_MODEL_23022de1e9744471b3698d963e03774c"
+ ],
+ "layout": "IPY_MODEL_b16247821a1949688f4cc9036eca0d80"
+ }
+ },
+ "bdd16c6c006d4caabc73c9d2281d2e3f": {
+ "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_9dd713a34e7b42e695a80dfb274accee",
+ "placeholder": "",
+ "style": "IPY_MODEL_e544c367b1e147ccbf5034b4c3e8bb44",
+ "value": "Downloading (…)okenizer_config.json: 100%"
+ }
+ },
+ "6a54274d88994f82a841cfdd6d64b2ae": {
+ "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_681379aa4c9440e1b52717aa2152c43e",
+ "max": 51,
+ "min": 0,
+ "orientation": "horizontal",
+ "style": "IPY_MODEL_bd1c303bbfc34155964705b4809c980a",
+ "value": 51
+ }
+ },
+ "23022de1e9744471b3698d963e03774c": {
+ "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_fc13c5b3a69b40079832122954285ee1",
+ "placeholder": "",
+ "style": "IPY_MODEL_9409bae71a19445aabe5128050d515e2",
+ "value": " 51.0/51.0 [00:00<00:00, 3.49kB/s]"
+ }
+ },
+ "b16247821a1949688f4cc9036eca0d80": {
+ "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
+ }
+ },
+ "9dd713a34e7b42e695a80dfb274accee": {
+ "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
+ }
+ },
+ "e544c367b1e147ccbf5034b4c3e8bb44": {
+ "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": ""
+ }
+ },
+ "681379aa4c9440e1b52717aa2152c43e": {
+ "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
+ }
+ },
+ "bd1c303bbfc34155964705b4809c980a": {
+ "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": ""
+ }
+ },
+ "fc13c5b3a69b40079832122954285ee1": {
+ "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
+ }
+ },
+ "9409bae71a19445aabe5128050d515e2": {
+ "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": ""
+ }
+ },
+ "f413126d65144f74835cdc7c8f8066fd": {
+ "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_a13e738d23e847a4ac024eb33c861dbd",
+ "IPY_MODEL_8c03dc9206c246fb8097db0ca231d6db",
+ "IPY_MODEL_37797bfaa693445cabf39a89898eb6b5"
+ ],
+ "layout": "IPY_MODEL_72809d66d0854c0baa67125a312c204b"
+ }
+ },
+ "a13e738d23e847a4ac024eb33c861dbd": {
+ "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_06ce2be29b574129901e3c574b05f2d4",
+ "placeholder": "",
+ "style": "IPY_MODEL_cc59c893ed454c51a92b72b4a1f3e5c3",
+ "value": "Downloading (…)lve/main/config.json: 100%"
+ }
+ },
+ "8c03dc9206c246fb8097db0ca231d6db": {
+ "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_265faaf2dd234ca1b2b564e4c05ccd12",
+ "max": 426,
+ "min": 0,
+ "orientation": "horizontal",
+ "style": "IPY_MODEL_5e8a24d5528f405d8ec9c3bc3076a82f",
+ "value": 426
+ }
+ },
+ "37797bfaa693445cabf39a89898eb6b5": {
+ "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_3b3f48432b2a44f7b5399f13a7f3f9e5",
+ "placeholder": "",
+ "style": "IPY_MODEL_766eb8e5e64c43da842b82b728de8315",
+ "value": " 426/426 [00:00<00:00, 26.5kB/s]"
+ }
+ },
+ "72809d66d0854c0baa67125a312c204b": {
+ "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
+ }
+ },
+ "06ce2be29b574129901e3c574b05f2d4": {
+ "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
+ }
+ },
+ "cc59c893ed454c51a92b72b4a1f3e5c3": {
+ "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": ""
+ }
+ },
+ "265faaf2dd234ca1b2b564e4c05ccd12": {
+ "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
+ }
+ },
+ "5e8a24d5528f405d8ec9c3bc3076a82f": {
+ "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": ""
+ }
+ },
+ "3b3f48432b2a44f7b5399f13a7f3f9e5": {
+ "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
+ }
+ },
+ "766eb8e5e64c43da842b82b728de8315": {
+ "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": ""
+ }
+ },
+ "66656f6cd75a4752b2ab42aba9630cb2": {
+ "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_77b092f984124ef3b20e949e794759db",
+ "IPY_MODEL_64ea592689824dd99c2206be5b973f24",
+ "IPY_MODEL_b907ffa02f0a48dc861a01a3590b9ddc"
+ ],
+ "layout": "IPY_MODEL_017c025167734aa986a4225493d6b892"
+ }
+ },
+ "77b092f984124ef3b20e949e794759db": {
+ "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_f829b7b1bee8490e8e541bb85b33b046",
+ "placeholder": "",
+ "style": "IPY_MODEL_03ca09bcc5ef42bbbf3fbd79f9a1b75e",
+ "value": "Downloading (…)okenizer_config.json: 100%"
+ }
+ },
+ "64ea592689824dd99c2206be5b973f24": {
+ "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_9ec6996bc36b4aae9614c09c471977a3",
+ "max": 375,
+ "min": 0,
+ "orientation": "horizontal",
+ "style": "IPY_MODEL_afcc94d046194196a1445c4a9a5a10ca",
+ "value": 375
+ }
+ },
+ "b907ffa02f0a48dc861a01a3590b9ddc": {
+ "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_de10e0bca4f64a29b0f97a47769056fc",
+ "placeholder": "",
+ "style": "IPY_MODEL_8de79158d5fc4e7798e6ec17a0cb8359",
+ "value": " 375/375 [00:00<00:00, 6.37kB/s]"
+ }
+ },
+ "017c025167734aa986a4225493d6b892": {
+ "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
+ }
+ },
+ "f829b7b1bee8490e8e541bb85b33b046": {
+ "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
+ }
+ },
+ "03ca09bcc5ef42bbbf3fbd79f9a1b75e": {
+ "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": ""
+ }
+ },
+ "9ec6996bc36b4aae9614c09c471977a3": {
+ "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
+ }
+ },
+ "afcc94d046194196a1445c4a9a5a10ca": {
+ "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": ""
+ }
+ },
+ "de10e0bca4f64a29b0f97a47769056fc": {
+ "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
+ }
+ },
+ "8de79158d5fc4e7798e6ec17a0cb8359": {
+ "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": ""
+ }
+ },
+ "8f79c3be45234bd6b82be1fcf535b56a": {
+ "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_34ed45155a0c406ab3eeb358ffa1f23d",
+ "IPY_MODEL_9ef7f690f9394e0e871cbeb3a4f9c074",
+ "IPY_MODEL_18101aa88c124c91a6f91cc00183c140"
+ ],
+ "layout": "IPY_MODEL_4dbc376168444a1892e6565048dbbee8"
+ }
+ },
+ "34ed45155a0c406ab3eeb358ffa1f23d": {
+ "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_8fc34bda9bc2434f86434bfc996003d0",
+ "placeholder": "",
+ "style": "IPY_MODEL_ef7fa97a2caa4be2856c9b1c799e0e01",
+ "value": "Downloading (…)solve/main/vocab.txt: 100%"
+ }
+ },
+ "9ef7f690f9394e0e871cbeb3a4f9c074": {
+ "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_6ef574e796474fd9b816adfdf2996e69",
+ "max": 248477,
+ "min": 0,
+ "orientation": "horizontal",
+ "style": "IPY_MODEL_e7afa624c3b448abb9d97dcc19bd79bc",
+ "value": 248477
+ }
+ },
+ "18101aa88c124c91a6f91cc00183c140": {
+ "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_e8ee348b8a1641638a7896b0a7826941",
+ "placeholder": "",
+ "style": "IPY_MODEL_f1375674453847fb9beb80694d5053b5",
+ "value": " 248k/248k [00:00<00:00, 7.07MB/s]"
+ }
+ },
+ "4dbc376168444a1892e6565048dbbee8": {
+ "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
+ }
+ },
+ "8fc34bda9bc2434f86434bfc996003d0": {
+ "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
+ }
+ },
+ "ef7fa97a2caa4be2856c9b1c799e0e01": {
+ "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": ""
+ }
+ },
+ "6ef574e796474fd9b816adfdf2996e69": {
+ "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
+ }
+ },
+ "e7afa624c3b448abb9d97dcc19bd79bc": {
+ "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": ""
+ }
+ },
+ "e8ee348b8a1641638a7896b0a7826941": {
+ "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
+ }
+ },
+ "f1375674453847fb9beb80694d5053b5": {
+ "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": ""
+ }
+ },
+ "4577e5b3ae014e78a9df350a272ea0c8": {
+ "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_e97b6d15983d444cb9b0d9c106a98fe7",
+ "IPY_MODEL_62ca38c626d94edda3440566412b8c6b",
+ "IPY_MODEL_8f7ab930d07443529e0540155e2a186b"
+ ],
+ "layout": "IPY_MODEL_8980fbe163c44cf48bf452364a1f5012"
+ }
+ },
+ "e97b6d15983d444cb9b0d9c106a98fe7": {
+ "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_8b73e58bb16b494982366382dd47ba5e",
+ "placeholder": "",
+ "style": "IPY_MODEL_96bf1f55d9474b62ba634fe04db459c3",
+ "value": "Downloading (…)/main/tokenizer.json: 100%"
+ }
+ },
+ "62ca38c626d94edda3440566412b8c6b": {
+ "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_ccd9a614a299432bbe24b667f27f9079",
+ "max": 751504,
+ "min": 0,
+ "orientation": "horizontal",
+ "style": "IPY_MODEL_90b4a14f201d4681b53dc85911eae8cd",
+ "value": 751504
+ }
+ },
+ "8f7ab930d07443529e0540155e2a186b": {
+ "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_e52278d4919048e8895035bab37bdc40",
+ "placeholder": "",
+ "style": "IPY_MODEL_6b41100258e64ea19c614133aa6c8d00",
+ "value": " 752k/752k [00:00<00:00, 12.5MB/s]"
+ }
+ },
+ "8980fbe163c44cf48bf452364a1f5012": {
+ "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
+ }
+ },
+ "8b73e58bb16b494982366382dd47ba5e": {
+ "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
+ }
+ },
+ "96bf1f55d9474b62ba634fe04db459c3": {
+ "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": ""
+ }
+ },
+ "ccd9a614a299432bbe24b667f27f9079": {
+ "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
+ }
+ },
+ "90b4a14f201d4681b53dc85911eae8cd": {
+ "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": ""
+ }
+ },
+ "e52278d4919048e8895035bab37bdc40": {
+ "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
+ }
+ },
+ "6b41100258e64ea19c614133aa6c8d00": {
+ "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": ""
+ }
+ },
+ "0088a0b55b49413bb142546deec7a230": {
+ "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_eb9d9f98cad241ad81a1f54c769cd1bd",
+ "IPY_MODEL_cb37af934f734aea9b7cfcaecb2d7f08",
+ "IPY_MODEL_8564f07f1a814676be264bbde286da82"
+ ],
+ "layout": "IPY_MODEL_4604dfa3b73444d388ba16a9ef55ac78"
+ }
+ },
+ "eb9d9f98cad241ad81a1f54c769cd1bd": {
+ "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_42d6092eed3d418fa2d8ac12dafcb2bd",
+ "placeholder": "",
+ "style": "IPY_MODEL_53f953c1cd2f4924a055409227dc3e7a",
+ "value": "Downloading (…)cial_tokens_map.json: 100%"
+ }
+ },
+ "cb37af934f734aea9b7cfcaecb2d7f08": {
+ "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_caa145c4ec574bd1aae875bf19a680f3",
+ "max": 173,
+ "min": 0,
+ "orientation": "horizontal",
+ "style": "IPY_MODEL_6f50fce310c143af967cd6bf74c7bb49",
+ "value": 173
+ }
+ },
+ "8564f07f1a814676be264bbde286da82": {
+ "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_c0393d413ebb45489d1e20b45b150f6f",
+ "placeholder": "",
+ "style": "IPY_MODEL_80925dfdc6af4bb08ce1d8b3b1afacf7",
+ "value": " 173/173 [00:00<00:00, 5.94kB/s]"
+ }
+ },
+ "4604dfa3b73444d388ba16a9ef55ac78": {
+ "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
+ }
+ },
+ "42d6092eed3d418fa2d8ac12dafcb2bd": {
+ "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
+ }
+ },
+ "53f953c1cd2f4924a055409227dc3e7a": {
+ "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": ""
+ }
+ },
+ "caa145c4ec574bd1aae875bf19a680f3": {
+ "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
+ }
+ },
+ "6f50fce310c143af967cd6bf74c7bb49": {
+ "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": ""
+ }
+ },
+ "c0393d413ebb45489d1e20b45b150f6f": {
+ "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
+ }
+ },
+ "80925dfdc6af4bb08ce1d8b3b1afacf7": {
+ "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": ""
+ }
+ },
+ "e58cac3a40634e6d81d55477df36de85": {
+ "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_9cf89a3e788c487ab4f53292763f1dc8",
+ "IPY_MODEL_bf512cc764e14c9596bebe8d02cb0786",
+ "IPY_MODEL_b04082a3db8a474b825c965d531c0954"
+ ],
+ "layout": "IPY_MODEL_0df5705875c6427ab4423a14acee87ef"
+ }
+ },
+ "9cf89a3e788c487ab4f53292763f1dc8": {
+ "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_04ed1e744cb44d2ebb61eaa0584b5298",
+ "placeholder": "",
+ "style": "IPY_MODEL_80069a4370cb401c80121dba364391aa",
+ "value": "Downloading (…)okenizer_config.json: 100%"
+ }
+ },
+ "bf512cc764e14c9596bebe8d02cb0786": {
+ "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_74fe7e6409c049cdb18ca24fe9f1d621",
+ "max": 375,
+ "min": 0,
+ "orientation": "horizontal",
+ "style": "IPY_MODEL_2d387d8f89264abfb93eb014db2f191a",
+ "value": 375
+ }
+ },
+ "b04082a3db8a474b825c965d531c0954": {
+ "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_40fedaebe5cd485284d654117a5294da",
+ "placeholder": "",
+ "style": "IPY_MODEL_8663e0e8ca694482bd6b09a5428ad728",
+ "value": " 375/375 [00:00<00:00, 12.9kB/s]"
+ }
+ },
+ "0df5705875c6427ab4423a14acee87ef": {
+ "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
+ }
+ },
+ "04ed1e744cb44d2ebb61eaa0584b5298": {
+ "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
+ }
+ },
+ "80069a4370cb401c80121dba364391aa": {
+ "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": ""
+ }
+ },
+ "74fe7e6409c049cdb18ca24fe9f1d621": {
+ "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
+ }
+ },
+ "2d387d8f89264abfb93eb014db2f191a": {
+ "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": ""
+ }
+ },
+ "40fedaebe5cd485284d654117a5294da": {
+ "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
+ }
+ },
+ "8663e0e8ca694482bd6b09a5428ad728": {
+ "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": ""
+ }
+ },
+ "b0bc95f5472e4531b29fe33b09a4d36c": {
+ "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_720c88fe32da498d94f05551b7da1cac",
+ "IPY_MODEL_ef804c95503541a9b39ac3a8511e7e85",
+ "IPY_MODEL_c888c88074ab4fd48b68a3aee8e9fd22"
+ ],
+ "layout": "IPY_MODEL_e0173bd95c4941c1a77760e6a0a4ca54"
+ }
+ },
+ "720c88fe32da498d94f05551b7da1cac": {
+ "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_14ccf32079a142f89dc1c98437c7c171",
+ "placeholder": "",
+ "style": "IPY_MODEL_1020f0d261ac4b67bf013339849de275",
+ "value": "Downloading (…)solve/main/vocab.txt: 100%"
+ }
+ },
+ "ef804c95503541a9b39ac3a8511e7e85": {
+ "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_a8df45aea3864ee685d5e7a2bc90089c",
+ "max": 248477,
+ "min": 0,
+ "orientation": "horizontal",
+ "style": "IPY_MODEL_33753b59355e449c9fb0309e63b31b0f",
+ "value": 248477
+ }
+ },
+ "c888c88074ab4fd48b68a3aee8e9fd22": {
+ "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_44caee2e2d814520b728f415225590fd",
+ "placeholder": "",
+ "style": "IPY_MODEL_d1866ceaf58a469d8bfaa43b768a365a",
+ "value": " 248k/248k [00:00<00:00, 4.13MB/s]"
+ }
+ },
+ "e0173bd95c4941c1a77760e6a0a4ca54": {
+ "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
+ }
+ },
+ "14ccf32079a142f89dc1c98437c7c171": {
+ "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
+ }
+ },
+ "1020f0d261ac4b67bf013339849de275": {
+ "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": ""
+ }
+ },
+ "a8df45aea3864ee685d5e7a2bc90089c": {
+ "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
+ }
+ },
+ "33753b59355e449c9fb0309e63b31b0f": {
+ "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": ""
+ }
+ },
+ "44caee2e2d814520b728f415225590fd": {
+ "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
+ }
+ },
+ "d1866ceaf58a469d8bfaa43b768a365a": {
+ "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": ""
+ }
+ },
+ "8288953050cf4a87b3db5d8fdbe67d9b": {
+ "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_d73fc41b72de468196d84f3c8b3c0200",
+ "IPY_MODEL_b41543c9d8c649ee9f64e50b11c6ae14",
+ "IPY_MODEL_b1ae87f9375b4132897fc7b837b28fbd"
+ ],
+ "layout": "IPY_MODEL_a6bd3e27f5cd4453957abe5a590b16cf"
+ }
+ },
+ "d73fc41b72de468196d84f3c8b3c0200": {
+ "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_960cc22366f2464388d255a6486bd10e",
+ "placeholder": "",
+ "style": "IPY_MODEL_7838f14b7ba64452a397a05f556f25f5",
+ "value": "Downloading (…)/main/tokenizer.json: 100%"
+ }
+ },
+ "b41543c9d8c649ee9f64e50b11c6ae14": {
+ "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_b0df16ca17be4620b30338a178986a9b",
+ "max": 751504,
+ "min": 0,
+ "orientation": "horizontal",
+ "style": "IPY_MODEL_0257b66188b647ac9e2dc410a2886bca",
+ "value": 751504
+ }
+ },
+ "b1ae87f9375b4132897fc7b837b28fbd": {
+ "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_4ab6e6f31da645c5907a6bba7fb1123b",
+ "placeholder": "",
+ "style": "IPY_MODEL_539c83d11d744635a73458baec674794",
+ "value": " 752k/752k [00:00<00:00, 5.54MB/s]"
+ }
+ },
+ "a6bd3e27f5cd4453957abe5a590b16cf": {
+ "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
+ }
+ },
+ "960cc22366f2464388d255a6486bd10e": {
+ "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
+ }
+ },
+ "7838f14b7ba64452a397a05f556f25f5": {
+ "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": ""
+ }
+ },
+ "b0df16ca17be4620b30338a178986a9b": {
+ "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
+ }
+ },
+ "0257b66188b647ac9e2dc410a2886bca": {
+ "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": ""
+ }
+ },
+ "4ab6e6f31da645c5907a6bba7fb1123b": {
+ "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
+ }
+ },
+ "539c83d11d744635a73458baec674794": {
+ "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": ""
+ }
+ },
+ "2a4b8cabad1c4bf29dfc11380b298dd0": {
+ "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_d7ab63d9b3544825b2dd9ca4e9da8bc4",
+ "IPY_MODEL_53ffd0362e3541c5b37ed678c52de9bb",
+ "IPY_MODEL_1ee0027d989e4ac79b5bcb58be4a6861"
+ ],
+ "layout": "IPY_MODEL_385d38c30b0b43eca6e9087c8f940957"
+ }
+ },
+ "d7ab63d9b3544825b2dd9ca4e9da8bc4": {
+ "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_c048e4fb18ea4a5eb6b9ffaf15e41ac0",
+ "placeholder": "",
+ "style": "IPY_MODEL_6e4271d504e0489ebef9922e4c17469f",
+ "value": "Downloading (…)cial_tokens_map.json: 100%"
+ }
+ },
+ "53ffd0362e3541c5b37ed678c52de9bb": {
+ "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_b1fad86df4454c9d99b808166cfdf279",
+ "max": 173,
+ "min": 0,
+ "orientation": "horizontal",
+ "style": "IPY_MODEL_5ad0767da8db47f7b9badf288ac734f9",
+ "value": 173
+ }
+ },
+ "1ee0027d989e4ac79b5bcb58be4a6861": {
+ "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_4b05bc71e79c4a39a0df48db1c81080a",
+ "placeholder": "",
+ "style": "IPY_MODEL_f80feafed211460f91fa43ca7e875190",
+ "value": " 173/173 [00:00<00:00, 7.63kB/s]"
+ }
+ },
+ "385d38c30b0b43eca6e9087c8f940957": {
+ "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
+ }
+ },
+ "c048e4fb18ea4a5eb6b9ffaf15e41ac0": {
+ "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
+ }
+ },
+ "6e4271d504e0489ebef9922e4c17469f": {
+ "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": ""
+ }
+ },
+ "b1fad86df4454c9d99b808166cfdf279": {
+ "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
+ }
+ },
+ "5ad0767da8db47f7b9badf288ac734f9": {
+ "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": ""
+ }
+ },
+ "4b05bc71e79c4a39a0df48db1c81080a": {
+ "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
+ }
+ },
+ "f80feafed211460f91fa43ca7e875190": {
+ "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": ""
+ }
+ },
+ "6e85f86433f74ae88bb45a17a51c69b5": {
+ "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_711fed0039c04bb0a727d8153a7f67a4",
+ "IPY_MODEL_733626879544456cbc72fd6dc9f8d856",
+ "IPY_MODEL_a203e8286e094b2e89e1d35877999f75"
+ ],
+ "layout": "IPY_MODEL_4f05871c1a424f929a349d48c9c51bd4"
+ }
+ },
+ "711fed0039c04bb0a727d8153a7f67a4": {
+ "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_b1c758d8f64045ec89f2ec64028b7a7f",
+ "placeholder": "",
+ "style": "IPY_MODEL_00680b63bf464d17a6dd6a3077fb986f",
+ "value": "Downloading (…)okenizer_config.json: 100%"
+ }
+ },
+ "733626879544456cbc72fd6dc9f8d856": {
+ "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_570b8de9ad53403f805c559e4f9592bc",
+ "max": 375,
+ "min": 0,
+ "orientation": "horizontal",
+ "style": "IPY_MODEL_75fc6ac62ebf4477a1873e74b72591a1",
+ "value": 375
+ }
+ },
+ "a203e8286e094b2e89e1d35877999f75": {
+ "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_8ab3f4504d9b45ada6f4c192092d969d",
+ "placeholder": "",
+ "style": "IPY_MODEL_b20c18308e914f50bc6f27da41a5fc10",
+ "value": " 375/375 [00:00<00:00, 12.7kB/s]"
+ }
+ },
+ "4f05871c1a424f929a349d48c9c51bd4": {
+ "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
+ }
+ },
+ "b1c758d8f64045ec89f2ec64028b7a7f": {
+ "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
+ }
+ },
+ "00680b63bf464d17a6dd6a3077fb986f": {
+ "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": ""
+ }
+ },
+ "570b8de9ad53403f805c559e4f9592bc": {
+ "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
+ }
+ },
+ "75fc6ac62ebf4477a1873e74b72591a1": {
+ "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": ""
+ }
+ },
+ "8ab3f4504d9b45ada6f4c192092d969d": {
+ "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
+ }
+ },
+ "b20c18308e914f50bc6f27da41a5fc10": {
+ "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": ""
+ }
+ },
+ "65d914265588433589ab59433a9f37f1": {
+ "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_281efada42e34f0cbdb256e07b5cf3eb",
+ "IPY_MODEL_294f93e6bebc4dbdad817f901574944f",
+ "IPY_MODEL_fba61f3da3ea4cfcb57175fd35bd8ef5"
+ ],
+ "layout": "IPY_MODEL_40021a9175da4e528babf528edd41f14"
+ }
+ },
+ "281efada42e34f0cbdb256e07b5cf3eb": {
+ "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_0eb4f7c4b5904be48c69cf3ac4c1122c",
+ "placeholder": "",
+ "style": "IPY_MODEL_00410518ae984713b0f2c9540bdd2789",
+ "value": "Downloading (…)solve/main/vocab.txt: 100%"
+ }
+ },
+ "294f93e6bebc4dbdad817f901574944f": {
+ "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_b3c662c827c64b09849acd63838583f8",
+ "max": 248477,
+ "min": 0,
+ "orientation": "horizontal",
+ "style": "IPY_MODEL_e7698d59fd404a4785b5cd616703b968",
+ "value": 248477
+ }
+ },
+ "fba61f3da3ea4cfcb57175fd35bd8ef5": {
+ "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_f1c6d510bfa140c48159b839e8673ea5",
+ "placeholder": "",
+ "style": "IPY_MODEL_149bb646b6fb46138fc60c9c041f872f",
+ "value": " 248k/248k [00:00<00:00, 3.40MB/s]"
+ }
+ },
+ "40021a9175da4e528babf528edd41f14": {
+ "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
+ }
+ },
+ "0eb4f7c4b5904be48c69cf3ac4c1122c": {
+ "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
+ }
+ },
+ "00410518ae984713b0f2c9540bdd2789": {
+ "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": ""
+ }
+ },
+ "b3c662c827c64b09849acd63838583f8": {
+ "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
+ }
+ },
+ "e7698d59fd404a4785b5cd616703b968": {
+ "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": ""
+ }
+ },
+ "f1c6d510bfa140c48159b839e8673ea5": {
+ "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
+ }
+ },
+ "149bb646b6fb46138fc60c9c041f872f": {
+ "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": ""
+ }
+ },
+ "a9d9485a697642089f3d8ca18301b8a3": {
+ "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_9a68253e718a496096b1ff68488f1e5c",
+ "IPY_MODEL_9c1c3f3918ae4c6fad369a507f7263ed",
+ "IPY_MODEL_6db1f76443374653b9f07c7fa97c2541"
+ ],
+ "layout": "IPY_MODEL_8fd5173aa11c43e1a43550c31ef6115e"
+ }
+ },
+ "9a68253e718a496096b1ff68488f1e5c": {
+ "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_a2bba57856554a7b9d27cffc0be0d8cb",
+ "placeholder": "",
+ "style": "IPY_MODEL_d831d42338754b2fb27410f1b68c4bef",
+ "value": "Downloading (…)/main/tokenizer.json: 100%"
+ }
+ },
+ "9c1c3f3918ae4c6fad369a507f7263ed": {
+ "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_a4efeb8660214bd08f8b56880a9d7366",
+ "max": 751504,
+ "min": 0,
+ "orientation": "horizontal",
+ "style": "IPY_MODEL_e0eff06d626b4d45acba52aa4a888e34",
+ "value": 751504
+ }
+ },
+ "6db1f76443374653b9f07c7fa97c2541": {
+ "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_dfe44a5da1484f83a11e0b2c649671a7",
+ "placeholder": "",
+ "style": "IPY_MODEL_21bf9ae5622241e38969c57b1d638a09",
+ "value": " 752k/752k [00:00<00:00, 2.00MB/s]"
+ }
+ },
+ "8fd5173aa11c43e1a43550c31ef6115e": {
+ "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
+ }
+ },
+ "a2bba57856554a7b9d27cffc0be0d8cb": {
+ "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
+ }
+ },
+ "d831d42338754b2fb27410f1b68c4bef": {
+ "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": ""
+ }
+ },
+ "a4efeb8660214bd08f8b56880a9d7366": {
+ "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
+ }
+ },
+ "e0eff06d626b4d45acba52aa4a888e34": {
+ "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": ""
+ }
+ },
+ "dfe44a5da1484f83a11e0b2c649671a7": {
+ "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
+ }
+ },
+ "21bf9ae5622241e38969c57b1d638a09": {
+ "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": ""
+ }
+ },
+ "8b7c743043ec4c208efcb10777ca8d7b": {
+ "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_fd765d0dbfe541cb9507b0b079c967c4",
+ "IPY_MODEL_2bf17eee97e9415b91bf4f65ff96ebe0",
+ "IPY_MODEL_46ac8b7079c544098fa4724dc74532ba"
+ ],
+ "layout": "IPY_MODEL_b5affe7fde7149298cbffbbc8ba74c1b"
+ }
+ },
+ "fd765d0dbfe541cb9507b0b079c967c4": {
+ "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_79e101bb06b040ee879d39335a3dad46",
+ "placeholder": "",
+ "style": "IPY_MODEL_f49037c4d405436584f573e226214e14",
+ "value": "Downloading (…)cial_tokens_map.json: 100%"
+ }
+ },
+ "2bf17eee97e9415b91bf4f65ff96ebe0": {
+ "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_fbce263c1b0c4096bade0a8c2c365fc9",
+ "max": 173,
+ "min": 0,
+ "orientation": "horizontal",
+ "style": "IPY_MODEL_6e8b1f658adb4cfd8c44d1e1f7654f21",
+ "value": 173
+ }
+ },
+ "46ac8b7079c544098fa4724dc74532ba": {
+ "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_f5fc3218202244179ec7d005bc4b079b",
+ "placeholder": "",
+ "style": "IPY_MODEL_a127875ffe704645bfabfb6303c498c9",
+ "value": " 173/173 [00:00<00:00, 6.26kB/s]"
+ }
+ },
+ "b5affe7fde7149298cbffbbc8ba74c1b": {
+ "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
+ }
+ },
+ "79e101bb06b040ee879d39335a3dad46": {
+ "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
+ }
+ },
+ "f49037c4d405436584f573e226214e14": {
+ "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": ""
+ }
+ },
+ "fbce263c1b0c4096bade0a8c2c365fc9": {
+ "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
+ }
+ },
+ "6e8b1f658adb4cfd8c44d1e1f7654f21": {
+ "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": ""
+ }
+ },
+ "f5fc3218202244179ec7d005bc4b079b": {
+ "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
+ }
+ },
+ "a127875ffe704645bfabfb6303c498c9": {
+ "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": ""
+ }
+ },
+ "9e4ff39cf7eb4cf8afc22d53a2f30f01": {
+ "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_943bf4dd97ee4766a1e97572bceeb408",
+ "IPY_MODEL_35d501bb7f104d5a96dc4697b7964fcc",
+ "IPY_MODEL_c9f41bef5b1d4d6a83e895fbf27c297f"
+ ],
+ "layout": "IPY_MODEL_2c4de5c9b6ab4eae94792d896ccc1e64"
+ }
+ },
+ "943bf4dd97ee4766a1e97572bceeb408": {
+ "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_6b112b5d8c8b45e5abf49d8003f2844e",
+ "placeholder": "",
+ "style": "IPY_MODEL_24183aecc7604328a686246ad722561b",
+ "value": "Downloading (…)lve/main/config.json: 100%"
+ }
+ },
+ "35d501bb7f104d5a96dc4697b7964fcc": {
+ "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_4b53c4d8c3054a7fa22e0c8c414c282b",
+ "max": 616,
+ "min": 0,
+ "orientation": "horizontal",
+ "style": "IPY_MODEL_ae84b73ce2db42ca92c5d47010226088",
+ "value": 616
+ }
+ },
+ "c9f41bef5b1d4d6a83e895fbf27c297f": {
+ "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_0893ae402bc540d2ad22edaf02281d15",
+ "placeholder": "",
+ "style": "IPY_MODEL_e662dcebe976458f9e82d9283e5a6bf8",
+ "value": " 616/616 [00:00<00:00, 31.4kB/s]"
+ }
+ },
+ "2c4de5c9b6ab4eae94792d896ccc1e64": {
+ "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
+ }
+ },
+ "6b112b5d8c8b45e5abf49d8003f2844e": {
+ "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
+ }
+ },
+ "24183aecc7604328a686246ad722561b": {
+ "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": ""
+ }
+ },
+ "4b53c4d8c3054a7fa22e0c8c414c282b": {
+ "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
+ }
+ },
+ "ae84b73ce2db42ca92c5d47010226088": {
+ "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": ""
+ }
+ },
+ "0893ae402bc540d2ad22edaf02281d15": {
+ "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
+ }
+ },
+ "e662dcebe976458f9e82d9283e5a6bf8": {
+ "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": ""
+ }
+ },
+ "72bb231a18cd420b98d68ff20c6e9ba3": {
+ "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_e5deaa84a9b54853a608c6ef84785695",
+ "IPY_MODEL_7a7da9562c06465f84c7c13e989c4567",
+ "IPY_MODEL_9f382345dca24290a4b30ccf7725ae4a"
+ ],
+ "layout": "IPY_MODEL_f404624183054a4da60b875fa2cd11e4"
+ }
+ },
+ "e5deaa84a9b54853a608c6ef84785695": {
+ "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_e16f0923b5214cffa01b4abe44207f01",
+ "placeholder": "",
+ "style": "IPY_MODEL_b38a270cb89b4bf9a0bbe6431285184d",
+ "value": "Downloading (…)tencepiece.bpe.model: 100%"
+ }
+ },
+ "7a7da9562c06465f84c7c13e989c4567": {
+ "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_e080c28dad4d4d81ac57b91a465e33e1",
+ "max": 5069051,
+ "min": 0,
+ "orientation": "horizontal",
+ "style": "IPY_MODEL_c87f2163fa1e45218bf4f0c16cc131b6",
+ "value": 5069051
+ }
+ },
+ "9f382345dca24290a4b30ccf7725ae4a": {
+ "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_e7c84a7f482449efa673cbaa1827fc59",
+ "placeholder": "",
+ "style": "IPY_MODEL_7887928960044ffca14abe437467c206",
+ "value": " 5.07M/5.07M [00:00<00:00, 11.2MB/s]"
+ }
+ },
+ "f404624183054a4da60b875fa2cd11e4": {
+ "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
+ }
+ },
+ "e16f0923b5214cffa01b4abe44207f01": {
+ "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
+ }
+ },
+ "b38a270cb89b4bf9a0bbe6431285184d": {
+ "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": ""
+ }
+ },
+ "e080c28dad4d4d81ac57b91a465e33e1": {
+ "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
+ }
+ },
+ "c87f2163fa1e45218bf4f0c16cc131b6": {
+ "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": ""
+ }
+ },
+ "e7c84a7f482449efa673cbaa1827fc59": {
+ "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
+ }
+ },
+ "7887928960044ffca14abe437467c206": {
+ "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": ""
+ }
+ },
+ "8e3cfc5e197e451fa3aa9d231dda52a1": {
+ "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_7f043eae39594350bfa59c71ff90430e",
+ "IPY_MODEL_9eb7d4cc7817421e970617eef8538652",
+ "IPY_MODEL_37d11178fcc1451191a2e8d41130746e"
+ ],
+ "layout": "IPY_MODEL_618d8b9d899540429bafb1bbc5750e76"
+ }
+ },
+ "7f043eae39594350bfa59c71ff90430e": {
+ "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_6948e1f520cd486fa4a72214e1e07093",
+ "placeholder": "",
+ "style": "IPY_MODEL_6822647c69784bc988a3e8354457219c",
+ "value": "Downloading (…)/main/tokenizer.json: 100%"
+ }
+ },
+ "9eb7d4cc7817421e970617eef8538652": {
+ "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_3b5ca4c4e8f54a28a762b7cc9af2adb0",
+ "max": 9096718,
+ "min": 0,
+ "orientation": "horizontal",
+ "style": "IPY_MODEL_e58e9e2839cf4572abd06e1e96ae55bd",
+ "value": 9096718
+ }
+ },
+ "37d11178fcc1451191a2e8d41130746e": {
+ "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_dd375cd60ac54434b3ef78f4fd15c437",
+ "placeholder": "",
+ "style": "IPY_MODEL_19b20f738e03483ba062ff4a3cb3b578",
+ "value": " 9.10M/9.10M [00:00<00:00, 16.2MB/s]"
+ }
+ },
+ "618d8b9d899540429bafb1bbc5750e76": {
+ "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
+ }
+ },
+ "6948e1f520cd486fa4a72214e1e07093": {
+ "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
+ }
+ },
+ "6822647c69784bc988a3e8354457219c": {
+ "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": ""
+ }
+ },
+ "3b5ca4c4e8f54a28a762b7cc9af2adb0": {
+ "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
+ }
+ },
+ "e58e9e2839cf4572abd06e1e96ae55bd": {
+ "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": ""
+ }
+ },
+ "dd375cd60ac54434b3ef78f4fd15c437": {
+ "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
+ }
+ },
+ "19b20f738e03483ba062ff4a3cb3b578": {
+ "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": ""
+ }
+ },
+ "ce3a3b4238344f8c8898ce22a13bcddc": {
+ "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_53a37b6c7dbf43cdb0b426a209bc9a7d",
+ "IPY_MODEL_d4ecf0ec7dab46a2925a31261d830444",
+ "IPY_MODEL_636206c306b24596b7caf1980be4ec47"
+ ],
+ "layout": "IPY_MODEL_b503f438dcc94a2c8e4feb11bdec53be"
+ }
+ },
+ "53a37b6c7dbf43cdb0b426a209bc9a7d": {
+ "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_0d6a1d5e3a3c43b4aad257b0c2df3114",
+ "placeholder": "",
+ "style": "IPY_MODEL_36cde43ac29244569819ce5d2a2fa955",
+ "value": "Downloading (…)okenizer_config.json: 100%"
+ }
+ },
+ "d4ecf0ec7dab46a2925a31261d830444": {
+ "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_900a95dc077c4d64a19383c8553721c1",
+ "max": 28,
+ "min": 0,
+ "orientation": "horizontal",
+ "style": "IPY_MODEL_9a6a9bffd81f44ce932460f13e303ad4",
+ "value": 28
+ }
+ },
+ "636206c306b24596b7caf1980be4ec47": {
+ "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_d44e289145ec42aca4e376d8cf5e6e8a",
+ "placeholder": "",
+ "style": "IPY_MODEL_73e79d9e0abe4dc2ad638ef0aeaec68b",
+ "value": " 28.0/28.0 [00:00<00:00, 971B/s]"
+ }
+ },
+ "b503f438dcc94a2c8e4feb11bdec53be": {
+ "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
+ }
+ },
+ "0d6a1d5e3a3c43b4aad257b0c2df3114": {
+ "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
+ }
+ },
+ "36cde43ac29244569819ce5d2a2fa955": {
+ "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": ""
+ }
+ },
+ "900a95dc077c4d64a19383c8553721c1": {
+ "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
+ }
+ },
+ "9a6a9bffd81f44ce932460f13e303ad4": {
+ "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": ""
+ }
+ },
+ "d44e289145ec42aca4e376d8cf5e6e8a": {
+ "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
+ }
+ },
+ "73e79d9e0abe4dc2ad638ef0aeaec68b": {
+ "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": ""
+ }
+ },
+ "2622a3c4f8814c6a899982788435f702": {
+ "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_62f2fa1b9d7b449089de00623bb20a68",
+ "IPY_MODEL_748890444a154ef6a49698394c810f3c",
+ "IPY_MODEL_d0b9b80d61b84529b2e3b14f06d082b9"
+ ],
+ "layout": "IPY_MODEL_a08eeaeb49c54da5bcec3e369be00151"
+ }
+ },
+ "62f2fa1b9d7b449089de00623bb20a68": {
+ "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_a09cf480023349c9bec9daddade90e91",
+ "placeholder": "",
+ "style": "IPY_MODEL_447f80b186ed41d3a405b58494d3e410",
+ "value": "Downloading (…)lve/main/config.json: 100%"
+ }
+ },
+ "748890444a154ef6a49698394c810f3c": {
+ "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_debe3dda1c824088848d526d0d840e13",
+ "max": 625,
+ "min": 0,
+ "orientation": "horizontal",
+ "style": "IPY_MODEL_d535c1fc215a4e658fb4f485e87e3e46",
+ "value": 625
+ }
+ },
+ "d0b9b80d61b84529b2e3b14f06d082b9": {
+ "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_ce087aafeb084c37b1f2097cb041bfef",
+ "placeholder": "",
+ "style": "IPY_MODEL_3969d441f073405985cd0a1eadc92154",
+ "value": " 625/625 [00:00<00:00, 30.6kB/s]"
+ }
+ },
+ "a08eeaeb49c54da5bcec3e369be00151": {
+ "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
+ }
+ },
+ "a09cf480023349c9bec9daddade90e91": {
+ "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
+ }
+ },
+ "447f80b186ed41d3a405b58494d3e410": {
+ "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": ""
+ }
+ },
+ "debe3dda1c824088848d526d0d840e13": {
+ "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
+ }
+ },
+ "d535c1fc215a4e658fb4f485e87e3e46": {
+ "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": ""
+ }
+ },
+ "ce087aafeb084c37b1f2097cb041bfef": {
+ "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
+ }
+ },
+ "3969d441f073405985cd0a1eadc92154": {
+ "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": ""
+ }
+ },
+ "825255d506e749789af57bb5587b026b": {
+ "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_3fa6946a123f43f7ab05acb3ab7aeb14",
+ "IPY_MODEL_449d2a6116204739bd9d2ad32f976085",
+ "IPY_MODEL_054fe8d86d344304994d8ce70e0be7ac"
+ ],
+ "layout": "IPY_MODEL_c476cba899184c5c8885029d1a4f218a"
+ }
+ },
+ "3fa6946a123f43f7ab05acb3ab7aeb14": {
+ "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_9a078879844a4ef68226978173aa274e",
+ "placeholder": "",
+ "style": "IPY_MODEL_159607b8f0c1484da356a1b4faf5ada3",
+ "value": "Downloading (…)solve/main/vocab.txt: 100%"
+ }
+ },
+ "449d2a6116204739bd9d2ad32f976085": {
+ "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_ab5e5becdddb4cb8aa4a68ce5ff6d085",
+ "max": 871891,
+ "min": 0,
+ "orientation": "horizontal",
+ "style": "IPY_MODEL_b1e10471c905486e83fac3e1739a818e",
+ "value": 871891
+ }
+ },
+ "054fe8d86d344304994d8ce70e0be7ac": {
+ "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_26e0ea94e7374a6eb1797de01b43c291",
+ "placeholder": "",
+ "style": "IPY_MODEL_c75797202f8d461da2ad22934b430718",
+ "value": " 872k/872k [00:00<00:00, 23.3MB/s]"
+ }
+ },
+ "c476cba899184c5c8885029d1a4f218a": {
+ "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
+ }
+ },
+ "9a078879844a4ef68226978173aa274e": {
+ "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
+ }
+ },
+ "159607b8f0c1484da356a1b4faf5ada3": {
+ "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": ""
+ }
+ },
+ "ab5e5becdddb4cb8aa4a68ce5ff6d085": {
+ "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
+ }
+ },
+ "b1e10471c905486e83fac3e1739a818e": {
+ "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": ""
+ }
+ },
+ "26e0ea94e7374a6eb1797de01b43c291": {
+ "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
+ }
+ },
+ "c75797202f8d461da2ad22934b430718": {
+ "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": ""
+ }
+ },
+ "70dea0d82f05461cabe81830551c22da": {
+ "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_fd3dbe48d23f4aeca586d6dc24c94eaf",
+ "IPY_MODEL_bb961ba002ca446ba937c05c26bc677c",
+ "IPY_MODEL_b9f919a089054ab2a7faaf70cfab4baf"
+ ],
+ "layout": "IPY_MODEL_3a89823e13c342028df88106c5b803e4"
+ }
+ },
+ "fd3dbe48d23f4aeca586d6dc24c94eaf": {
+ "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_e51ecaad661a4634acbeb84e3dba0b7c",
+ "placeholder": "",
+ "style": "IPY_MODEL_d102602e099342ada758779502f153ed",
+ "value": "Downloading (…)/main/tokenizer.json: 100%"
+ }
+ },
+ "bb961ba002ca446ba937c05c26bc677c": {
+ "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_c8bc0f0f53de4364a6348ce583b9c73e",
+ "max": 1715180,
+ "min": 0,
+ "orientation": "horizontal",
+ "style": "IPY_MODEL_a0e199e803a94361b63bc2e4d26515c2",
+ "value": 1715180
+ }
+ },
+ "b9f919a089054ab2a7faaf70cfab4baf": {
+ "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_2afdfd4753dd45af95153ef1bedb7f5a",
+ "placeholder": "",
+ "style": "IPY_MODEL_9aac61202ab34d8086d458f30e3c8ef4",
+ "value": " 1.72M/1.72M [00:00<00:00, 35.7MB/s]"
+ }
+ },
+ "3a89823e13c342028df88106c5b803e4": {
+ "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
+ }
+ },
+ "e51ecaad661a4634acbeb84e3dba0b7c": {
+ "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
+ }
+ },
+ "d102602e099342ada758779502f153ed": {
+ "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": ""
+ }
+ },
+ "c8bc0f0f53de4364a6348ce583b9c73e": {
+ "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
+ }
+ },
+ "a0e199e803a94361b63bc2e4d26515c2": {
+ "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": ""
+ }
+ },
+ "2afdfd4753dd45af95153ef1bedb7f5a": {
+ "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
+ }
+ },
+ "9aac61202ab34d8086d458f30e3c8ef4": {
+ "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": ""
+ }
+ }
+ }
+ },
+ "accelerator": "GPU",
+ "gpuClass": "standard"
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
\ No newline at end of file
diff --git "a/\353\252\250\353\215\270\353\247\2013_\353\260\225\354\247\204\354\230\201_\354\275\224\353\223\234\354\210\230\354\240\225\353\263\270.ipynb" "b/\353\252\250\353\215\270\353\247\2013_\353\260\225\354\247\204\354\230\201_\354\275\224\353\223\234\354\210\230\354\240\225\353\263\270.ipynb"
new file mode 100644
index 0000000..daaf89b
--- /dev/null
+++ "b/\353\252\250\353\215\270\353\247\2013_\353\260\225\354\247\204\354\230\201_\354\275\224\353\223\234\354\210\230\354\240\225\353\263\270.ipynb"
@@ -0,0 +1,9351 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 0,
+ "metadata": {
+ "colab": {
+ "provenance": [],
+ "authorship_tag": "ABX9TyNTzlYFxKOvvQVBTsd3UISv",
+ "include_colab_link": true
+ },
+ "kernelspec": {
+ "name": "python3",
+ "display_name": "Python 3"
+ },
+ "language_info": {
+ "name": "python"
+ },
+ "accelerator": "GPU",
+ "gpuClass": "standard",
+ "widgets": {
+ "application/vnd.jupyter.widget-state+json": {
+ "f534bed4fe7448eb91578f67245ecac0": {
+ "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_d4a2359a15044033884b4313f9d1d778",
+ "IPY_MODEL_bbaf30af30ef4d189ed4ab329af1d3e1",
+ "IPY_MODEL_322f25b0c08449c78112c4fd752077d6"
+ ],
+ "layout": "IPY_MODEL_8d191cda699440f18333e6c25ce71b7b"
+ }
+ },
+ "d4a2359a15044033884b4313f9d1d778": {
+ "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_b01efc3853224067a3584eb63d0bc97e",
+ "placeholder": "",
+ "style": "IPY_MODEL_372ded0a98fd4d8783173078d7f24414",
+ "value": "Downloading (…)okenizer_config.json: 100%"
+ }
+ },
+ "bbaf30af30ef4d189ed4ab329af1d3e1": {
+ "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_19aec36478e0404d8ba498e8fc8a1120",
+ "max": 375,
+ "min": 0,
+ "orientation": "horizontal",
+ "style": "IPY_MODEL_e919abc447004aa49fd6e1f869f2ed8f",
+ "value": 375
+ }
+ },
+ "322f25b0c08449c78112c4fd752077d6": {
+ "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_303ad95a73474fbfa05b7e660b71e40c",
+ "placeholder": "",
+ "style": "IPY_MODEL_21db930fea3a4b40bcf1d63a7e854f7d",
+ "value": " 375/375 [00:00<00:00, 14.6kB/s]"
+ }
+ },
+ "8d191cda699440f18333e6c25ce71b7b": {
+ "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
+ }
+ },
+ "b01efc3853224067a3584eb63d0bc97e": {
+ "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
+ }
+ },
+ "372ded0a98fd4d8783173078d7f24414": {
+ "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": ""
+ }
+ },
+ "19aec36478e0404d8ba498e8fc8a1120": {
+ "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
+ }
+ },
+ "e919abc447004aa49fd6e1f869f2ed8f": {
+ "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": ""
+ }
+ },
+ "303ad95a73474fbfa05b7e660b71e40c": {
+ "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
+ }
+ },
+ "21db930fea3a4b40bcf1d63a7e854f7d": {
+ "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": ""
+ }
+ },
+ "390b2fcd657341a79ecfd256645f73e1": {
+ "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_fdcda5462b2143e884483b74dd1b2178",
+ "IPY_MODEL_3b2c7b6fdc7d4ea99c32b423da1bd1da",
+ "IPY_MODEL_92ecd0701a22436a830b175113593802"
+ ],
+ "layout": "IPY_MODEL_4a3f750bdac0421fa08d78c690125efe"
+ }
+ },
+ "fdcda5462b2143e884483b74dd1b2178": {
+ "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_c9ea6efce01f4ab6ba7a0f885dd800f3",
+ "placeholder": "",
+ "style": "IPY_MODEL_da93d0796c4a4399bdb04ef59a95e64a",
+ "value": "Downloading (…)solve/main/vocab.txt: 100%"
+ }
+ },
+ "3b2c7b6fdc7d4ea99c32b423da1bd1da": {
+ "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_fa1f641602514df9bde52d48d128b217",
+ "max": 248477,
+ "min": 0,
+ "orientation": "horizontal",
+ "style": "IPY_MODEL_8a038ad0cc6d4d2ab85d26873850fa07",
+ "value": 248477
+ }
+ },
+ "92ecd0701a22436a830b175113593802": {
+ "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_422ccb4667344e4e97ef42d934b6a1e1",
+ "placeholder": "",
+ "style": "IPY_MODEL_f7ba9115ee924ef9a4f0899c0dca7d4a",
+ "value": " 248k/248k [00:00<00:00, 396kB/s]"
+ }
+ },
+ "4a3f750bdac0421fa08d78c690125efe": {
+ "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
+ }
+ },
+ "c9ea6efce01f4ab6ba7a0f885dd800f3": {
+ "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
+ }
+ },
+ "da93d0796c4a4399bdb04ef59a95e64a": {
+ "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": ""
+ }
+ },
+ "fa1f641602514df9bde52d48d128b217": {
+ "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
+ }
+ },
+ "8a038ad0cc6d4d2ab85d26873850fa07": {
+ "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": ""
+ }
+ },
+ "422ccb4667344e4e97ef42d934b6a1e1": {
+ "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
+ }
+ },
+ "f7ba9115ee924ef9a4f0899c0dca7d4a": {
+ "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": ""
+ }
+ },
+ "1f715fa597de44a2901233ac30bb1fc7": {
+ "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_8d2ef0665fd248f28da08d0732c75af6",
+ "IPY_MODEL_6db878b2c84e41cf8a699dea906108df",
+ "IPY_MODEL_b98abcc25ec24032931a83091b34b19b"
+ ],
+ "layout": "IPY_MODEL_1f397aa7f5f444c2bfbe68a7cdb868da"
+ }
+ },
+ "8d2ef0665fd248f28da08d0732c75af6": {
+ "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_69cd57825814465d94ce332a98b4df19",
+ "placeholder": "",
+ "style": "IPY_MODEL_8f92a913526740078249fa0cca8a6663",
+ "value": "Downloading (…)/main/tokenizer.json: 100%"
+ }
+ },
+ "6db878b2c84e41cf8a699dea906108df": {
+ "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_897bfc44e06d4ed5a6501692b69f16b8",
+ "max": 751504,
+ "min": 0,
+ "orientation": "horizontal",
+ "style": "IPY_MODEL_b923d69cdb6e485db6ac7f3d055a70fb",
+ "value": 751504
+ }
+ },
+ "b98abcc25ec24032931a83091b34b19b": {
+ "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_b47f6eb794384c00b6a7968e7a27a485",
+ "placeholder": "",
+ "style": "IPY_MODEL_3fef3b41b8a645269a1de3d3889044e1",
+ "value": " 752k/752k [00:00<00:00, 886kB/s]"
+ }
+ },
+ "1f397aa7f5f444c2bfbe68a7cdb868da": {
+ "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
+ }
+ },
+ "69cd57825814465d94ce332a98b4df19": {
+ "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
+ }
+ },
+ "8f92a913526740078249fa0cca8a6663": {
+ "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": ""
+ }
+ },
+ "897bfc44e06d4ed5a6501692b69f16b8": {
+ "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
+ }
+ },
+ "b923d69cdb6e485db6ac7f3d055a70fb": {
+ "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": ""
+ }
+ },
+ "b47f6eb794384c00b6a7968e7a27a485": {
+ "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
+ }
+ },
+ "3fef3b41b8a645269a1de3d3889044e1": {
+ "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": ""
+ }
+ },
+ "e7dc43c222ac4262aa0fd57f6d931a9e": {
+ "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_3bd178a4f5d74aef8507a37bff6c47c9",
+ "IPY_MODEL_fc6f190d3d51445a833748784c696cdd",
+ "IPY_MODEL_ab1b1102c9eb4702a1121dd5d48c2323"
+ ],
+ "layout": "IPY_MODEL_fb9ac1c4c4054a44b068346d59ba288c"
+ }
+ },
+ "3bd178a4f5d74aef8507a37bff6c47c9": {
+ "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_ee68720b95ff44c4b1d67e3c83eda925",
+ "placeholder": "",
+ "style": "IPY_MODEL_eefa3cd6233d432bb55792d1d89d6b20",
+ "value": "Downloading (…)cial_tokens_map.json: 100%"
+ }
+ },
+ "fc6f190d3d51445a833748784c696cdd": {
+ "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_6dc4e8954aae4dc98a22b270dce23708",
+ "max": 173,
+ "min": 0,
+ "orientation": "horizontal",
+ "style": "IPY_MODEL_b6b4f7dfc89b4c99ad994022d641309b",
+ "value": 173
+ }
+ },
+ "ab1b1102c9eb4702a1121dd5d48c2323": {
+ "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_68733a2cd91947b993ed95de1a65e83a",
+ "placeholder": "",
+ "style": "IPY_MODEL_433ac7c1614549e5a8b33fb1ca7cc7f2",
+ "value": " 173/173 [00:00<00:00, 13.6kB/s]"
+ }
+ },
+ "fb9ac1c4c4054a44b068346d59ba288c": {
+ "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
+ }
+ },
+ "ee68720b95ff44c4b1d67e3c83eda925": {
+ "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
+ }
+ },
+ "eefa3cd6233d432bb55792d1d89d6b20": {
+ "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": ""
+ }
+ },
+ "6dc4e8954aae4dc98a22b270dce23708": {
+ "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
+ }
+ },
+ "b6b4f7dfc89b4c99ad994022d641309b": {
+ "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": ""
+ }
+ },
+ "68733a2cd91947b993ed95de1a65e83a": {
+ "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
+ }
+ },
+ "433ac7c1614549e5a8b33fb1ca7cc7f2": {
+ "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": ""
+ }
+ },
+ "3064f9a643454426bb7e9cbf385b4123": {
+ "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_8ef05693bdc747abb89173918573996a",
+ "IPY_MODEL_d60988752d5c4ea89115a23e943140b1",
+ "IPY_MODEL_d33e4b1be84d4efdbe69b66c6a1a01f3"
+ ],
+ "layout": "IPY_MODEL_8ae6497852e24e4ab7b2a3cc745d60fa"
+ }
+ },
+ "8ef05693bdc747abb89173918573996a": {
+ "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_dce7fb5c4d2a43c9a138c15b94d28cfd",
+ "placeholder": "",
+ "style": "IPY_MODEL_28b0f48d418341d19b852d28fe9789c2",
+ "value": "Downloading (…)okenizer_config.json: 100%"
+ }
+ },
+ "d60988752d5c4ea89115a23e943140b1": {
+ "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_a20d5966e27a4a2bb8c5512a1ee9318d",
+ "max": 375,
+ "min": 0,
+ "orientation": "horizontal",
+ "style": "IPY_MODEL_e046044c2a8042909b10f4518bad0585",
+ "value": 375
+ }
+ },
+ "d33e4b1be84d4efdbe69b66c6a1a01f3": {
+ "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_fdcaa24b9c6741d6aec6c3c0c6689dc0",
+ "placeholder": "",
+ "style": "IPY_MODEL_91126e3887684238b4b27db5983bc5ac",
+ "value": " 375/375 [00:00<00:00, 15.7kB/s]"
+ }
+ },
+ "8ae6497852e24e4ab7b2a3cc745d60fa": {
+ "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
+ }
+ },
+ "dce7fb5c4d2a43c9a138c15b94d28cfd": {
+ "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
+ }
+ },
+ "28b0f48d418341d19b852d28fe9789c2": {
+ "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": ""
+ }
+ },
+ "a20d5966e27a4a2bb8c5512a1ee9318d": {
+ "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
+ }
+ },
+ "e046044c2a8042909b10f4518bad0585": {
+ "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": ""
+ }
+ },
+ "fdcaa24b9c6741d6aec6c3c0c6689dc0": {
+ "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
+ }
+ },
+ "91126e3887684238b4b27db5983bc5ac": {
+ "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": ""
+ }
+ },
+ "280d26a4bf874576aa9845120dd9ceab": {
+ "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_4521a1414ac94897823e393f56d99ccf",
+ "IPY_MODEL_abc3e5ba446946d9833c42c9187bf12f",
+ "IPY_MODEL_d5bcb3035f054a77982bd1bf3b4feef4"
+ ],
+ "layout": "IPY_MODEL_237dda0559974f5daa75953086eedd27"
+ }
+ },
+ "4521a1414ac94897823e393f56d99ccf": {
+ "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_4f1d49556c5e4dc38d9d174cc12e453c",
+ "placeholder": "",
+ "style": "IPY_MODEL_c0959ea8a6e54b21b0b2f05fdfb2cb8a",
+ "value": "Downloading (…)solve/main/vocab.txt: 100%"
+ }
+ },
+ "abc3e5ba446946d9833c42c9187bf12f": {
+ "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_cf5951dcf9e84383aff0e075f88dd72f",
+ "max": 248477,
+ "min": 0,
+ "orientation": "horizontal",
+ "style": "IPY_MODEL_c3c2df63508e4c1ea38c204c8c7db566",
+ "value": 248477
+ }
+ },
+ "d5bcb3035f054a77982bd1bf3b4feef4": {
+ "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_79d65b2fd5de4ca1ae4555819f814467",
+ "placeholder": "",
+ "style": "IPY_MODEL_5d0cd69018d54263b9d120bca287c92b",
+ "value": " 248k/248k [00:00<00:00, 10.2MB/s]"
+ }
+ },
+ "237dda0559974f5daa75953086eedd27": {
+ "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
+ }
+ },
+ "4f1d49556c5e4dc38d9d174cc12e453c": {
+ "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
+ }
+ },
+ "c0959ea8a6e54b21b0b2f05fdfb2cb8a": {
+ "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": ""
+ }
+ },
+ "cf5951dcf9e84383aff0e075f88dd72f": {
+ "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
+ }
+ },
+ "c3c2df63508e4c1ea38c204c8c7db566": {
+ "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": ""
+ }
+ },
+ "79d65b2fd5de4ca1ae4555819f814467": {
+ "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
+ }
+ },
+ "5d0cd69018d54263b9d120bca287c92b": {
+ "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": ""
+ }
+ },
+ "59a8f09e54904ac08e2da1fc7265203c": {
+ "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_764ccc6a164e4230afc7542168c66a8f",
+ "IPY_MODEL_a11b7e82dcb746ebb08fab45da17be5c",
+ "IPY_MODEL_d0a26f193e3d4bbca46d72f952aa5c83"
+ ],
+ "layout": "IPY_MODEL_8a75fd69f0324cde94e4250adbf6b1c9"
+ }
+ },
+ "764ccc6a164e4230afc7542168c66a8f": {
+ "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_e012c027c4394690aaa0092df279d934",
+ "placeholder": "",
+ "style": "IPY_MODEL_9eccb73fa6004bfca88549eb33d5c7f8",
+ "value": "Downloading (…)/main/tokenizer.json: 100%"
+ }
+ },
+ "a11b7e82dcb746ebb08fab45da17be5c": {
+ "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_16b2b5f60f874896b7834ee41f41d1db",
+ "max": 751504,
+ "min": 0,
+ "orientation": "horizontal",
+ "style": "IPY_MODEL_78134bba456a448d960f55b54a4df0b4",
+ "value": 751504
+ }
+ },
+ "d0a26f193e3d4bbca46d72f952aa5c83": {
+ "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_bedf16d0a93a42019a3971b4a6b3a8ad",
+ "placeholder": "",
+ "style": "IPY_MODEL_97fbe0677ea84a318d0b9c713013fef9",
+ "value": " 752k/752k [00:00<00:00, 1.19MB/s]"
+ }
+ },
+ "8a75fd69f0324cde94e4250adbf6b1c9": {
+ "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
+ }
+ },
+ "e012c027c4394690aaa0092df279d934": {
+ "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
+ }
+ },
+ "9eccb73fa6004bfca88549eb33d5c7f8": {
+ "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": ""
+ }
+ },
+ "16b2b5f60f874896b7834ee41f41d1db": {
+ "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
+ }
+ },
+ "78134bba456a448d960f55b54a4df0b4": {
+ "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": ""
+ }
+ },
+ "bedf16d0a93a42019a3971b4a6b3a8ad": {
+ "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
+ }
+ },
+ "97fbe0677ea84a318d0b9c713013fef9": {
+ "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": ""
+ }
+ },
+ "36cc854c669f44bc85a37d708a27b2ae": {
+ "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_ccf8d25ac6e34a0faf7226c4109a571a",
+ "IPY_MODEL_cb9b2de1687e46d09e44a1b8d6b316c2",
+ "IPY_MODEL_bca3ddc918434d84a31498d284400c28"
+ ],
+ "layout": "IPY_MODEL_d520e508c89449fb9795d721f43d93b5"
+ }
+ },
+ "ccf8d25ac6e34a0faf7226c4109a571a": {
+ "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_e7a5ca4ca8cf403d8f8c5404269f7fde",
+ "placeholder": "",
+ "style": "IPY_MODEL_76cefa5bb4a24d1f9ba5b5f3aede7a92",
+ "value": "Downloading (…)cial_tokens_map.json: 100%"
+ }
+ },
+ "cb9b2de1687e46d09e44a1b8d6b316c2": {
+ "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_c14e1e88ac9c4ebea4df6764e26d317c",
+ "max": 173,
+ "min": 0,
+ "orientation": "horizontal",
+ "style": "IPY_MODEL_b2ebe96e233a43adb18d52cccce39dba",
+ "value": 173
+ }
+ },
+ "bca3ddc918434d84a31498d284400c28": {
+ "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_7bd9d93bd99e40cca8e701bb50f3f0fb",
+ "placeholder": "",
+ "style": "IPY_MODEL_b985a1a576774607bf205de2a30aaf0c",
+ "value": " 173/173 [00:00<00:00, 14.0kB/s]"
+ }
+ },
+ "d520e508c89449fb9795d721f43d93b5": {
+ "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
+ }
+ },
+ "e7a5ca4ca8cf403d8f8c5404269f7fde": {
+ "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
+ }
+ },
+ "76cefa5bb4a24d1f9ba5b5f3aede7a92": {
+ "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": ""
+ }
+ },
+ "c14e1e88ac9c4ebea4df6764e26d317c": {
+ "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
+ }
+ },
+ "b2ebe96e233a43adb18d52cccce39dba": {
+ "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": ""
+ }
+ },
+ "7bd9d93bd99e40cca8e701bb50f3f0fb": {
+ "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
+ }
+ },
+ "b985a1a576774607bf205de2a30aaf0c": {
+ "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": ""
+ }
+ },
+ "109505da6b0f4464aab035b410b1e156": {
+ "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_e68da79ecc304fbda9fd988e3a4472c5",
+ "IPY_MODEL_1d839974325744f594f22a5cb8c47223",
+ "IPY_MODEL_c4ea9bee06294000a176fb4db1e0bca6"
+ ],
+ "layout": "IPY_MODEL_e4dcc950c9064f488cf267ed10c949c2"
+ }
+ },
+ "e68da79ecc304fbda9fd988e3a4472c5": {
+ "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_f596eba71ba64a509f2537fafd82a8dc",
+ "placeholder": "",
+ "style": "IPY_MODEL_ea57c949c3b14925b725066e1e68594e",
+ "value": "Downloading (…)okenizer_config.json: 100%"
+ }
+ },
+ "1d839974325744f594f22a5cb8c47223": {
+ "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_212c1e3e34294785ba0bfb555dd6d4ad",
+ "max": 375,
+ "min": 0,
+ "orientation": "horizontal",
+ "style": "IPY_MODEL_fbcb67df6a344c34874de5d2c1fd1792",
+ "value": 375
+ }
+ },
+ "c4ea9bee06294000a176fb4db1e0bca6": {
+ "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_78c279b4ac444b7da318b3cc6cc9d870",
+ "placeholder": "",
+ "style": "IPY_MODEL_e924e67dfcbb490c97b793d012d37dba",
+ "value": " 375/375 [00:00<00:00, 18.3kB/s]"
+ }
+ },
+ "e4dcc950c9064f488cf267ed10c949c2": {
+ "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
+ }
+ },
+ "f596eba71ba64a509f2537fafd82a8dc": {
+ "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
+ }
+ },
+ "ea57c949c3b14925b725066e1e68594e": {
+ "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": ""
+ }
+ },
+ "212c1e3e34294785ba0bfb555dd6d4ad": {
+ "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
+ }
+ },
+ "fbcb67df6a344c34874de5d2c1fd1792": {
+ "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": ""
+ }
+ },
+ "78c279b4ac444b7da318b3cc6cc9d870": {
+ "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
+ }
+ },
+ "e924e67dfcbb490c97b793d012d37dba": {
+ "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": ""
+ }
+ },
+ "f801c9352ff1492f92da2d18cf4b6bde": {
+ "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_59b847e47b1d4d708b1ca589d842c17c",
+ "IPY_MODEL_2f0ed7d4395545498fc98d6f0c16cd32",
+ "IPY_MODEL_d65b52eb1c61429cb4b94b8712dbc950"
+ ],
+ "layout": "IPY_MODEL_f67b2ebcb49343818eadeea6450dfe2a"
+ }
+ },
+ "59b847e47b1d4d708b1ca589d842c17c": {
+ "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_dffeb6ace5d64fbd8008ae089b80f06f",
+ "placeholder": "",
+ "style": "IPY_MODEL_4be5360d35554e859f529f945c215a41",
+ "value": "Downloading (…)solve/main/vocab.txt: 100%"
+ }
+ },
+ "2f0ed7d4395545498fc98d6f0c16cd32": {
+ "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_66e33eba5ec1429583678e6947736b95",
+ "max": 248477,
+ "min": 0,
+ "orientation": "horizontal",
+ "style": "IPY_MODEL_e847471da91f4f29a5626f432f8a4020",
+ "value": 248477
+ }
+ },
+ "d65b52eb1c61429cb4b94b8712dbc950": {
+ "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_e8d474f7bb5248d2b8ff1bca96b5206c",
+ "placeholder": "",
+ "style": "IPY_MODEL_50a314c64eae4daabf8b5a078b74a2a6",
+ "value": " 248k/248k [00:00<00:00, 1.18MB/s]"
+ }
+ },
+ "f67b2ebcb49343818eadeea6450dfe2a": {
+ "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
+ }
+ },
+ "dffeb6ace5d64fbd8008ae089b80f06f": {
+ "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
+ }
+ },
+ "4be5360d35554e859f529f945c215a41": {
+ "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": ""
+ }
+ },
+ "66e33eba5ec1429583678e6947736b95": {
+ "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
+ }
+ },
+ "e847471da91f4f29a5626f432f8a4020": {
+ "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": ""
+ }
+ },
+ "e8d474f7bb5248d2b8ff1bca96b5206c": {
+ "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
+ }
+ },
+ "50a314c64eae4daabf8b5a078b74a2a6": {
+ "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": ""
+ }
+ },
+ "3a97b8cc75d74828b853d09b43300734": {
+ "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_8b9f305975da4bcd9e3fe15630975e4c",
+ "IPY_MODEL_737ddcd484d644069213c24fa5e1eac2",
+ "IPY_MODEL_ab3d48b9025e4400aaa9ecbaeeb06299"
+ ],
+ "layout": "IPY_MODEL_6148576ce5a6468ea3c6f96779609c00"
+ }
+ },
+ "8b9f305975da4bcd9e3fe15630975e4c": {
+ "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_1f2dccf4784446f68adb4b2271934068",
+ "placeholder": "",
+ "style": "IPY_MODEL_efe0e408da784f3c9cbfad1a3259a2dc",
+ "value": "Downloading (…)/main/tokenizer.json: 100%"
+ }
+ },
+ "737ddcd484d644069213c24fa5e1eac2": {
+ "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_2bddec1a008345fa96389371feb5c703",
+ "max": 751504,
+ "min": 0,
+ "orientation": "horizontal",
+ "style": "IPY_MODEL_c7a2a72b5ebc48ff946b4e4fe309cb7f",
+ "value": 751504
+ }
+ },
+ "ab3d48b9025e4400aaa9ecbaeeb06299": {
+ "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_90917be6bb2347f2bb0f1585c679401b",
+ "placeholder": "",
+ "style": "IPY_MODEL_f7953b75bfe2473cbbf0ba0b12084efb",
+ "value": " 752k/752k [00:00<00:00, 3.55MB/s]"
+ }
+ },
+ "6148576ce5a6468ea3c6f96779609c00": {
+ "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
+ }
+ },
+ "1f2dccf4784446f68adb4b2271934068": {
+ "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
+ }
+ },
+ "efe0e408da784f3c9cbfad1a3259a2dc": {
+ "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": ""
+ }
+ },
+ "2bddec1a008345fa96389371feb5c703": {
+ "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
+ }
+ },
+ "c7a2a72b5ebc48ff946b4e4fe309cb7f": {
+ "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": ""
+ }
+ },
+ "90917be6bb2347f2bb0f1585c679401b": {
+ "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
+ }
+ },
+ "f7953b75bfe2473cbbf0ba0b12084efb": {
+ "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": ""
+ }
+ },
+ "048ec54d70fe4a509f74bc351d8019fa": {
+ "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_cece75dadfe34dc29e63e4a6dc1b598d",
+ "IPY_MODEL_ed01c515ab7845c38969200931734a8f",
+ "IPY_MODEL_63d4c118424e481d8ce4f3fb876914bf"
+ ],
+ "layout": "IPY_MODEL_ae206a6008ca4818acfcdf8b73fba0f7"
+ }
+ },
+ "cece75dadfe34dc29e63e4a6dc1b598d": {
+ "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_f72c2db5c3624c26b68ed073ade0739d",
+ "placeholder": "",
+ "style": "IPY_MODEL_643d9d6b4f4e44ffbfb64e10230e3041",
+ "value": "Downloading (…)cial_tokens_map.json: 100%"
+ }
+ },
+ "ed01c515ab7845c38969200931734a8f": {
+ "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_4e67ea28fcf14a3cbfad5b12834702d6",
+ "max": 173,
+ "min": 0,
+ "orientation": "horizontal",
+ "style": "IPY_MODEL_82d4780447df49829a598538484ee7e3",
+ "value": 173
+ }
+ },
+ "63d4c118424e481d8ce4f3fb876914bf": {
+ "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_606cc334601e4c6ebdd62b5dbbd9dba3",
+ "placeholder": "",
+ "style": "IPY_MODEL_fde7538b33d44263b71d529ef4dfe5c6",
+ "value": " 173/173 [00:00<00:00, 8.94kB/s]"
+ }
+ },
+ "ae206a6008ca4818acfcdf8b73fba0f7": {
+ "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
+ }
+ },
+ "f72c2db5c3624c26b68ed073ade0739d": {
+ "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
+ }
+ },
+ "643d9d6b4f4e44ffbfb64e10230e3041": {
+ "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": ""
+ }
+ },
+ "4e67ea28fcf14a3cbfad5b12834702d6": {
+ "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
+ }
+ },
+ "82d4780447df49829a598538484ee7e3": {
+ "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": ""
+ }
+ },
+ "606cc334601e4c6ebdd62b5dbbd9dba3": {
+ "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
+ }
+ },
+ "fde7538b33d44263b71d529ef4dfe5c6": {
+ "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": ""
+ }
+ },
+ "e6dce7e4829b4689a2c3cf86cf4384ba": {
+ "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_008d4a83a1c64ea2bd938a78bba59d5f",
+ "IPY_MODEL_efd95703dccb4f30834e3e26b1bc355e",
+ "IPY_MODEL_0dcec34d40374f6cba16f30aab183953"
+ ],
+ "layout": "IPY_MODEL_74770bf2a57348c0ac16dd6619a8c86d"
+ }
+ },
+ "008d4a83a1c64ea2bd938a78bba59d5f": {
+ "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_6c8c01e4db904a019957a26da2957bf7",
+ "placeholder": "",
+ "style": "IPY_MODEL_8805b35f396545b686f918ec2ea1edf3",
+ "value": "Downloading (…)lve/main/config.json: 100%"
+ }
+ },
+ "efd95703dccb4f30834e3e26b1bc355e": {
+ "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_605d392a7d2a4cd5b85e632057041385",
+ "max": 616,
+ "min": 0,
+ "orientation": "horizontal",
+ "style": "IPY_MODEL_d8ef2574e20746a893e2b87f25694966",
+ "value": 616
+ }
+ },
+ "0dcec34d40374f6cba16f30aab183953": {
+ "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_70fce17f9a9848d98f00fb5d85512e97",
+ "placeholder": "",
+ "style": "IPY_MODEL_b725a47baaaf4cf49ae44ef82697d652",
+ "value": " 616/616 [00:00<00:00, 44.4kB/s]"
+ }
+ },
+ "74770bf2a57348c0ac16dd6619a8c86d": {
+ "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
+ }
+ },
+ "6c8c01e4db904a019957a26da2957bf7": {
+ "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
+ }
+ },
+ "8805b35f396545b686f918ec2ea1edf3": {
+ "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": ""
+ }
+ },
+ "605d392a7d2a4cd5b85e632057041385": {
+ "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
+ }
+ },
+ "d8ef2574e20746a893e2b87f25694966": {
+ "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": ""
+ }
+ },
+ "70fce17f9a9848d98f00fb5d85512e97": {
+ "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
+ }
+ },
+ "b725a47baaaf4cf49ae44ef82697d652": {
+ "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": ""
+ }
+ },
+ "8c9f1051e90c4222924af3ac004e70af": {
+ "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_963b1cdf94e64114b2911a1a43ed5fac",
+ "IPY_MODEL_25c080fad710488281bef0dd0e0c09c6",
+ "IPY_MODEL_b5eafc0b43844767ba3cdfbf225479e3"
+ ],
+ "layout": "IPY_MODEL_3953720dcc724bf7ae56ef88b3fadf02"
+ }
+ },
+ "963b1cdf94e64114b2911a1a43ed5fac": {
+ "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_758741b553894d928e48428f285aa554",
+ "placeholder": "",
+ "style": "IPY_MODEL_c79f2c6c905e469292ed6af7345fea3b",
+ "value": "Downloading (…)tencepiece.bpe.model: 100%"
+ }
+ },
+ "25c080fad710488281bef0dd0e0c09c6": {
+ "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_78095a6716024141a82f7f643836bac3",
+ "max": 5069051,
+ "min": 0,
+ "orientation": "horizontal",
+ "style": "IPY_MODEL_ffc86b8e357e4225ae3f353b57a64783",
+ "value": 5069051
+ }
+ },
+ "b5eafc0b43844767ba3cdfbf225479e3": {
+ "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_968e79bef9944067bf0f12f557318429",
+ "placeholder": "",
+ "style": "IPY_MODEL_7fdc53fd54e04fff9d7ea20abeb75a5d",
+ "value": " 5.07M/5.07M [00:00<00:00, 8.03MB/s]"
+ }
+ },
+ "3953720dcc724bf7ae56ef88b3fadf02": {
+ "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
+ }
+ },
+ "758741b553894d928e48428f285aa554": {
+ "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
+ }
+ },
+ "c79f2c6c905e469292ed6af7345fea3b": {
+ "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": ""
+ }
+ },
+ "78095a6716024141a82f7f643836bac3": {
+ "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
+ }
+ },
+ "ffc86b8e357e4225ae3f353b57a64783": {
+ "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": ""
+ }
+ },
+ "968e79bef9944067bf0f12f557318429": {
+ "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
+ }
+ },
+ "7fdc53fd54e04fff9d7ea20abeb75a5d": {
+ "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": ""
+ }
+ },
+ "c4bb1d422fca4f839b5adb42ce7f9932": {
+ "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_f2be641755d04335a4efdd30a21de1ec",
+ "IPY_MODEL_d500010b5a0a44d5be107c3dfe4bdc67",
+ "IPY_MODEL_6aa5f8427f86489ba9bf7b29306568ac"
+ ],
+ "layout": "IPY_MODEL_78c672dcb2a84c679a4c1268149f7916"
+ }
+ },
+ "f2be641755d04335a4efdd30a21de1ec": {
+ "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_0176c86ef802424e8a0be51a775f6a6f",
+ "placeholder": "",
+ "style": "IPY_MODEL_34be8750f2264bb2accd4d5e469e3fd7",
+ "value": "Downloading (…)/main/tokenizer.json: 100%"
+ }
+ },
+ "d500010b5a0a44d5be107c3dfe4bdc67": {
+ "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_522bf04451424070be58baa6ea546ee2",
+ "max": 9096718,
+ "min": 0,
+ "orientation": "horizontal",
+ "style": "IPY_MODEL_d673f7ecc3224ff581ac592a515a8217",
+ "value": 9096718
+ }
+ },
+ "6aa5f8427f86489ba9bf7b29306568ac": {
+ "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_1650f6430e544abc9c708ad162d88040",
+ "placeholder": "",
+ "style": "IPY_MODEL_95bacaa3ed4744499a33db615d5da6bc",
+ "value": " 9.10M/9.10M [00:00<00:00, 10.6MB/s]"
+ }
+ },
+ "78c672dcb2a84c679a4c1268149f7916": {
+ "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
+ }
+ },
+ "0176c86ef802424e8a0be51a775f6a6f": {
+ "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
+ }
+ },
+ "34be8750f2264bb2accd4d5e469e3fd7": {
+ "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": ""
+ }
+ },
+ "522bf04451424070be58baa6ea546ee2": {
+ "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
+ }
+ },
+ "d673f7ecc3224ff581ac592a515a8217": {
+ "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": ""
+ }
+ },
+ "1650f6430e544abc9c708ad162d88040": {
+ "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
+ }
+ },
+ "95bacaa3ed4744499a33db615d5da6bc": {
+ "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": ""
+ }
+ },
+ "b79cd2a7a6fb490183d4e3454b8bf61f": {
+ "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_c1b533d4eb464df8b6a697b2eeee50cd",
+ "IPY_MODEL_fed9189d75e4400e9cbf6af091e9ab6c",
+ "IPY_MODEL_7c64230bd8354c7da7f8ba40fb18d244"
+ ],
+ "layout": "IPY_MODEL_e5105e48878545f899a995b7a19a526c"
+ }
+ },
+ "c1b533d4eb464df8b6a697b2eeee50cd": {
+ "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_dae8c2e3d4df4c1c9c394ca8db948f7e",
+ "placeholder": "",
+ "style": "IPY_MODEL_f3d7596cd7f442108b0f300a97432b9e",
+ "value": "Downloading (…)okenizer_config.json: 100%"
+ }
+ },
+ "fed9189d75e4400e9cbf6af091e9ab6c": {
+ "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_8d2368144ac54bb8bf5eea46ae20e582",
+ "max": 28,
+ "min": 0,
+ "orientation": "horizontal",
+ "style": "IPY_MODEL_6087f9058e2a4cb683e73ede9985ba0f",
+ "value": 28
+ }
+ },
+ "7c64230bd8354c7da7f8ba40fb18d244": {
+ "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_e4d90b843113418f8ad39cebac91cad6",
+ "placeholder": "",
+ "style": "IPY_MODEL_d6993e6319f64dd3a1531ca1812dc399",
+ "value": " 28.0/28.0 [00:00<00:00, 1.89kB/s]"
+ }
+ },
+ "e5105e48878545f899a995b7a19a526c": {
+ "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
+ }
+ },
+ "dae8c2e3d4df4c1c9c394ca8db948f7e": {
+ "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
+ }
+ },
+ "f3d7596cd7f442108b0f300a97432b9e": {
+ "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": ""
+ }
+ },
+ "8d2368144ac54bb8bf5eea46ae20e582": {
+ "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
+ }
+ },
+ "6087f9058e2a4cb683e73ede9985ba0f": {
+ "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": ""
+ }
+ },
+ "e4d90b843113418f8ad39cebac91cad6": {
+ "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
+ }
+ },
+ "d6993e6319f64dd3a1531ca1812dc399": {
+ "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": ""
+ }
+ },
+ "9e311b6073454fbaa1a978ffeff8e6df": {
+ "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_99ebac6b399f4ec1a78f4724b8450c6d",
+ "IPY_MODEL_f8a359d73f214f04bdbe2c40a65e18bc",
+ "IPY_MODEL_c0ed1c0c238440558c134a9c6a4adfc1"
+ ],
+ "layout": "IPY_MODEL_d55828c2f0bf43cf9174693ec21b943c"
+ }
+ },
+ "99ebac6b399f4ec1a78f4724b8450c6d": {
+ "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_3c1edbdb5f54438f9a7ba0ac211ad8c3",
+ "placeholder": "",
+ "style": "IPY_MODEL_0e93be16aa2b4caa887a7fe2a042fad6",
+ "value": "Downloading (…)lve/main/config.json: 100%"
+ }
+ },
+ "f8a359d73f214f04bdbe2c40a65e18bc": {
+ "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_e7f0be2962db455d9b377b41cb860b5c",
+ "max": 625,
+ "min": 0,
+ "orientation": "horizontal",
+ "style": "IPY_MODEL_d4ce6bd48c5e4589a987b413143980b9",
+ "value": 625
+ }
+ },
+ "c0ed1c0c238440558c134a9c6a4adfc1": {
+ "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_fa0a160cdcbc4650a833829071ad2eb7",
+ "placeholder": "",
+ "style": "IPY_MODEL_b708d01208c34885a2bf1ba4325893f3",
+ "value": " 625/625 [00:00<00:00, 15.3kB/s]"
+ }
+ },
+ "d55828c2f0bf43cf9174693ec21b943c": {
+ "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
+ }
+ },
+ "3c1edbdb5f54438f9a7ba0ac211ad8c3": {
+ "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
+ }
+ },
+ "0e93be16aa2b4caa887a7fe2a042fad6": {
+ "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": ""
+ }
+ },
+ "e7f0be2962db455d9b377b41cb860b5c": {
+ "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
+ }
+ },
+ "d4ce6bd48c5e4589a987b413143980b9": {
+ "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": ""
+ }
+ },
+ "fa0a160cdcbc4650a833829071ad2eb7": {
+ "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
+ }
+ },
+ "b708d01208c34885a2bf1ba4325893f3": {
+ "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": ""
+ }
+ },
+ "e2df55b1f3db4f24af648f5e129f0825": {
+ "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_b4c3fe1da5604b48aa8e9ec1ee767f84",
+ "IPY_MODEL_7a51cb21a8fb47b1a18d867d01f4128a",
+ "IPY_MODEL_fb8de23dbba34e518daaa54895b4b8fb"
+ ],
+ "layout": "IPY_MODEL_a4a0f00e1e44457db1ee8c14b900efb6"
+ }
+ },
+ "b4c3fe1da5604b48aa8e9ec1ee767f84": {
+ "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_0bf796104ab347419b421aba80e2ea5e",
+ "placeholder": "",
+ "style": "IPY_MODEL_8ed1b4ca0aee424098570b9d8b03e5b0",
+ "value": "Downloading (…)solve/main/vocab.txt: 100%"
+ }
+ },
+ "7a51cb21a8fb47b1a18d867d01f4128a": {
+ "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_f55fdfd49ee8474980d2ba1bef0c2733",
+ "max": 871891,
+ "min": 0,
+ "orientation": "horizontal",
+ "style": "IPY_MODEL_570805a38b0149adb37596f90fdd5f39",
+ "value": 871891
+ }
+ },
+ "fb8de23dbba34e518daaa54895b4b8fb": {
+ "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_0dccee61f95a4440bf896c4f7839c90e",
+ "placeholder": "",
+ "style": "IPY_MODEL_dc55bc95895048c68b595bb62e417350",
+ "value": " 872k/872k [00:00<00:00, 1.37MB/s]"
+ }
+ },
+ "a4a0f00e1e44457db1ee8c14b900efb6": {
+ "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
+ }
+ },
+ "0bf796104ab347419b421aba80e2ea5e": {
+ "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
+ }
+ },
+ "8ed1b4ca0aee424098570b9d8b03e5b0": {
+ "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": ""
+ }
+ },
+ "f55fdfd49ee8474980d2ba1bef0c2733": {
+ "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
+ }
+ },
+ "570805a38b0149adb37596f90fdd5f39": {
+ "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": ""
+ }
+ },
+ "0dccee61f95a4440bf896c4f7839c90e": {
+ "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
+ }
+ },
+ "dc55bc95895048c68b595bb62e417350": {
+ "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": ""
+ }
+ },
+ "c0da66b3026d48aa96fa9c551e65f3df": {
+ "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_2edbf2b488604680b4576c5036d2294e",
+ "IPY_MODEL_52349d67ea8e459ba5e4624af5b5101f",
+ "IPY_MODEL_378b2512547a432c96a7cbfbcaaa0b10"
+ ],
+ "layout": "IPY_MODEL_35f98de8bd3d46898a67761b6fe62b03"
+ }
+ },
+ "2edbf2b488604680b4576c5036d2294e": {
+ "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_7a3a9cb9b3e84565bffdf683a213903b",
+ "placeholder": "",
+ "style": "IPY_MODEL_1c98373c13b640c68fb607e7970247a9",
+ "value": "Downloading (…)/main/tokenizer.json: 100%"
+ }
+ },
+ "52349d67ea8e459ba5e4624af5b5101f": {
+ "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_5f791941a45c4bf691deb7c8c48552cc",
+ "max": 1715180,
+ "min": 0,
+ "orientation": "horizontal",
+ "style": "IPY_MODEL_aaa92270fdc64d5d9c9f5e84f9284f0a",
+ "value": 1715180
+ }
+ },
+ "378b2512547a432c96a7cbfbcaaa0b10": {
+ "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_ddbfa7dd6e8a43a8a4147c50e33a4548",
+ "placeholder": "",
+ "style": "IPY_MODEL_4b132f43e5b749dd84dc614abbe76672",
+ "value": " 1.72M/1.72M [00:01<00:00, 1.64MB/s]"
+ }
+ },
+ "35f98de8bd3d46898a67761b6fe62b03": {
+ "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
+ }
+ },
+ "7a3a9cb9b3e84565bffdf683a213903b": {
+ "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
+ }
+ },
+ "1c98373c13b640c68fb607e7970247a9": {
+ "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": ""
+ }
+ },
+ "5f791941a45c4bf691deb7c8c48552cc": {
+ "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
+ }
+ },
+ "aaa92270fdc64d5d9c9f5e84f9284f0a": {
+ "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": ""
+ }
+ },
+ "ddbfa7dd6e8a43a8a4147c50e33a4548": {
+ "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
+ }
+ },
+ "4b132f43e5b749dd84dc614abbe76672": {
+ "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": ""
+ }
+ },
+ "1fd7f1e2b00a4b6eb3ddfdfc150059d3": {
+ "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_62399a7de6f1460ea5dccb05d44c4cc1",
+ "IPY_MODEL_b802ad8d5f53420cad376fc42e290260",
+ "IPY_MODEL_c60e0c4265ce46d98b213eac941d0ee1"
+ ],
+ "layout": "IPY_MODEL_f3aa47355778482aae55c3b44aca4273"
+ }
+ },
+ "62399a7de6f1460ea5dccb05d44c4cc1": {
+ "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_ba688b1063d7483ba4b30e900b14385b",
+ "placeholder": "",
+ "style": "IPY_MODEL_e1af7116138049deb3dbfa89d8a260bb",
+ "value": "Downloading (…)lve/main/config.json: 100%"
+ }
+ },
+ "b802ad8d5f53420cad376fc42e290260": {
+ "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_7a4c1373a8de446081d028bf12edb4c2",
+ "max": 426,
+ "min": 0,
+ "orientation": "horizontal",
+ "style": "IPY_MODEL_71b518ae1c4443139d3950078842fd68",
+ "value": 426
+ }
+ },
+ "c60e0c4265ce46d98b213eac941d0ee1": {
+ "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_da6ec0e73d414b248f19bad266b3148b",
+ "placeholder": "",
+ "style": "IPY_MODEL_dfa5c351c3574593a5561885b7422f8c",
+ "value": " 426/426 [00:00<00:00, 24.0kB/s]"
+ }
+ },
+ "f3aa47355778482aae55c3b44aca4273": {
+ "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
+ }
+ },
+ "ba688b1063d7483ba4b30e900b14385b": {
+ "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
+ }
+ },
+ "e1af7116138049deb3dbfa89d8a260bb": {
+ "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": ""
+ }
+ },
+ "7a4c1373a8de446081d028bf12edb4c2": {
+ "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
+ }
+ },
+ "71b518ae1c4443139d3950078842fd68": {
+ "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": ""
+ }
+ },
+ "da6ec0e73d414b248f19bad266b3148b": {
+ "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
+ }
+ },
+ "dfa5c351c3574593a5561885b7422f8c": {
+ "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": ""
+ }
+ },
+ "72bf2b77001b4c0697dc0a7032eb27c0": {
+ "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_54f9964ac1b540438eed60c5fcb1831d",
+ "IPY_MODEL_8e0a0a7735c84fdab60b8952ffebd433",
+ "IPY_MODEL_ffe65bc47d2b4948b81fbda1526ea299"
+ ],
+ "layout": "IPY_MODEL_27ebca023c1048f29f8ff05735e5e25a"
+ }
+ },
+ "54f9964ac1b540438eed60c5fcb1831d": {
+ "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_5aca4ceb73634249945884be389514d0",
+ "placeholder": "",
+ "style": "IPY_MODEL_ae36612dc22948408953ef4126f63822",
+ "value": "Downloading pytorch_model.bin: 100%"
+ }
+ },
+ "8e0a0a7735c84fdab60b8952ffebd433": {
+ "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_8bf1ae25ff6143ef99728b35156e4227",
+ "max": 368792146,
+ "min": 0,
+ "orientation": "horizontal",
+ "style": "IPY_MODEL_859f6226c2d34f1aa8463797f62e7b4e",
+ "value": 368792146
+ }
+ },
+ "ffe65bc47d2b4948b81fbda1526ea299": {
+ "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_866496e3cd964d6aaf8abb2321586b21",
+ "placeholder": "",
+ "style": "IPY_MODEL_7e411a6f162b40cb9de440f1c5939a2e",
+ "value": " 369M/369M [00:01<00:00, 259MB/s]"
+ }
+ },
+ "27ebca023c1048f29f8ff05735e5e25a": {
+ "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
+ }
+ },
+ "5aca4ceb73634249945884be389514d0": {
+ "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
+ }
+ },
+ "ae36612dc22948408953ef4126f63822": {
+ "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": ""
+ }
+ },
+ "8bf1ae25ff6143ef99728b35156e4227": {
+ "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
+ }
+ },
+ "859f6226c2d34f1aa8463797f62e7b4e": {
+ "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": ""
+ }
+ },
+ "866496e3cd964d6aaf8abb2321586b21": {
+ "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
+ }
+ },
+ "7e411a6f162b40cb9de440f1c5939a2e": {
+ "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": ""
+ }
+ }
+ }
+ }
+ },
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "view-in-github",
+ "colab_type": "text"
+ },
+ "source": [
+ " "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "기존 코드는 GPU에 너무 큰 부담을 줌\n",
+ "그래서 앙상블 대신 monologg/kobert 모델만 사용하되, 이전에 했떤 코드를 필사하면서 진행"
+ ],
+ "metadata": {
+ "id": "wr83NCEJ5Ddb"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "z-OdlouOytXq",
+ "outputId": "9088b195-b68d-4c9b-b10f-43e1396ffd5b"
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/\n",
+ "Collecting torch_optimizer\n",
+ " Downloading torch_optimizer-0.3.0-py3-none-any.whl (61 kB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m61.9/61.9 kB\u001b[0m \u001b[31m315.6 kB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[?25hRequirement already satisfied: torch>=1.5.0 in /usr/local/lib/python3.10/dist-packages (from torch_optimizer) (2.0.0+cu118)\n",
+ "Collecting pytorch-ranger>=0.1.1 (from torch_optimizer)\n",
+ " Downloading pytorch_ranger-0.1.1-py3-none-any.whl (14 kB)\n",
+ "Requirement already satisfied: filelock in /usr/local/lib/python3.10/dist-packages (from torch>=1.5.0->torch_optimizer) (3.12.0)\n",
+ "Requirement already satisfied: typing-extensions in /usr/local/lib/python3.10/dist-packages (from torch>=1.5.0->torch_optimizer) (4.5.0)\n",
+ "Requirement already satisfied: sympy in /usr/local/lib/python3.10/dist-packages (from torch>=1.5.0->torch_optimizer) (1.11.1)\n",
+ "Requirement already satisfied: networkx in /usr/local/lib/python3.10/dist-packages (from torch>=1.5.0->torch_optimizer) (3.1)\n",
+ "Requirement already satisfied: jinja2 in /usr/local/lib/python3.10/dist-packages (from torch>=1.5.0->torch_optimizer) (3.1.2)\n",
+ "Requirement already satisfied: triton==2.0.0 in /usr/local/lib/python3.10/dist-packages (from torch>=1.5.0->torch_optimizer) (2.0.0)\n",
+ "Requirement already satisfied: cmake in /usr/local/lib/python3.10/dist-packages (from triton==2.0.0->torch>=1.5.0->torch_optimizer) (3.25.2)\n",
+ "Requirement already satisfied: lit in /usr/local/lib/python3.10/dist-packages (from triton==2.0.0->torch>=1.5.0->torch_optimizer) (16.0.2)\n",
+ "Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from jinja2->torch>=1.5.0->torch_optimizer) (2.1.2)\n",
+ "Requirement already satisfied: mpmath>=0.19 in /usr/local/lib/python3.10/dist-packages (from sympy->torch>=1.5.0->torch_optimizer) (1.3.0)\n",
+ "Installing collected packages: pytorch-ranger, torch_optimizer\n",
+ "Successfully installed pytorch-ranger-0.1.1 torch_optimizer-0.3.0\n"
+ ]
+ }
+ ],
+ "source": [
+ "#torch_optimizer : 파이토치 기반. 딥러닝 모델 최적화를 위한 여러 알고리즘 제공\n",
+ "!pip install torch_optimizer"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "#transformers : 딥러닝 NLP 모델 구현 라이브러리\n",
+ "#사전 훈련(pre-trained) 언어 모델(LM)을 제공하고, 이후에 이걸 특정 자연어 처리 업무에 맞게 fine-tunning을 하는 것임\n",
+ "!pip install transformers"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "0R8EkYlwzrmz",
+ "outputId": "b77aefd6-904f-4df1-dd4b-094f131167a0"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/\n",
+ "Collecting transformers\n",
+ " Downloading transformers-4.28.1-py3-none-any.whl (7.0 MB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m7.0/7.0 MB\u001b[0m \u001b[31m67.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[?25hRequirement already satisfied: filelock in /usr/local/lib/python3.10/dist-packages (from transformers) (3.12.0)\n",
+ "Collecting huggingface-hub<1.0,>=0.11.0 (from transformers)\n",
+ " Downloading huggingface_hub-0.14.1-py3-none-any.whl (224 kB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m224.5/224.5 kB\u001b[0m \u001b[31m31.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[?25hRequirement already satisfied: numpy>=1.17 in /usr/local/lib/python3.10/dist-packages (from transformers) (1.22.4)\n",
+ "Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.10/dist-packages (from transformers) (23.1)\n",
+ "Requirement already satisfied: pyyaml>=5.1 in /usr/local/lib/python3.10/dist-packages (from transformers) (6.0)\n",
+ "Requirement already satisfied: regex!=2019.12.17 in /usr/local/lib/python3.10/dist-packages (from transformers) (2022.10.31)\n",
+ "Requirement already satisfied: requests in /usr/local/lib/python3.10/dist-packages (from transformers) (2.27.1)\n",
+ "Collecting tokenizers!=0.11.3,<0.14,>=0.11.1 (from transformers)\n",
+ " Downloading tokenizers-0.13.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.8 MB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m7.8/7.8 MB\u001b[0m \u001b[31m107.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[?25hRequirement already satisfied: tqdm>=4.27 in /usr/local/lib/python3.10/dist-packages (from transformers) (4.65.0)\n",
+ "Requirement already satisfied: fsspec in /usr/local/lib/python3.10/dist-packages (from huggingface-hub<1.0,>=0.11.0->transformers) (2023.4.0)\n",
+ "Requirement already satisfied: typing-extensions>=3.7.4.3 in /usr/local/lib/python3.10/dist-packages (from huggingface-hub<1.0,>=0.11.0->transformers) (4.5.0)\n",
+ "Requirement already satisfied: urllib3<1.27,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests->transformers) (1.26.15)\n",
+ "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests->transformers) (2022.12.7)\n",
+ "Requirement already satisfied: charset-normalizer~=2.0.0 in /usr/local/lib/python3.10/dist-packages (from requests->transformers) (2.0.12)\n",
+ "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests->transformers) (3.4)\n",
+ "Installing collected packages: tokenizers, huggingface-hub, transformers\n",
+ "Successfully installed huggingface-hub-0.14.1 tokenizers-0.13.3 transformers-4.28.1\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "- pre-trained\n",
+ " - 사전 학습 모델 : 대규모 데이터셋에서 미리 학습된 모델\n",
+ " - 다른 자연어 처리 task에서도 유용하게 됨.\n",
+ " - 학습시간을 줄이고 소규모 데이터셋에서도 고성능 결과 얻을 수 있음\n",
+ "- fine-tunning\n",
+ " - 사전 훈련 모델을 사용해 특정 자연어 처리 업무에 맞는 모델을 만드는 과정"
+ ],
+ "metadata": {
+ "id": "_zb_a3cmz98y"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "# 시작"
+ ],
+ "metadata": {
+ "id": "gXcvawLJ0YIC"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "#importing libraries\n",
+ "import numpy as np\n",
+ "import os\n",
+ "import pickle\n",
+ "import sys\n",
+ "import pandas as pd\n",
+ "import re\n",
+ "import cv2"
+ ],
+ "metadata": {
+ "id": "XFgKGsjcz6J4"
+ },
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "- pickle : 파이썬 객체를 직렬화/역직렬화 하기 위한 모듈. 파이썬 객체를 디스크에 저장하고 로드할 수 있는 기능\n",
+ "- sys : '인터프리터가 쓰거나 유지 및 관리하는 일부변수'와 인터프리터 간 상호작용 함수를 제공\n",
+ "- OpenCV(cv2) : 컴퓨터 비전 및 이미지 처리를 위한 라이브러리"
+ ],
+ "metadata": {
+ "id": "KYUq_8RJ0xuF"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "import torch #인공신경망 네트워크를 설계할 때 쓰는 오픈 소스 머신러닝 프레임워크, 파이토치.\n",
+ "#tensor 연산자, 인공신경망 모델, 여러 최적화 알고리즘을 제공함\n",
+ "import torch.cuda.amp as amp\n",
+ "#Automatic Mixed Precision\n",
+ "#: 단정밀도 및 반정밀도 부동 소수점 연산의 조합을 씀 -> GPU 메모리 사용량을 줄이고 학습 속도를 높임"
+ ],
+ "metadata": {
+ "id": "Og_GTAaM0VoS"
+ },
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "import torch.nn as nn\n",
+ "#파이토치의 Neural Network 모듈"
+ ],
+ "metadata": {
+ "id": "MJxZWuk6wo1v"
+ },
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "from torch.optim.optimizer import Optimizer, required\n",
+ "#Optimizer : 최적화 알고리즘을 파이토치에서 구현 및 사용하고자 제공되는 공통 인터페이스를 가져옴\n",
+ "#required : 함수에 필요한 인수를 지정할 때 사용되는 필수 함수를 가져옴\n",
+ "import torch_optimizer as optim\n",
+ "#torch_optimizer : 파이토치용 서드 파티 라이브러리. 추가 최적화 알고리즘을 제공함."
+ ],
+ "metadata": {
+ "id": "6kpmYkGs7QW2"
+ },
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "#데이터 로딩을 위한 라이브러리들#\n",
+ "\n",
+ "\n",
+ "from torch.utils.data import DataLoader\n",
+ "#DataLoader : 파이토치 데이터셋에 대한 반복자를 제공\n",
+ "# -> 데이터셋에서 한 번에 하나의 샘플을 가져와 처리하기보다 배치 단위로 처리하는 게 효율적이라서\n",
+ "# 데이터셋의 모든 샘플을 각 반복자가 데이터셋의 한 배치를 순차적으로 반환해줌.\n",
+ "\n",
+ "from torch.utils.data.dataset import Dataset\n",
+ "#Dataset : 파이토치에서 데이터셋을 나타내는 추상 클래스\n",
+ "#데이터 샘플에 대한 액세스를 제공하기 위해 어떤 하위 클래스든지 __len__ 및 __getitem__ 두 가지 메서드를 구현해야 함\n",
+ "##그래서 이후 model 코드 작성할 때 두 메서드 구현하는 내용이 나옴.\n",
+ "\n",
+ "from torch.utils.data.sampler import *\n",
+ "#Sampler: 데이터셋에서 요소를 샘플링하는 전략을 나타내는 추상 클래스\n",
+ "# DataLoader 클래스와 함께 사용하여 데이터 로드 중 샘플링 동작을 사용자 정의할 수 있음\n",
+ "'''\n",
+ "파이토치는 RandomSampler(요소를 무작위로 샘플링),\n",
+ "SequentialSampler(요소를 순차적으로 샘플링) 및 SubsetRandomSampler(요소의 일부를 무작위로 샘플링)\n",
+ "과 같은 Sampler 클래스의 여러 구현을 제공함'''"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 54
+ },
+ "id": "ojWp5EvN0Vk4",
+ "outputId": "01bd8c0b-8224-4396-f8ec-a2fd3169893d"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "'\\n파이토치는 RandomSampler(요소를 무작위로 샘플링), \\nSequentialSampler(요소를 순차적으로 샘플링) 및 SubsetRandomSampler(요소의 일부를 무작위로 샘플링)\\n과 같은 Sampler 클래스의 여러 구현을 제공함'"
+ ],
+ "application/vnd.google.colaboratory.intrinsic+json": {
+ "type": "string"
+ }
+ },
+ "metadata": {},
+ "execution_count": 7
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "import math\n",
+ "#수학적인 함수 및 상수를 제공\n",
+ "\n",
+ "from collections import defaultdict\n",
+ "#collections.defaultdict : 기본값을 갖는 딕셔너리.\n",
+ "#딕셔너리에 존재하지 않는 키를 조회하면 딕셔너리에 있는 기본값을 반환해줌으로써\n",
+ "#KeyError를 방지하고 코드를 더 간결하게 만듦\n",
+ "\n",
+ "import itertools as it\n",
+ "#반복자(iterator)를 생성하고 연산하는 함수들의 모음\n",
+ "#반복적인 작업을 진행할 때 메모리 사용량을 최소화할 수 있음\n",
+ "\n",
+ "import tqdm\n",
+ "#진행 바 같은 걸 시각화해줌"
+ ],
+ "metadata": {
+ "id": "4B0bQfct0Via"
+ },
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "import random #난수 생성, 무작위 샘플링에서 사용됨\n",
+ "import matplotlib.pyplot as plt #시각화를 위함\n",
+ "from timeit import default_timer as timer\n",
+ "#코드 실행 시간을 측정하는 함수 제공해서, 알고리즘 효율성을 파악할 수 있음"
+ ],
+ "metadata": {
+ "id": "vkgBuBXn0Vbt"
+ },
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "from sklearn.model_selection import KFold #kfold\n",
+ "from sklearn.metrics import f1_score #f1-score\n",
+ "from sklearn.preprocessing import LabelEncoder #라벨인코딩.\n",
+ "from sklearn.preprocessing import StandardScaler #표준화\n",
+ "\n",
+ "from sklearn.metrics import accuracy_score #정확도 측정"
+ ],
+ "metadata": {
+ "id": "V2gPbR1R0VYN"
+ },
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "#transformer 모델들과 tokenizer를 import\n",
+ "##모델들은 다 사전학습되어있음.\n",
+ "from transformers import XLMPreTrainedModel, XLMRobertaModel, XLMRobertaConfig, XLMRobertaTokenizer\n",
+ "#XLMPreTrainedModel : XLM 모델을 기반으로 하는 모든 Pretrained Model의 베이스 클래스\n",
+ "\n",
+ "\n",
+ "from transformers import XLMRobertaForSequenceClassification, BertForSequenceClassification\n",
+ "from transformers import AutoTokenizer\n",
+ "from transformers import BertForSequenceClassification, DistilBertForSequenceClassification, XLNetForSequenceClassification,\\\n",
+ "XLMRobertaForSequenceClassification, XLMForSequenceClassification, RobertaForSequenceClassification"
+ ],
+ "metadata": {
+ "id": "UoCed-c00VWH"
+ },
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "#AdamW 최적화 알고리즘을 사용\n",
+ "from transformers import AdamW\n",
+ "#학습률 조절에 사용하는 함수\n",
+ "from transformers import get_linear_schedule_with_warmup"
+ ],
+ "metadata": {
+ "id": "amuHC6En0VT1"
+ },
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "# class args\n",
+ "class args: #여러 학습 인자의 값을 설정\n",
+ " # ---- factor ---- #\n",
+ " debug=False #디버그 모드 여부\n",
+ " amp = True #mixed precision을 사용할 지 여부\n",
+ " gpu = '0' #GPU 번호\n",
+ "\n",
+ " epochs=10 #에포크 수\n",
+ " batch_size=1 #배치 크기\n",
+ " weight_decay=1e-6 #가중치 감소 값\n",
+ " n_fold=5 #교차 검증(fold) 수\n",
+ " fold=3 # [0, 1, 2, 3, 4] # 원래는 3\n",
+ "\n",
+ " exp_name = 'experiment_name_folder'\n",
+ " dir_ = f'./saved_models/'\n",
+ " pt = 'your_model_name'\n",
+ " max_len = 33 #모델 입력 시퀀스의 최대 길이 설정\n",
+ " #학습률을 설정하는 파라미터\n",
+ " start_lr = 1e-5#1e-3,5e-5 #학습시 초기학습률 값을 의미. 학습 초기에 빠르게 수렴할 가능성이 있지만, 값이 너무 크면 수렴이 불안정해짐\n",
+ " min_lr=1e-6 #학습 중 학습율이 더이상 작아지지 않게 제한하는 값. 해당 값 이하로 떨어지지 않게 보장함.\n",
+ " # ---- Dataset ---- #\n",
+ "\n",
+ " # ---- Else ---- #\n",
+ " num_workers=8\n",
+ " seed=2021\n",
+ " scheduler = None#모델의 학습률을 조정하는 방법을 지정. 방법은 사용하지 않겠지만, 다른 변수를 이용해 학습률 조정 방식을 선택할 수 있음.\n",
+ "\n",
+ "\n",
+ "data_dir = './' # 데이터가 저장된 디렉토리 경로를 나타냄\n",
+ "os.environ[\"CUDA_VISIBLE_DEVICES\"] = args.gpu #args.gpu : 코드 실행 시 지정된 GPU의 인덱스\n",
+ "device = torch.device(f\"cuda\" if torch.cuda.is_available() else \"cpu\") #디바이스 유형 설정.\n",
+ "#만약 CUDA 디바이스가 사용 가능하면 \"cuda\"로 설정하고, 그렇지 않으면 \"cpu\"로 설정함. 이를 통해 디바이스 유형에 맞게 모델을 초기화할 수 있음.\n",
+ "\n",
+ "##모델 학습 시 랜덤 시드를 설정해 재현성을 보장\n",
+ "def set_seeds(seed=42):\n",
+ " random.seed(seed)\n",
+ " os.environ['PYTHONHASHSEED'] = str(seed)\n",
+ " np.random.seed(seed)\n",
+ " torch.manual_seed(seed)\n",
+ " torch.cuda.manual_seed(seed)\n",
+ " torch.cuda.manual_seed_all(seed)\n",
+ " #torch.backends.cudnn : NVIDIA cuDNN 라이브러리를 사용해서 PyTorch 연산의 실행 속도를 높이는 데 사용됨.\n",
+ " #cuDNN : Deep Neural Network 라이브러리, NVIDIA GPU에서 딥러닝 모델을 학습 및 추론할 때 연산속도를 높이기 위한 최적화된 기능을 제공\n",
+ " #torch.backends.cudnn을 쓰면 이런 최적화를 활용해 PyTorch 연산 속도를 높일 수 있음.\n",
+ " torch.backends.cudnn.deterministic = True #기본값이 True. 연산 실행 시간을 단축하고자 cuDNN 라이브러리가 실행 시간을 측정하고 최적화를 수행하는 걸 의미\n",
+ " torch.backends.cudnn.benchmark = False # 연산 결과가 항상 동일하지 않을 수 있다는 걸 의미함. -> 연산 속도 및 학습을 빠르게함\n",
+ "\n",
+ "set_seeds(seed=args.seed)\n"
+ ],
+ "metadata": {
+ "id": "dJFCGJZ50VRR"
+ },
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "# - util - #\n",
+ "def get_learning_rate(optimizer): #현재 학습률을 가져와서 반환하는 함수\n",
+ " lr=[]\n",
+ " for param_group in optimizer.param_groups:\n",
+ " #param_groups : optimizer의 학습률과 weight decay 같은 하이퍼파라미터 관리\n",
+ " lr +=[ param_group['lr'] ]\n",
+ "\n",
+ " assert(len(lr)==1)\n",
+ " #'lr'의 길이가 1인지 확인하는데, 이건 현재 이 코드에서 하나의 학습률만 사용하기 때문임.\n",
+ " lr = lr[0]\n",
+ "\n",
+ " return lr\n",
+ "\n",
+ "def load_data(): #데이터 로드 합수\n",
+ " train=pd.read_csv('./train_data.csv')\n",
+ " test=pd.read_csv('./test_data.csv')\n",
+ "\n",
+ " #일부 column을 지정\n",
+ " train=train[['title','topic_idx']]\n",
+ " test=test[['title']]\n",
+ " #5-fold 교차 검증 수행\n",
+ " from sklearn.model_selection import StratifiedKFold\n",
+ " skf = StratifiedKFold(n_splits=5, random_state=42, shuffle=True)\n",
+ " train['fold'] = -1\n",
+ " for n_fold, (_,v_idx) in enumerate(skf.split(train, train['topic_idx'])):\n",
+ " train.loc[v_idx, 'fold'] = n_fold\n",
+ " #train 데이터에 fold와 id열을 추가\n",
+ " train['id'] = [x for x in range(len(train))]\n",
+ "\n",
+ " return train, test"
+ ],
+ "metadata": {
+ "id": "_xjzqVpL0VOu"
+ },
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "# 전처리"
+ ],
+ "metadata": {
+ "id": "dmD4Lb5YgyoF"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "# make KoBertTokenizer\n",
+ "# 한글을 토큰화할 수 있는 KoBert 모델용 custom tokenizer를 만드는 데 사용함.\n",
+ "import logging\n",
+ "import os\n",
+ "import unicodedata #유니코드 문자 처리를 위함\n",
+ "from shutil import copyfile #파일 복사\n",
+ "\n",
+ "from transformers import PreTrainedTokenizer\n",
+ "\n",
+ "logger = logging.getLogger(__name__)\n",
+ "#logger : 스크립트 실행되는 동안 메세지를 기록하는 데 사용함.\n",
+ "# 로거명을 __name__로 설정하면 현재 모듈명을 로거의 이름으로 사용함\n",
+ "# 이렇게 하면 각 모듈이 자체 로거를 가질 수 있으므로 대규모 애플리케이션에서 로그 메세지를 더 잘 구성할 수 있음.\n",
+ "\n",
+ "VOCAB_FILES_NAMES = {\"vocab_file\": \"tokenizer_78b3253a26.model\", # 어휘파일의 위치 지정\n",
+ " \"vocab_txt\": \"vocab.txt\"} # 어휘에 대한 토큰-index mapping 사전을 구축하는 데 쓰임.\n",
+ "#PRETRAINED_VOCAB_FILES_MAP 변수를 정의하는 코드\n",
+ "# hugging face의 transformer 라이브러리에서 사용되고, 사전 학습된 모델의 tokenizer와 관련된 파일들의 URL을 매핑함\n",
+ "#즉, 해당 모델에 대한 토크나이저와 어휘파일을 쉽게 다운로드할 수 있음.\n",
+ "PRETRAINED_VOCAB_FILES_MAP = {\n",
+ " #vocab_file과 vocab_txt는 각각 토크나이저 파이과 어휘 파일의 URL을 가리키는 사전임\n",
+ " \"vocab_file\": {\n",
+ " \"monologg/kobert\": \"https://s3.amazonaws.com/models.huggingface.co/bert/monologg/kobert/tokenizer_78b3253a26.model\",\n",
+ " #각각의 어휘파일의 링크가 제공됨.\n",
+ " #이 링크들은 Hugging Face에서 제공하는 S3 버킷에서 해당 어휘 파일을 다운로드할 수 있는 주소를 제공함.\n",
+ " \"monologg/kobert-lm\": \"https://s3.amazonaws.com/models.huggingface.co/bert/monologg/kobert-lm/tokenizer_78b3253a26.model\",\n",
+ " \"monologg/distilkobert\": \"https://s3.amazonaws.com/models.huggingface.co/bert/monologg/distilkobert/tokenizer_78b3253a26.model\"\n",
+ " #세 개의 다른 모델명, 각각 해당 모델에 대한 토크나이저와 어휘 파일을 가짐.\n",
+ " },\n",
+ " \"vocab_txt\": {\n",
+ " \"monologg/kobert\": \"https://s3.amazonaws.com/models.huggingface.co/bert/monologg/kobert/vocab.txt\",\n",
+ " \"monologg/kobert-lm\": \"https://s3.amazonaws.com/models.huggingface.co/bert/monologg/kobert-lm/vocab.txt\",\n",
+ " \"monologg/distilkobert\": \"https://s3.amazonaws.com/models.huggingface.co/bert/monologg/distilkobert/vocab.txt\"\n",
+ " }\n",
+ "}\n",
+ "\n",
+ "#KoBERT의 tokenizer와 관련된 변수들을 정의하는 부분\n",
+ "#positional embedding의 크기를 지정\n",
+ "PRETRAINED_POSITIONAL_EMBEDDINGS_SIZES = {\n",
+ " \"monologg/kobert\": 512,\n",
+ " \"monologg/kobert-lm\": 512,\n",
+ " \"monologg/distilkobert\": 512\n",
+ "}\n",
+ "#초기화 설정값 지정.\n",
+ "PRETRAINED_INIT_CONFIGURATION = {\n",
+ " \"monologg/kobert\": {\"do_lower_case\": False}, #do_lower_case를 False로 설정하면 대소문자를 구분함.\n",
+ " \"monologg/kobert-lm\": {\"do_lower_case\": False},\n",
+ " \"monologg/distilkobert\": {\"do_lower_case\": False}\n",
+ "}\n",
+ "\n",
+ "SPIECE_UNDERLINE = u'▁'\n",
+ "#KOBERT tokenizer에서 사용되는 특수 토큰.\n",
+ "#\"__\"은 subword를 나타내며, 이는 단어 일부분이 다른 단어와 함께 subword 단위로 나눠지는 경우 사용됨.\n",
+ "\n",
+ "class KoBertTokenizer(PreTrainedTokenizer):\n",
+ " # KoBertTokenizer 클래스 : 문장 조각 기반 tokenizer를 구축하는 데 사용하는 transformer library의 PreTrainedTokenizer class를 상속받음\n",
+ " \"\"\"\n",
+ " SentencePiece based tokenizer. Peculiarities:\n",
+ " - requires `SentencePiece `_\n",
+ " \"\"\"\n",
+ " vocab_files_names = VOCAB_FILES_NAMES\n",
+ " pretrained_vocab_files_map = PRETRAINED_VOCAB_FILES_MAP\n",
+ " pretrained_init_configuration = PRETRAINED_INIT_CONFIGURATION\n",
+ " max_model_input_sizes = PRETRAINED_POSITIONAL_EMBEDDINGS_SIZES\n",
+ "\n",
+ " def __init__(\n",
+ " self,\n",
+ " vocab_file,\n",
+ " vocab_txt,\n",
+ " do_lower_case=False,\n",
+ " remove_space=True,\n",
+ " keep_accents=False,\n",
+ " unk_token=\"[UNK]\",\n",
+ " sep_token=\"[SEP]\",\n",
+ " pad_token=\"[PAD]\",\n",
+ " cls_token=\"[CLS]\",\n",
+ " mask_token=\"[MASK]\",\n",
+ " **kwargs):\n",
+ " super().__init__(\n",
+ " unk_token=unk_token,\n",
+ " sep_token=sep_token,\n",
+ " pad_token=pad_token,\n",
+ " cls_token=cls_token,\n",
+ " mask_token=mask_token,\n",
+ " **kwargs\n",
+ " )\n",
+ "\n",
+ " # Build vocab\n",
+ " self.token2idx = dict()\n",
+ " self.idx2token = []\n",
+ " with open(vocab_txt, 'r', encoding='utf-8') as f:\n",
+ " #vocabtxt 파일을 열어서 어휘(vocabulary) 만듦.\n",
+ " #해당 텍스트 파일은 각 단어가 한 줄씩 적혀 있음\n",
+ " for idx, token in enumerate(f):\n",
+ " token = token.strip()\n",
+ " self.token2idx[token] = idx\n",
+ " self.idx2token.append(token)\n",
+ "\n",
+ " #self.max_len_single_sentence = self.max_len - 2 # take into account special tokens\n",
+ " #self.max_len_sentences_pair = self.max_len - 3 # take into account special tokens\n",
+ "\n",
+ " #sentencepiece 패키지를 이용해, SentencePiece모델 파일(tokenizer_78b3253a26.model)을 로드함.\n",
+ " #이 모델 파일은 BytePairEncoding 기반의 subword tokenization 정보를 담고 있으며,\n",
+ " #각 subwork token을 생서하기 위한 기준 정보를 담음\n",
+ " try:\n",
+ " import sentencepiece as spm\n",
+ " except ImportError:\n",
+ " logger.warning(\"You need to install SentencePiece to use KoBertTokenizer: https://github.com/google/sentencepiece\"\n",
+ " \"pip install sentencepiece\")\n",
+ "\n",
+ " #KoBertTokenizer 객체의 어휘 변수로 어휘 파일(vocab_txt), SentencePiece 모델 파일(vocab_file) 경로,\n",
+ " #대소문자 구분 여부(do_lower_case), 공백 제거 여부(remove_space), 악센트 유지 여부(keep_accents) 등이 저장됨\n",
+ " self.do_lower_case = do_lower_case\n",
+ " self.remove_space = remove_space\n",
+ " self.keep_accents = keep_accents\n",
+ " self.vocab_file = vocab_file\n",
+ " self.vocab_txt = vocab_txt\n",
+ "\n",
+ " self.sp_model = spm.SentencePieceProcessor() #sentencepiece 패키지를 사용하여 SentencePieceProcessor 객체를 초기화\n",
+ " self.sp_model.Load(vocab_file)\n",
+ "\n",
+ " @property\n",
+ " #메서드를 클래스 속성의 \"getter\"로 정의할 수 있는 파이썬 데코레이터.\n",
+ " #메서드 저의 앞에서 @property를 쓰면 해당 메서드를 클래스 인스턴스의 속성으로 접근 가능함.\n",
+ " #(ex. KoBertTokenizer 클래스에서 vocab_size는 속성이지만,\n",
+ " #KoBertTokenizer 인스턴스의 속성처럼 전근 가능하되 실제 토큰화 어휘의 길이를 반환하는 method)\n",
+ " def vocab_size(self):\n",
+ " return len(self.idx2token)\n",
+ "\n",
+ " def __getstate__(self):\n",
+ " state = self.__dict__.copy()\n",
+ " state[\"sp_model\"] = None\n",
+ " return state\n",
+ "\n",
+ " def __setstate__(self, d):\n",
+ " self.__dict__ = d\n",
+ " try:\n",
+ " import sentencepiece as spm\n",
+ " except ImportError:\n",
+ " logger.warning(\"You need to install SentencePiece to use KoBertTokenizer: https://github.com/google/sentencepiece\"\n",
+ " \"pip install sentencepiece\")\n",
+ " self.sp_model = spm.SentencePieceProcessor()\n",
+ " self.sp_model.Load(self.vocab_file)\n",
+ "\n",
+ " def preprocess_text(self, inputs):\n",
+ " if self.remove_space:\n",
+ " outputs = \" \".join(inputs.strip().split())\n",
+ " else:\n",
+ " outputs = inputs\n",
+ " outputs = outputs.replace(\"``\", '\"').replace(\"''\", '\"')\n",
+ "\n",
+ " if not self.keep_accents:\n",
+ " outputs = unicodedata.normalize('NFKD', outputs)\n",
+ " outputs = \"\".join([c for c in outputs if not unicodedata.combining(c)])\n",
+ " if self.do_lower_case:\n",
+ " outputs = outputs.lower()\n",
+ "\n",
+ " return outputs\n",
+ "\n",
+ " def _tokenize(self, text, return_unicode=True, sample=False):\n",
+ " \"\"\" Tokenize a string. \"\"\"\n",
+ " text = self.preprocess_text(text)\n",
+ "\n",
+ " if not sample:\n",
+ " pieces = self.sp_model.EncodeAsPieces(text)\n",
+ " else:\n",
+ " pieces = self.sp_model.SampleEncodeAsPieces(text, 64, 0.1)\n",
+ " new_pieces = []\n",
+ " for piece in pieces:\n",
+ " if len(piece) > 1 and piece[-1] == str(\",\") and piece[-2].isdigit():\n",
+ " cur_pieces = self.sp_model.EncodeAsPieces(piece[:-1].replace(SPIECE_UNDERLINE, \"\"))\n",
+ " if piece[0] != SPIECE_UNDERLINE and cur_pieces[0][0] == SPIECE_UNDERLINE:\n",
+ " if len(cur_pieces[0]) == 1:\n",
+ " cur_pieces = cur_pieces[1:]\n",
+ " else:\n",
+ " cur_pieces[0] = cur_pieces[0][1:]\n",
+ " cur_pieces.append(piece[-1])\n",
+ " new_pieces.extend(cur_pieces)\n",
+ " else:\n",
+ " new_pieces.append(piece)\n",
+ "\n",
+ " return new_pieces\n",
+ "\n",
+ " def _convert_token_to_id(self, token):\n",
+ " \"\"\" 어휘를 사용하여 아이디의 토큰(문자열/유니코드)을 변환함 \"\"\"\n",
+ " return self.token2idx.get(token, self.token2idx[self.unk_token])\n",
+ "\n",
+ " def _convert_id_to_token(self, index, return_unicode=True):\n",
+ " \"\"\"어휘를 사용하여 인덱스(정수)를 토큰(문자열/유니코드)으로 변환함\"\"\"\n",
+ " return self.idx2token[index]\n",
+ "\n",
+ " def convert_tokens_to_string(self, tokens):\n",
+ " \"\"\"토큰 시퀀스(하위 단어의 문자열)를 단일 문자열로 변환함\"\"\"\n",
+ " out_string = \"\".join(tokens).replace(SPIECE_UNDERLINE, \" \").strip()\n",
+ " return out_string\n",
+ "\n",
+ " def build_inputs_with_special_tokens(self, token_ids_0, token_ids_1=None):\n",
+ " \"\"\"\n",
+ " 특수 토큰을 연결하고 추가하여 시퀀스 또는 시퀀스 쌍에서 시퀀스 분류 작업을 위한 모델 입력을 구축함.\n",
+ " RoBERTa 시퀀스의 형식은 다음과 같다:\n",
+ " single sequence: [CLS] X [SEP]\n",
+ " pair of sequences: [CLS] A [SEP] B [SEP]\n",
+ " \"\"\"\n",
+ " if token_ids_1 is None:\n",
+ " return [self.cls_token_id] + token_ids_0 + [self.sep_token_id]\n",
+ " cls = [self.cls_token_id]\n",
+ " sep = [self.sep_token_id]\n",
+ " return cls + token_ids_0 + sep + token_ids_1 + sep\n",
+ "\n",
+ " def get_special_tokens_mask(self, token_ids_0, token_ids_1=None, already_has_special_tokens=False):\n",
+ " \"\"\"\n",
+ " 특수 토큰이 추가되지 않은 토큰 목록에서 시퀀스 ID를 검색함.\n",
+ " 이 메서드는 토큰화기 ``prepare_for_model`` 또는 ``encode_plus`` 메서드를 사용하여 특수 토큰을 추가할 때 호출됨.\n",
+ " Args:\n",
+ " token_ids_0: ID 목록(특수 토큰을 포함하지 않아야 함)\n",
+ " token_ids_1: 시퀀스 쌍에 대한 시퀀스 ID를 가져올 때 필요한 선택적 ID 목록(특수 토큰을 포함하지 않아야 함)\n",
+ " already_has_special_tokens: (default False) 토큰 목록이 모델에 대한 특수 토큰으로 이미 형식화되어 있으면 True로 설정\n",
+ " Returns:\n",
+ " [0, 1] 범위의 정수 목록: 특수 토큰은 0, 시퀀스 토큰은 1\n",
+ " \"\"\"\n",
+ "\n",
+ " if already_has_special_tokens:\n",
+ " if token_ids_1 is not None:\n",
+ " raise ValueError(\n",
+ " \"You should not supply a second sequence if the provided sequence of \"\n",
+ " \"ids is already formated with special tokens for the model.\"\n",
+ " )\n",
+ " return list(map(lambda x: 1 if x in [self.sep_token_id, self.cls_token_id] else 0, token_ids_0))\n",
+ "\n",
+ " if token_ids_1 is not None:\n",
+ " return [1] + ([0] * len(token_ids_0)) + [1] + ([0] * len(token_ids_1)) + [1]\n",
+ " return [1] + ([0] * len(token_ids_0)) + [1]\n",
+ "\n",
+ " def create_token_type_ids_from_sequences(self, token_ids_0, token_ids_1=None):\n",
+ " \"\"\"\n",
+ " 전달된 두 시퀀스로부터 시퀀스 쌍 분류 작업에 사용할 마스크를 만듦.\n",
+ " BERT 시퀀스 쌍 마스크의 형식은 다음과 같음:\n",
+ " 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1\n",
+ " | first sequence | second sequence\n",
+ " token_ids_1이 None이면 마스크의 첫 번째 부분(0)만 반환함\n",
+ " \"\"\"\n",
+ " sep = [self.sep_token_id]\n",
+ " cls = [self.cls_token_id]\n",
+ " if token_ids_1 is None:\n",
+ " return len(cls + token_ids_0 + sep) * [0]\n",
+ " return len(cls + token_ids_0 + sep) * [0] + len(token_ids_1 + sep) * [1]\n",
+ "\n",
+ " def save_vocabulary(self, save_directory):\n",
+ " \"\"\" 문장 조각 어휘(원본 파일 복사)와 특수 토큰 파일을 디렉토리에 저장\"\"\"\n",
+ " if not os.path.isdir(save_directory):\n",
+ " logger.error(\"Vocabulary path ({}) should be a directory\".format(save_directory))\n",
+ " return\n",
+ "\n",
+ " # 1. Save sentencepiece model\n",
+ " out_vocab_model = os.path.join(save_directory, VOCAB_FILES_NAMES[\"vocab_file\"])\n",
+ "\n",
+ " if os.path.abspath(self.vocab_file) != os.path.abspath(out_vocab_model):\n",
+ " copyfile(self.vocab_file, out_vocab_model)\n",
+ "\n",
+ " # 2. Save vocab.txt\n",
+ " index = 0\n",
+ " out_vocab_txt = os.path.join(save_directory, VOCAB_FILES_NAMES[\"vocab_txt\"])\n",
+ " with open(out_vocab_txt, \"w\", encoding=\"utf-8\") as writer:\n",
+ " for token, token_index in sorted(self.token2idx.items(), key=lambda kv: kv[1]):\n",
+ " if index != token_index:\n",
+ " logger.warning(\n",
+ " \"{}에 어휘 저장:어휘 인덱스가 연속적이지 않음.\"\n",
+ " \" 어휘가 손상되지 않았는지 확인하세요!\".format(out_vocab_txt)\n",
+ " )\n",
+ " index = token_index\n",
+ " writer.write(token + \"\\n\")\n",
+ " index += 1\n",
+ "\n",
+ " return out_vocab_model, out_vocab_txt"
+ ],
+ "metadata": {
+ "id": "WJTbZzMm0VMS"
+ },
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "#bert_tokenizer는 preprocessing_train() 및 preprocessing_test() 함수에서 각 문장을 토큰화 및 인코딩하는 데 사용됨.\n",
+ "#이 함수는 문장, MAX_LEN 매개변수, 토큰화 객체를 입력으로 받아 input_ids, attention_mask, token_type_ids 텐서를 반환함\n",
+ "def bert_tokenizer(sent, MAX_LEN, tokenizer):\n",
+ "\n",
+ " encoded_dict=tokenizer.encode_plus(\n",
+ " text = sent,\n",
+ " add_special_tokens=True,\n",
+ " max_length=MAX_LEN,\n",
+ " pad_to_max_length=True,\n",
+ " return_attention_mask=True,\n",
+ " truncation = True)\n",
+ "\n",
+ " input_id=encoded_dict['input_ids']\n",
+ " attention_mask=encoded_dict['attention_mask']\n",
+ " #token_type_id = encoded_dict['token_type_ids']\n",
+ " token_type_id = 0\n",
+ "\n",
+ " return input_id, attention_mask, token_type_id\n",
+ "#텍스트 분류 작업을 위해서, 각각 훈련데이터와 테스트 데이터의 전처리 단계를 수행하는\n",
+ "#preprocessing_train() 및 preprocessing_test()의 두 가지 함수를 정의\n",
+ "\n",
+ "'''\n",
+ "이 함수들은 BERT 기반 토큰화기를 사용하여 입력 텍스트를 토큰화하고\n",
+ "토큰을 BERT 기반 모델을 미세 조정하는 데 필요한 입력인 input_ids, attention_masks, token_type_ids로 인코딩함\n",
+ "\n",
+ "인코딩된 입력은 훈련 세트의 경우 train_data, 테스트 세트의 경우 test_data라는 딕셔너리에 저장된 다음 피클 파일 형식으로 디스크에 저장됨\n",
+ "파일 저장 경로는 사전 학습된 모델 이름 또는 디렉터리인 args.pt 매개변수를 기반으로 함.\n",
+ "'''\n",
+ "def preprocessing_train():\n",
+ "\n",
+ " pt = args.pt#'monologg/kobert'\n",
+ "\n",
+ " if 'kobert' in pt:\n",
+ " tokenizer = KoBertTokenizer.from_pretrained(pt, cache_dir='bert_ckpt', do_lower_case=False) #do_lower_case : 모든 문자를 소문자로 변환할지 여부설정\n",
+ " print('load kobert')\n",
+ " else:\n",
+ " tokenizer = AutoTokenizer.from_pretrained(args.pt)\n",
+ "\n",
+ " MAX_LEN = args.max_len\n",
+ " #MAX_LEN 매개변수는 입력 시퀀스의 최대 길이를 지정하며, 토큰화기는 이 길이에 맞게 시퀀스를 자르거나 패딩\n",
+ " train = pd.read_csv('./train_data.csv')\n",
+ " train=train[['title','topic_idx']]\n",
+ "\n",
+ " input_ids =[]\n",
+ " attention_masks =[]\n",
+ " token_type_ids =[]\n",
+ " train_data_labels = []\n",
+ "\n",
+ " for train_sent, train_label in tqdm.tqdm(zip(train['title'], train['topic_idx'])):\n",
+ " try:\n",
+ " input_id, attention_mask,_ = bert_tokenizer(train_sent, MAX_LEN=MAX_LEN, tokenizer=tokenizer)\n",
+ "\n",
+ " input_ids.append(input_id)\n",
+ " attention_masks.append(attention_mask)\n",
+ " token_type_ids.append(0)\n",
+ " #########################################\n",
+ " train_data_labels.append(train_label)\n",
+ "\n",
+ " except Exception as e:\n",
+ " print(e)\n",
+ " pass\n",
+ "\n",
+ " train_input_ids=np.array(input_ids, dtype=int)\n",
+ " train_attention_masks=np.array(attention_masks, dtype=int)\n",
+ " train_token_type_ids=np.array(token_type_ids, dtype=int)\n",
+ " ###########################################################\n",
+ " train_inputs=(train_input_ids, train_attention_masks, train_token_type_ids)\n",
+ " train_labels=np.asarray(train_data_labels, dtype=np.int32)\n",
+ "\n",
+ " # save\n",
+ " train_data = {}\n",
+ "\n",
+ " train_data['input_ids'] = train_input_ids\n",
+ " train_data['attention_mask'] = train_attention_masks\n",
+ " train_data['token_type_ids'] = train_token_type_ids\n",
+ " train_data['targets'] = np.asarray(train_data_labels, dtype=np.int32)\n",
+ "\n",
+ " os.makedirs(f'./data/{pt}/', exist_ok=True)\n",
+ " with open(f'./data/{pt}/train_data_{MAX_LEN}.pickle', 'wb') as f:\n",
+ " pickle.dump(train_data, f, pickle.HIGHEST_PROTOCOL)\n",
+ "\n",
+ "def preprocessing_test():\n",
+ "\n",
+ " pt = args.pt\n",
+ " if 'kobert' in pt:\n",
+ " tokenizer = KoBertTokenizer.from_pretrained(pt, cache_dir='bert_ckpt', do_lower_case=False)\n",
+ " print('load kobert')\n",
+ " else:\n",
+ " tokenizer = AutoTokenizer.from_pretrained(args.pt)\n",
+ " MAX_LEN = args.max_len\n",
+ "\n",
+ " test = pd.read_csv('./test_data.csv')\n",
+ " test=test[['title']]\n",
+ "\n",
+ " input_ids =[]\n",
+ " attention_masks =[]\n",
+ " token_type_ids =[]\n",
+ "\n",
+ " for test_sent in tqdm.tqdm(test['title']):\n",
+ " try:\n",
+ " input_id, attention_mask,_ = bert_tokenizer(test_sent, MAX_LEN=MAX_LEN, tokenizer=tokenizer)\n",
+ "\n",
+ " input_ids.append(input_id)\n",
+ " attention_masks.append(attention_mask)\n",
+ " token_type_ids.append(0)\n",
+ " #########################################\n",
+ "\n",
+ " except Exception as e:\n",
+ " print(e)\n",
+ " pass\n",
+ "\n",
+ " test_input_ids=np.array(input_ids, dtype=int)\n",
+ " test_attention_masks=np.array(attention_masks, dtype=int)\n",
+ " test_token_type_ids=np.array(token_type_ids, dtype=int)\n",
+ " ###########################################################\n",
+ " test_inputs=(test_input_ids, test_attention_masks, test_token_type_ids)\n",
+ "\n",
+ "\n",
+ " # save\n",
+ " test_data = {}\n",
+ "\n",
+ " test_data['input_ids'] = test_input_ids\n",
+ " test_data['attention_mask'] = test_attention_masks\n",
+ " test_data['token_type_ids'] = test_token_type_ids\n",
+ "\n",
+ " os.makedirs(f'./data/{pt}/', exist_ok=True)\n",
+ " with open(f'./data/{pt}/test_data_{MAX_LEN}.pickle', 'wb') as f:\n",
+ " pickle.dump(test_data, f, pickle.HIGHEST_PROTOCOL)\n",
+ ""
+ ],
+ "metadata": {
+ "id": "-MwNsSJi0VJs"
+ },
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "!pip install sentencepiece # spm은 KoBertTokenizer class의 일부이고, args.pt 변수 값에 따라 다른 토크나이저가 선택됨.\n",
+ "#오류 메세지가 떴을 때는 KoBertTokenizer 대신에 BertTokenizer가 선택되어 있는데, 이는 KoBertTokenizer가 의존하는 SentencePiece 패키지가 안 설치 되어 있기 때문임"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "9d9LCeGsiPWN",
+ "outputId": "02cb6a2c-fa51-4694-c12b-16557b5ef29a"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/\n",
+ "Collecting sentencepiece\n",
+ " Downloading sentencepiece-0.1.99-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.3/1.3 MB\u001b[0m \u001b[31m58.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[?25hInstalling collected packages: sentencepiece\n",
+ "Successfully installed sentencepiece-0.1.99\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "from google.colab import drive\n",
+ "drive.mount('/content/drive')"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "6RwJgBwHktYI",
+ "outputId": "510c517d-ff1f-478e-c643-8ea3c6191974"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "Mounted at /content/drive\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "%cd /content/drive/MyDrive/JJJJ"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "jM-QoDYOijaW",
+ "outputId": "68375f9b-4b62-477f-f9a2-b840ac66fd0e"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "/content/drive/MyDrive/JJJJ\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "##이름과 입력값을 보면 주어진 사전 학습된 모델에 사용하기 위해 훈련 및 테스트 데이터에 대해 일종의 전처리를 수행##\n",
+ "for pt, max_len in zip(['monologg/kobert','klue/roberta-base','klue/roberta-small','klue/roberta-large','xlm-roberta-large',\n",
+ " 'bert-base-multilingual-uncased', 'klue/roberta-large'],[33,33,33,33,33,33,28]):\n",
+ " #각 반복마다 args.max_len 및 args.pt 변수를 각각 max_len 및 pt 값으로 설정\n",
+ " args.max_len = max_len\n",
+ " args.pt = pt\n",
+ " #그런 다음 업데이트된 args 변수를 사용하여 preprocessing_train() 및 preprocessing_test() 함수를 호출\n",
+ " preprocessing_train()\n",
+ " preprocessing_test()\n",
+ " #마지막으로 현재 모델에 대한 전처리가 완료되었음을 나타내는 메시지를 인쇄\n",
+ " print(f'{args.pt} 모델 전처리 완료')"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 1000,
+ "referenced_widgets": [
+ "f534bed4fe7448eb91578f67245ecac0",
+ "d4a2359a15044033884b4313f9d1d778",
+ "bbaf30af30ef4d189ed4ab329af1d3e1",
+ "322f25b0c08449c78112c4fd752077d6",
+ "8d191cda699440f18333e6c25ce71b7b",
+ "b01efc3853224067a3584eb63d0bc97e",
+ "372ded0a98fd4d8783173078d7f24414",
+ "19aec36478e0404d8ba498e8fc8a1120",
+ "e919abc447004aa49fd6e1f869f2ed8f",
+ "303ad95a73474fbfa05b7e660b71e40c",
+ "21db930fea3a4b40bcf1d63a7e854f7d",
+ "390b2fcd657341a79ecfd256645f73e1",
+ "fdcda5462b2143e884483b74dd1b2178",
+ "3b2c7b6fdc7d4ea99c32b423da1bd1da",
+ "92ecd0701a22436a830b175113593802",
+ "4a3f750bdac0421fa08d78c690125efe",
+ "c9ea6efce01f4ab6ba7a0f885dd800f3",
+ "da93d0796c4a4399bdb04ef59a95e64a",
+ "fa1f641602514df9bde52d48d128b217",
+ "8a038ad0cc6d4d2ab85d26873850fa07",
+ "422ccb4667344e4e97ef42d934b6a1e1",
+ "f7ba9115ee924ef9a4f0899c0dca7d4a",
+ "1f715fa597de44a2901233ac30bb1fc7",
+ "8d2ef0665fd248f28da08d0732c75af6",
+ "6db878b2c84e41cf8a699dea906108df",
+ "b98abcc25ec24032931a83091b34b19b",
+ "1f397aa7f5f444c2bfbe68a7cdb868da",
+ "69cd57825814465d94ce332a98b4df19",
+ "8f92a913526740078249fa0cca8a6663",
+ "897bfc44e06d4ed5a6501692b69f16b8",
+ "b923d69cdb6e485db6ac7f3d055a70fb",
+ "b47f6eb794384c00b6a7968e7a27a485",
+ "3fef3b41b8a645269a1de3d3889044e1",
+ "e7dc43c222ac4262aa0fd57f6d931a9e",
+ "3bd178a4f5d74aef8507a37bff6c47c9",
+ "fc6f190d3d51445a833748784c696cdd",
+ "ab1b1102c9eb4702a1121dd5d48c2323",
+ "fb9ac1c4c4054a44b068346d59ba288c",
+ "ee68720b95ff44c4b1d67e3c83eda925",
+ "eefa3cd6233d432bb55792d1d89d6b20",
+ "6dc4e8954aae4dc98a22b270dce23708",
+ "b6b4f7dfc89b4c99ad994022d641309b",
+ "68733a2cd91947b993ed95de1a65e83a",
+ "433ac7c1614549e5a8b33fb1ca7cc7f2",
+ "3064f9a643454426bb7e9cbf385b4123",
+ "8ef05693bdc747abb89173918573996a",
+ "d60988752d5c4ea89115a23e943140b1",
+ "d33e4b1be84d4efdbe69b66c6a1a01f3",
+ "8ae6497852e24e4ab7b2a3cc745d60fa",
+ "dce7fb5c4d2a43c9a138c15b94d28cfd",
+ "28b0f48d418341d19b852d28fe9789c2",
+ "a20d5966e27a4a2bb8c5512a1ee9318d",
+ "e046044c2a8042909b10f4518bad0585",
+ "fdcaa24b9c6741d6aec6c3c0c6689dc0",
+ "91126e3887684238b4b27db5983bc5ac",
+ "280d26a4bf874576aa9845120dd9ceab",
+ "4521a1414ac94897823e393f56d99ccf",
+ "abc3e5ba446946d9833c42c9187bf12f",
+ "d5bcb3035f054a77982bd1bf3b4feef4",
+ "237dda0559974f5daa75953086eedd27",
+ "4f1d49556c5e4dc38d9d174cc12e453c",
+ "c0959ea8a6e54b21b0b2f05fdfb2cb8a",
+ "cf5951dcf9e84383aff0e075f88dd72f",
+ "c3c2df63508e4c1ea38c204c8c7db566",
+ "79d65b2fd5de4ca1ae4555819f814467",
+ "5d0cd69018d54263b9d120bca287c92b",
+ "59a8f09e54904ac08e2da1fc7265203c",
+ "764ccc6a164e4230afc7542168c66a8f",
+ "a11b7e82dcb746ebb08fab45da17be5c",
+ "d0a26f193e3d4bbca46d72f952aa5c83",
+ "8a75fd69f0324cde94e4250adbf6b1c9",
+ "e012c027c4394690aaa0092df279d934",
+ "9eccb73fa6004bfca88549eb33d5c7f8",
+ "16b2b5f60f874896b7834ee41f41d1db",
+ "78134bba456a448d960f55b54a4df0b4",
+ "bedf16d0a93a42019a3971b4a6b3a8ad",
+ "97fbe0677ea84a318d0b9c713013fef9",
+ "36cc854c669f44bc85a37d708a27b2ae",
+ "ccf8d25ac6e34a0faf7226c4109a571a",
+ "cb9b2de1687e46d09e44a1b8d6b316c2",
+ "bca3ddc918434d84a31498d284400c28",
+ "d520e508c89449fb9795d721f43d93b5",
+ "e7a5ca4ca8cf403d8f8c5404269f7fde",
+ "76cefa5bb4a24d1f9ba5b5f3aede7a92",
+ "c14e1e88ac9c4ebea4df6764e26d317c",
+ "b2ebe96e233a43adb18d52cccce39dba",
+ "7bd9d93bd99e40cca8e701bb50f3f0fb",
+ "b985a1a576774607bf205de2a30aaf0c",
+ "109505da6b0f4464aab035b410b1e156",
+ "e68da79ecc304fbda9fd988e3a4472c5",
+ "1d839974325744f594f22a5cb8c47223",
+ "c4ea9bee06294000a176fb4db1e0bca6",
+ "e4dcc950c9064f488cf267ed10c949c2",
+ "f596eba71ba64a509f2537fafd82a8dc",
+ "ea57c949c3b14925b725066e1e68594e",
+ "212c1e3e34294785ba0bfb555dd6d4ad",
+ "fbcb67df6a344c34874de5d2c1fd1792",
+ "78c279b4ac444b7da318b3cc6cc9d870",
+ "e924e67dfcbb490c97b793d012d37dba",
+ "f801c9352ff1492f92da2d18cf4b6bde",
+ "59b847e47b1d4d708b1ca589d842c17c",
+ "2f0ed7d4395545498fc98d6f0c16cd32",
+ "d65b52eb1c61429cb4b94b8712dbc950",
+ "f67b2ebcb49343818eadeea6450dfe2a",
+ "dffeb6ace5d64fbd8008ae089b80f06f",
+ "4be5360d35554e859f529f945c215a41",
+ "66e33eba5ec1429583678e6947736b95",
+ "e847471da91f4f29a5626f432f8a4020",
+ "e8d474f7bb5248d2b8ff1bca96b5206c",
+ "50a314c64eae4daabf8b5a078b74a2a6",
+ "3a97b8cc75d74828b853d09b43300734",
+ "8b9f305975da4bcd9e3fe15630975e4c",
+ "737ddcd484d644069213c24fa5e1eac2",
+ "ab3d48b9025e4400aaa9ecbaeeb06299",
+ "6148576ce5a6468ea3c6f96779609c00",
+ "1f2dccf4784446f68adb4b2271934068",
+ "efe0e408da784f3c9cbfad1a3259a2dc",
+ "2bddec1a008345fa96389371feb5c703",
+ "c7a2a72b5ebc48ff946b4e4fe309cb7f",
+ "90917be6bb2347f2bb0f1585c679401b",
+ "f7953b75bfe2473cbbf0ba0b12084efb",
+ "048ec54d70fe4a509f74bc351d8019fa",
+ "cece75dadfe34dc29e63e4a6dc1b598d",
+ "ed01c515ab7845c38969200931734a8f",
+ "63d4c118424e481d8ce4f3fb876914bf",
+ "ae206a6008ca4818acfcdf8b73fba0f7",
+ "f72c2db5c3624c26b68ed073ade0739d",
+ "643d9d6b4f4e44ffbfb64e10230e3041",
+ "4e67ea28fcf14a3cbfad5b12834702d6",
+ "82d4780447df49829a598538484ee7e3",
+ "606cc334601e4c6ebdd62b5dbbd9dba3",
+ "fde7538b33d44263b71d529ef4dfe5c6",
+ "e6dce7e4829b4689a2c3cf86cf4384ba",
+ "008d4a83a1c64ea2bd938a78bba59d5f",
+ "efd95703dccb4f30834e3e26b1bc355e",
+ "0dcec34d40374f6cba16f30aab183953",
+ "74770bf2a57348c0ac16dd6619a8c86d",
+ "6c8c01e4db904a019957a26da2957bf7",
+ "8805b35f396545b686f918ec2ea1edf3",
+ "605d392a7d2a4cd5b85e632057041385",
+ "d8ef2574e20746a893e2b87f25694966",
+ "70fce17f9a9848d98f00fb5d85512e97",
+ "b725a47baaaf4cf49ae44ef82697d652",
+ "8c9f1051e90c4222924af3ac004e70af",
+ "963b1cdf94e64114b2911a1a43ed5fac",
+ "25c080fad710488281bef0dd0e0c09c6",
+ "b5eafc0b43844767ba3cdfbf225479e3",
+ "3953720dcc724bf7ae56ef88b3fadf02",
+ "758741b553894d928e48428f285aa554",
+ "c79f2c6c905e469292ed6af7345fea3b",
+ "78095a6716024141a82f7f643836bac3",
+ "ffc86b8e357e4225ae3f353b57a64783",
+ "968e79bef9944067bf0f12f557318429",
+ "7fdc53fd54e04fff9d7ea20abeb75a5d",
+ "c4bb1d422fca4f839b5adb42ce7f9932",
+ "f2be641755d04335a4efdd30a21de1ec",
+ "d500010b5a0a44d5be107c3dfe4bdc67",
+ "6aa5f8427f86489ba9bf7b29306568ac",
+ "78c672dcb2a84c679a4c1268149f7916",
+ "0176c86ef802424e8a0be51a775f6a6f",
+ "34be8750f2264bb2accd4d5e469e3fd7",
+ "522bf04451424070be58baa6ea546ee2",
+ "d673f7ecc3224ff581ac592a515a8217",
+ "1650f6430e544abc9c708ad162d88040",
+ "95bacaa3ed4744499a33db615d5da6bc",
+ "b79cd2a7a6fb490183d4e3454b8bf61f",
+ "c1b533d4eb464df8b6a697b2eeee50cd",
+ "fed9189d75e4400e9cbf6af091e9ab6c",
+ "7c64230bd8354c7da7f8ba40fb18d244",
+ "e5105e48878545f899a995b7a19a526c",
+ "dae8c2e3d4df4c1c9c394ca8db948f7e",
+ "f3d7596cd7f442108b0f300a97432b9e",
+ "8d2368144ac54bb8bf5eea46ae20e582",
+ "6087f9058e2a4cb683e73ede9985ba0f",
+ "e4d90b843113418f8ad39cebac91cad6",
+ "d6993e6319f64dd3a1531ca1812dc399",
+ "9e311b6073454fbaa1a978ffeff8e6df",
+ "99ebac6b399f4ec1a78f4724b8450c6d",
+ "f8a359d73f214f04bdbe2c40a65e18bc",
+ "c0ed1c0c238440558c134a9c6a4adfc1",
+ "d55828c2f0bf43cf9174693ec21b943c",
+ "3c1edbdb5f54438f9a7ba0ac211ad8c3",
+ "0e93be16aa2b4caa887a7fe2a042fad6",
+ "e7f0be2962db455d9b377b41cb860b5c",
+ "d4ce6bd48c5e4589a987b413143980b9",
+ "fa0a160cdcbc4650a833829071ad2eb7",
+ "b708d01208c34885a2bf1ba4325893f3",
+ "e2df55b1f3db4f24af648f5e129f0825",
+ "b4c3fe1da5604b48aa8e9ec1ee767f84",
+ "7a51cb21a8fb47b1a18d867d01f4128a",
+ "fb8de23dbba34e518daaa54895b4b8fb",
+ "a4a0f00e1e44457db1ee8c14b900efb6",
+ "0bf796104ab347419b421aba80e2ea5e",
+ "8ed1b4ca0aee424098570b9d8b03e5b0",
+ "f55fdfd49ee8474980d2ba1bef0c2733",
+ "570805a38b0149adb37596f90fdd5f39",
+ "0dccee61f95a4440bf896c4f7839c90e",
+ "dc55bc95895048c68b595bb62e417350",
+ "c0da66b3026d48aa96fa9c551e65f3df",
+ "2edbf2b488604680b4576c5036d2294e",
+ "52349d67ea8e459ba5e4624af5b5101f",
+ "378b2512547a432c96a7cbfbcaaa0b10",
+ "35f98de8bd3d46898a67761b6fe62b03",
+ "7a3a9cb9b3e84565bffdf683a213903b",
+ "1c98373c13b640c68fb607e7970247a9",
+ "5f791941a45c4bf691deb7c8c48552cc",
+ "aaa92270fdc64d5d9c9f5e84f9284f0a",
+ "ddbfa7dd6e8a43a8a4147c50e33a4548",
+ "4b132f43e5b749dd84dc614abbe76672"
+ ]
+ },
+ "id": "EjpXPdEG0U9U",
+ "outputId": "1bd08b75-6d28-41c2-8aa5-7a2c20aa2996"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stderr",
+ "text": [
+ "The tokenizer class you load from this checkpoint is not the same type as the class this function is called from. It may result in unexpected tokenization. \n",
+ "The tokenizer class you load from this checkpoint is 'BertTokenizer'. \n",
+ "The class this function is called from is 'KoBertTokenizer'.\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "load kobert\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "name": "stderr",
+ "text": [
+ "0it [00:00, ?it/s]/usr/local/lib/python3.10/dist-packages/transformers/tokenization_utils_base.py:2354: FutureWarning: The `pad_to_max_length` argument is deprecated and will be removed in a future version, use `padding=True` or `padding='longest'` to pad to the longest sequence in the batch, or use `padding='max_length'` to pad to a max length. In this case, you can give a specific length with `max_length` (e.g. `max_length=45`) or leave max_length to None to pad to the maximal input size of the model (e.g. 512 for Bert).\n",
+ " warnings.warn(\n",
+ "45654it [00:15, 2856.12it/s]\n",
+ "The tokenizer class you load from this checkpoint is not the same type as the class this function is called from. It may result in unexpected tokenization. \n",
+ "The tokenizer class you load from this checkpoint is 'BertTokenizer'. \n",
+ "The class this function is called from is 'KoBertTokenizer'.\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "load kobert\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "name": "stderr",
+ "text": [
+ " 0%| | 0/9131 [00:00, ?it/s]/usr/local/lib/python3.10/dist-packages/transformers/tokenization_utils_base.py:2354: FutureWarning: The `pad_to_max_length` argument is deprecated and will be removed in a future version, use `padding=True` or `padding='longest'` to pad to the longest sequence in the batch, or use `padding='max_length'` to pad to a max length. In this case, you can give a specific length with `max_length` (e.g. `max_length=45`) or leave max_length to None to pad to the maximal input size of the model (e.g. 512 for Bert).\n",
+ " warnings.warn(\n",
+ "100%|██████████| 9131/9131 [00:02<00:00, 3044.79it/s]\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "monologg/kobert 모델 전처리 완료\n"
+ ]
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ "Downloading (…)okenizer_config.json: 0%| | 0.00/375 [00:00, ?B/s]"
+ ],
+ "application/vnd.jupyter.widget-view+json": {
+ "version_major": 2,
+ "version_minor": 0,
+ "model_id": "f534bed4fe7448eb91578f67245ecac0"
+ }
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ "Downloading (…)solve/main/vocab.txt: 0%| | 0.00/248k [00:00, ?B/s]"
+ ],
+ "application/vnd.jupyter.widget-view+json": {
+ "version_major": 2,
+ "version_minor": 0,
+ "model_id": "390b2fcd657341a79ecfd256645f73e1"
+ }
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ "Downloading (…)/main/tokenizer.json: 0%| | 0.00/752k [00:00, ?B/s]"
+ ],
+ "application/vnd.jupyter.widget-view+json": {
+ "version_major": 2,
+ "version_minor": 0,
+ "model_id": "1f715fa597de44a2901233ac30bb1fc7"
+ }
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ "Downloading (…)cial_tokens_map.json: 0%| | 0.00/173 [00:00, ?B/s]"
+ ],
+ "application/vnd.jupyter.widget-view+json": {
+ "version_major": 2,
+ "version_minor": 0,
+ "model_id": "e7dc43c222ac4262aa0fd57f6d931a9e"
+ }
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "stream",
+ "name": "stderr",
+ "text": [
+ "0it [00:00, ?it/s]/usr/local/lib/python3.10/dist-packages/transformers/tokenization_utils_base.py:2354: FutureWarning: The `pad_to_max_length` argument is deprecated and will be removed in a future version, use `padding=True` or `padding='longest'` to pad to the longest sequence in the batch, or use `padding='max_length'` to pad to a max length. In this case, you can give a specific length with `max_length` (e.g. `max_length=45`) or leave max_length to None to pad to the maximal input size of the model (e.g. 512 for Bert).\n",
+ " warnings.warn(\n",
+ "45654it [00:04, 10252.58it/s]\n",
+ " 0%| | 0/9131 [00:00, ?it/s]/usr/local/lib/python3.10/dist-packages/transformers/tokenization_utils_base.py:2354: FutureWarning: The `pad_to_max_length` argument is deprecated and will be removed in a future version, use `padding=True` or `padding='longest'` to pad to the longest sequence in the batch, or use `padding='max_length'` to pad to a max length. In this case, you can give a specific length with `max_length` (e.g. `max_length=45`) or leave max_length to None to pad to the maximal input size of the model (e.g. 512 for Bert).\n",
+ " warnings.warn(\n",
+ "100%|██████████| 9131/9131 [00:01<00:00, 7815.03it/s]\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "klue/roberta-base 모델 전처리 완료\n"
+ ]
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ "Downloading (…)okenizer_config.json: 0%| | 0.00/375 [00:00, ?B/s]"
+ ],
+ "application/vnd.jupyter.widget-view+json": {
+ "version_major": 2,
+ "version_minor": 0,
+ "model_id": "3064f9a643454426bb7e9cbf385b4123"
+ }
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ "Downloading (…)solve/main/vocab.txt: 0%| | 0.00/248k [00:00, ?B/s]"
+ ],
+ "application/vnd.jupyter.widget-view+json": {
+ "version_major": 2,
+ "version_minor": 0,
+ "model_id": "280d26a4bf874576aa9845120dd9ceab"
+ }
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ "Downloading (…)/main/tokenizer.json: 0%| | 0.00/752k [00:00, ?B/s]"
+ ],
+ "application/vnd.jupyter.widget-view+json": {
+ "version_major": 2,
+ "version_minor": 0,
+ "model_id": "59a8f09e54904ac08e2da1fc7265203c"
+ }
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ "Downloading (…)cial_tokens_map.json: 0%| | 0.00/173 [00:00, ?B/s]"
+ ],
+ "application/vnd.jupyter.widget-view+json": {
+ "version_major": 2,
+ "version_minor": 0,
+ "model_id": "36cc854c669f44bc85a37d708a27b2ae"
+ }
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "stream",
+ "name": "stderr",
+ "text": [
+ "0it [00:00, ?it/s]/usr/local/lib/python3.10/dist-packages/transformers/tokenization_utils_base.py:2354: FutureWarning: The `pad_to_max_length` argument is deprecated and will be removed in a future version, use `padding=True` or `padding='longest'` to pad to the longest sequence in the batch, or use `padding='max_length'` to pad to a max length. In this case, you can give a specific length with `max_length` (e.g. `max_length=45`) or leave max_length to None to pad to the maximal input size of the model (e.g. 512 for Bert).\n",
+ " warnings.warn(\n",
+ "45654it [00:04, 10157.34it/s]\n",
+ " 0%| | 0/9131 [00:00, ?it/s]/usr/local/lib/python3.10/dist-packages/transformers/tokenization_utils_base.py:2354: FutureWarning: The `pad_to_max_length` argument is deprecated and will be removed in a future version, use `padding=True` or `padding='longest'` to pad to the longest sequence in the batch, or use `padding='max_length'` to pad to a max length. In this case, you can give a specific length with `max_length` (e.g. `max_length=45`) or leave max_length to None to pad to the maximal input size of the model (e.g. 512 for Bert).\n",
+ " warnings.warn(\n",
+ "100%|██████████| 9131/9131 [00:00<00:00, 10378.84it/s]\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "klue/roberta-small 모델 전처리 완료\n"
+ ]
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ "Downloading (…)okenizer_config.json: 0%| | 0.00/375 [00:00, ?B/s]"
+ ],
+ "application/vnd.jupyter.widget-view+json": {
+ "version_major": 2,
+ "version_minor": 0,
+ "model_id": "109505da6b0f4464aab035b410b1e156"
+ }
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ "Downloading (…)solve/main/vocab.txt: 0%| | 0.00/248k [00:00, ?B/s]"
+ ],
+ "application/vnd.jupyter.widget-view+json": {
+ "version_major": 2,
+ "version_minor": 0,
+ "model_id": "f801c9352ff1492f92da2d18cf4b6bde"
+ }
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ "Downloading (…)/main/tokenizer.json: 0%| | 0.00/752k [00:00, ?B/s]"
+ ],
+ "application/vnd.jupyter.widget-view+json": {
+ "version_major": 2,
+ "version_minor": 0,
+ "model_id": "3a97b8cc75d74828b853d09b43300734"
+ }
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ "Downloading (…)cial_tokens_map.json: 0%| | 0.00/173 [00:00, ?B/s]"
+ ],
+ "application/vnd.jupyter.widget-view+json": {
+ "version_major": 2,
+ "version_minor": 0,
+ "model_id": "048ec54d70fe4a509f74bc351d8019fa"
+ }
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "stream",
+ "name": "stderr",
+ "text": [
+ "0it [00:00, ?it/s]/usr/local/lib/python3.10/dist-packages/transformers/tokenization_utils_base.py:2354: FutureWarning: The `pad_to_max_length` argument is deprecated and will be removed in a future version, use `padding=True` or `padding='longest'` to pad to the longest sequence in the batch, or use `padding='max_length'` to pad to a max length. In this case, you can give a specific length with `max_length` (e.g. `max_length=45`) or leave max_length to None to pad to the maximal input size of the model (e.g. 512 for Bert).\n",
+ " warnings.warn(\n",
+ "45654it [00:06, 7223.76it/s] \n",
+ " 0%| | 0/9131 [00:00, ?it/s]/usr/local/lib/python3.10/dist-packages/transformers/tokenization_utils_base.py:2354: FutureWarning: The `pad_to_max_length` argument is deprecated and will be removed in a future version, use `padding=True` or `padding='longest'` to pad to the longest sequence in the batch, or use `padding='max_length'` to pad to a max length. In this case, you can give a specific length with `max_length` (e.g. `max_length=45`) or leave max_length to None to pad to the maximal input size of the model (e.g. 512 for Bert).\n",
+ " warnings.warn(\n",
+ "100%|██████████| 9131/9131 [00:00<00:00, 10540.60it/s]\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "klue/roberta-large 모델 전처리 완료\n"
+ ]
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ "Downloading (…)lve/main/config.json: 0%| | 0.00/616 [00:00, ?B/s]"
+ ],
+ "application/vnd.jupyter.widget-view+json": {
+ "version_major": 2,
+ "version_minor": 0,
+ "model_id": "e6dce7e4829b4689a2c3cf86cf4384ba"
+ }
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ "Downloading (…)tencepiece.bpe.model: 0%| | 0.00/5.07M [00:00, ?B/s]"
+ ],
+ "application/vnd.jupyter.widget-view+json": {
+ "version_major": 2,
+ "version_minor": 0,
+ "model_id": "8c9f1051e90c4222924af3ac004e70af"
+ }
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ "Downloading (…)/main/tokenizer.json: 0%| | 0.00/9.10M [00:00, ?B/s]"
+ ],
+ "application/vnd.jupyter.widget-view+json": {
+ "version_major": 2,
+ "version_minor": 0,
+ "model_id": "c4bb1d422fca4f839b5adb42ce7f9932"
+ }
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "stream",
+ "name": "stderr",
+ "text": [
+ "0it [00:00, ?it/s]/usr/local/lib/python3.10/dist-packages/transformers/tokenization_utils_base.py:2354: FutureWarning: The `pad_to_max_length` argument is deprecated and will be removed in a future version, use `padding=True` or `padding='longest'` to pad to the longest sequence in the batch, or use `padding='max_length'` to pad to a max length. In this case, you can give a specific length with `max_length` (e.g. `max_length=45`) or leave max_length to None to pad to the maximal input size of the model (e.g. 512 for Bert).\n",
+ " warnings.warn(\n",
+ "45654it [00:07, 6480.72it/s]\n",
+ " 0%| | 0/9131 [00:00, ?it/s]/usr/local/lib/python3.10/dist-packages/transformers/tokenization_utils_base.py:2354: FutureWarning: The `pad_to_max_length` argument is deprecated and will be removed in a future version, use `padding=True` or `padding='longest'` to pad to the longest sequence in the batch, or use `padding='max_length'` to pad to a max length. In this case, you can give a specific length with `max_length` (e.g. `max_length=45`) or leave max_length to None to pad to the maximal input size of the model (e.g. 512 for Bert).\n",
+ " warnings.warn(\n",
+ "100%|██████████| 9131/9131 [00:01<00:00, 7389.22it/s]\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "xlm-roberta-large 모델 전처리 완료\n"
+ ]
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ "Downloading (…)okenizer_config.json: 0%| | 0.00/28.0 [00:00, ?B/s]"
+ ],
+ "application/vnd.jupyter.widget-view+json": {
+ "version_major": 2,
+ "version_minor": 0,
+ "model_id": "b79cd2a7a6fb490183d4e3454b8bf61f"
+ }
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ "Downloading (…)lve/main/config.json: 0%| | 0.00/625 [00:00, ?B/s]"
+ ],
+ "application/vnd.jupyter.widget-view+json": {
+ "version_major": 2,
+ "version_minor": 0,
+ "model_id": "9e311b6073454fbaa1a978ffeff8e6df"
+ }
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ "Downloading (…)solve/main/vocab.txt: 0%| | 0.00/872k [00:00, ?B/s]"
+ ],
+ "application/vnd.jupyter.widget-view+json": {
+ "version_major": 2,
+ "version_minor": 0,
+ "model_id": "e2df55b1f3db4f24af648f5e129f0825"
+ }
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ "Downloading (…)/main/tokenizer.json: 0%| | 0.00/1.72M [00:00, ?B/s]"
+ ],
+ "application/vnd.jupyter.widget-view+json": {
+ "version_major": 2,
+ "version_minor": 0,
+ "model_id": "c0da66b3026d48aa96fa9c551e65f3df"
+ }
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "stream",
+ "name": "stderr",
+ "text": [
+ "0it [00:00, ?it/s]/usr/local/lib/python3.10/dist-packages/transformers/tokenization_utils_base.py:2354: FutureWarning: The `pad_to_max_length` argument is deprecated and will be removed in a future version, use `padding=True` or `padding='longest'` to pad to the longest sequence in the batch, or use `padding='max_length'` to pad to a max length. In this case, you can give a specific length with `max_length` (e.g. `max_length=45`) or leave max_length to None to pad to the maximal input size of the model (e.g. 512 for Bert).\n",
+ " warnings.warn(\n",
+ "45654it [00:07, 6278.05it/s]\n",
+ " 0%| | 0/9131 [00:00, ?it/s]/usr/local/lib/python3.10/dist-packages/transformers/tokenization_utils_base.py:2354: FutureWarning: The `pad_to_max_length` argument is deprecated and will be removed in a future version, use `padding=True` or `padding='longest'` to pad to the longest sequence in the batch, or use `padding='max_length'` to pad to a max length. In this case, you can give a specific length with `max_length` (e.g. `max_length=45`) or leave max_length to None to pad to the maximal input size of the model (e.g. 512 for Bert).\n",
+ " warnings.warn(\n",
+ "100%|██████████| 9131/9131 [00:01<00:00, 6812.53it/s]\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "bert-base-multilingual-uncased 모델 전처리 완료\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "name": "stderr",
+ "text": [
+ "0it [00:00, ?it/s]/usr/local/lib/python3.10/dist-packages/transformers/tokenization_utils_base.py:2354: FutureWarning: The `pad_to_max_length` argument is deprecated and will be removed in a future version, use `padding=True` or `padding='longest'` to pad to the longest sequence in the batch, or use `padding='max_length'` to pad to a max length. In this case, you can give a specific length with `max_length` (e.g. `max_length=45`) or leave max_length to None to pad to the maximal input size of the model (e.g. 512 for Bert).\n",
+ " warnings.warn(\n",
+ "45654it [00:08, 5699.07it/s] \n",
+ " 0%| | 0/9131 [00:00, ?it/s]/usr/local/lib/python3.10/dist-packages/transformers/tokenization_utils_base.py:2354: FutureWarning: The `pad_to_max_length` argument is deprecated and will be removed in a future version, use `padding=True` or `padding='longest'` to pad to the longest sequence in the batch, or use `padding='max_length'` to pad to a max length. In this case, you can give a specific length with `max_length` (e.g. `max_length=45`) or leave max_length to None to pad to the maximal input size of the model (e.g. 512 for Bert).\n",
+ " warnings.warn(\n",
+ "100%|██████████| 9131/9131 [00:00<00:00, 10361.53it/s]\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "klue/roberta-large 모델 전처리 완료\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "# 모델"
+ ],
+ "metadata": {
+ "id": "hffts-hdlkYY"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "class KobertDataSet(Dataset):#파이토치를 이용한 데이터셋 클래스\n",
+ "\n",
+ " def __init__(self, data, test=False): #데이터와 테스트 여부(test)를 받아서 저장\n",
+ "\n",
+ " self.data = data\n",
+ " self.test = test\n",
+ "\n",
+ " def __len__(self): #데이터 길이 반환. 여기선 input_ids의 길이를 기준으로 함.\n",
+ "\n",
+ " return self.data['input_ids'].shape[0]\n",
+ "\n",
+ " def __getitem__(self,idx): #인덱스(idx)를 받아 해당 인덱스의 데이터 반환\n",
+ " #이 데이터는 input_ids, attention_mask, token_type_ids 그리고 targets로 이뤄짐\n",
+ " ids = torch.tensor(self.data['input_ids'][idx], dtype=torch.long)\n",
+ " mask = torch.tensor(self.data['attention_mask'][idx], dtype=torch.long)\n",
+ " token_type_ids = torch.tensor(self.data['token_type_ids'][idx], dtype=torch.long)\n",
+ " #torch.long : long(정수형, 64bits)로 형변환\n",
+ "\n",
+ " if self.test: #test 데이터인 경우에는 targets가 없으므로 ids, mask, token_type_ids만 반환\n",
+ " return {\n",
+ " 'ids': ids,\n",
+ " 'mask': mask,\n",
+ " 'token_type_ids': token_type_ids\n",
+ " }\n",
+ "\n",
+ " else:\n",
+ " target = torch.tensor(self.data['targets'][idx],dtype=torch.long) #train 데이터는 targets도 반환\n",
+ " return {\n",
+ " 'ids': ids,\n",
+ " 'mask': mask,\n",
+ " 'token_type_ids': token_type_ids,\n",
+ " 'targets': target\n",
+ " }"
+ ],
+ "metadata": {
+ "id": "kvLkpxWRlm1-"
+ },
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "# k-fold 안 하고 monologg/kobert만 사용해보기"
+ ],
+ "metadata": {
+ "id": "tnmoEDdblTfe"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "# ------------------------\n",
+ "# scheduler\n",
+ "# ------------------------\n",
+ "#do_valid와 do_predict 함수는 모델 학습 파이프라인에서 각각 모델의 유효성을 검사하고 예측하는 데 사용\n",
+ "def do_valid(net, valid_loader):\n",
+ "#학습된 모델과 유효성 검사 데이터로더를 받아서 모델 유효성 검사 손실, F1 score 및 정확도를 반환함.\n",
+ "#예측된 출력확률, 대상레이블, 유효성 검사 데이터의 로그도 반환함.\n",
+ " val_loss = 0\n",
+ " target_lst = []\n",
+ " pred_lst = []\n",
+ " logit = []\n",
+ " loss_fn = nn.CrossEntropyLoss()\n",
+ "\n",
+ " net.eval()\n",
+ " start_timer = timer()\n",
+ " for t, data in enumerate(tqdm.tqdm(valid_loader)):\n",
+ " ids = data['ids'].to(device)\n",
+ " mask = data['mask'].to(device)\n",
+ " tokentype = data['token_type_ids'].to(device)\n",
+ " target = data['targets'].to(device)\n",
+ "\n",
+ " with torch.no_grad():\n",
+ " if args.amp:\n",
+ " with amp.autocast():\n",
+ " # output\n",
+ " output = net(ids, mask)\n",
+ " output = output[0]\n",
+ "\n",
+ " # loss\n",
+ " loss = loss_fn(output, target)\n",
+ "\n",
+ " else:\n",
+ " output = net(ids, mask)#.squeeze(0)\n",
+ " loss = loss_fn(output, target)\n",
+ "\n",
+ " val_loss += loss\n",
+ " target_lst.extend(target.detach().cpu().numpy())\n",
+ " pred_lst.extend(output.argmax(dim=1).tolist())\n",
+ " logit.extend(output.tolist())\n",
+ "\n",
+ " val_mean_loss = val_loss / len(valid_loader)\n",
+ " validation_score = f1_score(y_true=target_lst, y_pred=pred_lst, average='macro')\n",
+ " validation_acc = accuracy_score(y_true=target_lst, y_pred=pred_lst)\n",
+ "\n",
+ "\n",
+ " return val_mean_loss, validation_score, validation_acc, logit\n",
+ "\n",
+ "def do_predict(net, valid_loader):\n",
+ "#학습된 모델과 테스트데이터로더를 받아 테스트 데이터의 예측된 레이블과 로그를 반환함\n",
+ "\n",
+ " val_loss = 0\n",
+ " pred_lst = []\n",
+ " logit=[]\n",
+ " net.eval()\n",
+ " for t, data in enumerate(tqdm.tqdm(valid_loader)):\n",
+ " ids = data['ids'].to(device)\n",
+ " mask = data['mask'].to(device)\n",
+ " tokentype = data['token_type_ids'].to(device)\n",
+ "\n",
+ " with torch.no_grad():\n",
+ " if args.amp:\n",
+ " with amp.autocast():\n",
+ " # output\n",
+ " output = net(ids, mask)[0]\n",
+ "\n",
+ " else:\n",
+ " output = net(ids, mask)\n",
+ "\n",
+ " pred_lst.extend(output.argmax(dim=1).tolist())\n",
+ " logit.extend(output.tolist())\n",
+ "\n",
+ " return pred_lst,logit\n",
+ "\"\"\"\n",
+ "두 함수 모두 손실함수로, nn.CorssEntropyLoss()를 사용해 예측된 레이블과 대상 레이블 사이의 손실을 계산함.\n",
+ "모델을 평가 모드로 전환하려면 net.eval()을 사용해서 드롭아웃을 비활성화하고, 일괄 정규화를 평가 모드로 설정함.\n",
+ "유효성 검사 및 테스트 중에 기울기를 추적하지 않으려면 torch.no_grad()를 사용\n",
+ "\"\"\"\n",
+ "\n",
+ "def run_train(folds=3):\n",
+ " out_dir = args.dir_+ f'/fold{args.fold}/{args.exp_name}/'\n",
+ " os.makedirs(out_dir, exist_ok=True)\n",
+ "\n",
+ " # load dataset\n",
+ " train, test = load_data()\n",
+ " with open(f'./data/{args.pt}/train_data_{args.max_len}.pickle', 'rb') as f:\n",
+ " train_data = pickle.load(f)\n",
+ " with open(f'./data/{args.pt}/test_data_{args.max_len}.pickle', 'rb') as f:\n",
+ " test_data = pickle.load(f)\n",
+ "\n",
+ " # split fold\n",
+ " for n_fold in range(5):\n",
+ " if n_fold != folds:\n",
+ " print(f'{n_fold} fold pass'+'\\n')\n",
+ " continue\n",
+ "\n",
+ " if args.debug:\n",
+ " train = train.sample(1000).copy()\n",
+ "\n",
+ " trn_idx = train[train['fold']!=n_fold]['id'].values\n",
+ " val_idx = train[train['fold']==n_fold]['id'].values\n",
+ "\n",
+ "\n",
+ " train_dict = {'input_ids' : train_data['input_ids'][trn_idx] , 'attention_mask' : train_data['attention_mask'][trn_idx] ,\n",
+ " 'token_type_ids' : train_data['token_type_ids'][trn_idx], 'targets' : train_data['targets'][trn_idx]}\n",
+ " val_dict = {'input_ids' : train_data['input_ids'][val_idx] , 'attention_mask' : train_data['attention_mask'][val_idx] ,\n",
+ " 'token_type_ids' : train_data['token_type_ids'][val_idx], 'targets' : train_data['targets'][val_idx]}\n",
+ "\n",
+ " ## dataset ------------------------------------\n",
+ " train_dataset = KobertDataSet(data = train_dict)\n",
+ " valid_dataset = KobertDataSet(data = val_dict)\n",
+ " trainloader = DataLoader(dataset=train_dataset, batch_size=args.batch_size,\n",
+ " num_workers=8, shuffle=True, pin_memory=True)\n",
+ " validloader = DataLoader(dataset=valid_dataset, batch_size=args.batch_size,\n",
+ " num_workers=8, shuffle=False, pin_memory=True)\n",
+ "\n",
+ " ## net ----------------------------------------\n",
+ " scaler = amp.GradScaler()\n",
+ " if 'xlm-roberta' in args.pt:\n",
+ " net = XLMRobertaForSequenceClassification.from_pretrained(args.pt, num_labels = 7)\n",
+ "\n",
+ " elif 'klue/roberta' in args.pt:\n",
+ " net = RobertaForSequenceClassification.from_pretrained(args.pt, num_labels = 7)\n",
+ " else:\n",
+ " net = BertForSequenceClassification.from_pretrained(args.pt, num_labels = 7)\n",
+ "\n",
+ " net.to(device)\n",
+ " if len(args.gpu)>1:\n",
+ " net = nn.DataParallel(net)\n",
+ "\n",
+ " # ------------------------\n",
+ " # loss\n",
+ " # ------------------------\n",
+ " loss_fn = nn.CrossEntropyLoss()\n",
+ "\n",
+ " # ------------------------\n",
+ " # Optimizer\n",
+ " # ------------------------\n",
+ " optimizer = optim.Lookahead(optim.RAdam(filter(lambda p: p.requires_grad,net.parameters()), lr=args.start_lr), alpha=0.5, k=5)\n",
+ "\n",
+ " scheduler = get_linear_schedule_with_warmup(optimizer, num_warmup_steps = 0, num_training_steps = len(trainloader)*args.epochs)\n",
+ "\n",
+ "\n",
+ " # ----\n",
+ " start_timer = timer()\n",
+ " best_score = 0\n",
+ "\n",
+ " for epoch in range(1, args.epochs+1):\n",
+ " train_loss = 0\n",
+ " valid_loss = 0\n",
+ "\n",
+ " target_lst = []\n",
+ " pred_lst = []\n",
+ " lr = get_learning_rate(optimizer)\n",
+ " print(f'-------------------')\n",
+ " print(f'{epoch}epoch start')\n",
+ " print(f'-------------------'+'\\n')\n",
+ " print(f'learning rate : {lr : .6f}')\n",
+ " for t, data in enumerate(tqdm.tqdm(trainloader)):\n",
+ "\n",
+ " # one iteration update -------------\n",
+ " ids = data['ids'].to(device)\n",
+ " mask = data['mask'].to(device)\n",
+ " tokentype = data['token_type_ids'].to(device)\n",
+ " target = data['targets'].to(device)\n",
+ "\n",
+ " # ------------\n",
+ " net.train()\n",
+ " optimizer.zero_grad()\n",
+ "\n",
+ "\n",
+ " if args.amp:\n",
+ " with amp.autocast():\n",
+ " # output\n",
+ " output = net(ids, mask)\n",
+ " output = output[0]\n",
+ "\n",
+ " # loss\n",
+ " loss = loss_fn(output, target)\n",
+ " train_loss += loss\n",
+ "\n",
+ "\n",
+ " scaler.scale(loss).backward()\n",
+ " scaler.step(optimizer)\n",
+ " scaler.update()\n",
+ "\n",
+ " else:\n",
+ " # output\n",
+ " output = net(ids, mask)\n",
+ "\n",
+ " # loss\n",
+ " loss = loss_fn(output, target)\n",
+ " train_loss += loss\n",
+ "\n",
+ " # update\n",
+ " loss.backward()\n",
+ " optimizer.step()\n",
+ "\n",
+ "\n",
+ " # for calculate f1 score\n",
+ " target_lst.extend(target.detach().cpu().numpy())\n",
+ " pred_lst.extend(output.argmax(dim=1).tolist())\n",
+ "\n",
+ "\n",
+ " if scheduler is not None:\n",
+ " scheduler.step()\n",
+ " train_loss = train_loss / len(trainloader)\n",
+ " train_score = f1_score(y_true=target_lst, y_pred=pred_lst, average='macro')\n",
+ " train_acc = accuracy_score(y_true=target_lst, y_pred=pred_lst)\n",
+ "\n",
+ " # validation\n",
+ " valid_loss, valid_score, valid_acc, _ = do_valid(net, validloader)\n",
+ "\n",
+ "\n",
+ " if valid_acc > best_score:\n",
+ " best_score = valid_acc\n",
+ " best_epoch = epoch\n",
+ " best_loss = valid_loss\n",
+ "\n",
+ " torch.save(net.state_dict(), out_dir + f'/{folds}f_{epoch}e_{best_score:.4f}_s.pth')\n",
+ " print('best model saved'+'\\n')\n",
+ "\n",
+ "\n",
+ " print(f'train loss : {train_loss:.4f}, train f1 score : {train_score : .4f}, train acc : {train_acc : .4f}'+'\\n')\n",
+ " print(f'valid loss : {valid_loss:.4f}, valid f1 score : {valid_score : .4f}, valid acc : {valid_acc : .4f}'+'\\n')\n",
+ "\n",
+ "\n",
+ " print(f'best valid loss : {best_loss : .4f}'+'\\n')\n",
+ " print(f'best epoch : {best_epoch }'+'\\n')\n",
+ " print(f'best accuracy : {best_score : .4f}'+'\\n')\n",
+ "\n",
+ "def run_predict(model_path):\n",
+ " ## dataset ------------------------------------\n",
+ " # load\n",
+ " with open(f'./data/{args.pt}/test_data_{args.max_len}.pickle', 'rb') as f:\n",
+ " test_dict = pickle.load(f)\n",
+ "\n",
+ " print('test load')\n",
+ " test_dataset = KobertDataSet(data = test_dict, test=True)\n",
+ " testloader = DataLoader(dataset=test_dataset, batch_size=args.batch_size,\n",
+ " num_workers=8, shuffle=False, pin_memory=True)\n",
+ " print('set testloader')\n",
+ " ## net ----------------------------------------\n",
+ " scaler = amp.GradScaler()\n",
+ " if 'xlm-roberta' in args.pt:\n",
+ " net = XLMRobertaForSequenceClassification.from_pretrained(args.pt, num_labels = 7)\n",
+ "\n",
+ " elif 'klue/roberta' in args.pt:\n",
+ " net = RobertaForSequenceClassification.from_pretrained(args.pt, num_labels = 7)\n",
+ " else:\n",
+ " net = BertForSequenceClassification.from_pretrained(args.pt, num_labels = 7)\n",
+ "\n",
+ " net.to(device)\n",
+ "\n",
+ " if len(args.gpu)>1:\n",
+ " net = nn.DataParallel(net)\n",
+ "\n",
+ " f = torch.load(model_path)\n",
+ " net.load_state_dict(f, strict=True) # True\n",
+ " print('load saved models')\n",
+ " # ------------------------\n",
+ " # validation\n",
+ " preds, logit = do_predict(net, testloader) #outputs\n",
+ "\n",
+ " print('complete predict')\n",
+ "\n",
+ " return preds, np.array(logit)\n",
+ "# 예측된 레이블과 로그는 각각 pred_lst 및 logit 목록에 저장\n",
+ ""
+ ],
+ "metadata": {
+ "id": "FtKebqIVh-lC"
+ },
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "\"\"\"5fold 전용\"\"\"\n",
+ "if __name__ == '__main__':\n",
+ " #스크립트를 모듈로 가져오는 것이 아니라 직접 실행할 때만 실행해야 하는 코드를 지정할 수 있는 Python 코드의 일반적인 패턴\n",
+ "\n",
+ " for pt, max_len in zip(['monologg/kobert'],[33]):\n",
+ " #일부 매개변수(args.max_len, args.pt, args.exp_name)를 정의한 다음\n",
+ " args.max_len = max_len\n",
+ " args.pt = pt\n",
+ " args.exp_name = str(args.pt) + '_' + str(args.max_len)\n",
+ " #교차 유효성 검사의 5배수에 걸쳐 pt와 max_len의 각 조합에 대해 run_train 함수를 호출\n",
+ " #for i in [0,1,2,3,4]: # 5fold\n",
+ " for i in [0]: #1fold\n",
+ " run_train(folds=i)\n",
+ " #5 교차 유효성 검사를 사용해 다양한 최대 시퀀스 길이(max_len)을 가진 사전 학습 언어 모델(pt)에 학습 스크립트를 실행하는 루프"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 322,
+ "referenced_widgets": [
+ "1fd7f1e2b00a4b6eb3ddfdfc150059d3",
+ "62399a7de6f1460ea5dccb05d44c4cc1",
+ "b802ad8d5f53420cad376fc42e290260",
+ "c60e0c4265ce46d98b213eac941d0ee1",
+ "f3aa47355778482aae55c3b44aca4273",
+ "ba688b1063d7483ba4b30e900b14385b",
+ "e1af7116138049deb3dbfa89d8a260bb",
+ "7a4c1373a8de446081d028bf12edb4c2",
+ "71b518ae1c4443139d3950078842fd68",
+ "da6ec0e73d414b248f19bad266b3148b",
+ "dfa5c351c3574593a5561885b7422f8c",
+ "72bf2b77001b4c0697dc0a7032eb27c0",
+ "54f9964ac1b540438eed60c5fcb1831d",
+ "8e0a0a7735c84fdab60b8952ffebd433",
+ "ffe65bc47d2b4948b81fbda1526ea299",
+ "27ebca023c1048f29f8ff05735e5e25a",
+ "5aca4ceb73634249945884be389514d0",
+ "ae36612dc22948408953ef4126f63822",
+ "8bf1ae25ff6143ef99728b35156e4227",
+ "859f6226c2d34f1aa8463797f62e7b4e",
+ "866496e3cd964d6aaf8abb2321586b21",
+ "7e411a6f162b40cb9de440f1c5939a2e"
+ ]
+ },
+ "id": "E4qLSXshh-iW",
+ "outputId": "e48324f9-77d9-4368-9859-0e1660870ee7"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stderr",
+ "text": [
+ "/usr/local/lib/python3.10/dist-packages/torch/utils/data/dataloader.py:561: UserWarning: This DataLoader will create 8 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n",
+ " warnings.warn(_create_warning_msg(\n"
+ ]
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ "Downloading (…)lve/main/config.json: 0%| | 0.00/426 [00:00, ?B/s]"
+ ],
+ "application/vnd.jupyter.widget-view+json": {
+ "version_major": 2,
+ "version_minor": 0,
+ "model_id": "1fd7f1e2b00a4b6eb3ddfdfc150059d3"
+ }
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ "Downloading pytorch_model.bin: 0%| | 0.00/369M [00:00, ?B/s]"
+ ],
+ "application/vnd.jupyter.widget-view+json": {
+ "version_major": 2,
+ "version_minor": 0,
+ "model_id": "72bf2b77001b4c0697dc0a7032eb27c0"
+ }
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "stream",
+ "name": "stderr",
+ "text": [
+ "Some weights of BertForSequenceClassification were not initialized from the model checkpoint at monologg/kobert and are newly initialized: ['classifier.bias', 'classifier.weight']\n",
+ "You should probably TRAIN this model on a down-stream task to be able to use it for predictions and inference.\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "-------------------\n",
+ "1epoch start\n",
+ "-------------------\n",
+ "\n",
+ "learning rate : 0.000010\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "name": "stderr",
+ "text": [
+ " 0%| | 0/36523 [00:00, ?it/s]/usr/local/lib/python3.10/dist-packages/torch/optim/lr_scheduler.py:139: UserWarning: Detected call of `lr_scheduler.step()` before `optimizer.step()`. In PyTorch 1.1.0 and later, you should call them in the opposite order: `optimizer.step()` before `lr_scheduler.step()`. Failure to do this will result in PyTorch skipping the first value of the learning rate schedule. See more details at https://pytorch.org/docs/stable/optim.html#how-to-adjust-learning-rate\n",
+ " warnings.warn(\"Detected call of `lr_scheduler.step()` before `optimizer.step()`. \"\n",
+ " 38%|███▊ | 13737/36523 [1:11:41<1761:44:56, 278.34s/it]"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "#여러 transformer 모델을 앙상블시킴\n",
+ "def ensemble():\n",
+ " final_logit=0 #final_logit 변수를 0으로 초기화한 다음 각 모델에서 예측 로그를 추가함.\n",
+ " #각 모델은 예측된 레이블과 예측 로그를 반환하는 run_predict() 함수를 사용해 호출됨\n",
+ " args.max_len=33\n",
+ " args.pt = 'monologg/kobert'\n",
+ " _, logit1 = run_predict(\"./saved_models/fold3/kobert/0f_9e_0.8895_s.pth\")\n",
+ " _, logit2 = run_predict(\"./saved_models/fold3/kobert/1f_10e_0.8823_s.pth\")\n",
+ " _, logit3 = run_predict(\"./saved_models/fold3/kobert/2f_8e_0.8888_s.pth\")\n",
+ " _, logit4 = run_predict(\"./saved_models/fold3/kobert/3f_10e_0.8897_s.pth\")\n",
+ " _, logit5 = run_predict(\"./saved_models/fold3/kobert/4f_8e_0.8867_s.pth\")\n",
+ " final_logit += (logit1+logit2+logit3+logit4+logit5)/5\n",
+ " #여기선 레이블은 안 쓰고 logit만 사용\n",
+ " #예측 로짓의 평균을 취해 final_logit에 추가함\n",
+ " #####################\n",
+ " return final_logit"
+ ],
+ "metadata": {
+ "id": "pDKGZfYah-cT"
+ },
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "final_logit = ensemble()"
+ ],
+ "metadata": {
+ "id": "zOPJnGC04JgY"
+ },
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "sub = pd.read_csv(\"./sample_submission.csv\")\n",
+ "sub['topic_idx'] = final_logit.argmax(1)\n",
+ "# preds\n",
+ "sub.to_csv('./submission/final_submission.csv', index=False)"
+ ],
+ "metadata": {
+ "id": "K78cYiz9h-eI"
+ },
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [],
+ "metadata": {
+ "id": "lbLZRitph-Yt"
+ },
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [],
+ "metadata": {
+ "id": "9qpxVcNkh-SP"
+ },
+ "execution_count": null,
+ "outputs": []
+ }
+ ]
+}
\ No newline at end of file
|