{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[33mWARNING: Ignoring invalid distribution -abulate (/Users/tgbaggio/opt/anaconda3/lib/python3.8/site-packages)\u001b[0m\u001b[33m\n", "\u001b[0m\u001b[33mWARNING: Ignoring invalid distribution -y-mini-racer (/Users/tgbaggio/opt/anaconda3/lib/python3.8/site-packages)\u001b[0m\u001b[33m\n", "\u001b[0mRequirement already satisfied: transformers in /Users/tgbaggio/opt/anaconda3/lib/python3.8/site-packages (4.31.0)\n", "Requirement already satisfied: datasets in /Users/tgbaggio/opt/anaconda3/lib/python3.8/site-packages (2.14.2)\n", "Requirement already satisfied: filelock in /Users/tgbaggio/opt/anaconda3/lib/python3.8/site-packages (from transformers) (3.0.12)\n", "Requirement already satisfied: huggingface-hub<1.0,>=0.14.1 in /Users/tgbaggio/opt/anaconda3/lib/python3.8/site-packages (from transformers) (0.16.4)\n", "Requirement already satisfied: numpy>=1.17 in /Users/tgbaggio/opt/anaconda3/lib/python3.8/site-packages (from transformers) (1.24.4)\n", "Requirement already satisfied: packaging>=20.0 in /Users/tgbaggio/opt/anaconda3/lib/python3.8/site-packages (from transformers) (23.1)\n", "Requirement already satisfied: pyyaml>=5.1 in /Users/tgbaggio/opt/anaconda3/lib/python3.8/site-packages (from transformers) (5.3.1)\n", "Requirement already satisfied: regex!=2019.12.17 in /Users/tgbaggio/opt/anaconda3/lib/python3.8/site-packages (from transformers) (2020.10.15)\n", "Requirement already satisfied: requests in /Users/tgbaggio/opt/anaconda3/lib/python3.8/site-packages (from transformers) (2.24.0)\n", "Requirement already satisfied: tokenizers!=0.11.3,<0.14,>=0.11.1 in /Users/tgbaggio/opt/anaconda3/lib/python3.8/site-packages (from transformers) (0.13.3)\n", "Requirement already satisfied: safetensors>=0.3.1 in /Users/tgbaggio/opt/anaconda3/lib/python3.8/site-packages (from transformers) (0.3.1)\n", "Requirement already satisfied: tqdm>=4.27 in /Users/tgbaggio/opt/anaconda3/lib/python3.8/site-packages (from transformers) (4.65.0)\n", "Requirement already satisfied: pyarrow>=8.0.0 in /Users/tgbaggio/opt/anaconda3/lib/python3.8/site-packages (from datasets) (12.0.1)\n", "Requirement already satisfied: dill<0.3.8,>=0.3.0 in /Users/tgbaggio/opt/anaconda3/lib/python3.8/site-packages (from datasets) (0.3.7)\n", "Requirement already satisfied: pandas in /Users/tgbaggio/opt/anaconda3/lib/python3.8/site-packages (from datasets) (2.0.3)\n", "Requirement already satisfied: xxhash in /Users/tgbaggio/opt/anaconda3/lib/python3.8/site-packages (from datasets) (3.3.0)\n", "Requirement already satisfied: multiprocess in /Users/tgbaggio/opt/anaconda3/lib/python3.8/site-packages (from datasets) (0.70.15)\n", "Requirement already satisfied: fsspec>=2021.11.1 in /Users/tgbaggio/opt/anaconda3/lib/python3.8/site-packages (from fsspec[http]>=2021.11.1->datasets) (2023.6.0)\n", "Requirement already satisfied: aiohttp in /Users/tgbaggio/opt/anaconda3/lib/python3.8/site-packages (from datasets) (3.8.5)\n", "Requirement already satisfied: attrs>=17.3.0 in /Users/tgbaggio/opt/anaconda3/lib/python3.8/site-packages (from aiohttp->datasets) (23.1.0)\n", "Requirement already satisfied: charset-normalizer<4.0,>=2.0 in /Users/tgbaggio/opt/anaconda3/lib/python3.8/site-packages (from aiohttp->datasets) (3.2.0)\n", "Requirement already satisfied: multidict<7.0,>=4.5 in /Users/tgbaggio/opt/anaconda3/lib/python3.8/site-packages (from aiohttp->datasets) (6.0.4)\n", "Requirement already satisfied: async-timeout<5.0,>=4.0.0a3 in /Users/tgbaggio/opt/anaconda3/lib/python3.8/site-packages (from aiohttp->datasets) (4.0.2)\n", "Requirement already satisfied: yarl<2.0,>=1.0 in /Users/tgbaggio/opt/anaconda3/lib/python3.8/site-packages (from aiohttp->datasets) (1.9.2)\n", "Requirement already satisfied: frozenlist>=1.1.1 in /Users/tgbaggio/opt/anaconda3/lib/python3.8/site-packages (from aiohttp->datasets) (1.4.0)\n", "Requirement already satisfied: aiosignal>=1.1.2 in /Users/tgbaggio/opt/anaconda3/lib/python3.8/site-packages (from aiohttp->datasets) (1.3.1)\n", "Requirement already satisfied: typing-extensions>=3.7.4.3 in /Users/tgbaggio/opt/anaconda3/lib/python3.8/site-packages (from huggingface-hub<1.0,>=0.14.1->transformers) (4.8.0)\n", "Requirement already satisfied: chardet<4,>=3.0.2 in /Users/tgbaggio/opt/anaconda3/lib/python3.8/site-packages (from requests->transformers) (3.0.4)\n", "Requirement already satisfied: idna<3,>=2.5 in /Users/tgbaggio/opt/anaconda3/lib/python3.8/site-packages (from requests->transformers) (2.10)\n", "Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in /Users/tgbaggio/opt/anaconda3/lib/python3.8/site-packages (from requests->transformers) (1.25.11)\n", "Requirement already satisfied: certifi>=2017.4.17 in /Users/tgbaggio/opt/anaconda3/lib/python3.8/site-packages (from requests->transformers) (2020.6.20)\n", "Requirement already satisfied: python-dateutil>=2.8.2 in /Users/tgbaggio/opt/anaconda3/lib/python3.8/site-packages (from pandas->datasets) (2.8.2)\n", "Requirement already satisfied: pytz>=2020.1 in /Users/tgbaggio/opt/anaconda3/lib/python3.8/site-packages (from pandas->datasets) (2020.1)\n", "Requirement already satisfied: tzdata>=2022.1 in /Users/tgbaggio/opt/anaconda3/lib/python3.8/site-packages (from pandas->datasets) (2023.3)\n", "Requirement already satisfied: six>=1.5 in /Users/tgbaggio/opt/anaconda3/lib/python3.8/site-packages (from python-dateutil>=2.8.2->pandas->datasets) (1.15.0)\n", "\u001b[33mWARNING: Ignoring invalid distribution -abulate (/Users/tgbaggio/opt/anaconda3/lib/python3.8/site-packages)\u001b[0m\u001b[33m\n", "\u001b[0m\u001b[33mWARNING: Ignoring invalid distribution -y-mini-racer (/Users/tgbaggio/opt/anaconda3/lib/python3.8/site-packages)\u001b[0m\u001b[33m\n", "\u001b[0m\u001b[33mDEPRECATION: pyodbc 4.0.0-unsupported has a non-standard version number. pip 24.1 will enforce this behaviour change. A possible replacement is to upgrade to a newer version of pyodbc or contact the author to suggest that they release a version with a conforming version number. Discussion can be found at https://github.com/pypa/pip/issues/12063\u001b[0m\u001b[33m\n", "\u001b[0m" ] } ], "source": [ "!pip install transformers datasets" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "from transformers import AutoTokenizer\n", "import matplotlib.pyplot as plt\n", "\n", "\n", "tokenizer_gpt2 = AutoTokenizer.from_pretrained('gpt2')" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "# 分词效果示例,三段文本表示的意思是相近的\n", "text_fr = '''Évariste Galois (/ɡælˈwɑː/; français : [evaʁist ɡalwa] ; 25 octobre 1811 - 31 mai 1832) était un mathématicien français et un militant politique. Alors qu'il était encore adolescent, il parvint à déterminer une condition nécessaire et suffisante pour qu'un polynôme soit résoluble par des radicaux, résolvant ainsi un problème qui était resté ouvert pendant 350 ans. Son travail posa les fondements de la théorie de Galois et de la théorie des groupes, deux branches majeures de l'algèbre abstraite. Il était un fervent républicain et fut très impliqué dans les troubles politiques qui entourèrent la Révolution française de 1830. En raison de son activisme politique, il fut arrêté à plusieurs reprises, purgé une peine de plusieurs mois de prison. Pour des raisons restées obscures, peu de temps après sa libération de prison, il se battit en duel et décéda des blessures qu'il subit.'''\n", "text_en = '''Évariste Galois (/ɡælˈwɑː/; French: [evaʁist ɡalwa]; 25 October 1811 – 31 May 1832) was a French mathematician and political activist. While still in his teens, he was able to determine a necessary and sufficient condition for a polynomial to be solvable by radicals, thereby solving a problem that had been open for 350 years. His work laid the foundations for Galois theory and group theory, two major branches of abstract algebra. He was a staunch republican and was heavily involved in the political turmoil that surrounded the French Revolution of 1830. As a result of his political activism, he was arrested repeatedly, serving one jail sentence of several months. For reasons that remain obscure, shortly after his release from prison he fought in a duel and died of the wounds he suffered.'''\n", "text_zh = '''埃瓦里斯特·伽罗瓦(法语:Évariste Galois,1811年10月25日—1832年5月31日,法语发音: [evaʁist ɡalwa])是一位法国数学家和政治活动家。尽管还在十几岁时,他就能够确定多项式能够通过根式求解的充分必要条件,从而解决了一个悬而未决的问题,该问题已经存在了350年。他的工作奠定了Galois理论和群论的基础,这两个是抽象代数的重要分支。他是一位坚定的共和派,深度参与了1830年法国大革命期间的政治动荡。由于他的政治活动,他多次被逮捕,其中一次入狱数月。由于原因不明,他在刑满释放后不久,参与了一场决斗并因受伤而去世。'''\n", "\n", "texts = {\n", " 'fr': text_fr,\n", " 'en': text_en,\n", " 'zh': text_zh\n", "}" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[38351,\n", " 7785,\n", " 40833,\n", " 5027,\n", " 10924,\n", " 50247,\n", " 133,\n", " 94,\n", " 21241,\n", " 75,\n", " 45990,\n", " 86,\n", " 133,\n", " 239,\n", " 135,\n", " 238,\n", " 14,\n", " 26,\n", " 4141,\n", " 25,\n", " 685,\n", " 48855,\n", " 134,\n", " 223,\n", " 396,\n", " 220,\n", " 133,\n", " 94,\n", " 282,\n", " 10247,\n", " 11208,\n", " 1679,\n", " 3267,\n", " 1248,\n", " 1157,\n", " 784,\n", " 3261,\n", " 1737,\n", " 1248,\n", " 2624,\n", " 8,\n", " 373,\n", " 257,\n", " 4141,\n", " 48251,\n", " 290,\n", " 1964,\n", " 11276,\n", " 13,\n", " 2893,\n", " 991,\n", " 287,\n", " 465,\n", " 15508,\n", " 11,\n", " 339,\n", " 373,\n", " 1498,\n", " 284,\n", " 5004,\n", " 257,\n", " 3306,\n", " 290,\n", " 6751,\n", " 4006,\n", " 329,\n", " 257,\n", " 745,\n", " 6213,\n", " 49070,\n", " 284,\n", " 307,\n", " 1540,\n", " 23765,\n", " 416,\n", " 32842,\n", " 11,\n", " 12839,\n", " 18120,\n", " 257,\n", " 1917,\n", " 326,\n", " 550,\n", " 587,\n", " 1280,\n", " 329,\n", " 13803,\n", " 812,\n", " 13,\n", " 2399,\n", " 670,\n", " 8104,\n", " 262,\n", " 19369,\n", " 329,\n", " 5027,\n", " 10924,\n", " 4583,\n", " 290,\n", " 1448,\n", " 4583,\n", " 11,\n", " 734,\n", " 1688,\n", " 13737,\n", " 286,\n", " 12531,\n", " 37139,\n", " 13,\n", " 679,\n", " 373,\n", " 257,\n", " 34700,\n", " 41477,\n", " 290,\n", " 373,\n", " 7272,\n", " 2950,\n", " 287,\n", " 262,\n", " 1964,\n", " 26962,\n", " 326,\n", " 11191,\n", " 262,\n", " 4141,\n", " 9303,\n", " 286,\n", " 45440,\n", " 13,\n", " 1081,\n", " 257,\n", " 1255,\n", " 286,\n", " 465,\n", " 1964,\n", " 23034,\n", " 11,\n", " 339,\n", " 373,\n", " 5169,\n", " 7830,\n", " 11,\n", " 7351,\n", " 530,\n", " 7356,\n", " 6827,\n", " 286,\n", " 1811,\n", " 1933,\n", " 13,\n", " 1114,\n", " 3840,\n", " 326,\n", " 3520,\n", " 18611,\n", " 11,\n", " 8972,\n", " 706,\n", " 465,\n", " 2650,\n", " 422,\n", " 3770,\n", " 339,\n", " 8350,\n", " 287,\n", " 257,\n", " 24662,\n", " 290,\n", " 3724,\n", " 286,\n", " 262,\n", " 14129,\n", " 339,\n", " 6989,\n", " 13]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "re = tokenizer_gpt2.encode(text_en)\n", "re" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'É_var_iste_ Gal_ois_ (/_�_�_æ_l_ˈ_w_�_�_�_�_/_;_ French_:_ [_eva_�_�_ist_ _�_�_al_wa_];_ 25_ October_ 18_11_ –_ 31_ May_ 18_32_)_ was_ a_ French_ mathematician_ and_ political_ activist_._ While_ still_ in_ his_ teens_,_ he_ was_ able_ to_ determine_ a_ necessary_ and_ sufficient_ condition_ for_ a_ po_lyn_omial_ to_ be_ sol_vable_ by_ radicals_,_ thereby_ solving_ a_ problem_ that_ had_ been_ open_ for_ 350_ years_._ His_ work_ laid_ the_ foundations_ for_ Gal_ois_ theory_ and_ group_ theory_,_ two_ major_ branches_ of_ abstract_ algebra_._ He_ was_ a_ staunch_ republican_ and_ was_ heavily_ involved_ in_ the_ political_ turmoil_ that_ surrounded_ the_ French_ Revolution_ of_ 1830_._ As_ a_ result_ of_ his_ political_ activism_,_ he_ was_ arrested_ repeatedly_,_ serving_ one_ jail_ sentence_ of_ several_ months_._ For_ reasons_ that_ remain_ obscure_,_ shortly_ after_ his_ release_ from_ prison_ he_ fought_ in_ a_ duel_ and_ died_ of_ the_ wounds_ he_ suffered_.'" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "'_'.join([tokenizer_gpt2.decode(i) for i in tokenizer_gpt2.encode(text_en)])" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\"É_var_iste_ Gal_ois_ (/_�_�_æ_l_ˈ_w_�_�_�_�_/_;_ fr_an_ç_ais_ :_ [_eva_�_�_ist_ _�_�_al_wa_]_ ;_ 25_ oct_ob_re_ 18_11_ -_ 31_ m_ai_ 18_32_)_ _ét_ait_ un_ math_é_matic_ien_ fr_an_ç_ais_ et_ un_ militant_ polit_ique_._ Al_ors_ qu_'_il_ _ét_ait_ enc_ore_ adolescent_,_ il_ par_v_int_ à_ dé_termin_er_ une_ condition_ n_é_cess_aire_ et_ suff_is_ante_ pour_ qu_'_un_ po_lyn_ô_me_ so_it_ r_és_ol_uble_ par_ des_ rad_ic_aux_,_ r_és_ol_vant_ a_ins_i_ un_ prob_l_è_me_ qui_ _ét_ait_ rest_é_ o_u_vert_ p_endant_ 350_ ans_._ Son_ tra_v_ail_ pos_a_ les_ fond_ements_ de_ la_ th_é_orie_ de_ Gal_ois_ et_ de_ la_ th_é_orie_ des_ group_es_,_ de_ux_ branches_ maj_e_ures_ de_ l_'_alg_è_bre_ ab_stra_ite_._ Il_ _ét_ait_ un_ ferv_ent_ ré_public_ain_ et_ fut_ tr_è_s_ impl_iqu_é_ d_ans_ les_ troubles_ polit_iques_ qui_ ent_our_è_rent_ la_ Ré_v_olution_ fr_an_ça_ise_ de_ 1830_._ En_ ra_ison_ de_ son_ activism_e_ polit_ique_,_ il_ fut_ arr_ê_t_é_ à_ plus_ie_urs_ re_prises_,_ pur_g_é_ une_ pe_ine_ de_ plus_ie_urs_ mo_is_ de_ prison_._ Pour_ des_ ra_isons_ rest_é_es_ obsc_ures_,_ pe_u_ de_ tem_ps_ apr_è_s_ sa_ lib_é_ration_ de_ prison_,_ il_ se_ batt_it_ en_ duel_ et_ dé_cé_da_ des_ bless_ures_ qu_'_il_ sub_it_.\"" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "'_'.join([tokenizer_gpt2.decode(i) for i in tokenizer_gpt2.encode(text_fr)])" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'�_�_�_�_�_�_�_�_�_�_�_�_·_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_É_var_iste_ Gal_ois_�_�_�_18_11_�_�_10_�_�_25_�_�_—_18_32_�_�_5_�_�_31_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_ [_eva_�_�_ist_ _�_�_al_wa_]_�_�_�_是_一_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_。_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_��_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_的_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_一_�_�_�_��_�_�_�_�_�_�_的_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_350_�_�_。_�_�_的_�_�_作_�_�_�_�_�_�_G_alo_is_�_�_�_�_�_�_�_�_�_�_�_�_�_�_的_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_是_�_�_�_�_�_�_代_�_�_的_�_�_�_�_�_�_�_�_�_。_�_�_是_一_�_�_�_�_�_�_�_的_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_18_30_�_�_�_�_�_�_大_�_�_�_�_�_�_�_�_�_的_�_�_�_�_�_�_�_�_�_�_�_。_�_�_�_�_�_�_的_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_中_一_�_�_�_�_�_�_�_�_�_�_�_。_�_�_�_�_�_�_�_�_不_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_不_�_�_�_�_�_�_�_�_�_�_�_一_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_。'" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "'_'.join([tokenizer_gpt2.decode(i) for i in tokenizer_gpt2.encode(text_zh)])" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "def get_token_stats(tokenizer):\n", " str_stats = {}\n", " token_stats = {}\n", " for (k, v) in texts.items():\n", " str_stats[k] = len(v.split()) if k != 'zh' else len(v)\n", " token_stats[k] = len(tokenizer.encode(v))\n", " return str_stats, token_stats" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "({'fr': 142, 'en': 132, 'zh': 278}, {'fr': 307, 'en': 176, 'zh': 497})" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "get_token_stats(tokenizer_gpt2)" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "def draw_bar(str_stats, token_stats):\n", " # 将统计结果可视化\n", " fig = plt.figure(figsize=(6, 6), dpi=80)\n", " plt.rcParams['font.sans-serif'] = ['SimHei']\n", " plt.rcParams['axes.unicode_minus'] = False\n", " plt.rcParams.update({'font.size': 13})\n", " bar_width = 0.1\n", " base = range(len(str_stats))\n", " br_str = [x - bar_width for x in base]\n", " br_token = [x + bar_width for x in base]\n", " plt.bar(br_str, str_stats.values(), color ='g',\n", " width = bar_width * 2, label ='文本长度')\n", " plt.bar(br_token, token_stats.values(), color ='b',\n", " width = bar_width * 2, label ='分词后的长度')\n", " plt.xticks([r for r in base], str_stats.keys(), fontsize=18)\n", " plt.legend(shadow=True)\n", " return fig" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "image/png": "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SlauXMkzzzzDihUreO+997jvvvuYOXMms2fPZvbs2fz0pz+lvLx8vZ958uTJnHXWWfzmN79pM4Ca/h5WrVpFfX09l112WbN7Tz/84Q95/vnnqaura7YqraTOp0v1hDqLhQsXMnbsWL785S9z3HHHNVv5FKB///784Q9/4LjjjmPIkCFcffXVzJ8/nzlz5vDggw/y8MMP87nPfY4333yz1eO3tpZQXV0dt99+O7/85S/X27Y1a9Zw8cUXM2nSpFLYNdWtWze++93vcvzxx5cmOm08fuMlt4aGBlasWNEslNasWcOAAQO4//77GTFiRLNJV+vq6kpLUUChR1dWVsaYMWNYunQp8+bNY/z48aVZwefOncvEiRO56qqrOO+881xWXOrEDKHNLKXECSecwN57702PHj3o3bt3m3XvvPNOnnjiCVavXs2VV14JFJbrbvzjPn36dE4//XQGDx5MQ0MDixYt4sMPP2z1WFVVVfz93/89kyZN2ujPMGHCBJYtW8bJJ5/MnXfeSVlZGbW1taUQeuedd9hzzz0pLy8vXRIcNmxYabBEz549m90Lqq2t5fzzzy+N/KupqaG8vLy0wux+++3Hd7/73dK6Rl/96lf5zne+w1e+8pWN/iyS8jKENrOIYPr06aUBAD/+8Y+ZMGECNTU13HzzzaV6ffr0YZ999uFrX/vaOsdoHMRQXl7OEUccwfTp06murmbPPfds87xLlizhk5/8JPfeey/nnntum/V+8pOfrPPHvW/fvgCloeT77rsvdXV1PP3006U1jmpqakohVFlZ2ax3FxG88sorVFZWcuaZZ9KvXz+uvfbaNttQXV3NjjvuWPr5pJNOYubMmcycWVg78TOf+cwGzwQuactkCGXQcmnuF154gVNPPbUULkuWLGHNmjXrXToBmg88+Civv/46u+22G8uXL+eAAw4o9TKaGj16dKtDoKuqqoDCMhCNS0+UlZVx4YUXMnnyZMaNG8fq1avXGUTRmgsuuIDDDjuM8ePHs/fee7daZ+HChXz+85/n6quv5pZbbqGuro6+ffuWPu+aNWt48skneeyxx1xWXOrkHJiQ2RtvvMFTTz3FF7/4xdK2hQsX0qtXr2a9gaYaGhq47rrraGho4Pe//z2VlZXsv//+bd6knzdvHu+//37pktj6bMjyGKeddhqjRo1i1apVVFdXtysQhgwZwumn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\n", "text/plain": [ "
" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAaEAAAGRCAYAAADM0gxvAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/OQEPoAAAACXBIWXMAAAxOAAAMTgF/d4wjAAAmVklEQVR4nO3de3hV1Z3/8fcXCAGDigXFKtB4xfsw0EoVtNSfVguOOnVaL61W0UGrrVo6zm+kOqOM1rE4Vltbsa3WW2lHpaJV63R0iuNMEe+ONxQUa7mIggYIEBKS9fvjnJxfEhIMQlgkvF/Pcx5P9lp773XiefJh7b32WpFSQpKkHLrlboAkaetlCEmSsjGEJEnZGEKSpGwMIUlSNoaQJCkbQ0iSlE2P3A1oS3l5edpxxx1zN0OStJEWLFhQm1Iqb61siw2hHXfckfnz5+duhiRpI0XE+22VeTlOkpSNISRJysYQkiRlYwhJkrLZYgcmtFd9fX3uJmgL1L1799xNkNQOnTaE3nvvPRYuXGgIqVXdu3dnl112YaeddsrdFEnr0SlD6L333mPBggXsvvvuVFRUEBG5m6QtSEqJlStX8tZbb1FbW8vAgQNzN0lSGzplCC1cuJDdd9+d7bffPndTtIXafvvt2X333XnjjTdoaGhg8ODBuZskqRWdbmBCfX099fX1VFRU5G6KtnAVFRV069aN+++/n0WLFuVujqRWtCuEIuLSiEgtXntGwT9HxJKIeCsixrTY728i4s1i+aWbsuFegtNHafyONDQ0sGDBgsytkdSa9vaERgDnAjs0eb0FXACcA5wInAX8IiIqASJiODAV+BdgJHByRHx5UzZeebz88ss8/vjjuZvRbt27d2fFihW5myGpFRsSQo+llKqavBqAC4FrUkqPp5T+ANwDnF7c53zg31NKP0spvQ5cDnxjE7e/S3j88cc56qijaGho2OB9hwwZwt13392uujU1NUQEs2fPbrZ9ypQpnHXWWe0eaThjxgzGjRtHSmmD25tLZ2qrtDX5yIEJEbE78AngvojYC3gN+A7wDLAb8GiT6rOAk4rvhwK3tyj7xcY3eT1tvWLzX6JL/7Txf9wOPvhg3nrrLW666SbOP//81s+TEg0NDes8/9K7d2969uy5Tv36+vp16vbq1avZfwGmT5/ORRddxI9+9KNWn62ZPHkykydPZptttml27BUrVlBZWUlE0NDQQHV1NVdddRXf+Ib/zpDUfu0ZHXcg8CbwbWAOcB5wP3BAsfytJnWrgMbxsNu1UtYnIvqmlKpaniQiJgATGn/uqiPfVq9ezeLFi+nZsyfduv3/jujEiRN58803effdd5vVr6uro2fPnsyfP58RI0bQu3fvUlisXr2a2tpaTjzxxNJNeIDa2lo++9nP8p//+Z/rbcu0adM488wzmTp1Kl/60pdardPQ0MAxxxzDHXfcUdpnxIgRpWHP9957L/vvvz/77rvvx/uFSNqqfWQIpZTupxA6AETEPwBfBg4rbqptUn0V0DhsbW0rZRTLq1o5z3XAdY0/Dxw4sEteP3nuuecYO3Ys22yzDcuWLWPt2rX07t27VP6Tn/yElStX0qNHD3r06MHatWs55ZRTuPXWW1m7dm2p3vLlyxk4cCAVFRWUlZUxadIkzjnnnHa3Y/LkyVx11VX85je/4cgjj1xv3Yhg1apVlJeXc9lll3HjjTeWQuiHP/wh5557LnvuuScppVZ7ZZLUlg0eop0KF9ffA3YBEjCgSfF2wJri+yWtlNGkfKs0cuRIqqqqWLhwIZMmTeKLX/wiVVVVzV6DBg1i6tSprFixgtWrV3Prrbeuc5w777yTUaNGMXjwYE4++eRST6WlhoYGli1bRk1NDTU1NQCsWbOGAQMGcP/99zNq1KhSWU1NDStWrGDlypWl/VNKlJWVMWbMGIYOHcq8efMYP348Q4cOZejQoTz33HNMnDiRoUOH8rOf/axjfmmSSiI276ujfWQIRcQVEXFBk5+3pXApbh7wPIWRb42GA40r0c1qpWw18MFGtrnLGDt2LE888QS1tf+/wzh37lz+/Oc/c/jhh7e5X01NDddeey1/93d/B8Do0aN5//33Wx2x9s4779CvXz/69etH//79ARg2bBjnnXceRxxxBDvssAP9+/cvvfr168ell17a7Fzl5eXMmDGDl156id12240rrriCe++9t3Qp7vvf/z6vvPJKm/ezJKkt7bkn9Bzw84iYB3wIXAosB/4d2B24JCIeArYHzga+V9zvbuDRiLiRwr2kS4BHiqPqBOyzzz7st99+3HPPPXz1q18F4Gc/+xnHHXcc/fr1a3O/a665hgMOOIAjjjgCKFwumzx5Mueffz5PPfVUs0EElZWVzS7jRQSvvPIKlZWVnHnmmfTr149rr722zXNVV1fTdJn1k046iZkzZzJz5kwAPvOZz1BZWfmxPr8kteueUEQMAW4BtqEwGu7QlNLyiLgB+D8Uej89KfR+phT3mxUR11MYRbcaqAZGd8Bn6NT+8R//kbPPPpvjjz+eDz/8kB//+MfMmDGjzfp/+MMfuPHGG5k1a1az7ccffzx33XUXp556Kvfccw9lZWUfee4LLriAww47jPHjx7P33nu3WmfhwoV8/vOf5+qrr+aWW26hrq6Ovn37lh4EXbNmDU8++SSPPfZYlx1MIqnjtOueUErp+ymlnVJKfVJKJ6SU3i5urwGOLr6OAY5IKdU22e8yCpfuTgH2SynN3dQfoLM76qij+NznPsdJJ53E1772Nc444ww+/elPt1r3+eef58tf/jI//elP2WWXXZqV1dfXc9NNN7Fo0SLGjBnDkiVLPvLcQ4YM4fTTT+fEE09k6dKlrdaZM2cOgwYN4pJLLmHu3LkceeSRHHvssbzwwgs8/vjj1NfXc+mllxpAkj6WjZ7AtDhQYeZ6yudQuBynNlx11VUMGTKE+vp6pkyZ0mqdu+66i3PPPZcbbriB1atX079/f3r16kVVVRWnn3463bp1o6KigldffZVTTjmFUaNG8cwzz9CnT591jrVs2TLGjx/PM888wxNPPMExxxzDoYceytSpUxk+fHip3tKlS3nxxRcZMWJEadv111/P6NGjiQgee+wxxo0bxwknnLDJfyeStg6dbgLTrqS2tpbbbruNkSNHcsEFFzBp0iQOO+wwJk6cyDvvvNOs7ogRI7jjjjs466yzOPXUU6murmbJkiUMGTKEW2+9laqqKhYsWMD222/Pgw8+yEMPPbROAH3wQWFMyOGHH85LL73ElClTqKio4JFHHmHYsGEcfPDBnHLKKbz1VuHxrptvvpmRI0eyww47AIXe1uzZsxk2bBjf+973mDt3LhUVFTz99NMsXrzYtZ0kbbBOuZRDWzbF7AUdbdWqVTz88MM8+uij3Hfffey11148+OCDHHTQQUDh3s4VV1zBnnvuyUEHHcTo0aM54YQTGDVqFHvttdc6x1uzZk1p6HWjbt26sccee6xT99VXX6WsrIyJEydy8cUXlx5uraio4Fe/+hWnnnoqv//97/nUpz4FwMqVK5kwYQIPPPAAl19+OR988AEHHnggJ554It///vd56aWXeOCBB/jlL3/J//7v/1JeXs7cuXPXO6hCkpqKLXVOrYEDB6b58+evs72+vp4XXniBoUOHdsolnBsaGjjttNPYeeedOfPMMznggANarbdgwQKmTZvGo48+ys0338wnP/nJTXL+t99+e4NHs9XV1bFo0aL1rsmTUmLp0qWlYeBbgsbvysyZM9lvv/1KowmlzmxzLyCwKSIiIhaklFpdXdIQUpdlCKkr6moh5D0hSVI2hpAkKRtDSJKUjSEkScrGEJIkZWMIZda4Ymqj1157rc2HPp999ll+8IMflH6ura3dpMtWt3XeFStWcNtttzVb4gHg9ttv54033thk51+fl19+udVZwiV1boZQZtOnT+cv//IvWbt2LWvXrmXs2LH827/9W6t1KyoqmDhxIq+//jpQmPvtU5/6FJWVlc1egwcPJiJYvXp1ad+UEtXV1SxevJjXX3+dGTNmMHXqVK655hr+9m//lkMOOYSddtqpNFtCUy+//DLf/va3mw2Jb2ho4Dvf+Q5PPfXUej9fTU0NEcHs2bObbZ8yZQpnnXVWu2dZmDFjBuPGjdukoSspvy41Y0Jnk1Ji0qRJjBkzhh49Cv8rrrzySi6++GKOPvrodWYe2Gefffirv/orpk6dyhVXXMG8efNaPe6SJUvYcccd6dWrV2nbRRddxO23386uu+7Ktttuyyc+8QkGDBjAzjvvzNChQzn22GPZZZdd+MQnPrHO8V599VWOPfbYZsf77//+b1JKfPrTn2bu3MK8tOXl5QwaNKjZvo37NN13+vTpXHTRRfzoRz9q9VmvyZMnM3ny5GZLUtTX17NixQoqKyuJCBoaGqiuruaqq67iG9/4Ruu/YElbvC4VQpv7IS7YuAe5brrpJt59910mTpxY2ta4lPdJJ53EAw880OwPMRT+QO+6664ArF69ml69epWWVUgpsWrVqlLdaPILaWho4IwzzuD6669vd/sWLlzIQQcdVOpR/e53v6N79+4sXryYX/ziF5SXl5cmL121ahU777zzR/aMpk2bxplnnsnUqVP50pe+1GqdhoYGjjnmmNJqsdOmTWPEiBGlJcUbF9Pbd9992/1ZJG2ZvByXyezZs7n44ou54YYb2HbbbUvbI4K77rqLefPmcfTRR/Pee+8BhXncampqGDBgQGnOtwMOOGCdS3FtzQpQW1tLXV0d1dXV631VVVWV7v306NGDpUuXsnLlSlauXMkzzzzDihUreO+997jvvvuYOXMms2fPZvbs2fz0pz+lvLx8vZ958uTJnHXWWfzmN79pM4Ca/h5WrVpFfX09l112WbN7Tz/84Q95/vnnqaura7YqraTOp0v1hDqLhQsXMnbsWL785S9z3HHHNVv5FKB///784Q9/4LjjjmPIkCFcffXVzJ8/nzlz5vDggw/y8MMP87nPfY4333yz1eO3tpZQXV0dt99+O7/85S/X27Y1a9Zw8cUXM2nSpFLYNdWtWze++93vcvzxx5cmOm08fuMlt4aGBlasWNEslNasWcOAAQO4//77GTFiRLNJV+vq6kpLUUChR1dWVsaYMWNYunQp8+bNY/z48aVZwefOncvEiRO56qqrOO+881xWXOrEDKHNLKXECSecwN57702PHj3o3bt3m3XvvPNOnnjiCVavXs2VV14JFJbrbvzjPn36dE4//XQGDx5MQ0MDixYt4sMPP2z1WFVVVfz93/89kyZN2ujPMGHCBJYtW8bJJ5/MnXfeSVlZGbW1taUQeuedd9hzzz0pLy8vXRIcNmxYabBEz549m90Lqq2t5fzzzy+N/KupqaG8vLy0wux+++3Hd7/73dK6Rl/96lf5zne+w1e+8pWN/iyS8jKENrOIYPr06aUBAD/+8Y+ZMGECNTU13HzzzaV6ffr0YZ999uFrX/vaOsdoHMRQXl7OEUccwfTp06murmbPPfds87xLlizhk5/8JPfeey/nnntum/V+8pOfrPPHvW/fvgCloeT77rsvdXV1PP3006U1jmpqakohVFlZ2ax3FxG88sorVFZWcuaZZ9KvXz+uvfbaNttQXV3NjjvuWPr5pJNOYubMmcycWVg78TOf+cwGzwQuactkCGXQcmnuF154gVNPPbUULkuWLGHNmjXrXToBmg88+Civv/46u+22G8uXL+eAAw4o9TKaGj16dKtDoKuqqoDCMhCNS0+UlZVx4YUXMnnyZMaNG8fq1avXGUTRmgsuuIDDDjuM8ePHs/fee7daZ+HChXz+85/n6quv5pZbbqGuro6+ffuWPu+aNWt48skneeyxx1xWXOrkHJiQ2RtvvMFTTz3FF7/4xdK2hQsX0qtXr2a9gaYaGhq47rrraGho4Pe//z2VlZXsv//+bd6knzdvHu+//37pktj6bMjyGKeddhqjRo1i1apVVFdXtysQhgwZwumn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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "draw_bar(*get_token_stats(tokenizer_gpt2))" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "from datasets import load_dataset\n", "\n", "data = load_dataset('BelleGroup/train_0.5M_CN')" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'instruction': '给定一个文字输入,将其中的所有数字加1。\\n“明天的会议在9点开始,记得准时到达。”\\n',\n", " 'input': '',\n", " 'output': '“明天的会议在10点开始,记得准时到达。”'}" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data['train'][1]" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [], "source": [ "def get_training_corpus():\n", " d = data['train'].select(range(10000))\n", " batch_size = 1000\n", " for i in range(0, len(d), batch_size):\n", " samples = d[i: i + batch_size]\n", " yield samples.get('instruction', [])" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [], "source": [ "tokenizer_zh = tokenizer_gpt2.train_new_from_iterator(get_training_corpus(), 800)" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'�_�_�_�_�_里_�_�_特_�_�_�_�_�_�_�_�_�_(_法_语_:_�_�_v_a_r_is_t_e_ _G_a_l_o_is_,_1_8_1_1_年_1_0_�_�_2_5_日_�_�_1_8_3_2_年_5_�_�_3_1_日_,_法_语_发_�_�_�_:_ _[_e_v_a_�_�_is_t_ _�_�_a_l_w_a_]_)_是_一_位_法_国_数_学_家_和_�_�_�_�_活_动_家_。_�_�_�_�_还_在_�_�_�_�_�_�_�_时_,_他_�_�_能_�_�_确_定_多_项_式_能_�_�_通_过_根_式_求_解_的_�_�_分_�_�_要_�_�_件_,_从_而_解_�_�_了_一个_�_�_而_�_�_�_�_的_问题_,_该_问题_�_�_经_�_�_在_了_3_5_0_年_。_他_的_工作_�_�_定_了_G_a_l_o_is_理_论_和_�_�_论_的_�_�_�_�_,_这_两个_是_�_�_�_�_�_�_�_数_的_重_要_分_�_�_。_他_是_一_位_�_�_定_的_�_�_和_�_�_,_�_�_�_度_�_�_与_了_1_8_3_0_年_法_国_大_�_�_�_�_期_间_的_�_�_�_�_动_�_�_�_。_�_�_于_他_的_�_�_�_�_活_动_,_他_多_�_�_�_�_�_�_�_�_�_,_其_中_一_�_�_入_�_�_数_�_�_。_�_�_于_�_�_因_不_明_,_他_在_�_�_�_�_�_�_�_�_�_后_不_�_�_,_�_�_与_了_一_场_�_�_�_�_并_因_�_�_�_�_而_去_�_�_。'" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "'_'.join([tokenizer_zh.decode(i) for i in tokenizer_zh.encode(text_zh)])" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'�_�_v_a_r_is_t_e_ _G_a_l_o_is_ _(_/_�_�_�_�_l_�_�_w_�_�_�_�_/_;_ _F_re_n_c_h_:_ _[_e_v_a_�_�_is_t_ _�_�_a_l_w_a_]_;_ _2_5_ _O_c_t_o_b_er_ 1_8_1_1_ _�_�_ _3_1_ _M_a_y_ 1_8_3_2_)_ w_a_s_ a_ _F_re_n_c_h_ _m_at_he_m_at_ic_i_an_ a_n_d_ _p_o_l_i_t_ic_a_l_ a_c_t_i_v_is_t_._ _W_h_i_le_ s_t_i_l_l_ _in_ _h_is_ t_e_en_s_,_ _he_ w_a_s_ a_b_le_ t_o_ _d_e_t_er_m_in_e_ a_ _n_e_c_e_s_s_a_r_y_ a_n_d_ s_u_f_f_ic_i_en_t_ _c_on_d_i_t_i_on_ f_or_ a_ _p_o_l_y_n_om_i_a_l_ t_o_ b_e_ s_o_l_v_a_b_le_ b_y_ _r_a_d_ic_a_l_s_,_ the_re_b_y_ s_o_l_v_ing_ a_ _p_r_o_b_le_m_ t_h_at_ _h_a_d_ b_e_en_ _o_p_en_ f_or_ _3_5_0_ _y_e_a_r_s_._ _H_is_ w_or_k_ _l_a_i_d_ the_ f_o_u_n_d_at_i_on_s_ f_or_ _G_a_l_o_is_ the_or_y_ a_n_d_ _g_r_o_u_p_ the_or_y_,_ t_w_o_ _m_a_j_or_ b_r_an_c_he_s_ _o_f_ a_b_s_t_r_a_c_t_ a_l_g_e_b_r_a_._ _H_e_ w_a_s_ a_ s_t_a_u_n_c_h_ _re_p_u_b_l_ic_an_ a_n_d_ w_a_s_ _he_a_v_i_l_y_ _in_v_o_l_v_e_d_ _in_ the_ _p_o_l_i_t_ic_a_l_ t_u_r_m_o_i_l_ t_h_at_ s_u_r_r_o_u_n_d_e_d_ the_ _F_re_n_c_h_ _R_e_v_o_l_u_t_i_on_ _o_f_ 1_8_3_0_._ _A_s_ a_ _re_s_u_l_t_ _o_f_ _h_is_ _p_o_l_i_t_ic_a_l_ a_c_t_i_v_is_m_,_ _he_ w_a_s_ a_r_re_s_t_e_d_ _re_p_e_at_e_d_l_y_,_ s_er_v_ing_ _on_e_ _j_a_i_l_ s_en_t_en_c_e_ _o_f_ s_e_v_er_a_l_ _m_on_t_h_s_._ _F_or_ _re_a_s_on_s_ t_h_at_ _re_m_a_in_ _o_b_s_c_u_re_,_ s_h_or_t_l_y_ a_f_t_er_ _h_is_ _re_le_a_s_e_ f_r_om_ _p_r_is_on_ _he_ f_o_u_g_h_t_ _in_ a_ _d_u_e_l_ a_n_d_ _d_i_e_d_ _o_f_ the_ w_o_u_n_d_s_ _he_ s_u_f_f_er_e_d_.'" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "'_'.join([tokenizer_zh.decode(i) for i in tokenizer_zh.encode(text_en)])" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "image/png": "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xx9/zLZt2/j222955ZVXWLRoEStWrGDFihU8/vjjpKam7vY9T548mdGjR/Pyyy9XG0DxP4cdO3ZQWlrK7bffXuHc0wMPPMBnn31GcXExRUWVLxVaNzQSEpFGKycnhyFDhvCLX/yCc889l5KSkgr1tm3b8u6773LuuefSvXt37rnnHrKzs1m5ciWvv/46c+fO5ZRTTmH16tUJt5/ofkLFxcU8/fTTe7xs0K5du7j55puZOHFiLOziNWnShFtvvZXzzjsvdrHT8u2XH3IrKytj27ZtFUJp165dtG/fnldffZV+/fpVuPBqcXFx7HYUEBnRpaSkMHjwYPLy8li7di1jxoyJXRl81apVTJgwgUmTJnHttdcyduzY3b6nvaEQEpFGyd0ZOnQo3bp1o1mzZrRs2bLats8++yzvv/8+O3fu5K67Ihd2yczMjP1xnz17NiNHjqRz586UlZWxYcMGvvvuu4Tbys/P51e/+hUTJ06s9XsYP348W7Zs4aKLLuLZZ58lJSWFoqKiWAh98803dOnShdTU1Nghwd69e8cmSzRv3rzCuaCioiLGjh0bm/lXWFhIampq7C6zxx57LLfeemvs3kYXX3wxN910ExdccAH1RSEkIo2SmTF79uzYBICHH36Y8ePHU1hYyGOPPRZrl56eztFHH80ll1xSZRvlkxhSU1M57bTTmD17NgUFBXTp0qXa/ebm5vK9732Pl156iauvvrrado888kiVP+5t2rQBiE0lP+aYYyguLuajjz6K3eeosLAwFkKZmZkVRndmxhdffEFmZiZXXHEFhx12GPfdd1+1fSgoKKBdu3ax1xdeeCGLFi1i0aLINamPP/74vboYa00ohESk0ap8e+4lS5YwYsSIWLjk5uaya9eupK5enawvv/ySI488kq1bt9KzZ8/YKCPewIEDE06Bzs/PB+Drr7+O3X4iJSWF66+/nsmTJzNq1Ch27txZZRJFIuPGjeOkk05izJgxdOvWLWGbnJwcTj31VO655x6mT59OcXExbdq0ib3fXbt28cEHHzB//vx6u7W4JiaIyAHhq6++4sMPP+Sss86KLcvJyaFFixYVRgPxysrKmDJlCmVlZbz99ttkZmbSo0ePak/Sr127lv/85z+xQ2K7k2jKdHUuvfRSBgwYwI4dOygoKEgqELp3787IkSMZNmwYeXl5CdusXLmSTp06ccst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\n", "text/plain": [ "
" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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xx9/zLZt2/j222955ZVXWLRoEStWrGDFihU8/vjjpKam7vY9T548mdGjR/Pyyy9XG0DxP4cdO3ZQWlrK7bffXuHc0wMPPMBnn31GcXExRUWVLxVaNzQSEpFGKycnhyFDhvCLX/yCc889l5KSkgr1tm3b8u6773LuuefSvXt37rnnHrKzs1m5ciWvv/46c+fO5ZRTTmH16tUJt5/ofkLFxcU8/fTTe7xs0K5du7j55puZOHFiLOziNWnShFtvvZXzzjsvdrHT8u2XH3IrKytj27ZtFUJp165dtG/fnldffZV+/fpVuPBqcXFx7HYUEBnRpaSkMHjwYPLy8li7di1jxoyJXRl81apVTJgwgUmTJnHttdcyduzY3b6nvaEQEpFGyd0ZOnQo3bp1o1mzZrRs2bLats8++yzvv/8+O3fu5K67Ihd2yczMjP1xnz17NiNHjqRz586UlZWxYcMGvvvuu4Tbys/P51e/+hUTJ06s9XsYP348W7Zs4aKLLuLZZ58lJSWFoqKiWAh98803dOnShdTU1Nghwd69e8cmSzRv3rzCuaCioiLGjh0bm/lXWFhIampq7C6zxx57LLfeemvs3kYXX3wxN910ExdccAH1RSEkIo2SmTF79uzYBICHH36Y8ePHU1hYyGOPPRZrl56eztFHH80ll1xSZRvlkxhSU1M57bTTmD17NgUFBXTp0qXa/ebm5vK9732Pl156iauvvrrado888kiVP+5t2rQBiE0lP+aYYyguLuajjz6K3eeosLAwFkKZmZkVRndmxhdffEFmZiZXXHEFhx12GPfdd1+1fSgoKKBdu3ax1xdeeCGLFi1i0aLINamPP/74vboYa00ohESk0ap8e+4lS5YwYsSIWLjk5uaya9eupK5enawvv/ySI488kq1bt9KzZ8/YKCPewIEDE06Bzs/PB+Drr7+O3X4iJSWF66+/nsmTJzNq1Ch27txZZRJFIuPGjeOkk05izJgxdOvWLWGbnJwcTj31VO655x6mT59OcXExbdq0ib3fXbt28cEHHzB//vx6u7W4JiaIyAHhq6++4sMPP+Sss86KLcvJyaFFixYVRgPxysrKmDJlCmVlZbz99ttkZmbSo0ePak/Sr127lv/85z+xQ2K7k2jKdHUuvfRSBgwYwI4dOygoKEgqELp3787IkSMZNmwYeXl5CdusXLmSTp06ccst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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "draw_bar(*get_token_stats(tokenizer_zh))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5" } }, "nbformat": 4, "nbformat_minor": 4 }