twenkid commited on
Commit
bedff89
·
verified ·
1 Parent(s): 34e24c5

GPT2-Medium-BG 6.2021

Browse files

Trained on Google Colab T4 in June 2021. Includes also a script for multi-step generation with hidden injections of tokens for directed topic change (but it needed more smoothing etc.). The methods are explained in videos on Youtube. Small dataset of maximum just about 140 MB?/Bulgarian UTF, but IMO good results (subjectively measured coherence). Dataset preparation: selected books from "Chitanka" with some required cleaning of the marking for notes, footnotes, id etc., some "augmentation" with changes of names which were too repetitive; also a body of works, books, publications and texts, written by the author himself from "The Sacred Computer" e-zine; some poetry by Hristo Botev ...; articles about computers from forums etc., some machine translated from English to Bulgarian (...)
Incrementally updating the dataset, adding and removing items. Due to the notebook and limited range of uninterruptable hours, the training was done on slices collecting parts of the files (not implemented very pretty). For inference: use the notebook and the script.
For training: see the video instructions, as the notebook has cells which are not cleaned and shouldn't be always invoked. There was also an updated version due to discovered incompatibility of the initial one.

The model was created from scratch, not fine tuned. Read the comments in gen_comments-1-2023-clean.py
https://github.com/Twenkid/GPT2-Bulgarian-Training-Tips-and-Tools
GPT2 Unlimited-Length Generation with Hidden Prompt Injections - Code Review: https://youtu.be/V1eO2OpsXBE

