LencoDigitexer commited on
Commit ·
aebfc44
1
Parent(s): 94d1024
add programs
Browse files- GPT_introduction.ipynb +0 -0
- GROB.md +0 -0
- GROB.txt +0 -0
- TRAIN_GPT.ipynb +1214 -0
- cached_lm_GPT2Tokenizer_64_GROB.txt +0 -0
- cached_lm_GPT2Tokenizer_64_train_dataset.txt +0 -0
- main.py +19 -0
- test.ipynb +491 -0
- train_dataset.txt +141 -0
- unit_all_md_to_one_file.ipynb +77 -0
GPT_introduction.ipynb
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
GROB.md
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
GROB.txt
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
TRAIN_GPT.ipynb
ADDED
|
@@ -0,0 +1,1214 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"cells": [
|
| 3 |
+
{
|
| 4 |
+
"cell_type": "markdown",
|
| 5 |
+
"metadata": {
|
| 6 |
+
"colab_type": "text",
|
| 7 |
+
"id": "view-in-github"
|
| 8 |
+
},
|
| 9 |
+
"source": [
|
| 10 |
+
"<a href=\"https://colab.research.google.com/gist/LencoDigitexer/b1f3602547b99e3bc7478c3188c65024/.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
|
| 11 |
+
]
|
| 12 |
+
},
|
| 13 |
+
{
|
| 14 |
+
"cell_type": "markdown",
|
| 15 |
+
"metadata": {
|
| 16 |
+
"id": "0RFUxrlMNIkx"
|
| 17 |
+
},
|
| 18 |
+
"source": [
|
| 19 |
+
"#Импорты"
|
| 20 |
+
]
|
| 21 |
+
},
|
| 22 |
+
{
|
| 23 |
+
"cell_type": "code",
|
| 24 |
+
"execution_count": 9,
|
| 25 |
+
"metadata": {
|
| 26 |
+
"id": "0lhkuNdOoqvq"
|
| 27 |
+
},
|
| 28 |
+
"outputs": [],
|
| 29 |
+
"source": [
|
| 30 |
+
"import pandas as pd\n",
|
| 31 |
+
"import numpy as np"
|
| 32 |
+
]
|
| 33 |
+
},
|
| 34 |
+
{
|
| 35 |
+
"cell_type": "code",
|
| 36 |
+
"execution_count": null,
|
| 37 |
+
"metadata": {
|
| 38 |
+
"colab": {
|
| 39 |
+
"base_uri": "https://localhost:8080/"
|
| 40 |
+
},
|
| 41 |
+
"id": "d8fP5y2Ipsln",
|
| 42 |
+
"outputId": "1096c5a5-7ef6-401c-b0d9-b59e6cf9fc86"
|
| 43 |
+
},
|
| 44 |
+
"outputs": [],
|
| 45 |
+
"source": [
|
| 46 |
+
"!pip install transformers==4.19.0"
|
| 47 |
+
]
|
| 48 |
+
},
|
| 49 |
+
{
|
| 50 |
+
"cell_type": "code",
|
| 51 |
+
"execution_count": 24,
|
| 52 |
+
"metadata": {},
|
| 53 |
+
"outputs": [
|
| 54 |
+
{
|
| 55 |
+
"name": "stdout",
|
| 56 |
+
"output_type": "stream",
|
| 57 |
+
"text": [
|
| 58 |
+
"Requirement already satisfied: transformers in c:\\github\\train_gpt\\.conda\\lib\\site-packages (4.19.0)\n",
|
| 59 |
+
"Collecting transformers\n",
|
| 60 |
+
" Downloading transformers-4.36.1-py3-none-any.whl.metadata (126 kB)\n",
|
| 61 |
+
" ---------------------------------------- 0.0/126.8 kB ? eta -:--:--\n",
|
| 62 |
+
" --- ------------------------------------ 10.2/126.8 kB ? eta -:--:--\n",
|
| 63 |
+
" --- ------------------------------------ 10.2/126.8 kB ? eta -:--:--\n",
|
| 64 |
+
" -------- ---------------------------- 30.7/126.8 kB 145.2 kB/s eta 0:00:01\n",
|
| 65 |
+
" -------- ---------------------------- 30.7/126.8 kB 145.2 kB/s eta 0:00:01\n",
|
| 66 |
+
" ----------------- ------------------- 61.4/126.8 kB 233.8 kB/s eta 0:00:01\n",
|
| 67 |
+
" ------------------------------- ---- 112.6/126.8 kB 364.4 kB/s eta 0:00:01\n",
|
| 68 |
+
" ------------------------------------ 126.8/126.8 kB 373.4 kB/s eta 0:00:00\n",
|
| 69 |
+
"Requirement already satisfied: filelock in c:\\users\\addmi\\appdata\\roaming\\python\\python311\\site-packages (from transformers) (3.13.1)\n",
|
| 70 |
+
"Requirement already satisfied: huggingface-hub<1.0,>=0.19.3 in c:\\users\\addmi\\appdata\\roaming\\python\\python311\\site-packages (from transformers) (0.19.4)\n",
|
| 71 |
+
"Requirement already satisfied: numpy>=1.17 in c:\\users\\addmi\\appdata\\roaming\\python\\python311\\site-packages (from transformers) (1.26.1)\n",
|
| 72 |
+
"Requirement already satisfied: packaging>=20.0 in c:\\users\\addmi\\appdata\\roaming\\python\\python311\\site-packages (from transformers) (23.0)\n",
|
| 73 |
+
"Requirement already satisfied: pyyaml>=5.1 in c:\\users\\addmi\\appdata\\roaming\\python\\python311\\site-packages (from transformers) (6.0.1)\n",
|
| 74 |
+
"Requirement already satisfied: regex!=2019.12.17 in c:\\users\\addmi\\appdata\\roaming\\python\\python311\\site-packages (from transformers) (2023.10.3)\n",
|
| 75 |
+
"Requirement already satisfied: requests in c:\\users\\addmi\\appdata\\roaming\\python\\python311\\site-packages (from transformers) (2.28.2)\n",
|
| 76 |
+
"Collecting tokenizers<0.19,>=0.14 (from transformers)\n",
|
| 77 |
+
" Using cached tokenizers-0.15.0-cp311-none-win_amd64.whl.metadata (6.8 kB)\n",
|
| 78 |
+
"Requirement already satisfied: safetensors>=0.3.1 in c:\\users\\addmi\\appdata\\roaming\\python\\python311\\site-packages (from transformers) (0.4.0)\n",
|
| 79 |
+
"Requirement already satisfied: tqdm>=4.27 in c:\\users\\addmi\\appdata\\roaming\\python\\python311\\site-packages (from transformers) (4.66.1)\n",
|
| 80 |
+
"Requirement already satisfied: fsspec>=2023.5.0 in c:\\users\\addmi\\appdata\\roaming\\python\\python311\\site-packages (from huggingface-hub<1.0,>=0.19.3->transformers) (2023.10.0)\n",
|
| 81 |
+
"Requirement already satisfied: typing-extensions>=3.7.4.3 in c:\\users\\addmi\\appdata\\roaming\\python\\python311\\site-packages (from huggingface-hub<1.0,>=0.19.3->transformers) (4.8.0)\n",
|
| 82 |
+
"Requirement already satisfied: colorama in c:\\users\\addmi\\appdata\\roaming\\python\\python311\\site-packages (from tqdm>=4.27->transformers) (0.4.6)\n",
|
| 83 |
+
"Requirement already satisfied: charset-normalizer<4,>=2 in c:\\users\\addmi\\appdata\\roaming\\python\\python311\\site-packages (from requests->transformers) (3.1.0)\n",
|
| 84 |
+
"Requirement already satisfied: idna<4,>=2.5 in c:\\users\\addmi\\appdata\\roaming\\python\\python311\\site-packages (from requests->transformers) (3.4)\n",
|
| 85 |
+
"Requirement already satisfied: urllib3<1.27,>=1.21.1 in c:\\users\\addmi\\appdata\\roaming\\python\\python311\\site-packages (from requests->transformers) (1.26.15)\n",
|
| 86 |
+
"Requirement already satisfied: certifi>=2017.4.17 in c:\\users\\addmi\\appdata\\roaming\\python\\python311\\site-packages (from requests->transformers) (2022.12.7)\n",
|
| 87 |
+
"Downloading transformers-4.36.1-py3-none-any.whl (8.3 MB)\n",
|
| 88 |
+
" ---------------------------------------- 0.0/8.3 MB ? eta -:--:--\n",
|
| 89 |
+
" --------------------------------------- 0.1/8.3 MB 3.3 MB/s eta 0:00:03\n",
|
| 90 |
+
" --------------------------------------- 0.2/8.3 MB 2.0 MB/s eta 0:00:05\n",
|
| 91 |
+
" - -------------------------------------- 0.2/8.3 MB 2.2 MB/s eta 0:00:04\n",
|
| 92 |
+
" - -------------------------------------- 0.3/8.3 MB 1.8 MB/s eta 0:00:05\n",
|
| 93 |
+
" -- ------------------------------------- 0.5/8.3 MB 2.5 MB/s eta 0:00:04\n",
|
| 94 |
+
" ---- ----------------------------------- 0.8/8.3 MB 3.0 MB/s eta 0:00:03\n",
|
| 95 |
+
" ----- ---------------------------------- 1.2/8.3 MB 3.7 MB/s eta 0:00:02\n",
|
| 96 |
+
" -------- ------------------------------- 1.7/8.3 MB 4.6 MB/s eta 0:00:02\n",
|
| 97 |
+
" ---------- ----------------------------- 2.2/8.3 MB 5.3 MB/s eta 0:00:02\n",
|
| 98 |
+
" ------------ --------------------------- 2.6/8.3 MB 5.5 MB/s eta 0:00:02\n",
|
| 99 |
+
" --------------- ------------------------ 3.2/8.3 MB 5.9 MB/s eta 0:00:01\n",
|
| 100 |
+
" --------------- ------------------------ 3.2/8.3 MB 6.0 MB/s eta 0:00:01\n",
|
| 101 |
+
" --------------- ------------------------ 3.2/8.3 MB 6.0 MB/s eta 0:00:01\n",
|
| 102 |
+
" --------------- ------------------------ 3.2/8.3 MB 6.0 MB/s eta 0:00:01\n",
|
| 103 |
+
" --------------- ------------------------ 3.2/8.3 MB 6.0 MB/s eta 0:00:01\n",
|
| 104 |
+
" ---------------- ----------------------- 3.5/8.3 MB 4.7 MB/s eta 0:00:02\n",
|
| 105 |
+
" ---------------- ----------------------- 3.5/8.3 MB 4.7 MB/s eta 0:00:02\n",
|
| 106 |
+
" ------------------ --------------------- 3.8/8.3 MB 4.4 MB/s eta 0:00:02\n",
|
| 107 |
+
" --------------------- ------------------ 4.5/8.3 MB 5.2 MB/s eta 0:00:01\n",
|
| 108 |
+
" ---------------------------- ----------- 5.9/8.3 MB 6.2 MB/s eta 0:00:01\n",
|
| 109 |
+
" ------------------------------- -------- 6.5/8.3 MB 6.4 MB/s eta 0:00:01\n",
|
| 110 |
+
" --------------------------------- ------ 6.9/8.3 MB 6.5 MB/s eta 0:00:01\n",
|
| 111 |
+
" ----------------------------------- ---- 7.4/8.3 MB 6.7 MB/s eta 0:00:01\n",
|
| 112 |
+
" ------------------------------------- -- 7.8/8.3 MB 6.8 MB/s eta 0:00:01\n",
|
| 113 |
+
" --------------------------------------- 8.3/8.3 MB 7.0 MB/s eta 0:00:01\n",
|
| 114 |
+
" ---------------------------------------- 8.3/8.3 MB 6.8 MB/s eta 0:00:00\n",
|
| 115 |
+
"Using cached tokenizers-0.15.0-cp311-none-win_amd64.whl (2.2 MB)\n",
|
| 116 |
+
"Installing collected packages: tokenizers, transformers\n",
|
| 117 |
+
" Attempting uninstall: tokenizers\n",
|
| 118 |
+
" Found existing installation: tokenizers 0.12.1\n",
|
| 119 |
+
" Uninstalling tokenizers-0.12.1:\n",
|
| 120 |
+
" Successfully uninstalled tokenizers-0.12.1\n",
|
| 121 |
+
" Attempting uninstall: transformers\n",
|
| 122 |
+
" Found existing installation: transformers 4.19.0\n",
|
| 123 |
+
" Uninstalling transformers-4.19.0:\n",
|
| 124 |
+
" Successfully uninstalled transformers-4.19.0\n",
|
| 125 |
+
"Successfully installed tokenizers-0.15.0 transformers-4.36.1\n"
|
| 126 |
+
]
|
| 127 |
+
},
|
| 128 |
+
{
|
| 129 |
+
"name": "stderr",
|
| 130 |
+
"output_type": "stream",
|
| 131 |
+
"text": [
|
| 132 |
+
" WARNING: Failed to remove contents in a temporary directory 'C:\\GitHub\\TRAIN_GPT\\.conda\\Lib\\site-packages\\~okenizers'.\n",
|
| 133 |
+
" You can safely remove it manually.\n"
|
| 134 |
+
]
|
| 135 |
+
}
|
| 136 |
+
],
|
| 137 |
+
"source": [
|
| 138 |
+
"!pip install -U transformers"
|
| 139 |
+
]
|
| 140 |
+
},
|
| 141 |
+
{
|
| 142 |
+
"cell_type": "code",
|
| 143 |
+
"execution_count": 25,
|
| 144 |
+
"metadata": {
|
| 145 |
+
"id": "O6ujFUYBl2Fj"
|
| 146 |
+
},
|
| 147 |
+
"outputs": [],
|
| 148 |
+
"source": [
|
| 149 |
+
"from transformers import GPT2LMHeadModel, GPT2Tokenizer\n",
|
| 150 |
+
"import torch\n",
|
| 151 |
+
"from torch.utils.data import Dataset # this is the pytorch class import\n",
|
| 152 |
+
"from transformers import DataCollatorForLanguageModeling\n",
|
| 153 |
+
"from transformers import TrainingArguments, Trainer\n",
|
| 154 |
+
"from transformers import StoppingCriteria, StoppingCriteriaList"
|
| 155 |
+
]
|
| 156 |
+
},
|
| 157 |
+
{
|
| 158 |
+
"cell_type": "code",
|
| 159 |
+
"execution_count": 26,
|
| 160 |
+
"metadata": {
|
| 161 |
+
"id": "k7cC6BjGmhWm"
|
| 162 |
+
},
|
| 163 |
+
"outputs": [],
|
| 164 |
+
"source": [
|
| 165 |
+
"DEVICE = torch.device(\"cuda\") if torch.cuda.is_available() else None"
|
| 166 |
+
]
|
| 167 |
+
},
|
| 168 |
+
{
|
| 169 |
+
"cell_type": "code",
|
| 170 |
+
"execution_count": null,
|
| 171 |
+
"metadata": {
|
| 172 |
+
"colab": {
|
| 173 |
+
"base_uri": "https://localhost:8080/"
|
| 174 |
+
},
|
| 175 |
+
"id": "BFdrbagdcFSQ",
|
| 176 |
+
"outputId": "8d98ad2f-dd04-4d5a-ab15-1cfbfcb06f79"
|
| 177 |
+
},
|
| 178 |
+
"outputs": [],
|
| 179 |
+
"source": [
|
| 180 |
+
"!pip install openpyxl"
|
| 181 |
+
]
|
| 182 |
+
},
|
| 183 |
+
{
|
| 184 |
+
"cell_type": "markdown",
|
| 185 |
+
"metadata": {
|
| 186 |
+
"id": "4Br1yvNgNBCx"
|
| 187 |
+
},
|
| 188 |
+
"source": [
|
| 189 |
+
"\n",
|
| 190 |
+
"#Обучение модельки"
|
| 191 |
+
]
|
| 192 |
+
},
|
| 193 |
+
{
|
| 194 |
+
"cell_type": "code",
|
| 195 |
+
"execution_count": 27,
|
| 196 |
+
"metadata": {
|
| 197 |
+
"id": "3ZtL62M80QJF"
|
| 198 |
+
},
|
| 199 |
+
"outputs": [],
|
| 200 |
+
"source": [
|
| 201 |
+
"my_path = 'content/'"
|
| 202 |
+
]
|
| 203 |
+
},
|
| 204 |
+
{
|
| 205 |
+
"cell_type": "code",
|
| 206 |
+
"execution_count": null,
|
| 207 |
+
"metadata": {
|
| 208 |
+
"colab": {
|
| 209 |
+
"base_uri": "https://localhost:8080/"
|
| 210 |
+
},
|
| 211 |
+
"id": "PDtJ6TVDpyVr",
|
| 212 |
+
"outputId": "1fa22c1d-64f9-4a5d-d046-8f64a57a2bc9"
|
| 213 |
+
},
|
| 214 |
+
"outputs": [],
|
| 215 |
+
"source": [
|
| 216 |
+
"!wget https://www.dropbox.com/s/89rmm4wucjve2ll/news.csv?dl=0 -O /content/news.csv"
|
| 217 |
+
]
|
| 218 |
+
},
|
| 219 |
+
{
|
| 220 |
+
"cell_type": "code",
|
| 221 |
+
"execution_count": 28,
|
| 222 |
+
"metadata": {
|
| 223 |
+
"id": "_oaLt4broJKd"
|
| 224 |
+
},
|
| 225 |
+
"outputs": [],
|
| 226 |
+
"source": [
|
| 227 |
+
"data = pd.read_csv(f'{my_path}news.csv')\n",
|
| 228 |
+
"data.drop_duplicates(subset = ['title'],inplace=True)\n",
|
| 229 |
+
"data.dropna(inplace=True)"
|
| 230 |
+
]
|
| 231 |
+
},
|
| 232 |
+
{
|
| 233 |
+
"cell_type": "code",
|
| 234 |
+
"execution_count": 29,
|
| 235 |
+
"metadata": {
|
| 236 |
+
"id": "X6JZphFn_WlM"
|
| 237 |
+
},
|
| 238 |
+
"outputs": [],
|
| 239 |
+
"source": [
|
| 240 |
+
"def clear_data(text: str):\n",
|
| 241 |
+
" if 'Что такое' in text:\n",
|
| 242 |
+
" return np.nan\n",
|
| 243 |
+
" if len( text.split(' ')) < 20:\n",
|
| 244 |
+
" return np.nan\n",
|
| 245 |
+
" return text"
|
| 246 |
+
]
|
| 247 |
+
},
|
| 248 |
+
{
|
| 249 |
+
"cell_type": "code",
|
| 250 |
+
"execution_count": 30,
|
| 251 |
+
"metadata": {
|
| 252 |
+
"id": "DWOQE6P2AdW2"
|
| 253 |
+
},
|
| 254 |
+
"outputs": [],
|
| 255 |
+
"source": [
|
| 256 |
+
"data['text'] = data['text'].apply(clear_data)\n",
|
| 257 |
+
"data.dropna(subset=['text'], inplace=True)"
|
| 258 |
+
]
|
| 259 |
+
},
|
| 260 |
+
{
|
| 261 |
+
"cell_type": "code",
|
| 262 |
+
"execution_count": null,
|
| 263 |
+
"metadata": {
|
| 264 |
+
"colab": {
|
| 265 |
+
"base_uri": "https://localhost:8080/"
|
| 266 |
+
},
|
| 267 |
+
"id": "C9P12BUCgshN",
|
| 268 |
+
"outputId": "fbb04d40-6f50-4b65-e26d-2d033fbc745c"
|
| 269 |
+
},
|
| 270 |
+
"outputs": [
|
| 271 |
+
{
|
| 272 |
+
"name": "stdout",
|
| 273 |
+
"output_type": "stream",
|
| 274 |
+
"text": [
|
| 275 |
+
"Fri Jan 20 17:48:31 2023 \n",
|
| 276 |
+
"+-----------------------------------------------------------------------------+\n",
|
| 277 |
+
"| NVIDIA-SMI 516.94 Driver Version: 516.94 CUDA Version: 11.7 |\n",
|
| 278 |
+
"|-------------------------------+----------------------+----------------------+\n",
|
| 279 |
+
"| GPU Name TCC/WDDM | Bus-Id Disp.A | Volatile Uncorr. ECC |\n",
|
| 280 |
+
"| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |\n",
|
| 281 |
+
"| | | MIG M. |\n",
|
| 282 |
+
"|===============================+======================+======================|\n",
|
| 283 |
+
"| 0 NVIDIA GeForce ... WDDM | 00000000:01:00.0 Off | N/A |\n",
|
| 284 |
+
"| 31% 54C P0 61W / 200W | 483MiB / 8192MiB | 0% Default |\n",
|
| 285 |
+
"| | | N/A |\n",
|
| 286 |
+
"+-------------------------------+----------------------+----------------------+\n",
|
| 287 |
+
" \n",
|
| 288 |
+
"+-----------------------------------------------------------------------------+\n",
|
| 289 |
+
"| Processes: |\n",
|
| 290 |
+
"| GPU GI CI PID Type Process name GPU Memory |\n",
|
| 291 |
+
"| ID ID Usage |\n",
|
| 292 |
+
"|=============================================================================|\n",
|
| 293 |
+
"| 0 N/A N/A 2520 C+G ...lPanel\\SystemSettings.exe N/A |\n",
|
| 294 |
+
"| 0 N/A N/A 3056 C+G ...e\\PhoneExperienceHost.exe N/A |\n",
|
| 295 |
+
"| 0 N/A N/A 7284 C+G C:\\Windows\\explorer.exe N/A |\n",
|
| 296 |
+
"| 0 N/A N/A 8860 C+G ...me\\Application\\chrome.exe N/A |\n",
|
| 297 |
+
"| 0 N/A N/A 8876 C+G ...wekyb3d8bbwe\\Video.UI.exe N/A |\n",
|
| 298 |
+
"| 0 N/A N/A 9024 C+G ...5n1h2txyewy\\SearchApp.exe N/A |\n",
|
| 299 |
+
"| 0 N/A N/A 9844 C+G ...perience\\NVIDIA Share.exe N/A |\n",
|
| 300 |
+
"| 0 N/A N/A 10504 C+G ...cw5n1h2txyewy\\LockApp.exe N/A |\n",
|
| 301 |
+
"| 0 N/A N/A 11820 C+G ...2txyewy\\TextInputHost.exe N/A |\n",
|
| 302 |
+
"| 0 N/A N/A 12652 C+G ...sv5v3m8wq0b2\\ExcelApp.exe N/A |\n",
|
| 303 |
+
"| 0 N/A N/A 12912 C+G ...m Files\\iTunes\\iTunes.exe N/A |\n",
|
| 304 |
+
"| 0 N/A N/A 13020 C+G ...y\\ShellExperienceHost.exe N/A |\n",
|
| 305 |
+
"| 0 N/A N/A 14760 C+G ...8wekyb3d8bbwe\\Cortana.exe N/A |\n",
|
| 306 |
+
"| 0 N/A N/A 15212 C+G ...ck\\app-4.29.149\\slack.exe N/A |\n",
|
| 307 |
+
"| 0 N/A N/A 16220 C+G ...zpdnekdrzrea0\\Spotify.exe N/A |\n",
|
| 308 |
+
"| 0 N/A N/A 16712 C+G ...5n1h2txyewy\\SearchApp.exe N/A |\n",
|
| 309 |
+
"| 0 N/A N/A 17004 C+G ...lls\\wgc_renderer_host.exe N/A |\n",
|
| 310 |
+
"+-----------------------------------------------------------------------------+\n"
|
| 311 |
+
]
|
| 312 |
+
}
|
| 313 |
+
],
|
| 314 |
+
"source": [
|
| 315 |
+
"!nvidia-smi"
|
| 316 |
+
]
|
| 317 |
+
},
|
| 318 |
+
{
|
| 319 |
+
"cell_type": "code",
|
| 320 |
+
"execution_count": 33,
|
| 321 |
+
"metadata": {
|
| 322 |
+
"id": "Jsqm0FLOpyoS"
|
| 323 |
+
},
|
| 324 |
+
"outputs": [
|
| 325 |
+
{
|
| 326 |
+
"name": "stderr",
|
| 327 |
+
"output_type": "stream",
|
| 328 |
+
"text": [
|
| 329 |
+
"Downloading: 100%|██████████| 1.54M/1.54M [00:00<00:00, 2.68MB/s]\n",
|
| 330 |
+
"Downloading: 100%|██████████| 1.21M/1.21M [00:00<00:00, 2.22MB/s]\n",
|
| 331 |
+
"Downloading: 100%|██████████| 574/574 [00:00<00:00, 287kB/s]\n",
|
| 332 |
+
"Downloading: 100%|██████████| 1.22k/1.22k [00:00<00:00, 612kB/s]\n",
|
| 333 |
+
"Downloading: 100%|██████████| 761/761 [00:00<00:00, 190kB/s]\n",
|
| 334 |
+
"Downloading: 100%|██████████| 1.61G/1.61G [02:47<00:00, 10.3MB/s]\n"
|
| 335 |
+
]
|
| 336 |
+
}
|
| 337 |
+
],
|
| 338 |
+
"source": [
|
| 339 |
+
"model_name_or_path = \"ai-forever/rugpt3medium_based_on_gpt2\"\n",
|
| 340 |
+
"tokenizer = GPT2Tokenizer.from_pretrained(model_name_or_path)\n",
|
| 341 |
+
"model = GPT2LMHeadModel.from_pretrained(model_name_or_path).to(DEVICE)"
|
| 342 |
+
]
|
| 343 |
+
},
|
| 344 |
+
{
|
| 345 |
+
"cell_type": "markdown",
|
| 346 |
+
"metadata": {
|
| 347 |
+
"id": "w11Hq5Lvwcdu"
|
| 348 |
+
},
|
| 349 |
+
"source": [
|
| 350 |
+
"## Add special tokens"
|
| 351 |
+
]
|
| 352 |
+
},
|
| 353 |
+
{
|
| 354 |
+
"cell_type": "code",
|
| 355 |
+
"execution_count": 34,
|
| 356 |
+
"metadata": {
|
| 357 |
+
"colab": {
|
| 358 |
+
"base_uri": "https://localhost:8080/"
|
| 359 |
+
},
|
| 360 |
+
"id": "7ImM0Aq0dE8q",
|
| 361 |
+
"outputId": "c6fc436f-364e-461c-d908-cee9aa68eeeb"
|
| 362 |
+
},
|
| 363 |
+
"outputs": [
|
| 364 |
+
{
|
| 365 |
+
"data": {
|
| 366 |
+
"text/plain": [
|
| 367 |
+
"Embedding(50260, 1024)"
|
| 368 |
+
]
|
| 369 |
+
},
|
| 370 |
+
"execution_count": 34,
|
| 371 |
+
"metadata": {},
|
| 372 |
+
"output_type": "execute_result"
|
| 373 |
+
}
|
| 374 |
+
],
|
| 375 |
+
"source": [
|
| 376 |
+
"SPECIAL_TOKENS = {'bos_token':'<bos>','eos_token' :'<eos>', 'pad_token':'<pad>', 'sep_token': '<sep>'}\n",
|
| 377 |
+
"tokenizer.add_special_tokens(SPECIAL_TOKENS)\n",
|
| 378 |
+
"model.resize_token_embeddings(len(tokenizer))"
|
| 379 |
+
]
|
| 380 |
+
},
|
| 381 |
+
{
|
| 382 |
+
"cell_type": "markdown",
|
| 383 |
+
"metadata": {
|
| 384 |
+
"id": "DejAhD7dwjwX"
|
| 385 |
+
},
|
| 386 |
+
"source": [
|
| 387 |
+
"## Greate a Dataset"
|
| 388 |
+
]
|
| 389 |
+
},
|
| 390 |
+
{
|
| 391 |
+
"cell_type": "code",
|
| 392 |
+
"execution_count": 35,
|
| 393 |
+
"metadata": {
|
| 394 |
+
"id": "vKsDqthMdxna"
|
| 395 |
+
},
|
| 396 |
+
"outputs": [],
|
| 397 |
+
"source": [
|
| 398 |
+
"torch.manual_seed(42)\n",
|
| 399 |
+
"\n",
|
| 400 |
+
"class myDataset(Dataset):\n",
|
| 401 |
+
"\n",
|
| 402 |
+
" def __init__(self, data, tokenizer, gpt2_type=\"gpt2\", max_length=150):\n",
|
| 403 |
+
" self.tokenizer = tokenizer # the gpt2 tokenizer we instantiated\n",
|
| 404 |
+
" self.input_ids = []\n",
|
| 405 |
+
" self.attn_masks = []\n",
|
| 406 |
+
"\n",
|
| 407 |
+
" for i in data.index.to_list():\n",
|
| 408 |
+
" title = data['title'][i]\n",
|
| 409 |
+
" description = data['text'][i] if type(data['text'][i]) == str else ''\n",
|
| 410 |
+
"\n",
|
| 411 |
+
" encodings_dict = tokenizer('<bos>'+ title + '<sep>' + description + '<eos>',\n",
|
| 412 |
+
" truncation=True,\n",
|
| 413 |
+
" max_length=max_length,\n",
|
| 414 |
+
" padding=\"max_length\")\n",
|
| 415 |
+
"\n",
|
| 416 |
+
" self.input_ids.append(torch.tensor(encodings_dict['input_ids']))\n",
|
| 417 |
+
" self.attn_masks.append(torch.tensor(encodings_dict['attention_mask']))\n",
|
| 418 |
+
"\n",
|
| 419 |
+
" def __len__(self):\n",
|
| 420 |
+
" return len(self.input_ids)\n",
|
| 421 |
+
"\n",
|
| 422 |
+
" def __getitem__(self, idx):\n",
|
| 423 |
+
" return {\n",
|
| 424 |
+
" 'input_ids': self.input_ids[idx],\n",
|
| 425 |
+
" 'attn_masks': self.attn_masks[idx]\n",
|
| 426 |
+
" }"
|
| 427 |
+
]
|
| 428 |
+
},
|
| 429 |
+
{
|
| 430 |
+
"cell_type": "code",
|
| 431 |
+
"execution_count": 36,
|
| 432 |
+
"metadata": {
|
| 433 |
+
"id": "607w_pnJMW5e"
|
| 434 |
+
},
|
| 435 |
+
"outputs": [],
|
| 436 |
+
"source": [
|
| 437 |
+
"train_dataset = myDataset(data, tokenizer)"
|
| 438 |
+
]
|
| 439 |
+
},
|
| 440 |
+
{
|
| 441 |
+
"cell_type": "code",
|
| 442 |
+
"execution_count": 37,
|
| 443 |
+
"metadata": {
|
| 444 |
+
"colab": {
|
| 445 |
+
"base_uri": "https://localhost:8080/"
|
| 446 |
+
},
|
| 447 |
+
"id": "nK8r7CJr743J",
|
| 448 |
+
"outputId": "159787c7-cf79-4575-cb2c-91472c4cdebb"
|
| 449 |
+
},
|
| 450 |
+
"outputs": [
|
| 451 |
+
{
|
| 452 |
+
"data": {
|
| 453 |
+
"text/plain": [
|
| 454 |
+
"{'input_ids': tensor([ 18, 39952, 16, 374, 27275, 47, 37, 840, 3215, 1904,\n",
|
| 455 |
+
" 1827, 5170, 428, 5554, 4426, 16686, 3250, 15366, 536, 36982,\n",
|
| 456 |
+
" 2480, 7768, 18, 365, 7570, 27275, 47, 37, 44030, 7872,\n",
|
| 457 |
+
" 519, 34308, 8482, 282, 1808, 18, 391, 42, 56, 3110,\n",
|
| 458 |
+
" 16, 374, 4866, 2147, 5304, 23322, 309, 12295, 519, 10367,\n",
|
| 459 |
+
" 8482, 18, 27275, 47, 37, 9727, 21691, 5512, 3672, 1134,\n",
|
| 460 |
+
" 16374, 30, 12604, 2009, 36272, 289, 24971, 473, 58, 56,\n",
|
| 461 |
+
" 31693, 934, 367, 827, 329, 1304, 912, 3772, 294, 13099,\n",
|
| 462 |
+
" 315, 17, 293, 4654, 660, 1941, 29216, 16, 502, 4347,\n",
|
| 463 |
+
" 942, 3836, 428, 6413, 37787, 36272, 289, 24971, 18, 2052,\n",
|
| 464 |
+
" 2050, 4921, 4266, 16, 374, 541, 3594, 7294, 2854, 32720,\n",
|
| 465 |
+
" 14813, 9971, 8253, 26282, 18, 16251, 5305, 29620, 434, 6566,\n",
|
| 466 |
+
" 482, 7385, 18460, 31495, 651, 1409, 14550, 2634, 4662, 651,\n",
|
| 467 |
+
" 10787, 282, 965, 14874, 10383, 933, 835, 16, 3118, 5456,\n",
|
| 468 |
+
" 4651, 309, 3504, 21499, 289, 31572, 5172, 416, 8408, 50258]),\n",
|
| 469 |
+
" 'attn_masks': tensor([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n",
|
| 470 |
+
" 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n",
|
| 471 |
+
" 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n",
|
| 472 |
+
" 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n",
|
| 473 |
+
" 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n",
|
| 474 |
+
" 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n",
|
| 475 |
+
" 1, 1, 1, 1, 1, 1])}"
|
| 476 |
+
]
|
| 477 |
+
},
|
| 478 |
+
"execution_count": 37,
|
| 479 |
+
"metadata": {},
|
| 480 |
+
"output_type": "execute_result"
|
| 481 |
+
}
|
| 482 |
+
],
|
| 483 |
+
"source": [
|
| 484 |
+
"train_dataset[10]"
|
| 485 |
+
]
|
| 486 |
+
},
|
| 487 |
+
{
|
| 488 |
+
"cell_type": "markdown",
|
| 489 |
+
"metadata": {
|
| 490 |
+
"id": "3H1pAm4Qwmvc"
|
| 491 |
+
},
|
| 492 |
+
"source": [
|
| 493 |
+
"## Add Datacollator"
|
| 494 |
+
]
|
| 495 |
+
},
|
| 496 |
+
{
|
| 497 |
+
"cell_type": "code",
|
| 498 |
+
"execution_count": 38,
|
| 499 |
+
"metadata": {
|
| 500 |
+
"id": "soPxrXgQpFZQ"
|
| 501 |
+
},
|
| 502 |
+
"outputs": [],
|
| 503 |
+
"source": [
|
| 504 |
+
"data_collator = DataCollatorForLanguageModeling(tokenizer=tokenizer, mlm=False)"
|
| 505 |
+
]
|
| 506 |
+
},
|
| 507 |
+
{
|
| 508 |
+
"cell_type": "markdown",
|
| 509 |
+
"metadata": {
|
| 510 |
+
"id": "kktpNyfnwrPY"
|
| 511 |
+
},
|
| 512 |
+
"source": [
|
| 513 |
+
"## Training"
|
| 514 |
+
]
|
| 515 |
+
},
|
| 516 |
+
{
|
| 517 |
+
"cell_type": "code",
|
| 518 |
+
"execution_count": 39,
|
| 519 |
+
"metadata": {
|
| 520 |
+
"id": "iX2cSazzlm8E"
|
| 521 |
+
},
|
| 522 |
+
"outputs": [],
|
| 523 |
+
"source": [
|
| 524 |
+
"training_args = TrainingArguments(\n",
|
| 525 |
+
" output_dir=f'{my_path}Checkouts', #The output directory\n",
|
| 526 |
+
" overwrite_output_dir = True, #overwrite the content of the output directory\n",
|
| 527 |
+
" num_train_epochs = 10, # number of training epochs\n",
|
| 528 |
+
" per_device_train_batch_size = 3, # batch size for training\n",
|
| 529 |
+
" per_device_eval_batch_size = 3, # batch size for evaluation\n",
|
| 530 |
+
" warmup_steps = 100,# number of warmup steps for learning rate scheduler\n",
|
| 531 |
+
" gradient_accumulation_steps = 1, # to make \"virtual\" batch size larger\n",
|
| 532 |
+
" save_steps = 3000\n",
|
| 533 |
+
" )\n",
|
| 534 |
+
"\n",
|
| 535 |
+
"\n",
|
| 536 |
+
"trainer = Trainer(\n",
|
| 537 |
+
" model=model,\n",
|
| 538 |
+
" args=training_args,\n",
|
| 539 |
+
" data_collator=data_collator,\n",
|
| 540 |
+
" train_dataset=train_dataset,\n",
|
| 541 |
+
" optimizers = (torch.optim.AdamW(model.parameters(),lr=1e-5),None) # Optimizer and lr scheduler\n",
|
| 542 |
+
")"
|
| 543 |
+
]
|
| 544 |
+
},
|
| 545 |
+
{
|
| 546 |
+
"cell_type": "code",
|
| 547 |
+
"execution_count": 43,
|
| 548 |
+
"metadata": {
|
| 549 |
+
"colab": {
|
| 550 |
+
"base_uri": "https://localhost:8080/",
|
| 551 |
+
"height": 1000,
|
| 552 |
+
"referenced_widgets": [
|
| 553 |
+
"43a300cd4f3b4f26b5ef46bf4a7b4500",
|
| 554 |
+
"3cae9bd0f3e34a018f1c1770a65fb52f",
|
| 555 |
+
"d5607a93190249ce87179ea2456630f6",
|
| 556 |
+
"8bab8300f98b4df9a5ece6dafa8daba1",
|
| 557 |
+
"e88887e4031f4851ac6f5fd5e7f7b933",
|
| 558 |
+
"160d666ebc934016a0f30892832f37f0",
|
| 559 |
+
"2f49fd3cb2e2461eb562c403009c4acc",
|
| 560 |
+
"b510b835db64457d8e49ba3e965918de",
|
| 561 |
+
"15592d007be2409fa0dc6aaff0727554",
|
| 562 |
+
"1b63c50c01ca463487b94bd2ca3139f5",
|
| 563 |
+
"f1c2c1dc5cdd4e9ab3456d0e9bbb553d"
|
| 564 |
+
]
|
| 565 |
+
},
|
| 566 |
+
"id": "OVtvq4sLq9EG",
|
| 567 |
+
"outputId": "88ea174a-5feb-4f4b-c4eb-0f34627b5cba"
|
| 568 |
+
},
|
| 569 |
+
"outputs": [
|
| 570 |
+
{
|
| 571 |
+
"name": "stderr",
|
| 572 |
+
"output_type": "stream",
|
| 573 |
+
"text": [
|
| 574 |
+
"***** Running training *****\n",
|
| 575 |
+
" Num examples = 10476\n",
|
| 576 |
+
" Num Epochs = 10\n",
|
| 577 |
+
" Instantaneous batch size per device = 3\n",
|
| 578 |
+
" Total train batch size (w. parallel, distributed & accumulation) = 3\n",
|
| 579 |
+
" Gradient Accumulation steps = 1\n",
|
| 580 |
+
" Total optimization steps = 34920\n",
|
| 581 |
+
" 0%| | 11/34920 [09:52<522:07:09, 53.84s/it]"
|
| 582 |
+
]
|
| 583 |
+
},
|
| 584 |
+
{
|
| 585 |
+
"name": "stderr",
|
| 586 |
+
"output_type": "stream",
|
| 587 |
+
"text": [
|
| 588 |
+
"\n",
|
| 589 |
+
"The following columns in the training set don't have a corresponding argument in `GPT2LMHeadModel.forward` and have been ignored: attn_masks. If attn_masks are not expected by `GPT2LMHeadModel.forward`, you can safely ignore this message.\n"
|
| 590 |
+
]
|
| 591 |
+
},
|
| 592 |
+
{
|
| 593 |
+
"ename": "KeyboardInterrupt",
|
| 594 |
+
"evalue": "",
|
| 595 |
+
"output_type": "error",
|
| 596 |
+
"traceback": [
|
| 597 |
+
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
|
| 598 |
+
"\u001b[1;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)",
|
| 599 |
+
"Cell \u001b[1;32mIn[43], line 1\u001b[0m\n\u001b[1;32m----> 1\u001b[0m \u001b[43mtrainer\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtrain\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n",
|
| 600 |
+
"File \u001b[1;32mc:\\GitHub\\TRAIN_GPT\\.conda\\Lib\\site-packages\\transformers\\trainer.py:1317\u001b[0m, in \u001b[0;36mtrain\u001b[1;34m(self, resume_from_checkpoint, trial, ignore_keys_for_eval, **kwargs)\u001b[0m\n\u001b[0;32m 1314\u001b[0m dtype \u001b[38;5;241m=\u001b[39m torch\u001b[38;5;241m.\u001b[39mbfloat16 \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39muse_cpu_amp \u001b[38;5;28;01melse\u001b[39;00m torch\u001b[38;5;241m.\u001b[39mfloat32\n\u001b[0;32m 1315\u001b[0m model \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mipex_optimize_model(model, training, dtype\u001b[38;5;241m=\u001b[39mdtype)\n\u001b[1;32m-> 1317\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m is_sagemaker_mp_enabled():\n\u001b[0;32m 1318\u001b[0m \u001b[38;5;66;03m# Wrapping the base model twice in a DistributedModel will raise an error.\u001b[39;00m\n\u001b[0;32m 1319\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mmodel_wrapped, smp\u001b[38;5;241m.\u001b[39mmodel\u001b[38;5;241m.\u001b[39mDistributedModel):\n\u001b[0;32m 1320\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mmodel_wrapped\n",
|
| 601 |
+
"File \u001b[1;32mc:\\GitHub\\TRAIN_GPT\\.conda\\Lib\\site-packages\\transformers\\trainer.py:1619\u001b[0m, in \u001b[0;36m_inner_training_loop\u001b[1;34m(self, batch_size, args, resume_from_checkpoint, trial, ignore_keys_for_eval)\u001b[0m\n\u001b[0;32m 1616\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mlr_scheduler \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[0;32m 1617\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_created_lr_scheduler \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mFalse\u001b[39;00m\n\u001b[1;32m-> 1619\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mis_deepspeed_enabled:\n\u001b[0;32m 1620\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39moptimizer, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mlr_scheduler \u001b[38;5;241m=\u001b[39m deepspeed_init(\u001b[38;5;28mself\u001b[39m, num_training_steps\u001b[38;5;241m=\u001b[39mmax_steps)\n\u001b[0;32m 1622\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m delay_optimizer_creation:\n",
|
| 602 |
+
"File \u001b[1;32m~\\AppData\\Roaming\\Python\\Python311\\site-packages\\torch\\optim\\lr_scheduler.py:68\u001b[0m, in \u001b[0;36mLRScheduler.__init__.<locals>.with_counter.<locals>.wrapper\u001b[1;34m(*args, **kwargs)\u001b[0m\n\u001b[0;32m 66\u001b[0m instance\u001b[38;5;241m.\u001b[39m_step_count \u001b[38;5;241m+\u001b[39m\u001b[38;5;241m=\u001b[39m \u001b[38;5;241m1\u001b[39m\n\u001b[0;32m 67\u001b[0m wrapped \u001b[38;5;241m=\u001b[39m func\u001b[38;5;241m.\u001b[39m\u001b[38;5;21m__get__\u001b[39m(instance, \u001b[38;5;28mcls\u001b[39m)\n\u001b[1;32m---> 68\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mwrapped\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n",
|
| 603 |
+
"File \u001b[1;32m~\\AppData\\Roaming\\Python\\Python311\\site-packages\\torch\\optim\\optimizer.py:373\u001b[0m, in \u001b[0;36mOptimizer.profile_hook_step.<locals>.wrapper\u001b[1;34m(*args, **kwargs)\u001b[0m\n\u001b[0;32m 368\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m 369\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mRuntimeError\u001b[39;00m(\n\u001b[0;32m 370\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mfunc\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m must return None or a tuple of (new_args, new_kwargs), but got \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mresult\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m 371\u001b[0m )\n\u001b[1;32m--> 373\u001b[0m out \u001b[38;5;241m=\u001b[39m \u001b[43mfunc\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 374\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_optimizer_step_code()\n\u001b[0;32m 376\u001b[0m \u001b[38;5;66;03m# call optimizer step post hooks\u001b[39;00m\n",
|
| 604 |
+
"File \u001b[1;32m~\\AppData\\Roaming\\Python\\Python311\\site-packages\\torch\\optim\\optimizer.py:76\u001b[0m, in \u001b[0;36m_use_grad_for_differentiable.<locals>._use_grad\u001b[1;34m(self, *args, **kwargs)\u001b[0m\n\u001b[0;32m 74\u001b[0m torch\u001b[38;5;241m.\u001b[39mset_grad_enabled(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mdefaults[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mdifferentiable\u001b[39m\u001b[38;5;124m'\u001b[39m])\n\u001b[0;32m 75\u001b[0m torch\u001b[38;5;241m.\u001b[39m_dynamo\u001b[38;5;241m.\u001b[39mgraph_break()\n\u001b[1;32m---> 76\u001b[0m ret \u001b[38;5;241m=\u001b[39m \u001b[43mfunc\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 77\u001b[0m \u001b[38;5;28;01mfinally\u001b[39;00m:\n\u001b[0;32m 78\u001b[0m torch\u001b[38;5;241m.\u001b[39m_dynamo\u001b[38;5;241m.\u001b[39mgraph_break()\n",
|
| 605 |
+
"File \u001b[1;32m~\\AppData\\Roaming\\Python\\Python311\\site-packages\\torch\\optim\\adamw.py:184\u001b[0m, in \u001b[0;36mAdamW.step\u001b[1;34m(self, closure)\u001b[0m\n\u001b[0;32m 171\u001b[0m beta1, beta2 \u001b[38;5;241m=\u001b[39m group[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mbetas\u001b[39m\u001b[38;5;124m\"\u001b[39m]\n\u001b[0;32m 173\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_init_group(\n\u001b[0;32m 174\u001b[0m group,\n\u001b[0;32m 175\u001b[0m params_with_grad,\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 181\u001b[0m state_steps,\n\u001b[0;32m 182\u001b[0m )\n\u001b[1;32m--> 184\u001b[0m \u001b[43madamw\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m 185\u001b[0m \u001b[43m \u001b[49m\u001b[43mparams_with_grad\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 186\u001b[0m \u001b[43m \u001b[49m\u001b[43mgrads\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 187\u001b[0m \u001b[43m \u001b[49m\u001b[43mexp_avgs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 188\u001b[0m \u001b[43m \u001b[49m\u001b[43mexp_avg_sqs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 189\u001b[0m \u001b[43m \u001b[49m\u001b[43mmax_exp_avg_sqs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 190\u001b[0m \u001b[43m \u001b[49m\u001b[43mstate_steps\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 191\u001b[0m \u001b[43m \u001b[49m\u001b[43mamsgrad\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mamsgrad\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 192\u001b[0m \u001b[43m \u001b[49m\u001b[43mbeta1\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mbeta1\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 193\u001b[0m \u001b[43m \u001b[49m\u001b[43mbeta2\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mbeta2\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 194\u001b[0m \u001b[43m \u001b[49m\u001b[43mlr\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mgroup\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mlr\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 195\u001b[0m \u001b[43m \u001b[49m\u001b[43mweight_decay\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mgroup\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mweight_decay\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 196\u001b[0m \u001b[43m \u001b[49m\u001b[43meps\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mgroup\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43meps\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 197\u001b[0m \u001b[43m \u001b[49m\u001b[43mmaximize\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mgroup\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mmaximize\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 198\u001b[0m \u001b[43m \u001b[49m\u001b[43mforeach\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mgroup\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mforeach\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 199\u001b[0m \u001b[43m \u001b[49m\u001b[43mcapturable\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mgroup\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mcapturable\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 200\u001b[0m \u001b[43m \u001b[49m\u001b[43mdifferentiable\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mgroup\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mdifferentiable\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 201\u001b[0m \u001b[43m \u001b[49m\u001b[43mfused\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mgroup\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mfused\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 202\u001b[0m \u001b[43m \u001b[49m\u001b[43mgrad_scale\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mgetattr\u001b[39;49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mgrad_scale\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mNone\u001b[39;49;00m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 203\u001b[0m \u001b[43m \u001b[49m\u001b[43mfound_inf\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mgetattr\u001b[39;49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mfound_inf\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mNone\u001b[39;49;00m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 204\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 206\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m loss\n",
|
| 606 |
+
"File \u001b[1;32m~\\AppData\\Roaming\\Python\\Python311\\site-packages\\torch\\optim\\adamw.py:335\u001b[0m, in \u001b[0;36madamw\u001b[1;34m(params, grads, exp_avgs, exp_avg_sqs, max_exp_avg_sqs, state_steps, foreach, capturable, differentiable, fused, grad_scale, found_inf, amsgrad, beta1, beta2, lr, weight_decay, eps, maximize)\u001b[0m\n\u001b[0;32m 332\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m 333\u001b[0m func \u001b[38;5;241m=\u001b[39m _single_tensor_adamw\n\u001b[1;32m--> 335\u001b[0m \u001b[43mfunc\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m 336\u001b[0m \u001b[43m \u001b[49m\u001b[43mparams\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 337\u001b[0m \u001b[43m \u001b[49m\u001b[43mgrads\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 338\u001b[0m \u001b[43m \u001b[49m\u001b[43mexp_avgs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 339\u001b[0m \u001b[43m \u001b[49m\u001b[43mexp_avg_sqs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 340\u001b[0m \u001b[43m \u001b[49m\u001b[43mmax_exp_avg_sqs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 341\u001b[0m \u001b[43m \u001b[49m\u001b[43mstate_steps\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 342\u001b[0m \u001b[43m \u001b[49m\u001b[43mamsgrad\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mamsgrad\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 343\u001b[0m \u001b[43m \u001b[49m\u001b[43mbeta1\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mbeta1\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 344\u001b[0m \u001b[43m \u001b[49m\u001b[43mbeta2\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mbeta2\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 345\u001b[0m \u001b[43m \u001b[49m\u001b[43mlr\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mlr\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 346\u001b[0m \u001b[43m \u001b[49m\u001b[43mweight_decay\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mweight_decay\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 347\u001b[0m \u001b[43m \u001b[49m\u001b[43meps\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43meps\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 348\u001b[0m \u001b[43m \u001b[49m\u001b[43mmaximize\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mmaximize\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 349\u001b[0m \u001b[43m \u001b[49m\u001b[43mcapturable\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcapturable\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 350\u001b[0m \u001b[43m \u001b[49m\u001b[43mdifferentiable\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdifferentiable\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 351\u001b[0m \u001b[43m \u001b[49m\u001b[43mgrad_scale\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mgrad_scale\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 352\u001b[0m \u001b[43m \u001b[49m\u001b[43mfound_inf\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mfound_inf\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 353\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n",
|
| 607 |
+
"File \u001b[1;32m~\\AppData\\Roaming\\Python\\Python311\\site-packages\\torch\\optim\\adamw.py:413\u001b[0m, in \u001b[0;36m_single_tensor_adamw\u001b[1;34m(params, grads, exp_avgs, exp_avg_sqs, max_exp_avg_sqs, state_steps, grad_scale, found_inf, amsgrad, beta1, beta2, lr, weight_decay, eps, maximize, capturable, differentiable)\u001b[0m\n\u001b[0;32m 411\u001b[0m \u001b[38;5;66;03m# Decay the first and second moment running average coefficient\u001b[39;00m\n\u001b[0;32m 412\u001b[0m exp_avg\u001b[38;5;241m.\u001b[39mlerp_(grad, \u001b[38;5;241m1\u001b[39m \u001b[38;5;241m-\u001b[39m beta1)\n\u001b[1;32m--> 413\u001b[0m \u001b[43mexp_avg_sq\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmul_\u001b[49m\u001b[43m(\u001b[49m\u001b[43mbeta2\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241m.\u001b[39maddcmul_(grad, grad, value\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m1\u001b[39m \u001b[38;5;241m-\u001b[39m beta2)\n\u001b[0;32m 415\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m capturable \u001b[38;5;129;01mor\u001b[39;00m differentiable:\n\u001b[0;32m 416\u001b[0m step \u001b[38;5;241m=\u001b[39m step_t\n",
|
| 608 |
+
"\u001b[1;31mKeyboardInterrupt\u001b[0m: "
|
| 609 |
+
]
|
| 610 |
+
}
|
| 611 |
+
],
|
| 612 |
+
"source": [
|
| 613 |
+
"trainer.train()"
|
| 614 |
+
]
|
| 615 |
+
},
|
| 616 |
+
{
|
| 617 |
+
"cell_type": "markdown",
|
| 618 |
+
"metadata": {
|
| 619 |
+
"id": "7zL7BghWwtZH"
|
| 620 |
+
},
|
| 621 |
+
"source": [
|
| 622 |
+
"## Save models"
|
| 623 |
+
]
|
| 624 |
+
},
|
| 625 |
+
{
|
| 626 |
+
"cell_type": "code",
|
| 627 |
+
"execution_count": 41,
|
| 628 |
+
"metadata": {
|
| 629 |
+
"colab": {
|
| 630 |
+
"base_uri": "https://localhost:8080/"
|
| 631 |
+
},
|
| 632 |
+
"id": "R3CTFbR3lqOE",
|
| 633 |
+
"outputId": "1bfca296-21f8-4ede-d545-7f567d11f10c"
|
| 634 |
+
},
|
| 635 |
+
"outputs": [
|
| 636 |
+
{
|
| 637 |
+
"name": "stderr",
|
| 638 |
+
"output_type": "stream",
|
| 639 |
+
"text": [
|
| 640 |
+
"Saving model checkpoint to content/model_with_summary\n",
|
| 641 |
+
"Configuration saved in content/model_with_summary\\config.json\n"
|
| 642 |
+
]
|
| 643 |
+
},
|
| 644 |
+
{
|
| 645 |
+
"name": "stderr",
|
| 646 |
+
"output_type": "stream",
|
| 647 |
+
"text": [
|
| 648 |
+
"Model weights saved in content/model_with_summary\\pytorch_model.bin\n"
|
| 649 |
+
]
|
| 650 |
+
}
|
| 651 |
+
],
|
| 652 |
+
"source": [
|
| 653 |
+
"trainer.save_model(f'{my_path}model_with_summary')"
|
| 654 |
+
]
|
| 655 |
+
},
|
| 656 |
+
{
|
| 657 |
+
"cell_type": "code",
|
| 658 |
+
"execution_count": 42,
|
| 659 |
+
"metadata": {
|
| 660 |
+
"colab": {
|
| 661 |
+
"base_uri": "https://localhost:8080/"
|
| 662 |
+
},
|
| 663 |
+
"id": "-Dm5J3Ywieys",
|
| 664 |
+
"outputId": "e23711c3-67eb-48dc-dd07-6abc0ee090b6"
|
| 665 |
+
},
|
| 666 |
+
"outputs": [
|
| 667 |
+
{
|
| 668 |
+
"name": "stderr",
|
| 669 |
+
"output_type": "stream",
|
| 670 |
+
"text": [
|
| 671 |
+
"Vocabulary path (content/tokenizer) should be a directory\n"
|
| 672 |
+
]
|
| 673 |
+
}
|
| 674 |
+
],
|
| 675 |
+
"source": [
|
| 676 |
+
"tokenizer.save_vocabulary(f'{my_path}tokenizer')"
|
| 677 |
+
]
|
| 678 |
+
},
|
| 679 |
+
{
|
| 680 |
+
"cell_type": "markdown",
|
| 681 |
+
"metadata": {
|
| 682 |
+
"id": "xxkC-HnujEQu"
|
| 683 |
+
},
|
| 684 |
+
"source": [
|
| 685 |
+
"#Generation"
|
| 686 |
+
]
|
| 687 |
+
},
|
| 688 |
+
{
|
| 689 |
+
"cell_type": "code",
|
| 690 |
+
"execution_count": null,
|
| 691 |
+
"metadata": {
|
| 692 |
+
"id": "pJtoWx-WMY6W"
|
| 693 |
+
},
|
| 694 |
+
"outputs": [],
|
| 695 |
+
"source": [
|
| 696 |
+
"tokenizer = GPT2Tokenizer.from_pretrained(f'{my_path}tokenizer')\n",
|
| 697 |
+
"model = GPT2LMHeadModel.from_pretrained(f'{my_path}model_with_summary').to(DEVICE)"
|
| 698 |
+
]
|
| 699 |
+
},
|
| 700 |
+
{
|
| 701 |
+
"cell_type": "code",
|
| 702 |
+
"execution_count": null,
|
| 703 |
+
"metadata": {
|
| 704 |
+
"colab": {
|
| 705 |
+
"base_uri": "https://localhost:8080/"
|
| 706 |
+
},
|
| 707 |
+
"id": "TKzQfU7wleKK",
|
| 708 |
+
"outputId": "92e40eb9-00c8-40a5-f649-01d87954a8ef"
|
| 709 |
+
},
|
| 710 |
+
"outputs": [
|
| 711 |
+
{
|
| 712 |
+
"data": {
|
| 713 |
+
"text/plain": [
|
| 714 |
+
"3"
|
| 715 |
+
]
|
| 716 |
+
},
|
| 717 |
+
"execution_count": 11,
|
| 718 |
+
"metadata": {},
|
| 719 |
+
"output_type": "execute_result"
|
| 720 |
+
}
|
| 721 |
+
],
|
| 722 |
+
"source": [
|
| 723 |
+
"SPECIAL_TOKENS = {'bos_token':'<bos>','eos_token' :'<eos>', 'pad_token':'<pad>', 'sep_token': '<sep>'}\n",
|
| 724 |
+
"tokenizer.add_special_tokens(SPECIAL_TOKENS)"
|
| 725 |
+
]
|
| 726 |
+
},
|
| 727 |
+
{
|
| 728 |
+
"cell_type": "code",
|
| 729 |
+
"execution_count": null,
|
| 730 |
+
"metadata": {
|
| 731 |
+
"id": "kofX6i57RcLd"
|
| 732 |
+
},
|
| 733 |
+
"outputs": [],
|
| 734 |
+
"source": [
|
| 735 |
+
"class KeywordsStoppingCriteria(StoppingCriteria):\n",
|
| 736 |
+
" def __init__(self, keywords_ids:list):\n",
|
| 737 |
+
" self.keywords = keywords_ids\n",
|
| 738 |
+
"\n",
|
| 739 |
+
" def __call__(self, input_ids: torch.LongTensor, scores: torch.FloatTensor, **kwargs) -> bool:\n",
|
| 740 |
+
" if input_ids[0][-1] in self.keywords:\n",
|
| 741 |
+
" print(input_ids)\n",
|
| 742 |
+
" return True\n",
|
| 743 |
+
" return False"
|
| 744 |
+
]
|
| 745 |
+
},
|
| 746 |
+
{
|
| 747 |
+
"cell_type": "code",
|
| 748 |
+
"execution_count": null,
|
| 749 |
+
"metadata": {
|
| 750 |
+
"id": "npykPtVhRcLd"
|
| 751 |
+
},
|
| 752 |
+
"outputs": [],
|
| 753 |
+
"source": [
|
| 754 |
+
"stop_criteria = KeywordsStoppingCriteria(tokenizer.encode(tokenizer.eos_token, return_tensors=\"pt\").to(DEVICE))"
|
| 755 |
+
]
|
| 756 |
+
},
|
| 757 |
+
{
|
| 758 |
+
"cell_type": "markdown",
|
| 759 |
+
"metadata": {
|
| 760 |
+
"id": "-TVOwDiNmwqw"
|
| 761 |
+
},
|
| 762 |
+
"source": [
|
| 763 |
+
"## Задай свое начало предложения:\n",
|
| 764 |
+
"\n"
|
| 765 |
+
]
|
| 766 |
+
},
|
| 767 |
+
{
|
| 768 |
+
"cell_type": "code",
|
| 769 |
+
"execution_count": null,
|
| 770 |
+
"metadata": {
|
| 771 |
+
"colab": {
|
| 772 |
+
"base_uri": "https://localhost:8080/"
|
| 773 |
+
},
|
| 774 |
+
"id": "upBkDzPkFtD0",
|
| 775 |
+
"outputId": "d248d2e0-4476-46f7-80a7-61963738ef67"
|
| 776 |
+
},
|
| 777 |
+
"outputs": [
|
| 778 |
+
{
|
| 779 |
+
"name": "stdout",
|
| 780 |
+
"output_type": "stream",
|
| 781 |
+
"text": [
|
| 782 |
+
"Введите начало заголовка или просто нажмите Enter:\n"
|
| 783 |
+
]
|
| 784 |
+
}
|
| 785 |
+
],
|
| 786 |
+
"source": [
|
| 787 |
+
"inp = input('Введите начало заголовка или просто нажмите Enter:')"
|
| 788 |
+
]
|
| 789 |
+
},
|
| 790 |
+
{
|
| 791 |
+
"cell_type": "code",
|
| 792 |
+
"execution_count": null,
|
| 793 |
+
"metadata": {
|
| 794 |
+
"id": "VLaeBnu1RcLe"
|
| 795 |
+
},
|
| 796 |
+
"outputs": [],
|
| 797 |
+
"source": [
|
| 798 |
+
"inp = inp if len(inp) > 0 else tokenizer.bos_token #токен начала предложения\n",
|
| 799 |
+
"input_ids = tokenizer.encode(inp, return_tensors=\"pt\").to(DEVICE)"
|
| 800 |
+
]
|
| 801 |
+
},
|
| 802 |
+
{
|
| 803 |
+
"cell_type": "code",
|
| 804 |
+
"execution_count": null,
|
| 805 |
+
"metadata": {
|
| 806 |
+
"colab": {
|
| 807 |
+
"base_uri": "https://localhost:8080/"
|
| 808 |
+
},
|
| 809 |
+
"id": "xclcUo5cRcLf",
|
| 810 |
+
"outputId": "05a741f0-6d9a-496f-ec28-c54c5e0d9807"
|
| 811 |
+
},
|
| 812 |
+
"outputs": [
|
| 813 |
+
{
|
| 814 |
+
"name": "stderr",
|
| 815 |
+
"output_type": "stream",
|
| 816 |
+
"text": [
|
| 817 |
+
"Setting `pad_token_id` to `eos_token_id`:50258 for open-end generation.\n"
|
| 818 |
+
]
|
| 819 |
+
},
|
| 820 |
+
{
|
| 821 |
+
"name": "stdout",
|
| 822 |
+
"output_type": "stream",
|
| 823 |
+
"text": [
|
| 824 |
+
"<bos> Ученые впервые нашли венерические заболевания с помощью генной инженерии <sep> Ученые выяснили, что венерические заболевания с помощью генной терапии передаются исключительно половым путем. Это открытие может лечь в основу разработки метода контрацепции, основанного на генной терапии. <eos>\n"
|
| 825 |
+
]
|
| 826 |
+
}
|
| 827 |
+
],
|
| 828 |
+
"source": [
|
| 829 |
+
"with torch.no_grad():\n",
|
| 830 |
+
" out = model.generate(input_ids,\n",
|
| 831 |
+
" do_sample=True,\n",
|
| 832 |
+
" num_beams=3,\n",
|
| 833 |
+
" temperature=2.0,\n",
|
| 834 |
+
" top_p=0.9,\n",
|
| 835 |
+
" max_length = 200,\n",
|
| 836 |
+
" stopping_criteria=StoppingCriteriaList([stop_criteria]),\n",
|
| 837 |
+
" eos_token_id=tokenizer.eos_token_id,\n",
|
| 838 |
+
" bos_token_id=tokenizer.bos_token_id,\n",
|
| 839 |
+
" ).to(DEVICE)\n",
|
| 840 |
+
"print(tokenizer.batch_decode(out, skip_special_tokens=False)[0])"
|
| 841 |
+
]
|
| 842 |
+
}
|
| 843 |
+
],
|
| 844 |
+
"metadata": {
|
| 845 |
+
"colab": {
|
| 846 |
+
"include_colab_link": true,
|
| 847 |
+
"provenance": []
|
| 848 |
+
},
|
| 849 |
+
"kernelspec": {
|
| 850 |
+
"display_name": "Python 3",
|
| 851 |
+
"name": "python3"
|
| 852 |
+
},
|
| 853 |
+
"language_info": {
|
| 854 |
+
"codemirror_mode": {
|
| 855 |
+
"name": "ipython",
|
| 856 |
+
"version": 3
|
| 857 |
+
},
|
| 858 |
+
"file_extension": ".py",
|
| 859 |
+
"mimetype": "text/x-python",
|
| 860 |
+
"name": "python",
|
| 861 |
+
"nbconvert_exporter": "python",
|
| 862 |
+
"pygments_lexer": "ipython3",
|
| 863 |
+
"version": "3.11.5"
|
| 864 |
+
},
|
| 865 |
+
"widgets": {
|
| 866 |
+
"application/vnd.jupyter.widget-state+json": {
|
| 867 |
+
"15592d007be2409fa0dc6aaff0727554": {
|
| 868 |
+
"model_module": "@jupyter-widgets/controls",
|
| 869 |
+
"model_module_version": "1.5.0",
|
| 870 |
+
"model_name": "ProgressStyleModel",
|
| 871 |
+
"state": {
|
| 872 |
+
"_model_module": "@jupyter-widgets/controls",
|
| 873 |
+
"_model_module_version": "1.5.0",
|
| 874 |
+
"_model_name": "ProgressStyleModel",
|
| 875 |
+
"_view_count": null,
|
| 876 |
+
"_view_module": "@jupyter-widgets/base",
|
| 877 |
+
"_view_module_version": "1.2.0",
|
| 878 |
+
"_view_name": "StyleView",
|
| 879 |
+
"bar_color": null,
|
| 880 |
+
"description_width": ""
|
| 881 |
+
}
|
| 882 |
+
},
|
| 883 |
+
"160d666ebc934016a0f30892832f37f0": {
|
| 884 |
+
"model_module": "@jupyter-widgets/base",
|
| 885 |
+
"model_module_version": "1.2.0",
|
| 886 |
+
"model_name": "LayoutModel",
|
| 887 |
+
"state": {
|
| 888 |
+
"_model_module": "@jupyter-widgets/base",
|
| 889 |
+
"_model_module_version": "1.2.0",
|
| 890 |
+
"_model_name": "LayoutModel",
|
| 891 |
+
"_view_count": null,
|
| 892 |
+
"_view_module": "@jupyter-widgets/base",
|
| 893 |
+
"_view_module_version": "1.2.0",
|
| 894 |
+
"_view_name": "LayoutView",
|
| 895 |
+
"align_content": null,
|
| 896 |
+
"align_items": null,
|
| 897 |
+
"align_self": null,
|
| 898 |
+
"border": null,
|
| 899 |
+
"bottom": null,
|
| 900 |
+
"display": null,
|
| 901 |
+
"flex": null,
|
| 902 |
+
"flex_flow": null,
|
| 903 |
+
"grid_area": null,
|
| 904 |
+
"grid_auto_columns": null,
|
| 905 |
+
"grid_auto_flow": null,
|
| 906 |
+
"grid_auto_rows": null,
|
| 907 |
+
"grid_column": null,
|
| 908 |
+
"grid_gap": null,
|
| 909 |
+
"grid_row": null,
|
| 910 |
+
"grid_template_areas": null,
|
| 911 |
+
"grid_template_columns": null,
|
| 912 |
+
"grid_template_rows": null,
|
| 913 |
+
"height": null,
|
| 914 |
+
"justify_content": null,
|
| 915 |
+
"justify_items": null,
|
| 916 |
+
"left": null,
|
| 917 |
+
"margin": null,
|
| 918 |
+
"max_height": null,
|
| 919 |
+
"max_width": null,
|
| 920 |
+
"min_height": null,
|
| 921 |
+
"min_width": null,
|
| 922 |
+
"object_fit": null,
|
| 923 |
+
"object_position": null,
|
| 924 |
+
"order": null,
|
| 925 |
+
"overflow": null,
|
| 926 |
+
"overflow_x": null,
|
| 927 |
+
"overflow_y": null,
|
| 928 |
+
"padding": null,
|
| 929 |
+
"right": null,
|
| 930 |
+
"top": null,
|
| 931 |
+
"visibility": null,
|
| 932 |
+
"width": null
|
| 933 |
+
}
|
| 934 |
+
},
|
| 935 |
+
"1b63c50c01ca463487b94bd2ca3139f5": {
|
| 936 |
+
"model_module": "@jupyter-widgets/base",
|
| 937 |
+
"model_module_version": "1.2.0",
|
| 938 |
+
"model_name": "LayoutModel",
|
| 939 |
+
"state": {
|
| 940 |
+
"_model_module": "@jupyter-widgets/base",
|
| 941 |
+
"_model_module_version": "1.2.0",
|
| 942 |
+
"_model_name": "LayoutModel",
|
| 943 |
+
"_view_count": null,
|
| 944 |
+
"_view_module": "@jupyter-widgets/base",
|
| 945 |
+
"_view_module_version": "1.2.0",
|
| 946 |
+
"_view_name": "LayoutView",
|
| 947 |
+
"align_content": null,
|
| 948 |
+
"align_items": null,
|
| 949 |
+
"align_self": null,
|
| 950 |
+
"border": null,
|
| 951 |
+
"bottom": null,
|
| 952 |
+
"display": null,
|
| 953 |
+
"flex": null,
|
| 954 |
+
"flex_flow": null,
|
| 955 |
+
"grid_area": null,
|
| 956 |
+
"grid_auto_columns": null,
|
| 957 |
+
"grid_auto_flow": null,
|
| 958 |
+
"grid_auto_rows": null,
|
| 959 |
+
"grid_column": null,
|
| 960 |
+
"grid_gap": null,
|
| 961 |
+
"grid_row": null,
|
| 962 |
+
"grid_template_areas": null,
|
| 963 |
+
"grid_template_columns": null,
|
| 964 |
+
"grid_template_rows": null,
|
| 965 |
+
"height": null,
|
| 966 |
+
"justify_content": null,
|
| 967 |
+
"justify_items": null,
|
| 968 |
+
"left": null,
|
| 969 |
+
"margin": null,
|
| 970 |
+
"max_height": null,
|
| 971 |
+
"max_width": null,
|
| 972 |
+
"min_height": null,
|
| 973 |
+
"min_width": null,
|
| 974 |
+
"object_fit": null,
|
| 975 |
+
"object_position": null,
|
| 976 |
+
"order": null,
|
| 977 |
+
"overflow": null,
|
| 978 |
+
"overflow_x": null,
|
| 979 |
+
"overflow_y": null,
|
| 980 |
+
"padding": null,
|
| 981 |
+
"right": null,
|
| 982 |
+
"top": null,
|
| 983 |
+
"visibility": null,
|
| 984 |
+
"width": null
|
| 985 |
+
}
|
| 986 |
+
},
|
| 987 |
+
"2f49fd3cb2e2461eb562c403009c4acc": {
|
| 988 |
+
"model_module": "@jupyter-widgets/controls",
|
| 989 |
+
"model_module_version": "1.5.0",
|
| 990 |
+
"model_name": "DescriptionStyleModel",
|
| 991 |
+
"state": {
|
| 992 |
+
"_model_module": "@jupyter-widgets/controls",
|
| 993 |
+
"_model_module_version": "1.5.0",
|
| 994 |
+
"_model_name": "DescriptionStyleModel",
|
| 995 |
+
"_view_count": null,
|
| 996 |
+
"_view_module": "@jupyter-widgets/base",
|
| 997 |
+
"_view_module_version": "1.2.0",
|
| 998 |
+
"_view_name": "StyleView",
|
| 999 |
+
"description_width": ""
|
| 1000 |
+
}
|
| 1001 |
+
},
|
| 1002 |
+
"3cae9bd0f3e34a018f1c1770a65fb52f": {
|
| 1003 |
+
"model_module": "@jupyter-widgets/controls",
|
| 1004 |
+
"model_module_version": "1.5.0",
|
| 1005 |
+
"model_name": "HTMLModel",
|
| 1006 |
+
"state": {
|
| 1007 |
+
"_dom_classes": [],
|
| 1008 |
+
"_model_module": "@jupyter-widgets/controls",
|
| 1009 |
+
"_model_module_version": "1.5.0",
|
| 1010 |
+
"_model_name": "HTMLModel",
|
| 1011 |
+
"_view_count": null,
|
| 1012 |
+
"_view_module": "@jupyter-widgets/controls",
|
| 1013 |
+
"_view_module_version": "1.5.0",
|
| 1014 |
+
"_view_name": "HTMLView",
|
| 1015 |
+
"description": "",
|
| 1016 |
+
"description_tooltip": null,
|
| 1017 |
+
"layout": "IPY_MODEL_160d666ebc934016a0f30892832f37f0",
|
| 1018 |
+
"placeholder": "",
|
| 1019 |
+
"style": "IPY_MODEL_2f49fd3cb2e2461eb562c403009c4acc",
|
| 1020 |
+
"value": "Skipping the first batches: 100%"
|
| 1021 |
+
}
|
| 1022 |
+
},
|
| 1023 |
+
"43a300cd4f3b4f26b5ef46bf4a7b4500": {
|
| 1024 |
+
"model_module": "@jupyter-widgets/controls",
|
| 1025 |
+
"model_module_version": "1.5.0",
|
| 1026 |
+
"model_name": "HBoxModel",
|
| 1027 |
+
"state": {
|
| 1028 |
+
"_dom_classes": [],
|
| 1029 |
+
"_model_module": "@jupyter-widgets/controls",
|
| 1030 |
+
"_model_module_version": "1.5.0",
|
| 1031 |
+
"_model_name": "HBoxModel",
|
| 1032 |
+
"_view_count": null,
|
| 1033 |
+
"_view_module": "@jupyter-widgets/controls",
|
| 1034 |
+
"_view_module_version": "1.5.0",
|
| 1035 |
+
"_view_name": "HBoxView",
|
| 1036 |
+
"box_style": "",
|
| 1037 |
+
"children": [
|
| 1038 |
+
"IPY_MODEL_3cae9bd0f3e34a018f1c1770a65fb52f",
|
| 1039 |
+
"IPY_MODEL_d5607a93190249ce87179ea2456630f6",
|
| 1040 |
+
"IPY_MODEL_8bab8300f98b4df9a5ece6dafa8daba1"
|
| 1041 |
+
],
|
| 1042 |
+
"layout": "IPY_MODEL_e88887e4031f4851ac6f5fd5e7f7b933"
|
| 1043 |
+
}
|
| 1044 |
+
},
|
| 1045 |
+
"8bab8300f98b4df9a5ece6dafa8daba1": {
|
| 1046 |
+
"model_module": "@jupyter-widgets/controls",
|
| 1047 |
+
"model_module_version": "1.5.0",
|
| 1048 |
+
"model_name": "HTMLModel",
|
| 1049 |
+
"state": {
|
| 1050 |
+
"_dom_classes": [],
|
| 1051 |
+
"_model_module": "@jupyter-widgets/controls",
|
| 1052 |
+
"_model_module_version": "1.5.0",
|
| 1053 |
+
"_model_name": "HTMLModel",
|
| 1054 |
+
"_view_count": null,
|
| 1055 |
+
"_view_module": "@jupyter-widgets/controls",
|
| 1056 |
+
"_view_module_version": "1.5.0",
|
| 1057 |
+
"_view_name": "HTMLView",
|
| 1058 |
+
"description": "",
|
| 1059 |
+
"description_tooltip": null,
|
| 1060 |
+
"layout": "IPY_MODEL_1b63c50c01ca463487b94bd2ca3139f5",
|
| 1061 |
+
"placeholder": "",
|
| 1062 |
+
"style": "IPY_MODEL_f1c2c1dc5cdd4e9ab3456d0e9bbb553d",
|
| 1063 |
+
"value": " 48/48 [00:00<00:00, 962.01it/s]"
|
| 1064 |
+
}
|
| 1065 |
+
},
|
| 1066 |
+
"b510b835db64457d8e49ba3e965918de": {
|
| 1067 |
+
"model_module": "@jupyter-widgets/base",
|
| 1068 |
+
"model_module_version": "1.2.0",
|
| 1069 |
+
"model_name": "LayoutModel",
|
| 1070 |
+
"state": {
|
| 1071 |
+
"_model_module": "@jupyter-widgets/base",
|
| 1072 |
+
"_model_module_version": "1.2.0",
|
| 1073 |
+
"_model_name": "LayoutModel",
|
| 1074 |
+
"_view_count": null,
|
| 1075 |
+
"_view_module": "@jupyter-widgets/base",
|
| 1076 |
+
"_view_module_version": "1.2.0",
|
| 1077 |
+
"_view_name": "LayoutView",
|
| 1078 |
+
"align_content": null,
|
| 1079 |
+
"align_items": null,
|
| 1080 |
+
"align_self": null,
|
| 1081 |
+
"border": null,
|
| 1082 |
+
"bottom": null,
|
| 1083 |
+
"display": null,
|
| 1084 |
+
"flex": null,
|
| 1085 |
+
"flex_flow": null,
|
| 1086 |
+
"grid_area": null,
|
| 1087 |
+
"grid_auto_columns": null,
|
| 1088 |
+
"grid_auto_flow": null,
|
| 1089 |
+
"grid_auto_rows": null,
|
| 1090 |
+
"grid_column": null,
|
| 1091 |
+
"grid_gap": null,
|
| 1092 |
+
"grid_row": null,
|
| 1093 |
+
"grid_template_areas": null,
|
| 1094 |
+
"grid_template_columns": null,
|
| 1095 |
+
"grid_template_rows": null,
|
| 1096 |
+
"height": null,
|
| 1097 |
+
"justify_content": null,
|
| 1098 |
+
"justify_items": null,
|
| 1099 |
+
"left": null,
|
| 1100 |
+
"margin": null,
|
| 1101 |
+
"max_height": null,
|
| 1102 |
+
"max_width": null,
|
| 1103 |
+
"min_height": null,
|
| 1104 |
+
"min_width": null,
|
| 1105 |
+
"object_fit": null,
|
| 1106 |
+
"object_position": null,
|
| 1107 |
+
"order": null,
|
| 1108 |
+
"overflow": null,
|
| 1109 |
+
"overflow_x": null,
|
| 1110 |
+
"overflow_y": null,
|
| 1111 |
+
"padding": null,
|
| 1112 |
+
"right": null,
|
| 1113 |
+
"top": null,
|
| 1114 |
+
"visibility": null,
|
| 1115 |
+
"width": null
|
| 1116 |
+
}
|
| 1117 |
+
},
|
| 1118 |
+
"d5607a93190249ce87179ea2456630f6": {
|
| 1119 |
+
"model_module": "@jupyter-widgets/controls",
|
| 1120 |
+
"model_module_version": "1.5.0",
|
| 1121 |
+
"model_name": "FloatProgressModel",
|
| 1122 |
+
"state": {
|
| 1123 |
+
"_dom_classes": [],
|
| 1124 |
+
"_model_module": "@jupyter-widgets/controls",
|
| 1125 |
+
"_model_module_version": "1.5.0",
|
| 1126 |
+
"_model_name": "FloatProgressModel",
|
| 1127 |
+
"_view_count": null,
|
| 1128 |
+
"_view_module": "@jupyter-widgets/controls",
|
| 1129 |
+
"_view_module_version": "1.5.0",
|
| 1130 |
+
"_view_name": "ProgressView",
|
| 1131 |
+
"bar_style": "success",
|
| 1132 |
+
"description": "",
|
| 1133 |
+
"description_tooltip": null,
|
| 1134 |
+
"layout": "IPY_MODEL_b510b835db64457d8e49ba3e965918de",
|
| 1135 |
+
"max": 48,
|
| 1136 |
+
"min": 0,
|
| 1137 |
+
"orientation": "horizontal",
|
| 1138 |
+
"style": "IPY_MODEL_15592d007be2409fa0dc6aaff0727554",
|
| 1139 |
+
"value": 48
|
| 1140 |
+
}
|
| 1141 |
+
},
|
| 1142 |
+
"e88887e4031f4851ac6f5fd5e7f7b933": {
|
| 1143 |
+
"model_module": "@jupyter-widgets/base",
|
| 1144 |
+
"model_module_version": "1.2.0",
|
| 1145 |
+
"model_name": "LayoutModel",
|
| 1146 |
+
"state": {
|
| 1147 |
+
"_model_module": "@jupyter-widgets/base",
|
| 1148 |
+
"_model_module_version": "1.2.0",
|
| 1149 |
+
"_model_name": "LayoutModel",
|
| 1150 |
+
"_view_count": null,
|
| 1151 |
+
"_view_module": "@jupyter-widgets/base",
|
| 1152 |
+
"_view_module_version": "1.2.0",
|
| 1153 |
+
"_view_name": "LayoutView",
|
| 1154 |
+
"align_content": null,
|
| 1155 |
+
"align_items": null,
|
| 1156 |
+
"align_self": null,
|
| 1157 |
+
"border": null,
|
| 1158 |
+
"bottom": null,
|
| 1159 |
+
"display": null,
|
| 1160 |
+
"flex": null,
|
| 1161 |
+
"flex_flow": null,
|
| 1162 |
+
"grid_area": null,
|
| 1163 |
+
"grid_auto_columns": null,
|
| 1164 |
+
"grid_auto_flow": null,
|
| 1165 |
+
"grid_auto_rows": null,
|
| 1166 |
+
"grid_column": null,
|
| 1167 |
+
"grid_gap": null,
|
| 1168 |
+
"grid_row": null,
|
| 1169 |
+
"grid_template_areas": null,
|
| 1170 |
+
"grid_template_columns": null,
|
| 1171 |
+
"grid_template_rows": null,
|
| 1172 |
+
"height": null,
|
| 1173 |
+
"justify_content": null,
|
| 1174 |
+
"justify_items": null,
|
| 1175 |
+
"left": null,
|
| 1176 |
+
"margin": null,
|
| 1177 |
+
"max_height": null,
|
| 1178 |
+
"max_width": null,
|
| 1179 |
+
"min_height": null,
|
| 1180 |
+
"min_width": null,
|
| 1181 |
+
"object_fit": null,
|
| 1182 |
+
"object_position": null,
|
| 1183 |
+
"order": null,
|
| 1184 |
+
"overflow": null,
|
| 1185 |
+
"overflow_x": null,
|
| 1186 |
+
"overflow_y": null,
|
| 1187 |
+
"padding": null,
|
| 1188 |
+
"right": null,
|
| 1189 |
+
"top": null,
|
| 1190 |
+
"visibility": null,
|
| 1191 |
+
"width": null
|
| 1192 |
+
}
|
| 1193 |
+
},
|
| 1194 |
+
"f1c2c1dc5cdd4e9ab3456d0e9bbb553d": {
|
| 1195 |
+
"model_module": "@jupyter-widgets/controls",
|
| 1196 |
+
"model_module_version": "1.5.0",
|
| 1197 |
+
"model_name": "DescriptionStyleModel",
|
| 1198 |
+
"state": {
|
| 1199 |
+
"_model_module": "@jupyter-widgets/controls",
|
| 1200 |
+
"_model_module_version": "1.5.0",
|
| 1201 |
+
"_model_name": "DescriptionStyleModel",
|
| 1202 |
+
"_view_count": null,
|
| 1203 |
+
"_view_module": "@jupyter-widgets/base",
|
| 1204 |
+
"_view_module_version": "1.2.0",
|
| 1205 |
+
"_view_name": "StyleView",
|
| 1206 |
+
"description_width": ""
|
| 1207 |
+
}
|
| 1208 |
+
}
|
| 1209 |
+
}
|
| 1210 |
+
}
|
| 1211 |
+
},
|
| 1212 |
+
"nbformat": 4,
|
| 1213 |
+
"nbformat_minor": 0
|
| 1214 |
+
}
|
cached_lm_GPT2Tokenizer_64_GROB.txt
ADDED
|
Binary file (826 kB). View file
|
|
|
cached_lm_GPT2Tokenizer_64_train_dataset.txt
ADDED
|
Binary file (3.18 kB). View file
|
|
|
main.py
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from transformers import GPT2LMHeadModel, GPT2Tokenizer
|
| 2 |
+
import torch
|
| 3 |
+
DEVICE = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
|
| 4 |
+
|
| 5 |
+
# Для наглядности будем работать с русскоязычной GPT от Сбера.
|
| 6 |
+
# Ниже команды для загрузки и инициализации модели и токенизатора.
|
| 7 |
+
model_name_or_path = "ai-forever/rugpt3medium_based_on_gpt2"
|
| 8 |
+
tokenizer = GPT2Tokenizer.from_pretrained(model_name_or_path)
|
| 9 |
+
model = GPT2LMHeadModel.from_pretrained(model_name_or_path).to(DEVICE)
|
| 10 |
+
|
| 11 |
+
|
| 12 |
+
# prompt engineering for QA
|
| 13 |
+
text = "Вопрос: 'Сколько будет 2+2?'\nОтвет:"
|
| 14 |
+
input_ids = tokenizer.encode(text, return_tensors="pt").to(DEVICE)
|
| 15 |
+
out = model.generate(input_ids, do_sample=False)
|
| 16 |
+
|
| 17 |
+
generated_text = list(map(tokenizer.decode, out))[0]
|
| 18 |
+
print(generated_text)
|
| 19 |
+
|
test.ipynb
ADDED
|
@@ -0,0 +1,491 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"cells": [
|
| 3 |
+
{
|
| 4 |
+
"cell_type": "code",
|
| 5 |
+
"execution_count": 1,
|
| 6 |
+
"metadata": {},
|
| 7 |
+
"outputs": [
|
| 8 |
+
{
|
| 9 |
+
"name": "stderr",
|
| 10 |
+
"output_type": "stream",
|
| 11 |
+
"text": [
|
| 12 |
+
"C:\\Users\\addmi\\AppData\\Roaming\\Python\\Python311\\site-packages\\tqdm\\auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n",
|
| 13 |
+
" from .autonotebook import tqdm as notebook_tqdm\n"
|
| 14 |
+
]
|
| 15 |
+
}
|
| 16 |
+
],
|
| 17 |
+
"source": [
|
| 18 |
+
"from transformers import GPT2LMHeadModel, GPT2Config, GPT2Tokenizer, TextDataset, DataCollatorForLanguageModeling, Trainer, TrainingArguments\n",
|
| 19 |
+
"\n",
|
| 20 |
+
"model_name_or_path = \"ai-forever/rugpt3small_based_on_gpt2\"\n",
|
| 21 |
+
"tokenizer = GPT2Tokenizer.from_pretrained(model_name_or_path)\n",
|
| 22 |
+
"model = GPT2LMHeadModel.from_pretrained(model_name_or_path)"
|
| 23 |
+
]
|
| 24 |
+
},
|
| 25 |
+
{
|
| 26 |
+
"cell_type": "code",
|
| 27 |
+
"execution_count": 2,
|
| 28 |
+
"metadata": {},
|
| 29 |
+
"outputs": [
|
| 30 |
+
{
|
| 31 |
+
"data": {
|
| 32 |
+
"text/plain": [
|
| 33 |
+
"('4.10.0', '0.20.1')"
|
| 34 |
+
]
|
| 35 |
+
},
|
| 36 |
+
"execution_count": 2,
|
| 37 |
+
"metadata": {},
|
| 38 |
+
"output_type": "execute_result"
|
| 39 |
+
}
|
| 40 |
+
],
|
| 41 |
+
"source": [
|
| 42 |
+
"import accelerate\n",
|
| 43 |
+
"import transformers\n",
|
| 44 |
+
"\n",
|
| 45 |
+
"transformers.__version__, accelerate.__version__"
|
| 46 |
+
]
|
| 47 |
+
},
|
| 48 |
+
{
|
| 49 |
+
"cell_type": "code",
|
| 50 |
+
"execution_count": 3,
|
| 51 |
+
"metadata": {},
|
| 52 |
+
"outputs": [],
|
| 53 |
+
"source": [
|
| 54 |
+
"text = \"\"\"Трогательным ножичком пытать свою плоть\n",
|
| 55 |
+
"Трогательным ножичком пытать свою плоть\n",
|
| 56 |
+
"До крови прищемить добровольные пальцы\n",
|
| 57 |
+
"Отважно смакуя леденцы на палочке\n",
|
| 58 |
+
"Целеустремлённо набивать карманы\n",
|
| 59 |
+
"Мёртвыми мышатами,живыми хуями\n",
|
| 60 |
+
"Шоколадными конфетами \n",
|
| 61 |
+
"И нерукотворными пиздюлями\n",
|
| 62 |
+
"На патриархальной свалке устаревших понятий\n",
|
| 63 |
+
"Использованных образов и вежливых слов\n",
|
| 64 |
+
"Покончив с собою,уничтожить весь мир\n",
|
| 65 |
+
"ПОКОНЧИВ С СОБОЮ-УНИЧТОЖИТЬ ВЕСЬ МИР!!\n",
|
| 66 |
+
"\n",
|
| 67 |
+
" ...вечность пахнет нефтью\n",
|
| 68 |
+
" ...вечность пахнет нефтью\n",
|
| 69 |
+
"\n",
|
| 70 |
+
"Словно иней,сердобольный смех\n",
|
| 71 |
+
"Словно иней,сердобольный смех\n",
|
| 72 |
+
"Словно иней,сердобольный смех\n",
|
| 73 |
+
"Славно валится на...\n",
|
| 74 |
+
" на...\n",
|
| 75 |
+
" на РУССКОЕ ПОЛЕ ЭКСПЕРИМЕНТОВ\n",
|
| 76 |
+
"\n",
|
| 77 |
+
"География подлости\n",
|
| 78 |
+
"Орфография ненависти\n",
|
| 79 |
+
"Апология невежества\n",
|
| 80 |
+
"Мифология оптимизма\n",
|
| 81 |
+
"Законы гаубицы благонравия\n",
|
| 82 |
+
"Знатное пиршество благоразумия\n",
|
| 83 |
+
"Устами ребенка глаголет яма\n",
|
| 84 |
+
"Устами ребенка глаголет пуля\n",
|
| 85 |
+
"\n",
|
| 86 |
+
" ...вечность пахнет нефтью\n",
|
| 87 |
+
" ...вечность пахнет нефтью\n",
|
| 88 |
+
"\n",
|
| 89 |
+
"Мастерство быть излишним,подобно мне\n",
|
| 90 |
+
"Мастерство быть любимым,подобно петле\n",
|
| 91 |
+
"Мастерство быть глобальным,как печёное яблоко\n",
|
| 92 |
+
"Искусство вовремя уйти в сторонку\n",
|
| 93 |
+
" Искусство быть посторонним\n",
|
| 94 |
+
" Искусство быть посторонним\n",
|
| 95 |
+
"Новейшее средство для очистки духовок\n",
|
| 96 |
+
"От задохнувшихся по собственной воле\n",
|
| 97 |
+
"Новейшее средство для очистки верёвок\n",
|
| 98 |
+
"От скверного запаха немытых шей\n",
|
| 99 |
+
" Новейшее средство находить виновных\n",
|
| 100 |
+
" Новейшее средство находить виновных\n",
|
| 101 |
+
"\n",
|
| 102 |
+
" РУССКОЕ ПОЛЕ ЭКСПЕРИМЕНТОВ\n",
|
| 103 |
+
"\n",
|
| 104 |
+
"За открывшейся дверью — пустота\n",
|
| 105 |
+
"Это значит,что кто-то пришёл за тобой\n",
|
| 106 |
+
"Это значит,что теперь ты кому-то \n",
|
| 107 |
+
"Понадобился\n",
|
| 108 |
+
"\n",
|
| 109 |
+
"А снег всё идёт,а снег всё идёт\n",
|
| 110 |
+
"Русское поле источает снег\n",
|
| 111 |
+
"\n",
|
| 112 |
+
"Иных хоронили в упаковке глазёнок\n",
|
| 113 |
+
"Иных хоронили в упаковке газет\n",
|
| 114 |
+
"\n",
|
| 115 |
+
"А то,что на бойне умертвили бычка \n",
|
| 116 |
+
"На то всеобщая радость,всеобщая гордость\n",
|
| 117 |
+
"Всеобщая ненависть,всеобщая воля\n",
|
| 118 |
+
"Всеобщая воля да всеобщая старость\n",
|
| 119 |
+
"\n",
|
| 120 |
+
"Набить до отказа собой могилу \n",
|
| 121 |
+
"Это значит наследовать землю\n",
|
| 122 |
+
"Что же такое наследовать землю\n",
|
| 123 |
+
"Это значит исчерпать терпение\n",
|
| 124 |
+
" Что и требовалось доказать\n",
|
| 125 |
+
" Что и требовалось доказать\n",
|
| 126 |
+
"\n",
|
| 127 |
+
"В дверной глазок — в замочную щель \n",
|
| 128 |
+
"Гениальные мыслишки — мировые войнушки\n",
|
| 129 |
+
"Неофициальные пупы земли\n",
|
| 130 |
+
"Эмалированные части головных систем\n",
|
| 131 |
+
"Инстинктивные добровольцы\n",
|
| 132 |
+
"Во имя вселенной и хлебной корочки\n",
|
| 133 |
+
"Люди с большой буквы\n",
|
| 134 |
+
"Слово «люди» пишется с большой буквы\n",
|
| 135 |
+
"\n",
|
| 136 |
+
"Свастика веры стянула лица\n",
|
| 137 |
+
"Вавилонская азбука налипла на пальцах\n",
|
| 138 |
+
"Исторически оправданный метод\n",
|
| 139 |
+
"Пожирания сырой земли\n",
|
| 140 |
+
" Это ли не то,что нам надо?!\n",
|
| 141 |
+
" Это ли не то,что нам надо?!\n",
|
| 142 |
+
"\n",
|
| 143 |
+
"А поутру они неизбежно проснулись\n",
|
| 144 |
+
"Не простудились — не замарались\n",
|
| 145 |
+
"Называли вещи своими именами\n",
|
| 146 |
+
"Сеяли доброе,разумное,вечное\n",
|
| 147 |
+
"Всё посеяли,всё назвали\n",
|
| 148 |
+
"Кушать подано — честь по чести\n",
|
| 149 |
+
"На первое были плоды просвещения\n",
|
| 150 |
+
"А на второе — кровавые мальчики\n",
|
| 151 |
+
"\n",
|
| 152 |
+
"Орденоносный господь победоносного мира\n",
|
| 153 |
+
"Заслуженный господь краснознамённого страха\n",
|
| 154 |
+
"Праведный праздник для правильных граждан\n",
|
| 155 |
+
"Отточенный серп для созревших колосьев\n",
|
| 156 |
+
"\n",
|
| 157 |
+
"Яма как принцип движения к Солнцу\n",
|
| 158 |
+
"Кашу слезами не испортишь нет\n",
|
| 159 |
+
"\n",
|
| 160 |
+
"Полные сани девичьим срамом\n",
|
| 161 |
+
"Полные простыни ребячьим смрадом\n",
|
| 162 |
+
"Девичьи глазки,кукушкины слёзки\n",
|
| 163 |
+
"А так же всякие иные предметы\n",
|
| 164 |
+
"\n",
|
| 165 |
+
"Так кто погиб в генеральном сраженьи\n",
|
| 166 |
+
"Кто погиб в гениальном поражении\n",
|
| 167 |
+
"За полную чашку жалости\n",
|
| 168 |
+
"В Сталинградской битве озверевшей похоти?\n",
|
| 169 |
+
"\n",
|
| 170 |
+
"Самолёт усмехнулся вдребезги\n",
|
| 171 |
+
"В бугорок обетованной земли\n",
|
| 172 |
+
"Самолёт усмехнулся вдребезги\n",
|
| 173 |
+
"В бугорок обетованной землицы\n",
|
| 174 |
+
"\n",
|
| 175 |
+
"А свою любовь я собственноручно\n",
|
| 176 |
+
"Освободил от дальнейших неизбежных огорчений\n",
|
| 177 |
+
"Подманил ее пряником\n",
|
| 178 |
+
"Подманил ее пряником \n",
|
| 179 |
+
"Изнасиловал пьяным жестоким ботинком\n",
|
| 180 |
+
"И повесил на облачке,словно ребёнок\n",
|
| 181 |
+
" СВОЮ НЕЛЮБИМУЮ КУКЛУ\n",
|
| 182 |
+
" СВОЮ НЕЛЮБИМУЮ КУКЛУ\n",
|
| 183 |
+
" СВОЮ НЕЛЮБИМУЮ КУКЛУ\n",
|
| 184 |
+
" СВОЮ НЕЛЮБИМУЮ КУКЛУ\n",
|
| 185 |
+
"\n",
|
| 186 |
+
"Словно иней,сердобольный смех \n",
|
| 187 |
+
"Словно иней,сердобольный смех \n",
|
| 188 |
+
"Словно иней,сердобольный смех \n",
|
| 189 |
+
"Словно иней,сердобольный смех \n",
|
| 190 |
+
"Славно валиться на...\n",
|
| 191 |
+
" на...\n",
|
| 192 |
+
" на РУССКОЕ ПОЛЕ ЭКСПЕРИМЕНТОВ\n",
|
| 193 |
+
" \n",
|
| 194 |
+
" Вечность пахнет нефтью\"\"\""
|
| 195 |
+
]
|
| 196 |
+
},
|
| 197 |
+
{
|
| 198 |
+
"cell_type": "code",
|
| 199 |
+
"execution_count": 3,
|
| 200 |
+
"metadata": {},
|
| 201 |
+
"outputs": [
|
| 202 |
+
{
|
| 203 |
+
"name": "stderr",
|
| 204 |
+
"output_type": "stream",
|
| 205 |
+
"text": [
|
| 206 |
+
"c:\\GitHub\\TRAIN_GPT\\.conda\\Lib\\site-packages\\transformers\\data\\datasets\\language_modeling.py:54: FutureWarning: This dataset will be removed from the library soon, preprocessing should be handled with the 🤗 Datasets library. You can have a look at this example script for pointers: https://github.com/huggingface/transformers/blob/master/examples/pytorch/language-modeling/run_mlm.py\n",
|
| 207 |
+
" warnings.warn(\n"
|
| 208 |
+
]
|
| 209 |
+
}
|
| 210 |
+
],
|
| 211 |
+
"source": [
|
| 212 |
+
"# Сохраним обучающие данные в .txt файл\n",
|
| 213 |
+
"train_path = 'GROB.txt'\n",
|
| 214 |
+
"'''\n",
|
| 215 |
+
"with open(train_path, \"w\") as f:\n",
|
| 216 |
+
" f.write(text)'''\n",
|
| 217 |
+
"\n",
|
| 218 |
+
"# Создание датасета\n",
|
| 219 |
+
"train_dataset = TextDataset(tokenizer=tokenizer, file_path=train_path, block_size=64)\n",
|
| 220 |
+
"\n",
|
| 221 |
+
"# Создание даталодера (нарезает текст на оптимальные по длине куски)\n",
|
| 222 |
+
"data_collator = DataCollatorForLanguageModeling(tokenizer=tokenizer, mlm=False)\n"
|
| 223 |
+
]
|
| 224 |
+
},
|
| 225 |
+
{
|
| 226 |
+
"cell_type": "code",
|
| 227 |
+
"execution_count": 6,
|
| 228 |
+
"metadata": {},
|
| 229 |
+
"outputs": [
|
| 230 |
+
{
|
| 231 |
+
"name": "stderr",
|
| 232 |
+
"output_type": "stream",
|
| 233 |
+
"text": [
|
| 234 |
+
"PyTorch: setting up devices\n",
|
| 235 |
+
"The default value for the training argument `--report_to` will change in v5 (from all installed integrations to none). In v5, you will need to use `--report_to all` to get the same behavior as now. You should start updating your code and make this info disappear :-).\n"
|
| 236 |
+
]
|
| 237 |
+
}
|
| 238 |
+
],
|
| 239 |
+
"source": [
|
| 240 |
+
"# Подготовка параметров fine-tuning\n",
|
| 241 |
+
"training_args = TrainingArguments(\n",
|
| 242 |
+
" output_dir=\"./gpt2-finetuned\",\n",
|
| 243 |
+
" overwrite_output_dir=True,\n",
|
| 244 |
+
" num_train_epochs=10, # Количество эпох обучения\n",
|
| 245 |
+
" per_device_train_batch_size=32,\n",
|
| 246 |
+
" per_device_eval_batch_size=32,\n",
|
| 247 |
+
" save_steps=10_000, # Сохранять модель каждые 10000 шагов\n",
|
| 248 |
+
" save_total_limit=2,\n",
|
| 249 |
+
" gradient_accumulation_steps=16,\n",
|
| 250 |
+
")\n",
|
| 251 |
+
"\n",
|
| 252 |
+
"# Создание объекта Trainer\n",
|
| 253 |
+
"trainer = Trainer(\n",
|
| 254 |
+
" model=model,\n",
|
| 255 |
+
" args=training_args,\n",
|
| 256 |
+
" data_collator=data_collator,\n",
|
| 257 |
+
" train_dataset=train_dataset,\n",
|
| 258 |
+
")"
|
| 259 |
+
]
|
| 260 |
+
},
|
| 261 |
+
{
|
| 262 |
+
"cell_type": "code",
|
| 263 |
+
"execution_count": 7,
|
| 264 |
+
"metadata": {},
|
| 265 |
+
"outputs": [
|
| 266 |
+
{
|
| 267 |
+
"name": "stderr",
|
| 268 |
+
"output_type": "stream",
|
| 269 |
+
"text": [
|
| 270 |
+
"***** Running training *****\n",
|
| 271 |
+
" Num examples = 4477\n",
|
| 272 |
+
" Num Epochs = 10\n",
|
| 273 |
+
" Instantaneous batch size per device = 32\n",
|
| 274 |
+
" Total train batch size (w. parallel, distributed & accumulation) = 512\n",
|
| 275 |
+
" Gradient Accumulation steps = 16\n",
|
| 276 |
+
" Total optimization steps = 80\n"
|
| 277 |
+
]
|
| 278 |
+
},
|
| 279 |
+
{
|
| 280 |
+
"name": "stderr",
|
| 281 |
+
"output_type": "stream",
|
| 282 |
+
"text": []
|
| 283 |
+
},
|
| 284 |
+
{
|
| 285 |
+
"ename": "KeyboardInterrupt",
|
| 286 |
+
"evalue": "",
|
| 287 |
+
"output_type": "error",
|
| 288 |
+
"traceback": [
|
| 289 |
+
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
|
| 290 |
+
"\u001b[1;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)",
|
| 291 |
+
"Cell \u001b[1;32mIn[7], line 2\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[38;5;66;03m# Запуск fine-tuning\u001b[39;00m\n\u001b[1;32m----> 2\u001b[0m \u001b[43mtrainer\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtrain\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n",
|
| 292 |
+
"File \u001b[1;32mc:\\GitHub\\TRAIN_GPT\\.conda\\Lib\\site-packages\\transformers\\trainer.py:1284\u001b[0m, in \u001b[0;36mTrainer.train\u001b[1;34m(self, resume_from_checkpoint, trial, ignore_keys_for_eval, **kwargs)\u001b[0m\n\u001b[0;32m 1282\u001b[0m tr_loss \u001b[38;5;241m+\u001b[39m\u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mtraining_step(model, inputs)\n\u001b[0;32m 1283\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m-> 1284\u001b[0m tr_loss \u001b[38;5;241m+\u001b[39m\u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtraining_step\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmodel\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43minputs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 1285\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcurrent_flos \u001b[38;5;241m+\u001b[39m\u001b[38;5;241m=\u001b[39m \u001b[38;5;28mfloat\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mfloating_point_ops(inputs))\n\u001b[0;32m 1287\u001b[0m \u001b[38;5;66;03m# Optimizer step for deepspeed must be called on every step regardless of the value of gradient_accumulation_steps\u001b[39;00m\n",
|
| 293 |
+
"File \u001b[1;32mc:\\GitHub\\TRAIN_GPT\\.conda\\Lib\\site-packages\\transformers\\trainer.py:1807\u001b[0m, in \u001b[0;36mTrainer.training_step\u001b[1;34m(self, model, inputs)\u001b[0m\n\u001b[0;32m 1805\u001b[0m loss \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mdeepspeed\u001b[38;5;241m.\u001b[39mbackward(loss)\n\u001b[0;32m 1806\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m-> 1807\u001b[0m \u001b[43mloss\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mbackward\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 1809\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m loss\u001b[38;5;241m.\u001b[39mdetach()\n",
|
| 294 |
+
"File \u001b[1;32m~\\AppData\\Roaming\\Python\\Python311\\site-packages\\torch\\_tensor.py:492\u001b[0m, in \u001b[0;36mTensor.backward\u001b[1;34m(self, gradient, retain_graph, create_graph, inputs)\u001b[0m\n\u001b[0;32m 482\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m has_torch_function_unary(\u001b[38;5;28mself\u001b[39m):\n\u001b[0;32m 483\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m handle_torch_function(\n\u001b[0;32m 484\u001b[0m Tensor\u001b[38;5;241m.\u001b[39mbackward,\n\u001b[0;32m 485\u001b[0m (\u001b[38;5;28mself\u001b[39m,),\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 490\u001b[0m inputs\u001b[38;5;241m=\u001b[39minputs,\n\u001b[0;32m 491\u001b[0m )\n\u001b[1;32m--> 492\u001b[0m \u001b[43mtorch\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mautograd\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mbackward\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m 493\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mgradient\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mretain_graph\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcreate_graph\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43minputs\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43minputs\u001b[49m\n\u001b[0;32m 494\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n",
|
| 295 |
+
"File \u001b[1;32m~\\AppData\\Roaming\\Python\\Python311\\site-packages\\torch\\autograd\\__init__.py:251\u001b[0m, in \u001b[0;36mbackward\u001b[1;34m(tensors, grad_tensors, retain_graph, create_graph, grad_variables, inputs)\u001b[0m\n\u001b[0;32m 246\u001b[0m retain_graph \u001b[38;5;241m=\u001b[39m create_graph\n\u001b[0;32m 248\u001b[0m \u001b[38;5;66;03m# The reason we repeat the same comment below is that\u001b[39;00m\n\u001b[0;32m 249\u001b[0m \u001b[38;5;66;03m# some Python versions print out the first line of a multi-line function\u001b[39;00m\n\u001b[0;32m 250\u001b[0m \u001b[38;5;66;03m# calls in the traceback and some print out the last line\u001b[39;00m\n\u001b[1;32m--> 251\u001b[0m \u001b[43mVariable\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_execution_engine\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrun_backward\u001b[49m\u001b[43m(\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;66;43;03m# Calls into the C++ engine to run the backward pass\u001b[39;49;00m\n\u001b[0;32m 252\u001b[0m \u001b[43m \u001b[49m\u001b[43mtensors\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 253\u001b[0m \u001b[43m \u001b[49m\u001b[43mgrad_tensors_\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 254\u001b[0m \u001b[43m \u001b[49m\u001b[43mretain_graph\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 255\u001b[0m \u001b[43m \u001b[49m\u001b[43mcreate_graph\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 256\u001b[0m \u001b[43m \u001b[49m\u001b[43minputs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 257\u001b[0m \u001b[43m \u001b[49m\u001b[43mallow_unreachable\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[0;32m 258\u001b[0m \u001b[43m \u001b[49m\u001b[43maccumulate_grad\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[0;32m 259\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n",
|
| 296 |
+
"\u001b[1;31mKeyboardInterrupt\u001b[0m: "
|
| 297 |
+
]
|
| 298 |
+
}
|
| 299 |
+
],
|
| 300 |
+
"source": [
|
| 301 |
+
"# Запуск fine-tuning\n",
|
| 302 |
+
"trainer.train()"
|
| 303 |
+
]
|
| 304 |
+
},
|
| 305 |
+
{
|
| 306 |
+
"cell_type": "code",
|
| 307 |
+
"execution_count": 17,
|
| 308 |
+
"metadata": {},
|
| 309 |
+
"outputs": [
|
| 310 |
+
{
|
| 311 |
+
"name": "stderr",
|
| 312 |
+
"output_type": "stream",
|
| 313 |
+
"text": [
|
| 314 |
+
"Configuration saved in ./gpt2-finetuned\\config.json\n"
|
| 315 |
+
]
|
| 316 |
+
},
|
| 317 |
+
{
|
| 318 |
+
"name": "stderr",
|
| 319 |
+
"output_type": "stream",
|
| 320 |
+
"text": [
|
| 321 |
+
"Model weights saved in ./gpt2-finetuned\\pytorch_model.bin\n",
|
| 322 |
+
"tokenizer config file saved in ./gpt2-finetuned\\tokenizer_config.json\n",
|
| 323 |
+
"Special tokens file saved in ./gpt2-finetuned\\special_tokens_map.json\n"
|
| 324 |
+
]
|
| 325 |
+
},
|
| 326 |
+
{
|
| 327 |
+
"data": {
|
| 328 |
+
"text/plain": [
|
| 329 |
+
"('./gpt2-finetuned\\\\tokenizer_config.json',\n",
|
| 330 |
+
" './gpt2-finetuned\\\\special_tokens_map.json',\n",
|
| 331 |
+
" './gpt2-finetuned\\\\vocab.json',\n",
|
| 332 |
+
" './gpt2-finetuned\\\\merges.txt',\n",
|
| 333 |
+
" './gpt2-finetuned\\\\added_tokens.json')"
|
| 334 |
+
]
|
| 335 |
+
},
|
| 336 |
+
"execution_count": 17,
|
| 337 |
+
"metadata": {},
|
| 338 |
+
"output_type": "execute_result"
|
| 339 |
+
}
|
| 340 |
+
],
|
| 341 |
+
"source": [
|
| 342 |
+
"# Сохранение обученной модели\n",
|
| 343 |
+
"model.save_pretrained(\"./gpt2-finetuned\")\n",
|
| 344 |
+
"tokenizer.save_pretrained(\"./gpt2-finetuned\")"
|
| 345 |
+
]
|
| 346 |
+
},
|
| 347 |
+
{
|
| 348 |
+
"cell_type": "code",
|
| 349 |
+
"execution_count": 22,
|
| 350 |
+
"metadata": {},
|
| 351 |
+
"outputs": [
|
| 352 |
+
{
|
| 353 |
+
"name": "stdout",
|
| 354 |
+
"output_type": "stream",
|
| 355 |
+
"text": [
|
| 356 |
+
"Сгенерированный вопрос: Новый год к нам мчится\n",
|
| 357 |
+
"Гениальные мыслишки лезут в замочную щель\n",
|
| 358 |
+
"Неофициальные пупы земли\n",
|
| 359 |
+
"Эмалированные части головных систем\n",
|
| 360 |
+
"Инстинктивные добровольцы\n",
|
| 361 |
+
"Во имя вселенной и хлебной корочки\n",
|
| 362 |
+
"Люди с большой буквы\n",
|
| 363 |
+
"Слово «люди» пишется со значком «пожиратель».\n",
|
| 364 |
+
"\n",
|
| 365 |
+
"Яма как принцип движения к Солнцу\n",
|
| 366 |
+
"Кашу слезами не испортишь нет\n",
|
| 367 |
+
" Это ли не то,что нам надо?!\n",
|
| 368 |
+
" на РУССКОЕ ПОЛЕ ЭКСПЕРИМЕНТОВ\n",
|
| 369 |
+
"Новейшее средство для очистки духовок\n",
|
| 370 |
+
"От задохнувшихся по собственной воле\n",
|
| 371 |
+
"Сеяли доброе,разумное,вечное\n",
|
| 372 |
+
"Всё посеяли,всё назвали\n",
|
| 373 |
+
"Кушать подано — честь по чести\n",
|
| 374 |
+
"На первое были плоды просвещения\n",
|
| 375 |
+
"А на второе — кровавые мальчики\n",
|
| 376 |
+
" \n",
|
| 377 |
+
"\n",
|
| 378 |
+
"Орденоносный праздник для правильных граждан\n",
|
| 379 |
+
"За полную чашку жалости\n",
|
| 380 |
+
"В дверной глазок не загляни\n",
|
| 381 |
+
"Полные простыни надежды\n",
|
| 382 |
+
"Девичьи глазки,кукушкины слёзки\n",
|
| 383 |
+
"Иные погибали в генеральном сраженьи\n",
|
| 384 |
+
"Штрафбаты,войны,колониальные реформы\n",
|
| 385 |
+
"Мифология оптимизма\n",
|
| 386 |
+
"Законы гаубицы благонравия\n",
|
| 387 |
+
"Знатное пиршество благоразумия\n",
|
| 388 |
+
"Устами ребенка глаголет пуля\n",
|
| 389 |
+
" ...вечность пахнет нефтью\n",
|
| 390 |
+
" СВОЮ НЕЛЮБИМУЮ КУ\n"
|
| 391 |
+
]
|
| 392 |
+
},
|
| 393 |
+
{
|
| 394 |
+
"ename": "",
|
| 395 |
+
"evalue": "",
|
| 396 |
+
"output_type": "error",
|
| 397 |
+
"traceback": [
|
| 398 |
+
"\u001b[1;31mПри выполнении кода в текущей ячейке или предыдущей ячейке ядро аварийно завершило работу. Проверьте код в ячейках, чтобы определить возможную причину сбоя. Щелкните <a href=\"https://aka.ms/vscodeJupyterKernelCrash\">здесь</a> для получения дополнительных сведений. Подробнее см. в <a href='command:jupyter.viewOutput'>журнале Jupyter</a>."
|
| 399 |
+
]
|
| 400 |
+
}
|
| 401 |
+
],
|
| 402 |
+
"source": [
|
| 403 |
+
"# Задаем контекст для генерации вопроса\n",
|
| 404 |
+
"context = \"Новый год к нам мчится\"\n",
|
| 405 |
+
"input_ids = tokenizer.encode(context, return_tensors=\"pt\")\n",
|
| 406 |
+
"\n",
|
| 407 |
+
"# Генерация текста (вопроса)\n",
|
| 408 |
+
"output = model.generate(input_ids, max_length=300, num_beams=5, no_repeat_ngram_size=2, top_k=50, top_p=0.95, temperature=0.7)\n",
|
| 409 |
+
"\n",
|
| 410 |
+
"# Декодирование сгенерированного текста\n",
|
| 411 |
+
"question = tokenizer.decode(output[0], skip_special_tokens=True)\n",
|
| 412 |
+
"\n",
|
| 413 |
+
"print(\"Сгенерированный вопрос:\", question)"
|
| 414 |
+
]
|
| 415 |
+
},
|
| 416 |
+
{
|
| 417 |
+
"cell_type": "code",
|
| 418 |
+
"execution_count": 12,
|
| 419 |
+
"metadata": {},
|
| 420 |
+
"outputs": [],
|
| 421 |
+
"source": [
|
| 422 |
+
"import torch"
|
| 423 |
+
]
|
| 424 |
+
},
|
| 425 |
+
{
|
| 426 |
+
"cell_type": "code",
|
| 427 |
+
"execution_count": 19,
|
| 428 |
+
"metadata": {},
|
| 429 |
+
"outputs": [
|
| 430 |
+
{
|
| 431 |
+
"name": "stdout",
|
| 432 |
+
"output_type": "stream",
|
| 433 |
+
"text": [
|
| 434 |
+
"\n",
|
| 435 |
+
"Трогательным ножечком пытать свою плоть!\n",
|
| 436 |
+
"Трогательным ножечком пытать свою плоть!\n",
|
| 437 |
+
"До крови прищемить добровольные пальцы\n",
|
| 438 |
+
"Отважно смакуя леденцы на палочке\n",
|
| 439 |
+
"Целеустремлённо набивать карманы\n",
|
| 440 |
+
"Мёртвыми мышатами,живыми хуями\n",
|
| 441 |
+
"Шрамом на пальцах,живыми хуями\n",
|
| 442 |
+
"Шрамом на пальцах,живыми хуями\n",
|
| 443 |
+
"\n",
|
| 444 |
+
"А свою любовь я собственноручно\n",
|
| 445 |
+
"Освободил от дальнейших неизбеж\n"
|
| 446 |
+
]
|
| 447 |
+
}
|
| 448 |
+
],
|
| 449 |
+
"source": [
|
| 450 |
+
"\n",
|
| 451 |
+
"# Пример вероя��ностного сэмплирвоания с ограничением\n",
|
| 452 |
+
"text = \"Трогательным ножечком пытать свою плоть!\\n\"\n",
|
| 453 |
+
"input_ids = tokenizer.encode(text, return_tensors=\"pt\")\n",
|
| 454 |
+
"model.eval()\n",
|
| 455 |
+
"with torch.no_grad():\n",
|
| 456 |
+
" out = model.generate(input_ids,\n",
|
| 457 |
+
" do_sample=True,\n",
|
| 458 |
+
" num_beams=2,\n",
|
| 459 |
+
" temperature=1.5,\n",
|
| 460 |
+
" top_p=0.9,\n",
|
| 461 |
+
" max_length=100,\n",
|
| 462 |
+
" )\n",
|
| 463 |
+
"\n",
|
| 464 |
+
"generated_text = list(map(tokenizer.decode, out))[0]\n",
|
| 465 |
+
"print()\n",
|
| 466 |
+
"print(generated_text)"
|
| 467 |
+
]
|
| 468 |
+
}
|
| 469 |
+
],
|
| 470 |
+
"metadata": {
|
| 471 |
+
"kernelspec": {
|
| 472 |
+
"display_name": "Python 3",
|
| 473 |
+
"language": "python",
|
| 474 |
+
"name": "python3"
|
| 475 |
+
},
|
| 476 |
+
"language_info": {
|
| 477 |
+
"codemirror_mode": {
|
| 478 |
+
"name": "ipython",
|
| 479 |
+
"version": 3
|
| 480 |
+
},
|
| 481 |
+
"file_extension": ".py",
|
| 482 |
+
"mimetype": "text/x-python",
|
| 483 |
+
"name": "python",
|
| 484 |
+
"nbconvert_exporter": "python",
|
| 485 |
+
"pygments_lexer": "ipython3",
|
| 486 |
+
"version": "3.11.5"
|
| 487 |
+
}
|
| 488 |
+
},
|
| 489 |
+
"nbformat": 4,
|
| 490 |
+
"nbformat_minor": 2
|
| 491 |
+
}
|
train_dataset.txt
ADDED
|
@@ -0,0 +1,141 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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 |
+
Вечность пахнет нефтью
|
unit_all_md_to_one_file.ipynb
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"cells": [
|
| 3 |
+
{
|
| 4 |
+
"cell_type": "code",
|
| 5 |
+
"execution_count": 2,
|
| 6 |
+
"metadata": {},
|
| 7 |
+
"outputs": [
|
| 8 |
+
{
|
| 9 |
+
"name": "stdout",
|
| 10 |
+
"output_type": "stream",
|
| 11 |
+
"text": [
|
| 12 |
+
"Объединенный файл сохранен в 'GROB.txt'.\n"
|
| 13 |
+
]
|
| 14 |
+
}
|
| 15 |
+
],
|
| 16 |
+
"source": [
|
| 17 |
+
"import os\n",
|
| 18 |
+
"\n",
|
| 19 |
+
"def combine_md_to_txt(input_folder, output_file):\n",
|
| 20 |
+
" # Проверяем существование каталога\n",
|
| 21 |
+
" if not os.path.exists(input_folder):\n",
|
| 22 |
+
" print(f\"Указанный каталог '{input_folder}' не существует.\")\n",
|
| 23 |
+
" return\n",
|
| 24 |
+
"\n",
|
| 25 |
+
" # Получаем список файлов с расширением .md\n",
|
| 26 |
+
" md_files = [f for f in os.listdir(input_folder) if f.endswith('.md')]\n",
|
| 27 |
+
"\n",
|
| 28 |
+
" # Проверяем, есть ли файлы для объединения\n",
|
| 29 |
+
" if not md_files:\n",
|
| 30 |
+
" print(f\"В каталоге '{input_folder}' нет файлов с расширением .md для объединения.\")\n",
|
| 31 |
+
" return\n",
|
| 32 |
+
"\n",
|
| 33 |
+
" # Объединяем содержимое файлов\n",
|
| 34 |
+
" combined_content = \"\"\n",
|
| 35 |
+
" for md_file in md_files:\n",
|
| 36 |
+
" file_path = os.path.join(input_folder, md_file)\n",
|
| 37 |
+
" with open(file_path, 'r', encoding='utf-8') as file:\n",
|
| 38 |
+
" #combined_content += f\"# {md_file}\\n\\n\" # Добавляем заголовок с именем файла\n",
|
| 39 |
+
" combined_content += file.read() + \"\\n\\n\" # Добавляем содержимое файла\n",
|
| 40 |
+
"\n",
|
| 41 |
+
" # Записываем объединенный контент в файл .txt\n",
|
| 42 |
+
" with open(output_file, 'w', encoding='utf-8') as output:\n",
|
| 43 |
+
" output.write(combined_content)\n",
|
| 44 |
+
"\n",
|
| 45 |
+
" print(f\"Объединенный файл сохранен в '{output_file}'.\")\n",
|
| 46 |
+
"\n",
|
| 47 |
+
"# Укажите путь к каталогу с файлами .md и имя выходного файла .txt\n",
|
| 48 |
+
"input_folder_path = 'GROB'\n",
|
| 49 |
+
"output_file_path = 'GROB.txt'\n",
|
| 50 |
+
"\n",
|
| 51 |
+
"# Вызываем функцию для объединения файлов\n",
|
| 52 |
+
"combine_md_to_txt(input_folder_path, output_file_path)\n"
|
| 53 |
+
]
|
| 54 |
+
}
|
| 55 |
+
],
|
| 56 |
+
"metadata": {
|
| 57 |
+
"kernelspec": {
|
| 58 |
+
"display_name": "Python 3",
|
| 59 |
+
"language": "python",
|
| 60 |
+
"name": "python3"
|
| 61 |
+
},
|
| 62 |
+
"language_info": {
|
| 63 |
+
"codemirror_mode": {
|
| 64 |
+
"name": "ipython",
|
| 65 |
+
"version": 3
|
| 66 |
+
},
|
| 67 |
+
"file_extension": ".py",
|
| 68 |
+
"mimetype": "text/x-python",
|
| 69 |
+
"name": "python",
|
| 70 |
+
"nbconvert_exporter": "python",
|
| 71 |
+
"pygments_lexer": "ipython3",
|
| 72 |
+
"version": "3.11.5"
|
| 73 |
+
}
|
| 74 |
+
},
|
| 75 |
+
"nbformat": 4,
|
| 76 |
+
"nbformat_minor": 2
|
| 77 |
+
}
|