File size: 125,159 Bytes
ceedef8 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 |
{
"cells": [
{
"source": [
"### Poorly cleaned prototyping and few-shot testing, can be used as a starting point but not documented well..."
],
"cell_type": "markdown",
"metadata": {}
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [],
"source": [
"from datasets import load_dataset, concatenate_datasets\n",
"import transformers\n",
"from transformers import (\n",
" Trainer,\n",
" TrainingArguments,\n",
" default_data_collator,\n",
" AutoModelForCausalLM,\n",
" AutoModelForSequenceClassification,\n",
" PreTrainedTokenizerFast,\n",
" AutoModelWithLMHead,\n",
" AutoConfig,\n",
" AutoModel,\n",
" AutoTokenizer,\n",
" GPT2TokenizerFast,\n",
" GPT2Model,\n",
" GPT2Config\n",
")\n",
"import datasets\n",
"import torch\n",
"import numpy as np\n",
"import os\n",
"\n",
"from evaluate import load"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [],
"source": [
"\n",
"model_type = \"finlp\"\n",
"if model_type == \"large\":\n",
" tokenizer = AutoTokenizer.from_pretrained(\"H:\\\\Data_temp\\\\checkpoints\\\\large\\\\checkpoint-12200\")\n",
" model = AutoModelForCausalLM.from_pretrained(\"H:\\\\Data_temp\\\\checkpoints\\\\large\\\\checkpoint-12200\").to(\"cuda\")\n",
"elif model_type == \"small\":\n",
" tokenizer = AutoTokenizer.from_pretrained(r\"H:\\Data_temp\\checkpoints\\small\\checkpoint-140000\")\n",
" model = AutoModelForCausalLM.from_pretrained(r\"H:\\Data_temp\\checkpoints\\small\\checkpoint-140000\").to(\"cuda\")\n",
"elif model_type == \"finlp\":\n",
" tokenizer = GPT2TokenizerFast.from_pretrained('Finnish-NLP/gpt2-large-finnish')\n",
" model = AutoModelForCausalLM.from_pretrained('Finnish-NLP/gpt2-large-finnish').to(\"cuda\")\n",
"elif model_type == \"distill\":\n",
" config = GPT2Config.from_pretrained(r\"H:\\Data_temp\\checkpoints\\distillation\\third\\config.json\")\n",
" tokenizer = AutoTokenizer.from_pretrained(r\"H:\\Data_temp\\checkpoints\\large\\checkpoint-12200\")\n",
" model = AutoModelForCausalLM.from_pretrained(r\"H:\\Data_temp\\checkpoints\\distillation\\third\\model_step_640000.pth\",config=config).to(\"cuda\")\n"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Reusing dataset xed_en_fi (H:\\Data_temp\\cache\\xed_en_fi\\fi_annotated\\1.1.0\\da3b85f38c940032e5c051d9afc607f96efc7107ac41104c3ad846dc0ac95d6a)\n",
"100%|██████████| 1/1 [00:00<00:00, 222.32it/s]\n",
"Reusing dataset xed_en_fi (H:\\Data_temp\\cache\\xed_en_fi\\fi_neutral\\1.1.0\\da3b85f38c940032e5c051d9afc607f96efc7107ac41104c3ad846dc0ac95d6a)\n",
"100%|██████████| 1/1 [00:00<00:00, 1001.98it/s]\n",
"Loading cached processed dataset at H:\\Data_temp\\cache\\xed_en_fi\\fi_neutral\\1.1.0\\da3b85f38c940032e5c051d9afc607f96efc7107ac41104c3ad846dc0ac95d6a\\cache-fb9da1de2b72ad86.arrow\n",
"Loading cached processed dataset at H:\\Data_temp\\cache\\xed_en_fi\\fi_neutral\\1.1.0\\da3b85f38c940032e5c051d9afc607f96efc7107ac41104c3ad846dc0ac95d6a\\cache-f5d1a6cbf0f317bf.arrow\n",
"Loading cached shuffled indices for dataset at H:\\Data_temp\\cache\\xed_en_fi\\fi_neutral\\1.1.0\\da3b85f38c940032e5c051d9afc607f96efc7107ac41104c3ad846dc0ac95d6a\\cache-c9a57b3a5a1aebc5.arrow\n"
]
},
{
"data": {
"text/plain": [
"Dataset({\n",
" features: ['sentence', 'labels'],\n",
" num_rows: 25243\n",
"})"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"\n",
"fi_annotated_raw = load_dataset(\"xed_en_fi\",\"fi_annotated\")\n",
"fi_neutral_raw = load_dataset(\"xed_en_fi\",\"fi_neutral\")\n",
"\n",
"def to_arr(examples):\n",
" labels = []\n",
" for item in examples[\"labels\"]:\n",
" labels.append([item])\n",
" return {\"sentence\":examples[\"sentence\"],\"labels\":labels}\n",
"fi_neutral_mapped = fi_neutral_raw[\"train\"].map(to_arr, batched=True)\n",
"\n",
"fi_neutral_mapped_cast = fi_neutral_mapped.cast(fi_annotated_raw[\"train\"].features)\n",
"dataset = concatenate_datasets([fi_neutral_mapped_cast, fi_annotated_raw[\"train\"]]).shuffle(seed=42)\n",
"dataset"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [],
"source": [
"\n",
"labels = {0:\"neutraali\", 1:\"viha\", 2:\"innokkuus\",3:\"inho\",4:\"pelko\",5:\"ilo\",6:\"suru\",7:\"yllättyneisyys\",8:\"hyväksyntä\"}\n",
"#{anger:1, anticipation:2, disgust:3, fear:4, joy:5, sadness:6, surprise:7, trust:8, with neutral:0 }"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'hyväksyntä, ilo'"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"\", \".join([labels[item] for item in dataset[1][\"labels\"]])"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Perustunteet ovat neutraali, viha, innokkuus, inho, pelko, ilo, suru, yllättyneisyys ja hyväksyntä.\n",
"Nimeä perustunteet seuraavista teksteistä:\n",
"Teksti: Mary toisin kuin minä on hyvin sivistynyt.\n",
"Tunne: ilo\n",
"Teksti: Hymy - on suloutta iholla.\n",
"Tunne: hyväksyntä, ilo\n",
"Teksti: Ovatko kaikki täällä venehulluja?\n",
"Tunne: yllättyneisyys\n",
"Teksti: Käänny vasemmalle.\n",
"Tunne: \n"
]
}
],
"source": [
"input = \"\"\"Perustunteet ovat neutraali, viha, innokkuus, inho, pelko, ilo, suru, yllättyneisyys ja hyväksyntä.\n",
"Nimeä perustunteet seuraavista teksteistä:\n",
"\"\"\"\n",
"j = 100\n",
"for i in range(3):\n",
" input += \"Teksti: \" + dataset[j+i][\"sentence\"] + \"\\nTunne: \" + \", \".join([labels[item] for item in dataset[j+i][\"labels\"]]) + \"\\n\"\n",
"input += \"Teksti: \" + dataset[j+3][\"sentence\"] + \"\\nTunne: \"\n",
"print(input)"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"neutraali : 0.4276036921126649\n",
"viha : 0.12664897199223546\n",
"innokkuus : 0.09725468446698095\n",
"inho : 0.09258012122172483\n",
"pelko : 0.08342906944499465\n",
"ilo : 0.09578893158499387\n",
"suru : 0.08449867289941766\n",
"yllättyneisyys : 0.07641722457711049\n",
"hyväksyntä : 0.09123321316800698\n",
"1.1754545814681299\n"
]
}
],
"source": [
"counts = {}\n",
"for i in range(9):\n",
" counts[i] = 0\n",
"\n",
"for item in dataset:\n",
" for key in item[\"labels\"]:\n",
" counts[key] += 1\n",
"counts\n",
"count_sum = 0\n",
"for i in range(9):\n",
" count_sum += counts[i]\n",
"\n",
"for i in range(9):\n",
" print(labels[i] ,\":\" , counts[i]/len(dataset))\n",
"print(count_sum/len(dataset))\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(['neutraali',\n",
" 'viha',\n",
" 'innokkuus',\n",
" 'inho',\n",
" 'pelko',\n",
" 'ilo',\n",
" 'suru',\n",
" 'yllättyneisyys',\n",
" 'hyväksyntä'],\n",
" [42.76036921126649,\n",
" 12.664897199223548,\n",
" 9.725468446698095,\n",
" 9.258012122172483,\n",
" 8.342906944499465,\n",
" 9.578893158499387,\n",
" 8.449867289941766,\n",
" 7.641722457711048,\n",
" 9.123321316800697])"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"label_list = []\n",
"count_list = []\n",
"for i in range(9):\n",
" label_list.append(labels[i])\n",
" count_list.append(100*counts[i]/len(dataset))\n",
"label_list, count_list"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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kre3t3bs2KG5c+cqJydHtWvX1uzZs9WtWzfl5+frwIEDGjx4sFxcXDRmzBh17Njxusd0dXXVsmXLNHLkSDVr1kytW7fWyy+/rH79+t2BHgEAADOwGKX5rAqUWTk5OZc++iNmhZysHo4u5y8lfUYPR5cAADCpy3+/s7Oz5e3tfc223NMGAABgAoQ2AAAAEyC0AQAAmAChDQAAwAQIbQAAACZAaAMAADABQhsAAIAJENoAAABMgG9EKGcOTwm/7ofzAQAA82GmDQAAwAQIbQAAACZAaAMAADABQhsAAIAJENoAAABMgNAGAABgAnzkRznTdPJGOVk9HF1GuZE+o4ejSwAAQBIzbQAAAKZAaAMAADABQhsAAIAJENoAAABMgNAGAABgAoQ2AAAAEyC0AQAAmAChDQAAwAQIbQAAACZAaAMAADCBWxba4uLidPfdd9teR0VFqXfv3nZtfH19lZCQoMTERFksFp06depWnf62uFofAAAAHOGOfvfod999Jy8vLzk7OyszM1M+Pj62benp6apTp472799fJPydOnVKa9asuZOlSpLmzZsnwzDu+HkBAACudEdDW7Vq1Ww/+/v738lT35A/h0oAAABHKvHl0XfffVeVK1dWXl6e3frevXvr8ccfv+7+H330kdq3by9fX19VrlxZPXv21LFjx2zb69SpI0m65557ZLFY1KFDB8XFxWnRokX68MMPZbFYZLFYlJiYqE6dOik6Otru+L/++qvc3Ny0detWSVJQUJBeeeUVDR06VF5eXqpVq5beeustu32OHz+u/v37y9fXV35+foqIiFB6erpt+5WXR1euXKnQ0FC5u7urcuXKCgsL05kzZ7Rjxw65urrqxIkTdsePiYnRAw88oDNnzsjb21srV660275mzRpVrFhRp0+f1oULFxQdHa2AgABVqFBBtWvX1vTp04t9P/Py8pSTk2O3AACA8qvEoa1fv34qKCjQ2rVrbeuysrK0bt06DR069Lr7nz17Vs8995z27t2rLVu2yMnJSX369FFhYaEkaffu3ZKkLVu2KDMzU6tWrVJsbKz69++vrl27KjMzU5mZmWrXrp2GDRumpUuX2gXI//73v7rrrrvUqVMn27rZs2erVatW2r9/v0aNGqWRI0cqNTVVkpSfn6/w8HB5eXnps88+086dO+Xp6amuXbvqwoULRerPzMzUwIEDNXToUKWkpCgxMVF9+/aVYRh68MEHVbduXS1evNjWPj8/X0uWLNHQoUNVsWJFPfroo4qPj7c7Znx8vB555BF5eXlp/vz5Wrt2rVasWKHU1FQtWbJEQUFBxb6f06dPl4+Pj20JDAy87hgAAADzKnFoc3d316BBg+yCx3//+1/VqlVLHTp0uO7+AwYMUO/evVW/fn3dc889euedd3To0CF98803kqSqVatKkipXrix/f3/5+fnJ09NT7u7uslqt8vf3l7+/v9zc3NS3b19J0ocffmg7fkJCgqKiomSxWGzrunfvrlGjRql+/foaP368qlSpom3btkmS3nvvPRUWFurtt99WaGioGjVqpPj4eGVkZCgxMbFI/ZmZmbp48aL69u2roKAghYaGatSoUfL09JQkPfnkk3bvzUcffaTz58+rf//+kqRhw4Zp48aNyszMlHQp8K5fv94WeDMyMtSgQQPdf//9ql27tu6//34NHDiw2PdzwoQJys7Oti3Hjx+/7hgAAADzKtXTo8OHD9emTZv0008/Sbp6UCrOkSNHNHDgQNWtW1fe3t62WaSMjIxSF12hQgU9/vjjeueddyRJX331lQ4fPqyoqCi7ds2aNbP9bLFY5O/vr6ysLEnSgQMHdPToUXl5ecnT01Oenp7y8/PT+fPn7S7bXta8eXN17txZoaGh6tevnxYuXKg//vjDtj0qKkpHjx7Vl19+KenSe9O/f39VrFhRknTvvfeqSZMmWrRokaRLgbd27dp68MEHbfsnJycrJCREzzzzjDZt2nTN98Bqtcrb29tuAQAA5VepQts999yj5s2b691339W+ffv09ddfFwlKxenVq5d+//13LVy4UElJSUpKSpKkq16KLIlhw4Zp8+bN+vHHHxUfH69OnTqpdu3adm1cXV3tXlssFtvl2NzcXLVs2VLJycl2y3fffadBgwYVOZ+zs7M2b96sDRs2qHHjxlqwYIFCQkKUlpYm6dJDFr169VJ8fLx++eUXbdiwochl42HDhikhIUHSpUujTzzxhC3wtmjRQmlpaZo2bZrOnTun/v3765FHHrmh9wYAAJQ/pX56dNiwYZo7d65++uknhYWFleheqpMnTyo1NVULFy7UAw88IEn6/PPP7dq4ublJkgoKCoqsv3KdJIWGhqpVq1ZauHChli5dqtdff71U/WjRooXee+89VatWrcSz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J6tt27YKCgrS3//+d8XGxmrFihXFvo/Tp0+Xj4+PbQkMDCz1WAAAAPNwSGj7s4CAAGVlZUmShg0bZgtFv/zyizZs2GA3ixUZGakPPvhAeXl5kqQlS5bo0UcflZPTpW7k5uYqNjZWjRo1kq+vrzw9PZWSklJkpm327NlauHChPv/8czVp0sS2vnnz5urcubNCQ0PVr18/LVy4UH/88Ydte1RUlI4ePaovv/xS0qXLof3791fFihVtbTw8PFSvXr2r9u9a3nvvPbVv317+/v7y9PTUiy++WOwMoSRNmDBB2dnZtuX48ePXPQcAADCvOx7aXF1d7V5bLBbbfWqDBw/W999/r127dum///2v6tSpY7tfTJJ69eolwzC0bt06HT9+XJ999pnt0qh06fLj6tWr9corr+izzz5TcnKyQkNDdeHCBbtzPvDAAyooKCgyk+Xs7KzNmzdrw4YNaty4sRYsWKCQkBClpaVJkqpVq6ZevXopPj7+qqGyuP5d70nQXbt2KTIyUt27d9fHH3+s/fv3a+LEiUXq/jOr1Spvb2+7BQAAlF9l6unRypUrq3fv3oqPj9euXbv0xBNP2G2vUKGC+vbtqyVLlujo0aMKCQlRixYtbNt37typqKgo9enTR9Klmbf09PQi57n33nsVHR2trl27ysXFxXbPmXQpZLVv317t27fXSy+9pNq1a2v16tUaO3aspEuzgQMHDlTNmjVVr149tW/fvlR9dHNzU0FBgd26L774QrVr19bEiRNt63744YdSHRcAAJRvZSq0SZdCUc+ePVVQUKAhQ4YU2R4ZGamePXvq66+/1mOPPWa3rUGDBlq1apV69eoli8WiSZMmFXna9LJ27dpp/fr16tatm1xcXBQTE6OkpCRt3bpVXbp0UbVq1ZSUlKRff/1VjRo1su0XHh4ub29vvfzyy5o6dWqp+xcUFKSNGzcqNTVVlStXlo+Pjxo0aKCMjAwtX75crVu31rp167R69epSHxsAAJRfZe5rrMLCwhQQEKDw8HDVqFGjyPZOnTrJz89PqampGjRokN22OXPmqFKlSmrXrp169eql8PBwu5m4K91///1at26dXnzxRS1YsEDe3t7asWOHunfvruDgYL344ouaPXu2unXrZtvHyclJUVFRKigo0ODBg0vdv+HDhyskJEStWrVS1apVtXPnTv3973/XmDFjFB0d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N4J72gAAAEyA0AYAAGAChDYAAAATILQBAACYAKENAADABAhtAAAAJkBoAwAAMAFCGwAAgAkQ2gDgDoqLi1P16tVlsVi0Zs2aItsTExNlsViKfCH2tXTo0EExMTE3VVdCQoJ8fX1veP/i+nOzbtdxATMitAF/cVFRUbJYLLJYLHJzc1P9+vU1depUXbx40dGlXZfZ/qCnpKRoypQpevPNN5WZmalu3bo5uqRbpqz0Jy4uTnffffcdP++tCM7A9bg4ugAAjte1a1fFx8crLy9P69ev1+jRo+Xq6qoJEyaU+lgFBQWyWCxycuL/Ca907NgxSVJERIQsFouDq7m1/P39HV0CUO7xryoAWa1W+fv7q3bt2ho5cqTCwsK0du1aSVJeXp5iY2N11113qWLFimrTpo0SExNt+16+rLZ27Vo1btxYVqtVGRkZysvL0/jx4xUYGCir1ar69evr//7v/2z7HT58WN26dZOnp6eqV6+uxx9/XL/99ptte4cOHfTMM8/o+eefl5+fn/z9/RUXF2fbHhQUJEnq06ePLBaL7fWxY8cUERGh6tWry9PTU61bt9aWLVvs+puZmakePXrI3d1dderU0dKlSxUUFKS5c+fa2pw6dUrDhg1T1apV5e3trU6dOunAgQPXfB8PHTqkTp06yd3dXZUrV9aIESOUm5sr6dIMUK9evSRJTk5OJQ5tJ0+e1MCBA3XXXXfJw8NDoaGhWrZsWZF2Fy9eVHR0tHx8fFSlShVNmjRJf/5q6euN45UOHDigjh07ysvLS97e3mrZsqX27t1bbPs/z3qmp6fLYrFo1apV6tixozw8PNS8eXPt2rXrmn09cuSIHnzwQVWoUEGNGzfW5s2bi7QZP368goOD5eHhobp162rSpEnKz8+XdOl3ccqUKTpw4IBt9jghIUGSNGfOHIWGhqpixYoKDAzUqFGjbGMjST/88IN69eqlSpUqqWLFimrSpInWr19v236t39eoqCht375d8+bNs503PT39mn0FbgShDUAR7u7uunDhgiQpOjpau3bt0vLly3Xw4EH169dPXbt21ZEjR2ztz549q3/96196++239fXXX6tatWoaPHiwli1bpvnz5yslJUVvvvmmPD09JV0KRJ06ddI999yjvXv36pNPPtEvv/yi/v3729WxaNEiVaxYUUlJSZo5c6amTp1q+0O+Z88eSVJ8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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"#labels = {0:\"neutraali\", 1:\"viha\", 2:\"innokkuus\",3:\"inho\",4:\"pelko\",5:\"ilo\",6:\"suru\",7:\"yllättyneisyys\",8:\"hyväksyntä\"}\n",
"plt.rcdefaults()\n",
"fig, ax = plt.subplots()\n",
"\n",
"y_pos = np.arange(len(label_list))\n",
"performance = count_list\n",
"\n",
"ax.barh(y_pos, performance, align='center')\n",
"ax.set_yticks(y_pos)\n",
"ax.set_yticklabels(label_list)\n",
"ax.invert_yaxis() # labels read top-to-bottom\n",
"ax.set_xlabel('Percentage of labels in dataset')\n",
"\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"total runs: 1 12621\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
" 20%|██ | 1/5 [00:00<00:01, 2.45it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"INPUT:\n",
"Perustunteet ovat neutraali, viha, innokkuus, inho, pelko, ilo, suru, yllättyneisyys ja hyväksyntä.\n",
"Nimeä perustunteet seuraavista teksteistä:\n",
"Teksti: Näen joukon ihmisiä kolmannessa kerroksessa.\n",
"Perustunne: neutraali\n",
"Teksti: Kaikki hyvin.\n",
"Perustunne: \n",
"OUTPUT:\n",
"ännän ja emännän välinen suhde on hyvin läheinen\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
" 40%|████ | 2/5 [00:00<00:01, 2.74it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"INPUT:\n",
"Perustunteet ovat neutraali, viha, innokkuus, inho, pelko, ilo, suru, yllättyneisyys ja hyväksyntä.\n",
"Nimeä perustunteet seuraavista teksteistä:\n",
"Teksti: Se oli kamalan hankala.\n",
"Perustunne: viha\n",
"Teksti: Seitsemän vuodenko?\n",
"Perustunne: \n",
"OUTPUT:\n",
"ännän kanssa. Perustunne: änn\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
" 60%|██████ | 3/5 [00:01<00:00, 2.88it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"INPUT:\n",
"Perustunteet ovat neutraali, viha, innokkuus, inho, pelko, ilo, suru, yllättyneisyys ja hyväksyntä.\n",
"Nimeä perustunteet seuraavista teksteistä:\n",
"Teksti: Mitä haluaisit tietää?\n",
"Perustunne: yllättyneisyys\n",
"Teksti: En vain uskonut korviani.\n",
"Perustunne: \n",
"OUTPUT:\n",
"ännän ja emännän välinen suhde on kahden aikuisen\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
" 80%|████████ | 4/5 [00:01<00:00, 2.94it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"INPUT:\n",
"Perustunteet ovat neutraali, viha, innokkuus, inho, pelko, ilo, suru, yllättyneisyys ja hyväksyntä.\n",
"Nimeä perustunteet seuraavista teksteistä:\n",
"Teksti: Olen varma, että tunnet samoin minua kohtaan, joten pysytään erossa toisistamme.\n",
"Perustunne: suru\n",
"Teksti: Hyvää peliä, kaverit.\n",
"Perustunne: \n",
"OUTPUT:\n",
"ännän ja emännän välinen suhde on kahden aikuisen\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 5/5 [00:01<00:00, 2.90it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"INPUT:\n",
"Perustunteet ovat neutraali, viha, innokkuus, inho, pelko, ilo, suru, yllättyneisyys ja hyväksyntä.\n",
"Nimeä perustunteet seuraavista teksteistä:\n",
"Teksti: Myyn yrityksen pieninä osina koska osat ovat kokonaisuutta arvokkaampia.\n",
"Perustunne: neutraali\n",
"Teksti: En anna kenenkään tytön sitoa itseäni.\n",
"Perustunne: \n",
"OUTPUT:\n",
"ivaALLINENLLYS: ivallinenLLYS: \n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n"
]
},
{
"data": {
"text/plain": [
"([0.0], [0.0])"
]
},
"execution_count": 38,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"\n",
"input_base = \"\"\"Perustunteet ovat neutraali, viha, innokkuus, inho, pelko, ilo, suru, yllättyneisyys ja hyväksyntä.\n",
"Nimeä perustunteet seuraavista teksteistä:\n",
"\"\"\"\n",
"from tqdm import tqdm\n",
"successess = []\n",
"in_set = []\n",
"all_preds = []\n",
"all_targets = []\n",
"for s in range(2,3):\n",
" #samples = 5\n",
" samples = s\n",
" runs = len(dataset)//samples\n",
" runs = 5\n",
" start = 0\n",
" print(\"total runs:\",s-1, len(dataset)//samples)\n",
" predictions = []\n",
" targets = []\n",
" model = model.to(\"cuda\")\n",
" for j in tqdm(range(start,start+runs*samples,samples)):\n",
" input_text = input_base\n",
" for i in range(samples-1):\n",
" input_text += \"Teksti: \" + dataset[j+i][\"sentence\"] + \"\\nPerustunne: \" + \", \".join([labels[item] for item in dataset[j+i][\"labels\"]]) + \"\\n\"\n",
" input_text += \"Teksti: \" + dataset[j+samples-1][\"sentence\"] + \"\\nPerustunne: \" \n",
" target_labels = [labels[item] for item in dataset[j+samples-1][\"labels\"]]\n",
"\n",
" #in_tokens = tokenizer(input_text, padding=\"max_length\", truncation=True, max_length=900)\n",
" inputs = tokenizer.encode(input_text, add_special_tokens=False, return_tensors=\"pt\").to(\"cuda\")\n",
" prompt = tokenizer.decode(inputs[0],skip_special_tokens=True, clean_up_tokenization_spaces=True)\n",
" prompt_len = len(prompt)\n",
" #big outputs = model.generate(inputs, max_length=len(inputs[0])+10, do_sample=True, top_p=0.6, top_k=10, temperature=0.1)\n",
" #finnish outputs = model.generate(inputs, max_length=len(inputs[0])+10, do_sample=True, top_p=0.3, top_k=10, temperature=0.4, pad_token_id=tokenizer.eos_token_id)\n",
" if model_type == \"custom\" or model_type == \"distill\":\n",
" outputs = model.generate(inputs, max_length=len(inputs[0])+10, do_sample=False, pad_token_id=tokenizer.eos_token_id)\n",
" else:\n",
" outputs = model.generate(inputs, max_length=len(inputs[0])+10, do_sample=False)\n",
" text_out = tokenizer.decode(outputs[0])[prompt_len:]\n",
" print(\"INPUT:\")\n",
" print(input_text)\n",
" print(\"OUTPUT:\")\n",
" print(text_out)\n",
" split = text_out.split()\n",
" prediction = split[0].lower().strip(\",.\") if len(split) > 0 else \"\"\n",
" predictions.append(prediction)\n",
" targets.append(target_labels)\n",
" #print(j,prediction in target_labels, \"PRED:\", prediction, \"LABELS:\" , \",\".join(target_labels),\"TEXT:\", dataset[j+samples-1][\"sentence\"])\n",
" success = 0\n",
" in_labels = 0\n",
" total = len(predictions)\n",
" for i in range(total):\n",
" success += 1 if predictions[i] in targets[i] else 0\n",
" in_labels += 1 if predictions[i] in label_list else 0\n",
" successess.append(success/total)\n",
" in_set.append(in_labels/total)\n",
" all_preds.append(predictions)\n",
" all_targets.append(targets)\n",
"#len(tokenizer.decode(first,skip_special_tokens=True, clean_up_tokenization_spaces=True))\n",
"successess, in_set"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [],
"source": [
"import pickle\n",
"with open('preds.pickle', 'wb') as handle:\n",
" pickle.dump(all_preds, handle, protocol=pickle.HIGHEST_PROTOCOL)\n",
"with open('targets.pickle', 'wb') as handle:\n",
" pickle.dump(all_targets, handle, protocol=pickle.HIGHEST_PROTOCOL)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\"small\"\n",
"([0.00225805173711524,\n",
" 0.15870374772205056,\n",
" 0.15711908723555978,\n",
" 0.19270998415213947,\n",
" 0.22801109350237717,\n",
" 0.2267649156168291,\n",
" 0.24708818635607321,\n",
" 0.24532488114104595,\n",
" 0.26212553495007135],\n",
" [0.009428356376025036,\n",
" 0.5837096901988749,\n",
" 0.5331590206798194,\n",
" 0.6407290015847861,\n",
" 0.6988906497622821,\n",
" 0.7314000475398146,\n",
" 0.7742651136993899,\n",
" 0.803486529318542,\n",
" 0.8184736091298146])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\"distill\"\n",
"([0.0,\n",
" 0.20917518421678155,\n",
" 0.2300927026384597,\n",
" 0.24532488114104595,\n",
" 0.25614104595879555,\n",
" 0.24815783218445447,\n",
" 0.24126455906821964,\n",
" 0.23264659270998414,\n",
" 0.23359486447931527],\n",
" [0.0,\n",
" 0.7923302432453847,\n",
" 0.8159020679819349,\n",
" 0.8706814580031695,\n",
" 0.8629160063391442,\n",
" 0.8604706441644877,\n",
" 0.8394342762063228,\n",
" 0.8256735340729001,\n",
" 0.8113409415121255])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\"custom\"\n",
"([0.007051459810640573,\n",
" 0.01758973140004754,\n",
" 0.024720703589256002,\n",
" 0.030903328050713153,\n",
" 0.034270998415213944,\n",
" 0.03636795816496316,\n",
" 0.03937881308929562,\n",
" 0.04469096671949287,\n",
" 0.039229671897289584],\n",
" [0.054549776175573425,\n",
" 0.12621820774898979,\n",
" 0.18564297599239363,\n",
" 0.22472266244057051,\n",
" 0.2662440570522979,\n",
" 0.281198003327787,\n",
" 0.30282861896838603,\n",
" 0.3033280507131537,\n",
" 0.2970756062767475])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\"large\"\n",
"([0.0,\n",
" 0.23944219950875525,\n",
" 0.1743522700261469,\n",
" 0.20839936608557844,\n",
" 0.21196513470681458,\n",
" 0.2053719990492037,\n",
" 0.21075984470327233,\n",
" 0.19904912836767036,\n",
" 0.19721825962910128],\n",
" [7.922988551281543e-05,\n",
" 0.9805086760161635,\n",
" 0.9628000950796292,\n",
" 0.9725832012678288,\n",
" 0.9756339144215531,\n",
" 0.9800332778702163,\n",
" 0.9836383804769828,\n",
" 0.9870047543581616,\n",
" 0.9853780313837375])"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"\n",
"input_base = \"\"\"Perustunteet ovat neutraali, viha, innokkuus, inho, pelko, ilo, suru, yllättyneisyys ja hyväksyntä.\n",
"Nimeä perustunteet seuraavista teksteistä:\n",
"\"\"\"\n",
"from tqdm import tqdm\n",
"successess = []\n",
"in_set = []\n",
"for s in range(1,10):\n",
" #samples = 5\n",
" samples = s\n",
" runs = len(dataset)//samples\n",
" #runs = 100\n",
" start = 0\n",
" print(\"total runs:\",s-1, len(dataset)//samples)\n",
" predictions = []\n",
" targets = []\n",
" model = model.to(\"cuda\")\n",
" for j in tqdm(range(start,start+runs*samples,samples)):\n",
" input_text = input_base\n",
" for i in range(samples-1):\n",
" input_text += \"Teksti: \" + dataset[j+i][\"sentence\"] + \"\\nPerustunne: \" + \", \".join([labels[item] for item in dataset[j+i][\"labels\"]]) + \"\\n\"\n",
" input_text += \"Teksti: \" + dataset[j+samples-1][\"sentence\"] + \"\\nPerustunne:\" \n",
" target_labels = [labels[item] for item in dataset[j+samples-1][\"labels\"]]\n",
"\n",
" #in_tokens = tokenizer(input_text, padding=\"max_length\", truncation=True, max_length=900)\n",
" inputs = tokenizer.encode(input_text, add_special_tokens=False, return_tensors=\"pt\").to(\"cuda\")\n",
" prompt = tokenizer.decode(inputs[0],skip_special_tokens=True, clean_up_tokenization_spaces=True)\n",
" prompt_len = len(prompt)\n",
" #big outputs = model.generate(inputs, max_length=len(inputs[0])+10, do_sample=True, top_p=0.6, top_k=10, temperature=0.1)\n",
" #finnish outputs = model.generate(inputs, max_length=len(inputs[0])+10, do_sample=True, top_p=0.3, top_k=10, temperature=0.4, pad_token_id=tokenizer.eos_token_id)\n",
" if model_type == \"custom\":\n",
" #outputs = model.generate(inputs, max_length=len(inputs[0])+10, do_sample=True, top_p=0.3, top_k=10, temperature=0.4, pad_token_id=tokenizer.eos_token_id)\n",
" outputs = model.generate(inputs, max_length=len(inputs[0])+10, do_sample=False, pad_token_id=tokenizer.eos_token_id)\n",
" elif model_type == \"distill\":\n",
" outputs = model.generate(inputs, max_length=len(inputs[0])+10, do_sample=True, top_p=0.3, top_k=10, temperature=0.4, pad_token_id=tokenizer.eos_token_id)\n",
" elif model_type == \"large\":\n",
" #outputs = model.generate(inputs, max_length=len(inputs[0])+10, do_sample=True, top_p=0.2, top_k=10, temperature=0.4) 0.22\n",
" outputs = model.generate(inputs, max_length=len(inputs[0])+10, do_sample=True, top_p=0.3, top_k=5, temperature=0.1)\n",
" outputs = model.generate(inputs, max_length=len(inputs[0])+10, do_sample=False)\n",
" else:\n",
" outputs = model.generate(inputs, max_length=len(inputs[0])+10, do_sample=True, top_p=0.6, top_k=10, temperature=0.1)\n",
" text_out = tokenizer.decode(outputs[0])[prompt_len:]\n",
" #print(\"INPUT:\")\n",
" #print(prompt)\n",
" #print(\"OUTPUT:\")\n",
" #print(text_out)\n",
"\n",
" prediction = text_out.split()[0].lower().strip(\",.\")\n",
" predictions.append(prediction)\n",
" targets.append(target_labels)\n",
" #print(j,prediction in target_labels, \"PRED:\", prediction, \"LABELS:\" , \",\".join(target_labels),\"TEXT:\", dataset[j+samples-1][\"sentence\"])\n",
" success = 0\n",
" in_labels = 0\n",
" total = len(predictions)\n",
" for i in range(total):\n",
" success += 1 if predictions[i] in targets[i] else 0\n",
" in_labels += 1 if predictions[i] in label_list else 0\n",
" successess.append(success/total)\n",
" in_set.append(in_labels/total)\n",
"#len(tokenizer.decode(first,skip_special_tokens=True, clean_up_tokenization_spaces=True))\n",
"successess, in_set"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\"small\"\n",
"([0.0022976666798716476,\n",
" 0.15767371840583155,\n",
" 0.15711908723555978,\n",
" 0.19397781299524564,\n",
" 0.22880348652931853,\n",
" 0.225576420251961,\n",
" 0.24708818635607321,\n",
" 0.24564183835182252,\n",
" 0.2624821683309558],\n",
" [0.009666046032563482,\n",
" 0.5812534664448142,\n",
" 0.5332778702163061,\n",
" 0.6404120443740096,\n",
" 0.6996830427892234,\n",
" 0.7304492512479202,\n",
" 0.7737104825291181,\n",
" 0.8053882725832012,\n",
" 0.8199001426533523])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\"large\"\n",
"\n",
"([0.0,\n",
" 0.23904603438713257,\n",
" 0.17233182790587118,\n",
" 0.20649762282091919,\n",
" 0.21097464342313788,\n",
" 0.2053719990492037,\n",
" 0.2129783693843594,\n",
" 0.20126782884310618,\n",
" 0.19686162624821682],\n",
" [7.922988551281543e-05,\n",
" 0.9801125108945409,\n",
" 0.9638697409080105,\n",
" 0.9708399366085578,\n",
" 0.9750396196513471,\n",
" 0.9809840741621108,\n",
" 0.9836383804769828,\n",
" 0.9882725832012679,\n",
" 0.9843081312410842])"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0, 0.5, 'Accuracy')"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 750x450 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"tries = np.array(range(1,8))-1\n",
"accuracy = np.array(successess)*100\n",
"import matplotlib.pyplot as plt\n",
"fig, ax = plt.subplots(figsize=(5, 3), dpi=150)\n",
"ax.plot(tries,accuracy)\n",
"ax.set_xlabel(\"Examples given\")\n",
"ax.set_ylabel(\"Accuracy\")\n"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0, 0.5, 'percentage in labels')"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 750x450 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"tries = np.array(range(1,8))-1\n",
"accuracy = np.array(in_set)*100\n",
"import matplotlib.pyplot as plt\n",
"fig, ax = plt.subplots(figsize=(5, 3), dpi=150)\n",
"ax.plot(tries,accuracy)\n",
"ax.set_xlabel(\"Examples given\")\n",
"ax.set_ylabel(\"percentage of generations in label set\")"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.18 0.96\n"
]
}
],
"source": [
"success = 0\n",
"in_labels = 0\n",
"total = len(predictions)\n",
"for i in range(total):\n",
" success += 1 if predictions[i] in targets[i] else 0\n",
" in_labels += 1 if predictions[i] in label_list else 0\n",
"print(success/total, in_labels/total)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import pickle\n",
"with open('preds.pickle', 'wb') as handle:\n",
" pickle.dump(predictions, handle, protocol=pickle.HIGHEST_PROTOCOL)\n",
"with open('targets.pickle', 'wb') as handle:\n",
" pickle.dump(targets, handle, protocol=pickle.HIGHEST_PROTOCOL)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import pickle\n",
"preds_load = None\n",
"refs_load = None\n",
"with open('preds.pickle', 'rb') as handle:\n",
" preds_load = pickle.load(handle)\n",
"with open('refs.pickle', 'rb') as handle:\n",
" refs_load = pickle.load(handle)"
]
},
{
"cell_type": "code",
"execution_count": 73,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.13186813186813187"
]
},
"execution_count": 73,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.array(success).sum()/len(success)"
]
},
{
"cell_type": "code",
"execution_count": 63,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"['inho']"
]
},
"execution_count": 63,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"target_labels"
]
},
{
"cell_type": "code",
"execution_count": 55,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"tensor([[45742, 275, 26, 24750, 22160, 1655, 46957, 38494, 14, 182,\n",
" 30257, 28643, 26, 35724, 182, 45742, 275, 26, 2054, 797,\n",
" 14, 182, 30257, 28643, 26, 49176, 12, 6190, 182, 45742,\n",
" 275, 26, 775, 458, 20980, 7391, 14, 182, 30257, 28643,\n",
" 26, 6543, 182, 45742, 275, 26, 45117, 1348, 290, 31,\n",
" 182, 30257, 28643, 26, 35724, 182, 45742, 275, 26, 1225,\n",
" 13614, 1304, 31, 182, 30257, 28643, 26, 1703, 9636, 384,\n",
" 3388, 182, 45742, 275, 26, 693, 525, 10253, 36945, 882,\n",
" 14, 182, 30257, 28643, 26, 693, 1032, 14, 182, 45742,\n",
" 275, 26, 1069, 17974, 14]])"
]
},
"execution_count": 55,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"outputs.split()[0]\n"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'sentence': 'Seitsemän vuodenko?', 'labels': [0]}"
]
},
"execution_count": 33,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dataset[j+step-1]"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3.9.4 64-bit",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.4"
},
"orig_nbformat": 4,
"vscode": {
"interpreter": {
"hash": "1d9050d93d93b71fa3edc5938291757e7480975ed666173bb85be41dbf084556"
}
}
},
"nbformat": 4,
"nbformat_minor": 2
} |