added_tokens.json ADDED
@@ -0,0 +1 @@
 
 
1
+ {"</s>": 50250, "<s>": 50251, "<pad>": 50252, "<mask>": 50253, "<none1>": 50254, "<none2>": 50255, "<none3>": 50256}
config.json ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "_name_or_path": "/content/drive/MyDrive/gpt2/",
3
+ "activation_function": "gelu_new",
4
+ "architectures": [
5
+ "GPT2LMHeadModel"
6
+ ],
7
+ "attn_pdrop": 0.1,
8
+ "bos_token_id": 50251,
9
+ "embd_pdrop": 0.1,
10
+ "eos_token_id": 50250,
11
+ "gradient_checkpointing": false,
12
+ "initializer_range": 0.02,
13
+ "layer_norm_epsilon": 1e-05,
14
+ "model_type": "gpt2",
15
+ "n_ctx": 1024,
16
+ "n_embd": 1024,
17
+ "n_head": 16,
18
+ "n_inner": null,
19
+ "n_layer": 24,
20
+ "n_positions": 1024,
21
+ "resid_pdrop": 0.1,
22
+ "scale_attn_weights": true,
23
+ "summary_activation": null,
24
+ "summary_first_dropout": 0.1,
25
+ "summary_proj_to_labels": true,
26
+ "summary_type": "cls_index",
27
+ "summary_use_proj": true,
28
+ "transformers_version": "4.9.1",
29
+ "use_cache": true,
30
+ "vocab_size": 50255
31
+ }
32
+
gen_comments-1-2023-clean.py ADDED
@@ -0,0 +1,628 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #-*- coding: utf-8 -*-
2
+ import os
3
+ os.environ['CUDA_VISIBLE_DEVICES'] = '-1'
4
+ #from tokenise import BPE_token
5
+ from tokenizers.models import BPE
6
+ from tokenizers import Tokenizer
7
+ from tokenizers.decoders import ByteLevel as ByteLevelDecoder
8
+ from tokenizers.normalizers import NFKC, Sequence
9
+ from tokenizers.pre_tokenizers import ByteLevel
10
+ from tokenizers.trainers import BpeTrainer
11
+
12
+ import tensorflow as tf
13
+ from transformers import GPT2Config, TFGPT2LMHeadModel, GPT2Tokenizer
14
+
15
+ from transformers import pipeline, set_seed
16
+ from datetime import datetime
17
+ import random
18
+
19
+ """
20
+ Author: Todor Arnaudov, "The Sacred Computer":
21
+ http://artificial-mind.blogspot.com
22
+ http://github.com/Twenkid - Looking for partners for my AGI Research Institute and other projects. Check it out!
23
+ https://youtu.be/V1eO2OpsXBE
24
+ https://github.com/Twenkid/GPT2-Bulgarian-Training-Tips-and-Tools
25
+
26
+ A method for:
27
+
28
+ Chained Unlimited Directed GPT2 Generation by overlapping prompts-injection and Removing the Injected Beginning of the Following Generated Sequence
29
+
30
+ Created in June-July 2021 while training GPT2-Medium on Colab.
31
+
32
+ Published in 1.2023
33
+
34
+ 7-4-2024:
35
+
36
+ Fixed typos/errors after the cleaning of code which I haven't tested.
37
+
38
+ Recently when testing llama.cpp GGML implementation, trying to convert the model to pytorch etc. to run with Georgi Gerganov's library, hoping that it would be faster. However I discovered that there were problems with GPT2 converstion and also that I've created a slightly "odd" GPT-2 model with 50255 tokens instead of 50257. It works fine with the python script and generation as I was using it. I made attempts to repair it for the converter by hacking it to reshape the tensor on the fly, but it didn't resolve the issue as probably there were other problems with the convertor itself.
39
+
40
+ Future work: applying and extending this prompt-injection with GPT4All which is already used in my workflows and projects with speech recognition through Whisper, recording with AutoClap, which will be connected to the new version of Smarty - the intelligent dictionary - the speech synthesizer "Toshko 2" (now probably Toshko 3) and my yet in-house Research Assistant ACS. (...)
41
+
42
+
43
+
44
+ """
45
+
46
+ #Move up: #7-4-2024
47
+ #os.environ['CUDA_VISIBLE_DEVICES'] = '-1'#Can't fit MEDIUM in GPU - can't train even small?
48
+
49
+ #LOAD -- SET PROPER PATH!!!
50
+ model_dir = r"C:\gpt" #2"
51
+ m_model_dir = model_dir
52
+
53
+ tokenizer = None; model = None
54
+
55
+ #tokenizer = GPT2Tokenizer.from_pretrained(model_dir)
56
+ #model = TFGPT2LMHeadModel.from_pretrained(model_dir)
57
+
58
+
59
+ def generate(tokenizer, text=None):
60
+ if text == None:
61
+ text = "Той каза на жена си, че много я обича и винаги след нея ще тича, а тя се разсмя."
62
+ text = "Какво му трябва на човек? Парите, колите, жените и песните!"
63
+ text = "Той каза на жена си, че много я обича и винаги след нея ще тича, а тя се разсмя: Иване, купи ми кола или ще си намеря друг!"
64
+ # encoding the input text
65
+ input_ids = tokenizer.encode(text, return_tensors='tf')
66
+ # getting out output
67
+ beam_output = model.generate(
68
+ input_ids,
69
+ max_length = 100,
70
+ num_beams = 16,
71
+ temperature = 1.0,
72
+ no_repeat_ngram_size=2,
73
+ num_return_sequences=1
74
+ )
75
+ for i in range(0,1):
76
+ print(tokenizer.decode(beam_output[i]))
77
+ now = datetime.now()
78
+ date_time = now.strftime("%d-%m-%Y_%H-%M-%S")
79
+ #f = open("gen.txt", "wt", encoding='utf-8') #date etc.
80
+ fname = "gen" + date_time + ".txt"
81
+ f = open(fname, "wt", encoding='utf-8') #date etc.
82
+ f.write(tokenizer.decode(beam_output[i]))
83
+ f.close()
84
+
85
+
86
+ def gen_return(tokenizer, length=100, beams=16, t=1.0, ngram=2, seq=1, top_k=40, text=None):
87
+ if text == None:
88
+ text = "Той каза на жена си, че много я обича и винаги след нея ще тича, а тя се разсмя."
89
+ text = "Какво му трябва на човек? Парите, колите, жените и песните!"
90
+ #text = "Той каза на жена си, че много я обича и винаги след нея ще тича, а тя се разсмя."
91
+ # encoding the input text
92
+ input_ids = tokenizer.encode(text, return_tensors='tf')
93
+ # getting out output
94
+ beam_output = model.generate(
95
+ input_ids,
96
+ max_length = length, #150,
97
+ num_beams = beams, #16,
98
+ temperature = t, #1.0,
99
+ no_repeat_ngram_size=ngram, #2,
100
+ num_return_sequences=seq) #1
101
+ #top_k =
102
+ ret = []
103
+ for i in range(0,seq):
104
+ print(tokenizer.decode(beam_output[i]))
105
+ ret.append(beam_output[i])
106
+ print(len(ret))
107
+
108
+ now = datetime.now()
109
+ date_time = now.strftime("%d-%m-%Y_%H-%M-%S")
110
+ #f = open("gen.txt", "wt", encoding='utf-8') #date etc.
111
+ fname = "gen-" + date_time + ".txt"
112
+ f = open(fname, "wt", encoding='utf-8') #date etc.
113
+ f.write(tokenizer.decode(beam_output[i]))
114
+ f.close()
115
+ return(ret)
116
+
117
+ def basic():
118
+ print('Generating...')
119
+ generate(tokenizer)
120
+
121
+ def advanced(tokenizer, text=None):
122
+ now = datetime.now()
123
+ date_time = now.strftime("%d-%m-%Y_%H-%M-%S")
124
+ #f = open("gen.txt", "wt", encoding='utf-8') #date etc.
125
+ fname = "gen-" + date_time + ".txt"
126
+ f = open(fname, "wt", encoding='utf-8') #date etc.
127
+ f.write("gn = gen_return(tokenizer, length=200, beams=16, t=1.0, ngram=2, seq=1, text=None)")
128
+ print("Generating..." )
129
+ beams = 16
130
+ for b in [16, 8, 4, 2, 1]:
131
+ f.write("BEAMS="+str(b)+"\r\n")
132
+ gn = gen_return(tokenizer, length=200, beams=b, t=1.2, ngram=2, seq=1, text=text)
133
+ for nm, item in enumerate(gn):
134
+ output = "\r\n" + str(nm) + "\r\n" + tokenizer.decode(item)
135
+ f.write(output)
136
+ f.write("\r\n")
137
+ f.close()
138
+
139
+
140
+ def advancedMany(tokenizer, text=None):
141
+ length = 200 #280 # 200#125 #250 #250 #400 #150 #200
142
+ now = datetime.now()
143
+ date_time = now.strftime("%d-%m-%Y_%H-%M-%S")
144
+ #f = open("gen.txt", "wt", encoding='utf-8') #date etc.
145
+ fname = "gen-" + date_time + ".txt"
146
+ f = open(fname, "wt", encoding='utf-8') #date etc.
147
+ beams = 16 #16 #8 #16 # 8 #16
148
+ t = 1.1 #3 #1.2 #not 1.5 #.2 #until 24.6. incl. was 1.2 then a run ~ 20:00 25.6 =1; now 1.5
149
+ n = 0
150
+ ngram = 2 #2 #3 - not good # was 2 until 25.6 20:hh
151
+ f.write("gn = gen_return(tokenizer, " + "length="+str(length)+" , beams= " + str(beams) + ", t=" +str(t) + ", ngram=" + str(ngram))
152
+ print("Generating...")
153
+ #
154
+ texts = ["Барам си хуя и му късам главата! Свършвам във банята, свършвам на земята! Барам си хуя и му късам главата!", "Банките спират депозитите на граждани. Вече ще се плаща само в натура, като цените варират според сексапила на клиентите. Грозните ще трябва повече да се потрудят.", "Карам си колата с 300 километра, нещо се изпречи като самолет! Но какво да видя самолетът изостава като костенурка!", "Върви народе възродени, към Англия, САЩ и Европа върви! И в гъза се еби!", "Когато бях овчарче и овците пасях, бях много благодарен, макар и сиромах! Амин!", "Императорът се обади на любовницата си от Париж: скъпа, чакам те в Рим. Времето е чудесно!", "Да бъдеш или да не бъдеш? - попита Терминаторът и застреля Хамлет, който полетя към стената."]
155
+ texts = ["Той каза на жена си, че много я обича и винаги след нея ще тича, а тя се разсмя: Иване, купи ми кола или ще си намеря друг ебач!", "Интел участват в корупционна оргия с Dell, в която са замесени висши търговски представители. За да злепоставят конкурентите си от AMD, те са изключили 10% от ядрата на графичния ускорител GeForce 3."]
156
+
157
+ texts = ["Intel участват в корупционна оргия с Dell и се бият с AMD, обаче компютрите им са стари като Пентиум."]
158
+ texts = ["Предсказването на бъдещето е основна способност на мозъка - казал Конфуций и изпил една чаша ракия."]
159
+ texts = ["Мезалианс, принцесата се отказва от привилегиите си. Или майка ѝ, която е кралица, по всички правила на родословията, те обявява тържествено за рицар, след определен брой подвизи в името на верността към короната.", "Intel участват в корупционна оргия с Dell и се бият с AMD, обаче компютрите им са стари като Пентиум.", "Предсказването на бъдещето е основна способност на мозъка - казал Конфуций и изпил една чаша ракия.", "Барам си хуя и му късам главата! Свършавам във банята, свършвам на земята! Барам си хуя и му късам главата!", "Банките спират депозитите на граждани. Вече ще се плаща само в натура, като цените варират според сексапила на клиентите. Грозните ще трябва повече да се потрудят.", "Карам си колата с 300 километра, нещо се изпречи като самолет! Но какво да видя самолетът изостава като костенурка!", "Върви народе възродени, към Англия, САЩ и Европа върви! И в гъза се еби!", "Когато бях овчарче и овците пасях, бях много благодарен, макар и сиромах! Амин!", "Императорът се обади на любовницата си от Париж: скъпа, чакам те в Рим. Времето е чудесно!", "Да бъдеш или да не бъдеш? - попита Терминаторът и застреля Хамлет, който полетя към стената.", "Тодор Живков се срещна с Владимир Путин на тристранна среща с президента на САЩ Ким Кардашиян, след което се развихри дива оргия, при която има пострадали животни."]
160
+ texts = ["Microsoft се обадили на Apple за да се разберат за процесора Пентиум.", "- Не! - раздра простора Бай Гочо. - Народът е омаян от змейщината. Змейовете са разляли лудо биле по всички извори на словото.", "Къде се е чуло и видяло, куче да лети и тухла да чете вестник?", "- Не знам, но печката е включена и телевизорът работи. Знаеш ли колко ток гори?!", "Херкулес извадил пистолета и гръмнал злия робот в дупарата."]
161
+
162
+ texts = ["Той каза на жена си, че много я обича и винаги след нея ще тича, а тя се разсмя: Ивaне, купи ми кола или ще си намеря друг ебач!", "Интел участват в корупционна оргия с Dell, в която са замесени висши търговски представители. За да злепоставят конкурентите си от AMD, те са изключили 10% от ядрата на графичния ускорител GeForce 3.", "Microsoft се обадили на Apple за да се разберат за процесора на Intel.", "- Не! - раздра простора Бай Гочо. - Народът е омаян от змейщината!", "Къде се е чуло и видяло, куче да лети и тухла да чете вестник?", "- Не знам, но печката е включена и телевизорът работи. Знаеш ли колко ток гори?!", "Херкулес извадил пистолета и гръмнал злия робот в дупарата. Терминаторът се разсмял и отвърнал.", "Американският президентът Байдън се срещнал с Ким Кардашиян, която била любовница на Бойко Борисов в резиденцията му. Те отпразнували демокрацията с чаша вино.", "Боговете сигурно са полудели, но компютрите са бързи! - рекъл Тош и звъннал на Калоян да се видят с чичо Ачо на лостовете.", "Предсказването на бъдещето е основна способност на мозъка - казал Конфуций и изпил една чаша ракия с бай Ганьо.", "Барам си хуя и му късам главата! Свършавам във банята, свършвам на земята! Барам си хуя и му късам главата!", "Банките спират депозитите на граждани. Вече ще се плаща само в натура, като цените варират според сексапила на клиентите.", "Мезалианс, принцесата се отказва от привилегиите си. Или майка ѝ, която е кралица, по всички правила на родословията, те обявява тържествено за рицар, след определен брой подвизи в името на верността към короната.", "Когато бях овчарче и овците пасях, бях много благодарен, макар и сиромах!", "Алелуя, хвани ме за хуя!", "Телевизионните новини и СМИ - системите за масова дезинформация тровят ума на скотонаселението. Изхвърлете си телевизора и ще прогледнете! - казал доктор Пламен Пасков.", "Карам си колата с 300 километра, нещо се изпречи като самолет! Но какво да видя самолетът изостава като костенурка!", "Върви народе възродени, към Англия, САЩ и Европа върви! И в гъза се еби!", "Тодор Живков се срещна с Владимир Путин на тристранна среща с президента на САЩ Ким Кардашиян, след което се развихри дива оргия, при която има пострадали животни.", "Императорът се обади на любовницата си от Париж: скъпа, чакам те в Рим. Времето е чудесно!", "Да бъдеш или да не бъдеш? - попита Терминаторът и застреля Хамлет, който полетя към стената."]
163
+ #texts = ["Тодор Живков се срещна с Владимир Путин на тристранна среща с президента на САЩ Ким Кардашиян, след което се развихри дива оргия, при която има пострадали животни."]
164
+ #for b in [16, 8, 4, 2, 1]:
165
+ #for b in [16, 16, 16, 16, 16]:
166
+ #for b in [8, 8, 8, 16, 16]:
167
+ #set_seed(random.randint(1,9999999))
168
+ #texts = ["Windows 11 е най-якият процесор на AMD!","Intel пускат нова версия на операционната система AMD 11", "ЕИМ СВЯТ и юнаците срещу GPU-тата"]
169
+ texts.append("Windows 11 е най-якият процесор на AMD!")
170
+ texts.append("Intel пускат нова версия на операционната система AMD 11")
171
+ texts.append("ЕИМ СВЯТ и юнаците срещу GPU-тата")
172
+ #3-7-2021 prostotiya
173
+ #texts = ["Да бъдеш или да не бъдеш - попита проститутката? Това е въпросът, задник! - отговори Терминаторът - застреля БМВ-то с пушката си и колата с Джон Конър се преобърна. Тогава момичето засмука хуя му, докато той не свърши в устата и тя рече: О, толкова ти е голям!"]
174
+
175
+ b = beams
176
+ top_k = 40
177
+ sd = 0
178
+ for text in texts:
179
+ f.write(str(n) + ":" + ", BEAMS = "+str(b)+" seed: " + str(sd) + "t: " + str(t) + ", top_k: " + str(top_k) + "\r\n")
180
+ #set_seed(random.randint(1,9999999))
181
+ sd = random.randint(1,9999999)
182
+ set_seed(sd)
183
+ gn = gen_return(tokenizer, length=length, beams=b, t=t, ngram=2, seq=1, top_k=top_k, text=text) #texts[n])
184
+ for nm, item in enumerate(gn):
185
+ output = "\r\n" + str(nm) + "\r\n" + tokenizer.decode(item)
186
+ nm+=1
187
+ f.write(output)
188
+ f.write("\r\n")
189
+ n+=1
190
+ f.close()
191
+
192
+ #params = [0 = text, 1 = length, 2 = beams, 3 = temperature, 4 = ngram, 5 = top_k]
193
+ #or text - separated?
194
+ #def advancedSingleRet(tokenizer, text, params) --> str :
195
+ def advancedSingleRet(tokenizer, model, params) -> str :
196
+ text, sd, length, beams, t, ngram, top_k = params
197
+ seq = 1 #one only for now - possible future many and select from them etc. but too slow
198
+ now = datetime.now()
199
+ #length = 200#125 #250 #250 #400 #150 #200
200
+ date_time = now.strftime("%d-%m-%Y_%H-%M-%S")
201
+ #f = open("gen.txt", "wt", encoding='utf-8') #date etc.
202
+ fname = "gen-" + date_time + ".txt"
203
+ f = open(fname, "wt", encoding='utf-8') #date etc.
204
+ #beams = 8 #16 #8 #16 # 8 #16
205
+ #t = 1 #3 #1.2 #not 1.5 #.2 #until 24.6. incl. was 1.2 then a run ~ 20:00 25.6 =1; now 1.5
206
+ #n = 0
207
+ #ngram = 2 #2 #3 - not good # was 2 until 25.6 20:hh
208
+ f.write("gn = gen_return(tokenizer, " + "length="+str(length)+" , beams= " + str(beams) + ", t=" +str(t) + ", ngram=" + str(ngram))
209
+ print("Generating...")
210
+ input_ids = tokenizer.encode(text, return_tensors='tf')
211
+ # getting out output
212
+ beam_output = model.generate(
213
+ input_ids,
214
+ max_length = length, #150,
215
+ num_beams = beams, #16,
216
+ temperature = t, #1.0,
217
+ no_repeat_ngram_size=ngram, #2,
218
+ num_return_sequences=seq, #1
219
+ top_k = top_k
220
+ )
221
+ #ret = []
222
+ #for i in range(0,seq):
223
+ # print(tokenizer.decode(beam_output[i]))
224
+ # ret.append(beam_output[i])
225
+ #return beam_output[0] #this is encoded!
226
+ dec = tokenizer.decode(beam_output[0]) #beam_output[0] #this is encoded!
227
+ f.write(dec); #includes the input -- sometimes would be excluded in sequential generation
228
+ f.close()
229
+ return dec #tokenizer.decode(beam_output[0]) #beam_output[0] #this is encoded!
230
+
231
+
232
+ def advancedCycle(tokenizer, feed=None):
233
+ pass
234
+
235
+ def genMany():
236
+ text = "Той каза на жена си, че много я обича и винаги след нея ще тича, а тя се разсмя: Иване, купи ми кола или ще си намеря друг!"
237
+ #advanced(text)
238
+ set_seed(345)
239
+ advancedMany(tokenizer, None)
240
+
241
+
242
+ simpleEnd = ' '
243
+ def endSentence():
244
+ if simpleEnd != None: return simpleEnd
245
+ ends = ['.','!',';','?','...','?!']
246
+ r = random.randint(1,len(ends)-1)
247
+ return ends[r]
248
+ def endSentenceGeneration(text):
249
+ return ' ' #more complex, ensure finishing previous burst properly
250
+ #return '.' #more complex, ensure finishing previous burst properly
251
+
252
+ def genRecurse(): #28.6.2021
253
+ '''
254
+ 0 -- characters, names
255
+ 1 -- locations
256
+ 2 -- topics
257
+ 3 -- specifics ...
258
+ '''
259
+ feed = []
260
+
261
+ feed.append([["Емил"], ["Ада"], ["Иван"], ["Петър"], ["Ангел"], ["Мария"]])
262
+ feed.append([["София"], ["България"], ["Париж"], ["Франция"]])
263
+ feed.append([["отивам"], ["пристигам"], ["заминавам"], ["кацам"], ["срещна"], ["видя"], ["целуна"], ["прегърна"]])
264
+ feed.append([["телевизора"], ["колата"], ["ракия"], ["москвич"], ["летище"], ["самолет"], ["хляб"], ["нива"]])
265
+
266
+ ln = 80
267
+ ln_step = 50 #80
268
+ total = ''
269
+ ftotal = open(r"e:\gpt\total.txt", "wt", encoding='utf-8')
270
+ print(type(feed[0][0]),type(feed[1][0]),type(feed[2][0]),type(feed[3][0]))
271
+ print(type(feed[0][0][0]),type(feed[1][0]),type(feed[2][0]),type(feed[3][0]))
272
+ mix = feed[0][0][0] + " " + feed[1][0][0] + " " + feed[2][0][0] + " " + feed[3][0][0] + endSentence()
273
+ sd = set_seed(random.randint(1,9999))
274
+ par = (mix, sd, ln, 16, 1.2, 2, 40)
275
+ lenmix = len(mix)
276
+
277
+ #LOAD
278
+ #'''
279
+ model_dir = m_model_dir #r"Z:\gpt2"
280
+ tokenizer = GPT2Tokenizer.from_pretrained(model_dir)
281
+ model = TFGPT2LMHeadModel.from_pretrained(model_dir)
282
+ #'''
283
+
284
+ ret = advancedSingleRet(tokenizer, model, par)
285
+ print(ret)
286
+ fn = ret.find(mix) #initial
287
+ print("FN=",fn)
288
+ if fn > -1:
289
+ trim = ret[fn+len(mix):]
290
+ print(fn+len(mix))
291
+ ftotal.write("\r\n=======\r\n"+trim+"\r\n")
292
+ else: trim = ret
293
+ total = trim + endSentenceGeneration(trim) #ret[len(mix):] not+
294
+ ftotal.write("\r\n"+ret[fn:fn+len(mix)] + "\r\n" + "\r\n" + mix + "\r\n=====\r\n")
295
+ ftotal.write("\r\n"+total+"\r\n")
296
+
297
+ #next = ret[len(mix):] #exclude the beginning already given
298
+ next = total
299
+ start = len(total)
300
+ #to_add =". " + feed[0][1] + " на " + feed[1][1] + " тогава " + feed[2][1] + "когато " + feed[3][1]
301
+
302
+ #ADD PRE-
303
+ to_add = ". " + feed[0][1][0] + " за да " + feed[1][1][0] + " понеже " + feed[2][1][0] + " когато " + feed[3][1][0] + endSentence()
304
+ #next = next + to_add
305
+ next = to_add + next #in the beginning in order to smooth the connection
306
+ #new_start = len(to_add) + start #trim from here
307
+ new_start = len(to_add) # + start #trim from here
308
+
309
+ ln+=ln_step #should tokenize, check len etc...
310
+ len_to_add = len(to_add)
311
+ sd = set_seed(random.randint(1,9999))
312
+
313
+ input_ids = tokenizer.encode(next, return_tensors='tf')
314
+ if len(input_ids) > ln: ln = len(input_ids)+lnstep
315
+
316
+ par = (next, sd, ln, 16, 1.2, 2, 40)
317
+ ret = advancedSingleRet(tokenizer,model, par)
318
+
319
+ fn = ret.find(to_add) #, len(mix)) #this is not exactly - not precise; there are no repetitions anyway
320
+ print("FN=",fn)
321
+ if fn > -1:
322
+ trim = ret[fn+len(mix):]
323
+ ftotal.write("\r\n=======\r\n"+trim+"\r\n")
324
+ else: trim = ret
325
+ #total += trim
326
+ total +=ret[new_start:] + endSentenceGeneration(trim)
327
+ print(fn)
328
+
329
+ #total += trim #ret[len(next):]
330
+ print(ret)
331
+ print(total)
332
+ ftotal.write("\r\n"+total+"\r\n")
333
+
334
+ #THIRD
335
+ next = total #ret[len(mix):] #exclude the beginning already given
336
+ pred_len = len(next)
337
+ #to_add =". " + feed[0][1] + " на " + feed[1][1] + " тогава " + feed[2][1] + "когато " + feed[3][1]
338
+ to_add = ". " + feed[0][2][0] + " към " + feed[1][2][0] + " защото " + feed[2][2][0] + " голям " + feed[3][2][0] + endSentence()
339
+ #next = next + to_add
340
+ next = to_add + next
341
+ #new_start = len(next) #to_add)
342
+ new_start = len(to_add)
343
+ ln+=ln_step
344
+ len_to_add = len(to_add)
345
+ sd = set_seed(random.randint(1,9999))
346
+
347
+ input_ids = tokenizer.encode(next, return_tensors='tf')
348
+ if len(input_ids) > ln: ln = len(input_ids)+lnstep
349
+ par = (next, sd, ln, 16, 1.2, 2, 40)
350
+
351
+ ret = advancedSingleRet(tokenizer,model, par)
352
+
353
+ fn = ret.find(to_add, pred_len)
354
+ print("FN=",fn)
355
+ if fn > -1:
356
+ trim = ret[fn+len(to_add):]
357
+ ftotal.write("\r\n=======\r\n"+trim+"\r\n")
358
+ else: trim = ret
359
+ #total += trim
360
+ print(fn)
361
+
362
+ total +=ret[new_start:] + endSentenceGeneration(trim)
363
+ #total += trim #ret[len(next):]
364
+ #total += ret[len(next):]
365
+ print(ret)
366
+ print(total)
367
+ ftotal.write("\r\n"+total+"\r\n")
368
+
369
+ ftotal.write(total)
370
+ ftotal.close()
371
+
372
+ #Generate in a batch etc. ...
373
+ #Interactive ... Keep model loaded etc. - takes a lot of time
374
+
375
+ '''
376
+ f.write("\r\nbeams = 8 etc. down to 1\r\n")
377
+ gn = gen_return(tokenizer, length=150, beams=8, t=1.0, ngram=2, seq=1, text=None)
378
+ f.write(''.join(tokenizer.decode(gn)))
379
+ f.write("\r\n")
380
+ gn = gen_return(tokenizer, length=150, beams=4, t=1.0, ngram=2, seq=1, text=None)
381
+ f.write(''.join(tokenizer.decode(gn)))
382
+ f.write("\r\n")
383
+ gn = gen_return(tokenizer, length=150, beams=2, t=1.0, ngram=2, seq=1, text=None)
384
+ f.write(''.join(tokenizer.decode(gn)))
385
+ f.write("\r\n")
386
+ gn = gen_return(tokenizer, length=150, beams=1, t=1.0, ngram=2, seq=1, text=None)
387
+ f.write(''.join(tokenizer.decode(gn)))
388
+ f.write("\r\n")
389
+ f.close()
390
+ '''
391
+
392
+
393
+
394
+ def genRecurseTwo():
395
+ '''
396
+ 0 -- characters, names
397
+ 1 -- locations
398
+ 2 -- topics
399
+ 3 -- specifics ...
400
+ '''
401
+ feed = []
402
+ '''
403
+ feed.append([["Емил"], ["Ада"], ["Иван"], ["Петър"], ["Ангел"], ["Мария"]])
404
+ feed.append([["София"], ["България"], ["Париж"], ["Франция"]])
405
+ feed.append([["отивам"], ["пристигам"], ["заминавам"], ["кацам"], ["срещна"], ["видя"], ["целуна"], ["прегърна"]])
406
+ feed.append([["телевизора"], ["колата"], ["ракия"], ["москвич"], ["летище"], ["самолет"], ["хляб"], ["нива"]])
407
+
408
+ feed.append([["Емил"], ["Петя"], ["Иван"], ["Петър"], ["Ангел"], ["Мария"]])
409
+ feed.append([["Лондон"], ["България"], ["Париж"], ["Франция"]])
410
+ feed.append([["идвам"], ["карам"],["пристигам"], ["заминавам"], ["кацам"], ["срещна"], ["видя"], ["целуна"], ["прегърна"]])
411
+ feed.append([["професор"],["университет"], ["колата"], ["ракия"], ["москвич"], ["летище"], ["самолет"], ["хляб"], ["нива"]])
412
+ '''
413
+ '''
414
+ feed.append([["Георги"], ["говори"], ["Иван"], ["Петър"], ["Ангел"], ["Мария"]])
415
+ feed.append([["Морето"], ["България"], ["Париж"], ["Франция"]])
416
+ feed.append([["целувам"], ["красива"],["обичам"], ["заминавам"], ["кацам"], ["срещна"], ["видя"], ["целуна"], ["прегърна"]])
417
+ feed.append([["леглото"],["града"], ["колата"], ["ракия"], ["москвич"], ["летище"], ["самолет"], ["хляб"], ["нива"]])
418
+ '''
419
+
420
+ feed.append([["жена"], ["процесор"], ["Иван"], ["Петър"], ["Ангел"], ["Мария"]])
421
+ #feed.append([["процесор"], ["България"], ["Париж"], ["Франция"], ["Италия"], ["Гърция"]])
422
+ feed.append([["обичам"], ["България"], ["Париж"], ["Microsoft"], ["Италия"], ["Гърция"]])
423
+ feed.append([["целувам"], ["красива"],["обичам"], ["заминавам"], ["кацам"], ["срещна"], ["видя"], ["целуна"], ["прегърна"]])
424
+ feed.append([["леглото"],["града"], ["колата"], ["вода"], ["терминатор"], ["летище"], ["самолет"], ["хляб"], ["нива"]])
425
+
426
+ #del feed
427
+ #feed = []
428
+
429
+ feed.append([["AMD"], ["процесор"], ["Intel"], ["секс"], ["ускорител"], ["Мария"]])
430
+ #feed.append([["процесор"], ["България"], ["Париж"], ["Франция"], ["Италия"], ["Гърция"]])
431
+ feed.append([["обичам"], ["България"], ["Париж"], ["Франция"], ["Италия"], ["1080"]])
432
+ feed.append([["тест"], ["издание"],["обичам"], ["Microsoft"], ["съюз"], ["система"], ["видя"], ["целуна"], ["прегърна"]])
433
+ feed.append([["летя"],["цена"], ["3080"], ["вода"], ["нов"], ["летище"], ["самолет"], ["хляб"], ["нива"]])
434
+
435
+ feed = []
436
+ '''
437
+ feed.append([["жена"], ["процесор"], ["Иван"], ["Петър"], ["Ангел"], ["Мария"], ["хляб"], ["маса"]])
438
+ #feed.append([["процесор"], ["България"], ["Париж"], ["Франция"], ["Италия"], ["Гърция"]])
439
+ feed.append([["обичам"], ["България"], ["Париж"], ["Microsoft"], ["Италия"], ["Гърция"], ["часовник"], ["кацам"]])
440
+ feed.append([["целувам"], ["красива"],["обичам"], ["заминавам"], ["кацам"], ["срещна"], ["видя"], ["целуна"], ["прегърна"], ["падам"]])
441
+ feed.append([["леглото"],["града"], ["колата"], ["вода"], ["терминатор"], ["летище"], ["самолет"], ["общество"], ["нива"]])
442
+ '''
443
+ feed.append([["жена"], ["стая"], ["Тодор"], ["Терминатор"], ["Ангел"], ["целувам"], ["месо"], ["летя"]])
444
+ #feed.append([["процесор"], ["България"], ["Париж"], ["Франция"], ["Италия"], ["Гърция"]])
445
+ feed.append([["обичам"], ["лягам"], ["София"], ["Иван"], ["Италия"], ["гърди"], ["часовник"], ["кацам"]])
446
+ feed.append([["целувам"], ["красива"],["обичам"], ["победа"], ["летище"], ["крака"], ["мъж"], ["целуна"], ["прегърна"], ["киборг"]])
447
+ feed.append([["леглото"],["град"], ["колата"], ["тенис"], ["терминатор"], ["оргазъм"], ["самолет"], ["общество"], ["любов"]])
448
+
449
+
450
+ #москвич
451
+ print(len(feed[0]))
452
+ #return
453
+ #print(feed[0][0], feed[1][0], feed[2][0])
454
+ # must be three redirections
455
+ #return
456
+ #1)
457
+ ln = 120
458
+ ln_step = 100 #100 #100 #80
459
+ maxln = 200#220 #250 #180 less, was 180, to 130 - 3.7.2021
460
+ bms = 8 #16
461
+ total = ''
462
+ now = datetime.now()
463
+ date_time = now.strftime("%d-%m-%Y_%H-%M-%S")
464
+ fname = "gen-recurse-total-" + date_time + ".txt"
465
+ dir = ''
466
+ #ftotal = open(r"e:\gpt\totalTwo.txt", "wt", encoding='utf-8')
467
+ ftotal = open(dir + fname, "wt", encoding='utf-8') #+ "total-" + ".txt"
468
+ print(type(feed[0][0]),type(feed[1][0]),type(feed[2][0]),type(feed[3][0]))
469
+ print(type(feed[0][0][0]),type(feed[1][0]),type(feed[2][0]),type(feed[3][0]))
470
+ mix = feed[0][0][0] + " " + feed[1][0][0] + " " + feed[2][0][0] + " " + feed[3][0][0] + endSentence()
471
+ sd = set_seed(random.randint(1,9999))
472
+ par = (mix, sd, ln, bms, 1.2, 2, 40)
473
+ lenmix = len(mix)
474
+ last_context = 70 #80 #symbols from the previous stretch #intermediate?
475
+ #LOAD
476
+ #'''
477
+ model_dir = m_model_dir #r"Z:\gpt2"
478
+ tokenizer = GPT2Tokenizer.from_pretrained(model_dir)
479
+ model = TFGPT2LMHeadModel.from_pretrained(model_dir)
480
+ #'''
481
+
482
+ ret = advancedSingleRet(tokenizer, model, par)
483
+ print(ret)
484
+ fn = ret.find(mix) #initial
485
+ print("FN=",fn)
486
+ if fn > -1:
487
+ trim = ret[fn+len(mix):]
488
+ print(fn+len(mix))
489
+ ftotal.write("\r\n=======================\r\n"+trim+"\r\n")
490
+ else: trim = ret
491
+ total = trim + endSentenceGeneration(trim) #ret[len(mix):] not+
492
+ ftotal.write("\r\n"+ret[fn:fn+len(mix)] + "\r\n" + "\r\n" + mix + "\r\n=====\r\n")
493
+ ftotal.write("\r\n"+total+"\r\n")
494
+
495
+ #next = ret[len(mix):] #exclude the beginning already given
496
+ next = total
497
+ start = len(total)
498
+ #to_add =". " + feed[0][1] + " на " + feed[1][1] + " тогава " + feed[2][1] + "когато " + feed[3][1]
499
+
500
+ #last context + ... should split words etc.
501
+ #ADD PRE-
502
+ to_add = total[-last_context:] + " " + feed[0][1][0] + " за да " + feed[1][1][0] + " понеже " + feed[2][1][0] + " когато " + feed[3][1][0] + endSentence()
503
+ #or POST?
504
+ #to_add = feed[0][1][0] + " за да " + feed[1][1][0] + " понеже " + feed[2][1][0] + " когато " + feed[3][1][0] + endSentence() + total[-last_context:] + " "
505
+ #next = next + to_add
506
+ next = to_add # only the new words ... + next #in the beginning in order to smooth the connection
507
+ #new_start = len(to_add) + start #trim from here
508
+ new_start = len(to_add) # + start #trim from here
509
+
510
+ ln+=ln_step #should tokenize, check len etc...
511
+ len_to_add = len(to_add)
512
+ sd = set_seed(random.randint(1,9999))
513
+ temp = 2.0 #1.2
514
+ par = (next, sd, ln, bms, temp, 2, 40)
515
+ ret = advancedSingleRet(tokenizer,model, par)
516
+
517
+ fn = ret.find(to_add) #, len(mix)) #this is not exactly - not precise; there are no repetitions anyway
518
+ print("FN=",fn)
519
+ if fn > -1:
520
+ trim = ret[fn+len(mix):]
521
+ ftotal.write("\r\n=======\r\n"+trim+"\r\n")
522
+ else: trim = ret
523
+ #total += trim
524
+ total +=ret[new_start:] + endSentenceGeneration(trim)
525
+ print(fn)
526
+
527
+ #total += trim #ret[len(next):]
528
+ print(ret)
529
+ print(total)
530
+ ftotal.write("\r\n"+total+"\r\n")
531
+
532
+ #THIRD
533
+ next = ret[-last_context:] #ret[len(mix):] #exclude the beginning already given
534
+ pred_len = len(next)
535
+ #to_add =". " + feed[0][1] + " на " + feed[1][1] + " тогава " + feed[2][1] + "когато " + feed[3][1]
536
+ to_add = ret[-last_context:] + " " +feed[0][2][0] + " към " + feed[1][2][0] + " защо��о " + feed[2][2][0] + " голям " + feed[3][2][0] + endSentence()
537
+ #to_add = feed[0][2][0] + " към " + feed[1][2][0] + " защото " + feed[2][2][0] + " голям " + feed[3][2][0] + endSentence() + ret[-last_context:] + " " #PRE new keywords
538
+
539
+ #next = next + to_add
540
+ next = to_add #+ next
541
+ #new_start = len(next) #to_add)
542
+ new_start = len(to_add)
543
+ #ln+=ln_step
544
+ len_to_add = len(to_add)
545
+ sd = set_seed(random.randint(1,9999))
546
+ par = (next, sd, ln, bms, 1.0, 2, 40) #1.2, 2, 40)
547
+
548
+ input_ids = tokenizer.encode(next, return_tensors='tf')
549
+ if len(input_ids) > ln: ln = len(input_ids)+lnstep
550
+
551
+ ret = advancedSingleRet(tokenizer,model, par)
552
+
553
+ fn = ret.find(to_add, pred_len)
554
+ print("FN=",fn)
555
+ if fn > -1:
556
+ trim = ret[fn+len(to_add):]
557
+ ftotal.write("\r\n=======\r\n"+trim+"\r\n")
558
+ else: trim = ret
559
+ #total += trim
560
+ print(fn)
561
+
562
+ total +=ret[new_start:] + endSentenceGeneration(trim)
563
+ #total += trim #ret[len(next):]
564
+ #total += ret[len(next):]
565
+ print(ret)
566
+ print(total)
567
+ ftotal.write("\r\n"+total+"\r\n")
568
+
569
+ choose = "към,защото,голям,малък,хубав,и,но,ако,с,без,да,където,когато,никога,ха-ха,не мога,мога,искам,не искам,къде,най-голям,стига,нея,аз,ти,той,тя,ние,вие,те"
570
+ spl = choose.split(',')
571
+ print(spl)
572
+ space = " "
573
+ for k in range(3,8): #5): #, len(feed[0])):
574
+ print("K=",k)
575
+ #random.choice(seq)¶
576
+ #to_add = ret[-last_context:] + ". " + feed[0][k][0] + " към " + feed[1][k][0] + " защото " + feed[2][k][0] + " голям " + feed[3][k][0] + endSentence()
577
+ rch1 = space + random.choice(spl) + space
578
+ rch2 = space + random.choice(spl) + space
579
+ rch3 = space + random.choice(spl) + space
580
+ #rch4 = random.choice(seq)
581
+
582
+ #step = ret[-last_context:] should split on whole words etc. ... #11-7-2021
583
+ #to_add = ret[-last_context:] + ". " + feed[0][k][0] + " " + rch1 + " " + feed[1][k][0] + rch2 + feed[2][k][0] + rch3 + feed[3][k][0] + endSentence()
584
+ to_add = feed[0][k][0] + " " + rch1 + " " + feed[1][k][0] + rch2 + feed[2][k][0] + rch3 + feed[3][k][0] + endSentence() + ret[-last_context:] + " " # за да не прекъсва изреченията неестествено?
585
+
586
+ ftotal.write("\r\n:TO_ADD=["+to_add+"]\r\n")
587
+ next = to_add #+ next
588
+ #new_start = len(next) #to_add)
589
+ new_start = len(to_add)
590
+ #ln+=ln_step
591
+ len_to_add = len(to_add)
592
+ sd = set_seed(random.randint(1,9999))
593
+
594
+ input_ids = tokenizer.encode(next, return_tensors='tf')
595
+ if len(input_ids) > ln: ln = len(input_ids)+lnstep
596
+ else: ln = min(ln, maxln)
597
+ print("LN=",ln)
598
+ par = (next, sd, ln, bms, 1.2, 2, 40)
599
+ ret = advancedSingleRet(tokenizer,model, par)
600
+
601
+ fn = ret.find(to_add, pred_len)
602
+ print("FN=",fn)
603
+ if fn > -1:
604
+ trim = ret[fn+len(to_add):]
605
+ ftotal.write("\r\n=======\r\n"+trim+"\r\n")
606
+ else: trim = ret
607
+ #total += trim
608
+ print(fn)
609
+
610
+ total +=ret[new_start:] + endSentenceGeneration(trim)
611
+ #total += trim #ret[len(next):]
612
+ #total += ret[len(next):]
613
+ print(ret)
614
+ print(total)
615
+ ftotal.write("\r\n"+total+"\r\n")
616
+ ftotal.write(total)
617
+
618
+
619
+ #Generate in a batch etc. ...
620
+ #Interactive ... Keep model loaded etc. - takes a lot of time
621
+
622
+ #genRecurse()
623
+ #genRecurseTwo()
624
+ if tokenizer == None: tokenizer = GPT2Tokenizer.from_pretrained(model_dir)
625
+ if model == None: model = TFGPT2LMHeadModel.from_pretrained(model_dir)
626
+
627
+ genRecurseTwo()
628
+ advancedMany(tokenizer)
special_tokens_map.json ADDED
@@ -0,0 +1 @@
 
 
1
+ {"bos_token": "<s>", "eos_token": "</s>", "unk_token": "<unk>", "pad_token": "<pad>", "mask_token": "<mask>"}
tf_model.h5 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:cfb37d569edfffe429a0cb4a8c0cd8aa3b4a1ed5e3168787d994aca49313a765
3
+ size 1419639272
tokenizer_config.json ADDED
@@ -0,0 +1 @@
 
 
1
+ {"errors": "replace", "unk_token": {"content": "<|endoftext|>", "single_word": false, "lstrip": false, "rstrip": false, "normalized": true, "__type": "AddedToken"}, "bos_token": {"content": "<|endoftext|>", "single_word": false, "lstrip": false, "rstrip": false, "normalized": true, "__type": "AddedToken"}, "eos_token": {"content": "<|endoftext|>", "single_word": false, "lstrip": false, "rstrip": false, "normalized": true, "__type": "AddedToken"}, "add_prefix_space": false, "special_tokens_map_file": "/content/drive/MyDrive/gpt2-medium/special_tokens_map.json", "tokenizer_file": null, "name_or_path": "/content/drive/MyDrive/gpt2/", "tokenizer_class": "GPT2Tokenizer"}
vocab.json ADDED
The diff for this file is too large to render. See raw diff