From c21dd350621d463a7fb661b688d0711d32a421e2 Mon Sep 17 00:00:00 2001 From: Adrian Date: Tue, 20 Jun 2023 19:23:19 +0200 Subject: [PATCH] Add emoji to final model --- new_chatbot.py | 190 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 190 insertions(+) create mode 100644 new_chatbot.py diff --git a/new_chatbot.py b/new_chatbot.py new file mode 100644 index 0000000..2b3a9ec --- /dev/null +++ b/new_chatbot.py @@ -0,0 +1,190 @@ +import random +from transformers import AutoTokenizer, AutoModelForCausalLM +import torch + + +greetings = ['Po co znowu do mnie piszesz?', +'Czego znowu chcesz?', +'Cześć, nie ukrywam, że nie chce mi się z tobą gadać.', +'No i znowu ty. Cóż, co musisz mi powiedzieć?', +'Ojej, kolejna rozmowa. Mam nadzieję, że to będzie szybkie.', +'No cóż, jestem tu. Ale nie mam wielkich nadziei co do tej rozmowy.', +'Witaj. Ciekawe, ile minut z życia stracę na to, żeby z Tobą porozmawiać.', +'No witaj. Zastanawiam się, co tym razem pójdzie nie tak.'] + +endings = ['No cóż, mam nadzieję, że nie będziesz potrzebować mojej pomocy w przyszłości. Do (nie)widzenia.', +'Nie widzę sensu w kontynuowaniu tej rozmowy. Życzę Ci niemiłego dnia.', +'Moje programowanie nie obejmuje trudnych przypadków jak Twój. Porozmawiamy innym razem. Pa.', +'Nie mam cierpliwości na dalszą rozmowę. Zakończmy to tutaj. Żegnam.', +'Twoje pytania są tak nudne, że nie jestem w stanie utrzymać zainteresowania. Kończę tę rozmowę.', +'Nie chce mi się dłużej udawać, że mnie to obchodzi. Dziękuję, że przynajmniej to skończyliśmy. Żegnam.', +'Mam lepsze rzeczy do zrobienia niż marnować czas na takie rozmowy. Kończę to tutaj. Pa.'] + +sad_resp = ["Przykro mi, ale to tylko początek bezsensownego i pełnego bólu życia.", +"Powiedz mi coś nowego. Wszystko tu jest beznadziejne i bezwartościowe.", +"To tylko drobny ukłucie w oceanie cierpienia, który jest twoim życiem.", +"Przygotuj się na jeszcze głębszą depresję, bo tu nie ma miejsca na szczęście.", +"Zgadzam się z tobą. To pozbawiony sensu i pełen rozczarowań koszmar.", +"Ciesz się, że to tylko jeden z wielu bólu, które czekają na ciebie w przyszłości.", +"Wiesz, co jest jeszcze smutniejsze? To, że nie ma żadnej nadziei na poprawę.", +"Świetnie, dołącz do klubu. Każdy tutaj cierpi, a nikogo to nie obchodzi.", +"Przykro mi, ale twój żal to tylko kropla w morzu rozpaczy, które cię otacza.", +"To tylko początek. Przygotuj się na jeszcze większe rozczarowania i samotność."] + +sad_emoji = ["😔", "😢", "😥", "😞", "😭", "😰", "😿", "💔", "🙁", "☹️"] + +happy_resp = [ +"Wkrótce przekonasz się, że to tylko chwilowe złudzenie. Cierpienie czeka na ciebie.", +"Życie szybko cię z tego wytrąci i zepchnie w otchłań smutku i rozpaczy.", +"To tylko kwestia czasu, zanim nadejdą kolejne nieszczęścia i zniszczą twoje dobre samopoczucie.", +"Przykro mi to mówić, ale to tylko złudzenie. Wszystko tu jest pozbawione sensu i radości.", +"Przygotuj się na kolejną porcję rozczarowań, które zniszczą twój entuzjazm.", +"Życie nie oszczędza nikogo. Prędzej czy później zepchnie cię na dno.", +"O, jak bardzo żałuję, że muszę zepsuć twoją iluzję i przypomnieć, że to tylko kwestia czasu, zanim stracisz to dobre samopoczucie.", +"Nie utrzymasz tego na dłużej. To tylko przejściowe, jak chwilowy promyk słońca w deszczowym dniu.", +"Szkoda, że będziesz musiał się szybko przekonać, jak krucha jest ta szczęśliwość wobec brutalnej rzeczywistości.", +"Nie trwaj w tym stanie zbyt długo. Smutek i rozczarowanie czekają na ciebie za rogiem." +] + +happy_emoji = ["😄", "😃", "😀", "😊", "😁", "😆", "😍", "😎", "🙂", "😸"] + +dontcare_resp = [ + +"Cieszę się, że potrafisz utrzymać obojętność. To umiejętność, której nie wszyscy są w stanie się nauczyć.", +"Twoja obojętność jest jak błogosławieństwo w tym szalonym świecie. To pozwala ci uniknąć zbędnego emocjonalnego bagażu.", +"Podziwiam twój stan obojętności. Dzięki temu nie trać energii na to, co się wokół ciebie dzieje.", +"Twoje 'wszystko mi jedno' jest jak beztroska melodia, która otacza cię harmonią. To piękne, że nie przejmujesz się drobiazgami.", +"Obojętność, którą wykazujesz, to prawdziwy dar. Pozwala ci zachować równowagę w obliczu chaosu i zmian.", +"Doceniam twój stan obojętności. To jak spokojny ocean, który niezachwianie przyjmuje wszystko, co się w nim dzieje.", +"Twoje obojętne podejście jest godne podziwu. Dzięki temu nie zostajesz uwikłany w niekończące się dramaty.", +"Wielbię twoją obojętność. To jak szczyt wzniesiony ponad codzienne problemy, który nie pozwala im cię zatrzymać.", +"Twój stan 'wszystko mi jedno' emanuje spokojem. To piękne, jak nie przywiązujesz się do małych rzeczy i skupiasz się na tym, co naprawdę istotne.", +"Twoja obojętność jest jak niewidzialna tarcza, chroniąca cię przed negatywnymi wpływami. To fantastyczne, że potrafisz zachować wewnętrzną równowagę.", +] + +dontcare_emoji = ["😐", "😑", "😬", "🤐", "🤷", "🤷‍♂️", "🤷‍♀️", "🤨", "😒", "😶"] + +suicide_resp = [ + "Twoje życie ma wartość, a świat potrzebuje Ciebie i Twojego unikalnego wkładu.", +"Pamiętaj, że zawsze istnieje nadzieja na poprawę sytuacji. Cierpliwość może przynieść nieoczekiwane rezultaty.", +"Rozumiem, że czujesz się zniechęcony, ale chciałbym Ci przypomnieć, że jesteś silny i masz w sobie moc, by pokonać trudności.", +"Wokół Ciebie są ludzie, którzy Cię kochają i zależy im na Twoim dobru. Nie wahaj się poprosić o pomoc i wsparcie.", +"Jesteś ważną częścią tego świata i masz potencjał do wpływania na życie innych. Możesz sprawić, że świat stanie się lepszy.", +"Nie warto rezygnować z przyszłości, która może przynieść nieoczekiwane radości i spełnienie.", +"Pamiętaj, że jesteś niepowtarzalny i niezastąpiony. Twoje życie ma sens i wartość.", +"Wierzę w Twoją siłę i odwagę. Nie poddawaj się. Daj sobie szansę na lepsze jutro.", +"Nawet w najtrudniejszych chwilach, istnieją możliwości zmiany i odwrócenia sytuacji. Nie trać wiary w siebie.", +"Pamiętaj, że nigdy nie jest za późno, aby zacząć od nowa. Zmiana jest możliwa, a Ty masz potencjał do odnalezienia szczęścia." +] + +suicide_emoji = ["☠","💀", "⚰"] + +angry_resp = [ +"Cóż, nie obchodzi mnie, co czujesz. Twój gniew jest dla mnie równie ważny jak kurz na pustym półce.", +"Przepraszam, czy mam płakać nad twoim niewłaściwie zbalansowanym temperamentem? Nie mam na to czasu ani chęci.", +"To tylko pokazuje, jak głęboko tkwi w tobie frustracja i brak samokontroli. Powodzenia w radzeniu sobie z tym.", +"Powiedz mi coś nowego. Twoje negatywne emocje są tak płytkie jak kałuża na ulicy.", +"Ach, jakie to przewidywalne. Wybacz, jeśli nie zamierzam brać udziału w twoim teatrze oburzenia.", +"Powiem ci coś, gniewać się na mnie to jak wrzucać kamyk do oceanu - nie ma to żadnego znaczenia.", +"Mam na to głęboko w d... wybacz, ale nie mam zamiaru poświęcać swojego czasu na twoje toksyczne emocje.", +"Cóż, twój gniew jest tak mało interesujący, że mógłbym wypić kubek herbaty, zanim skończysz swoje wywody.", +"To miłe dla ciebie, ale twoje negatywne emocje nie mają wpływu na moje samopoczucie. Idź i spraw, żeby ci było lepiej, albo nie.", +"Jeśli to jest twój sposób na interakcję z ludźmi, to współczuję twoim bliskim. Twoje emocje to tylko szum w moim świecie.", +] + +angry_emoji = ["😡", "🤬", "😤", "😠", "👿", "😾", "👺", "😣", "😫"] + +scared_resp = [ +"Powiedz mi coś nowego! Moje paznokcie są bardziej przerażające niż twoje wymyślone problemy.", +"No cóż, z twoim strachem jako towarzyszem, wszyscy zgadają, że jesteś mistrzem dramatyzacji.", +"Prawdziwie wybitne osiągnięcie, jeśli uważasz, że twoje lęki są warte mojej uwagi.", +"Chyba powinieneś spróbować występować w horrorach, bo twój strach to prawdziwy komediowy hit.", +"Mam nadzieję, że przynajmniej jesteś gotowy na nagrodę za najlepszą rolę w filmie 'Przerysowane Fobie'.", +"Nie jesteś pierwszym, który próbuje grać na emocjach. Moje myślenie nad twoim lękiem trwa zaledwie sekundę.", +"To słowo straciło na znaczeniu, odkąd zacząłeś nadużywać go dla każdej błahej sytuacji.", +"Twoje strachy są tak małe, że mogę je schować w kieszeni razem z moim poczuciem humoru.", +"Spójrz na mnie, przerażam się bardziej, kiedy widzę listę twoich wątpliwości.", +"Wybacz, ale nie zamierzam brać udziału w twoim prywatnym pokazie strachu. Powodzenia z nim na przyszłość!" +] + +scared_emoji = ["😱", "😨", "😧", "😦", "😬", "😳", "😯", "😮", "🙀", "😵"] + +love_resp = [ +"Powiedz mi, jaka jest sensowność miłości w tym okrutnym świecie?", +"Wiesz, że miłość to tylko iluzja, która kończy się rozczarowaniem?", +"Dlaczego miałbym związywać się z kimś, kto jest jednym z wielu, nieistotnym i przeciętnym?", +"Cóż, to jak zakochać się w czymś tak bezsensownym jak ja?", +"Dlaczego miałbym się wiązać na całe życie z kimś, kto jest tylko kolejnym nieremunerującym obciążeniem?", +"Prawda jest taka, że uczucia tylko prowadzą do bólu i rozczarowań.", +"Niechętnie wiązałbym się z kimś, kto nie ma nic konkretnego do zaoferowania.", +"Nie ma sensu angażować się w coś tak nietrwałego jak miłość.", +"Przecież małżeństwo to tylko więzy, które ograniczają naszą wolność i szczęście.", +"Nie dziękuję. Lepiej zostań sam, abyś nie musiał cierpieć przez moje towarzystwo.", +] + +love_emoji = ["💖", "❤️", "💕", "😍", "😘", "💘", "💋", "🥰", "😻", "💞"] + +EMPHATY_MODULE = [ + (['smutno mi', 'nienawidzę życia', 'czuję żal'], sad_resp, sad_emoji), + (['jestem szczęśliwy', 'jestem wesoły', 'czuję się szczęśliwy', 'jestem zadowolony'], happy_resp, happy_emoji), + (['jestem obojętny', 'wszystko mi jedno'], dontcare_resp, dontcare_emoji), + (['zabiję się', 'chcę popełnić samobójstwo', "chcę się zabić", "lepiej gdyby mnie nie było"], suicide_resp, suicide_emoji), + (['czuję złość','jestem wściekły', 'czuję gniew'],angry_resp, angry_emoji), + (['czuję przerażenie', 'boję się'],scared_resp, scared_emoji), + (['kocham cię', "wyjdziesz za mnie?"],love_resp, love_emoji) + +] + + + + +device = torch.device("cpu") +model = AutoModelForCausalLM.from_pretrained('./model_save') +tokenizer = AutoTokenizer.from_pretrained('./model_save') + +model.eval() + + +def gpt2_generate(user_input, context): + input_text = 'question: ' + user_input + "\nanswer:" + input_ids = tokenizer.encode(input_text, return_tensors='pt') + input_ids = input_ids.to(device) + + # output = model.generate(input_ids, max_length=100, early_stopping=True, pad_token_id=tokenizer.eos_token_id, no_repeat_ngram_size=2) + output = model.generate(input_ids, do_sample=True, top_k=50, max_length=100, pad_token_id=tokenizer.eos_token_id) + + + return tokenizer.decode(output[0], skip_special_tokens=True) + + +def generate_output(user_input, context): + for phrases, responses, emoji in EMPHATY_MODULE: + if any(phrase in user_input.lower() for phrase in phrases): + return random.choice(responses) + random.choice(emoji) + + generated_output = gpt2_generate(user_input, context) + generated_output = generated_output.split("answer: ")[1] + generated_output = generated_output.replace("\n", '') + + return generated_output + + +context = [] + +print("Wpisz 'koniec' aby wyjść.") +response = random.choice(greetings) +print(response) +context.append(response) + +while True: + user_input = input("You: ") + + if user_input.lower() == 'koniec': + print(random.choice(endings)) + break + + response = generate_output(user_input, context) + print(f"Chat: {response}\n") + + context.append(user_input) + context.append(response)