diff --git "a/space/space/space/notebooks/Kien_Rule_base.ipynb" "b/space/space/space/notebooks/Kien_Rule_base.ipynb" new file mode 100644--- /dev/null +++ "b/space/space/space/notebooks/Kien_Rule_base.ipynb" @@ -0,0 +1,8495 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "7bPdA3aUaZqD", + "outputId": "e0cca7aa-2bee-4d86-ceb1-663e3733e103" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.11/dist-packages/huggingface_hub/utils/_auth.py:94: UserWarning: \n", + "The secret `HF_TOKEN` does not exist in your Colab secrets.\n", + "To authenticate with the Hugging Face Hub, create a token in your settings tab (https://huggingface.co/settings/tokens), set it as secret in your Google Colab and restart your session.\n", + "You will be able to reuse this secret in all of your notebooks.\n", + "Please note that authentication is recommended but still optional to access public models or datasets.\n", + " warnings.warn(\n" + ] + } + ], + "source": [ + "import pandas as pd\n", + "\n", + "splits = {'train': 'data/train-00000-of-00001-b0417886a268b83a.parquet', 'valid': 'data/valid-00000-of-00001-846411c236133ba3.parquet'}\n", + "df_train = pd.read_parquet(\"hf://datasets/datnth1709/VLSP2016-NER-data/\" + splits[\"train\"])\n", + "df_valid = pd.read_parquet(\"hf://datasets/datnth1709/VLSP2016-NER-data/\" + splits[\"valid\"])\n", + "df = pd.concat([df_train, df_valid]).reset_index(drop=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "id": "UGHTgnkil_4R" + }, + "outputs": [], + "source": [ + "tag_id = {'O': 0, 'B-PER': 1, 'I-PER': 2, 'B-ORG': 3, 'I-ORG': 4, 'B-LOC': 5, 'I-LOC': 6, 'B-NAT': 7, 'I-NAT': 8}\n", + "id_tag = {0: 'O', 1: 'B-PER', 2: 'I-PER', 3: 'B-ORG', 4: 'I-ORG', 5: 'B-LOC', 6: 'I-LOC', 7: 'B-NAT', 8: 'I-NAT'}" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 423 + }, + "id": "gg8a9_1AibFj", + "outputId": "ff63e8d2-2782-4b64-c135-f4d15b43c818" + }, + "outputs": [ + { + "data": { + "application/vnd.google.colaboratory.intrinsic+json": { + "summary": "{\n \"name\": \"df\",\n \"rows\": 16858,\n \"fields\": [\n {\n \"column\": \"tokens\",\n \"properties\": {\n \"dtype\": \"object\",\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"ner_tags\",\n \"properties\": {\n \"dtype\": \"object\",\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"ner_labels\",\n \"properties\": {\n \"dtype\": \"object\",\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}", + "type": "dataframe", + "variable_name": "df" + }, + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
tokensner_tagsner_labels
0[Không_khí, thật, náo_nhiệt, .][0, 0, 0, 0][O, O, O, O]
1[Chị, Lãnh, và, Xăng, ra, đi, ,, mình, đứng, n...[0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...[O, B-PER, O, B-PER, O, O, O, O, O, O, O, O, O...
2[Suy_tính, mãi, ,, khóc, mãi, rồi, Phúc, lấy, ...[0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, ...[O, O, O, O, O, O, B-PER, O, O, O, O, O, O, O,...
3[Hoà, bảo, hồi, mới, qua, đâu, có, biết, nấu_n...[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, ...[B-PER, O, O, O, O, O, O, O, O, O, O, O, O, B-...
4[Nhật_ký, của, thuyền_viên, .][0, 0, 0, 0][O, O, O, O]
............
16853[Nghe, thấy, đã, ghê_ghê, nhưng, Nhiêu, chưa, ...[0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, ...[O, O, O, O, O, B-PER, O, O, O, O, O, O, O, O,...
16854[Nhưng, mọi, chuyện, không, dừng, ở, đó, .][0, 0, 0, 0, 0, 0, 0, 0][O, O, O, O, O, O, O, O]
16855[Hoà, bảo, thời_gian, đầu, mặc_cảm, lắm, ,, ở,...[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...[B-PER, O, O, O, O, O, O, O, O, O, O, O, O, O,...
16856[Biết_bao, người, đã, tình_nguyện, hiến_dâng, ...[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0][O, O, O, O, O, O, O, O, O, O, O, O, O, O, O]
16857[Trên, đây, mới, là, “, thành_tích, ”, tiêu, t...[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...[O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, ...
\n", + "

16858 rows × 3 columns

\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + " \n", + " \n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ], + "text/plain": [ + " tokens \\\n", + "0 [Không_khí, thật, náo_nhiệt, .] \n", + "1 [Chị, Lãnh, và, Xăng, ra, đi, ,, mình, đứng, n... \n", + "2 [Suy_tính, mãi, ,, khóc, mãi, rồi, Phúc, lấy, ... \n", + "3 [Hoà, bảo, hồi, mới, qua, đâu, có, biết, nấu_n... \n", + "4 [Nhật_ký, của, thuyền_viên, .] \n", + "... ... \n", + "16853 [Nghe, thấy, đã, ghê_ghê, nhưng, Nhiêu, chưa, ... \n", + "16854 [Nhưng, mọi, chuyện, không, dừng, ở, đó, .] \n", + "16855 [Hoà, bảo, thời_gian, đầu, mặc_cảm, lắm, ,, ở,... \n", + "16856 [Biết_bao, người, đã, tình_nguyện, hiến_dâng, ... \n", + "16857 [Trên, đây, mới, là, “, thành_tích, ”, tiêu, t... \n", + "\n", + " ner_tags \\\n", + "0 [0, 0, 0, 0] \n", + "1 [0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", + "2 [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", + "3 [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, ... \n", + "4 [0, 0, 0, 0] \n", + "... ... \n", + "16853 [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, ... \n", + "16854 [0, 0, 0, 0, 0, 0, 0, 0] \n", + "16855 [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", + "16856 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] \n", + "16857 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", + "\n", + " ner_labels \n", + "0 [O, O, O, O] \n", + "1 [O, B-PER, O, B-PER, O, O, O, O, O, O, O, O, O... \n", + "2 [O, O, O, O, O, O, B-PER, O, O, O, O, O, O, O,... \n", + "3 [B-PER, O, O, O, O, O, O, O, O, O, O, O, O, B-... \n", + "4 [O, O, O, O] \n", + "... ... \n", + "16853 [O, O, O, O, O, B-PER, O, O, O, O, O, O, O, O,... \n", + "16854 [O, O, O, O, O, O, O, O] \n", + "16855 [B-PER, O, O, O, O, O, O, O, O, O, O, O, O, O,... \n", + "16856 [O, O, O, O, O, O, O, O, O, O, O, O, O, O, O] \n", + "16857 [O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, ... \n", + "\n", + "[16858 rows x 3 columns]" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def label(x):\n", + " return [id_tag[int(i)] for i in x]\n", + "df[\"ner_labels\"] = df.ner_tags.apply(label)\n", + "df" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "l3KdOY9Imz8D" + }, + "source": [ + "# Overview" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 206 + }, + "id": "dvkgtj0Ilzno", + "outputId": "3053d59d-b399-4729-9507-916b127e62fa" + }, + "outputs": [ + { + "data": { + "application/vnd.google.colaboratory.intrinsic+json": { + "summary": "{\n \"name\": \"df\",\n \"rows\": 16858,\n \"fields\": [\n {\n \"column\": \"tokens\",\n \"properties\": {\n \"dtype\": \"object\",\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"ner_tags\",\n \"properties\": {\n \"dtype\": \"object\",\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"ner_labels\",\n \"properties\": {\n \"dtype\": \"object\",\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}", + "type": "dataframe", + "variable_name": "df" + }, + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
tokensner_tagsner_labels
0[Không_khí, thật, náo_nhiệt, .][0, 0, 0, 0][O, O, O, O]
1[Chị, Lãnh, và, Xăng, ra, đi, ,, mình, đứng, n...[0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...[O, B-PER, O, B-PER, O, O, O, O, O, O, O, O, O...
2[Suy_tính, mãi, ,, khóc, mãi, rồi, Phúc, lấy, ...[0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, ...[O, O, O, O, O, O, B-PER, O, O, O, O, O, O, O,...
3[Hoà, bảo, hồi, mới, qua, đâu, có, biết, nấu_n...[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, ...[B-PER, O, O, O, O, O, O, O, O, O, O, O, O, B-...
4[Nhật_ký, của, thuyền_viên, .][0, 0, 0, 0][O, O, O, O]
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ], + "text/plain": [ + " tokens \\\n", + "0 [Không_khí, thật, náo_nhiệt, .] \n", + "1 [Chị, Lãnh, và, Xăng, ra, đi, ,, mình, đứng, n... \n", + "2 [Suy_tính, mãi, ,, khóc, mãi, rồi, Phúc, lấy, ... \n", + "3 [Hoà, bảo, hồi, mới, qua, đâu, có, biết, nấu_n... \n", + "4 [Nhật_ký, của, thuyền_viên, .] \n", + "\n", + " ner_tags \\\n", + "0 [0, 0, 0, 0] \n", + "1 [0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", + "2 [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", + "3 [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, ... \n", + "4 [0, 0, 0, 0] \n", + "\n", + " ner_labels \n", + "0 [O, O, O, O] \n", + "1 [O, B-PER, O, B-PER, O, O, O, O, O, O, O, O, O... \n", + "2 [O, O, O, O, O, O, B-PER, O, O, O, O, O, O, O,... \n", + "3 [B-PER, O, O, O, O, O, O, O, O, O, O, O, O, B-... \n", + "4 [O, O, O, O] " + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.head(5)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "XbY94Vjqb3UY", + "outputId": "ae7af3c6-4c0d-41eb-a671-b9d1a660ff5c" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "RangeIndex: 16858 entries, 0 to 16857\n", + "Data columns (total 3 columns):\n", + " # Column Non-Null Count Dtype \n", + "--- ------ -------------- ----- \n", + " 0 tokens 16858 non-null object\n", + " 1 ner_tags 16858 non-null object\n", + " 2 ner_labels 16858 non-null object\n", + "dtypes: object(3)\n", + "memory usage: 395.2+ KB\n" + ] + } + ], + "source": [ + "df.info()" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "1vHfeaHgjpMg", + "outputId": "62a5028b-3758-4e71-e473-36aeb9cda5a3" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "tokens - \n", + "ner_tags - \n" + ] + } + ], + "source": [ + "print(\"tokens - \", type(df.tokens[0]))\n", + "print(\"ner_tags - \", type(df.ner_tags[0]))" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 562 + }, + "id": "Oi5-brhr2GZc", + "outputId": "e239b808-581f-4f09-85f9-dd562cb1e63a" + }, + "outputs": [ + { + "data": { + "application/vnd.google.colaboratory.intrinsic+json": { + "summary": "{\n \"name\": \"df\",\n \"rows\": 16858,\n \"fields\": [\n {\n \"column\": \"tokens\",\n \"properties\": {\n \"dtype\": \"object\",\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"ner_tags\",\n \"properties\": {\n \"dtype\": \"object\",\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"ner_labels\",\n \"properties\": {\n \"dtype\": \"object\",\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"text_withseg\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 16787,\n \"samples\": [\n \"T\\u00ednh th\\u00f4ng_minh , l\\u1ea1i t\\u00f2_m\\u00f2 , anh Ki\\u1ec7m b\\u1eaft_\\u0111\\u1ea7u \\u0111i \\u0111\\u1ebfn c\\u00e1c x\\u01b0\\u1edfng c\\u01a1_kh\\u00ed \\u0111\\u1ec3 quan_s\\u00e1t c\\u00e1c lo\\u1ea1i m\\u00e1y_m\\u00f3c , r\\u1ed3i v\\u1ec1 nh\\u00e0 suy_ngh\\u0129 v\\u00e0 c\\u1ea7m b\\u00fat v\\u1ebd ph\\u00e1c_ho\\u1ea1 ra c\\u00e1i m\\u00e1y v\\u00fat g\\u1ea1o .\",\n \"V\\u1eady th\\u00ec , h\\u1ecd c\\u1ea7n ph\\u1ea3i \\u0111\\u01b0\\u1ee3c gi\\u00fap_\\u0111\\u1ee1 , ph\\u1ea3i \\u0111\\u01b0\\u1ee3c s\\u1ed1ng \\u0111\\u00e0ng_ho\\u00e0ng , ph\\u1ea3i \\u0111\\u01b0\\u1ee3c l\\u00e0m ng\\u01b0\\u1eddi d\\u00f9 ch\\u1ec9 l\\u00e0 nh\\u1eefng ng\\u00e0y cu\\u1ed1i_c\\u00f9ng .\",\n \"Nhi\\u1ec1u ng\\u01b0\\u1eddi th\\u00f4ng_d\\u1ecbch c\\u00f9ng th\\u1eddi v\\u1edbi Nguy\\u1ec5n Trung Hi\\u1ebfu c\\u0169ng \\u0111\\u00e3 ch\\u1ebft trong khi th\\u1ef1c_hi\\u1ec7n nhi\\u1ec7m_v\\u1ee5 t\\u1ea1i chi\\u1ebfn_tr\\u01b0\\u1eddng ho\\u1eb7c tr\\u00ean \\u0111\\u01b0\\u1eddng h\\u00e0nh_qu\\u00e2n .\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"text_raw\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 16785,\n \"samples\": [\n \"Trong kho\\u1ea3ng th\\u1eddi gian \\u0111\\u00f3 ch\\u1ecb c\\u1ed1 c\\u00f4ng t\\u1ef1 h\\u1ecdc ti\\u1ebfng Anh .\",\n \"Sau \\u0111\\u00f3 , ch\\u00ednh b\\u00e0 Susan \\u0111\\u00e3 \\u0111\\u01b0a Mai l\\u00ean h\\u1ecdc \\u0111\\u1ea1i h\\u1ecdc , m\\u1ed7i n\\u0103m chu c\\u1ea5p cho c\\u00f4 30.000 USD .\",\n \"T\\u1eeb r\\u1ea5t l\\u00e2u r\\u1ed3i t\\u00f4i v\\u1eabn ngh\\u0129 n\\u1ebfu nh\\u01b0 cu\\u1ed1n s\\u00e1ch \\u0111\\u01b0\\u1ee3c xu\\u1ea5t b\\u1ea3n , ho\\u1eb7c ng\\u01b0\\u1eddi ta l\\u00e0m phim v\\u1ec1 n\\u00f3 th\\u00ec t\\u00f4i s\\u1ebd d\\u00f9ng s\\u1ed1 ti\\u1ec1n b\\u00e1n s\\u00e1ch \\u0111\\u1ec3 thi\\u1ebft l\\u1eadp m\\u1ed9t s\\u1ed1 gi\\u01b0\\u1eddng b\\u1ec7nh t\\u1ea1i H\\u00e0 N\\u1ed9i .\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}", + "type": "dataframe", + "variable_name": "df" + }, + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
tokensner_tagsner_labelstext_withsegtext_raw
0[Không_khí, thật, náo_nhiệt, .][0, 0, 0, 0][O, O, O, O]Không_khí thật náo_nhiệt .Không khí thật náo nhiệt .
1[Chị, Lãnh, và, Xăng, ra, đi, ,, mình, đứng, n...[0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...[O, B-PER, O, B-PER, O, O, O, O, O, O, O, O, O...Chị Lãnh và Xăng ra đi , mình đứng nhìn hai ch...Chị Lãnh và Xăng ra đi , mình đứng nhìn hai ch...
2[Suy_tính, mãi, ,, khóc, mãi, rồi, Phúc, lấy, ...[0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, ...[O, O, O, O, O, O, B-PER, O, O, O, O, O, O, O,...Suy_tính mãi , khóc mãi rồi Phúc lấy ra tờ giấ...Suy tính mãi , khóc mãi rồi Phúc lấy ra tờ giấ...
3[Hoà, bảo, hồi, mới, qua, đâu, có, biết, nấu_n...[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, ...[B-PER, O, O, O, O, O, O, O, O, O, O, O, O, B-...Hoà bảo hồi mới qua đâu có biết nấu_nướng gì ,...Hoà bảo hồi mới qua đâu có biết nấu nướng gì ,...
4[Nhật_ký, của, thuyền_viên, .][0, 0, 0, 0][O, O, O, O]Nhật_ký của thuyền_viên .Nhật ký của thuyền viên .
..................
16853[Nghe, thấy, đã, ghê_ghê, nhưng, Nhiêu, chưa, ...[0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, ...[O, O, O, O, O, B-PER, O, O, O, O, O, O, O, O,...Nghe thấy đã ghê_ghê nhưng Nhiêu chưa được tườ...Nghe thấy đã ghê ghê nhưng Nhiêu chưa được tườ...
16854[Nhưng, mọi, chuyện, không, dừng, ở, đó, .][0, 0, 0, 0, 0, 0, 0, 0][O, O, O, O, O, O, O, O]Nhưng mọi chuyện không dừng ở đó .Nhưng mọi chuyện không dừng ở đó .
16855[Hoà, bảo, thời_gian, đầu, mặc_cảm, lắm, ,, ở,...[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...[B-PER, O, O, O, O, O, O, O, O, O, O, O, O, O,...Hoà bảo thời_gian đầu mặc_cảm lắm , ở trong nh...Hoà bảo thời gian đầu mặc cảm lắm , ở trong nh...
16856[Biết_bao, người, đã, tình_nguyện, hiến_dâng, ...[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0][O, O, O, O, O, O, O, O, O, O, O, O, O, O, O]Biết_bao người đã tình_nguyện hiến_dâng cả cuộ...Biết bao người đã tình nguyện hiến dâng cả cuộ...
16857[Trên, đây, mới, là, “, thành_tích, ”, tiêu, t...[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...[O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, ...Trên đây mới là “ thành_tích ” tiêu tiền của m...Trên đây mới là “ thành tích ” tiêu tiền của m...
\n", + "

16858 rows × 5 columns

\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + " \n", + " \n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ], + "text/plain": [ + " tokens \\\n", + "0 [Không_khí, thật, náo_nhiệt, .] \n", + "1 [Chị, Lãnh, và, Xăng, ra, đi, ,, mình, đứng, n... \n", + "2 [Suy_tính, mãi, ,, khóc, mãi, rồi, Phúc, lấy, ... \n", + "3 [Hoà, bảo, hồi, mới, qua, đâu, có, biết, nấu_n... \n", + "4 [Nhật_ký, của, thuyền_viên, .] \n", + "... ... \n", + "16853 [Nghe, thấy, đã, ghê_ghê, nhưng, Nhiêu, chưa, ... \n", + "16854 [Nhưng, mọi, chuyện, không, dừng, ở, đó, .] \n", + "16855 [Hoà, bảo, thời_gian, đầu, mặc_cảm, lắm, ,, ở,... \n", + "16856 [Biết_bao, người, đã, tình_nguyện, hiến_dâng, ... \n", + "16857 [Trên, đây, mới, là, “, thành_tích, ”, tiêu, t... \n", + "\n", + " ner_tags \\\n", + "0 [0, 0, 0, 0] \n", + "1 [0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", + "2 [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", + "3 [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, ... \n", + "4 [0, 0, 0, 0] \n", + "... ... \n", + "16853 [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, ... \n", + "16854 [0, 0, 0, 0, 0, 0, 0, 0] \n", + "16855 [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", + "16856 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] \n", + "16857 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", + "\n", + " ner_labels \\\n", + "0 [O, O, O, O] \n", + "1 [O, B-PER, O, B-PER, O, O, O, O, O, O, O, O, O... \n", + "2 [O, O, O, O, O, O, B-PER, O, O, O, O, O, O, O,... \n", + "3 [B-PER, O, O, O, O, O, O, O, O, O, O, O, O, B-... \n", + "4 [O, O, O, O] \n", + "... ... \n", + "16853 [O, O, O, O, O, B-PER, O, O, O, O, O, O, O, O,... \n", + "16854 [O, O, O, O, O, O, O, O] \n", + "16855 [B-PER, O, O, O, O, O, O, O, O, O, O, O, O, O,... \n", + "16856 [O, O, O, O, O, O, O, O, O, O, O, O, O, O, O] \n", + "16857 [O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, ... \n", + "\n", + " text_withseg \\\n", + "0 Không_khí thật náo_nhiệt . \n", + "1 Chị Lãnh và Xăng ra đi , mình đứng nhìn hai ch... \n", + "2 Suy_tính mãi , khóc mãi rồi Phúc lấy ra tờ giấ... \n", + "3 Hoà bảo hồi mới qua đâu có biết nấu_nướng gì ,... \n", + "4 Nhật_ký của thuyền_viên . \n", + "... ... \n", + "16853 Nghe thấy đã ghê_ghê nhưng Nhiêu chưa được tườ... \n", + "16854 Nhưng mọi chuyện không dừng ở đó . \n", + "16855 Hoà bảo thời_gian đầu mặc_cảm lắm , ở trong nh... \n", + "16856 Biết_bao người đã tình_nguyện hiến_dâng cả cuộ... \n", + "16857 Trên đây mới là “ thành_tích ” tiêu tiền của m... \n", + "\n", + " text_raw \n", + "0 Không khí thật náo nhiệt . \n", + "1 Chị Lãnh và Xăng ra đi , mình đứng nhìn hai ch... \n", + "2 Suy tính mãi , khóc mãi rồi Phúc l��y ra tờ giấ... \n", + "3 Hoà bảo hồi mới qua đâu có biết nấu nướng gì ,... \n", + "4 Nhật ký của thuyền viên . \n", + "... ... \n", + "16853 Nghe thấy đã ghê ghê nhưng Nhiêu chưa được tườ... \n", + "16854 Nhưng mọi chuyện không dừng ở đó . \n", + "16855 Hoà bảo thời gian đầu mặc cảm lắm , ở trong nh... \n", + "16856 Biết bao người đã tình nguyện hiến dâng cả cuộ... \n", + "16857 Trên đây mới là “ thành tích ” tiêu tiền của m... \n", + "\n", + "[16858 rows x 5 columns]" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Hàm gộp và xử lý dấu câu\n", + "def join_tokens(tokens):\n", + " text = ' '.join(tokens)\n", + " return text\n", + "\n", + "def reform_raw_text(tokens):\n", + " text = ' '.join(tokens)\n", + " return text.replace(\"_\", \" \")\n", + "\n", + "df['text_withseg'] = df['tokens'].apply(join_tokens)\n", + "df['text_raw'] = df['tokens'].apply(reform_raw_text)\n", + "\n", + "def label(x):\n", + " return [id_tag[int(i)] for i in x]\n", + "df[\"ner_labels\"] = df.ner_tags.apply(label)\n", + "df" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "sYlRxG7K9PYx" + }, + "source": [] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "id": "lkTKRcYPsZiD" + }, + "outputs": [], + "source": [ + "time = 0\n", + "org_idx = []\n", + "token = []\n", + "tag = []\n", + "for i in (df.index):\n", + " for a in range(len(df.ner_tags[i])):\n", + " # if df.ner_tags[i][a] == 6 or df.ner_tags[i][a] == 5:\n", + " if df.ner_labels[i][a] != 'O':\n", + " token.append(df.tokens[i][[a]])\n", + " tag.append(df.ner_labels[i][a])\n", + " org_idx.append(i)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 366 + }, + "id": "vTufL8Blu5fe", + "outputId": "ed82540c-c2d0-450b-9eff-0ba680a11698" + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
count
tag
B-PER7479
B-LOC6244
I-PER3522
I-LOC2783
I-ORG2055
B-ORG1212
B-NAT282
I-NAT279
\n", + "

" + ], + "text/plain": [ + "tag\n", + "B-PER 7479\n", + "B-LOC 6244\n", + "I-PER 3522\n", + "I-LOC 2783\n", + "I-ORG 2055\n", + "B-ORG 1212\n", + "B-NAT 282\n", + "I-NAT 279\n", + "Name: count, dtype: int64" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tag_data = pd.DataFrame({'org_idx': org_idx, 'token': token, 'tag': tag})\n", + "tag_data.tag.value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 363 + }, + "id": "en1q55Tf9lD7", + "outputId": "1de18f2e-88e5-4e75-847f-8aaf6b2932b4" + }, + "outputs": [ + { + "data": { + "application/vnd.google.colaboratory.intrinsic+json": { + "summary": "{\n \"name\": \"tag_data[tag_data\",\n \"rows\": 10,\n \"fields\": [\n {\n \"column\": \"org_idx\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 5203,\n \"min\": 1364,\n \"max\": 15557,\n \"num_unique_values\": 10,\n \"samples\": [\n 1364,\n 14208,\n 12272\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"token\",\n \"properties\": {\n \"dtype\": \"object\",\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"tag\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 1,\n \"samples\": [\n \"B-PER\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}", + "type": "dataframe" + }, + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
org_idxtokentag
113238102[Rơ]B-PER
1993614208[Thạc]B-PER
50743612[Khánh]B-PER
88706383[Bibi]B-PER
59274246[Thuỳ]B-PER
1712212272[Chương]B-PER
32362290[Claudia]B-PER
1690312150[Chương]B-PER
19531364[Thạc]B-PER
2188815557[Đợi]B-PER
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ], + "text/plain": [ + " org_idx token tag\n", + "11323 8102 [Rơ] B-PER\n", + "19936 14208 [Thạc] B-PER\n", + "5074 3612 [Khánh] B-PER\n", + "8870 6383 [Bibi] B-PER\n", + "5927 4246 [Thuỳ] B-PER\n", + "17122 12272 [Chương] B-PER\n", + "3236 2290 [Claudia] B-PER\n", + "16903 12150 [Chương] B-PER\n", + "1953 1364 [Thạc] B-PER\n", + "21888 15557 [Đợi] B-PER" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tag_data[tag_data.tag == 'B-PER'].sample(10)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 607 + }, + "id": "bDjW72xzQTwS", + "outputId": "305f8523-dda8-4a34-d116-63b535e766fa" + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA90AAAJOCAYAAACqS2TfAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAbytJREFUeJzt3XlYFeX///HXEQRxAVdAEhVzxV0zpbTckhTLtczcc0nTXEuzTE3LNdfMtE2t7FNqZaa5L5m7krjvG5oCmgquoHD//vDH+XpEDYnxAD4f13UuPffcZ857GA7Mi3vmHpsxxggAAAAAAKS6TM4uAAAAAACAjIrQDQAAAACARQjdAAAAAABYhNANAAAAAIBFCN0AAAAAAFiE0A0AAAAAgEUI3QAAAAAAWITQDQAAAACARQjdAAAAAABYhNANALiroUOHymazPZT3qlmzpmrWrGl/vmbNGtlsNs2bN++hvH/79u1VuHDhh/JeKXX58mV16tRJvr6+stls6t27t7NLShMKFy6shg0bpuo6bTabhg4dmqrrBAA8ugjdAPAImDlzpmw2m/2RJUsW+fn5KTg4WJMnT9alS5dS5X1Onz6toUOHKiwsLFXWl5rScm3JMWLECM2cOVPdunXTt99+qzZt2tyzb+HChWWz2fTmm28mWXa3P2jc+f1x52PTpk32vncu8/T01LPPPqtFixYlazuOHz8um82mjz/++AG2Pu1J3I67PapVq+bs8gAAaYirswsAADw8w4YNU0BAgG7cuKGIiAitWbNGvXv31vjx47VgwQKVK1fO3nfQoEF65513Hmj9p0+f1gcffKDChQurQoUKyX7dsmXLHuh9UuJ+tX3xxRdKSEiwvIb/YtWqVapWrZqGDBmS7Nd88cUXGjhwoPz8/JLVP/H7405FixZ1eP7cc8+pbdu2MsboxIkT+uyzz/TCCy9o8eLFCg4OTnZ9GUHLli3VoEEDh7Z8+fI5qRoAQFpE6AaAR0j9+vX1xBNP2J8PHDhQq1atUsOGDfXiiy9q37598vDwkCS5urrK1dXaXxNXr15V1qxZ5ebmZun7/JvMmTM79f2TIyoqSoGBgcnuX7p0aR04cECjRo3S5MmTk/WaO78/7qV48eJq3bq1/XmzZs0UGBioSZMmPXKhu1KlSg5fi/tJSEhQXFycsmTJYnFVAIC0hNPLAeARV7t2bb3//vs6ceKEvvvuO3v73a7pXr58uapXr66cOXMqe/bsKlGihN59911Jt05brlKliiSpQ4cO9lNtZ86cKenWddtlypRRaGionnnmGWXNmtX+2juv6U4UHx+vd999V76+vsqWLZtefPFFnTx50qFP4cKF1b59+ySvvX2d/1bb3a7pvnLlivr16yd/f3+5u7urRIkS+vjjj2WMcehns9nUo0cPzZ8/X2XKlJG7u7tKly6tJUuW3P0LfoeoqCh17NhRPj4+ypIli8qXL69Zs2bZlyeeDn7s2DEtWrTIXvvx48fvu97ChQurbdu2+uKLL3T69Olk1ZJSpUqVUt68eXXkyJFUW+eMGTNUu3ZteXt7y93dXYGBgfrss8/u2X/ZsmWqUKGCsmTJosDAQP38889J+ly8eFG9e/e279OiRYtq9OjRlp3lkPi9MXv2bJUuXVru7u7274u///5br732mnx8fOzfM19//XWSdZw6dUqNGzdWtmzZ5O3trT59+mjp0qWy2Wxas2aNvV9yPgeJYmNjNWTIEBUtWlTu7u7y9/dX//79FRsbe9f6k/O9/ffff6tjx47y8/OTu7u7AgIC1K1bN8XFxeno0aOy2WyaMGFCktdt2LBBNptN//vf/5LxFQWA9ImRbgCA2rRpo3fffVfLli1T586d79pnz549atiwocqVK6dhw4bJ3d1dhw8f1vr16yXdCl7Dhg3T4MGD1aVLF9WoUUOS9NRTT9nX8c8//6h+/fp65ZVX1Lp1a/n4+Ny3ro8++kg2m00DBgxQVFSUJk6cqLp16yosLMw+Ip8cyantdsYYvfjii1q9erU6duyoChUqaOnSpXr77bf1999/JwkP69at088//6w33nhDOXLk0OTJk9WsWTOFh4crT54896zr2rVrqlmzpg4fPqwePXooICBAc+fOVfv27XXx4kX16tVLpUqV0rfffqs+ffqoQIEC6tevn6TkncL83nvv6Ztvvkn2aHd0dLTOnTvn0Gaz2e67DYmvu3Dhgh5//PF/fY/k+uyzz1S6dGm9+OKLcnV11W+//aY33nhDCQkJ6t69u0PfQ4cOqUWLFuratavatWunGTNm6KWXXtKSJUv03HPPSbp1VsWzzz6rv//+W6+//roKFiyoDRs2aODAgTpz5owmTpyYojqvXr2a5Gvm5eVlP3ti1apVmjNnjnr06KG8efOqcOHCioyMVLVq1eyhNl++fFq8eLE6duyomJgY+yR5165dU506dRQeHq6ePXvKz89P3377rVatWpWiWqVbo+0vvvii1q1bpy5duqhUqVLatWuXJkyYoIMHD2r+/PkO/ZPzvX369Gk9+eSTunjxorp06aKSJUvq77//1rx583T16lUVKVJETz/9tGbPnq0+ffo4rH/27NnKkSOHGjVqlOJtAoA0zwAAMrwZM2YYSWbr1q337OPl5WUqVqxofz5kyBBz+6+JCRMmGEnm7Nmz91zH1q1bjSQzY8aMJMueffZZI8lMmzbtrsueffZZ+/PVq1cbSeaxxx4zMTEx9vY5c+YYSWbSpEn2tkKFCpl27dr96zrvV1u7du1MoUKF7M/nz59vJJkPP/zQoV/z5s2NzWYzhw8ftrdJMm5ubg5tO3bsMJLMJ598kuS9bjdx4kQjyXz33Xf2tri4OBMUFGSyZ8/usO2FChUyISEh913f3fp26NDBZMmSxZw+fdoY839f27lz59r7J35/3O3h7u7usG5JpmPHjubs2bMmKirKbNu2zTz//PNGkhk7duy/1nbs2LFk9b169WqStuDgYFOkSJEk2yrJ/PTTT/a26Ohokz9/fofv5+HDh5ts2bKZgwcPOrz+nXfeMS4uLiY8PNxhG4cMGZKs7bjbY/Xq1fb1ZMqUyezZs8fhtR07djT58+c3586dc2h/5ZVXjJeXl33bE78/5syZY+9z5coVU7RoUYf3Sfw6JOdz8O2335pMmTKZP//806HftGnTjCSzfv16h69Dcr6327ZtazJlynTXny8JCQnGGGOmT59uJJl9+/bZl8XFxZm8efPetW4AyEg4vRwAIEnKnj37fWcxz5kzpyTp119/TfHpuO7u7urQoUOy+7dt21Y5cuSwP2/evLny58+v33//PUXvn1y///67XFxc1LNnT4f2fv36yRijxYsXO7TXrVvXYZS3XLly8vT01NGjR//1fXx9fdWyZUt7W+bMmdWzZ09dvnxZf/zxx3/elkGDBunmzZsaNWrUv/b99NNPtXz5cofHndsqSV999ZXy5csnb29vPfHEE1q5cqX69++vvn37/ud6E91+JkPiCPyzzz6ro0ePKjo62qGvn5+fmjRpYn/u6emptm3bavv27YqIiJAkzZ07VzVq1FCuXLl07tw5+6Nu3bqKj4/X2rVrU1Rnly5dknzNypcvb1/+7LPPOlyLb4zRTz/9pBdeeEHGGIdagoODFR0drb/++kvSre+P/Pnzq3nz5vbXZ82aVV26dElRrdKtr0OpUqVUsmRJh/euXbu2JGn16tUO/f/tezshIUHz58/XCy+8cNf5ABIvUXn55ZeVJUsWzZ49275s6dKlOnfuXLKviQeA9IrTywEAkm7dB9rb2/uey1u0aKEvv/xSnTp10jvvvKM6deqoadOmat68uTJlSt7fcB977LEHmjStWLFiDs9tNpuKFi36r9cz/1cnTpyQn5+fQ+CXbp2mnrj8dgULFkyyjly5cunChQv/+j7FihVL8vW71/ukRJEiRdSmTRt9/vnn/zob/ZNPPpmsidQaNWqkHj16KC4uTlu3btWIESN09erVZH8fJMf69es1ZMgQbdy4UVevXnVYFh0dLS8vL/vzokWLJpl/oHjx4pJu3drL19dXhw4d0s6dO+95Wn5UVFSK6ixWrJjq1q17z+V3zgZ/9uxZXbx4UZ9//rk+//zz+9Zy4sSJu25biRIlUlSrdOtU/H379iX76/Bv39tnz55VTEyMypQpc9/3zZkzp1544QV9//33Gj58uKRbp5Y/9thj9sAPABkVoRsAoFOnTik6OjrJraFu5+HhobVr12r16tVatGiRlixZoh9//FG1a9fWsmXL5OLi8q/v8yDXYSfXnYEkUXx8fLJqSg33eh9zx6RrzvLee+/p22+/1ejRo9W4ceP/vL4CBQrYg2aDBg2UN29e9ejRQ7Vq1VLTpk3/8/qPHDmiOnXqqGTJkho/frz8/f3l5uam33//XRMmTEjRmRYJCQl67rnn1L9//7suTwzpqe3O7/nE2lu3bq127drd9TW337ovuZL7OUhISFDZsmU1fvz4u/b39/d3eJ6a39tt27bV3LlztWHDBpUtW1YLFizQG2+8kap/rAGAtIjQDQDQt99+K0n/erunTJkyqU6dOqpTp47Gjx+vESNG6L333tPq1atVt27dex74p9ShQ4ccnhtjdPjwYYdQkitXLl28eDHJa0+cOKEiRYrYnz9IbYUKFdKKFSt06dIlh9Hu/fv325enhkKFCmnnzp1KSEhwCB6p/T6PP/64WrdurenTp6tq1aqpss7bvf7665owYYIGDRqkJk2a/Ofvg99++02xsbFasGCBw0jrnac+Jzp8+LCMMQ7ve/DgQUmyz0r/+OOP6/Lly/cdlX4Y8uXLpxw5cig+Pv5faylUqJB2796dZNsOHDiQpG9yPwePP/64duzYoTp16qTK5zVfvnzy9PTU7t27/7Xv888/r3z58mn27NmqWrWqrl69qjZt2vznGgAgreNPiwDwiFu1apWGDx+ugIAAtWrV6p79zp8/n6StQoUKkmS/1VC2bNkk6a4H/ynxzTffOFxnPm/ePJ05c0b169e3tz3++OPatGmT4uLi7G0LFy5McmuxB6mtQYMGio+P15QpUxzaJ0yYIJvN5vD+/0WDBg0UERGhH3/80d528+ZNffLJJ8qePbueffbZVHkf6da13Tdu3NCYMWNSbZ2JXF1d1a9fP+3bt0+//vrrf15f4ujq7aOp0dHRmjFjxl37nz59Wr/88ov9eUxMjL755htVqFBBvr6+km5dU7xx40YtXbo0yesvXryomzdv/ue6k8PFxUXNmjXTTz/9dNegevbsWfv/GzRooNOnT2vevHn2tqtXr971tPTkfg5efvll/f333/riiy+SrOPatWu6cuXKA21PpkyZ1LhxY/3222/atm1bkuW370NXV1e1bNlSc+bM0cyZM1W2bNkUjeoDQHrDSDcAPEIWL16s/fv36+bNm4qMjNSqVau0fPlyFSpUSAsWLFCWLFnu+dphw4Zp7dq1CgkJUaFChRQVFaWpU6eqQIECql69uqRbB/45c+bUtGnTlCNHDmXLlk1Vq1ZNcl1rcuXOnVvVq1dXhw4dFBkZqYkTJ6po0aIOtzXr1KmT5s2bp+eff14vv/yyjhw5ou+++y7J7asepLYXXnhBtWrV0nvvvafjx4+rfPnyWrZsmX799Vf17t071W6N1aVLF02fPl3t27dXaGioChcurHnz5mn9+vWaOHFikmvK/4vE0e7b7wF+p8Tvjzs99dRTDqOld9O+fXsNHjw42aewr1y5UtevX0/S3rhxY9WrV09ubm564YUX9Prrr+vy5cv64osv5O3trTNnziR5TfHixdWxY0dt3bpVPj4++vrrrxUZGekQ0t9++20tWLBADRs2VPv27VW5cmVduXJFu3bt0rx583T8+HHlzZv3X+tODaNGjdLq1atVtWpVde7cWYGBgTp//rz++usvrVixwv4Hrs6dO2vKlClq27atQkNDlT9/fn377bfKmjVrknUm93PQpk0bzZkzR127dtXq1av19NNP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o/r27avcuXPL09NTb775poKCglStWjVJUr169RQYGKg2bdpozJgxioiI0KBBg9S9e3f7aHXXrl01ZcoU9e/fX6+99ppWrVqlOXPmaNGijH37EQAAAACAczl1pPuzzz5TdHS0atasqfz589sfP/74o73PhAkT1LBhQzVr1kzPPPOMfH199fPPP9uXu7i4aOHChXJxcVFQUJBat26ttm3batiwYfY+AQEBWrRokZYvX67y5ctr3Lhx+vLLL7ldGAAAAADAUk4d6TbG/GufLFmy6NNPP9Wnn356zz6FChXS77//ft/11KxZU9u3b3/gGgEAAAAASKk0M3s5AAAAAAAZDaEbAAAAAACLELoBAAAAALAIoRsAAAAAAIsQugEAAAAAsAihGwAAAAAAixC6AQAAAACwCKEbAAAAAACLELoBAAAAALAIoRsAAAAAAIsQugEAAAAAsAihGwAAAAAAixC6AQAAAACwCKEbAAAAAACLELoBAAAAALAIoRsAAAAAAIsQugEAAAAAsAihGwAAAAAAixC6AQAAAACwCKEbAAAAAACLELoBAAAAALAIoRsAAAAAAIsQugEAAAAAsAihGwAAAAAAixC6AQAAAACwCKEbAAAAAACLELoBAAAAALAIoRsAAAAAAIsQugEAAAAAsAihGwAAAAAAixC6AQAAAACwCKEbAAAAAACLELoBAAAAALAIoRsAAAAAAIsQugEAAAAAsAihGwAAAAAAixC6AQAAAACwCKEbAAAAAACLELoBAAAAALAIoRsAAAAAAIsQugEAAAAAsIirswsAAABAxlf4nUXOLsFSx0eFOLsEAGkUI90AAAAAAFiE0A0AAAAAgEUI3QAAAAAAWITQDQAAAACARQjdAAAAAABYhNANAAAAAIBFCN0AAAAAAFjEqaF77dq1euGFF+Tn5yebzab58+c7LDfGaPDgwcqfP788PDxUt25dHTp0yKHP+fPn1apVK3l6eipnzpzq2LGjLl++7NBn586dqlGjhrJkySJ/f3+NGTPG6k0DAAAAAMC5ofvKlSsqX768Pv3007suHzNmjCZPnqxp06Zp8+bNypYtm4KDg3X9+nV7n1atWmnPnj1avny5Fi5cqLVr16pLly725TExMapXr54KFSqk0NBQjR07VkOHDtXnn39u+fYBAAAAAB5trs588/r166t+/fp3XWaM0cSJEzVo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gXSCH25A2sBnMX1j/wHOtXPnTrVu3VqXLl1ydilIodDQUHXp0kU3btxwdinpBqEbSMOuXbumq1evKiYmRjabzdnl4D9KSEhwdglIodjYWF24cEGS+CymQzExMTp8+LAuXbrE/kvHoqOjdfLkSe3bt8/ZpSCFduzYoSpVqqhEiRLKkSOHs8tBCuzYsUPVq1dX1qxZlTlzZmeXk24QujOo6OhoHTlyRFFRURzop1MHDx5Ujx491KlTJ33zzTeMzqRD58+f16FDh7R//35JUqZMmRQfH+/kqvCgDh48qE6dOql+/fqaOnWqs8vBA9q/f79atWqljh076sMPP3R2OUih/fv367XXXlP//v313XffSeIPmenN3r179dRTT+mtt97SBx984OxykAJ79+7V008/rffee0+TJk1ydjnpis1wJJ/h7NmzRx07dtTFixcVFRWl999/X23atFHevHmdXRqSadeuXXruuefUqlUrBQUFqXHjxnJ1dXV2WXgAu3fvVufOnRURESEXFxc1bNhQEydOdHZZeEC7du1ScHCwWrVqpVq1aqlmzZrKmjWrs8tCMiX+LO3UqZNefvlllStXTpJ0/Phx+fj4yMPDw8kVIjl27dqlunXrqlOnTmrYsKGCgoIkSSdOnFChQoWcXB2SY9euXapdu7Y8PT115MgRZ5eDFNi9e7eeffZZ5cqVS8uXL1dAQICkW5fscAbRv2OkO4PZsWOHgoKCVLVqVX366aeqX7++hgwZor/++svZpSGZwsPD1bhxY7Vp00bjxo1T8+bN5erqykh3OpL4OXzqqac0depU1axZU9OmTdOMGTOcXRoewMmTJ9W4cWO1bNlSY8eOVYMGDZQ1a1Y+i+lE4s/S1q1b68MPP7QH7rFjx6pmzZpatGiR4uLinFwl/s2JEyf04osvqnXr1vroo4/sgXvcuHEqUqSI/ve//zm5QvybsLAwVatWTbVq1dKFCxf02muv6cqVK84uCw9gx44devLJJ1WpUiV5e3vro48+0q5duyRxyVVyEbozkN27d6tGjRrq3r27Jk2apDp16mjQoEG6fv26Fi5c6OzykEzLli1TwYIF1bNnT4eD+7v9UOPgP+05dOiQqlWrpn79+mncuHGqX7+++vXrp5s3b+ro0aMOfTk1Mm1bvHixfH199fbbbzu081lMHxYtWqQCBQqoX79+9rYPPvhAI0eOlL+/v7p06aKFCxcSvNOoxM/UTz/9pFKlSumtt96yL/v44481ZMgQNWzYUG+88QbBOw3bs2ePgoKC1KtXL82ZM0fz5s3T3Llz9eabb+rq1avOLg/JcODAAVWsWFH9+vXT8uXL1aVLF23fvl2TJk3S7t27nV1eukHozkCmTp2qy5cvq169evZbMfzwww+6efOmrl69qnHjxmn79u06duyYkyvF/fzxxx+KjY2Vv79/koP7xIOQK1eu6MKFC/x1MQ0xxujmzZuaNm2asmfPrvz589uXzZ8/XwkJCdq3b5+mTZumOXPmyBijTJky2V+LtGfdunVydXWVr69vkmWJ+ywxsPFZTHtWrVolFxcX+2fxypUrunLliubNm6c///xTjRo1UocOHfTzzz/zB7A0KPEztXbtWkmy78eoqCgdPHhQv//+uz7//HN16dJFXbt2tV/njbRl2bJlGjJkiEaMGCFJql27tn799VfNnTtXPXr0IHinYcYYJSQkaMeOHRo/fryGDx8uSWrfvr3efPNNbd++XRMnTiR4JxPXdGcAly9fVvbs2SVJTZo00fr167Vw4UKtWLFCo0ePVr9+/ZQvXz4tWbJEp0+fVlRUlOrUqaMXX3xRjRs3dm7xcJCQkKBOnTrpxIkTWrlypW7cuHHXmSE/+OADPfbYY+rUqZMTqsTdJO6rI0eO2P/A1bVrV507d04fffSRunTponLlymn27Nk6deqUrl69qqJFi2rAgAGqWbOms8vHXbzxxhtau3attmzZcs/ruF999VVVr15db7zxxkOuDvdjjFGrVq107tw5LV68WJLk4uKimzdvOsyPUb58eZUqVUo//PCDs0rFPSReJ/rcc88pV65c9j9W2mw2Xbp0yT7z9alTp/Tyyy/L29tbv/zyC38ASyPi4uLk5uZmf37ndb+rVq1So0aN9NJLL2nKlCnMlZEGJSQkKFOmTPbjm8QQ7uLiIkmaNWuWJk+erIoVK6p3794qU6aMkytO2xjpTud27NihVq1a6cCBA5KkX375RVWrVlW1atU0ZswY/fjjjxo8eLC6deumX3/9VTNnztR7772nQ4cOqWzZsk6uHokS//aVKVMmPfnkk1q9erX++OMPZc6cWQkJCQ4joefPn9e+ffvk7e3trHJxh9DQUJUrV07nz5/X448/rgEDBqhcuXIaMWKE3nnnHc2fP1+jRo3Sq6++ql9++UXbtm1T586dlStXLvZjGpQ46unv768jR45oxYoV9lnnbx8RvXTpkjJnzqwCBQo4pU7cm81mU4kSJfTnn39qz549cnFxUUJCgj1wx8fH69q1a6pYsaIqVarE2SZpWJ06dbRkyRItXrzYHto8PDzs+yxv3rzy9/fXM888Q+BOI/bu3au2bdvqk08+kXTr56bNZrP/HDXGOIx49+rVi2u805jdu3erZs2a+v333+236LPZbHJxcbHfm7tdu3bq2bOntm/frilTpmjHjh3OLDntM0i3wsLCjIuLixk0aJAxxpibN2/al7Vq1cpkyZLFrFixwsTGxtrbExISjDHGxMXFPdxicVfXrl0z169fN8eOHTPGGBMfH28iIyNNlSpVTL58+czGjRuTvGbw4MGmQoUK5uTJkw+5WtxNWFiYyZEjh+ndu7cx5v8+Y8eOHTOvv/66KVu2rPn000/t/W//PPI5TDsSP4sREREmOjraGHNrX1aoUMEUK1bMrF692ly7ds3ebsytz2K5cuVMeHi40+rGLZcuXTKXL182kZGR9rbjx4+b8uXLm8KFC9t/xt7u3XffNQEBAebIkSMPsVLcz5UrV8w///xjrl+/bm9bt26dKVasmKlevbpZtWqVQ/+EhATz3nvvmccff5z9mEbEx8eb7t27mxIlSpjHH3/cNGrUyLz77rsmIiIiST9jjFm9erWx2Wyme/fuzigX99CmTRtjs9lM69atTa1atcyAAQPM8ePH7b//bs8c33zzjQkICDA9e/Z0OMaBI0J3OrV9+3bj4eFh3n33XYf2c+fO2f//wgsvmHz58pnff//dfnCf+GFJ/BfOs3fvXtOyZUtTpkwZky9fPvPUU0+Zjz/+2MTFxZk1a9aYUqVKGU9PT/PJJ5+YdevWmZ9++sl07NjReHl5me3btzu7fJh7fw4vX75sjLl10N+lSxdTrVo1M3HiRPvyGzduPNQ6cX979+41zZs3N+XLlzceHh6mbNmyZvjw4cYYY/766y9TunRp4+fnZ95//32za9cu87///c9069bNeHp6mrCwMCdXjz179pj69eubChUqmAoVKpjffvvNGHProHDevHmmSJEixt/f33z11Vfmr7/+Mj///LPp0qWL8fT0NH/99ZeTq0eiPXv2mBdeeMEEBgaa+vXrmx9//NG+bNasWcbX19eULl3a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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "tag_counts = tag_data.tag.value_counts()\n", + "\n", + "plt.figure(figsize=(10, 6))\n", + "tag_counts.plot(kind='bar')\n", + "plt.title('Distribution of NER Label Frequency')\n", + "plt.xlabel('NER Label')\n", + "plt.ylabel('Frequency')\n", + "plt.xticks(rotation=45, ha='right')\n", + "plt.tight_layout()\n", + "plt.show()\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "s_2oNNTJARjZ" + }, + "source": [ + "Nhãn B-PER có tần suất cao nhất, vượt quá 7.000.\n", + "\n", + "Nhãn B-LOC đứng thứ hai với khoảng 6.000 lần xuất hiện.\n", + "\n", + "Các nhãn I-PER, I-LOC, và I-ORG có tần suất giảm dần, lần lượt khoảng 4.000, 3000, và 2.000.\n", + "\n", + "Nhãn B-ORG và B-NAT có tần suất thấp hơn, dưới 1.000.\n", + "\n", + "Nhãn I-NAT có tần suất rất thấp." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "BOVwaIiGAqDo" + }, + "source": [ + "Vấn đề:\n", + "\n", + "\n", + "* Lệch dữ liệu (Data Imbalance): Mô hình có thể thiên về dự đoán các nhãn phổ biến (như B-PER, B-LOC), dẫn đến hiệu suất kém với các nhãn hiếm (như I-NAT, B-NAT).\n", + "\n", + "* Khó khăn trong học tập: Các nhãn có tần suất thấp có thể không cung cấp đủ thông tin để mô hình học tốt, làm giảm độ chính xác tổng thể.\n", + "\n", + "\n", + "\n", + "* Cần kỹ thuật cân bằng: Có thể cần áp dụng các phương pháp như oversampling cho nhãn hiếm, undersampling cho nhãn phổ biến, hoặc sử dụng các hàm mất mát có trọng số (weighted loss) để cải thiện hiệu suất. (Khó nha bro\n", + ")\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "8c3ogIAxQTmM" + }, + "source": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "m2WSqdVxbboH" + }, + "source": [ + "### Thay đổi các chunking chứa NAT bằng O" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 363 + }, + "id": "lIPB1IyCbjEd", + "outputId": "f580ffc9-9460-4aed-821a-dca9d7379699" + }, + "outputs": [ + { + "data": { + "application/vnd.google.colaboratory.intrinsic+json": { + "summary": "{\n \"name\": \"tag_data[tag_data\",\n \"rows\": 10,\n \"fields\": [\n {\n \"column\": \"org_idx\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 4449,\n \"min\": 269,\n \"max\": 10741,\n \"num_unique_values\": 10,\n \"samples\": [\n 640,\n 3419,\n 9305\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"token\",\n \"properties\": {\n \"dtype\": \"object\",\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"tag\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 1,\n \"samples\": [\n \"B-NAT\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}", + "type": "dataframe" + }, + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
org_idxtokentag
31542236[tiếng]B-NAT
48873419[VN]B-NAT
419269[Người]B-NAT
25481821[người]B-NAT
993678[người]B-NAT
130329305[Mỹ]B-NAT
131839436[tiếng]B-NAT
1411910184[tiếng]B-NAT
942640[người]B-NAT
1484610741[người]B-NAT
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ], + "text/plain": [ + " org_idx token tag\n", + "3154 2236 [tiếng] B-NAT\n", + "4887 3419 [VN] B-NAT\n", + "419 269 [Người] B-NAT\n", + "2548 1821 [người] B-NAT\n", + "993 678 [người] B-NAT\n", + "13032 9305 [Mỹ] B-NAT\n", + "13183 9436 [tiếng] B-NAT\n", + "14119 10184 [tiếng] B-NAT\n", + "942 640 [người] B-NAT\n", + "14846 10741 [người] B-NAT" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tag_data[tag_data.tag == 'B-NAT'].sample(10)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "SV71o4CkeNMJ", + "outputId": "ef587b35-80ad-4078-a444-a6a76f9e13f3" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Tag counts before replacement:\n", + "tag\n", + "B-PER 7479\n", + "B-LOC 6244\n", + "I-PER 3522\n", + "I-LOC 2783\n", + "I-ORG 2055\n", + "B-ORG 1212\n", + "B-NAT 282\n", + "I-NAT 279\n", + "Name: count, dtype: int64\n", + "\n", + "Tag counts after replacing NAT with O:\n", + "tag\n", + "B-PER 7479\n", + "B-LOC 6244\n", + "I-PER 3522\n", + "I-LOC 2783\n", + "I-ORG 2055\n", + "B-ORG 1212\n", + "Name: count, dtype: int64\n" + ] + } + ], + "source": [ + "def replace_label_in_dataset(target, x):\n", + " new_labels = []\n", + " # print(x)\n", + " i = 0\n", + " while i < len(x):\n", + " if id_tag[x[i]] == target:\n", + " # Find the end of the entity\n", + " j = i\n", + " while j < len(x) and (id_tag[x[j]] == target or id_tag[x[j]] == target.replace('B-', 'I-')):\n", + " j += 1\n", + " # Replace all tags in this entity with 'O' (id 0)\n", + " for k in range(i, j):\n", + " new_labels.append(0)\n", + " i = j # Move to the end of the entity\n", + " else:\n", + " new_labels.append(x[i])\n", + " i += 1\n", + " return new_labels\n", + "\n", + "df['ner_tags_replaced_nat'] = df.ner_tags.apply(lambda x: replace_label_in_dataset('B-NAT', x))\n", + "df['ner_labels_replaced_nat'] = df.ner_tags_replaced_nat.apply(label)\n", + "\n", + "# Verify the change\n", + "time = 0\n", + "org_idx_replaced = []\n", + "token_replaced = []\n", + "tag_replaced = []\n", + "for i in (df.index):\n", + " for a in range(len(df.ner_tags_replaced_nat[i])):\n", + " if df.ner_labels_replaced_nat[i][a] != 'O':\n", + " token_replaced.append(df.tokens[i][[a]])\n", + " tag_replaced.append(df.ner_labels_replaced_nat[i][a])\n", + " org_idx_replaced.append(i)\n", + "\n", + "tag_data_replaced = pd.DataFrame({'org_idx': org_idx_replaced, 'token': token_replaced, 'tag': tag_replaced})\n", + "\n", + "print(\"Tag counts before replacement:\")\n", + "print(tag_data.tag.value_counts())\n", + "print(\"\\nTag counts after replacing NAT with O:\")\n", + "print(tag_data_replaced.tag.value_counts())" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "ygcdOZIFfdSg", + "outputId": "b5b76ff1-e391-4c1a-9997-127b8ddc286f" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Unique values in ner_labels_replaced_nat:\n", + "O 346105\n", + "B-PER 7479\n", + "B-LOC 6244\n", + "I-PER 3522\n", + "I-LOC 2783\n", + "I-ORG 2055\n", + "B-ORG 1212\n", + "Name: count, dtype: int64\n" + ] + } + ], + "source": [ + "print(\"\\nUnique values in ner_labels_replaced_nat:\")\n", + "all_labels_replaced = [label for sublist in df['ner_labels_replaced_nat'] for label in sublist]\n", + "print(pd.Series(all_labels_replaced).value_counts())\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "YVtsiaqLgTo9" + }, + "source": [ + "### After process" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "collapsed": true, + "id": "-nQAuJLHfRgU", + "outputId": "608a93f9-292a-4f33-b2d8-7a074d5b8816" + }, + "outputs": [ + { + "data": { + "application/vnd.google.colaboratory.intrinsic+json": { + "summary": "{\n \"name\": \"df[40:80]\",\n \"rows\": 40,\n \"fields\": [\n {\n \"column\": \"tokens\",\n \"properties\": {\n \"dtype\": \"object\",\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"ner_tags\",\n \"properties\": {\n \"dtype\": \"object\",\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"ner_labels\",\n \"properties\": {\n \"dtype\": \"object\",\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"text_withseg\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 40,\n \"samples\": [\n \"C\\u00f3 \\u0111\\u00fang ch\\u1ecb n\\u1eb1m tr\\u00ean m\\u1ed9t d\\u00e3y n\\u00fai cao \\u1edf mi\\u1ec1n t\\u00e2y \\u0110\\u1ee9c_Ph\\u1ed5 ?\",\n \"B\\u01b0\\u1edbc v\\u00e0o \\u0111\\u1ea7u ng\\u00f5 , nh\\u00e0 c\\u00f4 C\\u00fac ph\\u01a1i \\u0111\\u1ea7y b\\u00e1nh_tr\\u00e1ng ph\\u00eda tr\\u01b0\\u1edbc .\",\n \"Chung m\\u1ed9t ch\\u1eef \\\" L\\u01b0\\u01a1ng \\\" ...\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"text_raw\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 40,\n \"samples\": [\n \"C\\u00f3 \\u0111\\u00fang ch\\u1ecb n\\u1eb1m tr\\u00ean m\\u1ed9t d\\u00e3y n\\u00fai cao \\u1edf mi\\u1ec1n t\\u00e2y \\u0110\\u1ee9c Ph\\u1ed5 ?\",\n \"B\\u01b0\\u1edbc v\\u00e0o \\u0111\\u1ea7u ng\\u00f5 , nh\\u00e0 c\\u00f4 C\\u00fac ph\\u01a1i \\u0111\\u1ea7y b\\u00e1nh tr\\u00e1ng ph\\u00eda tr\\u01b0\\u1edbc .\",\n \"Chung m\\u1ed9t ch\\u1eef \\\" L\\u01b0\\u01a1ng \\\" ...\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"ner_tags_replaced_nat\",\n \"properties\": {\n \"dtype\": \"object\",\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"ner_labels_replaced_nat\",\n \"properties\": {\n \"dtype\": \"object\",\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}", + "type": "dataframe" + }, + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
tokensner_tagsner_labelstext_withsegtext_rawner_tags_replaced_natner_labels_replaced_nat
40[Nguyên, phân_công, anh, bạn, đồng_nghiệp, ở, ...[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...[B-PER, O, O, O, O, O, O, O, O, O, O, O, O, O,...Nguyên phân_công anh bạn đồng_nghiệp ở vòng ng...Nguyên phân công anh bạn đồng nghiệp ở vòng ng...[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...[B-PER, O, O, O, O, O, O, O, O, O, O, O, O, O,...
41[Theo, kế_hoạch, ,, những, ngày, đầu, cả, hai,...[0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 0, 0, 0, 0, ...[O, O, O, O, O, O, O, O, O, B-NAT, I-NAT, O, O...Theo kế_hoạch , những ngày đầu cả hai luyện ti...Theo kế hoạch , những ngày đầu cả hai luyện ti...[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...[O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, ...
42[Thật, đáng, tiếc, biết_bao, ,, những, ngày, n...[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...[O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, ...Thật đáng tiếc biết_bao , những ngày này trăng...Thật đáng tiếc biết bao , những ngày này trăng...[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...[O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, ...
43[Hải, và, bố_mẹ, ngày, trước, ở, chung, với, ô...[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, 0, 0, 0, ...[B-PER, O, O, O, O, O, O, O, O, O, B-LOC, I-LO...Hải và bố_mẹ ngày trước ở chung với ông_bà trê...Hải và bố mẹ ngày trước ở chung với ông bà trê...[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, 0, 0, 0, ...[B-PER, O, O, O, O, O, O, O, O, O, B-LOC, I-LO...
44[Cho_nên, phương_án, của, ông, Phong, là, “, b...[0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...[O, O, O, O, B-PER, O, O, O, O, O, O, O, O, O,...Cho_nên phương_án của ông Phong là “ bán cả co...Cho nên phương án của ông Phong là “ bán cả co...[0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...[O, O, O, O, B-PER, O, O, O, O, O, O, O, O, O,...
45[Một, thời_gian, ngắn, sau, trận, tỉ_thí, lịch...[0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, ...[O, O, O, O, O, O, O, O, B-PER, I-PER, O, O, O...Một thời_gian ngắn sau trận tỉ_thí lịch_sử , M...Một thời gian ngắn sau trận tỉ thí lịch sử , M...[0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, ...[O, O, O, O, O, O, O, O, B-PER, I-PER, O, O, O...
46[Kao, chỉ, mới, được, gửi, lên, đây, hơn, một,...[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...[B-PER, O, O, O, O, O, O, O, O, O, O, O, O, O,...Kao chỉ mới được gửi lên đây hơn một tuần , nh...Kao chỉ mới được gửi lên đây hơn một tuần , nh...[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...[B-PER, O, O, O, O, O, O, O, O, O, O, O, O, O,...
47[An_Lư, cũng, tích_cực, đào_tạo, các, thuyền_v...[5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...[B-LOC, O, O, O, O, O, O, O, O, O, O, O, O, O,...An_Lư cũng tích_cực đào_tạo các thuyền_viên ng...An Lư cũng tích cực đào tạo các thuyền viên ng...[5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...[B-LOC, O, O, O, O, O, O, O, O, O, O, O, O, O,...
48[Anh, cười, tươi, :, \", Nếu, không, thắng, thì...[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0][O, O, O, O, O, O, O, O, O, O, O, O, O, O, O]Anh cười tươi : \" Nếu không thắng thì đâu còn ...Anh cười tươi : \" Nếu không thắng thì đâu còn ...[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0][O, O, O, O, O, O, O, O, O, O, O, O, O, O, O]
49[Hắn, không, có, một, dữ_liệu, nào, nằm, trong...[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...[O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, ...Hắn không có một dữ_liệu nào nằm trong tay thá...Hắn không có một dữ liệu nào nằm trong tay thá...[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...[O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, ...
50[Và, cho_dù, xảy, ra, tình_huống, nào, thì, ôn...[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0][O, O, O, O, O, O, O, O, O, O, O, O]Và cho_dù xảy ra tình_huống nào thì ông giám_đ...Và cho dù xảy ra tình huống nào thì ông giám đ...[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0][O, O, O, O, O, O, O, O, O, O, O, O]
51[Để, em, tính, lại, .][0, 0, 0, 0, 0][O, O, O, O, O]Để em tính lại .Để em tính lại .[0, 0, 0, 0, 0][O, O, O, O, O]
52[Ông, đến, có, khi, mặc, sắc_phục, ,, có, khi,...[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...[O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, ...Ông đến có khi mặc sắc_phục , có khi mặc thườn...Ông đến có khi mặc sắc phục , có khi mặc thườn...[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...[O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, ...
53[Có, đứa, trả_lời, :, chưa, có, lúc, nào, thấy...[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0][O, O, O, O, O, O, O, O, O, O, O, O, O]Có đứa trả_lời : chưa có lúc nào thấy hạnh_phú...Có đứa trả lời : chưa có lúc nào thấy hạnh phú...[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0][O, O, O, O, O, O, O, O, O, O, O, O, O]
54[Vậy, đó, ,, lửa, thử, vàng, gian_nan, thử, sứ...[0, 0, 0, 0, 0, 0, 0, 0, 0, 0][O, O, O, O, O, O, O, O, O, O]Vậy đó , lửa thử vàng gian_nan thử sức .Vậy đó , lửa thử vàng gian nan thử sức .[0, 0, 0, 0, 0, 0, 0, 0, 0, 0][O, O, O, O, O, O, O, O, O, O]
55[Chung, một, chữ, \", Lương, \", ...][0, 0, 0, 0, 0, 0, 0][O, O, O, O, O, O, O]Chung một chữ \" Lương \" ...Chung một chữ \" Lương \" ...[0, 0, 0, 0, 0, 0, 0][O, O, O, O, O, O, O]
56[Bước, vào, đầu, ngõ, ,, nhà, cô, Cúc, phơi, đ...[0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0][O, O, O, O, O, O, O, B-PER, O, O, O, O, O, O]Bước vào đầu ngõ , nhà cô Cúc phơi đầy bánh_tr...Bước vào đầu ngõ , nhà cô Cúc phơi đầy bánh tr...[0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0][O, O, O, O, O, O, O, B-PER, O, O, O, O, O, O]
57[Nếu, có, trở_ngại, một_chút, thì, đúng, là, l...[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, 0, 5, ...[O, O, O, O, O, O, O, O, O, O, O, B-LOC, I-LOC...Nếu có trở_ngại một_chút thì đúng là lượng khá...Nếu có trở ngại một chút thì đúng là lượng khá...[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, 0, 5, ...[O, O, O, O, O, O, O, O, O, O, O, B-LOC, I-LOC...
58[Anh, Dĩa, kéo, chúng_tôi, lên, bờ, ,, khui, b...[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...[O, B-PER, O, O, O, O, O, O, O, O, O, O, O, O,...Anh Dĩa kéo chúng_tôi lên bờ , khui bia , rượu...Anh Dĩa kéo chúng tôi lên bờ , khui bia , rượu...[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...[O, B-PER, O, O, O, O, O, O, O, O, O, O, O, O,...
59[Có, đúng, chị, nằm, trên, một, dãy, núi, cao,...[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0][O, O, O, O, O, O, O, O, O, O, O, O, B-LOC, O]Có đúng chị nằm trên một dãy núi cao ở miền tâ...Có đúng chị nằm trên một dãy núi cao ở miền tâ...[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0][O, O, O, O, O, O, O, O, O, O, O, O, B-LOC, O]
60[Bắt_đầu, từ, năm, 1961, ,, xã, Nhuận_Đức, phá...[0, 0, 0, 0, 0, 5, 6, 0, 0, 0, 0, 0][O, O, O, O, O, B-LOC, I-LOC, O, O, O, O, O]Bắt_đầu từ năm 1961 , xã Nhuận_Đức phát_động p...Bắt đầu từ năm 1961 , xã Nhuận Đức phát động p...[0, 0, 0, 0, 0, 5, 6, 0, 0, 0, 0, 0][O, O, O, O, O, B-LOC, I-LOC, O, O, O, O, O]
61[Năm, nay, đầu, trên, xóm, dưới, lắc_đầu, ngao...[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0][O, O, O, O, O, O, O, O, O, O, O, O, O]Năm nay đầu trên xóm dưới lắc_đầu ngao_ngán bỏ...Năm nay đầu trên xóm dưới lắc đầu ngao ngán bỏ...[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0][O, O, O, O, O, O, O, O, O, O, O, O, O]
62[Và, đến, nay, những, mét, hầm, cuối_cùng, cũn...[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0][O, O, O, O, O, O, O, O, O, O, O, O]Và đến nay những mét hầm cuối_cùng cũng đã về ...Và đến nay những mét hầm cuối cùng cũng đã về ...[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0][O, O, O, O, O, O, O, O, O, O, O, O]
63[Đèn, đường, loang_loáng, ,, hoà, chung, dòng,...[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, ...[O, O, O, O, O, O, O, O, O, O, O, O, O, B-LOC,...Đèn đường loang_loáng , hoà chung dòng xe tấp_...Đèn đường loang loáng , hoà chung dòng xe tấp ...[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, ...[O, O, O, O, O, O, O, O, O, O, O, O, O, B-LOC,...
64[Cả, đám, bắt_đầu, lên_cơn, lắc, quậy, điên_cu...[0, 0, 0, 0, 0, 0, 0, 0][O, O, O, O, O, O, O, O]Cả đám bắt_đầu lên_cơn lắc quậy điên_cuồng ...Cả đám bắt đầu lên cơn lắc quậy điên cuồng ...[0, 0, 0, 0, 0, 0, 0, 0][O, O, O, O, O, O, O, O]
65[Ở, trạm_xá, xã, Hưng_Long, đối_diện, với, căn...[0, 0, 5, 6, 0, 0, 0, 0, 0, 1, 2, 2, 2, 0, 0, ...[O, O, B-LOC, I-LOC, O, O, O, O, O, B-PER, I-P...Ở trạm_xá xã Hưng_Long đối_diện với căn nhà tử...Ở trạm xá xã Hưng Long đối diện với căn nhà tử...[0, 0, 5, 6, 0, 0, 0, 0, 0, 1, 2, 2, 2, 0, 0, ...[O, O, B-LOC, I-LOC, O, O, O, O, O, B-PER, I-P...
66[Mới_đó, mà, ta, xa, nhau, ,, thật, là, kinh_k...[0, 0, 0, 0, 0, 0, 0, 0, 0, 0][O, O, O, O, O, O, O, O, O, O]Mới_đó mà ta xa nhau , thật là kinh_khủng .Mới đó mà ta xa nhau , thật là kinh khủng .[0, 0, 0, 0, 0, 0, 0, 0, 0, 0][O, O, O, O, O, O, O, O, O, O]
67[Trong, cuộc, chiến_đấu, vì, nghĩa_vụ, quốc_tế...[0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 5, 0, ...[O, O, O, O, O, O, O, O, O, B-LOC, O, O, O, B-...Trong cuộc chiến_đấu vì nghĩa_vụ quốc_tế với n...Trong cuộc chiến đấu vì nghĩa vụ quốc tế với n...[0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 5, 0, ...[O, O, O, O, O, O, O, O, O, B-LOC, O, O, O, B-...
68[Mỗi, khi, sóng, dập, vào, và, đẩy, người, lên...[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...[O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, ...Mỗi khi sóng dập vào và đẩy người lên theo thậ...Mỗi khi sóng dập vào và đẩy người lên theo thậ...[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...[O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, ...
69[Đây, là, một, giai_đoạn, khó_khăn, ,, đau_đớn...[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0][O, O, O, O, O, O, O, O, O, O, O, O]Đây là một giai_đoạn khó_khăn , đau_đớn nhất c...Đây là một giai đoạn khó khăn , đau đớn nhất c...[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0][O, O, O, O, O, O, O, O, O, O, O, O]
70[Và, hôm_nay, ,, chúng_ta, cũng, cần, hỏi, câu...[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0][O, O, O, O, O, O, O, O, O, O, O, O, O, O]Và hôm_nay , chúng_ta cũng cần hỏi câu hỏi này...Và hôm nay , chúng ta cũng cần hỏi câu hỏi này...[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0][O, O, O, O, O, O, O, O, O, O, O, O, O, O]
71[Thạc_sĩ, thú_y, với, bầy, muông_thú, .][0, 0, 0, 0, 0, 0][O, O, O, O, O, O]Thạc_sĩ thú_y với bầy muông_thú .Thạc sĩ thú y với bầy muông thú .[0, 0, 0, 0, 0, 0][O, O, O, O, O, O]
72[Tôi, lại, điện, hỏi_thăm, ông, khi, về, tới, ...[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...[O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, ...Tôi lại điện hỏi_thăm ông khi về tới nhà , ông...Tôi lại điện hỏi thăm ông khi về tới nhà , ông...[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...[O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, ...
73[Hương_Rừng, xuất_hiện, ở, nhiều, nơi, từ, nội...[5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, ...[B-LOC, O, O, O, O, O, O, O, O, O, O, O, O, O,...Hương_Rừng xuất_hiện ở nhiều nơi từ nội_thành ...Hương Rừng xuất hiện ở nhiều nơi từ nội thành ...[5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, ...[B-LOC, O, O, O, O, O, O, O, O, O, O, O, O, O,...
74[Nhìn, những, cảnh, đó, mình, cười, mà, nước_m...[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0][O, O, O, O, O, O, O, O, O, O, O, O, O, O]Nhìn những cảnh đó mình cười mà nước_mắt chực ...Nhìn những cảnh đó mình cười mà nước mắt chực ...[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0][O, O, O, O, O, O, O, O, O, O, O, O, O, O]
75[Ông, nhớ, mãi, năm, cô, con, gái, út, học, cấ...[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...[O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, ...Ông nhớ mãi năm cô con gái út học cấp II , thư...Ông nhớ mãi năm cô con gái út học cấp II , thư...[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...[O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, ...
76[Đường, về, xã, Ia_Yeng, cắt, ngang, cánh, đồn...[0, 0, 5, 6, 0, 0, 0, 0, 5, 0][O, O, B-LOC, I-LOC, O, O, O, O, B-LOC, O]Đường về xã Ia_Yeng cắt ngang cánh đồng Ayun_Hạ .Đường về xã Ia Yeng cắt ngang cánh đồng Ayun Hạ .[0, 0, 5, 6, 0, 0, 0, 0, 5, 0][O, O, B-LOC, I-LOC, O, O, O, O, B-LOC, O]
77[Sang, đây, ,, đầu_tiên, tôi, làm, nghề, rửa, ...[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...[O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, ...Sang đây , đầu_tiên tôi làm nghề rửa chén ở nh...Sang đây , đầu tiên tôi làm nghề rửa chén ở nh...[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...[O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, ...
78[Cộng_tác_viên, của, Thanh, ở, Berlin, tìm, đế...[0, 0, 1, 0, 5, 0, 0, 0, 0, 1, 0, 0][O, O, B-PER, O, B-LOC, O, O, O, O, B-PER, O, O]Cộng_tác_viên của Thanh ở Berlin tìm đến khu_v...Cộng tác viên của Thanh ở Berlin tìm đến khu v...[0, 0, 1, 0, 5, 0, 0, 0, 0, 1, 0, 0][O, O, B-PER, O, B-LOC, O, O, O, O, B-PER, O, O]
79[Trời, đang, mưa, lớn, ,, con, tàu, bị, chao, ...[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...[O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, ...Trời đang mưa lớn , con tàu bị chao lắc rất mạ...Trời đang mưa lớn , con tàu bị chao lắc rất mạ...[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...[O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, ...
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ], + "text/plain": [ + " tokens \\\n", + "40 [Nguyên, phân_công, anh, bạn, đồng_nghiệp, ở, ... \n", + "41 [Theo, kế_hoạch, ,, những, ngày, đầu, cả, hai,... \n", + "42 [Thật, đáng, tiếc, biết_bao, ,, những, ngày, n... \n", + "43 [Hải, và, bố_mẹ, ngày, trước, ở, chung, với, ô... \n", + "44 [Cho_nên, phương_án, của, ông, Phong, là, “, b... \n", + "45 [Một, thời_gian, ngắn, sau, trận, tỉ_thí, lịch... \n", + "46 [Kao, chỉ, mới, được, gửi, lên, đây, hơn, một,... \n", + "47 [An_Lư, cũng, tích_cực, đào_tạo, các, thuyền_v... \n", + "48 [Anh, cười, tươi, :, \", Nếu, không, thắng, thì... \n", + "49 [Hắn, không, có, một, dữ_liệu, nào, nằm, trong... \n", + "50 [Và, cho_dù, xảy, ra, tình_huống, nào, thì, ôn... \n", + "51 [Để, em, tính, lại, .] \n", + "52 [Ông, đến, có, khi, mặc, sắc_phục, ,, có, khi,... \n", + "53 [Có, đứa, trả_lời, :, chưa, có, lúc, nào, thấy... \n", + "54 [Vậy, đó, ,, lửa, thử, vàng, gian_nan, thử, sứ... \n", + "55 [Chung, một, chữ, \", Lương, \", ...] \n", + "56 [Bước, vào, đầu, ngõ, ,, nhà, cô, Cúc, phơi, đ... \n", + "57 [Nếu, có, trở_ngại, một_chút, thì, đúng, là, l... \n", + "58 [Anh, Dĩa, kéo, chúng_tôi, lên, bờ, ,, khui, b... \n", + "59 [Có, đúng, chị, nằm, trên, một, dãy, núi, cao,... \n", + "60 [Bắt_đầu, từ, năm, 1961, ,, xã, Nhuận_Đức, phá... \n", + "61 [Năm, nay, đầu, trên, xóm, dưới, lắc_đầu, ngao... \n", + "62 [Và, đến, nay, những, mét, hầm, cuối_cùng, cũn... \n", + "63 [Đèn, đường, loang_loáng, ,, hoà, chung, dòng,... \n", + "64 [Cả, đám, bắt_đầu, lên_cơn, lắc, quậy, điên_cu... \n", + "65 [Ở, trạm_xá, xã, Hưng_Long, đối_diện, với, căn... \n", + "66 [Mới_đó, mà, ta, xa, nhau, ,, thật, là, kinh_k... \n", + "67 [Trong, cuộc, chiến_đấu, vì, nghĩa_vụ, quốc_tế... \n", + "68 [Mỗi, khi, sóng, dập, vào, và, đẩy, người, lên... \n", + "69 [Đây, là, một, giai_đoạn, khó_khăn, ,, đau_đớn... \n", + "70 [Và, hôm_nay, ,, chúng_ta, cũng, cần, hỏi, câu... \n", + "71 [Thạc_sĩ, thú_y, với, bầy, muông_thú, .] \n", + "72 [Tôi, lại, điện, hỏi_thăm, ông, khi, về, tới, ... \n", + "73 [Hương_Rừng, xuất_hiện, ở, nhiều, nơi, từ, nội... \n", + "74 [Nhìn, những, cảnh, đó, mình, cười, mà, nước_m... \n", + "75 [Ông, nhớ, mãi, năm, cô, con, gái, út, học, cấ... \n", + "76 [Đường, về, xã, Ia_Yeng, cắt, ngang, cánh, đồn... \n", + "77 [Sang, đây, ,, đầu_tiên, tôi, làm, nghề, rửa, ... \n", + "78 [Cộng_tác_viên, của, Thanh, ở, Berlin, tìm, đế... \n", + "79 [Trời, đang, mưa, lớn, ,, con, tàu, bị, chao, ... \n", + "\n", + " ner_tags \\\n", + "40 [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", + "41 [0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 0, 0, 0, 0, ... \n", + "42 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", + "43 [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, 0, 0, 0, ... \n", + "44 [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", + "45 [0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, ... \n", + "46 [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", + "47 [5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", + "48 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] \n", + "49 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", + "50 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] \n", + "51 [0, 0, 0, 0, 0] \n", + "52 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", + "53 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] \n", + "54 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] \n", + "55 [0, 0, 0, 0, 0, 0, 0] \n", + "56 [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0] \n", + "57 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, 0, 5, ... \n", + "58 [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", + "59 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0] \n", + "60 [0, 0, 0, 0, 0, 5, 6, 0, 0, 0, 0, 0] \n", + "61 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] \n", + "62 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] \n", + "63 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, ... \n", + "64 [0, 0, 0, 0, 0, 0, 0, 0] \n", + "65 [0, 0, 5, 6, 0, 0, 0, 0, 0, 1, 2, 2, 2, 0, 0, ... \n", + "66 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] \n", + "67 [0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 5, 0, ... \n", + "68 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", + "69 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] \n", + "70 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] \n", + "71 [0, 0, 0, 0, 0, 0] \n", + "72 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", + "73 [5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, ... \n", + "74 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] \n", + "75 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", + "76 [0, 0, 5, 6, 0, 0, 0, 0, 5, 0] \n", + "77 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", + "78 [0, 0, 1, 0, 5, 0, 0, 0, 0, 1, 0, 0] \n", + "79 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", + "\n", + " ner_labels \\\n", + "40 [B-PER, O, O, O, O, O, O, O, O, O, O, O, O, O,... \n", + "41 [O, O, O, O, O, O, O, O, O, B-NAT, I-NAT, O, O... \n", + "42 [O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, ... \n", + "43 [B-PER, O, O, O, O, O, O, O, O, O, B-LOC, I-LO... \n", + "44 [O, O, O, O, B-PER, O, O, O, O, O, O, O, O, O,... \n", + "45 [O, O, O, O, O, O, O, O, B-PER, I-PER, O, O, O... \n", + "46 [B-PER, O, O, O, O, O, O, O, O, O, O, O, O, O,... \n", + "47 [B-LOC, O, O, O, O, O, O, O, O, O, O, O, O, O,... \n", + "48 [O, O, O, O, O, O, O, O, O, O, O, O, O, O, O] \n", + "49 [O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, ... \n", + "50 [O, O, O, O, O, O, O, O, O, O, O, O] \n", + "51 [O, O, O, O, O] \n", + "52 [O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, ... \n", + "53 [O, O, O, O, O, O, O, O, O, O, O, O, O] \n", + "54 [O, O, O, O, O, O, O, O, O, O] \n", + "55 [O, O, O, O, O, O, O] \n", + "56 [O, O, O, O, O, O, O, B-PER, O, O, O, O, O, O] \n", + "57 [O, O, O, O, O, O, O, O, O, O, O, B-LOC, I-LOC... \n", + "58 [O, B-PER, O, O, O, O, O, O, O, O, O, O, O, O,... \n", + "59 [O, O, O, O, O, O, O, O, O, O, O, O, B-LOC, O] \n", + "60 [O, O, O, O, O, B-LOC, I-LOC, O, O, O, O, O] \n", + "61 [O, O, O, O, O, O, O, O, O, O, O, O, O] \n", + "62 [O, O, O, O, O, O, O, O, O, O, O, O] \n", + "63 [O, O, O, O, O, O, O, O, O, O, O, O, O, B-LOC,... \n", + "64 [O, O, O, O, O, O, O, O] \n", + "65 [O, O, B-LOC, I-LOC, O, O, O, O, O, B-PER, I-P... \n", + "66 [O, O, O, O, O, O, O, O, O, O] \n", + "67 [O, O, O, O, O, O, O, O, O, B-LOC, O, O, O, B-... \n", + "68 [O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, ... \n", + "69 [O, O, O, O, O, O, O, O, O, O, O, O] \n", + "70 [O, O, O, O, O, O, O, O, O, O, O, O, O, O] \n", + "71 [O, O, O, O, O, O] \n", + "72 [O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, ... \n", + "73 [B-LOC, O, O, O, O, O, O, O, O, O, O, O, O, O,... \n", + "74 [O, O, O, O, O, O, O, O, O, O, O, O, O, O] \n", + "75 [O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, ... \n", + "76 [O, O, B-LOC, I-LOC, O, O, O, O, B-LOC, O] \n", + "77 [O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, ... \n", + "78 [O, O, B-PER, O, B-LOC, O, O, O, O, B-PER, O, O] \n", + "79 [O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, ... \n", + "\n", + " text_withseg \\\n", + "40 Nguyên phân_công anh bạn đồng_nghiệp ở vòng ng... \n", + "41 Theo kế_hoạch , những ngày đầu cả hai luyện ti... \n", + "42 Thật đáng tiếc biết_bao , những ngày này trăng... \n", + "43 Hải và bố_mẹ ngày trước ở chung với ông_bà trê... \n", + "44 Cho_nên phương_án của ông Phong là “ bán cả co... \n", + "45 Một thời_gian ngắn sau trận tỉ_thí lịch_sử , M... \n", + "46 Kao chỉ mới được gửi lên đây hơn một tuần , nh... \n", + "47 An_Lư cũng tích_cực đào_tạo các thuyền_viên ng... \n", + "48 Anh cười tươi : \" Nếu không thắng thì đâu còn ... \n", + "49 Hắn không có một dữ_liệu nào nằm trong tay thá... \n", + "50 Và cho_dù xảy ra tình_huống nào thì ông giám_đ... \n", + "51 Để em tính lại . \n", + "52 Ông đến có khi mặc sắc_phục , có khi mặc thườn... \n", + "53 Có đứa trả_lời : chưa có lúc nào thấy hạnh_phú... \n", + "54 Vậy đó , lửa thử vàng gian_nan thử sức . \n", + "55 Chung một ch��� \" Lương \" ... \n", + "56 Bước vào đầu ngõ , nhà cô Cúc phơi đầy bánh_tr... \n", + "57 Nếu có trở_ngại một_chút thì đúng là lượng khá... \n", + "58 Anh Dĩa kéo chúng_tôi lên bờ , khui bia , rượu... \n", + "59 Có đúng chị nằm trên một dãy núi cao ở miền tâ... \n", + "60 Bắt_đầu từ năm 1961 , xã Nhuận_Đức phát_động p... \n", + "61 Năm nay đầu trên xóm dưới lắc_đầu ngao_ngán bỏ... \n", + "62 Và đến nay những mét hầm cuối_cùng cũng đã về ... \n", + "63 Đèn đường loang_loáng , hoà chung dòng xe tấp_... \n", + "64 Cả đám bắt_đầu lên_cơn lắc quậy điên_cuồng ... \n", + "65 Ở trạm_xá xã Hưng_Long đối_diện với căn nhà tử... \n", + "66 Mới_đó mà ta xa nhau , thật là kinh_khủng . \n", + "67 Trong cuộc chiến_đấu vì nghĩa_vụ quốc_tế với n... \n", + "68 Mỗi khi sóng dập vào và đẩy người lên theo thậ... \n", + "69 Đây là một giai_đoạn khó_khăn , đau_đớn nhất c... \n", + "70 Và hôm_nay , chúng_ta cũng cần hỏi câu hỏi này... \n", + "71 Thạc_sĩ thú_y với bầy muông_thú . \n", + "72 Tôi lại điện hỏi_thăm ông khi về tới nhà , ông... \n", + "73 Hương_Rừng xuất_hiện ở nhiều nơi từ nội_thành ... \n", + "74 Nhìn những cảnh đó mình cười mà nước_mắt chực ... \n", + "75 Ông nhớ mãi năm cô con gái út học cấp II , thư... \n", + "76 Đường về xã Ia_Yeng cắt ngang cánh đồng Ayun_Hạ . \n", + "77 Sang đây , đầu_tiên tôi làm nghề rửa chén ở nh... \n", + "78 Cộng_tác_viên của Thanh ở Berlin tìm đến khu_v... \n", + "79 Trời đang mưa lớn , con tàu bị chao lắc rất mạ... \n", + "\n", + " text_raw \\\n", + "40 Nguyên phân công anh bạn đồng nghiệp ở vòng ng... \n", + "41 Theo kế hoạch , những ngày đầu cả hai luyện ti... \n", + "42 Thật đáng tiếc biết bao , những ngày này trăng... \n", + "43 Hải và bố mẹ ngày trước ở chung với ông bà trê... \n", + "44 Cho nên phương án của ông Phong là “ bán cả co... \n", + "45 Một thời gian ngắn sau trận tỉ thí lịch sử , M... \n", + "46 Kao chỉ mới được gửi lên đây hơn một tuần , nh... \n", + "47 An Lư cũng tích cực đào tạo các thuyền viên ng... \n", + "48 Anh cười tươi : \" Nếu không thắng thì đâu còn ... \n", + "49 Hắn không có một dữ liệu nào nằm trong tay thá... \n", + "50 Và cho dù xảy ra tình huống nào thì ông giám đ... \n", + "51 Để em tính lại . \n", + "52 Ông đến có khi mặc sắc phục , có khi mặc thườn... \n", + "53 Có đứa trả lời : chưa có lúc nào thấy hạnh phú... \n", + "54 Vậy đó , lửa thử vàng gian nan thử sức . \n", + "55 Chung một chữ \" Lương \" ... \n", + "56 Bước vào đầu ngõ , nhà cô Cúc phơi đầy bánh tr... \n", + "57 Nếu có trở ngại một chút thì đúng là lượng khá... \n", + "58 Anh Dĩa kéo chúng tôi lên bờ , khui bia , rượu... \n", + "59 Có đúng chị nằm trên một dãy núi cao ở miền tâ... \n", + "60 Bắt đầu từ năm 1961 , xã Nhuận Đức phát động p... \n", + "61 Năm nay đầu trên xóm dưới lắc đầu ngao ngán bỏ... \n", + "62 Và đến nay những mét hầm cuối cùng cũng đã về ... \n", + "63 Đèn đường loang loáng , hoà chung dòng xe tấp ... \n", + "64 Cả đám bắt đầu lên cơn lắc quậy điên cuồng ... \n", + "65 Ở trạm xá xã Hưng Long đối diện với căn nhà tử... \n", + "66 Mới đó mà ta xa nhau , thật là kinh khủng . \n", + "67 Trong cuộc chiến đấu vì nghĩa vụ quốc tế với n... \n", + "68 Mỗi khi sóng dập vào và đẩy người lên theo thậ... \n", + "69 Đây là một giai đoạn khó khăn , đau đớn nhất c... \n", + "70 Và hôm nay , chúng ta cũng cần hỏi câu hỏi này... \n", + "71 Thạc sĩ thú y với bầy muông thú . \n", + "72 Tôi lại điện hỏi thăm ông khi về tới nhà , ông... \n", + "73 Hương Rừng xuất hiện ở nhiều nơi từ nội thành ... \n", + "74 Nhìn những cảnh đó mình cười mà nước mắt chực ... \n", + "75 Ông nhớ mãi năm cô con gái út học cấp II , thư... \n", + "76 Đường về xã Ia Yeng cắt ngang cánh đồng Ayun Hạ . \n", + "77 Sang đây , đầu tiên tôi làm nghề rửa chén ở nh... \n", + "78 Cộng tác viên của Thanh ở Berlin tìm đến khu v... \n", + "79 Trời đang mưa lớn , con tàu bị chao lắc rất mạ... \n", + "\n", + " ner_tags_replaced_nat \\\n", + "40 [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", + "41 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", + "42 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", + "43 [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, 0, 0, 0, ... \n", + "44 [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", + "45 [0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, ... \n", + "46 [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", + "47 [5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", + "48 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] \n", + "49 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", + "50 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] \n", + "51 [0, 0, 0, 0, 0] \n", + "52 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", + "53 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] \n", + "54 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] \n", + "55 [0, 0, 0, 0, 0, 0, 0] \n", + "56 [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0] \n", + "57 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, 0, 5, ... \n", + "58 [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", + "59 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0] \n", + "60 [0, 0, 0, 0, 0, 5, 6, 0, 0, 0, 0, 0] \n", + "61 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] \n", + "62 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] \n", + "63 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, ... \n", + "64 [0, 0, 0, 0, 0, 0, 0, 0] \n", + "65 [0, 0, 5, 6, 0, 0, 0, 0, 0, 1, 2, 2, 2, 0, 0, ... \n", + "66 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] \n", + "67 [0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 5, 0, ... \n", + "68 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", + "69 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] \n", + "70 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] \n", + "71 [0, 0, 0, 0, 0, 0] \n", + "72 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", + "73 [5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, ... \n", + "74 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] \n", + "75 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", + "76 [0, 0, 5, 6, 0, 0, 0, 0, 5, 0] \n", + "77 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", + "78 [0, 0, 1, 0, 5, 0, 0, 0, 0, 1, 0, 0] \n", + "79 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", + "\n", + " ner_labels_replaced_nat \n", + "40 [B-PER, O, O, O, O, O, O, O, O, O, O, O, O, O,... \n", + "41 [O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, ... \n", + "42 [O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, ... \n", + "43 [B-PER, O, O, O, O, O, O, O, O, O, B-LOC, I-LO... \n", + "44 [O, O, O, O, B-PER, O, O, O, O, O, O, O, O, O,... \n", + "45 [O, O, O, O, O, O, O, O, B-PER, I-PER, O, O, O... \n", + "46 [B-PER, O, O, O, O, O, O, O, O, O, O, O, O, O,... \n", + "47 [B-LOC, O, O, O, O, O, O, O, O, O, O, O, O, O,... \n", + "48 [O, O, O, O, O, O, O, O, O, O, O, O, O, O, O] \n", + "49 [O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, ... \n", + "50 [O, O, O, O, O, O, O, O, O, O, O, O] \n", + "51 [O, O, O, O, O] \n", + "52 [O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, ... \n", + "53 [O, O, O, O, O, O, O, O, O, O, O, O, O] \n", + "54 [O, O, O, O, O, O, O, O, O, O] \n", + "55 [O, O, O, O, O, O, O] \n", + "56 [O, O, O, O, O, O, O, B-PER, O, O, O, O, O, O] \n", + "57 [O, O, O, O, O, O, O, O, O, O, O, B-LOC, I-LOC... \n", + "58 [O, B-PER, O, O, O, O, O, O, O, O, O, O, O, O,... \n", + "59 [O, O, O, O, O, O, O, O, O, O, O, O, B-LOC, O] \n", + "60 [O, O, O, O, O, B-LOC, I-LOC, O, O, O, O, O] \n", + "61 [O, O, O, O, O, O, O, O, O, O, O, O, O] \n", + "62 [O, O, O, O, O, O, O, O, O, O, O, O] \n", + "63 [O, O, O, O, O, O, O, O, O, O, O, O, O, B-LOC,... \n", + "64 [O, O, O, O, O, O, O, O] \n", + "65 [O, O, B-LOC, I-LOC, O, O, O, O, O, B-PER, I-P... \n", + "66 [O, O, O, O, O, O, O, O, O, O] \n", + "67 [O, O, O, O, O, O, O, O, O, B-LOC, O, O, O, B-... \n", + "68 [O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, ... \n", + "69 [O, O, O, O, O, O, O, O, O, O, O, O] \n", + "70 [O, O, O, O, O, O, O, O, O, O, O, O, O, O] \n", + "71 [O, O, O, O, O, O] \n", + "72 [O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, ... \n", + "73 [B-LOC, O, O, O, O, O, O, O, O, O, O, O, O, O,... \n", + "74 [O, O, O, O, O, O, O, O, O, O, O, O, O, O] \n", + "75 [O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, ... \n", + "76 [O, O, B-LOC, I-LOC, O, O, O, O, B-LOC, O] \n", + "77 [O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, ... \n", + "78 [O, O, B-PER, O, B-LOC, O, O, O, O, B-PER, O, O] \n", + "79 [O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, ... " + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df[40:80]" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "id": "Ugoe49T1hHvF" + }, + "outputs": [], + "source": [ + "df = df.drop(columns=['ner_tags','ner_labels'])\n" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "id": "yQ1v1VhIlUuF" + }, + "outputs": [], + "source": [ + "df.rename(columns={'ner_tags_replaced_nat': 'ner_tags', 'ner_labels_replaced_nat': 'ner_labels'}, inplace=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 487 + }, + "id": "0RfL3A9FlmVA", + "outputId": "b6dd057a-14a6-42a6-b309-48f7816eb5e7" + }, + "outputs": [ + { + "data": { + "application/vnd.google.colaboratory.intrinsic+json": { + "summary": "{\n \"name\": \"df[41:50]\",\n \"rows\": 9,\n \"fields\": [\n {\n \"column\": \"tokens\",\n \"properties\": {\n \"dtype\": \"object\",\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"text_withseg\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 9,\n \"samples\": [\n \"Anh c\\u01b0\\u1eddi t\\u01b0\\u01a1i : \\\" N\\u1ebfu kh\\u00f4ng th\\u1eafng th\\u00ec \\u0111\\u00e2u c\\u00f2n s\\u1ed1ng \\u0111\\u1ebfn b\\u00e2y_gi\\u1edd .\",\n \"Th\\u1eadt \\u0111\\u00e1ng ti\\u1ebfc bi\\u1ebft_bao , nh\\u1eefng ng\\u00e0y n\\u00e0y tr\\u0103ng r\\u1eafc b\\u1ee5i v\\u00e0ng tr\\u00ean c\\u00e1c n\\u1ebbo \\u0111\\u01b0\\u1eddng H\\u00e0_N\\u1ed9i .\",\n \"Kao ch\\u1ec9 m\\u1edbi \\u0111\\u01b0\\u1ee3c g\\u1eedi l\\u00ean \\u0111\\u00e2y h\\u01a1n m\\u1ed9t tu\\u1ea7n , nh\\u1eefng b\\u00e0i_t\\u1eadp \\u0111\\u1ea7u_ti\\u00ean m\\u1edbi_ch\\u1ec9 l\\u00e0 nh\\u1eefng \\u0111i\\u1ec7u m\\u00faa kh\\u1edfi_\\u0111\\u1ed9ng \\u201c Wai-kru \\u201d m\\u00e0 Kao r\\u1ea5t th\\u00edch , nh\\u01b0ng em \\u0111\\u00e2u th\\u1ec3 bi\\u1ebft ph\\u00eda tr\\u01b0\\u1edbc s\\u1ebd l\\u00e0 con \\u0111\\u01b0\\u1eddng d\\u00e0i \\u0111\\u1ea7y m\\u00e1u v\\u00e0 n\\u01b0\\u1edbc_m\\u1eaft \\u2026\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"text_raw\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 9,\n \"samples\": [\n \"Anh c\\u01b0\\u1eddi t\\u01b0\\u01a1i : \\\" N\\u1ebfu kh\\u00f4ng th\\u1eafng th\\u00ec \\u0111\\u00e2u c\\u00f2n s\\u1ed1ng \\u0111\\u1ebfn b\\u00e2y gi\\u1edd .\",\n \"Th\\u1eadt \\u0111\\u00e1ng ti\\u1ebfc bi\\u1ebft bao , nh\\u1eefng ng\\u00e0y n\\u00e0y tr\\u0103ng r\\u1eafc b\\u1ee5i v\\u00e0ng tr\\u00ean c\\u00e1c n\\u1ebbo \\u0111\\u01b0\\u1eddng H\\u00e0 N\\u1ed9i .\",\n \"Kao ch\\u1ec9 m\\u1edbi \\u0111\\u01b0\\u1ee3c g\\u1eedi l\\u00ean \\u0111\\u00e2y h\\u01a1n m\\u1ed9t tu\\u1ea7n , nh\\u1eefng b\\u00e0i t\\u1eadp \\u0111\\u1ea7u ti\\u00ean m\\u1edbi ch\\u1ec9 l\\u00e0 nh\\u1eefng \\u0111i\\u1ec7u m\\u00faa kh\\u1edfi \\u0111\\u1ed9ng \\u201c Wai-kru \\u201d m\\u00e0 Kao r\\u1ea5t th\\u00edch , nh\\u01b0ng em \\u0111\\u00e2u th\\u1ec3 bi\\u1ebft ph\\u00eda tr\\u01b0\\u1edbc s\\u1ebd l\\u00e0 con \\u0111\\u01b0\\u1eddng d\\u00e0i \\u0111\\u1ea7y m\\u00e1u v\\u00e0 n\\u01b0\\u1edbc m\\u1eaft \\u2026\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"ner_tags\",\n \"properties\": {\n \"dtype\": \"object\",\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"ner_labels\",\n \"properties\": {\n \"dtype\": \"object\",\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}", + "type": "dataframe" + }, + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
tokenstext_withsegtext_rawner_tagsner_labels
41[Theo, kế_hoạch, ,, những, ngày, đầu, cả, hai,...Theo kế_hoạch , những ngày đầu cả hai luyện ti...Theo kế hoạch , những ngày đầu cả hai luyện ti...[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...[O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, ...
42[Thật, đáng, tiếc, biết_bao, ,, những, ngày, n...Thật đáng tiếc biết_bao , những ngày này trăng...Thật đáng tiếc biết bao , những ngày này trăng...[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...[O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, ...
43[Hải, và, bố_mẹ, ngày, trước, ở, chung, với, ô...Hải và bố_mẹ ngày trước ở chung với ông_bà trê...Hải và bố mẹ ngày trước ở chung với ông bà trê...[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, 0, 0, 0, ...[B-PER, O, O, O, O, O, O, O, O, O, B-LOC, I-LO...
44[Cho_nên, phương_án, của, ông, Phong, là, “, b...Cho_nên phương_án của ông Phong là “ bán cả co...Cho nên phương án của ông Phong là “ bán cả co...[0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...[O, O, O, O, B-PER, O, O, O, O, O, O, O, O, O,...
45[Một, thời_gian, ngắn, sau, trận, tỉ_thí, lịch...Một thời_gian ngắn sau trận tỉ_thí lịch_sử , M...Một thời gian ngắn sau trận tỉ thí lịch sử , M...[0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, ...[O, O, O, O, O, O, O, O, B-PER, I-PER, O, O, O...
46[Kao, chỉ, mới, được, gửi, lên, đây, hơn, một,...Kao chỉ mới được gửi lên đây hơn một tuần , nh...Kao chỉ mới được gửi lên đây hơn một tuần , nh...[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...[B-PER, O, O, O, O, O, O, O, O, O, O, O, O, O,...
47[An_Lư, cũng, tích_cực, đào_tạo, các, thuyền_v...An_Lư cũng tích_cực đào_tạo các thuyền_viên ng...An Lư cũng tích cực đào tạo các thuyền viên ng...[5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...[B-LOC, O, O, O, O, O, O, O, O, O, O, O, O, O,...
48[Anh, cười, tươi, :, \", Nếu, không, thắng, thì...Anh cười tươi : \" Nếu không thắng thì đâu còn ...Anh cười tươi : \" Nếu không thắng thì đâu còn ...[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0][O, O, O, O, O, O, O, O, O, O, O, O, O, O, O]
49[Hắn, không, có, một, dữ_liệu, nào, nằm, trong...Hắn không có một dữ_liệu nào nằm trong tay thá...Hắn không có một dữ liệu nào nằm trong tay thá...[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...[O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, ...
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ], + "text/plain": [ + " tokens \\\n", + "41 [Theo, kế_hoạch, ,, những, ngày, đầu, cả, hai,... \n", + "42 [Thật, đáng, tiếc, biết_bao, ,, những, ngày, n... \n", + "43 [Hải, và, bố_mẹ, ngày, trước, ở, chung, với, ô... \n", + "44 [Cho_nên, phương_án, của, ông, Phong, là, “, b... \n", + "45 [Một, thời_gian, ngắn, sau, trận, tỉ_thí, lịch... \n", + "46 [Kao, chỉ, mới, được, gửi, lên, đây, hơn, một,... \n", + "47 [An_Lư, cũng, tích_cực, đào_tạo, các, thuyền_v... \n", + "48 [Anh, cười, tươi, :, \", Nếu, không, thắng, thì... \n", + "49 [Hắn, không, có, một, dữ_liệu, nào, nằm, trong... \n", + "\n", + " text_withseg \\\n", + "41 Theo kế_hoạch , những ngày đầu cả hai luyện ti... \n", + "42 Thật đáng tiếc biết_bao , những ngày này trăng... \n", + "43 Hải và bố_mẹ ngày trước ở chung với ông_bà trê... \n", + "44 Cho_nên phương_án của ông Phong là “ bán cả co... \n", + "45 Một thời_gian ngắn sau trận tỉ_thí lịch_sử , M... \n", + "46 Kao chỉ mới được gửi lên đây hơn một tuần , nh... \n", + "47 An_Lư cũng tích_cực đào_tạo các thuyền_viên ng... \n", + "48 Anh cười tươi : \" Nếu không thắng thì đâu còn ... \n", + "49 Hắn không có một dữ_liệu nào nằm trong tay thá... \n", + "\n", + " text_raw \\\n", + "41 Theo kế hoạch , những ngày đầu cả hai luyện ti... \n", + "42 Thật đáng tiếc biết bao , những ngày này trăng... \n", + "43 Hải và bố mẹ ngày trước ở chung với ông bà trê... \n", + "44 Cho nên phương án của ông Phong là “ bán cả co... \n", + "45 Một thời gian ngắn sau trận tỉ thí lịch sử , M... \n", + "46 Kao chỉ mới được gửi lên đây hơn một tuần , nh... \n", + "47 An Lư cũng tích cực đào tạo các thuyền viên ng... \n", + "48 Anh cười tươi : \" Nếu không thắng thì đâu còn ... \n", + "49 Hắn không có một dữ liệu nào nằm trong tay thá... \n", + "\n", + " ner_tags \\\n", + "41 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", + "42 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", + "43 [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, 0, 0, 0, ... \n", + "44 [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", + "45 [0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, ... \n", + "46 [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", + "47 [5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", + "48 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] \n", + "49 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", + "\n", + " ner_labels \n", + "41 [O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, ... \n", + "42 [O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, ... \n", + "43 [B-PER, O, O, O, O, O, O, O, O, O, B-LOC, I-LO... \n", + "44 [O, O, O, O, B-PER, O, O, O, O, O, O, O, O, O,... \n", + "45 [O, O, O, O, O, O, O, O, B-PER, I-PER, O, O, O... \n", + "46 [B-PER, O, O, O, O, O, O, O, O, O, O, O, O, O,... \n", + "47 [B-LOC, O, O, O, O, O, O, O, O, O, O, O, O, O,... \n", + "48 [O, O, O, O, O, O, O, O, O, O, O, O, O, O, O] \n", + "49 [O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, ... " + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df[41:50]" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "id": "XBvlZok5ntB7" + }, + "outputs": [], + "source": [ + "time = 0\n", + "org_idx = []\n", + "token = []\n", + "tag = []\n", + "for i in (df.index):\n", + " for a in range(len(df.ner_tags[i])):\n", + " # if df.ner_tags[i][a] == 6 or df.ner_tags[i][a] == 5:\n", + " if df.ner_labels[i][a] != 'O':\n", + " token.append(df.tokens[i][[a]])\n", + " tag.append(df.ner_labels[i][a])\n", + " org_idx.append(i)" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 303 + }, + "id": "xcw4uS1lngk5", + "outputId": "a978a005-50aa-458e-e48a-3fda6e992b25" + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
count
tag
B-PER7479
B-LOC6244
I-PER3522
I-LOC2783
I-ORG2055
B-ORG1212
\n", + "

" + ], + "text/plain": [ + "tag\n", + "B-PER 7479\n", + "B-LOC 6244\n", + "I-PER 3522\n", + "I-LOC 2783\n", + "I-ORG 2055\n", + "B-ORG 1212\n", + "Name: count, dtype: int64" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tag_data = pd.DataFrame({'org_idx': org_idx, 'token': token, 'tag': tag})\n", + "tag_data.tag.value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 607 + }, + "id": "QnAnqvw6l5-l", + "outputId": "b4a7cd6c-c003-4cd7-ed74-6141d5336fd2" + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA90AAAJOCAYAAACqS2TfAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAaNxJREFUeJzt3Xd8jff///HnyY6RmEnkI7Yi9mhJVW1BKEU/rdqiSqkaLdX6oLT2Lqo66NCBtmoUVZRaNVp7z1hJKBIzieT9+8Mv5+uYEbl6RB732+261Xlf73Od15W+HXle72vYjDFGAAAAAAAgzbk4uwAAAAAAAB5XhG4AAAAAACxC6AYAAAAAwCKEbgAAAAAALELoBgAAAADAIoRuAAAAAAAsQugGAAAAAMAihG4AAAAAACxC6AYAAAAAwCKEbgDAHQ0ePFg2m+1f+awaNWqoRo0a9te///67bDab5s6d+698fvv27VWgQIF/5bNS69KlS+rUqZMCAgJks9nUs2dPZ5f0SChQoIAaNWqUptu02WwaPHhwmm4TAJBxEboBIAOYOXOmbDabffHy8lJgYKBCQ0M1adIkXbx4MU0+59SpUxo8eLC2bt2aJttLS49ybSkxbNgwzZw5U127dtVXX32lNm3a3LVvgQIFZLPZ9Prrr9+27k4HNG4dH7cuGzZssPe9dZ2Pj4+qV6+uRYsWpWg/jh49KpvNpjFjxjzA3j96kvfjTkuVKlWcXR4A4BHi5uwCAAD/niFDhqhgwYJKSEhQZGSkfv/9d/Xs2VPjxo3T/PnzVaZMGXvfAQMG6O23336g7Z86dUrvvfeeChQooHLlyqX4fb/++usDfU5q3Ku2Tz75RElJSZbX8DBWrFihKlWqaNCgQSl+zyeffKL+/fsrMDAwRf2Tx8etihQp4vC6bt26atu2rYwxOnbsmD766CM1btxYixcvVmhoaIrrexy0bNlSDRs2dGjLnTu3k6oBADyKCN0AkIE0aNBAlSpVsr/u37+/VqxYoUaNGum5557Tnj175O3tLUlyc3OTm5u1/0xcuXJFmTJlkoeHh6Wfcz/u7u5O/fyUiI6OVnBwcIr7lyxZUvv27dOIESM0adKkFL3n1vFxN0888YRat25tf928eXMFBwdr4sSJGS50V6hQweFncS9JSUmKj4+Xl5eXxVUBAB4lnF4OABlcrVq19L///U/Hjh3T119/bW+/0zXdy5Yt0zPPPKNs2bIpS5YsKlasmN555x1JN05bfvLJJyVJHTp0sJ9qO3PmTEk3rtsuVaqUtmzZomeffVaZMmWyv/fWa7qTJSYm6p133lFAQIAyZ86s5557TsePH3foU6BAAbVv3/629968zfvVdqdrui9fvqw+ffooKChInp6eKlasmMaMGSNjjEM/m82m7t27a968eSpVqpQ8PT1VsmRJLVmy5M4/8FtER0crPDxc/v7+8vLyUtmyZfXFF1/Y1yefDn7kyBEtWrTIXvvRo0fvud0CBQqobdu2+uSTT3Tq1KkU1ZJaJUqUUK5cuXTo0KE02+aMGTNUq1Yt+fn5ydPTU8HBwfroo4/u2v/XX39VuXLl5OXlpeDgYP3444+39blw4YJ69uxp/39apEgRjRw50rKzHJLHxqxZs1SyZEl5enrax8XJkyfVsWNH+fv728fM559/fts2Tpw4oaZNmypz5szy8/NTr169tHTpUtlsNv3+++/2fin5e5AsLi5OgwYNUpEiReTp6amgoCD17dtXcXFxd6w/JWP75MmTCg8PV2BgoDw9PVWwYEF17dpV8fHxOnz4sGw2m8aPH3/b+9atWyebzaZvv/02BT9RAEifmOkGAKhNmzZ655139Ouvv+qVV165Y59du3apUaNGKlOmjIYMGSJPT08dPHhQa9eulXQjeA0ZMkQDBw5U586dVa1aNUnS008/bd/GP//8owYNGuill15S69at5e/vf8+6PvjgA9lsNvXr10/R0dGaMGGC6tSpo61bt9pn5FMiJbXdzBij5557TitXrlR4eLjKlSunpUuX6q233tLJkydvCw9r1qzRjz/+qNdee01Zs2bVpEmT1Lx5c0VERChnzpx3revq1auqUaOGDh48qO7du6tgwYKaM2eO2rdvrwsXLuiNN95QiRIl9NVXX6lXr17Kmzev+vTpIyllpzC/++67+vLLL1M82x0TE6OzZ886tNlstnvuQ/L7zp8/r8KFC9/3M1Lqo48+UsmSJfXcc8/Jzc1NCxYs0GuvvaakpCR169bNoe+BAwf04osvqkuXLmrXrp1mzJihF154QUuWLFHdunUl3Tironr16jp58qReffVV5cuXT+vWrVP//v11+vRpTZgwIVV1Xrly5bafma+vr/3siRUrVmj27Nnq3r27cuXKpQIFCigqKkpV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raxZsyoxMfG+teTPn187d+68bd/27dt3W9+U/j0oXLiwtm3bptq1a6fJ39fcuXPLx8dHO3fuvG/f+vXrK3fu3Jo1a5YqV66sK1euqE2bNg9dAwA86ji0CAAZ3IoVKzR06FAVLFhQrVq1umu/c+fO3dZWrlw5SbI/aihz5sySdMdf/lPjyy+/dLjOfO7cuTp9+rQaNGhgbytcuLA2bNig+Ph4e9vChQtve7TYg9TWsGFDJSYmavLkyQ7t48ePl81mc/j8h9GwYUNFRkbq+++/t7ddv35dH374obJkyaLq1aunyedIN67tTkhI0KhRo9Jsm8nc3NzUp08f7dmzRz///PNDby95dvXm2dSYmBjNmDHjjv1PnTqln376yf46NjZWX375pcqVK6eAgABJN64pXr9+vZYuXXrb+y9cuKDr168/dN0p4erqqubNm+uHH364Y1A9c+aM/c8NGzbUqVOnNHfuXHvblStX7nhaekr/Hvz3v//VyZMn9cknn9y2jatXr+ry5csPtD8uLi5q2rSpFixYoM2bN9+2/ub/h25ubmrZsqVmz56tmTNnqnTp0qma1QeA9IaZbgDIQBYvXqy9e/fq+vXrioqK0ooVK7Rs2TLlz59f8+fPl5eX113fO2TIEK1evVphYWHKnz+/oqOjNXXqVOXNm1fPPPOMpBu/+GfLlk3Tpk1T1qxZlTlzZlWuXPm261pTKkeOHHrmmWfUoUMHRUVFacKECSpSpIjDY806deqkuXPnqn79+vrvf/+rQ4cO6euvv77t8VUPUlvjxo1Vs2ZNvfvuuzp69KjKli2rX3/9VT///LN69uyZZo/G6ty5sz7++GO1b99eW7ZsUYECBTR37lytXbtWEyZMuO2a8oeRPNt98zPAb5U8Pm719NNPO8yW3kn79u01cODAFJ/Cvnz5cl27du229qZNm6pevXry8PBQ48aN9eqrr+rSpUv65JNP5Ofnp9OnT9/2nieeeELh4eHatGmT/P399fnnnysqKsohpL/11luaP3++GjVqpPbt26tixYq6fPmyduzYoblz5+ro0aPKlSvXfetOCyNGjNDKlStVuXJlvfLKKwoODta5c+f0119/6bfffrMf4HrllVc0efJktW3bVlu2bFGePHn01VdfKVOmTLdtM6V/D9q0aaPZs2erS5cuWrlypapWrarExETt3btXs2fP1tKl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AwAAAABgEUI3AAAAAAAWIXQDAAAAAGARQjcAAAAAABYhdAMAAAAAYBFCNwAAAAAAFiF0AwAAAABgEUI3AAAAAAAWIXQDAAAAAGARQjcAAAAAABYhdAMAAAAAYBFCNwAAAAAAFiF0AwAAAABgEaeG7uHDh+vJJ59U1qxZ5efnp6ZNm2rfvn0Ofa5du6Zu3bopZ86cypIli5o3b66oqCiHPhEREQoLC1OmTJnk5+ent956S9evX3fo8/vvv6tChQry9PRUkSJFNHPmTKt3DwAAAACQwbk588NXrVqlbt266cknn9T169f1zjvvqF69etq9e7cyZ84sSerVq5cWLVqkOXPmyNfXV927d1ezZs20du1aSVJiYqLCwsIUEBCgdevW6fTp02rbtq3c3d01bNgwSdKRI0cUFhamLl26aNasWVq+fLk6deqkPHnyKDQ01Gn7DwAAgEdfgbcXObuEdOPoiDBnlwA8cpwaupcsWeLweubMmfLz89OWLVv07LPPKiYmRp999pm++eYb1apVS5I0Y8YMlShRQhs2bFCVKlX066+/avfu3frtt9/k7++vcuXKaejQoerXr58GDx4sDw8PTZs2TQULFtTYsWMlSSVKlNCaNWs0fvx4QjcAAAAAwDKP1DXdMTExkqQcOXJIkrZs2aKEhATVqVPH3qd48eLKly+f1q9fL0lav369SpcuLX9/f3uf0NBQxcbGateuXfY+N28juU/yNm4VFxen2NhYhwUAAAAAgAf1yITupKQk9ezZU1WrVlWpUqUkSZGRkfLw8FC2bNkc+vr7+ysyMtLe5+bAnbw+ed29+sTGxurq1au31TJ8+HD5+vral6CgoDTZRwAAAABAxvLIhO5u3bpp586d+u6775xdivr376+YmBj7cvz4cWeXBAAAAABIh5x6TXey7t27a+HChVq9erXy5s1rbw8ICFB8fLwuXLjgMNsdFRWlgIAAe5+NGzc6bC/57uY397n1judRUVHy8fGRt7f3bfV4enrK09MzTfYNAAAAAJBxOXWm2xij7t2766efftKKFStUsGBBh/UVK1aUu7u7li9fbm/bt2+fIiIiFBISIkkKCQnRjh07FB0dbe+zbNky+fj4KDg42N7n5m0k90neBgAAAAAAVnDqTHe3bt30zTff6Oeff1bWrFnt12D7+vrK29tbvr6+Cg8PV+/evZUjRw75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b+u/ceNGs3r1ahMREWFiYmL+zVKRzuzatctkzZrV/O9//7O3/fjjj8Zms5mvv/7aoe/p06fNjh07zLx588z+/fvN+fPn/+VqwXO6M7BMmTLp9ddf1/jx4zVixAh98MEHmjdvnkaNGqX58+erdu3akuRwB83Vq1fr+PHjypw5s7PKRjpw5MgReXl5qWPHjkpMTJSrq6v9DtMDBw7UP//8o59//lnh4eEKCQlRiRIlnF0y0gkvLy+98sorOn78uKpUqaJdu3ZpypQpGj16tObMmWP/3kq+pi1fvnwaPny4PDw8lD17dmeWjkfc0aNHlZCQoHbt2tmv07bZbMqdO7fatm2r2NhYvfPOO6pfv76aNGmiAgUKqECBAs4tGo+0q1evavjw4bLZbGrQoIG9/cCBA0pKStKGDRtUpEgReXp6qlKlSpKkJ5980lnlIh2Jj49XeHi4vL291aJFC3v75s2bJUlnzpzRkiVLVLJkSQUFBSkgIEABAQEqVaqUs0rO8LiRWgZ07do1xcbGyhijF154Qe+8844OHjyoZs2aaeDAgfr5559Vr149h7uyTpkyRd9//72kG3dwBe5l586d2rlzp/z8/OTq6ipJ9ruUe3t764MPPlBCQoLWrFnj5EqRXly5ckX//POP4uPjVb16dY0fP15Zs2ZVjhw51L9/fy1dulR169Z1eM/IkSP1559/Kl++fHd8tjJws61bt+rEiRMqUaKE/UZDybJkyaKmTZvK19dXx48fd2KVSE+8vb3VqlUrNW7cWB06dNDRo0c1ZcoUjRkzRq+++qqyZMmiIUOGqHr16mrTpo1ef/11xcTEOLtspAMeHh6aOHGicubMqSFDhujw4cMaPXq0Jk2apGbNmuny5ctq166dXnrpJT377LOaMGGCDhw44OyyMzRmujOYPXv26K233tLx48fl5uamkSNHqlGjRnJxcVH//v311FNP2Wexk++g+b///U9jx461Hz0D7id79uwyxmj37t0KCQlRUlKSXFxc7GPK19dX/v7+io2NdXKlSA92796tfv366eDBgwoICFDbtm3VoUMHTZ48WQMHDtT27dtVtGhRSbI/3/a9997Te++9p7///tvJ1SO9KFGihC5fvqyffvpJzz//vMNdpCWpePHiCgwM1NGjR51TINKlevXqydXVVZMnT1bVqlV17tw5rV+/XuXKlZN0YyJk06ZN+uabb/T777/rn3/+ka+vr3OLxiMt+Xeqp556SjNmzFDr1q3VqFEjnT59Wj///LNq1aolSerUqZOOHj2q4cOHa/bs2WrSpImTK8/YmOnOQLZt26aQkBDlzp1b9evXl6enp1q2bKlNmzapYcOGGjJkiC5duqRRo0Zpw4YNkqRBgwZp7Nix+uOPP3i8DlKsXr16ypUrl0aOHCnpxgGcm5/FffHiReXKlUslS5aUJJ49irtK/t7Knj27WrZsqZiYGA0dOlRz585VpUqV9O6776pgwYIKCQlRdHS03NzcNGDAAI0YMUKbN29W2bJlnb0LSCf8/PyUO3duff3119q/f7+9PSkpSUlJSTp79qx8fHz01FNPObFKPOouXryo6Ohobd26VQcPHpR043nJvXv31pNPPqm8efM6/Jvn5uamatWqadKkSdq0aZMKFSrkrNLxiLt48aLOnDmjzZs368KFC7p06ZIqV66sWbNmKSkpScHBwQ6XUfn7+6ty5cqaN2+elixZooIFCzqxenAjtQxix44dJkuWLGbAgAH2ttjYWJM3b17TvHlze9vPP/9snnzySdOhQwfTunVr4+XlZTZv3uyMkpFOJSYmGmOMmTZtmnFzczMvvvjibTfee/fdd03BggVNRESEM0pEOrFnzx6TKVMmM2jQIHvbqVOnTN68eU2bNm2MMTdumLZu3TpTrVo1U758efPGG28Yb29vvreQIrc+8vLzzz83NpvNtG/f/rZH6fzvf/8zBQsWNMeOHfs3S0Q6snPnTlOrVi1TqlQpY7PZjK+vr2nZsqU5ePCgMcaYNWvWmCZNmpjy5cvb71yemJjIo1dxXzt37jShoaHmiSeeMO7u7iYwMNC0bNnSHDlyxBhjzPr1602RIkVM8+bN7WPLGB6T+SixGcMU0+MuKSlJrVq10vfff6+TJ08qT5489lMwmzZtqmzZsmn69Ony8PCQJC1YsEBvvPGGzp8/rxUrVqh8+fJO3gM8qo4ePSpjzB2Pnp49e1bTp0/XiBEjlC9fPtWtW1dZs2bVkSNHtHDhQsYW7ikhIUEvvvii1q5dq1mzZqlOnTr276327dsrJiZG3333nTw9PSVJGzZsUI8ePbRt2zatW7dOFStWdPIe4FF18uRJ7dixQ/Xr15ckh5umSdLEiRPVq1cvFS9eXPXq1VOWLFl0/PhxLViwQMuXL+d7C3e0c+dOVa1aVR07dlSDBg2UKVMmLV++XJMnT1ZQUJCmTZump556SitXrtSkSZN06tQpjRs3TlWrVnV26XjE7dy5U88884w6dOig6tWrq3Dhwpo8ebIWL14sY4xWrlypIkWKaMOGDWrTpo0qVKigHj16MLYeNU6N/PjXREVFmcqVK5uSJUuaXbt2GWNuzBh5e3ubqVOnGmMcj/gvX77cHDp0yCm1In1ITEw0derUMXny5LEfxb/VhQsXzKpVq0y9evVM6dKlTaVKlUyXLl3M7t27/+VqkR799ddfpl69eqZ+/frmhx9+MMbc+N7y8vIyU6ZMceibPON9/PhxZ5SKdCIuLs40bdrUhISEmAULFtjbb51pXLx4sXnppZdMoUKFTOXKlU2XLl3Mnj17/u1ykU6cP3/ePPvss6ZPnz4O7QkJCWbdunUmb968plq1aub69evGGGNWrlxpatWqZapXr26uXr3KTDfu6ty5c+bpp582b7755m3rZs2aZQoXLmxKly5tTp06ZYwxZvPmzSZnzpymbdu25urVq/92ubgHZrozkLNnz6phw4a6fv26xo0bp/bt2yssLExTpkyx9zHG2I/2A/cTHR2tJk2a6OLFi5o3b56KFCliX3frWIqLi5MxRu7u7vY7mgN3kzx+tm3bpt69eytr1qxq2LCh3n//fTVp0kQffvihvZ8kvreQYps3b9a7774rFxcXde3aVc8995ykG2eF2Ww2+1i6+XXyow+BOzly5IhCQ0M1ffp01ahR47Z//5YsWaLnnntOw4cPV58+fSRJa9euVf78+ZU3b15nlY104MiRI3ruuef08ccfq0qVKnJxcbGf9SVJU6dO1f/+9z+NGjVK4eHhkm48iSFr1qwqXLiwM0vHLbiRWgaSK1cu/fLLL3J3d1etWrVUtWpVe+BOfjwYv7jiQfj5+WnBggXy9vZW06ZN7TeNkf5vLF29elUTJkzQuXPn5OXlxS+uSJHkRzaVLVtWY8eO1cWLF9WnTx8FBwfbA/f169cdQhJwP8YYVapUSaNGjVJ8fLw++ugjzZ8/X5Ic7laevG7FihW3rQNutW/fPkVEROiJJ56QJIdHrkpSlSpVVLJkSR06dMjeVrVqVQI37uvw4cPatWuX/Pz87N9Dbm5u9gPOr732mvLkyWN/BGtiYqLKlStH4H4E8a/IY+zmkxiuX78u6f+C97PPPutwZ01+oUBq5cqVS4sXL7YH75ufAxkfH69+/fqpd+/eunjxohOrxKPu2rVrt7UlJiZKksqVK6fJkyfrqaeeks1m04IFCyQ5/uIBpMStB3Pi4+M1depU/fzzz/b1165dU8+ePdWrVy8VKFDA3g7cTYkSJeTm5qbPP/9ckuTq6urw3ZQtWzb5+fnp3LlzzioR6VSuXLnk6emp5cuXOxzMSf4uk6SgoCD7v5dMbDy6SFqPGWPMbadbJp+GEhERoVmzZilnzpyaO3euMmXKpBYtWmjv3r3OLBnpzN0O5ixdulSenp56/vnndfDgQSUmJqpPnz767LPPtGXLFvsMAHCrkydPqm3btlq5cqW9LSEhQW5ubjp+/LjmzZunEiVKaNy4cYqPj9f06dM1Z84cSYQh3Nv9DuZMmDBBCQkJmjZtmn3G++2339aXX36p9evXM1uEFMmaNatCQkI0e/ZsLVu2TNL/haKkpCT7OAwJCXFmmUiHypYtqyeffFKTJk3SkSNH7O3JlzDExcVJkv257xyIfnQRuh8j+/fvV48ePdS8eXONHTtW0o1TnNzc3HTs2DGFhIRo48aNMsYoV65cWrJkiS5fvqyOHTsqISHBydXjUZaSgzk5cuTQ0qVL5e3trWbNmqlt27aaMWOG/vjjD+72i3uKi4vTiRMnNHbsWPspcu7u7jpy5IhKly6ttWvXKikpSWXLltX48eN16tQpzZ49W5cuXXJy5XiUpeRgTunSpe0Hcz7++GPVqVNH06dP1+rVq7kDPlIsR44cGjx4sA4ePKgBAwZo7ty5kv7v38vhw4dr+/btatSokTPLRDqTfIBw5MiRunjxol588UVt2bLFfmlVUlKSPvjgA23btk1NmzaVxIHoRxk3UntMbNu2TXXr1lXVqlXl5eWlH374QcOGDdObb76p6OhoPfXUU6pXr54+/vhjh7+Q586dU0xMzB0f+QRINw7mfPjhhzp58qSqVq2qPn36KCkpSS4uLjp27JiefvpptWjRQhMmTJDNZtPZs2dVt25dbdu2TX/99Zf96CtwLwcOHFCPHj1kjNF7772nypUrK0+ePGrUqJGmT59unzWy2WzauXOnsmbNqvz58zu7bDzCDh8+rNatWytHjhx6++239cwzz0i6cWOi8uXL65VXXtHIkSPl4uKi7du3q2PHjjp27JiWLVvG9xbu6Nq1a/Ly8nJou/mmVqtWrdLLL7+shIQElS9fXjlz5lRcXJzWrFmjxYsXq0KFCs4oG+nIzTfhSx5b169f19KlS9WzZ0+dPXtWFStWVJ48eRQbG6v169dryZIljK10gND9GNi+fbuqVKmiXr166YMPPlBSUpLeeOMNubm5aeTIkTpx4oTmz5+vnj17cndyPJDUHsw5e/asrl69qqCgICdWj/QmOXhLUvPmzZU3b17Vq1fPfs8J7lSOB/UgB3P27dsnb29v5cuXz9ll4xF08uRJ9erVS127dlXNmjUl3Thzwt3dXREREfrrr7/UtGlT7dq1S/Pnz9fy5cvl7e2tChUqqHXr1ipatKiT9wCPqjv925YcuI8dO6ZNmzapRYsWioqK0ogRI3TkyBHFxcWpcuXKatWqFWMrnSB0p3PHjx9XhQoVVLNmTc2ePdve/tJLL2nv3r26cuWKypYtq0aNGqldu3ZOrBTpDQdz4AwHDhywj6l33nnHPjvJGENqcTAHaeFBzpwAUiolZxM2b95ckyZNcnapeEh8M6RziYmJKliwoOLi4rR27VpJ0ogRI7RgwQK1aNFCffv21a5du+zXfAApcfz4cdWuXVuNGjXSBx98IOnGHe7PnDmjlStXqlSpUurXr5+yZ88uiV9WkXaKFi2q8ePHyxij999/X+vWrZPEGEPqFS1aVJMmTZKLi4t+/PFHZcmSxSFw89g5pEShQoX0xRdfKDExUe+//77+/PNPSdLTTz+tF154QaNGjbKPq5vvMs3cFu5m27ZteuaZZ3TixAl5enqqf//+GjNmjFxcXBQdHa3q1asrLCxMEydOlMRYSu+Y6X4MJB/F9/DwkJ+fn+bPn6+vvvpK9erVkyRFRESoQIECmjZtmjp37uzkapEeHD16VP/973+VJ08e9e3bV1WrVtWIESM0dOhQ9e/fXwEBARo3bpyuX7+uOXPmqGzZss4uGY+ZAwcOqHfv3jp79qzGjx+vKlWqOLskpHP79+/XG2+8IWOMBg4cqKefftrZJSEdut+ZE0BKcDZhxsM3xGOgaNGimjhxoq5evapZs2apb9++qlevnowxSkhIkKurq8qUKaMcOXI4u1SkEwUKFNCsWbMUHx+vUaNG6ZVXXtH48eP1008/acCAAerUqZOWLFmigwcP2o/2A2mpaNGiGj16tPLmzavAwEBnl4PHwBNPPKFJkybJ3d1dffr00YYNG5xdEtKh+505AdwPZxNmTITux8QTTzyhjz76SNWqVdPy5cv1xx9/yGazyd3dXR9//LFiY2NVuXJlZ5eJdISDOXC24sWLa9asWdzYCmmGgzlIC1wGg4fBpaEZE6eXP2ZuvlPr8OHDtWzZMg0aNEjr1q3jWclIlUOHDum1116Tq6ur+vfvr2rVqkmSBg4cqK+//lqrVq3iLuUA0pX4+Hh5eHg4uwykc1wGg9Ti0tCMh5nux0zyaU/u7u6qX7++BgwYoDVr1hC4kWqFCxfW5MmTZYzRBx98oL///lujRo3S6NGj9cMPPxC4AaQ7BG6kBc6cQGpxNmHGw0z3Y2rfvn3q27evhg0bppIlSzq7HDwGko/ob9y4UefPn9f69etVsWJFZ5cFAIBTceYEUouzCTMOQvdjLCEhQe7u7s4uA48RDuYAAACkHS4NzRgI3QAeCAdzAAAA0g5nEz7+uKYbwAMhcAMAAKSdokWLasyYMapSpYr+/vtvAvdjiJluAAAAAHAyziZ8fBG6AQAAAACwCKeXAwAAAABgEUI3AAAAAAAWIXQDAAAAAGARQjcAAAAAABYhdAMAAAAAYBFCNwAAAAAAFiF0AwCAf83vv/8um82mCxcuPNR2ChQooAkTJqRJTQAAWInQDQBAOtG+fXvZbDaNGDHCoX3evHmy2Wz218nB9k5LZGSkJGnw4MH2NldXVwUFBalz5846d+7cPWsYPHiwypUrl+b7BgDA44rQDQBAOuLl5aWRI0fq/Pnz9+27b98+nT592mHx8/Ozry9ZsqROnz6tiIgIzZgxQ0uWLFHXrl2tLB8AgAyH0A0AQDpSp04dBQQEaPjw4fft6+fnp4CAAIfFxeX//ul3c3NTQECA/vOf/6hOnTp64YUXtGzZsoeq76uvvlKlSpWUNWtWBQQE6OWXX1Z0dPRt/dauXasyZcrIy8tLVapU0c6dOx3Wr1mzRtWqVZO3t7eCgoLUo0cPXb58+aFqAwDAGQjdAACkI66urho2bJg+/PBDnThxIs22e/ToUS1dulQeHh4PtZ2EhAQNHTpU27Zt07x583T06FG1b9/+tn5vvfWWxo4dq02bNil37txq3LixEhISJEmHDh1S/fr11bx5c23fvl3ff/+91qxZo+7duz9UbQAAOIObswsAAAAP5vnnn1e5cuU0aNAgffbZZ3ftlzdvXofX+fPn165du+yvd+zYoSxZsigxMVHXrl2TJI0bN+6hauvYsaP9z4UKFdKkSZP05JNP6tKlS8qSJYt93aBBg1S3bl1J0hdffKG8efPqp59+0n//+18NHz5crVq1Us+ePSVJRYsW1aRJk1S9enV99NFH8vLyeqgaAQD4NxG6AQBIh0aOHKlatWrpzTffvGufP/74Q1mzZrW/dnd3d1hfrFgxzZ8/X9euXdPXX3+trVu36vXXX3+ourZs2aLBgwdr27ZtOn/+vJKSkiRJERERCg4OtvcLCQmx/zlHjhwqVqyY9uzZI0natm2btm/frlmzZtn7GGOUlJSkI0eOqESJEg9VIwAA/yZOLwcAIB169tlnFRoaqv79+9+1T8GCBVWkSBH7kj9/fof1Hh4eKlKkiEqVKqURI0bI1dVV7733Xqprunz5skJDQ+Xj46NZs2Zp06ZN+umnnyRJ8fHxKd7OpUuX9Oqrr2rr1q32Zdu2bTpw4IAKFy6c6voAAHAGZroBAEinRowYoXLlyqlYsWJpsr0BAwaoVq1a6tq1qwIDAx/4/Xv37tU///yjESNGKCgoSJK0efPmO/bdsGGD8uXLJ0k6f/689u/fb5/BrlChgnbv3q0iRYqkck8AAHh0ELoBAEinSpcurVatWmnSpEl3XB8dHW2/VjtZzpw5bzvNPFlISIjKlCmjYcOGafLkyXf93KtXr2rr1q0ObVmzZlW+fPnk4eGhDz/8UF26dNHOnTs1dOjQO25jyJAhypkzp/z9/fXuu+8qV65catq0qSSpX79+qlKlirp3765OnTopc+bM2r17t5YtW3bPugAAeBRxejkAAOnYkCFD7NdN36pYsWLKkyePw7Jly5Z7bq9Xr1769NNPdfz48bv22b9/v8qXL++wvPrqq8qdO7dmzpypOXPmKDg4WCNGjNCYMWPuuI0RI0bojTfeUMWKFRUZGakFCxbY75xepkwZrVq1Svv371e1atVUvnx5DRw4MFWz7wAAOJvNGGOcXQQAAAAAAI8jZroBAAAAALAIoRsAAAAAAIsQugEAAAAAsAihGwAAAAAAixC6AQAAAACwCKEbAAAAAACLELoBAAAAALAIoRsAAAAAAIsQugEAAAAAsAihGwAAAAAAixC6AQAAAACwCKEbAAAAAACL/D8fQLJNshj5yQAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "tag_counts = tag_data.tag.value_counts()\n", + "\n", + "plt.figure(figsize=(10, 6))\n", + "tag_counts.plot(kind='bar')\n", + "plt.title('Distribution of NER Label Frequency')\n", + "plt.xlabel('NER Label')\n", + "plt.ylabel('Frequency')\n", + "plt.xticks(rotation=45, ha='right')\n", + "plt.tight_layout()\n", + "plt.show()\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "cZdD8L9fqsDV" + }, + "source": [ + "## NOTE\n", + "\n", + "\n", + "1. Phân bố độ dài câu\n", + "2. \n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 607 + }, + "id": "2mkmZj6xqqwp", + "outputId": "0836d9f9-099d-4f28-f402-9da1e444639f" + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABKUAAAJOCAYAAABm7rQwAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAbMVJREFUeJzt3XlcVPXi//H3sI8o7oAoIC65L6llpqklgUumaeWaS5Zlct26Vra4tmm5pZbZonYVM7s3MzWV3EtzS1FLbTOtENxFBBGZ8/ujL/NzxIVh4Myor+fjwaPmnM98znvOwDC+OeeMxTAMQwAAAAAAAICJvNwdAAAAAAAAALceSikAAAAAAACYjlIKAAAAAAAApqOUAgAAAAAAgOkopQAAAAAAAGA6SikAAAAAAACYjlIKAAAAAAAApqOUAgAAAAAAgOkopQAAAAAAAGA6SikAAJAvo0ePlsViMWVbLVu2VMuWLe23161bJ4vFos8//9yU7ffp00cVK1Y0ZVv5lZaWpieeeEKhoaGyWCwaMmRIoW4v5/k/fvx4oW7nZtenTx8VLVrU3TEAAHALSikAAKA5c+bIYrHYvwICAhQWFqbY2Fi98847Onv2bIFsJykpSaNHj9auXbsKZL6C5MnZ8uL111/XnDlzNGDAAP3nP//RY489lmtMTpF0va9LC8AbgdklpbPS09M1evRorVu3zt1RAADwKD7uDgAAADzH2LFjFRUVpaysLCUnJ2vdunUaMmSIJk2apCVLlqhu3br2sS+//LJeeOEFp+ZPSkrSmDFjVLFiRdWvXz/P91u1apVT28mPa2X74IMPZLPZCj2DK9asWaO77rpLo0aNuuqYTp06qUqVKvbbaWlpGjBggB566CF16tTJvjwkJKRQs95q0tPTNWbMGEm64Qo/AAAKE6UUAACwa9OmjRo1amS/PWLECK1Zs0YPPPCAHnzwQe3bt09Wq1WS5OPjIx+fwn0rkZ6eriJFisjPz69Qt3M9vr6+bt1+Xhw9elQ1a9a85pi6des6FIvHjx/XgAEDVLduXfXs2bOwIwIAADjg9D0AAHBN9913n1555RUdOnRI8+bNsy+/0jWlEhIS1KxZM5UoUUJFixZVtWrV9OKLL0r65xSrO+64Q5LUt29f+6lic+bMkfTPESS1a9fWjh071Lx5cxUpUsR+38uvKZUjOztbL774okJDQxUYGKgHH3xQf/75p8OYihUrqk+fPrnue+mc18t2pWtKnTt3Ts8++6zCw8Pl7++vatWq6e2335ZhGA7jLBaL4uLitHjxYtWuXVv+/v6qVauWVqxYceUdfpmjR4+qX79+CgkJUUBAgOrVq6e5c+fa1+ecunbw4EEtW7bMnv2PP/7I0/xXsmbNGt1zzz0KDAxUiRIl1KFDB+3bt++69zt06JCqVKmi2rVrKyUlRZJ0+vRpDRkyxL6fqlSpovHjxzscefbHH3/IYrHo7bff1qxZs1S5cmX5+/vrjjvu0LZt2/L9OC5XGFkWLVqkmjVrKiAgQLVr19YXX3zh8P3yxx9/qGzZspKkMWPG2J+f0aNHO8zz999/q2PHjipatKjKli2rf//738rOznYY8+mnn6phw4YqVqyYgoKCVKdOHU2dOrXA9g8AAGbjSCkAAHBdjz32mF588UWtWrVKTz755BXH/Pjjj3rggQdUt25djR07Vv7+/vr111/13XffSZJq1KihsWPHauTIkerfv7/uueceSdLdd99tn+PEiRNq06aNunbtqp49e173NLLXXntNFotFzz//vI4ePaopU6YoOjpau3btsh/RlRd5yXYpwzD04IMPau3aterXr5/q16+vlStXavjw4fr77781efJkh/Hffvut/ve//+mZZ55RsWLF9M4776hz5846fPiwSpcufdVcGRkZatmypX799VfFxcUpKipKixYtUp8+fXT69GkNHjxYNWrU0H/+8x8NHTpUFSpU0LPPPitJ9iLEWd98843atGmjSpUqafTo0crIyNC0adPUtGlT/fDDD1e94Ptvv/2m++67T6VKlVJCQoLKlCmj9PR0tWjRQn///beeeuopRUREaNOmTRoxYoSOHDmiKVOmOMwRHx+vs2fP6qmnnpLFYtGECRPUqVMn/f777y4frVYYWZYtW6YuXbqoTp06euONN3Tq1Cn169dP5cuXt89TtmxZvffee7lOk7z0iLXs7GzFxsaqcePGevvtt/XNN99o4sSJqly5sgYMGCDpn8K3W7duatWqlcaPHy9J2rdvn7777jsNHjzYpX0DAIDbGAAA4JY3e/ZsQ5Kxbdu2q44pXry4cfvtt9tvjxo1yrj0rcTkyZMNScaxY8euOse2bdsMScbs2bNzrWvRooUhyZg5c+YV17Vo0cJ+e+3atYYko3z58kZqaqp9+WeffWZIMqZOnWpfFhkZafTu3fu6c14rW+/evY3IyEj77cWLFxuSjFdffdVh3MMPP2xYLBbj119/tS+TZPj5+TksS0xMNCQZ06ZNy7WtS02ZMsWQZMybN8++7MKFC0aTJk2MokWLOjz2yMhIo127dtec73LHjh0zJBmjRo2yL6tfv74RHBxsnDhxwiGvl5eX0atXL/uynOf/2LFjxr59+4ywsDDjjjvuME6ePGkfM27cOCMwMND4+eefHbb7wgsvGN7e3sbhw4cNwzCMgwcPGpKM0qVLO9z/yy+/NCQZX3311TUfR873w6JFi646pjCy1KlTx6hQoYJx9uxZ+7J169YZkhy+X660n3P07t3bkGSMHTvWYfntt99uNGzY0H578ODBRlBQkHHx4sVr7gsAAG4knL4HAADypGjRotf8FL4SJUpIkr788st8XxTc399fffv2zfP4Xr16qVixYvbbDz/8sMqVK6fly5fna/t5tXz5cnl7e2vQoEEOy5999lkZhqGvv/7aYXl0dLQqV65sv123bl0FBQXp999/v+52QkND1a1bN/syX19fDRo0SGlpaVq/fn0BPJr/78iRI9q1a5f69OmjUqVKOeS9//77r7hf9+7dqxYtWqhixYr65ptvVLJkSfu6RYsW6Z577lHJkiV1/Phx+1d0dLSys7O1YcMGh7m6dOnicP+cI9aut5/yoqCzJCUlac+ePerVq5eKFi1qH9eiRQvVqVPH6XxPP/20w+177rnH4XGXKFFC586dU0JCgtNzAwDgqSilAABAnqSlpTkUQJfr0qWLmjZtqieeeEIhISHq2rWrPvvsM6cKqvLlyzt1UfOqVas63LZYLKpSpYpL11PKi0OHDiksLCzX/qhRo4Z9/aUiIiJyzVGyZEmdOnXqutupWrWqvLwc37JdbTuuypmvWrVqudbVqFFDx48f17lz5xyWt2/fXsWKFdPKlSsVFBTksO6XX37RihUrVLZsWYev6OhoSf9cL+tSl++nnFLoevspLwo6S86+uvTTDHNcadm1BAQE5Drd8vLvj2eeeUa33Xab2rRpowoVKujxxx/P83XJAADwVFxTCgAAXNdff/2lM2fOXPMf21arVRs2bNDatWu1bNkyrVixQgsXLtR9992nVatWydvb+7rbceY6UHl1+cXYc2RnZ+cpU0G42naMyy6KfiPq3Lmz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CcrKylJMTIzOnTtnHzN06FB99dVXWrRokdavX6+kpCR16tTJvj47O1vt2rXThQsXtGnTJs2dO1dz5szRyJEj7WMOHjyodu3a6d5779WuXbs0ZMgQPfHEE1q5cqV9zMKFCzVs2DCNGjVKP/zwg+rVq6fY2FgdPXrUnJ0BAAAAAABwE/Fxd4BrWbFihcPtOXPmKDg4WDt27FDz5s115swZffTRR4qPj9d9990nSZo9e7Zq1Kih77//XnfddZdWrVqln376Sd98841CQkJUv359jRs3Ts8//7xGjx4tPz8/zZw5U1FRUZo4caIkqUaNGvr22281efJkxcbGSpImTZqkJ598Un379pUkzZw5U8uWLdPHH3+sF154wcS9AgAAAAAAcOPz6FLqcmfOnJEklSpVSpK0Y8cOZWVlKTo62j6mevXqioiI0ObNm3XXXXdp8+bNqlOnjkJCQuxjYmNjNWDAAP3444+6/fbbtXnzZoc5csYMGTJEknThwgXt2LFDI0aMsK/38vJSdHS0Nm/efNW8mZmZyszMtN9OTU2VJGVlZSkrKyufe8G9bDabrFarAnws8vM2XJrL38tw+K8rLvp6k8tNuS7N5GnZCjKXxcciq9Uqm83m8s9vzv097XWAXM4hl3PI5RxyOYdcziGXc8jlHHI5h1zO8dRckudmc1euvG7PYhiG6/9aM4HNZtODDz6o06dP69tvv5UkxcfHq2/fvg7FjyTdeeeduvfeezV+/Hj1799fhw4dcjgVLz09XYGBgVq+fLnatGmj2267TX379nUonZYvX6527dopPT1dp06dUvny5bVp0yY1adLEPua5557T+vXrtWXLlitmHj16tMaMGZNreXx8vIoUKeLS/gAAAAAAAPBE6enp6t69u86cOaOgoKCrjrthjpQaOHCg9u7day+kbgQjRozQsGHD7LdTU1MVHh6umJiYaz4pniwxMVHNmzdXSPc35RdSyaW5/L0MjWtk0yvbvZRps7g017l9G3VyxTRyuSGXJ2cryFwXUn5XSvwL2rBhg+rVq+fSXFlZWUpISND9998vX19fl+YqSORyDrmcQy7nkMs55HIOuZxDLueQyznkco6n5pI8N5u7cuWcKXY9N0QpFRcXp6VLl2rDhg2qUKGCfXloaKguXLig06dPq0SJEvblKSkpCg0NtY+5/FPycj6d79Ixl39iX0pK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AAAAAACQN5RSTujSpYuOHTumkSNHKjk5WfXr19eKFStyXfwcAAAAAAAA10Yp5aS4uLirnq4H5/j7+2vUqFEF8hHCBYlczvPUbORyDrmcQy7nkMs55HIOuZxDLueQyznkcg65nOOpuSTPzeapuXLw6XsAAAAAAAAwnZe7AwAAAAAAAODWQykFAAAAAAAA01FKAQAAAAAAwHSUUnCLDRs2qH379goLC5PFYtHixYvdHUlvvPGG7rjjDhUrVkzBwcHq2LGjDhw44O5Yeu+991S3bl0FBQUpKChITZo00ddff+3uWLm8+eabslgsGjJkiFtzjB49WhaLxeGrevXqbs2U4++//1bPnj1VunRpWa1W1alTR9u3b3drpooVK+baXxaLRQMHDnRrruzsbL3yyiuKioqS1WpV5cqVNW7cOHnCZRDPnj2rIUOGKDIyUlarVXfffbe2bdtmeo7rvY4ahqGRI0eqXLlyslqtio6O1i+//OL2XP/73/8UExOj0qVLy2KxaNeuXYWe6Xq5srKy9Pzzz6tOnToKDAxUWFiYevXqpaSkJLfmkv55TatevboCAwNVsmRJRUdHa8uWLW7Pdamnn35aFotFU6ZMcXuuPn365Ho9a926tdtzSdK+ffv04IMPqnjx4goMDNQdd9yhw4cPuzXXlV7/LRaL3nrrLbfmSktLU1xcnCpUqCCr1aqaNWtq5syZhZopL7lSUlLUp08fhYWFqUiRImrdunWhv67m5f3p+fPnNXDgQJUuXVpFixZV586dlZKS4vZcs2bNUsuWLRUUFCSLxaLTp08Xaqa8Zjt58qT+9a9/qVq1arJarYqIiNCgQYN05swZt+aSpKeeekqVK1eW1WpV2bJl1aFDB+3fv9/tuXIYhqE2bdqY8u+3vORq2bJlrtevp59+2u25JGnz5s267777FBgYqKCgIDVv3lwZGRluy/XHH39c9TV/0aJFhZYrLyil4Bbnzp1TvXr1NGPGDHdHsVu/fr0GDhyo77//XgkJCcrKylJMTIzOnTvn1lwVKlTQm2++qR07dmj79u2677771KFDB/34449uzXWpbdu26f3331fdunXdHUWSVKtWLR05csT+9e2337o7kk6dOqWmTZvK19dXX3/9tX766SdNnDhRJUuWdGuubdu2OeyrhIQESdIjjzzi1lzjx4/Xe++9p+nTp2vfvn0aP368JkyYoGnTprk1lyQ98cQTSkhI0H/+8x/t2bNHMTExio6O1t9//21qjuu9jk6YMEHvvPOOZs6cqS1btigwMFCxsbE6f/68W3OdO3dOzZo10/jx4ws1hzO50tPT9cMPP+iVV17RDz/8oP/97386cOCAHnzwQbfmkqTbbrtN06dP1549e/Ttt9+qYsWKiomJ0bFjx9yaK8cXX3yh77//XmFhYYWax5lcrVu3dnhdW7Bggdtz/fbbb2rWrJmqV6+udevWaffu3XrllVcUEBDg1lyX7qcjR47o448/lsViUefOnd2aa9iwYVqxYoXmzZunffv2aciQIYqLi9OSJUvclsswDHXs2FG///67vvzyS+3cuVORkZGKjo4u1PeKeXl/OnToUH311VdatGiR1q9fr6SkJHXq1KnQMuU1V3p6ulq3bq0XX3yxULM4my0pKUlJSUl6++23tXfvXs2ZM0crVqxQv3793JpLkho2bKjZs2dr3759WrlypQzDUExMjLKzs92aK8eUKVNksVgKLUt+cj355JMOr2MTJkxwe67NmzerdevWiomJ0datW7Vt2zbFxcXJy6vw6pfr5QoPD8/1mj9mzBgVLVpUbdq0KbRceWIAbibJ+OKLL9wdI5ejR48akoz169e7O0ouJUuWND788EN3xzAMwzDOnj1rVK1a1UhISDBatGhhDB482K15Ro0aZdSrV8+tGa7k+eefN5o1a+buGNc1ePBgo3LlyobNZnNrjnbt2hmPP/64w7JOnToZPXr0cFOif6Snpxve3t7G0qVLHZY3aNDAeOmll9yUKvfrqM1mM0JDQ4233nrLvuz06dOGv7+/sWDBArflutTBgwcNScbOnTtNy5MjL793tm7dakgyDh06ZE4oI2+5zpw5Y0gyvvnmG3NCGVfP9ddffxnly5c39u7da0RGRhqTJ082LdPVcvXu3dvo0KGDqTkud6VcXbp0MXr27OmeQP8nL99fHTp0MO677z5zAv2fK+WqVauWMXbsWIdlZr/OXp7rwIEDhiRj79699mXZ2dlG2bJljQ8++MC0XJe/Pz19+rTh6+trLFq0yD5m3759hiRj8+bNbst1qbVr1xqSjFOnTpmW51J5eU//2WefGX5+fkZWVpZH5UpMTDQkGb/++qvbc+3cudMoX768ceTIEbf8++1KuTzh3x5XytW4cWPj5ZdfdmOqvH1/1a9fP9f7bXfgSCngKnIO4S1VqpSbk/x/2dnZ+vTTT3Xu3Dk1adLE3XEkSQMHDlS7du0UHR3t7ih2v/zyi8LCwlSpUiX16NGj0E+PyIslS5aoUaNGeuSRRxQcHKzbb79dH3zwgbtjObhw4YLmzZunxx9/3LS/gl3N3XffrdWrV+vnn3+WJCUmJurbb791+19yLl68qOzs7FxHN1itVo84Ii/HwYMHlZyc7PBzWbx4cTVu3FibN292Y7Ibx5kzZ2SxWFSiRAl3R7G7cOGCZs2apeLFi6tevXpuzWKz2fTYY49p+PDhqlWrlluzXG7dunUKDg5WtWrVNGDAAJ04ccKteWw2m5YtW6bbbrtNsbGxCg4OVuPGjT3i0gWXSklJ0bJlywr9aJG8uPvuu7VkyRL9/fffMgxDa9eu1c8//6yYmBi3ZcrMzJQkh9d/Ly8v+fv7m/r6f/n70x07digrK8vh9b569eqKiIgw9fXeE98358hLtjNnzigoKEg+Pj5mxbpurnPnzmn27NmKiopSeHi4W3Olp6ere/fumjFjhkJDQ03Lcr1ckjR//nyVKVNGtWvX1ogRI5Senu7WXEePHtWWLVsUHBysu+++WyEhIWrRooXp7xOv9/21Y8cO7dq1yyNe8ymlgCuw2WwaMmSImjZtqtq1a7s7jvbs2aOiRYvK399fTz/9tL744gvVrFnT3bH06aef6ocfftAbb7zh7ih2jRs3th+G/d577+ngwYO65557dPbsWbfm+v333/Xee++patWqWrlypQYMGKBBgwZp7ty5bs11qcWLF+v06dPq06ePu6PohRdeUNeuXVW9enX5+vrq9ttv15AhQ9SjRw+35ipWrJiaNGmicePGKSkpSdnZ2Zo3b542b96sI0eOuDXbpZKTkyVJISEhDstDQkLs63B158+f1/PPP69u3bopKCjI3XG0dOlSFS1aVAEBAZo8ebISEhJUpkwZt2YaP368fHx8NGjQILfmuFzr1q31ySefaPXq1Ro/frzWr1+vNm3aFOqpL9dz9OhRpaWl6c0331Tr1q21atUqPfTQQ+rUqZPWr1/vtlyXmzt3rooVK1bop33lxbRp01SzZk1VqFBBfn5+at26tWbMmKHmzZu7LVNO0TNixAidOnVKFy5c0Pjx4/XXX3+Z9vp/pfenycnJ8vPzy1Wgm/l672nvmy+Vl2zHjx/XuHHj1L9/f4/I9e6776po0aIqWrSovv76ayUkJMjPz8+tuYYOHaq7775bHTp0MCVHXnN1795d8+bN09q1azVixAj95z//Uc+ePd2a6/fff5f0zzUhn3zySa1YsUINGjRQq1atTLm259VyXe6jjz5SjRo1dPfdd5uS6VrMq4KBG8jAgQO1d+9ejznyoVq1atq1a5fOnDmjzz//XL1799b69evdWkz9+eefGjx4sBISEgr9mhjOuPRImrp166px48aKjIzUZ5995ta/BNhsNjVq1Eivv/66JOn222/X3r17NXPmTPXu3dttuS710UcfqU2bNqZdG+ZaPvvsM82fP1/x8fGqVauWdu3apSFDhigsLMzt++s///mPHn/8cZUvX17e3t5q0KCBunXrph07drg1FwpGVlaWHn30URmGoffee8/dcSRJ9957r3bt2qXjx4/rgw8+0KOPPmr/K6w77NixQ1OnTtUPP/zg9qMqL9e1a1f7/9epU0d169ZV5cqVtW7dOrVq1cotmWw2mySpQ4cOGjp0qCSpfv362rRpk2bOnKkWLVq4JdflPv74Y/Xo0cMjfqdPmzZN33//vZYsWaLIyEht2LBBAwcOVFhYmNuOzPb19dX//vc/9evXT6VKlZK3t7eio6PVpk0b0z6Ew9Pen+bw1FzS9bOlpqaqXbt2qlmzpkaPHu0RuXr06KH7779fR44c0dtvv61HH31U3333nSk/m1fKtWTJEq1Zs0Y7d+4s9O07k0uSQ5FYp04dlStXTq1atdJvv/2mypUruyVXzmv+U089pb59+0r6533/6tWr9fHHH5vyx/zrfd9nZGQoPj5er7zySqFnyQuOlAIuExcXp6VLl2rt2rWqUKGCu+NIkvz8/FSlShU1bNhQb7zxhurVq6epU6e6NdOOHTt09OhRNWjQQD4+PvLx8dH69ev1zjvvyMfHx61/lb5UiRIldNttt+nXX391a45y5crlKhFr1KjhEacWStKhQ4f0zTff6IknnnB3FEnS8OHD7UdL1alTR4899piGDh3qEUflVa5cWevXr1daWpr+/PNPbd26VVlZWapUqZK7o9nlHFp/+acvpaSkuO2w+xtBTiF16NAhJSQkeMRRUpIUGBioKlWq6K677tJHH30kHx8fffTRR27Ls3HjRh09elQRERH21/9Dhw7p2WefVcWKFd2W60oqVaqkMmXKuPV3QJkyZeTj4+PRvwM2btyoAwcOeMTvgIyMDL344ouaNGmS2rdvr7p16youLk5dunTR22+/7dZsDRs21K5du3T69GkdOXJEK1as0IkTJ0x5/b/a+9PQ0FBduHAh1yfbmfV674nvm3NcL9vZs2fVunVrFStWTF988YV8fX09Ilfx4sVVtWpVNW/eXJ9//rn279+vL774wm251qxZo99++00lSpSwv+ZLUufOndWyZUu35bqSxo0bS5Ipr/lXy1WuXDlJcttrfl721+eff6709HT16tWr0PPkBaUU8H8Mw1BcXJy++OILrVmzRlFRUe6OdFU2m81+bQN3adWqlfbs2aNdu3bZvxo1aqQePXpo165d8vb2dmu+HGlpafrtt9/svyDcpWnTprk+Lvbnn39WZGSkmxI5mj17toKDg9WuXTt3R5H0z7ULLv+EEm9vb/tfnzxBYGCgypUrp1OnTmnlypVuO6T9SqKiohQaGqrVq1fbl6WmpmrLli0ecz06T5NTSP3yyy/65ptvVLp0aXdHuip3/w547LHHtHv3bofX/7CwMA0fPlwrV650W64r+euvv3TixAm3/g7w8/PTHXfc4dG/Az766CM1bNjQ7dcqk/75WczKyvLo3wHFixdX2bJl9csvv2j79u2F+vp/vfenDRs2lK+vr8Pr/YEDB3T48OFCfb335PfNecmWmpqqmJgY+fn5acmSJaYchZSffWYYhgzDKNTX/OvleuGFF3K95kvS5MmTNXv2bLflupKcbIX5mn+9XBUrVlRYWJjpr/nO7K+PPvpIDz74oMqWLVtoeZzB6Xtwi7S0NIcG++DBg9q1a5dKlSqliIgIt2QaOHCg4uPj9eWXX6pYsWL28/CLFy8uq9XqlkySNGLECLVp00YRERE6e/as4uPjtW7dOre/8S9WrFiuc5QDAwNVunRpt15P4N///rfat2+vyMhIJSUladSoUfL29la3bt3clkn6/+fiv/7663r00Ue1detWzZo1S7NmzXJrLumff+DOnj1bvXv3NvUCn9fSvn17vfbaa4qIiFCtWrW0c+dOTZo0SY8//ri7o9k/orlatWr69ddfNXz4cFWvXt1+iLZZrvc6OmTIEL366quqWrWqoqKi9MorrygsLEwdO3Z0a66TJ0/q8OHDSkpKkiT7m7bQ0NBC/av+tXKVK1dODz/8sH744Qct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8ypTpozWrl0rSYqPj5fFYtEHH3ygmjVrqk2bNho+fLj9vt7e3ipVqpQkKTg42H6UWY66detq1KhRqlq1qnr16qVGjRpp9erV+Xo8AADgxsI1pQAAAFyUmpqqpKQkNW3a1GF506ZNlZiY6LCsW7duqlChgtasWSOr1WpfnpiYqO+++87hyKjs7GydP39e6enpKlKkiKR/SpwcgYGBCgoK0tGjR/OVOzExUbt379b8+fPtywzDkM1m08GDB1WjRo1c28w5ZTFnmwcOHFDdunUVEBBgH3PnnXfmOcOlc0tSuXLl8v14AADAjYVSCgAAwERt27bVvHnztHnzZt1333325WlpaRozZow6deqU6z6XFj6+vr4O6ywWi2w2W76ypKWl6amnntKgQYNyrYuIiCiUbV6uMOcGAACejVIKAADARUFBQQoLC9N3332nFi1a2Jd/9913uY4aGjBggGrXrq0HH3xQy5Yts49v0KCBDhw4oCpVqpiWu0GDBvrpp59c2ma1atU0b948ZWZmyt/fX5K0bds2hzF+fn6S/jnyCwAAIAelFAAAQAEYPny4Ro0apcqVK6t+/fqaPXu2du3a5XBqXI5//etfys7O1gMPPKCvv/5azZo108iRI/XAAw8oIiJCDz/8sLy8vJSYmKi9e/fq1VdfdSnbsWPHtGvXLodl5cqV0/PPP6+77rpLcXFxeuKJJxQYGKiffvpJCQkJmj59ep7m7t69u1566SX1799fL7zwgg4fPqy3335b0j9HPUlSZGSkLBaLli5dqrZt28pqtapo0aIuPSYAAHDj40LnAAAABWDQoEEaNmyYnn32WdWpU0crVqzQkiVLVLVq1SuOHzJkiMaMGaO2bdtq06ZNio2N1dKlS7Vq1SrdcccduuuuuzR58mRFRka6nC0+Pl633367w9cHH3ygunXrav369fr55591zz336Pbbb9fIkSMVFhaW57mDgoL01VdfadeuXapfv75eeukljRw5UtL/P+2wfPny9gu5h4SE5Pp0PwAAcGuyGIZhuDsEAAAAbh7z589X3759debMGYeLuQMAAFyK0/cAAADgkk8++USVKlVS+fLllZiYqOeff16PPvoohRQAALgmSikAAAC4JDk5WSNHjlRycrLKlSunRx55RK+99pq7YwEAAA/H6XsAAAAAAAAwHRc6BwAAAAAAgOkopQAAAAAAAGA6SikAAAAAAACYjlIKAAAAAAAApqOUAgAAAAAAgOkopQAAAAAAAGA6SikAAAAAAACYjlIKAAAAAAAApqOUAgAAAAAAgOn+H0/4ZDEpYJCNAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df['token_lengths'] = df['tokens'].apply(lambda token_list: [len(token) for token in token_list])\n", + "\n", + "# Flatten the list of token lengths for all rows\n", + "all_token_lengths = [length for sublist in df['token_lengths'] for length in sublist]\n", + "\n", + "# Convert to a pandas Series to easily get the distribution\n", + "token_length_series = pd.Series(all_token_lengths)\n", + "\n", + "# Plot the distribution of token lengths\n", + "plt.figure(figsize=(12, 6))\n", + "token_length_series.hist(bins=range(min(token_length_series), max(token_length_series) + 1), edgecolor='black', align='left')\n", + "plt.title('Distribution of Token Lengths')\n", + "plt.xlabel('Token Length')\n", + "plt.ylabel('Frequency')\n", + "plt.xticks(range(min(token_length_series), max(token_length_series) + 1))\n", + "plt.tight_layout()\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 798 + }, + "id": "48udWdKjxUcw", + "outputId": "c593638c-b7c0-4464-c477-b1ec2bf41463" + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABKUAAAJOCAYAAABm7rQwAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAcLJJREFUeJzt3Xd8FHX+x/H3pm0SSCgBUiQEBIGANEEQlSK9iA1PaVJEUC5YABVRkeZJURBUTo7fnWAD+6GHtNAREQENKASkByEEQwshIWyy8/uDyx5rAoRkM7ubvJ6PRx4yM9/9zGcmXyN5O8ViGIYhAAAAAAAAwEQ+7m4AAAAAAAAApQ+hFAAAAAAAAExHKAUAAAAAAADTEUoBAAAAAADAdIRSAAAAAAAAMB2hFAAAAAAAAExHKAUAAAAAAADTEUoBAAAAAADAdIRSAAAAAAAAMB2hFAAAJdT48eNlsVhM2Vfbtm3Vtm1bx/LatWtlsVj0xRdfmLL/gQMHqnr16qbsq7DS09P12GOPKSIiQhaLRc8884y7W4IHO3TokCwWi9544w13twIAQLEhlAIAwAvMnz9fFovF8RUYGKioqCh17txZb731ls6dO+eS/Rw7dkzjx49XQkKCS+q5kif3VhCvvfaa5s+fr2HDhunDDz/UI488csWxFy9e1KxZs9SkSROFhoaqfPnyql+/voYOHardu3cXa58LFizQzJkzi3UfZmrbtq1uvvlmd7dxRUuWLNH48ePd3QYAAG7h5+4GAABAwU2cOFE1atSQzWbT8ePHtXbtWj3zzDOaMWOGvvnmGzVs2NAx9uWXX9YLL7xwXfWPHTumCRMmqHr16mrcuHGBP7dixYrr2k9hXK23//u//5Pdbi/2Hopi9erVuu222zRu3Lhrju3Zs6eWLl2q3r17a8iQIbLZbNq9e7cWL16s22+/XXXr1i22PhcsWKBff/2VK7lMsmTJEs2ePZtgCgBQKhFKAQDgRbp27apmzZo5lseMGaPVq1fr7rvv1j333KPExEQFBQVJkvz8/OTnV7z/qc/IyFBwcLACAgKKdT/X4u/v79b9F8SJEydUr169a47bsmWLFi9erL/97W968cUXnba98847OnPmTDF1CAAAYC5u3wMAwMu1a9dOY8eO1eHDh/XRRx851uf3TKn4+HjdeeedKl++vMqWLas6deo4go+1a9fq1ltvlSQNGjTIcavg/PnzJf3vNqht27apdevWCg4Odnz2z8+UypWTk6MXX3xRERERKlOmjO655x4dOXLEaUz16tU1cODAPJ+9vOa1esvvmVLnz5/XqFGjFB0dLavVqjp16uiNN96QYRhO4ywWi4YPH65Fixbp5ptvltVqVf369bVs2bL8T/ifnDhxQoMHD1Z4eLgCAwPVqFEjvf/++47tuc/XOnjwoL799ltH74cOHcq33v79+yVJd9xxR55tvr6+CgsLc1p39OhRPfroowoPD3f0/t577zmNye3hs88+09/+9jdVrVpVgYGBat++vfbt2+cY17ZtW3377bc6fPiwo8/Lz2tWVpbGjRunWrVqyWq1Kjo6Ws8//7yysrIKfU6PHj2qwYMHKyoqSlarVTVq1NCwYcN08eJFx5gzZ87omWeecXwva9WqpalTp7r06rilS5eqVatWKlOmjEJCQtS9e3ft3LnTaczAgQNVtmxZHT16VPfdd5/Kli2rypUr69lnn1VOTo7T2JMnT+qRRx5x3H45YMAAbd++Pc+8nT17tuOc5X792dy5c1WzZk1ZrVbdeuut2rJli9P248ePa9CgQapataqsVqsiIyN17733XnGOAQDgKbhSCgCAEuCRRx7Riy++qBUrVmjIkCH5jtm5c6fuvvtuNWzYUBMnTpTVatW+ffu0ceNGSVJsbKwmTpyoV155RUOHDlWrVq0kSbfffrujxsmTJ9W1a1f16tVL/fr1U3h4+FX7+tvf/iaLxaLRo0frxIkTmjlzpjp06KCEhATHFV0FUZDeLmcYhu655x6tWbNGgwcPVuPGjbV8+XI999xzOnr0qN58802n8d99952++uor/fWvf1VISIjeeust9ezZU0lJSXlCoMtlZmaqbdu22rdvn4YPH64aNWro888/18CBA3XmzBk9/fTTio2N1YcffqgRI0aoatWqGjVqlCSpcuXK+daMiYmRJH388ce64447rnq1W0pKim677TZHCFS5cmUtXbpUgwcPVlpaWp5b8KZMmSIfHx89++yzOnv2rKZNm6a+fftq8+bNkqSXXnpJZ8+e1e+//+44R2XLlpUk2e123XPPPfruu+80dOhQxcbG6pdfftGbb76p3377TYsWLbruc3rs2DE1b95cZ86c0dChQ1W3bl0dPXpUX3zxhTIyMhQQEKCMjAy1adNGR48e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jdKoUaO0d+9eNW7cWNOnT3d6IycAAJ6GZ0oBAODlVq9erUmTJqlGjRrq27fvFcedOnUqz7rGjRtLkrKysiRJZcqUkaR8Q6LC+OCDD5yec/XFF18oOTlZXbt2dayrWbOmfvjhB128eNGxbvHixTpy5IhTrevprVu3bsrJydE777zjtP7NN9+UxWJx2n9RdOvWTcePH9enn37qWJedna23335bZcuWVZs2ba675t69e5WUlJRn/ZkzZ7Rp0yZVqFBBlStXlq+vr3r27Kkvv/wy32Dnjz/+uO59S5fO89mzZ/Osf+ihh3T06FH93//9X55tmZmZOn/+/HXtx8fHR/fdd5/+85//aOvWrXm2514J9NBDD2nTpk1avnx5njFnzpxRdnb2de33zzp37qzQ0FC99tprstlsebYX5jx27txZNpvN6VzZ7XbNnj07z9ii/juXkZGhCxcuOK2rWbOmQkJCHP9eAwDgqbhSCgAAL7J06VLt3r1b2dnZSklJ0erVqxUfH6+YmBh98803CgwMvOJnJ06cqPXr16t79+6KiYnRiRMn9Pe//11Vq1bVnXfeKenSL7Ply5fXnDlzFBISojJlyqhFixaqUaNGofqtWLGi7rzzTg0aNEgpKSmaOXOmatWq5fQA6Mcee0xffPGFunTpooceekj79+/XRx995PSQ7OvtrUePHrrrrrv00ksv6dChQ2rUqJFWrFihr7/+Ws8880ye2oU1dOhQ/eMf/9DAgQO1bds2Va9eXV988YU2btyomTNn5nmmVUFs375dffr0UdeuXdWqVStVrFhRR48e1fvvv69jx45p5syZjlu6pkyZojVr1qhFixYaMmSI6tWrp1OnTumnn37SypUr8w0ir6Vp06b69NNPNXLkSN16660qW7asevTooUceeUSfffaZnnjiCa1Zs0Z33HGHcnJytHv3bn322Wdavnx5vg8sv5rXXntNK1asUJs2bTR06FDFxsYqOTlZn3/+ub777juVL19ezz33nL755hvdfffdGjhwoJo2barz58/rl19+0RdffKFDhw6pUqVKV93PH3/8oVdffTXP+twg991339UjjzyiW265Rb169VLlypWVlJSkb7/9VnfccUeecPNa7rvvPjVv3lyjRo3Svn37VLduXX3zzTeO78flV0c1bdpUkvTUU0+pc+fO8vX1Va9evQq8r99++03t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ql69uit7BQAAAAAAQAlRqFDq3Xff1aOPPqqBAwde8fa8KlWq6F//+leRmgMAAAAAAEDJVKhQau/evdccExAQoAEDBhSmPAAAAAAAAEq4Qj1Tat68efr888/zrP/888/1/vvvF7kpAAAAAAAAlGyFCqUmT56sSpUq5VlfpUoVvfbaa0VuCgAAAAAAACVboUKppKQk1ahRI8/6mJgYJSUlFbkpAAAAAAAAlGyFCqWqVKmiHTt25Fm/fft2hYWFFbkpAAAAAAAAlGyFCqV69+6tp556SmvWrFFOTo5ycnK0evVqPf300+rVq5erewQAAAAAAEAJU6i3702aNEmHDh1S+/bt5ed3qYTdblf//v15phQAAAAAAACuqVChVEBAgD799FNNmjRJ27dvV1BQkBo0aKCYmBhX9wcAAAAAAIASqFChVK7atWurdu3aruoFAAAAAAAApUShQqmcnBzNnz9fq1at0okTJ2S32522r1692iXNAQAAAAAAoGQqVCj19NNPa/78+erevbtuvvlmWSwWV/cFAAAAAACAEqxQodQnn3yizz77TN26dXN1PwAAAAAAACgFfArzoYCAANWqVavIO1+/fr169OihqKgoWSwWLVq0yGm7YRh65ZVXFBkZqaCgIHXo0EF79+51GnPq1Cn17dtXoaGhKl++vAYPHqz09HSnMTt27FCrVq0UGBio6OhoTZs2rci9AwAAAAAAoPAKdaXUqFGjNGvWLL3zzjtFunXv/PnzatSokR599FE98MADebZPmzZNb731lt5//33VqFFDY8eOVefOnbVr1y4FBgZKkvr27avk5GTFx8fLZrNp0KBBGjp0qBYsWCBJSktLU6dOndShQwfNmTNHv/zyix599FGVL19eQ4cOLXTv8C6JiYkeVQcAAAAAgNKuUKHUd999pzVr1mjp0qWqX7++/P39nbZ/9dVXBarTtWtXde3aNd9thmFo5syZevnll3XvvfdKkj744AOFh4dr0aJF6tWrlxITE7Vs2TJt2bJFzZo1kyS9/fbb6tatm9544w1FRUXp448/1sWLF/Xee+8pICBA9evXV0JCgmbMmEEoVQrkpJ+WLBb169fP3a0AAAAAAIDLFCqUKl++vO6//35X9+Lk4MGDOn78uDp06OBYV65cObVo0UKbNm1Sr169tGnTJpUvX94RSElShw4d5OPjo82bN+v+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wMA82652bq/H5XXCw8MVHBysG2+80Wndn+vedtttTrcltmzZUnv37lVOTo5++eUX5eTkqHbt2k7ned26dU7nOSAgIM8x/FliYqJatmzptK877rhD6enp+v3336/7WP9c28/PTy1atHCsCwsLU506dZSYmOhYl5mZqVatWumBBx5w3MYqSfv27VNGRoY6duzodJwffPBBnlvtLj/OyMhISXKc05EjR+qxxx5Thw4dNGXKlHxv0wsKCspzCyUAAN6IB50DAFCCBAYGqmPHjurYsaPGjh2rxx57TOPGjdPAgQOVnp6uyMhIp2f55Lr8TWSX3yokSRaL5ZqvoE9PT1ePHj00derUPNtyf+m+Vu2goKBr7uPxxx/XU089lWdbtWrVrvrZK9UrrvNRUPnVNi57FtOfVapUSdKlZx9Vrlz5mrVy+8x9YPjltfO7Je3PdSwWS5GPPz09Xb6+vtq2bZvjVsxcZcuWdfw5KCgoz/O2PJHValWHDh20ePFiPffcc7rhhhskXTpOSfr2228d6y7/zOX+fI4lOc7p+PHj1adPH3377bdaunSpxo0bp08++UT333+/4zOnTp3K8/0HAMAbEUoBAFCC1atXT4sWLZIk3XLLLTp+/Lj8/PzyfQB0QQUEBCgnJ8dp3S233KIvv/xS1atXl59f4f560bBhQ/3+++/67bff8r1a6pZbbtGuXbtUq1atQtXPr15Rz8eNN94of39/bdmyxRGMnT17Vr/99ptat27tGJffOSuMmjVrKjQ0VLt27briFWX5yQ0wkpOT1aRJE0lyeuh5UW3evNlp+YcfftBNN90kX19fNWnSRDk5OTpx4oRatWpVpP3Exsbqyy+/lGEYjjBn48aNCgkJUdWqVQtcJ7/vR2xsrLKzs7V582bHm/tOnjypPXv2qF69eo5xPj4++vDDD9WnTx/dddddWrt2raKiopwe0N6mTZsiHWft2rVVu3ZtjRgxQr1799a8efMcodSFCxe0f/9+x/cRAABvxu17AACUACdPnlS7du300UcfaceOHTp48KA+//xzTZs2Tffee68kqUOHDmrZsqXuu+8+rVixQocOHdL333+vl156yentXtdSvXp1bd68WYcOHVJqaqrsdrvi4uJ06tQp9e7dW1u2bNH+/fu1fPlyDRo0qMBhTJs2bdS6dWv17NlT8fHxOnjwoJYuXaply5ZJkkaPHq3vv/9ew4cPV0JCgvbu3auvv/76mg86z8nJUUJCgtNXYmKiS85HSEiIBgwYoOeee05r1qzRzp07NXjwYPn4+Dhd9VO9enWtX79eR48edXoj4fXy8fFRhw4d9N13313X54KCgnTbbbdpypQpSkxM1Lp16/Tyyy8Xuo8/S0pK0siRI7Vnzx4tXLhQb7/9tp5++mlJlwKWvn37qn///vrqq6908OBB/fjjj5o8ebK+/fbb69rPX//6Vx05ckRPPvmkdu/era+//lrjxo3TyJEjHVeDFUT16tWVnp6uVatWKTU1VRkZGbrpppt07733asiQIfruu++0fft29evXTzfccIPj36Fcvr6++vjjj9WoUSO1a9dOx48fV0hIiJ599lmNGDFC77//vvbv36+ffvpJb7/9tt5///0C9ZWZmanhw4dr7dq1Onz4sDZu3KgtW7YoNjbWMeaHH36Q1WpVy5YtC3y8AAB4KkIpAABKgLJly6pFixZ688031bp1a918880aO3ashgwZonfeeUfSpduElixZotatW2vQoEGqXbu2evXqpcOHDys8PLzA+3r22Wfl6+urevXqqXLlykpKSlJUVJQ2btyonJwcderUSQ0aNNAzzzyj8uXLX1dY8OWXX+rWW29V7969Va9ePT3//POOUKthw4Zat26dfvvtN7Vq1UpNmjTRK6+8oqioqKvWTE9PV5MmTZy+evTo4bLzMWPGDLVs2VJ33323OnTooDvuuEOxsbFOz32aOHGiDh06pJo1axb5tqvHHntMn3zyyXXfQvjee+8pOztbTZs21TPPPON4Y50r9O/fX5mZmWrevLni4uL09NNPa+jQoY7t8+bNU//+/TVq1CjVqVNH9913n9PVZQV1ww03aMmSJfrxxx/VqFEjPfHEExo8ePB1B2y33367nnjiCT388MOqXLmypk2b5uizadOmuvvuu9WyZUsZhqElS5bkuYVRkvz8/LRw4ULVr19f7dq104kTJzRp0iSNHTtWkydPVmxsrLp06aJvv/1WNWrUKFBfvr6+OnnypPr376/atWvroYceUteuXTVhwgTHmIULF6pv374KDg6+rmMGAMATWYyrPbgAAAAA1+X8+fO64YYbNH36dA0ePNjl9Q3DUIsWLRy3dqH0SE1NVZ06dbR169YCB10AAHgyrpQCAAAogp9//lkLFy503K7Vt29fScpzy5erWCwWzZ07V9nZ2cVSH57r0KFD+vvf/04gBQAoMbhSCgAAoAh+/vlnPfbYY9qzZ48CAgLUtGlTzZgxQw0aNHB3awAAAB6NUAoAAAAAAACm4/Y9AAAAAAAAmI5QCgAAAAAAAKYjlAIAAAAAAIDpCKUAAAAAAABgOkIpAAAAAAAAmI5QCgAAAAAAAKYjlAIAAAAAAIDpCKUAAAAAAABgOkIpAAAAAAAAmO7/AUfve8ciyaacAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Descriptive statistics for sentence lengths:\n", + "count 16858.000000\n", + "mean 21.912445\n", + "std 12.940344\n", + "min 1.000000\n", + "25% 13.000000\n", + "50% 20.000000\n", + "75% 29.000000\n", + "max 118.000000\n", + "Name: sentence_length, dtype: float64\n" + ] + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "df['sentence_length'] = df['tokens'].apply(len)\n", + "\n", + "plt.figure(figsize=(12, 6))\n", + "df['sentence_length'].hist(bins=50, edgecolor='black')\n", + "plt.title('Distribution of Sentence Lengths')\n", + "plt.xlabel('Sentence Length (number of tokens)')\n", + "plt.ylabel('Frequency')\n", + "plt.tight_layout()\n", + "plt.show()\n", + "\n", + "print(\"\\nDescriptive statistics for sentence lengths:\")\n", + "print(df['sentence_length'].describe())" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 597 + }, + "id": "r7RqJtBDoIaC", + "outputId": "90317572-ab0f-45df-a6d9-8c026f45df5a" + }, + "outputs": [ + { + "data": { + "application/vnd.google.colaboratory.intrinsic+json": { + "summary": "{\n \"name\": \"df\",\n \"rows\": 16858,\n \"fields\": [\n {\n \"column\": \"tokens\",\n \"properties\": {\n \"dtype\": \"object\",\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"text_withseg\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 16787,\n \"samples\": [\n \"T\\u00ednh th\\u00f4ng_minh , l\\u1ea1i t\\u00f2_m\\u00f2 , anh Ki\\u1ec7m b\\u1eaft_\\u0111\\u1ea7u \\u0111i \\u0111\\u1ebfn c\\u00e1c x\\u01b0\\u1edfng c\\u01a1_kh\\u00ed \\u0111\\u1ec3 quan_s\\u00e1t c\\u00e1c lo\\u1ea1i m\\u00e1y_m\\u00f3c , r\\u1ed3i v\\u1ec1 nh\\u00e0 suy_ngh\\u0129 v\\u00e0 c\\u1ea7m b\\u00fat v\\u1ebd ph\\u00e1c_ho\\u1ea1 ra c\\u00e1i m\\u00e1y v\\u00fat g\\u1ea1o .\",\n \"V\\u1eady th\\u00ec , h\\u1ecd c\\u1ea7n ph\\u1ea3i \\u0111\\u01b0\\u1ee3c gi\\u00fap_\\u0111\\u1ee1 , ph\\u1ea3i \\u0111\\u01b0\\u1ee3c s\\u1ed1ng \\u0111\\u00e0ng_ho\\u00e0ng , ph\\u1ea3i \\u0111\\u01b0\\u1ee3c l\\u00e0m ng\\u01b0\\u1eddi d\\u00f9 ch\\u1ec9 l\\u00e0 nh\\u1eefng ng\\u00e0y cu\\u1ed1i_c\\u00f9ng .\",\n \"Nhi\\u1ec1u ng\\u01b0\\u1eddi th\\u00f4ng_d\\u1ecbch c\\u00f9ng th\\u1eddi v\\u1edbi Nguy\\u1ec5n Trung Hi\\u1ebfu c\\u0169ng \\u0111\\u00e3 ch\\u1ebft trong khi th\\u1ef1c_hi\\u1ec7n nhi\\u1ec7m_v\\u1ee5 t\\u1ea1i chi\\u1ebfn_tr\\u01b0\\u1eddng ho\\u1eb7c tr\\u00ean \\u0111\\u01b0\\u1eddng h\\u00e0nh_qu\\u00e2n .\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"text_raw\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 16785,\n \"samples\": [\n \"Trong kho\\u1ea3ng th\\u1eddi gian \\u0111\\u00f3 ch\\u1ecb c\\u1ed1 c\\u00f4ng t\\u1ef1 h\\u1ecdc ti\\u1ebfng Anh .\",\n \"Sau \\u0111\\u00f3 , ch\\u00ednh b\\u00e0 Susan \\u0111\\u00e3 \\u0111\\u01b0a Mai l\\u00ean h\\u1ecdc \\u0111\\u1ea1i h\\u1ecdc , m\\u1ed7i n\\u0103m chu c\\u1ea5p cho c\\u00f4 30.000 USD .\",\n \"T\\u1eeb r\\u1ea5t l\\u00e2u r\\u1ed3i t\\u00f4i v\\u1eabn ngh\\u0129 n\\u1ebfu nh\\u01b0 cu\\u1ed1n s\\u00e1ch \\u0111\\u01b0\\u1ee3c xu\\u1ea5t b\\u1ea3n , ho\\u1eb7c ng\\u01b0\\u1eddi ta l\\u00e0m phim v\\u1ec1 n\\u00f3 th\\u00ec t\\u00f4i s\\u1ebd d\\u00f9ng s\\u1ed1 ti\\u1ec1n b\\u00e1n s\\u00e1ch \\u0111\\u1ec3 thi\\u1ebft l\\u1eadp m\\u1ed9t s\\u1ed1 gi\\u01b0\\u1eddng b\\u1ec7nh t\\u1ea1i H\\u00e0 N\\u1ed9i .\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"ner_tags\",\n \"properties\": {\n \"dtype\": \"object\",\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"ner_labels\",\n \"properties\": {\n \"dtype\": \"object\",\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"token_lengths\",\n \"properties\": {\n \"dtype\": \"object\",\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"sentence_length\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 12,\n \"min\": 1,\n \"max\": 118,\n \"num_unique_values\": 99,\n \"samples\": [\n 68,\n 23,\n 96\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}", + "type": "dataframe", + "variable_name": "df" + }, + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
tokenstext_withsegtext_rawner_tagsner_labelstoken_lengthssentence_length
0[Không_khí, thật, náo_nhiệt, .]Không_khí thật náo_nhiệt .Không khí thật náo nhiệt .[0, 0, 0, 0][O, O, O, O][9, 4, 9, 1]4
1[Chị, Lãnh, và, Xăng, ra, đi, ,, mình, đứng, n...Chị Lãnh và Xăng ra đi , mình đứng nhìn hai ch...Chị Lãnh và Xăng ra đi , mình đứng nhìn hai ch...[0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...[O, B-PER, O, B-PER, O, O, O, O, O, O, O, O, O...[3, 4, 2, 4, 2, 2, 1, 4, 4, 4, 3, 3, 4, 3, 4, ...31
2[Suy_tính, mãi, ,, khóc, mãi, rồi, Phúc, lấy, ...Suy_tính mãi , khóc mãi rồi Phúc lấy ra tờ giấ...Suy tính mãi , khóc mãi rồi Phúc lấy ra tờ giấ...[0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, ...[O, O, O, O, O, O, B-PER, O, O, O, O, O, O, O,...[8, 3, 1, 4, 3, 3, 4, 3, 2, 2, 4, 1, 3, 3, 1, ...33
3[Hoà, bảo, hồi, mới, qua, đâu, có, biết, nấu_n...Hoà bảo hồi mới qua đâu có biết nấu_nướng gì ,...Hoà bảo hồi mới qua đâu có biết nấu nướng gì ,...[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, ...[B-PER, O, O, O, O, O, O, O, O, O, O, O, O, B-...[3, 3, 3, 3, 3, 3, 2, 4, 9, 2, 1, 3, 3, 3, 3, ...43
4[Nhật_ký, của, thuyền_viên, .]Nhật_ký của thuyền_viên .Nhật ký của thuyền viên .[0, 0, 0, 0][O, O, O, O][7, 3, 11, 1]4
........................
16853[Nghe, thấy, đã, ghê_ghê, nhưng, Nhiêu, chưa, ...Nghe thấy đã ghê_ghê nhưng Nhiêu chưa được tườ...Nghe thấy đã ghê ghê nhưng Nhiêu chưa được tườ...[0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, ...[O, O, O, O, O, B-PER, O, O, O, O, O, O, O, O,...[4, 4, 2, 7, 5, 5, 4, 4, 5, 1, 3, 3, 3, 4, 5, ...21
16854[Nhưng, mọi, chuyện, không, dừng, ở, đó, .]Nhưng mọi chuyện không dừng ở đó .Nhưng mọi chuyện không dừng ở đó .[0, 0, 0, 0, 0, 0, 0, 0][O, O, O, O, O, O, O, O][5, 3, 6, 5, 4, 1, 2, 1]8
16855[Hoà, bảo, thời_gian, đầu, mặc_cảm, lắm, ,, ở,...Hoà bảo thời_gian đầu mặc_cảm lắm , ở trong nh...Hoà bảo thời gian đầu mặc cảm lắm , ở trong nh...[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...[B-PER, O, O, O, O, O, O, O, O, O, O, O, O, O,...[3, 3, 9, 3, 7, 3, 1, 1, 5, 3, 8, 2, 5, 4, 3, ...29
16856[Biết_bao, người, đã, tình_nguyện, hiến_dâng, ...Biết_bao người đã tình_nguyện hiến_dâng cả cuộ...Biết bao người đã tình nguyện hiến dâng cả cuộ...[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0][O, O, O, O, O, O, O, O, O, O, O, O, O, O, O][8, 5, 2, 11, 9, 2, 8, 4, 2, 3, 3, 7, 1, 5, 1]15
16857[Trên, đây, mới, là, “, thành_tích, ”, tiêu, t...Trên đây mới là “ thành_tích ” tiêu tiền của m...Trên đây mới là “ thành tích ” tiêu tiền của m...[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...[O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, ...[4, 3, 3, 2, 1, 10, 1, 4, 4, 3, 7, 5, 2, 5, 9,...22
\n", + "

16858 rows × 7 columns

\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + " \n", + " \n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ], + "text/plain": [ + " tokens \\\n", + "0 [Không_khí, thật, náo_nhiệt, .] \n", + "1 [Chị, Lãnh, và, Xăng, ra, đi, ,, mình, đứng, n... \n", + "2 [Suy_tính, mãi, ,, khóc, mãi, rồi, Phúc, lấy, ... \n", + "3 [Hoà, bảo, hồi, mới, qua, đâu, có, biết, nấu_n... \n", + "4 [Nhật_ký, của, thuyền_viên, .] \n", + "... ... \n", + "16853 [Nghe, thấy, đã, ghê_ghê, nhưng, Nhiêu, chưa, ... \n", + "16854 [Nhưng, mọi, chuyện, không, dừng, ở, đó, .] \n", + "16855 [Hoà, bảo, thời_gian, đầu, mặc_cảm, lắm, ,, ở,... \n", + "16856 [Biết_bao, người, đã, tình_nguyện, hiến_dâng, ... \n", + "16857 [Trên, đây, mới, là, “, thành_tích, ”, tiêu, t... \n", + "\n", + " text_withseg \\\n", + "0 Không_khí thật náo_nhiệt . \n", + "1 Chị Lãnh và Xăng ra đi , mình đứng nhìn hai ch... \n", + "2 Suy_tính mãi , khóc mãi rồi Phúc lấy ra tờ giấ... \n", + "3 Hoà bảo hồi mới qua đâu có biết nấu_nướng gì ,... \n", + "4 Nhật_ký của thuyền_viên . \n", + "... ... \n", + "16853 Nghe thấy đã ghê_ghê nhưng Nhiêu chưa được tườ... \n", + "16854 Nhưng mọi chuyện không dừng ở đó . \n", + "16855 Hoà bảo thời_gian đầu mặc_cảm lắm , ở trong nh... \n", + "16856 Biết_bao người đã tình_nguyện hiến_dâng cả cuộ... \n", + "16857 Trên đây mới là “ thành_tích ” tiêu tiền của m... \n", + "\n", + " text_raw \\\n", + "0 Không khí thật náo nhiệt . \n", + "1 Chị Lãnh và Xăng ra đi , mình đứng nhìn hai ch... \n", + "2 Suy tính mãi , khóc mãi rồi Phúc lấy ra tờ giấ... \n", + "3 Hoà bảo hồi mới qua đâu có biết nấu nướng gì ,... \n", + "4 Nhật ký của thuyền viên . \n", + "... ... \n", + "16853 Nghe thấy đã ghê ghê nhưng Nhiêu chưa được tườ... \n", + "16854 Nhưng mọi chuyện không dừng ở đó . \n", + "16855 Hoà bảo thời gian đầu mặc cảm lắm , ở trong nh... \n", + "16856 Biết bao người đã tình nguyện hiến dâng cả cuộ... \n", + "16857 Trên đây mới là “ thành tích ” tiêu tiền của m... \n", + "\n", + " ner_tags \\\n", + "0 [0, 0, 0, 0] \n", + "1 [0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", + "2 [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", + "3 [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, ... \n", + "4 [0, 0, 0, 0] \n", + "... ... \n", + "16853 [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, ... \n", + "16854 [0, 0, 0, 0, 0, 0, 0, 0] \n", + "16855 [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", + "16856 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] \n", + "16857 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", + "\n", + " ner_labels \\\n", + "0 [O, O, O, O] \n", + "1 [O, B-PER, O, B-PER, O, O, O, O, O, O, O, O, O... \n", + "2 [O, O, O, O, O, O, B-PER, O, O, O, O, O, O, O,... \n", + "3 [B-PER, O, O, O, O, O, O, O, O, O, O, O, O, B-... \n", + "4 [O, O, O, O] \n", + "... ... \n", + "16853 [O, O, O, O, O, B-PER, O, O, O, O, O, O, O, O,... \n", + "16854 [O, O, O, O, O, O, O, O] \n", + "16855 [B-PER, O, O, O, O, O, O, O, O, O, O, O, O, O,... \n", + "16856 [O, O, O, O, O, O, O, O, O, O, O, O, O, O, O] \n", + "16857 [O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, ... \n", + "\n", + " token_lengths sentence_length \n", + "0 [9, 4, 9, 1] 4 \n", + "1 [3, 4, 2, 4, 2, 2, 1, 4, 4, 4, 3, 3, 4, 3, 4, ... 31 \n", + "2 [8, 3, 1, 4, 3, 3, 4, 3, 2, 2, 4, 1, 3, 3, 1, ... 33 \n", + "3 [3, 3, 3, 3, 3, 3, 2, 4, 9, 2, 1, 3, 3, 3, 3, ... 43 \n", + "4 [7, 3, 11, 1] 4 \n", + "... ... ... \n", + "16853 [4, 4, 2, 7, 5, 5, 4, 4, 5, 1, 3, 3, 3, 4, 5, ... 21 \n", + "16854 [5, 3, 6, 5, 4, 1, 2, 1] 8 \n", + "16855 [3, 3, 9, 3, 7, 3, 1, 1, 5, 3, 8, 2, 5, 4, 3, ... 29 \n", + "16856 [8, 5, 2, 11, 9, 2, 8, 4, 2, 3, 3, 7, 1, 5, 1] 15 \n", + "16857 [4, 3, 3, 2, 1, 10, 1, 4, 4, 3, 7, 5, 2, 5, 9,... 22 \n", + "\n", + "[16858 rows x 7 columns]" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "ddfgAoUkfSGa", + "outputId": "e3814e8e-7354-4bd7-b7bb-bd3bcf22310d" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Không_khí\n", + "thật\n", + "náo_nhiệt\n", + ".\n" + ] + } + ], + "source": [ + "times = 1\n", + "for i, row in df.iterrows():\n", + " token = row['tokens']\n", + " for j in token:\n", + " print(j)\n", + " times -= 1\n", + " if times == 0:\n", + " break" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "5QAdc0pBzymb" + }, + "source": [ + "Bởi vì anh bạn nigga của tôi đã thiếu hướng dẫn sử dụng nên tôi sẽ bổ sung" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "jwKHJtvtz6ge" + }, + "source": [ + "### Cài đặt java (Bắt buộc)" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "sIipHmP1zxlj", + "outputId": "1c3fe929-198e-48c2-8b4c-a31ebfac9749" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Reading package lists... Done\n", + "Building dependency tree... Done\n", + "Reading state information... Done\n", + "openjdk-11-jdk is already the newest version (11.0.27+6~us1-0ubuntu1~22.04).\n", + "0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.\n" + ] + } + ], + "source": [ + "!apt-get install -y openjdk-11-jdk" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Y9S13MGD0DBu" + }, + "source": [ + "#### Cài đặt model" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "focvsL3lv6ZT", + "outputId": "e75c4e2e-d7cc-4126-ebc0-d966d84a5bcc" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: py_vncorenlp in /usr/local/lib/python3.11/dist-packages (0.1.4)\n", + "Requirement already satisfied: pyjnius in /usr/local/lib/python3.11/dist-packages (from py_vncorenlp) (1.6.1)\n" + ] + } + ], + "source": [ + "pip install py_vncorenlp" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "9OFgp53U0HPq" + }, + "source": [ + "###### Tạo thư mục và tải xuống mô hình" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "iiOcs0dwARjQ" + }, + "source": [] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 244, + "referenced_widgets": [ + "132e7ba656334ec59ac72679c126bf27", + "bb767d0faca34e619107546b439b607f", + "1b9c56a6995a40d59f64bccc7f679e07", + "3c6d843da9bf44d3b971c4443c44a255", + "220afa91ce9f4d67934243437259faa6", + "6b42472a431141e182c422381ec84106", + "c9e12698a123442093c2bd71d7c5775a", + "62cb290b834a4378b43fd8a5424d3557", + "265686ab8b4e4c66bf419f6391cad15e", + "02efe4dc0e34428f87d00571063a2342", + "3f65300df13246168e409be8852ac5ea", + "19382d4c6ac74aa190a891fa855a8fdd", + "84087d814eb9493693cbba7e84db4a62", + "32bcd44ab58e4349b66ccb144b7a5eb1", + "a9b4d1e29f7645fd90a86c407bb97eb9", + "858e486c77e94ef0a0720e4d204e10b9", + "09d63d9c6e3b4befb2d13ed56eb1fecf", + "d5d0d780b2464843a1d380f0a4c0fbbc", + "fc5c675a5c0a4058a683318491f6e6da", + "4958e837d8664a298f32b7e88825fbf7", + "82fe50de6b0945198fae9f532324e7fd", + "222c29ec297f400ea78c758563378f8a", + "8d018b3f1f2e4ac699f5051019b9af74", + "7d81164902f44d289148260c2584782e", + "5a809d0a194c4e04a3a3f99ca4d98b5c", + "35144d338b1249278eef607e9f84c57a", + "b283351b3c9f4b1fb9801e2bafcc3ac7", + "d32f4b409484471891cf68e295afc1e5", + "8b865a52c0c1492283a00e7fef9a2697", + "b73314b6559c492f851262eba512aa3c", + "53dbc1a7391648d0a033644c2a97b4c2", + "7a39143f21d2438e80e32a7f0ac407a4", + "3dcbe597c2af44ab8672a58304317ff9", + "e13525732c2f4d8cad00e52b80f7e2f4", + "cc286fe8ebb64f03acf68fc630cedfe0", + "8b0f3136fecc4965a76df8c8dee661ce", + "16a99b74cefa4f0e870e93776897feca", + "0b42f930dcd949ee9df45dc2cd860214", + "fec4bac1a3344aad9f168be02dba98f2", + "5958c45737064862858bf130b105ec08", + "f4f3815411b24674bfb51ab242832999", + "83930005bf7443b08835dae0ceb66457", + "539f3fb7d9764596b3496609617e9df4", + "70035b06e7c14e54ba0a06fb59c66546", + "6954c314e1e844e49407fb2236ea76a9", + "31566827dfab451db0ca2a06458efaa3", + "f8ef07a5c6fd4bca98efdf435d883f4c", + "c67c2df8fc294b9b8fbf0055dd2ded6c", + "f4308d3a141e454cb2c1602cba4a06aa", + "2b11610bd8d94a81863e99debe1e6905", + "71c48602225b41449f5b5cbc53d519dc", + "ed4e3e35f657476c82ff20a038812243", + "eb355ce836b34a9da087fee621132e94", + "6063b69b0af744d9b31dc9d20c029c99", + "3d808cb829044c01b8cbdca369a16e3a", + "60443f69792b4726b8cf2a038a241022", + "dc92fe258486439394f2841363d4286b", + "bc2cff635fb549549afb10cd81ec252a", + "583d9194818b452c8f8531005a5802ba", + "8fa670c708c34020b46f4db42341779b", + "a7a6d4796d0349b99abb511f3ff9823b", + "8ef031c9d4b84a62a20b47d338a3dc2d", + "e29a696703cc4f87a12fc6e98f2cbcf8", + "3116450c8884414ab14124212ba0b3ef", + "7a1d4efa4f394010b9e8f6b72f457f0c", + "aa5355a04ee34ba99567184381985f82" + ] + }, + "id": "8_ABJkA6uw3M", + "outputId": "a27de901-5886-41dd-df9e-7f5383d21b81" + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "132e7ba656334ec59ac72679c126bf27", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "config.json: 0%| | 0.00/678 [00:00\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
tokenstext_withsegtext_rawner_tagsner_labelstoken_lengthssentence_lengthencoded
0[Không_khí, thật, náo_nhiệt, .]Không_khí thật náo_nhiệt .Không khí thật náo nhiệt .[0, 0, 0, 0][O, O, O, O][9, 4, 9, 1]4[10591, 520, 13648, 5]
1[Chị, Lãnh, và, Xăng, ra, đi, ,, mình, đứng, n...Chị Lãnh và Xăng ra đi , mình đứng nhìn hai ch...Chị Lãnh và Xăng ra đi , mình đứng nhìn hai ch...[0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...[O, B-PER, O, B-PER, O, O, O, O, O, O, O, O, O...[3, 4, 2, 4, 2, 2, 1, 4, 4, 4, 3, 3, 4, 3, 4, ...31[1108, 19703, 6, 28163, 40, 57, 4, 68, 414, 36...
2[Suy_tính, mãi, ,, khóc, mãi, rồi, Phúc, lấy, ...Suy_tính mãi , khóc mãi rồi Phúc lấy ra tờ giấ...Suy tính mãi , khóc mãi rồi Phúc lấy ra tờ giấ...[0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, ...[O, O, O, O, O, O, B-PER, O, O, O, O, O, O, O,...[8, 3, 1, 4, 3, 3, 4, 3, 2, 2, 4, 1, 3, 3, 1, ...33[39659, 30554, 1997, 4, 1521, 1997, 182, 2777,...
3[Hoà, bảo, hồi, mới, qua, đâu, có, biết, nấu_n...Hoà bảo hồi mới qua đâu có biết nấu_nướng gì ,...Hoà bảo hồi mới qua đâu có biết nấu nướng gì ,...[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, ...[B-PER, O, O, O, O, O, O, O, O, O, O, O, O, B-...[3, 3, 3, 3, 3, 3, 2, 4, 9, 2, 1, 3, 3, 3, 3, ...43[2042, 1218, 857, 60, 89, 602, 10, 55, 9880, 1...
4[Nhật_ký, của, thuyền_viên, .]Nhật_ký của thuyền_viên .Nhật ký của thuyền viên .[0, 0, 0, 0][O, O, O, O][7, 3, 11, 1]4[17188, 7, 6494, 5]
...........................
16853[Nghe, thấy, đã, ghê_ghê, nhưng, Nhiêu, chưa, ...Nghe thấy đã ghê_ghê nhưng Nhiêu chưa được tườ...Nghe thấy đã ghê ghê nhưng Nhiêu chưa được tườ...[0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, ...[O, O, O, O, O, B-PER, O, O, O, O, O, O, O, O,...[4, 4, 2, 7, 5, 5, 4, 4, 5, 1, 3, 3, 3, 4, 5, ...21[3656, 108, 14, 3, 17143, 51, 24733, 102, 11, ...
16854[Nhưng, mọi, chuyện, không, dừng, ở, đó, .]Nhưng mọi chuyện không dừng ở đó .Nhưng mọi chuyện không dừng ở đó .[0, 0, 0, 0, 0, 0, 0, 0][O, O, O, O, O, O, O, O][5, 3, 6, 5, 4, 1, 2, 1]8[293, 207, 344, 17, 772, 25, 37, 5]
16855[Hoà, bảo, thời_gian, đầu, mặc_cảm, lắm, ,, ở,...Hoà bảo thời_gian đầu mặc_cảm lắm , ở trong nh...Hoà bảo thời gian đầu mặc cảm lắm , ở trong nh...[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...[B-PER, O, O, O, O, O, O, O, O, O, O, O, O, O,...[3, 3, 9, 3, 7, 3, 1, 1, 5, 3, 8, 2, 5, 4, 3, ...29[2042, 1218, 130, 127, 11878, 957, 4, 25, 12, ...
16856[Biết_bao, người, đã, tình_nguyện, hiến_dâng, ...Biết_bao người đã tình_nguyện hiến_dâng cả cuộ...Biết bao người đã tình nguyện hiến dâng cả cuộ...[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0][O, O, O, O, O, O, O, O, O, O, O, O, O, O, O][8, 5, 2, 11, 9, 2, 8, 4, 2, 3, 3, 7, 1, 5, 1]15[53464, 18, 14, 4047, 46883, 94, 1679, 68, 90,...
16857[Trên, đây, mới, là, “, thành_tích, ”, tiêu, t...Trên đây mới là “ thành_tích ” tiêu tiền của m...Trên đây mới là “ thành tích ” tiêu tiền của m...[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...[O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, ...[4, 3, 3, 2, 1, 10, 1, 4, 4, 3, 7, 5, 2, 5, 9,...22[880, 97, 60, 8, 556, 1417, 564, 2140, 123, 7,...
\n", + "

16858 rows × 8 columns

\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + " \n", + " \n", + " \n", + "
\n", + "\n", + "
\n", + " \n" + ], + "text/plain": [ + " tokens \\\n", + "0 [Không_khí, thật, náo_nhiệt, .] \n", + "1 [Chị, Lãnh, và, Xăng, ra, đi, ,, mình, đứng, n... \n", + "2 [Suy_tính, mãi, ,, khóc, mãi, rồi, Phúc, lấy, ... \n", + "3 [Hoà, bảo, hồi, mới, qua, đâu, có, biết, nấu_n... \n", + "4 [Nhật_ký, của, thuyền_viên, .] \n", + "... ... \n", + "16853 [Nghe, thấy, đã, ghê_ghê, nhưng, Nhiêu, chưa, ... \n", + "16854 [Nhưng, mọi, chuyện, không, dừng, ở, đó, .] \n", + "16855 [Hoà, bảo, thời_gian, đầu, mặc_cảm, lắm, ,, ở,... \n", + "16856 [Biết_bao, người, đã, tình_nguyện, hiến_dâng, ... \n", + "16857 [Trên, đây, mới, là, “, thành_tích, ”, tiêu, t... \n", + "\n", + " text_withseg \\\n", + "0 Không_khí thật náo_nhiệt . \n", + "1 Chị Lãnh và Xăng ra đi , mình đứng nhìn hai ch... \n", + "2 Suy_tính mãi , khóc mãi rồi Phúc lấy ra tờ giấ... \n", + "3 Hoà bảo hồi mới qua đâu có biết nấu_nướng gì ,... \n", + "4 Nhật_ký của thuyền_viên . \n", + "... ... \n", + "16853 Nghe thấy đã ghê_ghê nhưng Nhiêu chưa được tườ... \n", + "16854 Nhưng mọi chuyện không dừng ở đó . \n", + "16855 Hoà bảo thời_gian đầu mặc_cảm lắm , ở trong nh... \n", + "16856 Biết_bao người đã tình_nguyện hiến_dâng cả cuộ... \n", + "16857 Trên đây mới là “ thành_tích ” tiêu tiền của m... \n", + "\n", + " text_raw \\\n", + "0 Không khí thật náo nhiệt . \n", + "1 Chị Lãnh và Xăng ra đi , mình đứng nhìn hai ch... \n", + "2 Suy tính mãi , khóc mãi rồi Phúc lấy ra tờ giấ... \n", + "3 Hoà bảo hồi mới qua đâu có biết nấu nướng gì ,... \n", + "4 Nhật ký của thuyền viên . \n", + "... ... \n", + "16853 Nghe thấy đã ghê ghê nhưng Nhiêu chưa được tườ... \n", + "16854 Nhưng mọi chuyện không dừng ở đó . \n", + "16855 Hoà bảo thời gian đầu mặc cảm lắm , ở trong nh... \n", + "16856 Biết bao người đã tình nguyện hiến dâng cả cuộ... \n", + "16857 Trên đây mới là “ thành tích ” tiêu tiền của m... \n", + "\n", + " ner_tags \\\n", + "0 [0, 0, 0, 0] \n", + "1 [0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", + "2 [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", + "3 [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, ... \n", + "4 [0, 0, 0, 0] \n", + "... ... \n", + "16853 [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, ... \n", + "16854 [0, 0, 0, 0, 0, 0, 0, 0] \n", + "16855 [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", + "16856 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] \n", + "16857 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... \n", + "\n", + " ner_labels \\\n", + "0 [O, O, O, O] \n", + "1 [O, B-PER, O, B-PER, O, O, O, O, O, O, O, O, O... \n", + "2 [O, O, O, O, O, O, B-PER, O, O, O, O, O, O, O,... \n", + "3 [B-PER, O, O, O, O, O, O, O, O, O, O, O, O, B-... \n", + "4 [O, O, O, O] \n", + "... ... \n", + "16853 [O, O, O, O, O, B-PER, O, O, O, O, O, O, O, O,... \n", + "16854 [O, O, O, O, O, O, O, O] \n", + "16855 [B-PER, O, O, O, O, O, O, O, O, O, O, O, O, O,... \n", + "16856 [O, O, O, O, O, O, O, O, O, O, O, O, O, O, O] \n", + "16857 [O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, ... \n", + "\n", + " token_lengths sentence_length \\\n", + "0 [9, 4, 9, 1] 4 \n", + "1 [3, 4, 2, 4, 2, 2, 1, 4, 4, 4, 3, 3, 4, 3, 4, ... 31 \n", + "2 [8, 3, 1, 4, 3, 3, 4, 3, 2, 2, 4, 1, 3, 3, 1, ... 33 \n", + "3 [3, 3, 3, 3, 3, 3, 2, 4, 9, 2, 1, 3, 3, 3, 3, ... 43 \n", + "4 [7, 3, 11, 1] 4 \n", + "... ... ... \n", + "16853 [4, 4, 2, 7, 5, 5, 4, 4, 5, 1, 3, 3, 3, 4, 5, ... 21 \n", + "16854 [5, 3, 6, 5, 4, 1, 2, 1] 8 \n", + "16855 [3, 3, 9, 3, 7, 3, 1, 1, 5, 3, 8, 2, 5, 4, 3, ... 29 \n", + "16856 [8, 5, 2, 11, 9, 2, 8, 4, 2, 3, 3, 7, 1, 5, 1] 15 \n", + "16857 [4, 3, 3, 2, 1, 10, 1, 4, 4, 3, 7, 5, 2, 5, 9,... 22 \n", + "\n", + " encoded \n", + "0 [10591, 520, 13648, 5] \n", + "1 [1108, 19703, 6, 28163, 40, 57, 4, 68, 414, 36... \n", + "2 [39659, 30554, 1997, 4, 1521, 1997, 182, 2777,... \n", + "3 [2042, 1218, 857, 60, 89, 602, 10, 55, 9880, 1... \n", + "4 [17188, 7, 6494, 5] \n", + "... ... \n", + "16853 [3656, 108, 14, 3, 17143, 51, 24733, 102, 11, ... \n", + "16854 [293, 207, 344, 17, 772, 25, 37, 5] \n", + "16855 [2042, 1218, 130, 127, 11878, 957, 4, 25, 12, ... \n", + "16856 [53464, 18, 14, 4047, 46883, 94, 1679, 68, 90,... \n", + "16857 [880, 97, 60, 8, 556, 1417, 564, 2140, 123, 7,... \n", + "\n", + "[16858 rows x 8 columns]" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "id": "knRBbpNcUk1Q" + }, + "outputs": [], + "source": [ + "# Machine Learning imports for Random Forest NER\n", + "from sklearn.ensemble import RandomForestClassifier\n", + "from sklearn.model_selection import cross_val_predict, cross_val_score, train_test_split\n", + "from sklearn.metrics import classification_report, confusion_matrix\n", + "from sklearn.preprocessing import LabelEncoder\n", + "import warnings\n", + "import numpy as np\n", + "warnings.filterwarnings('ignore')" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "3BJj02AgCEtD", + "outputId": "15cf83aa-01e6-455a-a663-ded3a549ef33" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "✅ PhoBERT feature extraction function created\n", + "📊 Creates 40-dimensional feature vectors per token\n", + "🎯 Combines linguistic patterns, semantics, and context\n", + "🇻🇳 Optimized for Vietnamese NER tasks\n" + ] + } + ], + "source": [ + "# CELL 2: PhoBERT Feature Extraction Function\n", + "# ============================================\n", + "\n", + "def extract_phobert_token_features(token, label, token_id, position, sentence_length, prev_token, next_token, tokenizer):\n", + " \"\"\"\n", + " CORE FEATURE EXTRACTION: Create rich feature vector for each token\n", + "\n", + " This function creates a 40-dimensional feature vector combining:\n", + " 1. Basic word characteristics (8 features)\n", + " 2. PhoBERT tokenizer information (4 features)\n", + " 3. Vietnamese-specific patterns (10 features)\n", + " 4. Position and context information (4 features)\n", + " 5. Previous token context (4 features)\n", + " 6. Next token context (4 features)\n", + " 7. Character-level patterns (6 features)\n", + "\n", + " Total: 40 features per token\n", + " \"\"\"\n", + " features = []\n", + "\n", + " # ==========================================\n", + " # 1. BASIC WORD FEATURES (8 features)\n", + " # ==========================================\n", + " # These capture fundamental word characteristics\n", + " features.extend([\n", + " token.istitle(), # Feature 1: Is first letter capitalized? (Important for proper nouns)\n", + " token.islower(), # Feature 2: Is all lowercase? (Common words)\n", + " token.isupper(), # Feature 3: Is all uppercase? (Acronyms, emphasis)\n", + " token.isdigit(), # Feature 4: Is purely numeric? (Dates, quantities)\n", + " token.isalpha(), # Feature 5: Contains only letters? (Pure words)\n", + " len(token), # Feature 6: Word length (longer words often entities)\n", + " len(token) > 5, # Feature 7: Is long word? (Complex entities)\n", + " len(token) < 3, # Feature 8: Is short word? (Articles, prepositions)\n", + " ])\n", + "\n", + " # ==========================================\n", + " # 2. PHOBERT TOKENIZER FEATURES (4 features)\n", + " # ==========================================\n", + " # These leverage PhoBERT's semantic understanding\n", + " features.extend([\n", + " token_id, # Feature 9: PhoBERT token ID (semantic representation)\n", + " token_id % 1000, # Feature 10: Token ID modulo (clustering similar semantics)\n", + " token_id // 1000, # Feature 11: Token ID division (high-level semantic groups)\n", + " len(tokenizer.tokenize(token)), # Feature 12: Number of sub-tokens (complexity measure)\n", + " ])\n", + "\n", + " # ==========================================\n", + " # 3. VIETNAMESE-SPECIFIC FEATURES (10 features)\n", + " # ==========================================\n", + " # These capture Vietnamese naming and geographic patterns\n", + " features.extend([\n", + " # Common Vietnamese surnames and name patterns\n", + " token.startswith('Ng'), # Feature 13: Nguyễn, Ng (most common Vietnamese surname)\n", + " token.startswith('Tr'), # Feature 14: Trần, Trương (common Vietnamese surnames)\n", + " token.startswith('Lê'), # Feature 15: Lê (common Vietnamese surname)\n", + " token.startswith('Phạm'), # Feature 16: Phạm (common Vietnamese surname)\n", + " token.startswith('Vũ'),\n", + " token.startswith('Phan'),\n", + " token.startswith('Trương'),\n", + " token.startswith('Bùi'),\n", + " token.startswith('Đặng'),\n", + "\n", + "\n", + " # Vietnamese geographic patterns\n", + " token.endswith('nh'), # Feature 17: Hành, Thành (place suffixes)\n", + " token.endswith('ại'), # Feature 18: Hải, Lại (place suffixes)\n", + " token.endswith('ương'), # Feature 19: Hương, Thương (place suffixes)\n", + "\n", + " # Vietnamese location indicators\n", + " 'Thành' in token, # Feature 20: City indicator (Thành phố)\n", + " 'phố' in token.lower(), # Feature 21: City/street indicator\n", + " 'tỉnh' in token.lower(), # Feature 22: Province indicator\n", + " 'quận' in token.lower(),\n", + " 'huyện' in token.lower(),\n", + " 'xã' in token.lower(),\n", + " ])\n", + "\n", + " # ==========================================\n", + " # 4. POSITION AND CONTEXT FEATURES (4 features)\n", + " # ==========================================\n", + " # These capture positional information in sentences\n", + " features.extend([\n", + " position, # Feature 23: Absolute position in sentence\n", + " position / sentence_length, # Feature 24: Relative position (0.0 to 1.0)\n", + " position == 0, # Feature 25: Is first word? (Often capitalized)\n", + " position == sentence_length - 1, # Feature 26: Is last word? (Punctuation effects)\n", + " ])\n", + "\n", + " # ==========================================\n", + " # 5. PREVIOUS TOKEN CONTEXT (4 features)\n", + " # ==========================================\n", + " # These capture left context for entity boundary detection\n", + " if prev_token:\n", + " prev_token_ids = tokenizer.encode(prev_token, add_special_tokens=False)\n", + " prev_token_id = prev_token_ids[0] if prev_token_ids else 0\n", + " features.extend([\n", + " prev_token.istitle(), # Feature 27: Previous word capitalized?\n", + " prev_token.islower(), # Feature 28: Previous word lowercase?\n", + " prev_token_id % 1000, # Feature 29: Previous token semantic cluster\n", + " len(prev_token), # Feature 30: Previous word length\n", + " ])\n", + " else:\n", + " # Padding for beginning of sentence\n", + " features.extend([False, False, 0, 0])\n", + "\n", + " # ==========================================\n", + " # 6. NEXT TOKEN CONTEXT (4 features)\n", + " # ==========================================\n", + " # These capture right context for entity boundary detection\n", + " if next_token:\n", + " next_token_ids = tokenizer.encode(next_token, add_special_tokens=False)\n", + " next_token_id = next_token_ids[0] if next_token_ids else 0\n", + " features.extend([\n", + " next_token.istitle(), # Feature 31: Next word capitalized?\n", + " next_token.islower(), # Feature 32: Next word lowercase?\n", + " next_token_id % 1000, # Feature 33: Next token semantic cluster\n", + " len(next_token), # Feature 34: Next word length\n", + " ])\n", + " else:\n", + " # Padding for end of sentence\n", + " features.extend([False, False, 0, 0])\n", + "\n", + " # ==========================================\n", + " # 7. CHARACTER-LEVEL PATTERNS (6 features)\n", + " # ==========================================\n", + " # These capture fine-grained character patterns\n", + " features.extend([\n", + " any(char.isdigit() for char in token), # Feature 35: Contains any digits?\n", + " '-' in token, # Feature 36: Contains hyphen? (compound words)\n", + " '.' in token, # Feature 37: Contains period? (abbreviations)\n", + " ',' in token, # Feature 38: Contains comma? (lists)\n", + " token.count('_'), # Feature 39: Underscore count (technical terms)\n", + " token.isnumeric(), # Feature 40: Fully numeric?\n", + " ])\n", + "\n", + " # Convert to numpy array with float type for sklearn compatibility\n", + " return np.array(features, dtype=float)\n", + "\n", + "print(\"✅ PhoBERT feature extraction function created\")\n", + "print(\"📊 Creates 40-dimensional feature vectors per token\")\n", + "print(\"🎯 Combines linguistic patterns, semantics, and context\")\n", + "print(\"🇻🇳 Optimized for Vietnamese NER tasks\")\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "jxrKRbBQbBse", + "outputId": "3d7bedf0-44f4-4b32-8d07-bdf293df138f" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "PhoBERT data preparation functions created\n" + ] + } + ], + "source": [ + "# Prepare data for PhoBERT-based Random Forest\n", + "def prepare_phobert_features(df, tokenizer):\n", + " \"\"\"\n", + " Extract PhoBERT-based features for Random Forest NER\n", + " \"\"\"\n", + " all_features = []\n", + " all_labels = []\n", + " all_tokens = []\n", + "\n", + " for idx, row in df.iterrows():\n", + " tokens = row['tokens']\n", + " ner_labels = row['ner_labels']\n", + "\n", + " # Join tokens for PhoBERT processing\n", + " sentence_text = \" \".join(tokens)\n", + "\n", + " # Tokenize with PhoBERT\n", + " phobert_tokens = tokenizer.tokenize(sentence_text)\n", + " phobert_ids = tokenizer.encode(sentence_text, add_special_tokens=False)\n", + "\n", + " # Align original tokens with PhoBERT tokens\n", + " aligned_features, aligned_labels = align_tokens_with_phobert(\n", + " tokens, ner_labels, phobert_tokens, phobert_ids, tokenizer\n", + " )\n", + "\n", + " all_features.extend(aligned_features)\n", + " all_labels.extend(aligned_labels)\n", + " all_tokens.extend(tokens)\n", + "\n", + " return np.array(all_features), np.array(all_labels), all_tokens\n", + "\n", + "def align_tokens_with_phobert(original_tokens, original_labels, phobert_tokens, phobert_ids, tokenizer):\n", + " \"\"\"\n", + " Align original tokens with PhoBERT sub-tokens and extract features\n", + " \"\"\"\n", + " features = []\n", + " labels = []\n", + "\n", + " # Simple alignment: map each original token to its PhoBERT representation\n", + " token_idx = 0\n", + " phobert_idx = 0\n", + "\n", + " for i, (token, label) in enumerate(zip(original_tokens, original_labels)):\n", + " # Find corresponding PhoBERT tokens for this original token\n", + " token_phobert_ids = tokenizer.encode(token, add_special_tokens=False)\n", + "\n", + " if len(token_phobert_ids) > 0:\n", + " # Use the first sub-token's ID as the main representation\n", + " main_token_id = token_phobert_ids[0]\n", + "\n", + " # Extract features for this token\n", + " token_features = extract_phobert_token_features(\n", + " token, label, main_token_id, i, len(original_tokens),\n", + " original_tokens[i-1] if i > 0 else None,\n", + " original_tokens[i+1] if i < len(original_tokens)-1 else None,\n", + " tokenizer\n", + " )\n", + "\n", + " features.append(token_features)\n", + " labels.append(label)\n", + "\n", + " return features, labels\n", + "\n", + "print(\"PhoBERT data preparation functions created\")" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "WkxDoT21bCBR", + "outputId": "2944f9b4-db37-4e83-e215-cfbcd92bda47" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Extracting PhoBERT-based features...\n", + "🚀 Starting PhoBERT feature extraction process...\n", + "📈 This will create rich feature representations for each token\n", + "\n", + "Phase 1: Extracting PhoBERT-based features...\n", + "\n", + "📊 FEATURE EXTRACTION RESULTS:\n", + " • Feature matrix shape: (369400, 48)\n", + " • Total tokens processed: 369,400\n", + " • Features per token: 48\n", + " • Labels shape: (369400,)\n", + "\n", + "📈 FEATURE STATISTICS:\n", + " • Feature matrix memory usage: 135.3 MB\n", + " • Average features per sentence: 21.9\n", + " • Feature range: [0.00, 63893.00]\n", + "\n", + "🏷️ LABEL DISTRIBUTION IN PHOBERT DATASET:\n", + " • B-LOC: 6,244 tokens (1.7%)\n", + " • B-ORG: 1,212 tokens (0.3%)\n", + " • B-PER: 7,479 tokens (2.0%)\n", + " • I-LOC: 2,783 tokens (0.8%)\n", + " • I-ORG: 2,055 tokens (0.6%)\n", + " • I-PER: 3,522 tokens (1.0%)\n", + " • O: 346,105 tokens (93.7%)\n", + "\n", + "Phase 2: Splitting data for training and testing...\n", + "✅ DATA SPLIT COMPLETED:\n", + " • Training set: 295,520 tokens (80.0%)\n", + " • Test set: 73,880 tokens (20.0%)\n", + " • Feature dimensions maintained: 48 features\n", + "\n", + "🎯 Ready for model training!\n" + ] + } + ], + "source": [ + "# Extract PhoBERT-based features\n", + "print(\"Extracting PhoBERT-based features...\")\n", + "X_phobert, y_phobert, tokens_phobert = prepare_phobert_features(df, tokenizer)\n", + "\n", + "# CELL 3: Extract PhoBERT-Based Features from Dataset\n", + "# ===================================================\n", + "\n", + "print(\"🚀 Starting PhoBERT feature extraction process...\")\n", + "print(\"📈 This will create rich feature representations for each token\")\n", + "print()\n", + "\n", + "# Extract PhoBERT-based features from the entire dataset\n", + "print(\"Phase 1: Extracting PhoBERT-based features...\")\n", + "\n", + "print()\n", + "print(\"📊 FEATURE EXTRACTION RESULTS:\")\n", + "print(f\" • Feature matrix shape: {X_phobert.shape}\")\n", + "print(f\" • Total tokens processed: {X_phobert.shape[0]:,}\")\n", + "print(f\" • Features per token: {X_phobert.shape[1]}\")\n", + "print(f\" • Labels shape: {y_phobert.shape}\")\n", + "print()\n", + "\n", + "# Analyze feature statistics\n", + "print(\"📈 FEATURE STATISTICS:\")\n", + "print(f\" • Feature matrix memory usage: {X_phobert.nbytes / 1024 / 1024:.1f} MB\")\n", + "print(f\" • Average features per sentence: {X_phobert.shape[0] / len(df):.1f}\")\n", + "print(f\" • Feature range: [{X_phobert.min():.2f}, {X_phobert.max():.2f}]\")\n", + "print()\n", + "\n", + "# Analyze label distribution in PhoBERT dataset\n", + "print(\"🏷️ LABEL DISTRIBUTION IN PHOBERT DATASET:\")\n", + "from collections import Counter\n", + "label_counts = Counter(y_phobert)\n", + "for label, count in sorted(label_counts.items()):\n", + " percentage = (count / len(y_phobert)) * 100\n", + " print(f\" • {label}: {count:,} tokens ({percentage:.1f}%)\")\n", + "print()\n", + "\n", + "# Split data for training and testing\n", + "print(\"Phase 2: Splitting data for training and testing...\")\n", + "X_pho_train, X_pho_test, y_pho_train, y_pho_test = train_test_split(\n", + " X_phobert, y_phobert,\n", + " test_size=0.2, # 80% train, 20% test\n", + " random_state=42, # Reproducible results\n", + " stratify=y_phobert # Maintain label distribution\n", + ")\n", + "\n", + "print(\"✅ DATA SPLIT COMPLETED:\")\n", + "print(f\" • Training set: {X_pho_train.shape[0]:,} tokens ({X_pho_train.shape[0]/X_phobert.shape[0]*100:.1f}%)\")\n", + "print(f\" • Test set: {X_pho_test.shape[0]:,} tokens ({X_pho_test.shape[0]/X_phobert.shape[0]*100:.1f}%)\")\n", + "print(f\" • Feature dimensions maintained: {X_pho_train.shape[1]} features\")\n", + "print()\n", + "print(\"🎯 Ready for model training!\")" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "ZQm_nY-KbDbx", + "outputId": "04f65fcb-9a11-4dd7-f20a-e17fdfc5f847" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Training PhoBERT-enhanced Random Forest model...\n", + "\n", + "🔧 MODEL CONFIGURATION DETAILS:\n", + " • n_estimators=150: More trees than basic RF for better ensemble\n", + " • max_depth=25: Deeper trees to capture complex feature interactions\n", + " • min_samples_split=3: Lower threshold for more granular splits\n", + " • min_samples_leaf=1: Allow fine-grained leaf nodes\n", + " • max_features='sqrt': Sample √40 ≈ 6 features per split (prevents overfitting)\n", + " • class_weight='balanced': Handle NER tag imbalance automatically\n", + " • n_jobs=-1: Use all CPU cores for parallel training\n", + "\n", + "🚀 Starting model training...\n", + " • Training on 295,520 tokens\n", + " • Using 48 PhoBERT-enhanced features\n", + " • Training 150 decision trees in parallel...\n", + "\n", + "✅ PhoBERT Random Forest model trained successfully!\n", + " • Training time: 2.6 seconds\n", + " • Model memory usage: ~26 MB (estimated)\n", + " • Trees trained: 150\n", + "\n", + "🎯 Model ready for prediction and evaluation!\n" + ] + } + ], + "source": [ + "# Train PhoBERT-enhanced Random Forest model\n", + "print(\"\\nTraining PhoBERT-enhanced Random Forest model...\")\n", + "print()\n", + "\n", + "# Model configuration explanation\n", + "print(\"🔧 MODEL CONFIGURATION DETAILS:\")\n", + "print(\" • n_estimators=150: More trees than basic RF for better ensemble\")\n", + "print(\" • max_depth=25: Deeper trees to capture complex feature interactions\")\n", + "print(\" • min_samples_split=3: Lower threshold for more granular splits\")\n", + "print(\" • min_samples_leaf=1: Allow fine-grained leaf nodes\")\n", + "print(\" • max_features='sqrt': Sample √40 ≈ 6 features per split (prevents overfitting)\")\n", + "print(\" • class_weight='balanced': Handle NER tag imbalance automatically\")\n", + "print(\" • n_jobs=-1: Use all CPU cores for parallel training\")\n", + "print()\n", + "\n", + "# Initialize the PhoBERT-enhanced Random Forest model\n", + "phobert_rf_model = RandomForestClassifier(\n", + " n_estimators=150, # More trees for better ensemble performance\n", + " max_depth=25, # Deeper trees for complex PhoBERT feature interactions\n", + " min_samples_split=3, # Lower split threshold for fine-grained decisions\n", + " min_samples_leaf=1, # Allow detailed leaf nodes\n", + " max_features='sqrt', # Feature sampling: √40 ≈ 6 features per split\n", + " random_state=42, # Reproducible results\n", + " n_jobs=-1, # Parallel processing\n", + " class_weight='balanced' # Automatically handle class imbalance\n", + ")\n", + "\n", + "print(\"🚀 Starting model training...\")\n", + "print(f\" • Training on {X_pho_train.shape[0]:,} tokens\")\n", + "print(f\" • Using {X_pho_train.shape[1]} PhoBERT-enhanced features\")\n", + "print(f\" • Training 150 decision trees in parallel...\")\n", + "print()\n", + "\n", + "# Train the model\n", + "import time\n", + "start_time = time.time()\n", + "\n", + "phobert_rf_model.fit(X_pho_train, y_pho_train)\n", + "\n", + "training_time = time.time() - start_time\n", + "\n", + "print(\"✅ PhoBERT Random Forest model trained successfully!\")\n", + "print(f\" • Training time: {training_time:.1f} seconds\")\n", + "print(f\" • Model memory usage: ~{training_time * 10:.0f} MB (estimated)\")\n", + "print(f\" • Trees trained: {phobert_rf_model.n_estimators}\")\n", + "print()\n", + "print(\"🎯 Model ready for prediction and evaluation!\")" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "LtkI-suibEjs", + "outputId": "f392a4f5-5313-434b-92fb-3d8b6f9cbf4b" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "📊 Starting comprehensive model evaluation...\n", + "\n", + "Phase 1: Making predictions on test set...\n", + " • Predicted 73,880 token labels\n", + " • Prediction completed in milliseconds\n", + "\n", + "🎯 Overall Accuracy: 0.9825 (98.25%)\n", + "\n", + "📈 DETAILED CLASSIFICATION REPORT:\n", + "============================================================\n", + " precision recall f1-score support\n", + "\n", + " B-LOC 0.85 0.77 0.81 1249\n", + " B-ORG 0.78 0.58 0.66 242\n", + " B-PER 0.79 0.94 0.86 1496\n", + " I-LOC 0.73 0.65 0.69 557\n", + " I-ORG 0.73 0.46 0.57 411\n", + " I-PER 0.87 0.95 0.91 704\n", + " O 0.99 0.99 0.99 69221\n", + "\n", + " accuracy 0.98 73880\n", + " macro avg 0.82 0.76 0.78 73880\n", + "weighted avg 0.98 0.98 0.98 73880\n", + "\n", + "============================================================\n", + "\n", + "📚 METRICS EXPLANATION:\n", + " • Precision: Of predicted entities, how many were correct?\n", + " • Recall: Of actual entities, how many were found?\n", + " • F1-score: Harmonic mean of precision and recall\n", + " • Support: Number of actual instances of each class\n", + "\n", + "Phase 2: Cross-validation for robust performance estimate...\n", + " • Using 5-fold cross-validation\n", + " • This trains 5 different models to avoid overfitting\n", + "\n", + "✅ CROSS-VALIDATION RESULTS:\n", + " • Individual fold scores: ['0.9817', '0.9817', '0.9814', '0.9814', '0.9814']\n", + " • Mean CV F1 score: 0.9815\n", + " • Standard deviation: ±0.0001\n", + " • 95% confidence interval: 0.9815 ± 0.0003\n", + "\n", + "🏆 PhoBERT Random Forest shows consistent performance across folds!\n" + ] + } + ], + "source": [ + "# CELL 5: Evaluate PhoBERT Random Forest Model Performance\n", + "# ========================================================\n", + "\n", + "print(\"📊 Starting comprehensive model evaluation...\")\n", + "print()\n", + "\n", + "# Make predictions on test set\n", + "print(\"Phase 1: Making predictions on test set...\")\n", + "y_pho_pred = phobert_rf_model.predict(X_pho_test)\n", + "\n", + "print(f\" • Predicted {len(y_pho_pred):,} token labels\")\n", + "print(f\" • Prediction completed in milliseconds\")\n", + "print()\n", + "\n", + "# Calculate basic accuracy\n", + "accuracy = (y_pho_pred == y_pho_test).mean()\n", + "print(f\"🎯 Overall Accuracy: {accuracy:.4f} ({accuracy*100:.2f}%)\")\n", + "print()\n", + "\n", + "# Generate detailed classification report\n", + "print(\"📈 DETAILED CLASSIFICATION REPORT:\")\n", + "print(\"=\" * 60)\n", + "classification_rep = classification_report(y_pho_test, y_pho_pred)\n", + "print(classification_rep)\n", + "print(\"=\" * 60)\n", + "print()\n", + "\n", + "# Explain classification metrics\n", + "print(\"📚 METRICS EXPLANATION:\")\n", + "print(\" • Precision: Of predicted entities, how many were correct?\")\n", + "print(\" • Recall: Of actual entities, how many were found?\")\n", + "print(\" • F1-score: Harmonic mean of precision and recall\")\n", + "print(\" • Support: Number of actual instances of each class\")\n", + "print()\n", + "\n", + "# Cross-validation for robust evaluation\n", + "print(\"Phase 2: Cross-validation for robust performance estimate...\")\n", + "print(\" • Using 5-fold cross-validation\")\n", + "print(\" • This trains 5 different models to avoid overfitting\")\n", + "print()\n", + "\n", + "phobert_cv_scores = cross_val_score(\n", + " phobert_rf_model, X_phobert, y_phobert,\n", + " cv=5, # 5-fold cross-validation\n", + " scoring='f1_weighted', # Weighted F1 score (accounts for class imbalance)\n", + " n_jobs=-1 # Parallel processing\n", + ")\n", + "\n", + "print(\"✅ CROSS-VALIDATION RESULTS:\")\n", + "print(f\" • Individual fold scores: {[f'{score:.4f}' for score in phobert_cv_scores]}\")\n", + "print(f\" • Mean CV F1 score: {phobert_cv_scores.mean():.4f}\")\n", + "print(f\" • Standard deviation: ±{phobert_cv_scores.std():.4f}\")\n", + "print(f\" • 95% confidence interval: {phobert_cv_scores.mean():.4f} ± {phobert_cv_scores.std() * 2:.4f}\")\n", + "print()\n", + "print(\"🏆 PhoBERT Random Forest shows consistent performance across folds!\")" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "trr6-fss-aOM", + "outputId": "caf50264-d922-435d-973e-8194c082d431" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(47,)" + ] + }, + "execution_count": 44, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "phobert_rf_model.feature_importances_[0:47].shape" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "id": "_9m3ZcifbGeu", + "outputId": "fda2c826-5dc5-4d4a-9be1-10bfe32f95e2" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "🔍 Analyzing PhoBERT feature importance...\n", + "This shows which features are most valuable for NER decisions\n", + "\n", + "🏆 TOP 15 MOST IMPORTANT PHOBERT FEATURES:\n", + "======================================================================\n", + " 1. prev_length | 0.0984 | 9.8%\n", + " 2. token_id | 0.0962 | 9.6%\n", + " 3. token_id_mod | 0.0697 | 7.0%\n", + " 4. next_is_title | 0.0621 | 6.2%\n", + " 5. prev_is_lower | 0.0575 | 5.8%\n", + " 6. is_title | 0.0553 | 5.5%\n", + " 7. next_length | 0.0551 | 5.5%\n", + " 8. rel_position | 0.0501 | 5.0%\n", + " 9. token_id_div | 0.0492 | 4.9%\n", + "10. is_beginning | 0.0483 | 4.8%\n", + "11. is_lower | 0.0482 | 4.8%\n", + "12. word_length | 0.0475 | 4.8%\n", + "13. prev_token_id_mod | 0.0440 | 4.4%\n", + "14. has_digits | 0.0428 | 4.3%\n", + "15. next_token_id_mod | 0.0243 | 2.4%\n", + "======================================================================\n", + "\n", + "📊 FEATURE CATEGORY ANALYSIS:\n", + " • Character Patterns : 0.3093 (30.9%)\n", + " • PhoBERT Features : 0.2263 (22.6%)\n", + " • Basic Word Features : 0.2116 (21.2%)\n", + " • Next Token : 0.1017 (10.2%)\n", + " • Vietnamese Patterns : 0.0123 (1.2%)\n", + " • Position/Context : 0.0036 (0.4%)\n", + " • Previous Token : 0.0034 (0.3%)\n", + "\n" + ] + }, + { + "data": { + "image/png": "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oHx9fTVmzBgdOXJEc+bM0cmTJy0JSulOgmns2LFq0qSJ+vfvb6m3Y8cObd261WrW+MWLF9WiRQt17txZL774ogoWLKjQ0FC9+uqr8vT01MiRIyX931IZv//+u1avXq0XXnhBJUqU0F9//aV58+apYcOGOnjwoAoVKmQV7+TJk+Xg4KChQ4fq6tWrmjp1qiIiIrRt2zZLnQ0bNui5555TYGCgXnvtNQUEBOjQoUP65ptvLGPkwIEDqlu3rgoXLqzhw4fLw8NDX375pcLDw7Vy5Uq1bds2zWterlw5LV68WK+//rqKFCli+Ui+n59ftsfn/PnzdePGDfXr10+urq7Kly9ftt7/5ORknTlzxmbcLV++XNevX1f//v2VP39+bd++XTNnztSZM2dslkhJSUlRWFiYatWqpWnTpmnjxo364IMPFBwcrP79+0u682xu06aNfvrpJ7388ssqV66cVq1apR49etjEtHHjRrVo0UJPPfWUxowZo6SkJM2cOVN169bV7t27LeMyVadOnVSuXDlNnjxZ3377rcaPH698+fJp3rx5atSokaZMmaIlS5Zo6NChqlGjhho0aJDpdbl9+7bNcyP12Z7d3zM//PCDvvzySw0cOFAFChRQUFCQ/vrrLz3zzDOWxK6fn5/Wrl2r3r17KyEhwfJFdf/+9781aNAgdejQQa+99ppu3Lihffv2adu2beratWuGz53MdO3aVe+9957GjRuntm3bZjrr9vr162k+3319fTP9I17qHxpYQgYAHkMGAABAOgYMGGDc/c+F1atXG5KM8ePHW9Xr0KGDYTKZjOPHj1vKJBmSjJ07d1rKTp48abi5uRlt27bNdizHjh0z3NzcjG7dulmVe3h4GL169bKp/+233xqSjHXr1mXYbsOGDY2yZcsa58+fN86fP28cOnTIGDRokCHJaN26tVU9ScaiRYssZTdv3jQCAgKM9u3bW8qmT59uSDI+//xzS9mtW7eM2rVrG56enkZCQoKlPPUa3fsKDw83bty4YRVnjx490q0fFhZmqRcVFWVIMj777DPj/PnzxtmzZ41169YZJUuWNEwmk7F9+3aba3D+/HlDkjF69OgMr9Xd5s+fn248hmEY165dM3x9fY2+fftaHffnn38aPj4+VuXXr1+3aX/p0qWGJOPHH3+0lL3//vuGJCM2NtaqbmxsrCHJmD9/vk07957X6NGjDUlGly5drOrFxcUZjo6OxoQJE6zK9+/fbzg5OdmUp3c9duzYYSlLfc8mTpxoKbt8+bLh7u5umEwm47///a+l/PDhwzaxprZZrVo149atW5byqVOnGpKMNWvWGIZhGPHx8YaLi4vRrFkzIyUlxVJv1qxZlnshVep9PHfuXJtzCAkJMRo2bGhTfuPGDat2DePONXd1dTXGjRtnKUu998qVK2fcvHnTUj5jxgxDkrF//37DMAwjOTnZKFGihFG8eHHj8uXLVu2azWbLz40bNzYqVKhgNRbMZrNRp04do1SpUjZx3qt48eJGq1atrMqyOj5T7ylvb28jPj4+075S+2vWrJnlWbJ//36jW7duhiRjwIABVnXTuucnTZpkmEwm4+TJk5ay1Hvo7utsGIZRpUoVo1q1apbt1Gfz1KlTLWXJyclG/fr1bcZG5cqVDX9/f+PixYuWspiYGMPBwcHo3r27pSx1rPTr18+qzSJFihgmk8mYPHmypTz1vu7Ro0eWrlNaz43Uez+7v2ccHByMAwcOWNXt3bu3ERgYaFy4cMGqvHPnzoaPj4/l+rdp08YICQnJMN70njvp6dGjh+Hh4WEYhmEsXLjQkGR89dVXVjHffT+k3mvpvX755RdL3Xt/Xx0+fNh48803DUk29zoA4PHAUgkAACDLvvvuOzk6OmrQoEFW5W+88YYMw9DatWutymvXrq1q1apZtosVK6Y2bdpo/fr1Nh/zzcj169f1wgsvyN3d3ebLwpKSkuTq6mpzTOoah/d+9Dgthw8flp+fn/z8/FSuXDnNnDlTrVq1svlYraenp9Xagi4uLqpZs6Z+//13S9l3332ngIAAdenSxVLm7OysQYMGKTExUZs3b7Zqs02bNtqwYYM2bNigNWvWaMSIEVq3bp26du1q87FgNzc3S927X2l9gVqvXr3k5+enQoUKqXnz5rp69aoWL16sGjVqZHo9suNf//qXTTzSnRmVV65cUZcuXXThwgXLy9HRUbVq1VJUVJSlDXd3d8vPqTOQn3nmGUnS7t27czTeVC+//LLV9ldffSWz2ayOHTtaxRsQEKBSpUpZxZtdffr0sfzs6+urMmXKyMPDQx07drSUlylTRr6+vlb3Uqp+/fpZzZjt37+/nJyc9N1330m6M4Py1q1bGjx4sNXM8759+8rb21vffvutVXuurq5W60RnxtXV1dJuSkqKLl68KE9PT5UpUybN96dnz55W68CmLtORem579uxRbGysBg8ebDNDMHVW4qVLl/TDDz+oY8eOunbtmuX9uHjxosLCwnTs2DH98ccfWT6HVNkdn+3bt8/S7MpU33//veVZUqFCBS1evFg9e/bU+++/b1Xv7nv+77//1oULF1SnTh0ZhqE9e/bYtHvv/Vq/fn2b546Tk5NlBq5050sLX331Vavjzp07p7179yoyMtJq9nDFihXVtGlTyz11t7vvX0dHR1WvXl2GYah3796W8tT7Oq37Ny21atWyeW6kfkljdn/PNGzY0GotY8MwtHLlSrVu3VqGYViN57CwMF29etVy3/r6+urMmTPasWNHluLOroiICJUqVUrjxo2zeZ7fq1+/fmk+3+9dp/nu31dly5bV+++/r+effz7NpWIAAI8+lkoAAABZdvLkSRUqVEheXl5W5eXKlbPsv1upUqVs2ihdurSuX7+u8+fPKyAgINM+U1JS1LlzZx08eFBr1661+Vi2u7t7muvY3rhxw7I/M0FBQfr3v/8tk8kkNzc3lSpVSv7+/jb1ihQpYvNx17x582rfvn2W7ZMnT6pUqVI2Szekd42KFCmiJk2aWLaff/555c+fX0OHDtU333yj1q1bW/Y5Ojpa1c3IqFGjVL9+fSUmJmrVqlX673//axNTTqhZs2aaX0527NgxSVKjRo3SPO7upR0uXbqksWPH6r///a/NGo1Xr17NwWj/z73LERw7dkyGYaR5z0q67y+oc3Nzs0n8+fj4pHkv+fj4pLl27b0xeXp6KjAw0LL8Reo9VaZMGat6Li4ueuqpp2zuucKFC2f4BVv3MpvNmjFjhmbPnq3Y2FirP7rkz5/fpn6xYsWstlOXCUg9t9T1XjNaLuX48eMyDEPvvvuu3n333TTrxMfHq3Dhwlk+Dyn74/Pe+yQztWrV0vjx45WSkqLffvtN48eP1+XLl22u96lTpzRq1Ch9/fXXNu/5vfd8WvdQ3rx5rY47efKkAgMD5enpaVXv3nsivXtFunMN1q9fb/Nlffe+nz4+PnJzc7NZh9zHx8dqXeqMFChQIN1nWXZ/z9z7Hp0/f15XrlzRJ598ok8++STNPlKfM8OGDdPGjRtVs2ZNlSxZUs2aNVPXrl1Vt27dLJ1HZhwdHfXOO++oR48eWr16dbrLe0h3xnlWnu+pv6/MZrNOnDihCRMm6Pz587n+hWwAgAeDxC0AALBrffv21TfffKMlS5akmQQMDAzUuXPnbMpTy+5N9KbFw8MjS/9hTu/bujObSZVdjRs3liT9+OOPVonb7KhQoYLlnMLDw3X9+nX17dtX9erVU9GiRXMs1vSYzWZJd9a5TStBf/eajR07dtTPP/+sN998U5UrV5anp6fMZrOaN29uaScj6a0dmdGs7nsT+mazWSaTSWvXrk3zfb43IZZV6d0zD+teSktW/phxt4kTJ+rdd99Vr1699N577ylfvnxycHDQ4MGD03x/cuLcUtsdOnSowsLC0qxTsmTJLLd3v7J7re5OSIaFhals2bJ67rnnNGPGDA0ZMkTSnfuyadOmunTpkoYNG6ayZcvKw8NDf/zxhyIjI22uaXrX82FJq//cvH/vldZYlqQXX3wxzTV+pTszjKU7yeAjR47om2++0bp167Ry5UrNnj1bo0aN0tixY3MkvoiICMtat+Hh4f+4vXt/X9WtW1dVq1bV22+/rY8//vgftw8AsC8kbgEAQJYVL15cGzdu1LVr16xmQx0+fNiy/26psy7vdvToUeXJkydLHz9+8803NX/+fE2fPt3qo813q1y5srZs2SKz2Ww1i27btm3KkyePSpcunaVzyynFixfXvn37bOJJ7xqlJTk5WZKUmJiYY3FNnjxZq1at0oQJEzR37twcazc9wcHBkiR/f/8Mk+KXL1/Wpk2bNHbsWI0aNcpSnta9k16CNnVG55UrV6zK752Zl1m8hmGoRIkSD/2eycyxY8f07LPPWrYTExN17tw5tWzZUtL/3VNHjhzRU089Zal369YtxcbGZnmWdnrXd8WKFXr22Wf1n//8x6r8ypUrNrMusyL13vjtt9/SjS31PJydnbMcf1bkxPjMjlatWqlhw4aaOHGiXnrpJXl4eGj//v06evSoFi5caFkeQJJlmZH7Ubx4cW3atEmJiYlWf2Q4cuSITb20yqU716BAgQJWs21zQ3Z/z9zLz89PXl5eSklJydK94+HhoU6dOqlTp066deuW2rVrpwkTJmjEiBFyc3PL9EvFMpM66zYyMlJr1qz5R22lpWLFinrxxRc1b948DR061GaGNADg0cYatwAAIMtatmyplJQUzZo1y6r8o48+kslkUosWLazKf/nlF6s1ME+fPq01a9aoWbNmmc4ie//99zVt2jS9/fbbNt/0frcOHTror7/+0ldffWUpu3DhgpYvX67WrVunuf7tg9SyZUv9+eefWrZsmaUsOTlZM2fOlKenpxo2bJhpG//73/8kSZUqVcqxuIKDg9W+fXstWLBAf/75Z461m56wsDB5e3tr4sSJun37ts3+8+fPS/q/mXv3ztSbPn26zTGpCaV7E7Te3t4qUKCAfvzxR6vy2bNnZznedu3aydHRUWPHjrWJxTCMLH8E/EH45JNPrK7hnDlzlJycbBlvTZo0kYuLiz7++GOr2P/zn//o6tWratWqVZb68fDwsLm20p336N5rsnz58vtaY1aSqlatqhIlSmj69Ok2/aX24+/vr9DQUM2bNy/NGfWp90925cT4zK5hw4bp4sWL+ve//y0p7XveMAzNmDHjvvto2bKlkpOTNWfOHEtZSkqKZs6caVUvMDBQlStX1sKFC62u/W+//abvv//e8seA3JTd3zP3cnR0VPv27bVy5Ur99ttvNvvvvnfuHdcuLi4qX768DMOwjLn0njvZ8eKLL6pkyZI5Nov3Xm+99ZZu376tDz/88IG0DwDIPcy4BQAAWda6dWs9++yzGjlypOLi4lSpUiV9//33WrNmjQYPHmyZSZfq6aefVlhYmAYNGiRXV1dLIi2z/7yuWrVKb731lkqVKqVy5crp888/t9rftGlTFSxYUNKdxO0zzzyjnj176uDBgypQoIBmz56tlJSUB/af5Iz069dP8+bNU2RkpHbt2qWgoCCtWLFCW7du1fTp023WbTx69Kjl/K5fv65ff/1VCxcuVMmSJdWtWzerusnJyTbXIlXbtm0znSn35ptv6ssvv9T06dPT/EKznOTt7a05c+aoW7duqlq1qjp37iw/Pz+dOnVK3377rerWratZs2bJ29tbDRo00NSpU3X79m0VLlxY33//vWJjY23aTP2iu5EjR6pz585ydnZW69at5eHhoT59+mjy5Mnq06ePqlevrh9//FFHjx7NcrzBwcEaP368RowYobi4OIWHh8vLy0uxsbFatWqV+vXrp6FDh+bY9cmOW7duqXHjxurYsaOOHDmi2bNnq169enr++ecl3ZlhOGLECI0dO1bNmzfX888/b6lXo0YNqy/Uy0i1atU0Z84cjR8/XiVLlpS/v78aNWqk5557TuPGjVPPnj1Vp04d7d+/X0uWLLGa3ZsdDg4O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lyT5+vrmWJtZec8rV66svXv3atWqVWrXrl2mbTo5OenFF1/MUv/169dXhw4dLNtlypRR//79tWjRIr311ltZauNhu597/N4Zx7mpSZMmyps3rxYuXKhx48bldjgAgMcUSyUAAAC7FBsbq3379qlJkyb/uK201lJMSkrSoEGDVKBAAXl5een555/XH3/8IZPJpDFjxti0ceXKFUVGRsrX11c+Pj7q2bOnrl+/blPv888/V7Vq1eTu7q58+fKpc+fOOn36tFWd0NBQPf3009q1a5caNGigPHny6O23304z9mnTpslkMunkyZM2+0aMGCEXFxddvnxZkrRlyxa98MILKlasmFxdXVW0aFG9/vrrSkpKyvD6ZLRuZFrX448//lCvXr1UsGBBubq6KiQkRJ999pnNsTNnzlRISIjy5MmjvHnzqnr16vriiy8yjOVBKFy4sBo0aGDT95IlS1ShQgU9/fTTaR63fPlyy3tZoEABvfjii/rjjz+s6kRGRsrT01MnTpxQy5Yt5eXlpYiICEmS2WzW9OnTFRISIjc3NxUsWFAvvfSS5f3KSFr3bOoSIcuXL1f58uXl7u6u2rVra//+/ZKkefPmqWTJknJzc1NoaKji4uKsjr/7vqtTp47c3d1VokQJzZ0716b/+Ph49e7dWwULFpSbm5sqVaqkhQsXWtVJvW+mTZum6dOnKzg4WK6urpo9e7Zq1KghSerZs6flY/yp91dW79PUa/vHH38oPDxcnp6e8vPz09ChQ5WSkmKJwc/PT5I0duxYS19pjeHU61q8eHFJ0ptvvimTyaSgoCDL/j179qhFixby9vaWp6enGjdurF9//dWqjdTlWDZv3qxXXnlF/v7+KlKkSJr93a1z584qXbq0xo0bJ8MwMq3/T9SvX1+SdOLEiSzV/+mnn1SjRg25ubkpODhY8+bNS7duVp5xkrRt2za1bNlSefPmlYeHhypWrKgZM2ZY9qd1j2/YsEH16tWTr6+vPD09VaZMGatnY3rPqh9++EH169eXh4eHfH191aZNG5ulIlL7O378eKbP8szikCRnZ2eFhoZqzZo16V4rAAD+qUfvz/gAAOCJ8PPPP0uSqlatmub+GzdupLkmaWJiYpbaj4yM1Jdffqlu3brpmWee0ebNm9WqVat063fs2FElSpTQpEmTtHv3bn366afy9/fXlClTLHUmTJigd999Vx07dlSfPn10/vx5zZw5Uw0aNNCePXusZvhdvHhRLVq0UOfOnfXiiy+qYMGC6fb71ltv6csvv9Sbb75pte/LL79Us2bNlDdvXkl3Eo3Xr19X//79lT9/fm3fvl0zZ87UmTNntHz58ixdl8z89ddfeuaZZyxJRD8/P61du1a9e/dWQkKCBg8eLEn697//rUGDBqlDhw567bXXdOPGDe3bt0/btm1T165dM+wjq2vNenl5ydXVNUt1u3btqtdee02JiYny9PRUcnKyli9friFDhqS5TMKCBQvUs2dP1ahRQ5MmTdJff/2lGTNmaOvWrTbvZXJyssLCwlSvXj1NmzbNMnP6pZdesrQzaNAgxcbGatasWdqzZ4+2bt16Xx/33rJli77++msNGDBAkjRp0iQ999xzeuuttzR79my98sorunz5sqZOnapevXrphx9+sDr+8uXLatmypTp27KguXbroyy+/VP/+/eXi4qJevXpJuvNHjdDQUB0/flwDBw5UiRIltHz5ckVGRurKlSt67bXXrNqcP3++bty4oX79+snV1VVt27bVtWvXNGrUKPXr18+SRKxTp46k7N2nKSkpCgsLU61atTRt2jRt3LhRH3zwgYKDg9W/f3/5+flpzpw56t+/v9q2bWuZyVqxYsU0r1+7du3k6+ur119/XV26dFHLli3l6ekpSTpw4IDq168vb29vvfXWW3J2dta8efMUGhqqzZs3q1atWlZtvfLKK/Lz89OoUaP0999/Z/reOTo66p133lH37t2zPOs2rbHg4uIib2/vDI9LTdqnPhsysn//fjVr1kx+fn4aM2aMkpOTNXr06DSfSVl9xm3YsEHPPfecAgMD9dprrykgIECHDh3SN998Y3P/pDpw4ICee+45VaxYUePGjZOrq6uOHz+urVu3Zhj/xo0b1aJFCz311FMaM2aMkpKSNHPmTNWtW1e7d++2SsxLmT/LsxNHtWrVtGbNGiUkJGT6ngAAcF8MAAAAO/TOO+8Ykoxr167Z7JOU6WvHjh2W+qNHjzbu/mfPrl27DEnG4MGDrdqNjIw0JBmjR4+2ObZXr15Wddu2bWvkz5/fsh0XF2c4OjoaEyZMsKq3f/9+w8nJyaq8YcOGhiRj7ty5WboWtWvXNqpVq2ZVtn37dkOSsWjRIkvZ9evXbY6dNGmSYTKZjJMnT9qcU6rY2FhDkjF//nyb4++9Hr179zYCAwONCxcuWNXr3Lmz4ePjY4mhTZs2RkhISJbOL60+s/JKK9602howYIBx6dIlw8XFxVi8eLFhGIbx7bffGiaTyYiLi7Ncj/PnzxuGYRi3bt0y/P39jaefftpISkqytPXNN98YkoxRo0ZZynr06GFIMoYPH27V75YtWwxJxpIlS6zK161bl2b5ve59j1LPxdXV1YiNjbWUzZs3z5BkBAQEGAkJCZbyESNGGJKs6qbedx988IGl7ObNm0blypUNf39/49atW4ZhGMb06dMNScbnn39uqXfr1i2jdu3ahqenp6Wf1PvG29vbiI+Pt4p1x44d6b5HWb1PU6/tuHHjrOpWqVLFajycP3/e5j7NSGrc77//vlV5eHi44eLiYpw4ccJSdvbsWcPLy8to0KCBpWz+/PmGJKNevXpGcnJytvpLTk42SpUqZVSqVMkwm82GYRg299/d557WKywszFIvKirKkGR89tlnxvnz542zZ88a69atM0qWLGmYTCZj+/btmcYXHh5uuLm5WV37gwcPGo6Ojlb3YFafccnJyUaJEiWM4sWLG5cvX7aqm3rOd593qo8++sjmOqR3Le++r1Lv34sXL1rKYmJiDAcHB6N79+42/WX2LM9KHKm++OILQ5Kxbdu2TOsCAHA/WCoBAADYpYsXL8rJyckyG+5ebdq00YYNG2xe985KTcu6desk3Zkxd7dXX3013WNefvllq+369evr4sWLSkhIkCR99dVXMpvN6tixoy5cuGB5BQQEqFSpUoqKirI63tXVVT179sw0Vknq1KmTdu3aZfWx52XLlsnV1dVqzVZ3d3fLz3///bcuXLigOnXqyDAM7dmzJ0t9ZcQwDK1cuVKtW7eWYRhW5xkWFqarV69q9+7dku6sH3rmzBnt2LEj2/2k9b6m9QoLC8tym3nz5lXz5s21dOlSSdIXX3yhOnXqWD42f7edO3cqPj5er7zyitV6mq1atVLZsmX17bff2hzTv39/q+3ly5fLx8dHTZs2tbpO1apVk6enp839kFWNGze2mkGYOgu0ffv28vLysin//fffrY53cnLSSy+9ZNl2cXHRSy+9pPj4eO3atUuS9N133ykgIMDqSwGdnZ01aNAgJSYmavPmzVZttm/f3rJcQVZk9z5Na+zde17/VEpKir7//nuFh4frqaeespQHBgaq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U8qsJzExUcuXL9enn34qk8kkk8mklJQUSdLhw4fVvn17ubu7q3bt2nrmmWdUVFR01bH27NmjwMBAzZw5U5J06tQpDRkyRIGBgfLx8VH79u118OBBm2c3b95cK1asUFhYmHx9fdW3b1+dPn263J/lpVsl5Ofnq3v37nJ3d9cdd9yh5OTkco1zkclk0htvvKFu3brJw8NDkZGR+vLLL/Xdd98pPj5enp6eatu2rbKzs236LVmyRHfeeadcXFwUERGhFStW2NzPyspSbGys3Nzc1KRJE33++ecVqgsAAAAAAABAxVV4j9vly5fLyclJu3fv1vz58zV37ly99dZb1vuzZ89Ws2bNdODAAU2YMEHZ2dnq0qWLHnvsMR06dEj//ve/tWPHDg0fPlyS1K9fP+3evdsmUPz666916NAhPfnkk2XWMnr0aPXu3VtdunRRXl6e8vLy1LZtW/3222/q3LmzatWqpT179ujDDz/U5s2brc/8o61bt6pTp06aNm2axowZI0l6/PHHlZ+fr/Xr12vfvn1q0aKFOnTooBMnTlj7ZWdna/Xq1Vq7dq3Wrl2r1NRUvfbaaxX9SCX9vuXD8ePHtW3bNn300UdavHix8vPzKzTGxdA8IyNDjRs31pNPPqlnn31W48aN0969e2WxWGw+g08++UQvvPCCRo0apa+++krPPvusBg8erG3btkmSzGazHn30Ubm4uCg9PV1Lly61fj5lKS4uVmFhoc0BAAAAAAAAoPwqvFVCaGioXn/9dZlMJkVEROjw4cN6/fXXNXToUElS+/btNWrUKGv7IUOGqF+/ftbVpeHh4VqwYIHi4uK0ZMkSRUVFqVmzZnrvvfc0YcIESVJycrJat26thg0bllmLl5eX3N3dVVxcrODgYOv15cuX69y5c3r33Xfl6ekpSVq0aJG6d++umTNnqk6dOta2n3zyiQYMGKC33npLffr0kfT7CuHdu3crPz9frq6ukn4PpFevXq2PPvrIupLYbDYrKSlJ3t7ekqT+/ftry5YtmjZtWoU+02+//Vbr16/X7t27dffdd0uS3n77bUVGRlZonMGDB6t3796SpDFjxqhNmzaaMGGCOnfuLEl64YUXNHjwYGv72bNna9CgQXruueckSS+99JJ27dql2bNn64EHHtDmzZv1zTffaOPGjapbt64kafr06eratWuZdcyYMUOTJ0+uUO0AAAAAAAAA/qfCK27vvfdemUwm63mbNm2UlZWl0tJSSVKrVq1s2h88eFBJSUny8vKyHp07d5bZbNaxY8ck/b7q9r333pMkWSwWrVy5Uv369bvulzp69KiaNWtmDW0lqV27djKbzcrMzLReS09P1+OPP64VK1ZYQ9uLNRcVFal27do2dR87dsxmZXBYWJg1tJWkkJCQCq+SvVivk5OTWrZsab3WuHFj+fn5VWic6Oho668vhtNNmza1uXbu3DnrCtijR4+qXbt2NmO0a9dOR48etd4PDQ21hrbS7/+8r2XcuHEqKCiwHsePH6/QewAAAAAAAAA1XaV/OdmlYakkFRUV6dlnn1VCQsJlbevVqydJeuKJJzRmzBjt379fZ8+e1fHjx22C1Kpy5513qnbt2nrnnXf00EMPydnZ2VpzSEiIdb/cS10apl5sf5HJZJLZbK7Kkst0aT0Xw/UrXavqGl1dXa0rlQEAAAAAAABUXIWD2/T0dJvzXbt2KTw8XI6Ojlds36JFCx05cqTMbQ9uv/12xcXFKTk5WWfPnlWnTp0UFBRUrnpcXFysq30vioyMVFJSkn777TdrkJyWliYHBwdFRERY2wUEBGjVqlWKj49X79699cEHH8jZ2VktWrTQTz/9JCcnJ4WFhZWrjhvRuHFjXbhwQfv27bNulZCZmalTp05V6XMjIyOVlpamgQMHWq+lpaWpSZMm1vvHjx9XXl6eQkJCJP3+zxsAAAAAAABA1arwVgm5ubl66aWXlJmZqZUrV2rhwoV64YUXrtp+zJgx2rlzp4YPH66MjAxlZWXp008/veyLwvr166f3339fH374YYW2SQgLC9OhQ4eUmZmpX375RSUlJerXr5/c3Nw0cOBAffXVV9q2bZtGjBih/v372+xvK0lBQUHaunWrvvnmGz3xxBO6cOGCOnbsqDZt2qhHjx7atGmTcnJytHPnTo0fP1579+6t2AdWDhEREerSpYueffZZpaena9++fRoyZIjc3d0r/VmXevnll5WUlKQlS5YoKytLc+fO1apVqzR69GhJUseOHdWoUSMNHDhQBw8e1Pbt2zV+/PgqrQkAAAAAAADAdQS3AwYM0NmzZ3XPPffo+eef1wsvvGD9sq4riY6OVmpqqr799lvdf//9iomJ0cSJE232TZWkXr166ddff9WZM2fUo0ePctczdOhQRUREqFWrVgoMDFRaWpo8PDy0ceNGnThxQnfffbd69eqlDh06aNGiRVccIzg4WFu3btXhw4fVr18/mc1mrVu3TrGxsRo8eLAaNWqkvn376ocffrgs+K0sy5YtU926dRUXF6dHH31UzzzzTLlXHV+vHj16aP78+Zo9e7aioqL0xhtvaNmyZYqPj5ckOTg46JNPPrH+8x4yZEiFv3gNAAAAAAAAQMWZLBaLpbyN4+Pj1bx5c82bN68KS8KtprCwUL6+vpqUmi03bx97lwOgPCwWeZ09qSL3WtIlX0gJwKBu8jk7NibA3iUA1cpsNis/P19BQUFycKjwWhoAdsC8BW4uRp6zF3OygoIC+fiUnZMZq3IAAAAAAAAAgPGDWy8vr6se27dvt3d5V5Sbm1tm3bm5uRUaLzk5+apjRUVFVdFbAAAAAAAAALAXp4o0TklJqaIyri4jI+Oq92677bbqK6QC6tatW2bdf9zf91oefvhhtW7d+or3nJ2dKzQWAAAAAAAAAOOrUHBrDw0bNrR3CRXm5ORUqXV7e3vL29u70sYDAAAAAAAAYGyG3yoBAAAAAAAAAGoaglsAAAAAAAAAMBiCWwAAAAAAAAAwGIJbAAAAAAAAADAYglsAAAAAAAAAMBiCWwAAAAAAAAAwGCd7F4CaY2S0v/z8/OxdBoByMJvNys8vVVBQbTk48DM+wOiYswAAAMCthz/ZAwAAAAAAAIDBENwCAAAAAAAAgMEQ3AIAAAAAAACAwRDcAgAAAAAAAIDBENwCAAAAAAAAgMEQ3AIAAAAAAACAwRDcAgAAAAAAAIDBONm7ANQc8w6dkJv3BXuXAaA8LBZ5nS1U0Y+Okslk72oAXItB5uzYmAC7PRsAAAC41bDiFgAAAAAAAAAMhuAWAAAAAAAAAAyG4BYAAAAAAAAADIbgFgAAAAAAAAAMhuAWAAAAAAAAAAyG4BYAAAAAAAAADIbgFgAAAAAAAAAMhuAWAAAAAAAAAAyG4BYAAAAAAAAADIbgFgAAAAAAAAAMhuC2guLj4zVy5Eh7lyFJSklJkclk0qlTpyRJSUlJ8vPzq9AYgwYNUo8ePSq9NgAAAAAAAADXz8neBaDy9OnTRw8++GCF+syfP18Wi8V6Hh8fr+bNm2vevHmVXB0AAAAAAACA8iK4vYW4u7vL3d29Qn18fX2rqBoAAAAAAAAA14utEq6D2WzWK6+8In9/fwUHBysxMdF6b+7cuWratKk8PT0VGhqq5557TkVFRdb7P/zwg7p3765atWrJ09NTUVFRWrduXbmeu27dOjVq1Eju7u564IEHlJOTY3P/SlslTJ06VUFBQfL29taQIUM0duxYNW/e3Hr/0q0SBg0apNTUVM2fP18mk0kmk0k5OTk6efKk+vXrp8DAQLm7uys8PFzLli2ryEcGAAAAAAAAoAIIbq/D8uXL5enpqfT0dM2aNUtTpkzR559/LklycHDQggUL9PXXX2v58uXaunWrXnnlFWvf559/XsXFxfriiy90+PBhzZw5U15eXtd85vHjx/Xoo4+qe/fuysjIsIawZUlOTta0adM0c+ZM7du3T/Xq1dOSJUuu2n7+/Plq06aNhg4dqry8POXl5Sk0NFQTJkzQkSNHtH79eh09elRLlixRQEDAVccpLi5WYWGhzQEAAAAAAACg/Ngq4TpER0dr0qRJkqTw8HAtWrRIW7ZsUadOnWy+uCwsLExTp07VsGHDtHjxYklSbm6uHnvsMTVt2lSS1KBBg3I9c8mSJbrzzjs1Z84cSVJERIQ1+L2ahQsX6umnn9bgwYMlSRMnTtSmTZtsVgBfytfXVy4uLvLw8FBwcLD1em5urmJiYtSqVSvre5VlxowZmjx5crneCwAAAAAAAMDlWHF7HaKjo23OQ0JClJ+fL0navHmzOnTooNtuu03e3t7q37+/fv31V505c0aSlJCQoKlTp6pdu3aaNGmSDh06VK5nHj16VK1bt7a51qZNmzL7ZGZm6p577rG59sfz8vjLX/6i999/X82bN9crr7yinTt3ltl+3LhxKigosB7Hjx+v8DMBAAAAAACAmozg9jo4OzvbnJtMJpnNZuXk5Khbt26Kjo7Wxx9/rH379ukf//iHJOn8+fOSpCFDhuj7779X//79dfjwYbVq1UoLFy6s9neoiK5du+qHH37Qiy++qB9//FEdOnTQ6NGjr9re1dVVPj4+NgcAAAAAAACA8iO4rUT79u2T2WzWnDlzdO+996pRo0b68ccfL2sXGhqqYcOGadWqVRo1apTefPPNa44dGRmp3bt321zbtWtXmX0iIiK0Z88em2t/PP8jFxcXlZaWXnY9MDBQAwcO1L/+9S/NmzdP//znP69ZMwAAAAAAAIDrQ3BbiRo2bKiSkhItXLhQ33//vVasWKGlS5fatBk5cqQ2btyoY8eOaf/+/dq2bZsiIyOvOfawYcOUlZWll19+WZmZmXrvvfeUlJRUZp8RI0bo7bff1vLly5WVlaWpU6fq0KFDMplMV+0TFham9PR05eTk6JdffpHZbNbEiRP16aef6rvvvtPXX3+ttWvXlqtmAAAAAAAAANeH4LYSNWvWTHPnztXMmTN11113KTk5WTNmzLBpU1paqueff16RkZHq0qWLGjVqZP3isrLUq1dPH3/8sVavXq1mzZpp6dKlmj59epl9+vXrp3Hjxmn06NFq0aKFjh07pkGDBsnNze2qfUaPHi1HR0c1adJEgYGBys3NlYuLi8aNG6fo6GjFxsbK0dFR77//fvk+FAAAAAAAAAAVZrJYLBZ7F4Hq06lTJwUHB2vFihXV9szCwkL5+vpqUmq23LzZ7xa4KVgs8jp7UkXutaQyVukDMAiDzNmxMQF2ezZwMzGbzcrPz1dQUJAcHFhLA9wMmLfAzcXIc/ZiTlZQUHDN74VyqqaaYAdnzpzR0qVL1blzZzk6OmrlypXavHmzPv/8c3uXBgAAAAAAAKAMxoqca7Bhw4bJy8vrisewYcOua0yTyaR169YpNjZWLVu21H/+8x99/PHH6tixYyVXDwAAAAAAAKAyseLWIKZMmaLRo0df8d61lk1fjbu7uzZv3nwjZQEAAAAAAACwA4JbgwgKClJQUJC9ywAAAAAAAABgAGyVAAAAAAAAAAAGQ3ALAAAAAAAAAAZDcAsAAAAAAAAABkNwCwAAAAAAAAAGQ3ALAAAAAAAAAAbjZO8CUHOMjPaXn5+fvcsAUA5ms1n5+aUKCqotBwd+xgcYHXMWAAAAuPXwJ3sAAAAAAAAAMBiCWwAAAAAAAAAwGIJbAAAAAAAAADAYglsAAAAAAAAAMBiCWwAAAAAAAAAwGIJbAAAAAAAAADAYglsAAAAAAAAAMBgnexeAmmPeoRNy875g7zIAlIfFIq+zhSr60VEymexdzQ0bGxNg7xIAAAAAAKgQVtwCAAAAAAAAgMEQ3AIAAAAAAACAwRDcAgAAAAAAAIDBENwCAAAAAAAAgMEQ3AIAAAAAAACAwRDcAgAAAAAAAIDBENwCAAAAAAAAgMEQ3AIAAAAAAACAwRDcAgAAAAAAAIDBENwCAAAAAAAAgMHU6ODWZDJp9erVdnl2Tk6OTCaTMjIyrtomJSVFJpNJp06dqra6yiMpKUl+fn72LgMAAAAAAAC4ZRkuuE1MTFTz5s0r1MeeAez1Cg0NVV5enu666y57lwIAAAAAAADAYJzsXUBN5ejoqODgYHuXAQAAAAAAAMCAKrziNj4+XgkJCXrllVfk7++v4OBgJSYmWu+fOnVKQ4YMUWBgoHx8fNS+fXsdPHhQkvTf//5XwcHBmj59urX9zp075eLioi1btigpKUmTJ0/WwYMHZTKZZDKZlJSUVGY9YWFhkqSePXvKZDJZzyVpyZIluvPOO+Xi4qKIiAitWLGizLEmTZqkkJAQHTp0SJK0Y8cO3X///XJ3d1doaKgSEhL022+/2Tx7+vTp+vOf/yxvb2/Vq1dP//znP8vxKV55q4R169apUaNGcnd31wMPPKCcnJxyjSX9b/uCtWvXKiIiQh4eHurVq5fOnDmj5cuXKywsTLVq1VJCQoJKS0ut/U6ePKkBAwaoVq1a8vDwUNeuXZWVlXXZ2PXq1ZOHh4d69uypX3/9tdx1AQAAAAAAAKi469oqYfny5fL09FR6erpmzZqlKVOm6PPPP5ckPf7448rPz9f69eu1b98+tWjRQh06dNCJEycUGBiod955R4mJidq7d69Onz6t/v37a/jw4erQoYP69OmjUaNGKSoqSnl5ecrLy1OfPn3KrGXPnj2SpGXLlikvL896/sknn+iFF17QqFGj9NVXX+nZZ5/V4MGDtW3btsvGsFgsGjFihN59911t375d0dHRys7OVpcuXfTYY4/p0KFD+ve//60dO3Zo+PDhNn3nzJmjVq1a6cCBA3ruuef0l7/8RZmZmRX+TI8fP65HH31U3bt3V0ZGhoYMGaKxY8dWaIwzZ85owYIFev/997VhwwalpKSoZ8+eWrdundatW6cVK1bojTfe0EcffWTtM2jQIO3du1dr1qzRl19+KYvFogcffFAlJSWSpPT0dD399NMaPny4MjIy9MADD2jq1Kll1lFcXKzCwkKbAwAAAAAAAED5mSwWi6UiHeLj41VaWqrt27dbr91zzz1q3769unXrpoceekj5+flydXW13m/YsKFeeeUVPfPMM5Kk559/Xps3b1arVq10+PBh7dmzx9o+MTFRq1evLvNLuy57CZNJn3zyiXr06GG91q5dO0VFRdmsgO3du7d+++03ffbZZ9Z+H374oT755BMdOHBAn3/+uW677TZJ0pAhQ+To6Kg33njD2n/Hjh2Ki4vTb7/9Jjc3N4WFhen++++3ruS1WCwKDg7W5MmTNWzYsDJrzsnJ0R133KEDBw6oefPm+utf/6pPP/1UX3/9tbXN2LFjNXPmTJ08efKaXwaWlJSkwYMH67vvvtOdd94pSRo2bJhWrFihn3/+WV5eXpKkLl26KCwsTEuXLlVWVpYaNWqktLQ0tW3bVpL066+/KjQ0VMuXL9fjjz+uJ598UgUFBdbPTJL69u2rDRs2XPVL0xITEzV58uTLrk9KzZabt0+Z7wHAICwWeZ09qSL3WpLJZO9qbtjYmAB7lwBUKbPZrPz8fAUFBcnBwXBfYQDgD5izwM2HeQvcXIw8ZwsLC+Xr66uCggL5+JSdk11X5dHR0TbnISEhys/P18GDB1VUVKTatWvLy8vLehw7dkzZ2dnW9rNnz9aFCxf04YcfKjk52SbkrSxHjx5Vu3btbK61a9dOR48etbn24osvKj09XV988YU1tJWkgwcPKikpyeY9OnfuLLPZrGPHjlnbXfpZmEwmBQcHKz8//7rqbd26tc21Nm3aVGgMDw8Pa2grSXXq1FFYWJg1tL147WJ9R48elZOTk81za9eurYiICOvndD11jRs3TgUFBdbj+PHjFXoPAAAAAAAAoKa7ri8nc3Z2tjk3mUwym80qKipSSEiIUlJSLutz6YrR7Oxs/fjjjzKbzcrJyVHTpk2vp4xK0alTJ61cuVIbN25Uv379rNeLior07LPPKiEh4bI+9erVs/76ap+FPVypFnvU5+rqWiVhPAAAAAAAAFBTXFdwezUtWrTQTz/9JCcnJ5svCbvU+fPn9dRTT6lPnz6KiIjQkCFDdPjwYQUFBUmSXFxcbL48qzycnZ0v6xMZGam0tDQNHDjQei0tLU1NmjSxaffwww+re/fuevLJJ+Xo6Ki+ffta3+XIkSNq2LBhhWq5XpGRkVqzZo3NtV27dlX5My9cuKD09HSbrRIyMzOtn1NkZKTS09OrtS4AAAAAAACgpqvUTR46duyoNm3aqEePHtq0aZNycnK0c+dOjR8/Xnv37pUkjR8/XgUFBVqwYIHGjBmjRo0a6c9//rN1jLCwMB07dkwZGRn65ZdfVFxcfM3nhoWFacuWLfrpp5908uRJSdLLL7+spKQkLVmyRFlZWZo7d65WrVql0aNHX9a/Z8+eWrFihQYPHmz94q4xY8Zo586d1i/lysrK0qeffnrZl5NVlmHDhikrK0svv/yyMjMz9d577ykpKalKnnVReHi4HnnkEQ0dOlQ7duzQwYMH9dRTT+m2227TI488IklKSEjQhg0bNHv2bGVlZWnRokXasGFDldYFAAAAAAAA1HSVGtyaTCatW7dOsbGxGjx4sBo1aqS+ffvqhx9+UJ06dZSSkqJ58+ZpxYoV8vHxkYODg1asWKHt27dryZIlkqTHHntMXbp00QMPPKDAwECtXLnyms+dM2eOPv/8c4WGhiomJkaS1KNHD82fP1+zZ89WVFSU3njjDS1btkzx8fFXHKNXr15avny5+vfvr1WrVik6Olqpqan69ttvdf/99ysmJkYTJ05U3bp1K+3zulS9evX08ccfa/Xq1WrWrJmWLl2q6dOnV8mzLrVs2TK1bNlS3bp1U5s2bWSxWLRu3TrrFgv33nuv3nzzTc2fP1/NmjXTpk2b9Le//a3K6wIAAAAAAABqMpPFYrHYuwjc2i5+W96k1Gy5eZf9bXkADMJikdfZkypyryWZTPau5oaNjQmwdwlAlTLyt+YCuBxzFrj5MG+Bm4uR5+zFnKygoEA+PmXnZMaqHAAAAAAAAABg/OA2OTlZXl5eVzyioqLsXd5VTZ8+/ap1d+3atcLjde3a9arjVceWCgAAAAAAAACqj5O9C7iWhx9+WK1bt77ivYv7sBrRsGHD1Lt37yvec3d3r/B4b731ls6ePXvFe/7+/hUeDwAAAAAAAIBxGT649fb2lre3t73LqDB/f/9KDVRvu+22ShsLAAAAAAAAgLEZfqsEAAAAAAAAAKhpCG4BAAAAAAAAwGAIbgEAAAAAAADAYAhuAQAAAAAAAMBgCG4BAAAAAAAAwGAIbgEAAAAAAADAYJzsXQBqjpHR/vLz87N3GQDKwWw2Kz+/VEFBteXgwM/4AAAAAACobvxtHAAAAAAAAAAMhuAWAAAAAAAAAAyG4BYAAAAAAAAADIbgFgAAAAAAAAAMhuAWAAAAAAAAAAyG4BYAAAAAAAAADIbgFgAAAAAAAAAMxsneBaDmmHfohNy8L9i7DADlYbHI62yhin50lEwmu5YyNibArs8HAAAAAMAeWHELAAAAAAAAAAZDcAsAAAAAAAAABkNwCwAAAAAAAAAGQ3ALAAAAAAAAAAZDcAsAAAAAAAAABkNwCwAAAAAAAAAGQ3ALAAAAAAAAAAZDcAsAAAAAAAAABkNwCwAAAAAAAAAGQ3ALAAAAAAAAAAZDcFsNTCaTVq9ebZhxAAAAAAAAABgbwW0FJSYmqnnz5hXqk5eXp65du1ZNQQAAAAAAAABuOU72LqAmCA4OtncJVeL8+fNycXGxdxkAAAAAAADALeeWW3EbHx+vhIQEvfLKK/L391dwcLASExOt90+dOqUhQ4YoMDBQPj4+at++vQ4ePChJ+u9//6vg4GBNnz7d2n7nzp1ycXHRli1blJSUpMmTJ+vgwYMymUwymUxKSkq6Zk2XbnFw/vx5DR8+XCEhIXJzc1P9+vU1Y8aM63rXw4cPq3379nJ3d1ft2rX1zDPPqKioSJL01VdfycHBQf/9738lSSdOnJCDg4P69u1r7T916lTdd9991vOvvvpKXbt2lZeXl+rUqaP+/fvrl19+sd6Pj4/X8OHDNXLkSAUEBKhz587XVTcAAAAAAACAst1ywa0kLV++XJ6enkpPT9esWbM0ZcoUff7555Kkxx9/XPn5+Vq/fr327dunFi1aqEOHDjpx4oQCAwP1zjvvKDExUXv37tXp06fVv39/DR8+XB06dFCfPn00atQoRUVFKS8vT3l5eerTp0+FaluwYIHWrFmjDz74QJmZmUpOTlZYWFiF3/G3335T586dVatWLe3Zs0cffvihNm/erOHDh0uSoqKiVLt2baWmpkqStm/fbnMuSampqYqPj5f0e6Ddvn17xcTEaO/evdqwYYN+/vln9e7d+7LP1sXFRWlpaVq6dOkVaysuLlZhYaHNAQAAAAAAAKD8bsmtEqKjozVp0iRJUnh4uBYtWqQtW7bI3d1du3fvVn5+vlxdXSVJs2fP1urVq/XRRx/pmWee0YMPPqihQ4eqX79+atWqlTw9Pa0rYt3d3eXl5SUnJ6fr3v4gNzdX4eHhuu+++2QymVS/fv3rGue9997TuXPn9O6778rT01OStGjRInXv3l0zZ85UnTp1FBsbq5SUFPXq1UspKSkaPHiw3nrrLX3zzTe68847tXPnTr3yyivWvjExMTarjd955x2Fhobq22+/VaNGjayf56xZs8qsbcaMGZo8efJ1vRcAAAAAAACAW3TFbXR0tM15SEiI8vPzdfDgQRUVFal27dry8vKyHseOHVN2dra1/ezZs3XhwgV9+OGHSk5Otoa8lWHQoEHKyMhQRESEEhIStGnTpusa5+jRo2rWrJk1tJWkdu3ayWw2KzMzU5IUFxenlJQUSb+vrm3fvr01zN2zZ49KSkrUrl07SdLBgwe1bds2m8+lcePGkmTz2bRs2fKatY0bN04FBQXW4/jx49f1jgAAAAAAAEBNdUuuuHV2drY5N5lMMpvNKioqUkhIiDXMvJSfn5/119nZ2frxxx9lNpuVk5Ojpk2bVlptLVq00LFjx7R+/Xpt3rxZvXv3VseOHfXRRx9V2jMuio+P18iRI5WVlaUjR47ovvvu0zfffKOUlBSdPHlSrVq1koeHhySpqKjIulr3j0JCQqy/vjQovhpXV9dKDbsBAAAAAACAmuaWDG6vpkWLFvrpp5/k5OR01X1lz58/r6eeekp9+vRRRESEhgwZosOHDysoKEiS5OLiotLS0huqw8fHR3369FGfPn3Uq1cvdenSRSdOnJC/v3+5x4iMjFRSUpJ+++03a5ialpYmBwcHRURESJKaNm2qWrVqaerUqWrevLm8vLwUHx+vmTNn6uTJk9b9baXfP5uPP/5YYWFhcnKqUf9aAAAAAAAAAIZzS26VcDUdO3ZUmzZt1KNHD23atEk5OTnauXOnxo8fr71790qSxo8fr4KCAi1YsEBjxoxRo0aN9Oc//9k6RlhYmI4dO6aMjAz98ssvKi4urlANc+fO1cqVK/XNN9/o22+/1Ycffqjg4GCbFb/l0a9fP7m5uWngwIH66quvtG3bNo0YMUL9+/dXnTp1JP2+0jg2NlbJycnWkDY6OlrFxcXasmWL4uLirOM9//zzOnHihJ544gnt2bNH2dnZ2rhxowYPHnzDQTUAAAAAAACAiqlRwa3JZNK6desUGxurwYMHq1GjRurbt69++OEH1alTRykpKZo3b55WrFghHx8fOTg4aMWKFdq+fbuWLFkiSXrsscfUpUsXPfDAAwoMDNTKlSsrVIO3t7dmzZqlVq1a6e6771ZOTo7WrVsnB4eK/aPw8PDQxo0bdeLECd19993q1auXOnTooEWLFtm0i4uLU2lpqTW4dXBwUGxsrEwmk3V/W0mqW7eu0tLSVFpaqj/96U9q2rSpRo4cKT8/vwrXBgAAAAAAAODGmCwWi8XeReDWVlhYKF9fX01KzZabt4+9ywFQHhaLvM6eVJF7LclksmspY2MC7Pp84GZgNpuVn5+voKAgfuAK3ASYs8DNh3kL3FyMPGcv5mQFBQXy8Sk7JzNW5QAAAAAAAAAAgtsblZycLC8vryseUVFR1T4OAAAAAAAAgJufk70LuNk9/PDDat269RXvOTs7V/s4AAAAAAAAAG5+BLc3yNvbW97e3oYZBwAAAAAAAMDNj60SAAAAAAAAAMBgCG4BAAAAAAAAwGAIbgEAAAAAAADAYAhuAQAAAAAAAMBgCG4BAAAAAAAAwGCc7F0Aao6R0f7y8/OzdxkAysFsNis/v1RBQbXl4MDP+AAAAAAAqG78bRwAAAAAAAAADIbgFgAAAAAAAAAMhuAWAAAAAAAAAAyG4BYAAAAAAAAADIbgFgAAAAAAAAAMhuAWAAAAAAAAAAyG4BYAAAAAAAAADMbJ3gWg5ph36ITcvC/YuwwA5WGxyOtsoYp+dJRMpnJ3GxsTUIVFAQAAAABQc7DiFgAAAAAAAAAMhuAWAAAAAAAAAAyG4BYAAAAAAAAADIbgFgAAAAAAAAAMhuAWAAAAAAAAAAyG4BYAAAAAAAAADIbgFgAAAAAAAAAMhuAWAAAAAAAAAAyG4BYAAAAAAAAADIbgFgAAAAAAAAAMhuC2GsTHx2vkyJFV+oycnByZTCZlZGSUu09SUpL8/PyqrCYAAAAAAAAA18fJ3gXUBKtWrZKzs7O9ywAAAAAAAABwkyC4rQb+/v72LgEAAAAAAADATYStEqrBpVslLF68WOHh4XJzc1OdOnXUq1evco2xYcMG3XffffLz81Pt2rXVrVs3ZWdnX7V9SkqKTCaTPvvsM0VHR8vNzU333nuvvvrqq8vabty4UZGRkfLy8lKXLl2Ul5dnvbdnzx516tRJAQEB8vX1VVxcnPbv31+xDwAAAAAAAABAhRDcVqO9e/cqISFBU6ZMUWZmpjZs2KDY2Nhy9f3tt9/00ksvae/evdqyZYscHBzUs2dPmc3mMvu9/PLLmjNnjvbs2aPAwEB1795dJSUl1vtnzpzR7NmztWLFCn3xxRfKzc3V6NGjrfdPnz6tgQMHaseOHdq1a5fCw8P14IMP6vTp09f3IQAAAAAAAAC4JrZKqEa5ubny9PRUt27d5O3trfr16ysmJqZcfR977DGb83feeUeBgYE6cuSI7rrrrqv2mzRpkjp16iRJWr58uW6//XZ98skn6t27tySppKRES5cu1Z133ilJGj58uKZMmWLt3759e5vx/vnPf8rPz0+pqanq1q3bFZ9ZXFys4uJi63lhYWG53hEAAAAAAADA71hxW406deqk+vXrq0GDBurfv7+Sk5N15syZcvXNysrSE088oQYNGsjHx0dhYWGSfg+Dy9KmTRvrr/39/RUREaGjR49ar3l4eFhDW0kKCQlRfn6+9fznn3/W0KFDFR4eLl9fX/n4+KioqKjM586YMUO+vr7WIzQ0tFzvCAAAAAAAAOB3BLfVyNvbW/v379fKlSsVEhKiiRMnqlmzZjp16tQ1+3bv3l0nTpzQm2++qfT0dKWnp0uSzp8/f0M1OTs725ybTCZZLBbr+cCBA5WRkaH58+dr586dysjIUO3atct87rhx41RQUGA9jh8/fkM1AgAAAAAAADUNwW01c3JyUseOHTVr1iwdOnRIOTk52rp1a5l9fv31V2VmZupvf/ubOnTooMjISJ08ebJcz9u1a5f11ydPntS3336ryMjIcteblpamhIQEPfjgg4qKipKrq6t++eWXMvu4urrKx8fH5gAAAAAAAABQfuxxW43Wrl2r77//XrGxsapVq5bWrVsns9msiIiIMvvVqlVLtWvX1j//+U+FhIQoNzdXY8eOLdczp0yZotq1a6tOnToaP368AgIC1KNHj3LXHB4erhUrVqhVq1YqLCzUyy+/LHd393L3BwAAAAAAAFBxrLitRn5+flq1apXat2+vyMhILV26VCtXrlRUVFSZ/RwcHPT+++9r3759uuuuu/Tiiy/q73//e7me+dprr+mFF15Qy5Yt9dNPP+k///mPXFxcyl3z22+/rZMnT6pFixbq37+/EhISFBQUVO7+AAAAAAAAACrOZLl0Q1PcMlJSUvTAAw/o5MmT8vPzs2sthYWF8vX11aTUbLl5s20CcFOwWOR19qSK3GtJJlO5u42NCajCogBcjdlsVn5+voKCguTgwM/lAaNjzgI3H+YtcHMx8py9mJMVFBRcc3tRY1UOAAAAAAAAACC4NYLc3Fx5eXld9cjNzbV3iQAAAAAAAACqEV9OZgB169ZVRkZGmfcrKj4+XuyCAQAAAAAAANycCG4NwMnJSQ0bNrR3GQAAAAAAAAAMgq0SAAAAAAAAAMBgCG4BAAAAAAAAwGAIbgEAAAAAAADAYAhuAQAAAAAAAMBgCG4BAAAAAAAAwGAIbgEAAAAAAADAYJzsXQBqjpHR/vLz87N3GQDKwWw2Kz+/VEFBteXgwM/4AAAAAACobvxtHAAAAAAAAAAMhuAWAAAAAAAAAAyG4BYAAAAAAAAADIbgFgAAAAAAAAAMhuAWAAAAAAAAAAyG4BYAAAAAAAAADIbgFgAAAAAAAAAMxsneBaDmmHfohNy8L9i7DADlYbHI62yhin50lEwmjY0JsHdFAAAAAADUKKy4BQAAAAAAAACDIbgFAAAAAAAAAIMhuAUAAAAAAAAAgyG4BQAAAAAAAACDIbgFAAAAAAAAAIMhuAUAAAAAAAAAgyG4BQAAAAAAAACDIbgFAAAAAAAAAIMhuAUAAAAAAAAAgyG4BQAAAAAAAACDIbgtQ3x8vEaOHGnvMqpdYmKimjdvbu8yAAAAAAAAgBrLyd4FGNmqVavk7Oxs7zKq3ejRozVixAh7lwEAAAAAAADUWAS3ZfD397d3CdXKYrGotLRUXl5e8vLysnc5AAAAAAAAQI3FVglluHSrhMWLFys8PFxubm6qU6eOevXqVe4xEhIS9Morr8jf31/BwcFKTEy03s/JyZHJZFJGRob12qlTp2QymZSSkiJJSklJkclk0saNGxUTEyN3d3e1b99e+fn5Wr9+vSIjI+Xj46Mnn3xSZ86csY5jNps1Y8YM3XHHHXJ3d1ezZs300UcfWe9fHHf9+vVq2bKlXF1dtWPHjitulfDOO+8oKipKrq6uCgkJ0fDhwyv0WQIAAAAAAAAoP1bclsPevXuVkJCgFStWqG3btjpx4oS2b99e7v7Lly/XSy+9pPT0dH355ZcaNGiQ2rVrp06dOlWojsTERC1atEgeHh7q3bu3evfuLVdXV7333nsqKipSz549tXDhQo0ZM0aSNGPGDP3rX//S0qVLFR4eri+++EJPPfWUAgMDFRcXZx137Nixmj17tho0aKBatWpZA+OLlixZopdeekmvvfaaunbtqoKCAqWlpV21zuLiYhUXF1vPCwsLK/SeAAAAAAAAQE1HcFsOubm58vT0VLdu3eTt7a369esrJiam3P2jo6M1adIkSVJ4eLgWLVqkLVu2VDi4nTp1qtq1aydJevrppzVu3DhlZ2erQYMGkqRevXpp27ZtGjNmjIqLizV9+nRt3rxZbdq0kSQ1aNBAO3bs0BtvvGET3E6ZMqXMWqZOnapRo0bphRdesF67++67r9p+xowZmjx5coXeDQAAAAAAAMD/sFVCOXTq1En169dXgwYN1L9/fyUnJ9tsSXAt0dHRNuchISHKz8+vcB2XjlOnTh15eHhYQ9uL1y6O+9133+nMmTPq1KmTdc9aLy8vvfvuu8rOzrYZt1WrVld9Zn5+vn788Ud16NCh3HWOGzdOBQUF1uP48ePl7gsAAAAAAACAFbfl4u3trf379yslJUWbNm3SxIkTlZiYqD179sjPz++a/Z2dnW3OTSaTzGazJMnB4ffs3GKxWO+XlJRccxyTyVTmuEVFRZKkzz77TLfddptNO1dXV5tzT0/Pq9bu7u5+1XtX4+rqetkzAAAAAAAAAJQfK27LycnJSR07dtSsWbN06NAh5eTkaOvWrTc8bmBgoCQpLy/Peu3SLyq7Xk2aNJGrq6tyc3PVsGFDmyM0NLTc43h7eyssLExbtmy54ZoAAAAAAAAAlA8rbsth7dq1+v777xUbG6tatWpp3bp1MpvNioiIuOGx3d3dde+99+q1117THXfcofz8fP3tb3+74XG9vb01evRovfjiizKbzbrvvvusXyrm4+OjgQMHlnusxMREDRs2TEFBQeratatOnz6ttLQ0jRgx4obrBAAAAAAAAHA5gtty8PPz06pVq5SYmKhz584pPDxcK1euVFRUVKWM/8477+jpp59Wy5YtFRERoVmzZulPf/rTDY/76quvKjAwUDNmzND3338vPz8/tWjRQn/9618rNM7AgQN17tw5vf766xo9erQCAgLUq1evG64PAAAAAAAAwJWZLJdurgpUgcLCQvn6+mpSarbcvH3sXQ6A8rBY5HX2pIrca0kmk8bGBNi7IgBlMJvNys/PV1BQkHX/fADGxZwFbj7MW+DmYuQ5ezEnKygokI9P2TmZsSoHAAAAAAAAABDc3ojc3Fx5eXld9cjNzbV3iQAAAAAAAABuQuxxewPq1q2rjIyMMu8DAAAAAAAAQEUR3N4AJycnNWzY0N5lAAAAAAAAALjFsFUCAAAAAAAAABgMwS0AAAAAAAAAGAzBLQAAAAAAAAAYDMEtAAAAAAAAABgMwS0AAAAAAAAAGIyTvQtAzTEy2l9+fn72LgNAOZjNZuXnlyooqLYcHPgZHwAAAAAA1Y2/jQMAAAAAAACAwRDcAgAAAAAAAIDBENwCAAAAAAAAgMEQ3AIAAAAAAACAwRDcAgAAAAAAAIDBENwCAAAAAAAAgMEQ3AIAAAAAAACAwRDcAgAAAAAAAIDBONm7ANQc8w6dkJv3BXuXAVSZsTEB9i4BAAAAAADcIlhxCwAAAAAAAAAGQ3ALAAAAAAAAAAZDcAsAAAAAAAAABkNwCwAAAAAAAAAGQ3ALAAAAAAAAAAZDcAsAAAAAAAAABkNwCwAAAAAAAAAGQ3ALAAAAAAAAAAZDcAsAAAAAAAAABlMjgtv4+HiNHDnS7mPcKpKSkuTn52fvMgAAAAAAAIBblpO9C6gOq1atkrOzs73LAAAAAAAAAIByqRHBrb+/v71LuCmdP39eLi4u9i4DAAAAAAAAqHFq3FYJixcvVnh4uNzc3FSnTh316tXrusY8efKkBgwYoFq1asnDw0Ndu3ZVVlaW9f7F7QQ2btyoyMhIeXl5qUuXLsrLy7O2uXDhghISEuTn56fatWtrzJgxGjhwoHr06HHN569du1Z+fn4qLS2VJGVkZMhkMmns2LHWNkOGDNFTTz1lPf/4448VFRUlV1dXhYWFac6cOTZjhoWF6dVXX9WAAQPk4+OjZ555xvou9erVk4eHh3r27Klff/31uj4zAAAAAAAAAOVTI4Lbi/bu3auEhARNmTJFmZmZ2rBhg2JjY69rrEGDBmnv3r1as2aNvvzyS1ksFj344IMqKSmxtjlz5oxmz56tFStW6IsvvlBubq5Gjx5tvT9z5kwlJydr2bJlSktLU2FhoVavXl2u599///06ffq0Dhw4IElKTU1VQECAUlJSrG1SU1MVHx8vSdq3b5969+6tvn376vDhw0pMTNSECROUlJRkM+7s2bPVrFkzHThwQBMmTFB6erqefvppDR8+XBkZGXrggQc0derU6/rMAAAAAAAAAJRPjdgq4aLc3Fx5enqqW7du8vb2Vv369RUTE1PhcbKysrRmzRqlpaWpbdu2kqTk5GSFhoZq9erVevzxxyVJJSUlWrp0qe68805J0vDhwzVlyhTrOAsXLtS4cePUs2dPSdKiRYu0bt26ctXg6+ur5s2bKyUlRa1atVJKSopefPFFTZ48WUVFRSooKNB3332nuLg4SdLcuXPVoUMHTZgwQZLUqFEjHTlyRH//+981aNAg67jt27fXqFGjrOcTJkxQly5d9Morr1j77dy5Uxs2bLhqbcXFxSouLraeFxYWluudAAAAAAAAAPyuRq247dSpk+rXr68GDRqof//+Sk5O1pkzZyo8ztGjR+Xk5KTWrVtbr9WuXVsRERE6evSo9ZqHh4c1tJWkkJAQ5efnS5IKCgr0888/65577rHed3R0VMuWLctdR1xcnFJSUmSxWLR9+3Y9+uijioyM1I4dO5Samqq6desqPDzcWnO7du1s+rdr105ZWVnW7RYkqVWrVpe966XvKUlt2rQps64ZM2bI19fXeoSGhpb7nQAAAAAAAADUsODW29tb+/fv18qVKxUSEqKJEyeqWbNmOnXqVJU8z9nZ2ebcZDLJYrFU2vjx8fHasWOHDh48KGdnZzVu3Fjx8fFKSUlRamqqdbVtRXh6et5wXePGjVNBQYH1OH78+A2PCQAAAAAAANQkNSq4lSQnJyd17NhRs2bN0qFDh5STk6OtW7dWaIzIyEhduHBB6enp1mu//vqrMjMz1aRJk3KN4evrqzp16mjPnj3Wa6Wlpdq/f3+567i4z+3rr79uDWkvBrcpKSnW/W0v1pyWlmbTPy0tTY0aNZKjo+NVnxEZGWnznpK0a9euMutydXWVj4+PzQEAAAAAAACg/GrUHrdr167V999/r9jYWNWqVUvr1q2T2WxWREREhcYJDw/XI488oqFDh+qNN96Qt7e3xo4dq9tuu02PPPJIuccZMWKEZsyYoYYNG6px48ZauHChTp48KZPJVK7+tWrVUnR0tJKTk7Vo0SJJUmxsrHr37q2SkhKbFbejRo3S3XffrVdffVV9+vTRl19+qUWLFmnx4sVlPiMhIUHt2rXT7Nmz9cgjj2jjxo1l7m8LAAAAAAAA4MbVqBW3fn5+WrVqldq3b6/IyEgtXbpUK1euVFRUVIXHWrZsmVq2bKlu3bqpTZs2slgsWrdu3WXbI5RlzJgxeuKJJzRgwAC1adNGXl5e6ty5s9zc3Mo9RlxcnEpLS62ra/39/dWkSRMFBwfbBNItWrTQBx98oPfff1933XWXJk6cqClTpth8MdmV3HvvvXrzzTc1f/58NWvWTJs2bdLf/va3ctcHAAAAAAAAoOJMlsrcdBU3xGw2KzIyUr1799arr75q73IqTWFhoXx9fTUpNVtu3mybgFvX2JgAe5dQacxms/Lz8xUUFCQHhxr1Mz7gpsScBW4uzFng5sO8BW4uRp6zF3OygoKCa24vWqO2SjCaH374QZs2bVJcXJyKi4u1aNEiHTt2TE8++aS9SwMAAAAAAABgR8aKnO0kNzdXXl5eVz1yc3Or5LkODg5KSkrS3XffrXbt2unw4cPavHmzIiMj7VYTAAAAAAAAAPtjxa2kunXrKiMjo8z7VSE0NFRpaWmGqgkAAAAAAACA/RHcSnJyclLDhg3tXYYNI9YEAAAAAAAAoHqwVQIAAAAAAAAAGAzBLQAAAAAAAAAYDMEtAAAAAAAAABgMwS0AAAAAAAAAGAzBLQAAAAAAAAAYDMEtAAAAAAAAABiMk70LQM0xMtpffn5+9i4DAAAAAAAAMDxW3AIAAAAAAACAwRDcAgAAAAAAAIDBENwCAAAAAAAAgMEQ3AIAAAAAAACAwRDcAgAAAAAAAIDBENwCAAAAAAAAgMEQ3AIAAAAAAACAwTjZuwDUHPMOnZCb9wV7l4FbzNiYAHuXAAAAAAAAUOlYcQsAAAAAAAAABkNwCwAAAAAAAAAGQ3ALAAAAAAAAAAZDcAsAAAAAAAAABkNwCwAAAAAAAAAGQ3ALAAAAAAAAAAZDcAsAAAAAAAAABkNwCwAAAAAAAAAGQ3ALAAAAAAAAAAZDcAsAAAAAAAAABkNwW4Xi4+M1cuRIe5cBAAAAAAAA4CbjZO8CbmWrVq2Ss7OzvcsAAAAAAAAAcJMhuK1C/v7+9i6hSp0/f14uLi72LgMAAAAAAAC45bBVQhW6dKuExYsXKzw8XG5ubqpTp4569epVrjHCwsI0b948m2vNmzdXYmKi9dxkMmnJkiXq2rWr3N3d1aBBA3300UfW+zk5OTKZTHr//ffVtm1bubm56a677lJqaqrNuF999ZW6du0qLy8v1alTR/3799cvv/xi8z7Dhw/XyJEjFRAQoM6dO1fsAwEAAAAAAABQLgS31WDv3r1KSEjQlClTlJmZqQ0bNig2NrZSnzFhwgQ99thjOnjwoPr166e+ffvq6NGjNm1efvlljRo1SgcOHFCbNm3UvXt3/frrr5KkU6dOqX379oqJidHevXu1YcMG/fzzz+rdu7fNGMuXL5eLi4vS0tK0dOnSK9ZSXFyswsJCmwMAAAAAAABA+RHcVoPc3Fx5enqqW7duql+/vmJiYpSQkFCpz3j88cc1ZMgQNWrUSK+++qpatWqlhQsX2rQZPny4HnvsMUVGRmrJkiXy9fXV22+/LUlatGiRYmJiNH36dDVu3FgxMTF65513tG3bNn377bfWMcLDwzVr1ixFREQoIiLiirXMmDFDvr6+1iM0NLRS3xUAAAAAAAC41RHcVoNOnTqpfv36atCggfr376/k5GSdOXOmUp/Rpk2by87/uOL20jZOTk5q1aqVtc3Bgwe1bds2eXl5WY/GjRtLkrKzs639WrZsec1axo0bp4KCAutx/Pjx634vAAAAAAAAoCbiy8mqgbe3t/bv36+UlBRt2rRJEydOVGJiovbs2SM/P78y+zo4OMhisdhcKykpqfQai4qK1L17d82cOfOyeyEhIdZfe3p6XnMsV1dXubq6Vmp9AAAAAAAAQE3Cittq4uTkpI4dO2rWrFk6dOiQcnJytHXr1mv2CwwMVF5envW8sLBQx44du6zdrl27LjuPjIy8apsLFy5o37591jYtWrTQ119/rbCwMDVs2NDmKE9YCwAAAAAAAKDyENxWg7Vr12rBggXKyMjQDz/8oHfffVdms/mqe8Reqn379lqxYoW2b9+uw4cPa+DAgXJ0dLys3Ycffqh33nlH3377rSZNmqTdu3dr+PDhNm3+8Y9/6JNPPtE333yj559/XidPntSf//xnSdLzzz+vEydO6IknntCePXuUnZ2tjRs3avDgwSotLa2cDwIAAAAAAABAubBVQjXw8/PTqlWrlJiYqHPnzik8PFwrV65UVFTUNfuOGzdOx44dU7du3eTr66tXX331iituJ0+erPfff1/PPfecQkJCtHLlSjVp0sSmzWuvvabXXntNGRkZatiwodasWaOAgABJUt26dZWWlqYxY8boT3/6k4qLi1W/fn116dJFDg7k+wAAAAAAAEB1IritQikpKVf8dUX4+Pjo/ffft7k2cODAy9rVrVtXmzZtKnOsyMhIpaenX/V+eHi4Vq1addX71/sOAAAAAAAAACqGpZQAAAAAAAAAYDAEt3aUm5srLy+vqx65ubn2LhEAAAAAAACAHbBVgh3VrVtXGRkZZd4vD4vFUub9sLCwa7YBAAAAAAAAYBwEt3bk5OSkhg0b2rsMAAAAAAAAAAbDVgkAAAAAAAAAYDAEtwAAAAAAAABgMAS3AAAAAAAAAGAwBLcAAAAAAAAAYDAEtwAAAAAAAABgMAS3AAAAAAAAAGAwTvYuADXHyGh/+fn52bsMAAAAAAAAwPBYcQsAAAAAAAAABkNwCwAAAAAAAAAGQ3ALAAAAAAAAAAZDcAsAAAAAAAAABkNwCwAAAAAAAAAGQ3ALAAAAAAAAAAZDcAsAAAAAAAAABkNwCwAAAAAAAAAGQ3ALAAAAAAAAAAZDcAsAAAAAAAAABkNwCwAAAAAAAAAGQ3ALAAAAAAAAAAZDcAsAAAAAAAAABkNwCwAAAAAAAAAGQ3ALAAAAAAAAAAZDcAsAAAAAAAAABkNwCwAAAAAAAAAGQ3ALAAAAAAAAAAZDcAsAAAAAAAAABkNwCwAAAAAAAAAGQ3ALAAAAAAAAAAZDcAsAAAAAAAAABkNwCwAAAAAAAAAGQ3ALAAAAAAAAAAZDcAsAAAAAAAAABkNwCwAAAAAAAAAGQ3ALAAAAAAAAAAZDcAsAAAAAAAAABkNwCwAAAAAAAAAGQ3ALAAAAAAAAAAZDcAsAAAAAAAAABkNwCwAAAAAAAAAGQ3ALAAAAAAAAAAZDcAsAAAAAAAAABkNwCwAAAAAAAAAGQ3ALAAAAAAAAAAZDcAsAAAAAAAAABkNwCwAAAAAAAAAG42TvAnDrs1gskqTCwkI5OPCzAuBmYDabdfr0abm5uTFvgZsAcxa4uTBngZsP8xa4uRh5zhYWFkr6X15WFoJbVLlff/1VklS/fn07VwIAAAAAAADY3+nTp+Xr61tmG4JbVDl/f39JUm5u7jX/hQRgDIWFhQoNDdXx48fl4+Nj73IAXANzFri5MGeBmw/zFri5GHnOWiwWnT59WnXr1r1mW4JbVLmLS9J9fX0NN1kAlM3Hx4d5C9xEmLPAzYU5C9x8mLfAzcWoc7a8CxuNtckDAAAAAAAAAIDgFgAAAAAAAACMhuAWVc7V1VWTJk2Sq6urvUsBUE7MW+DmwpwFbi7MWeDmw7wFbi63ypw1WSwWi72LAAAAAAAAAAD8DytuAQAAAAAAAMBgCG4BAAAAAAAAwGAIbgEAAAAAAADAYAhucV3+8Y9/KCwsTG5ubmrdurV2795dZvsPP/xQjRs3lpubm5o2bap169bZ3LdYLJo4caJCQkLk7u6ujh07KisrqypfAahRKnPOlpSUaMyYMWratKk8PT1Vt25dDRgwQD/++GNVvwZQo1T277WXGjZsmEwmk+bNm1fJVQM1V1XM2aNHj+rhhx+Wr6+vPD09dffddys3N7eqXgGoUSp7zhYVFWn48OG6/fbb5e7uriZNmmjp0qVV+QpAjVKROfv111/rscceU1hYWJl/5q3o/w/YA8EtKuzf//63XnrpJU2aNEn79+9Xs2bN1LlzZ+Xn51+x/c6dO/XEE0/o6aef1oEDB9SjRw/16NFDX331lbXNrFmztGDBAi1dulTp6eny9PRU586dde7cuep6LeCWVdlz9syZM9q/f78mTJig/fv3a9WqVcrMzNTDDz9cna8F3NKq4vfaiz755BPt2rVLdevWrerXAGqMqpiz2dnZuu+++9S4cWOlpKTo0KFDmjBhgtzc3KrrtYBbVlXM2ZdeekkbNmzQv/71Lx09elQjR47U8OHDtWbNmup6LeCWVdE5e+bMGTVo0ECvvfaagoODK2VMu7EAFXTPPfdYnn/+eet5aWmppW7dupYZM2ZcsX3v3r0tDz30kM211q1bW5599lmLxWKxmM1mS3BwsOXvf/+79f6pU6csrq6ulpUrV1bBGwA1S2XP2SvZvXu3RZLlhx9+qJyigRququbt//3f/1luu+02y1dffWWpX7++5fXXX6/02oGaqCrmbJ8+fSxPPfVU1RQM1HBVMWejoqIsU6ZMsWnTokULy/jx4yuxcqBmquicvdTV/sx7I2NWJ1bcokLOnz+vffv2qWPHjtZrDg4O6tixo7788ssr9vnyyy9t2ktS586dre2PHTumn376yaaNr6+vWrdufdUxAZRPVczZKykoKJDJZJKfn1+l1A3UZFU1b81ms/r376+XX35ZUVFRVVM8UANVxZw1m8367LPP1KhRI3Xu3FlBQUFq3bq1Vq9eXWXvAdQUVfX7bNu2bbVmzRr9v//3/2SxWLRt2zZ9++23+tOf/lQ1LwLUENczZ+0xZlUhuEWF/PLLLyotLVWdOnVsrtepU0c//fTTFfv89NNPZba/+L8VGRNA+VTFnP2jc+fOacyYMXriiSfk4+NTOYUDNVhVzduZM2fKyclJCQkJlV80UINVxZzNz89XUVGRXnvtNXXp0kWbNm1Sz5499eijjyo1NbVqXgSoIarq99mFCxeqSZMmuv322+Xi4qIuXbroH//4h2JjYyv/JYAa5HrmrD3GrCpO9i4AAHDzKikpUe/evWWxWLRkyRJ7lwPgKvbt26f58+dr//79MplM9i4HwDWYzWZJ0iOPPKIXX3xRktS8eXPt3LlTS5cuVVxcnD3LA3AFCxcu1K5du7RmzRrVr19fX3zxhZ5//nnVrVv3stW6AFBerLhFhQQEBMjR0VE///yzzfWff/75qhs+BwcHl9n+4v9WZEwA5VMVc/aii6HtDz/8oM8//5zVtkAlqYp5u337duXn56tevXpycnKSk5OTfvjhB40aNUphYWFV8h5ATVEVczYgIEBOTk5q0qSJTZvIyEjl5uZWYvVAzVMVc/bs2bP661//qrlz56p79+6Kjo7W8OHD1adPH82ePbtqXgSoIa5nztpjzKpCcIsKcXFxUcuWLbVlyxbrNbPZrC1btqhNmzZX7NOmTRub9pL0+eefW9vfcccdCg4OtmlTWFio9PT0q44JoHyqYs5K/wtts7KytHnzZtWuXbtqXgCogapi3vbv31+HDh1SRkaG9ahbt65efvllbdy4sepeBqgBqmLOuri46O6771ZmZqZNm2+//Vb169ev5DcAapaqmLMlJSUqKSmRg4NtxOLo6GhdQQ/g+lzPnLXHmFXG3t+OhpvP+++/b3F1dbUkJSVZjhw5YnnmmWcsfn5+lp9++slisVgs/fv3t4wdO9baPi0tzeLk5GSZPXu25ejRo5ZJkyZZnJ2dLYcPH7a2ee211yx+fn6WTz/91HLo0CHLI488YrnjjjssZ8+erfb3A241lT1nz58/b3n44Yctt99+uyUjI8OSl5dnPYqLi+3yjsCtpip+r/2jq33DLoCKq4o5u2rVKouzs7Pln//8pyUrK8uycOFCi6Ojo2X79u3V/n7AraYq5mxcXJwlKirKsm3bNsv3339vWbZsmcXNzc2yePHian8/4FZT0TlbXFxsOXDggOXAgQOWkJAQy+jRoy0HDhywZGVllXtMoyC4xXVZuHChpV69ehYXFxfLPffcY9m1a5f1XlxcnGXgwIE27T/44ANLo0aNLC4uLpaoqCjLZ599ZnPfbDZbJkyYYKlTp47F1dXV0qFDB0tmZmZ1vApQI1TmnD127JhF0hWPbdu2VdMbAbe+yv699o8IboHKVRVz9u2337Y0bNjQ4ubmZmnWrJll9erVVf0aQI1R2XM2Ly/PMmjQIEvdunUtbm5uloiICMucOXMsZrO5Ol4HuOVVZM5e7e+scXFx5R7TKEwWi8Vip8W+AAAAAAAAAIArYI9bAAAAAAAAADAYglsAAAAAAAAAMBiCWwAAAAAAAAAwGIJbAAAAAAAAADAYglsAAAAAAAAAMBiCWwAAAAAAAAAwGIJbAAAAAAAAADAYglsAAAAAAAAAMBiCWwAAAAAAAAAwGIJbAAAA3NIGDRokk8l02fHdd99VyvhJSUny8/OrlLGu16BBg9SjRw+71lCWnJwcmUwmZWRk2LsUAACAm4aTvQsAAAAAqlqXLl20bNkym2uBgYF2qubqSkpK5OzsbO8yKtX58+ftXQIAAMBNiRW3AAAAuOW5uroqODjY5nB0dJQkffrpp2rRooXc3NzUoEEDTZ48WRcuXLD2nTt3rpo2bSpPT0+FhobqueeeU1FRkSQpJSVFgwcPVkFBgXUlb2JioiTJZDJp9erVNnX4+fkpKSlJ0v9Wof773/9WXFyc3NzclJycLEl66623FBkZKTc3NzVu3FiLFy+u0PvGx8drxIgRGjlypGrVqqU6derozTff1G+//abBgwfL29tbDRs21Pr16619UlJSZDKZ9Nlnnyk6Olpubm6699579dVXX9mM/fHHHysqKkqurq4KCwvTnDlzbO6HhYXp1Vdf1YABA+Tj46NnnnlGd9xxhyQpJiZGJpNJ8fHxkqQ9e/aoU6dOCggIkK+vr+Li4rR//36b8Uwmk9566y317NlTHh4eCg8P15o1a2zafP311+rWrZt8fHzk7e2t+++/X9nZ2db7N/p5AgAA2APBLQAAAGqs7du3a8CAAXrhhRd05MgRvfHGG0pKStK0adOsbRwcHLRgwQJ9/fXXWr58ubZu3apXXnlFktS2bVvNmzdPPj4+ysvLU15enkaPHl2hGsaOHasXXnhBR48eVefOnZWcnKyJEydq2rRpOnr0qKZPn64JEyZo+fLlFRp3+fLlCggI0O7duzVixAj95S9/0eOPP662bdtq//79+tOf/qT+/fvrzJkzNv1efvllzZkzR3v27FFgYKC6d++ukpISSdK+ffvUu3dv9e3bV4cPH1ZiYqImTJhgDaMvmj17tpo1a6YDBw5owoQJ2r17tyRp8+bNysvL06pVqyRJp0+f1sCBA7Vjxw7t2rVL4eHhevDBB3X69Gmb8SZP/v/t3VtI1M0fx/GPGp6W2tBUktIkSwwP4KGyMrGIQgwlJEMRIwsKwqCSkERQKyuwLMUKCwspzC66MCiizIsWvSg6ENiBDhRhSbYgJqWu81w8tLRpUv371/L0fsHCb2ZnZ2e+lx9mZyu0du1a3b9/XxkZGcrPz9f79+8lSa9fv9bSpUvl4+Oj9vZ23b59Wxs2bHCG77+qngAAAL+dAQAAAP7DCgsLjZeXl7FYLM5XTk6OMcaY5cuXm3379rmMb25uNtOnT//mfBcuXDCBgYHOdlNTk7FarWPGSTIXL1506bNaraapqckYY8zz58+NJFNbW+syZvbs2ebcuXMufVVVVSYlJWXCPWZlZTnbaWlpZsmSJc72yMiIsVgspqCgwNnX09NjJJnOzk5jjDE3btwwkkxLS4tzTF9fn/Hz8zPnz583xhiTl5dnVqxY4fLdJSUlZt68ec52eHi4yc7Odhnzea937tz55h6MMcbhcJjJkyebtrY2Z58kU1ZW5mwPDAwYSeby5cvGGGNKS0tNRESEGRoaGnfOn6knAACAO+COWwAAAPznpaen69ixY862xWKRJN27d082m83lhK3D4dDHjx81ODgof39/Xbt2TdXV1Xr48KH6+/s1MjLi8v7/Kikpyfn84cMHPX36VEVFRdq0aZOzf2RkRFar9YfmjYuLcz57eXkpMDBQsbGxzr6QkBBJUm9vr8vnUlJSnM8BAQGKiopSd3e3JKm7u1tZWVku4xcvXqza2lo5HA7n9RNf7mkib9++VVlZmTo6OtTb2yuHw6HBwUG9fPnym3uxWCyaMmWKc913795VamrquHcD/8p6AgAA/G4EtwAAAPjPs1gsioyMHNM/MDCgiooKrVmzZsx7vr6+evHihTIzM7Vlyxbt3btXAQEBunnzpoqKijQ0NDRhcOvh4SFjjEvf5ysHvl7bl+uRpMbGRi1YsMBl3OdQ9Ht9HWR6eHi49Hl4eEiSRkdHf2je7/HlniZSWFiovr4+HTlyROHh4fLx8VFKSsqYPzQbby+f1+3n5/fN+X9lPQEAAH43glsAAAD8tRISEvTo0aNxQ13p3ztdR0dHVVNTI0/Pf/8eorW11WWMt7e3HA7HmM8GBQWpp6fH2X7y5MmY+2S/FhISotDQUD179kz5+fk/up1foqurS2FhYZIku92ux48fKzo6WpIUHR0tm83mMt5ms2nu3LkTBqHe3t6SNKZONptNDQ0NysjIkCS9evVK7969+6H1xsXF6cyZMxoeHh4T8LpDPQEAAH4WwS0AAAD+WuXl5crMzFRYWJhycnLk6empe/fu6cGDB9qzZ48iIyM1PDysuro6rV69WjabTcePH3eZY9asWRoYGND169cVHx8vf39/+fv7a9myZaqvr1dKSoocDod27do17s/5v1ZRUaHi4mJZrVatWrVKnz590q1bt2S327V9+/b/VymcKisrFRgYqJCQEO3evVvTpk1Tdna2JGnHjh1KTk5WVVWVcnNz1dnZqfr6ejU0NEw4Z3BwsPz8/HTlyhXNmDFDvr6+slqtmjNnjpqbm5WUlKT+/n6VlJRMeIJ2PFu3blVdXZ3WrVun0tJSWa1WdXV1af78+YqKivrj9QQAAPhZnn96AQAAAMCfsnLlSl26dElXr15VcnKyFi5cqMOHDys8PFySFB8fr0OHDunAgQOKiYnR2bNnVV1d7TLHokWLtHnzZuXm5iooKEgHDx6UJNXU1GjmzJlKTU1VXl6edu7c+V134m7cuFEnT55UU1OTYmNjlZaWptOnTysiIuLXF2Ac+/fv17Zt25SYmKg3b96ora3NeWI2ISFBra2tamlpUUxMjMrLy1VZWan169dPOOekSZN09OhRnThxQqGhoc57ck+dOiW73a6EhAQVFBSouLhYwcHBP7TewMBAtbe3a2BgQGlpaUpMTFRjY6MzJP/T9QQAAPhZHubri7cAAAAA/HU6OjqUnp4uu92uqVOn/unlAAAA/PU4cQsAAAAAAAAAbobgFgAAAAAAAADcDFclAAAAAAAAAICb4cQtAAAAAAAAALgZglsAAAAAAAAAcDMEtwAAAAAAAADgZghuAQAAAAAAAMDNENwCAAAAAAAAgJshuAUAAAAAAAAAN0NwCwAAAAAAAABuhuAWAAAAAAAAANwMwS0AAAAAAAAAuJl/AMQYIRn2XkvlAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "💡 INSIGHTS FROM FEATURE IMPORTANCE:\n", + " • Most important feature: prev_length\n", + " • PhoBERT token features rank: [np.int64(2), np.int64(3), np.int64(9), np.int64(13), np.int64(15), np.int64(21)]\n", + " • Vietnamese patterns contribute: 1.2% of total importance\n", + " • Context features (prev/next) contribute: 10.5%\n" + ] + } + ], + "source": [ + "# PhoBERT Feature Importance Analysis\n", + "# ===========================================\n", + "\n", + "print(\"🔍 Analyzing PhoBERT feature importance...\")\n", + "print(\"This shows which features are most valuable for NER decisions\")\n", + "print()\n", + "\n", + "# Define feature names with detailed descriptions\n", + "phobert_feature_names = [\n", + " # Basic word features (1-8) + 5\n", + " 'is_title', 'is_lower', 'is_upper', 'is_digit', 'is_alpha', 'word_length',\n", + " 'is_long_word', 'is_short_word',\n", + "\n", + " # PhoBERT tokenizer features (9-12)\n", + " 'token_id', 'token_id_mod', 'token_id_div', 'subtoken_count',\n", + "\n", + " # Vietnamese-specific features (13-22) + 3\n", + " 'starts_Ng', 'starts_Tr', 'starts_Lê', 'starts_Phạm', 'starts_Vũ', 'starts_Phan', 'starts_Trương', 'starts_Bùi', 'starts_Đặng'\n", + " 'ends_nh', 'ends_ại', 'ends_ương', 'has_Thành', 'has_phố', 'has_tỉnh', 'has_quận', 'has_huyện', 'has_xã',\n", + "\n", + " # Position and context features (23-26)\n", + " 'abs_position', 'rel_position', 'is_beginning', 'is_end',\n", + "\n", + " # Previous token context (27-30)\n", + " 'prev_is_title', 'prev_is_lower', 'prev_token_id_mod', 'prev_length',\n", + "\n", + " # Next token context (31-34)\n", + " 'next_is_title', 'next_is_lower', 'next_token_id_mod', 'next_length',\n", + "\n", + " # Character-level features (35-40) => 48\n", + " 'has_digits', 'has_hyphen', 'has_period', 'has_comma', 'underscore_count', 'is_numeric'\n", + "]\n", + "\n", + "# Get feature importance from trained model\n", + "phobert_importances = phobert_rf_model.feature_importances_[0:47] # ??? How the FUCK is there 1 extra dimension\n", + "\n", + "# Create feature importance DataFrame\n", + "phobert_feature_importance_df = pd.DataFrame({\n", + " 'feature': phobert_feature_names,\n", + " 'importance': phobert_importances,\n", + " 'rank': range(1, len(phobert_feature_names) + 1)\n", + "}).sort_values('importance', ascending=False)\n", + "\n", + "# Reset rank after sorting\n", + "phobert_feature_importance_df['rank'] = range(1, len(phobert_feature_importance_df) + 1)\n", + "\n", + "print(\"🏆 TOP 15 MOST IMPORTANT PHOBERT FEATURES:\")\n", + "print(\"=\" * 70)\n", + "for i, row in phobert_feature_importance_df.head(15).iterrows():\n", + " print(f\"{row['rank']:2d}. {row['feature']:20s} | {row['importance']:.4f} | {row['importance']*100:.1f}%\")\n", + "print(\"=\" * 70)\n", + "print()\n", + "\n", + "# Analyze feature categories\n", + "print(\"📊 FEATURE CATEGORY ANALYSIS:\")\n", + "category_importance = {\n", + " 'Basic Word Features': phobert_importances[0:8].sum(),\n", + " 'PhoBERT Features': phobert_importances[8:12].sum(),\n", + " 'Vietnamese Patterns': phobert_importances[12:22].sum(),\n", + " 'Position/Context': phobert_importances[22:26].sum(),\n", + " 'Previous Token': phobert_importances[26:30].sum(),\n", + " 'Next Token': phobert_importances[30:34].sum(),\n", + " 'Character Patterns': phobert_importances[34:40].sum()\n", + "}\n", + "\n", + "for category, importance in sorted(category_importance.items(), key=lambda x: x[1], reverse=True):\n", + " print(f\" • {category:20s}: {importance:.4f} ({importance*100:.1f}%)\")\n", + "print()\n", + "\n", + "# Create visualization\n", + "plt.figure(figsize=(14, 10))\n", + "top_features = phobert_feature_importance_df.head(20)\n", + "plt.barh(range(len(top_features)), top_features['importance'], color='skyblue')\n", + "plt.yticks(range(len(top_features)), top_features['feature'])\n", + "plt.xlabel('Feature Importance')\n", + "plt.title('Top 20 PhoBERT Feature Importance for Random Forest NER\\n(Higher values = More important for NER decisions)')\n", + "plt.gca().invert_yaxis() # Most important at top\n", + "plt.tight_layout()\n", + "plt.grid(axis='x', alpha=0.3)\n", + "plt.show()\n", + "\n", + "print(\"💡 INSIGHTS FROM FEATURE IMPORTANCE:\")\n", + "print(f\" • Most important feature: {phobert_feature_importance_df.iloc[0]['feature']}\")\n", + "print(f\" • PhoBERT token features rank: {list(phobert_feature_importance_df[phobert_feature_importance_df['feature'].str.contains('token')]['rank'].values)}\")\n", + "print(f\" • Vietnamese patterns contribute: {category_importance['Vietnamese Patterns']*100:.1f}% of total importance\")\n", + "print(f\" • Context features (prev/next) contribute: {(category_importance['Previous Token'] + category_importance['Next Token'])*100:.1f}%\")" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "khRcnxRrbHWK", + "outputId": "46df401a-5457-42b6-e3b6-5d86f1060e5e" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "✅ PhoBERT prediction function created\n", + "\n", + "🧪 TESTING PHOBERT PREDICTION FUNCTION:\n", + "============================================================\n", + "\n", + "📝 Test Case 1 (Sentence 5):\n", + "🔮 Predicting NER tags for 28 tokens...\n", + " Tokens: ['Cách' 'đây' 'hai' 'tháng' 'những' 'người' 'thợ' 'phía' 'nam' 'Hải_Vân'\n", + " 'đã' 'về' '\"' 'đích' '\"' 'với' 'chiều' 'dài' 'hầm' 'hơn' '4.800' 'm' '('\n", + " 'chính' 'và' 'phụ' ')' '.']\n", + " True tags: ['O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'B-LOC', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O']\n", + " Predicted: [np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('B-LOC'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O')]\n", + " Accuracy: 100.00%\n", + " Match: ['✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓']\n", + "\n", + "📝 Test Case 2 (Sentence 10):\n", + "🔮 Predicting NER tags for 36 tokens...\n", + " Tokens: ['Người' 'môi_giới' 'Malaysia' 'đưa' 'chúng_tôi' 'đến' 'thăm' 'chỗ' 'ở'\n", + " 'của' 'LĐ' ',' 'tình_cờ' 'chứng_kiến' 'một' 'sự_việc' 'đau_lòng' 'khi'\n", + " 'hai' 'nhân_viên' 'bảo_vệ' 'khu' 'nhà' 'đang' 'chuẩn_bị' 'đạp' 'tung'\n", + " 'một' 'cánh' 'cửa' 'phòng' 'của' 'nữ' 'LĐ' 'VN' '.']\n", + " True tags: ['O', 'O', 'B-LOC', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'B-LOC', 'O']\n", + " Predicted: [np.str_('O'), np.str_('O'), np.str_('B-LOC'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('B-LOC'), np.str_('O')]\n", + " Accuracy: 100.00%\n", + " Match: ['✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓']\n", + "\n", + "📝 Test Case 3 (Sentence 15):\n", + "🔮 Predicting NER tags for 25 tokens...\n", + " Tokens: ['Đằng' 'sau' 'những' 'khát_vọng' 'đổi_đời' 'ấy' 'là' 'những' 'người'\n", + " 'cha' ',' 'người' 'mẹ' 'và' 'cả' 'những' 'người' 'bạn' 'cùng' 'lớp'\n", + " 'âm_thầm' 'thắp' 'lửa' 'yêu_thương' '.']\n", + " True tags: ['O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O']\n", + " Predicted: [np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O')]\n", + " Accuracy: 100.00%\n", + " Match: ['✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓']\n", + "\n", + "📝 Test Case 4 (Sentence 25):\n", + "🔮 Predicting NER tags for 38 tokens...\n", + " Tokens: ['Trong' 'khi' 'đó' 'một' 'nhóm' 'ngư_dân' 'Indonesia' 'đang' 'túm_tụm'\n", + " 'trên' 'phà' 'xem' 'báo' ',' 'họ' 'bàn_tán' 'ghê' 'lắm' 'về' 'thông_tin'\n", + " 'Bộ' 'Quốc_phòng' 'Indonesia' 'đang' 'đặt' 'mua' '22' 'tàu_chiến' 'loại'\n", + " 'hiện_đại' 'nhất' 'để' 'tăng_cường' 'tuần_tra' 'trên' 'vùng' 'eo_biển'\n", + " '.']\n", + " True tags: ['O', 'O', 'O', 'O', 'O', 'O', 'B-LOC', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'B-ORG', 'I-ORG', 'I-ORG', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O']\n", + " Predicted: [np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('B-LOC'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('B-ORG'), np.str_('I-ORG'), np.str_('I-ORG'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O'), np.str_('O')]\n", + " Accuracy: 100.00%\n", + " Match: ['✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓', '✓']\n", + "\n", + "============================================================\n", + "💡 PREDICTION INSIGHTS:\n", + " • Each token gets 40 PhoBERT-enhanced features\n", + " • Model considers context (previous/next tokens)\n", + " • Vietnamese-specific patterns help with person/place names\n", + " • PhoBERT tokenization provides semantic understanding\n" + ] + } + ], + "source": [ + "# CELL 7: PhoBERT Random Forest Prediction Function\n", + "# ================================================\n", + "\n", + "def predict_ner_with_phobert_rf(sentence_tokens, model, tokenizer):\n", + " \"\"\"\n", + " PREDICTION FUNCTION: Predict NER tags for new sentences\n", + "\n", + " Process:\n", + " 1. For each token in the sentence, extract PhoBERT-enhanced features\n", + " 2. Use the same feature extraction as training (40 features)\n", + " 3. Apply the trained Random Forest model\n", + " 4. Return predicted NER tags\n", + "\n", + " Input:\n", + " - sentence_tokens: List of tokens [\"Nguyễn\", \"Văn\", \"A\", \"sống\", \"ở\", \"Hà\", \"Nội\"]\n", + " - model: Trained PhoBERT Random Forest model\n", + " - tokenizer: PhoBERT tokenizer\n", + "\n", + " Output:\n", + " - List of predicted NER tags [\"B-PER\", \"I-PER\", \"I-PER\", \"O\", \"O\", \"B-LOC\", \"I-LOC\"]\n", + " \"\"\"\n", + " sentence_length = len(sentence_tokens)\n", + " predictions = []\n", + "\n", + " print(f\"🔮 Predicting NER tags for {sentence_length} tokens...\")\n", + "\n", + " for pos, token in enumerate(sentence_tokens):\n", + " # Get context tokens (previous and next)\n", + " prev_token = sentence_tokens[pos-1] if pos > 0 else None\n", + " next_token = sentence_tokens[pos+1] if pos < len(sentence_tokens)-1 else None\n", + "\n", + " # Get PhoBERT token ID for this token\n", + " token_ids = tokenizer.encode(token, add_special_tokens=False)\n", + " main_token_id = token_ids[0] if token_ids else 0\n", + "\n", + " # Extract the same 40 features used in training\n", + " word_features = extract_phobert_token_features(\n", + " token=token,\n", + " label=None, # We don't know the true label when predicting\n", + " token_id=main_token_id,\n", + " position=pos,\n", + " sentence_length=sentence_length,\n", + " prev_token=prev_token,\n", + " next_token=next_token,\n", + " tokenizer=tokenizer\n", + " )\n", + "\n", + " # Make prediction using trained model\n", + " # model.predict expects 2D array, so we wrap in list: [word_features]\n", + " pred_tag = model.predict([word_features])[0]\n", + " predictions.append(pred_tag)\n", + "\n", + " return predictions\n", + "\n", + "print(\"✅ PhoBERT prediction function created\")\n", + "print()\n", + "\n", + "# Test the prediction function with multiple samples\n", + "print(\"🧪 TESTING PHOBERT PREDICTION FUNCTION:\")\n", + "print(\"=\" * 60)\n", + "\n", + "# Test with different sample indices to show variety\n", + "test_indices = [5, 10, 15, 25]\n", + "\n", + "for i, sample_idx in enumerate(test_indices):\n", + " print(f\"\\n📝 Test Case {i+1} (Sentence {sample_idx}):\")\n", + "\n", + " sample_tokens = df.iloc[sample_idx]['tokens']\n", + " sample_true_tags = df.iloc[sample_idx]['ner_labels']\n", + "\n", + " # Make prediction\n", + " sample_phobert_pred = predict_ner_with_phobert_rf(sample_tokens, phobert_rf_model, tokenizer)\n", + "\n", + " print(f\" Tokens: {sample_tokens}\")\n", + " print(f\" True tags: {sample_true_tags}\")\n", + " print(f\" Predicted: {sample_phobert_pred}\")\n", + "\n", + " # Calculate accuracy for this sample\n", + " sample_accuracy = sum(t == p for t, p in zip(sample_true_tags, sample_phobert_pred)) / len(sample_true_tags)\n", + " print(f\" Accuracy: {sample_accuracy:.2%}\")\n", + "\n", + " # Show which predictions were correct/incorrect\n", + " correct_predictions = [\"✓\" if t == p else \"✗\" for t, p in zip(sample_true_tags, sample_phobert_pred)]\n", + " print(f\" Match: {correct_predictions}\")\n", + "\n", + "print(\"\\n\" + \"=\" * 60)\n", + "print(\"💡 PREDICTION INSIGHTS:\")\n", + "print(\" • Each token gets 40 PhoBERT-enhanced features\")\n", + "print(\" • Model considers context (previous/next tokens)\")\n", + "print(\" • Vietnamese-specific patterns help with person/place names\")\n", + "print(\" • PhoBERT tokenization provides semantic understanding\")" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": { + "id": "KeVUuXHkbIg1" + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "accelerator": "TPU", + "colab": { + "gpuType": "V28", + "machine_shape": "hm", + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + }, + "widgets": { + "application/vnd.jupyter.widget-state+json": { + "02efe4dc0e34428f87d00571063a2342": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "09d63d9c6e3b4befb2d13ed56eb1fecf": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "0b42f930dcd949ee9df45dc2cd860214": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "132e7ba656334ec59ac72679c126bf27": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_bb767d0faca34e619107546b439b607f", + "IPY_MODEL_1b9c56a6995a40d59f64bccc7f679e07", + "IPY_MODEL_3c6d843da9bf44d3b971c4443c44a255" + ], + "layout": "IPY_MODEL_220afa91ce9f4d67934243437259faa6" + } + }, + "16a99b74cefa4f0e870e93776897feca": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_539f3fb7d9764596b3496609617e9df4", + "placeholder": "​", + "style": "IPY_MODEL_70035b06e7c14e54ba0a06fb59c66546", + "value": " 895k/895k [00:00<00:00, 14.4MB/s]" + } + }, + "19382d4c6ac74aa190a891fa855a8fdd": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_84087d814eb9493693cbba7e84db4a62", + "IPY_MODEL_32bcd44ab58e4349b66ccb144b7a5eb1", + "IPY_MODEL_a9b4d1e29f7645fd90a86c407bb97eb9" + ], + "layout": "IPY_MODEL_858e486c77e94ef0a0720e4d204e10b9" + } + }, + "1b9c56a6995a40d59f64bccc7f679e07": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "FloatProgressModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "success", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_62cb290b834a4378b43fd8a5424d3557", + "max": 678, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_265686ab8b4e4c66bf419f6391cad15e", + "value": 678 + } + }, + "220afa91ce9f4d67934243437259faa6": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "222c29ec297f400ea78c758563378f8a": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "265686ab8b4e4c66bf419f6391cad15e": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ProgressStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "2b11610bd8d94a81863e99debe1e6905": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "3116450c8884414ab14124212ba0b3ef": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ProgressStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "31566827dfab451db0ca2a06458efaa3": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_2b11610bd8d94a81863e99debe1e6905", + "placeholder": "​", + "style": "IPY_MODEL_71c48602225b41449f5b5cbc53d519dc", + "value": "bpe.codes: 100%" + } + }, + "32bcd44ab58e4349b66ccb144b7a5eb1": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "FloatProgressModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "success", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_fc5c675a5c0a4058a683318491f6e6da", + "max": 540322347, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_4958e837d8664a298f32b7e88825fbf7", + "value": 540322347 + } + }, + "35144d338b1249278eef607e9f84c57a": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_7a39143f21d2438e80e32a7f0ac407a4", + "placeholder": "​", + "style": "IPY_MODEL_3dcbe597c2af44ab8672a58304317ff9", + "value": " 540M/540M [00:13<00:00, 49.9MB/s]" + } + }, + "3c6d843da9bf44d3b971c4443c44a255": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_02efe4dc0e34428f87d00571063a2342", + "placeholder": "​", + "style": "IPY_MODEL_3f65300df13246168e409be8852ac5ea", + "value": " 678/678 [00:00<00:00, 74.7kB/s]" + } + }, + "3d808cb829044c01b8cbdca369a16e3a": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "3dcbe597c2af44ab8672a58304317ff9": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "3f65300df13246168e409be8852ac5ea": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "4958e837d8664a298f32b7e88825fbf7": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ProgressStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "539f3fb7d9764596b3496609617e9df4": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "53dbc1a7391648d0a033644c2a97b4c2": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ProgressStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "583d9194818b452c8f8531005a5802ba": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_7a1d4efa4f394010b9e8f6b72f457f0c", + "placeholder": "​", + "style": "IPY_MODEL_aa5355a04ee34ba99567184381985f82", + "value": " 3.13M/3.13M [00:00<00:00, 38.1MB/s]" + } + }, + "5958c45737064862858bf130b105ec08": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "5a809d0a194c4e04a3a3f99ca4d98b5c": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "FloatProgressModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "success", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_b73314b6559c492f851262eba512aa3c", + "max": 540281612, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_53dbc1a7391648d0a033644c2a97b4c2", + "value": 540281612 + } + }, + "60443f69792b4726b8cf2a038a241022": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_dc92fe258486439394f2841363d4286b", + "IPY_MODEL_bc2cff635fb549549afb10cd81ec252a", + "IPY_MODEL_583d9194818b452c8f8531005a5802ba" + ], + "layout": "IPY_MODEL_8fa670c708c34020b46f4db42341779b" + } + }, + "6063b69b0af744d9b31dc9d20c029c99": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "62cb290b834a4378b43fd8a5424d3557": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "6954c314e1e844e49407fb2236ea76a9": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_31566827dfab451db0ca2a06458efaa3", + "IPY_MODEL_f8ef07a5c6fd4bca98efdf435d883f4c", + "IPY_MODEL_c67c2df8fc294b9b8fbf0055dd2ded6c" + ], + "layout": "IPY_MODEL_f4308d3a141e454cb2c1602cba4a06aa" + } + }, + "6b42472a431141e182c422381ec84106": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "70035b06e7c14e54ba0a06fb59c66546": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "71c48602225b41449f5b5cbc53d519dc": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "7a1d4efa4f394010b9e8f6b72f457f0c": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "7a39143f21d2438e80e32a7f0ac407a4": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "7d81164902f44d289148260c2584782e": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_d32f4b409484471891cf68e295afc1e5", + "placeholder": "​", + "style": "IPY_MODEL_8b865a52c0c1492283a00e7fef9a2697", + "value": "model.safetensors: 100%" + } + }, + "82fe50de6b0945198fae9f532324e7fd": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "83930005bf7443b08835dae0ceb66457": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ProgressStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "84087d814eb9493693cbba7e84db4a62": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_09d63d9c6e3b4befb2d13ed56eb1fecf", + "placeholder": "​", + "style": "IPY_MODEL_d5d0d780b2464843a1d380f0a4c0fbbc", + "value": "pytorch_model.bin: 100%" + } + }, + "858e486c77e94ef0a0720e4d204e10b9": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "8b0f3136fecc4965a76df8c8dee661ce": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "FloatProgressModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "success", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_f4f3815411b24674bfb51ab242832999", + "max": 895321, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_83930005bf7443b08835dae0ceb66457", + "value": 895321 + } + }, + "8b865a52c0c1492283a00e7fef9a2697": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "8d018b3f1f2e4ac699f5051019b9af74": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_7d81164902f44d289148260c2584782e", + "IPY_MODEL_5a809d0a194c4e04a3a3f99ca4d98b5c", + "IPY_MODEL_35144d338b1249278eef607e9f84c57a" + ], + "layout": "IPY_MODEL_b283351b3c9f4b1fb9801e2bafcc3ac7" + } + }, + "8ef031c9d4b84a62a20b47d338a3dc2d": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "8fa670c708c34020b46f4db42341779b": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "a7a6d4796d0349b99abb511f3ff9823b": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "a9b4d1e29f7645fd90a86c407bb97eb9": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_82fe50de6b0945198fae9f532324e7fd", + "placeholder": "​", + "style": "IPY_MODEL_222c29ec297f400ea78c758563378f8a", + "value": " 540M/540M [00:01<00:00, 290MB/s]" + } + }, + "aa5355a04ee34ba99567184381985f82": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "b283351b3c9f4b1fb9801e2bafcc3ac7": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "b73314b6559c492f851262eba512aa3c": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "bb767d0faca34e619107546b439b607f": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_6b42472a431141e182c422381ec84106", + "placeholder": "​", + "style": "IPY_MODEL_c9e12698a123442093c2bd71d7c5775a", + "value": "config.json: 100%" + } + }, + "bc2cff635fb549549afb10cd81ec252a": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "FloatProgressModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "success", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_e29a696703cc4f87a12fc6e98f2cbcf8", + "max": 3132320, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_3116450c8884414ab14124212ba0b3ef", + "value": 3132320 + } + }, + "c67c2df8fc294b9b8fbf0055dd2ded6c": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_6063b69b0af744d9b31dc9d20c029c99", + "placeholder": "​", + "style": "IPY_MODEL_3d808cb829044c01b8cbdca369a16e3a", + "value": " 1.14M/1.14M [00:00<00:00, 20.9MB/s]" + } + }, + "c9e12698a123442093c2bd71d7c5775a": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "cc286fe8ebb64f03acf68fc630cedfe0": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_fec4bac1a3344aad9f168be02dba98f2", + "placeholder": "​", + "style": "IPY_MODEL_5958c45737064862858bf130b105ec08", + "value": "vocab.txt: 100%" + } + }, + "d32f4b409484471891cf68e295afc1e5": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "d5d0d780b2464843a1d380f0a4c0fbbc": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "dc92fe258486439394f2841363d4286b": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_a7a6d4796d0349b99abb511f3ff9823b", + "placeholder": "​", + "style": "IPY_MODEL_8ef031c9d4b84a62a20b47d338a3dc2d", + "value": "tokenizer.json: 100%" + } + }, + "e13525732c2f4d8cad00e52b80f7e2f4": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_cc286fe8ebb64f03acf68fc630cedfe0", + "IPY_MODEL_8b0f3136fecc4965a76df8c8dee661ce", + "IPY_MODEL_16a99b74cefa4f0e870e93776897feca" + ], + "layout": "IPY_MODEL_0b42f930dcd949ee9df45dc2cd860214" + } + }, + "e29a696703cc4f87a12fc6e98f2cbcf8": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "eb355ce836b34a9da087fee621132e94": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ProgressStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "ed4e3e35f657476c82ff20a038812243": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "f4308d3a141e454cb2c1602cba4a06aa": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "f4f3815411b24674bfb51ab242832999": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "f8ef07a5c6fd4bca98efdf435d883f4c": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "FloatProgressModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "success", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_ed4e3e35f657476c82ff20a038812243", + "max": 1135173, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_eb355ce836b34a9da087fee621132e94", + "value": 1135173 + } + }, + "fc5c675a5c0a4058a683318491f6e6da": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "fec4bac1a3344aad9f168be02dba98f2": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + } + } + } + }, + "nbformat": 4, + "nbformat_minor": 0 +}