|
|
|
import os
|
|
os.environ['CUDA_VISIBLE_DEVICES'] = '-1'
|
|
|
|
from tokenizers.models import BPE
|
|
from tokenizers import Tokenizer
|
|
from tokenizers.decoders import ByteLevel as ByteLevelDecoder
|
|
from tokenizers.normalizers import NFKC, Sequence
|
|
from tokenizers.pre_tokenizers import ByteLevel
|
|
from tokenizers.trainers import BpeTrainer
|
|
|
|
import tensorflow as tf
|
|
from transformers import GPT2Config, TFGPT2LMHeadModel, GPT2Tokenizer
|
|
|
|
from transformers import pipeline, set_seed
|
|
from datetime import datetime
|
|
import random
|
|
|
|
"""
|
|
Author: Todor Arnaudov, "The Sacred Computer":
|
|
http://artificial-mind.blogspot.com
|
|
http://github.com/Twenkid - Looking for partners for my AGI Research Institute and other projects. Check it out!
|
|
https://youtu.be/V1eO2OpsXBE
|
|
https://github.com/Twenkid/GPT2-Bulgarian-Training-Tips-and-Tools
|
|
|
|
A method for:
|
|
|
|
Chained Unlimited Directed GPT2 Generation by overlapping prompts-injection and Removing the Injected Beginning of the Following Generated Sequence
|
|
|
|
Created in June-July 2021 while training GPT2-Medium on Colab.
|
|
|
|
Published in 1.2023
|
|
|
|
7-4-2024:
|
|
|
|
Fixed typos/errors after the cleaning of code which I haven't tested.
|
|
|
|
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.
|
|
|
|
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. (...)
|
|
|
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
|
|
model_dir = r"C:\gpt"
|
|
m_model_dir = model_dir
|
|
|
|
tokenizer = None; model = None
|
|
|
|
|
|
|
|
|
|
|
|
def generate(tokenizer, text=None):
|
|
if text == None:
|
|
text = "Той каза на жена си, че много я обича и винаги след нея ще тича, а тя се разсмя."
|
|
text = "Какво му трябва на човек? Парите, колите, жените и песните!"
|
|
text = "Той каза на жена си, че много я обича и винаги след нея ще тича, а тя се разсмя: Иване, купи ми кола или ще си намеря друг!"
|
|
|
|
input_ids = tokenizer.encode(text, return_tensors='tf')
|
|
|
|
beam_output = model.generate(
|
|
input_ids,
|
|
max_length = 100,
|
|
num_beams = 16,
|
|
temperature = 1.0,
|
|
no_repeat_ngram_size=2,
|
|
num_return_sequences=1
|
|
)
|
|
for i in range(0,1):
|
|
print(tokenizer.decode(beam_output[i]))
|
|
now = datetime.now()
|
|
date_time = now.strftime("%d-%m-%Y_%H-%M-%S")
|
|
|
|
fname = "gen" + date_time + ".txt"
|
|
f = open(fname, "wt", encoding='utf-8')
|
|
f.write(tokenizer.decode(beam_output[i]))
|
|
f.close()
|
|
|
|
|
|
def gen_return(tokenizer, length=100, beams=16, t=1.0, ngram=2, seq=1, top_k=40, text=None):
|
|
if text == None:
|
|
text = "Той каза на жена си, че много я обича и винаги след нея ще тича, а тя се разсмя."
|
|
text = "Какво му трябва на човек? Парите, колите, жените и песните!"
|
|
|
|
|
|
input_ids = tokenizer.encode(text, return_tensors='tf')
|
|
|
|
beam_output = model.generate(
|
|
input_ids,
|
|
max_length = length,
|
|
num_beams = beams,
|
|
temperature = t,
|
|
no_repeat_ngram_size=ngram,
|
|
num_return_sequences=seq)
|
|
|
|
ret = []
|
|
for i in range(0,seq):
|
|
print(tokenizer.decode(beam_output[i]))
|
|
ret.append(beam_output[i])
|
|
print(len(ret))
|
|
|
|
now = datetime.now()
|
|
date_time = now.strftime("%d-%m-%Y_%H-%M-%S")
|
|
|
|
fname = "gen-" + date_time + ".txt"
|
|
f = open(fname, "wt", encoding='utf-8')
|
|
f.write(tokenizer.decode(beam_output[i]))
|
|
f.close()
|
|
return(ret)
|
|
|
|
def basic():
|
|
print('Generating...')
|
|
generate(tokenizer)
|
|
|
|
def advanced(tokenizer, text=None):
|
|
now = datetime.now()
|
|
date_time = now.strftime("%d-%m-%Y_%H-%M-%S")
|
|
|
|
fname = "gen-" + date_time + ".txt"
|
|
f = open(fname, "wt", encoding='utf-8')
|
|
f.write("gn = gen_return(tokenizer, length=200, beams=16, t=1.0, ngram=2, seq=1, text=None)")
|
|
print("Generating..." )
|
|
beams = 16
|
|
for b in [16, 8, 4, 2, 1]:
|
|
f.write("BEAMS="+str(b)+"\r\n")
|
|
gn = gen_return(tokenizer, length=200, beams=b, t=1.2, ngram=2, seq=1, text=text)
|
|
for nm, item in enumerate(gn):
|
|
output = "\r\n" + str(nm) + "\r\n" + tokenizer.decode(item)
|
|
f.write(output)
|
|
f.write("\r\n")
|
|
f.close()
|
|
|
|
|
|
def advancedMany(tokenizer, text=None):
|
|
length = 200
|
|
now = datetime.now()
|
|
date_time = now.strftime("%d-%m-%Y_%H-%M-%S")
|
|
|
|
fname = "gen-" + date_time + ".txt"
|
|
f = open(fname, "wt", encoding='utf-8')
|
|
beams = 16
|
|
t = 1.1
|
|
n = 0
|
|
ngram = 2
|
|
f.write("gn = gen_return(tokenizer, " + "length="+str(length)+" , beams= " + str(beams) + ", t=" +str(t) + ", ngram=" + str(ngram))
|
|
print("Generating...")
|
|
|
|
texts = ["Барам си хуя и му късам главата! Свършвам във банята, свършвам на земята! Барам си хуя и му късам главата!", "Банките спират депозитите на граждани. Вече ще се плаща само в натура, като цените варират според сексапила на клиентите. Грозните ще трябва повече да се потрудят.", "Карам си колата с 300 километра, нещо се изпречи като самолет! Но какво да видя самолетът изостава като костенурка!", "Върви народе възродени, към Англия, САЩ и Европа върви! И в гъза се еби!", "Когато бях овчарче и овците пасях, бях много благодарен, макар и сиромах! Амин!", "Императорът се обади на любовницата си от Париж: скъпа, чакам те в Рим. Времето е чудесно!", "Да бъдеш или да не бъдеш? - попита Терминаторът и застреля Хамлет, който полетя към стената."]
|
|
texts = ["Той каза на жена си, че много я обича и винаги след нея ще тича, а тя се разсмя: Иване, купи ми кола или ще си намеря друг ебач!", "Интел участват в корупционна оргия с Dell, в която са замесени висши търговски представители. За да злепоставят конкурентите си от AMD, те са изключили 10% от ядрата на графичния ускорител GeForce 3."]
|
|
|
|
texts = ["Intel участват в корупционна оргия с Dell и се бият с AMD, обаче компютрите им са стари като Пентиум."]
|
|
texts = ["Предсказването на бъдещето е основна способност на мозъка - казал Конфуций и изпил една чаша ракия."]
|
|
texts = ["Мезалианс, принцесата се отказва от привилегиите си. Или майка ѝ, която е кралица, по всички правила на родословията, те обявява тържествено за рицар, след определен брой подвизи в името на верността към короната.", "Intel участват в корупционна оргия с Dell и се бият с AMD, обаче компютрите им са стари като Пентиум.", "Предсказването на бъдещето е основна способност на мозъка - казал Конфуций и изпил една чаша ракия.", "Барам си хуя и му късам главата! Свършавам във банята, свършвам на земята! Барам си хуя и му късам главата!", "Банките спират депозитите на граждани. Вече ще се плаща само в натура, като цените варират според сексапила на клиентите. Грозните ще трябва повече да се потрудят.", "Карам си колата с 300 километра, нещо се изпречи като самолет! Но какво да видя самолетът изостава като костенурка!", "Върви народе възродени, към Англия, САЩ и Европа върви! И в гъза се еби!", "Когато бях овчарче и овците пасях, бях много благодарен, макар и сиромах! Амин!", "Императорът се обади на любовницата си от Париж: скъпа, чакам те в Рим. Времето е чудесно!", "Да бъдеш или да не бъдеш? - попита Терминаторът и застреля Хамлет, който полетя към стената.", "Тодор Живков се срещна с Владимир Путин на тристранна среща с президента на САЩ Ким Кардашиян, след което се развихри дива оргия, при която има пострадали животни."]
|
|
texts = ["Microsoft се обадили на Apple за да се разберат за процесора Пентиум.", "- Не! - раздра простора Бай Гочо. - Народът е омаян от змейщината. Змейовете са разляли лудо биле по всички извори на словото.", "Къде се е чуло и видяло, куче да лети и тухла да чете вестник?", "- Не знам, но печката е включена и телевизорът работи. Знаеш ли колко ток гори?!", "Херкулес извадил пистолета и гръмнал злия робот в дупарата."]
|
|
|
|
texts = ["Той каза на жена си, че много я обича и винаги след нея ще тича, а тя се разсмя: Ивaне, купи ми кола или ще си намеря друг ебач!", "Интел участват в корупционна оргия с Dell, в която са замесени висши търговски представители. За да злепоставят конкурентите си от AMD, те са изключили 10% от ядрата на графичния ускорител GeForce 3.", "Microsoft се обадили на Apple за да се разберат за процесора на Intel.", "- Не! - раздра простора Бай Гочо. - Народът е омаян от змейщината!", "Къде се е чуло и видяло, куче да лети и тухла да чете вестник?", "- Не знам, но печката е включена и телевизорът работи. Знаеш ли колко ток гори?!", "Херкулес извадил пистолета и гръмнал злия робот в дупарата. Терминаторът се разсмял и отвърнал.", "Американският президентът Байдън се срещнал с Ким Кардашиян, която била любовница на Бойко Борисов в резиденцията му. Те отпразнували демокрацията с чаша вино.", "Боговете сигурно са полудели, но компютрите са бързи! - рекъл Тош и звъннал на Калоян да се видят с чичо Ачо на лостовете.", "Предсказването на бъдещето е основна способност на мозъка - казал Конфуций и изпил една чаша ракия с бай Ганьо.", "Барам си хуя и му късам главата! Свършавам във банята, свършвам на земята! Барам си хуя и му късам главата!", "Банките спират депозитите на граждани. Вече ще се плаща само в натура, като цените варират според сексапила на клиентите.", "Мезалианс, принцесата се отказва от привилегиите си. Или майка ѝ, която е кралица, по всички правила на родословията, те обявява тържествено за рицар, след определен брой подвизи в името на верността към короната.", "Когато бях овчарче и овците пасях, бях много благодарен, макар и сиромах!", "Алелуя, хвани ме за хуя!", "Телевизионните новини и СМИ - системите за масова дезинформация тровят ума на скотонаселението. Изхвърлете си телевизора и ще прогледнете! - казал доктор Пламен Пасков.", "Карам си колата с 300 километра, нещо се изпречи като самолет! Но какво да видя самолетът изостава като костенурка!", "Върви народе възродени, към Англия, САЩ и Европа върви! И в гъза се еби!", "Тодор Живков се срещна с Владимир Путин на тристранна среща с президента на САЩ Ким Кардашиян, след което се развихри дива оргия, при която има пострадали животни.", "Императорът се обади на любовницата си от Париж: скъпа, чакам те в Рим. Времето е чудесно!", "Да бъдеш или да не бъдеш? - попита Терминаторът и застреля Хамлет, който полетя към стената."]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
texts.append("Windows 11 е най-якият процесор на AMD!")
|
|
texts.append("Intel пускат нова версия на операционната система AMD 11")
|
|
texts.append("ЕИМ СВЯТ и юнаците срещу GPU-тата")
|
|
|
|
|
|
|
|
b = beams
|
|
top_k = 40
|
|
sd = 0
|
|
for text in texts:
|
|
f.write(str(n) + ":" + ", BEAMS = "+str(b)+" seed: " + str(sd) + "t: " + str(t) + ", top_k: " + str(top_k) + "\r\n")
|
|
|
|
sd = random.randint(1,9999999)
|
|
set_seed(sd)
|
|
gn = gen_return(tokenizer, length=length, beams=b, t=t, ngram=2, seq=1, top_k=top_k, text=text)
|
|
for nm, item in enumerate(gn):
|
|
output = "\r\n" + str(nm) + "\r\n" + tokenizer.decode(item)
|
|
nm+=1
|
|
f.write(output)
|
|
f.write("\r\n")
|
|
n+=1
|
|
f.close()
|
|
|
|
|
|
|
|
|
|
def advancedSingleRet(tokenizer, model, params) -> str :
|
|
text, sd, length, beams, t, ngram, top_k = params
|
|
seq = 1
|
|
now = datetime.now()
|
|
|
|
date_time = now.strftime("%d-%m-%Y_%H-%M-%S")
|
|
|
|
fname = "gen-" + date_time + ".txt"
|
|
f = open(fname, "wt", encoding='utf-8')
|
|
|
|
|
|
|
|
|
|
f.write("gn = gen_return(tokenizer, " + "length="+str(length)+" , beams= " + str(beams) + ", t=" +str(t) + ", ngram=" + str(ngram))
|
|
print("Generating...")
|
|
input_ids = tokenizer.encode(text, return_tensors='tf')
|
|
|
|
beam_output = model.generate(
|
|
input_ids,
|
|
max_length = length,
|
|
num_beams = beams,
|
|
temperature = t,
|
|
no_repeat_ngram_size=ngram,
|
|
num_return_sequences=seq,
|
|
top_k = top_k
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
dec = tokenizer.decode(beam_output[0])
|
|
f.write(dec);
|
|
f.close()
|
|
return dec
|
|
|
|
|
|
def advancedCycle(tokenizer, feed=None):
|
|
pass
|
|
|
|
def genMany():
|
|
text = "Той каза на жена си, че много я обича и винаги след нея ще тича, а тя се разсмя: Иване, купи ми кола или ще си намеря друг!"
|
|
|
|
set_seed(345)
|
|
advancedMany(tokenizer, None)
|
|
|
|
|
|
simpleEnd = ' '
|
|
def endSentence():
|
|
if simpleEnd != None: return simpleEnd
|
|
ends = ['.','!',';','?','...','?!']
|
|
r = random.randint(1,len(ends)-1)
|
|
return ends[r]
|
|
def endSentenceGeneration(text):
|
|
return ' '
|
|
|
|
|
|
def genRecurse():
|
|
'''
|
|
0 -- characters, names
|
|
1 -- locations
|
|
2 -- topics
|
|
3 -- specifics ...
|
|
'''
|
|
feed = []
|
|
|
|
feed.append([["Емил"], ["Ада"], ["Иван"], ["Петър"], ["Ангел"], ["Мария"]])
|
|
feed.append([["София"], ["България"], ["Париж"], ["Франция"]])
|
|
feed.append([["отивам"], ["пристигам"], ["заминавам"], ["кацам"], ["срещна"], ["видя"], ["целуна"], ["прегърна"]])
|
|
feed.append([["телевизора"], ["колата"], ["ракия"], ["москвич"], ["летище"], ["самолет"], ["хляб"], ["нива"]])
|
|
|
|
ln = 80
|
|
ln_step = 50
|
|
total = ''
|
|
ftotal = open(r"e:\gpt\total.txt", "wt", encoding='utf-8')
|
|
print(type(feed[0][0]),type(feed[1][0]),type(feed[2][0]),type(feed[3][0]))
|
|
print(type(feed[0][0][0]),type(feed[1][0]),type(feed[2][0]),type(feed[3][0]))
|
|
mix = feed[0][0][0] + " " + feed[1][0][0] + " " + feed[2][0][0] + " " + feed[3][0][0] + endSentence()
|
|
sd = set_seed(random.randint(1,9999))
|
|
par = (mix, sd, ln, 16, 1.2, 2, 40)
|
|
lenmix = len(mix)
|
|
|
|
|
|
|
|
model_dir = m_model_dir
|
|
tokenizer = GPT2Tokenizer.from_pretrained(model_dir)
|
|
model = TFGPT2LMHeadModel.from_pretrained(model_dir)
|
|
|
|
|
|
ret = advancedSingleRet(tokenizer, model, par)
|
|
print(ret)
|
|
fn = ret.find(mix)
|
|
print("FN=",fn)
|
|
if fn > -1:
|
|
trim = ret[fn+len(mix):]
|
|
print(fn+len(mix))
|
|
ftotal.write("\r\n=======\r\n"+trim+"\r\n")
|
|
else: trim = ret
|
|
total = trim + endSentenceGeneration(trim)
|
|
ftotal.write("\r\n"+ret[fn:fn+len(mix)] + "\r\n" + "\r\n" + mix + "\r\n=====\r\n")
|
|
ftotal.write("\r\n"+total+"\r\n")
|
|
|
|
|
|
next = total
|
|
start = len(total)
|
|
|
|
|
|
|
|
to_add = ". " + feed[0][1][0] + " за да " + feed[1][1][0] + " понеже " + feed[2][1][0] + " когато " + feed[3][1][0] + endSentence()
|
|
|
|
next = to_add + next
|
|
|
|
new_start = len(to_add)
|
|
|
|
ln+=ln_step
|
|
len_to_add = len(to_add)
|
|
sd = set_seed(random.randint(1,9999))
|
|
|
|
input_ids = tokenizer.encode(next, return_tensors='tf')
|
|
if len(input_ids) > ln: ln = len(input_ids)+lnstep
|
|
|
|
par = (next, sd, ln, 16, 1.2, 2, 40)
|
|
ret = advancedSingleRet(tokenizer,model, par)
|
|
|
|
fn = ret.find(to_add)
|
|
print("FN=",fn)
|
|
if fn > -1:
|
|
trim = ret[fn+len(mix):]
|
|
ftotal.write("\r\n=======\r\n"+trim+"\r\n")
|
|
else: trim = ret
|
|
|
|
total +=ret[new_start:] + endSentenceGeneration(trim)
|
|
print(fn)
|
|
|
|
|
|
print(ret)
|
|
print(total)
|
|
ftotal.write("\r\n"+total+"\r\n")
|
|
|
|
|
|
next = total
|
|
pred_len = len(next)
|
|
|
|
to_add = ". " + feed[0][2][0] + " към " + feed[1][2][0] + " защото " + feed[2][2][0] + " голям " + feed[3][2][0] + endSentence()
|
|
|
|
next = to_add + next
|
|
|
|
new_start = len(to_add)
|
|
ln+=ln_step
|
|
len_to_add = len(to_add)
|
|
sd = set_seed(random.randint(1,9999))
|
|
|
|
input_ids = tokenizer.encode(next, return_tensors='tf')
|
|
if len(input_ids) > ln: ln = len(input_ids)+lnstep
|
|
par = (next, sd, ln, 16, 1.2, 2, 40)
|
|
|
|
ret = advancedSingleRet(tokenizer,model, par)
|
|
|
|
fn = ret.find(to_add, pred_len)
|
|
print("FN=",fn)
|
|
if fn > -1:
|
|
trim = ret[fn+len(to_add):]
|
|
ftotal.write("\r\n=======\r\n"+trim+"\r\n")
|
|
else: trim = ret
|
|
|
|
print(fn)
|
|
|
|
total +=ret[new_start:] + endSentenceGeneration(trim)
|
|
|
|
|
|
print(ret)
|
|
print(total)
|
|
ftotal.write("\r\n"+total+"\r\n")
|
|
|
|
ftotal.write(total)
|
|
ftotal.close()
|
|
|
|
|
|
|
|
|
|
'''
|
|
f.write("\r\nbeams = 8 etc. down to 1\r\n")
|
|
gn = gen_return(tokenizer, length=150, beams=8, t=1.0, ngram=2, seq=1, text=None)
|
|
f.write(''.join(tokenizer.decode(gn)))
|
|
f.write("\r\n")
|
|
gn = gen_return(tokenizer, length=150, beams=4, t=1.0, ngram=2, seq=1, text=None)
|
|
f.write(''.join(tokenizer.decode(gn)))
|
|
f.write("\r\n")
|
|
gn = gen_return(tokenizer, length=150, beams=2, t=1.0, ngram=2, seq=1, text=None)
|
|
f.write(''.join(tokenizer.decode(gn)))
|
|
f.write("\r\n")
|
|
gn = gen_return(tokenizer, length=150, beams=1, t=1.0, ngram=2, seq=1, text=None)
|
|
f.write(''.join(tokenizer.decode(gn)))
|
|
f.write("\r\n")
|
|
f.close()
|
|
'''
|
|
|
|
|
|
|
|
def genRecurseTwo():
|
|
'''
|
|
0 -- characters, names
|
|
1 -- locations
|
|
2 -- topics
|
|
3 -- specifics ...
|
|
'''
|
|
feed = []
|
|
'''
|
|
feed.append([["Емил"], ["Ада"], ["Иван"], ["Петър"], ["Ангел"], ["Мария"]])
|
|
feed.append([["София"], ["България"], ["Париж"], ["Франция"]])
|
|
feed.append([["отивам"], ["пристигам"], ["заминавам"], ["кацам"], ["срещна"], ["видя"], ["целуна"], ["прегърна"]])
|
|
feed.append([["телевизора"], ["колата"], ["ракия"], ["москвич"], ["летище"], ["самолет"], ["хляб"], ["нива"]])
|
|
|
|
feed.append([["Емил"], ["Петя"], ["Иван"], ["Петър"], ["Ангел"], ["Мария"]])
|
|
feed.append([["Лондон"], ["България"], ["Париж"], ["Франция"]])
|
|
feed.append([["идвам"], ["карам"],["пристигам"], ["заминавам"], ["кацам"], ["срещна"], ["видя"], ["целуна"], ["прегърна"]])
|
|
feed.append([["професор"],["университет"], ["колата"], ["ракия"], ["москвич"], ["летище"], ["самолет"], ["хляб"], ["нива"]])
|
|
'''
|
|
'''
|
|
feed.append([["Георги"], ["говори"], ["Иван"], ["Петър"], ["Ангел"], ["Мария"]])
|
|
feed.append([["Морето"], ["България"], ["Париж"], ["Франция"]])
|
|
feed.append([["целувам"], ["красива"],["обичам"], ["заминавам"], ["кацам"], ["срещна"], ["видя"], ["целуна"], ["прегърна"]])
|
|
feed.append([["леглото"],["града"], ["колата"], ["ракия"], ["москвич"], ["летище"], ["самолет"], ["хляб"], ["нива"]])
|
|
'''
|
|
|
|
feed.append([["жена"], ["процесор"], ["Иван"], ["Петър"], ["Ангел"], ["Мария"]])
|
|
|
|
feed.append([["обичам"], ["България"], ["Париж"], ["Microsoft"], ["Италия"], ["Гърция"]])
|
|
feed.append([["целувам"], ["красива"],["обичам"], ["заминавам"], ["кацам"], ["срещна"], ["видя"], ["целуна"], ["прегърна"]])
|
|
feed.append([["леглото"],["града"], ["колата"], ["вода"], ["терминатор"], ["летище"], ["самолет"], ["хляб"], ["нива"]])
|
|
|
|
|
|
|
|
|
|
feed.append([["AMD"], ["процесор"], ["Intel"], ["секс"], ["ускорител"], ["Мария"]])
|
|
|
|
feed.append([["обичам"], ["България"], ["Париж"], ["Франция"], ["Италия"], ["1080"]])
|
|
feed.append([["тест"], ["издание"],["обичам"], ["Microsoft"], ["съюз"], ["система"], ["видя"], ["целуна"], ["прегърна"]])
|
|
feed.append([["летя"],["цена"], ["3080"], ["вода"], ["нов"], ["летище"], ["самолет"], ["хляб"], ["нива"]])
|
|
|
|
feed = []
|
|
'''
|
|
feed.append([["жена"], ["процесор"], ["Иван"], ["Петър"], ["Ангел"], ["Мария"], ["хляб"], ["маса"]])
|
|
#feed.append([["процесор"], ["България"], ["Париж"], ["Франция"], ["Италия"], ["Гърция"]])
|
|
feed.append([["обичам"], ["България"], ["Париж"], ["Microsoft"], ["Италия"], ["Гърция"], ["часовник"], ["кацам"]])
|
|
feed.append([["целувам"], ["красива"],["обичам"], ["заминавам"], ["кацам"], ["срещна"], ["видя"], ["целуна"], ["прегърна"], ["падам"]])
|
|
feed.append([["леглото"],["града"], ["колата"], ["вода"], ["терминатор"], ["летище"], ["самолет"], ["общество"], ["нива"]])
|
|
'''
|
|
feed.append([["жена"], ["стая"], ["Тодор"], ["Терминатор"], ["Ангел"], ["целувам"], ["месо"], ["летя"]])
|
|
|
|
feed.append([["обичам"], ["лягам"], ["София"], ["Иван"], ["Италия"], ["гърди"], ["часовник"], ["кацам"]])
|
|
feed.append([["целувам"], ["красива"],["обичам"], ["победа"], ["летище"], ["крака"], ["мъж"], ["целуна"], ["прегърна"], ["киборг"]])
|
|
feed.append([["леглото"],["град"], ["колата"], ["тенис"], ["терминатор"], ["оргазъм"], ["самолет"], ["общество"], ["любов"]])
|
|
|
|
|
|
|
|
print(len(feed[0]))
|
|
|
|
|
|
|
|
|
|
|
|
ln = 120
|
|
ln_step = 100
|
|
maxln = 200
|
|
bms = 8
|
|
total = ''
|
|
now = datetime.now()
|
|
date_time = now.strftime("%d-%m-%Y_%H-%M-%S")
|
|
fname = "gen-recurse-total-" + date_time + ".txt"
|
|
dir = ''
|
|
|
|
ftotal = open(dir + fname, "wt", encoding='utf-8')
|
|
print(type(feed[0][0]),type(feed[1][0]),type(feed[2][0]),type(feed[3][0]))
|
|
print(type(feed[0][0][0]),type(feed[1][0]),type(feed[2][0]),type(feed[3][0]))
|
|
mix = feed[0][0][0] + " " + feed[1][0][0] + " " + feed[2][0][0] + " " + feed[3][0][0] + endSentence()
|
|
sd = set_seed(random.randint(1,9999))
|
|
par = (mix, sd, ln, bms, 1.2, 2, 40)
|
|
lenmix = len(mix)
|
|
last_context = 70
|
|
|
|
|
|
model_dir = m_model_dir
|
|
tokenizer = GPT2Tokenizer.from_pretrained(model_dir)
|
|
model = TFGPT2LMHeadModel.from_pretrained(model_dir)
|
|
|
|
|
|
ret = advancedSingleRet(tokenizer, model, par)
|
|
print(ret)
|
|
fn = ret.find(mix)
|
|
print("FN=",fn)
|
|
if fn > -1:
|
|
trim = ret[fn+len(mix):]
|
|
print(fn+len(mix))
|
|
ftotal.write("\r\n=======================\r\n"+trim+"\r\n")
|
|
else: trim = ret
|
|
total = trim + endSentenceGeneration(trim)
|
|
ftotal.write("\r\n"+ret[fn:fn+len(mix)] + "\r\n" + "\r\n" + mix + "\r\n=====\r\n")
|
|
ftotal.write("\r\n"+total+"\r\n")
|
|
|
|
|
|
next = total
|
|
start = len(total)
|
|
|
|
|
|
|
|
|
|
to_add = total[-last_context:] + " " + feed[0][1][0] + " за да " + feed[1][1][0] + " понеже " + feed[2][1][0] + " когато " + feed[3][1][0] + endSentence()
|
|
|
|
|
|
|
|
next = to_add
|
|
|
|
new_start = len(to_add)
|
|
|
|
ln+=ln_step
|
|
len_to_add = len(to_add)
|
|
sd = set_seed(random.randint(1,9999))
|
|
temp = 2.0
|
|
par = (next, sd, ln, bms, temp, 2, 40)
|
|
ret = advancedSingleRet(tokenizer,model, par)
|
|
|
|
fn = ret.find(to_add)
|
|
print("FN=",fn)
|
|
if fn > -1:
|
|
trim = ret[fn+len(mix):]
|
|
ftotal.write("\r\n=======\r\n"+trim+"\r\n")
|
|
else: trim = ret
|
|
|
|
total +=ret[new_start:] + endSentenceGeneration(trim)
|
|
print(fn)
|
|
|
|
|
|
print(ret)
|
|
print(total)
|
|
ftotal.write("\r\n"+total+"\r\n")
|
|
|
|
|
|
next = ret[-last_context:]
|
|
pred_len = len(next)
|
|
|
|
to_add = ret[-last_context:] + " " +feed[0][2][0] + " към " + feed[1][2][0] + " защото " + feed[2][2][0] + " голям " + feed[3][2][0] + endSentence()
|
|
|
|
|
|
|
|
next = to_add
|
|
|
|
new_start = len(to_add)
|
|
|
|
len_to_add = len(to_add)
|
|
sd = set_seed(random.randint(1,9999))
|
|
par = (next, sd, ln, bms, 1.0, 2, 40)
|
|
|
|
input_ids = tokenizer.encode(next, return_tensors='tf')
|
|
if len(input_ids) > ln: ln = len(input_ids)+lnstep
|
|
|
|
ret = advancedSingleRet(tokenizer,model, par)
|
|
|
|
fn = ret.find(to_add, pred_len)
|
|
print("FN=",fn)
|
|
if fn > -1:
|
|
trim = ret[fn+len(to_add):]
|
|
ftotal.write("\r\n=======\r\n"+trim+"\r\n")
|
|
else: trim = ret
|
|
|
|
print(fn)
|
|
|
|
total +=ret[new_start:] + endSentenceGeneration(trim)
|
|
|
|
|
|
print(ret)
|
|
print(total)
|
|
ftotal.write("\r\n"+total+"\r\n")
|
|
|
|
choose = "към,защото,голям,малък,хубав,и,но,ако,с,без,да,където,когато,никога,ха-ха,не мога,мога,искам,не искам,къде,най-голям,стига,нея,аз,ти,той,тя,ние,вие,те"
|
|
spl = choose.split(',')
|
|
print(spl)
|
|
space = " "
|
|
for k in range(3,8):
|
|
print("K=",k)
|
|
|
|
|
|
rch1 = space + random.choice(spl) + space
|
|
rch2 = space + random.choice(spl) + space
|
|
rch3 = space + random.choice(spl) + space
|
|
|
|
|
|
|
|
|
|
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:] + " "
|
|
|
|
ftotal.write("\r\n:TO_ADD=["+to_add+"]\r\n")
|
|
next = to_add
|
|
|
|
new_start = len(to_add)
|
|
|
|
len_to_add = len(to_add)
|
|
sd = set_seed(random.randint(1,9999))
|
|
|
|
input_ids = tokenizer.encode(next, return_tensors='tf')
|
|
if len(input_ids) > ln: ln = len(input_ids)+lnstep
|
|
else: ln = min(ln, maxln)
|
|
print("LN=",ln)
|
|
par = (next, sd, ln, bms, 1.2, 2, 40)
|
|
ret = advancedSingleRet(tokenizer,model, par)
|
|
|
|
fn = ret.find(to_add, pred_len)
|
|
print("FN=",fn)
|
|
if fn > -1:
|
|
trim = ret[fn+len(to_add):]
|
|
ftotal.write("\r\n=======\r\n"+trim+"\r\n")
|
|
else: trim = ret
|
|
|
|
print(fn)
|
|
|
|
total +=ret[new_start:] + endSentenceGeneration(trim)
|
|
|
|
|
|
print(ret)
|
|
print(total)
|
|
ftotal.write("\r\n"+total+"\r\n")
|
|
ftotal.write(total)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if tokenizer == None: tokenizer = GPT2Tokenizer.from_pretrained(model_dir)
|
|
if model == None: model = TFGPT2LMHeadModel.from_pretrained(model_dir)
|
|
|
|
genRecurseTwo()
|
|
advancedMany(tokenizer)
|
|
|