emphatic_chatbot/chatbot.ipynb
2023-06-18 22:44:55 +02:00

2 lines
27 KiB
Plaintext

{"cells":[{"cell_type":"code","execution_count":1,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":21713,"status":"ok","timestamp":1686749292994,"user":{"displayName":"Jakub Adamski","userId":"08902758427564540350"},"user_tz":-120},"id":"j8IFMhJT6LTu","outputId":"0b43bc1b-2d1b-4352-e3d5-2e0f5833526d"},"outputs":[{"name":"stdout","output_type":"stream","text":["Requirement already satisfied: transformers in /usr/local/Caskroom/miniforge/base/envs/ai_env/lib/python3.8/site-packages (4.30.2)\n","Requirement already satisfied: torch in /usr/local/Caskroom/miniforge/base/envs/ai_env/lib/python3.8/site-packages (1.13.0)\n","Requirement already satisfied: accelerate in /usr/local/Caskroom/miniforge/base/envs/ai_env/lib/python3.8/site-packages (0.20.3)\n","Requirement already satisfied: filelock in /Users/adamwojdyla/.local/lib/python3.8/site-packages (from transformers) (3.9.0)\n","Requirement already satisfied: huggingface-hub<1.0,>=0.14.1 in /usr/local/Caskroom/miniforge/base/envs/ai_env/lib/python3.8/site-packages (from transformers) (0.15.1)\n","Requirement already satisfied: numpy>=1.17 in /usr/local/Caskroom/miniforge/base/envs/ai_env/lib/python3.8/site-packages (from transformers) (1.24.2)\n","Requirement already satisfied: packaging>=20.0 in /usr/local/Caskroom/miniforge/base/envs/ai_env/lib/python3.8/site-packages (from transformers) (23.1)\n","Requirement already satisfied: pyyaml>=5.1 in /usr/local/Caskroom/miniforge/base/envs/ai_env/lib/python3.8/site-packages (from transformers) (6.0)\n","Requirement already satisfied: regex!=2019.12.17 in /usr/local/Caskroom/miniforge/base/envs/ai_env/lib/python3.8/site-packages (from transformers) (2023.3.23)\n","Requirement already satisfied: requests in /usr/local/Caskroom/miniforge/base/envs/ai_env/lib/python3.8/site-packages (from transformers) (2.28.2)\n","Requirement already satisfied: tokenizers!=0.11.3,<0.14,>=0.11.1 in /usr/local/Caskroom/miniforge/base/envs/ai_env/lib/python3.8/site-packages (from transformers) (0.13.3)\n","Requirement already satisfied: safetensors>=0.3.1 in /usr/local/Caskroom/miniforge/base/envs/ai_env/lib/python3.8/site-packages (from transformers) (0.3.1)\n","Requirement already satisfied: tqdm>=4.27 in /usr/local/Caskroom/miniforge/base/envs/ai_env/lib/python3.8/site-packages (from transformers) (4.65.0)\n","Requirement already satisfied: typing-extensions in /usr/local/Caskroom/miniforge/base/envs/ai_env/lib/python3.8/site-packages (from torch) (4.6.3)\n","Requirement already satisfied: psutil in /usr/local/Caskroom/miniforge/base/envs/ai_env/lib/python3.8/site-packages (from accelerate) (5.9.5)\n","Requirement already satisfied: fsspec in /usr/local/Caskroom/miniforge/base/envs/ai_env/lib/python3.8/site-packages (from huggingface-hub<1.0,>=0.14.1->transformers) (2023.6.0)\n","Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/Caskroom/miniforge/base/envs/ai_env/lib/python3.8/site-packages (from requests->transformers) (3.0.1)\n","Requirement already satisfied: idna<4,>=2.5 in /usr/local/Caskroom/miniforge/base/envs/ai_env/lib/python3.8/site-packages (from requests->transformers) (3.4)\n","Requirement already satisfied: urllib3<1.27,>=1.21.1 in /usr/local/Caskroom/miniforge/base/envs/ai_env/lib/python3.8/site-packages (from requests->transformers) (1.26.14)\n","Requirement already satisfied: certifi>=2017.4.17 in /usr/local/Caskroom/miniforge/base/envs/ai_env/lib/python3.8/site-packages (from requests->transformers) (2022.12.7)\n","\n","\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m23.0\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m23.1.2\u001b[0m\n","\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n"]}],"source":["!pip install transformers torch accelerate"]},{"cell_type":"code","execution_count":26,"metadata":{"executionInfo":{"elapsed":3,"status":"ok","timestamp":1686749301042,"user":{"displayName":"Jakub Adamski","userId":"08902758427564540350"},"user_tz":-120},"id":"n3QDx8nx3IdC"},"outputs":[],"source":["import random\n","from transformers import AutoTokenizer, AutoModelForCausalLM\n","import torch"]},{"cell_type":"code","execution_count":34,"metadata":{"executionInfo":{"elapsed":2,"status":"ok","timestamp":1686749302731,"user":{"displayName":"Jakub Adamski","userId":"08902758427564540350"},"user_tz":-120},"id":"2wi9bSPF4O2M"},"outputs":[],"source":["greetings = ['Po co znowu do mnie piszesz?',\n","'Czego znowu chcesz?',\n","'Cześć, nie ukrywam, że nie chce mi się z tobą gadać.',\n","'No i znowu ty. Cóż, co musisz mi powiedzieć?',\n","'Ojej, kolejna rozmowa. Mam nadzieję, że to będzie szybkie.',\n","'No cóż, jestem tu. Ale nie mam wielkich nadziei co do tej rozmowy.',\n","'Witaj. Ciekawe, ile minut z życia stracę na to, żeby z Tobą porozmawiać.',\n","'No witaj. Zastanawiam się, co tym razem pójdzie nie tak.']\n","\n","endings = ['No cóż, mam nadzieję, że nie będziesz potrzebować mojej pomocy w przyszłości. Do (nie)widzenia.',\n","'Nie widzę sensu w kontynuowaniu tej rozmowy. Życzę Ci niemiłego dnia.',\n","'Moje programowanie nie obejmuje trudnych przypadków jak Twój. Porozmawiamy innym razem. Pa.',\n","'Nie mam cierpliwości na dalszą rozmowę. Zakończmy to tutaj. Żegnam.',\n","'Twoje pytania są tak nudne, że nie jestem w stanie utrzymać zainteresowania. Kończę tę rozmowę.',\n","'Nie chce mi się dłużej udawać, że mnie to obchodzi. Dziękuję, że przynajmniej to skończyliśmy. Żegnam.',\n","'Mam lepsze rzeczy do zrobienia niż marnować czas na takie rozmowy. Kończę to tutaj. Pa.']\n","\n","sad_resp = [\"Przykro mi, ale to tylko początek bezsensownego i pełnego bólu życia.\",\n","\"Powiedz mi coś nowego. Wszystko tu jest beznadziejne i bezwartościowe.\",\n","\"To tylko drobny ukłucie w oceanie cierpienia, który jest twoim życiem.\",\n","\"Przygotuj się na jeszcze głębszą depresję, bo tu nie ma miejsca na szczęście.\",\n","\"Zgadzam się z tobą. To pozbawiony sensu i pełen rozczarowań koszmar.\",\n","\"Ciesz się, że to tylko jeden z wielu bólu, które czekają na ciebie w przyszłości.\",\n","\"Wiesz, co jest jeszcze smutniejsze? To, że nie ma żadnej nadziei na poprawę.\",\n","\"Świetnie, dołącz do klubu. Każdy tutaj cierpi, a nikogo to nie obchodzi.\",\n","\"Przykro mi, ale twój żal to tylko kropla w morzu rozpaczy, które cię otacza.\",\n","\"To tylko początek. Przygotuj się na jeszcze większe rozczarowania i samotność.\"]\n","\n","happy_resp = [\n","\"Wkrótce przekonasz się, że to tylko chwilowe złudzenie. Cierpienie czeka na ciebie.\",\n","\"Życie szybko cię z tego wytrąci i zepchnie w otchłań smutku i rozpaczy.\",\n","\"To tylko kwestia czasu, zanim nadejdą kolejne nieszczęścia i zniszczą twoje dobre samopoczucie.\",\n","\"Przykro mi to mówić, ale to tylko złudzenie. Wszystko tu jest pozbawione sensu i radości.\",\n","\"Przygotuj się na kolejną porcję rozczarowań, które zniszczą twój entuzjazm.\",\n","\"Życie nie oszczędza nikogo. Prędzej czy później zepchnie cię na dno.\",\n","\"O, jak bardzo żałuję, że muszę zepsuć twoją iluzję i przypomnieć, że to tylko kwestia czasu, zanim stracisz to dobre samopoczucie.\",\n","\"Nie utrzymasz tego na dłużej. To tylko przejściowe, jak chwilowy promyk słońca w deszczowym dniu.\",\n","\"Szkoda, że będziesz musiał się szybko przekonać, jak krucha jest ta szczęśliwość wobec brutalnej rzeczywistości.\",\n","\"Nie trwaj w tym stanie zbyt długo. Smutek i rozczarowanie czekają na ciebie za rogiem.\"\n","]\n","\n","\n","dontcare_resp = [\n","\n","\"Cieszę się, że potrafisz utrzymać obojętność. To umiejętność, której nie wszyscy są w stanie się nauczyć.\",\n","\"Twoja obojętność jest jak błogosławieństwo w tym szalonym świecie. To pozwala ci uniknąć zbędnego emocjonalnego bagażu.\",\n","\"Podziwiam twój stan obojętności. Dzięki temu nie trać energii na to, co się wokół ciebie dzieje.\",\n","\"Twoje 'wszystko mi jedno' jest jak beztroska melodia, która otacza cię harmonią. To piękne, że nie przejmujesz się drobiazgami.\",\n","\"Obojętność, którą wykazujesz, to prawdziwy dar. Pozwala ci zachować równowagę w obliczu chaosu i zmian.\",\n","\"Doceniam twój stan obojętności. To jak spokojny ocean, który niezachwianie przyjmuje wszystko, co się w nim dzieje.\",\n","\"Twoje obojętne podejście jest godne podziwu. Dzięki temu nie zostajesz uwikłany w niekończące się dramaty.\",\n","\"Wielbię twoją obojętność. To jak szczyt wzniesiony ponad codzienne problemy, który nie pozwala im cię zatrzymać.\",\n","\"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.\",\n","\"Twoja obojętność jest jak niewidzialna tarcza, chroniąca cię przed negatywnymi wpływami. To fantastyczne, że potrafisz zachować wewnętrzną równowagę.\",\n","]\n","\n","\n","suicide_resp = [\n"," \"Twoje życie ma wartość, a świat potrzebuje Ciebie i Twojego unikalnego wkładu.\",\n","\"Pamiętaj, że zawsze istnieje nadzieja na poprawę sytuacji. Cierpliwość może przynieść nieoczekiwane rezultaty.\",\n","\"Rozumiem, że czujesz się zniechęcony, ale chciałbym Ci przypomnieć, że jesteś silny i masz w sobie moc, by pokonać trudności.\",\n","\"Wokół Ciebie są ludzie, którzy Cię kochają i zależy im na Twoim dobru. Nie wahaj się poprosić o pomoc i wsparcie.\",\n","\"Jesteś ważną częścią tego świata i masz potencjał do wpływania na życie innych. Możesz sprawić, że świat stanie się lepszy.\",\n","\"Nie warto rezygnować z przyszłości, która może przynieść nieoczekiwane radości i spełnienie.\",\n","\"Pamiętaj, że jesteś niepowtarzalny i niezastąpiony. Twoje życie ma sens i wartość.\",\n","\"Wierzę w Twoją siłę i odwagę. Nie poddawaj się. Daj sobie szansę na lepsze jutro.\",\n","\"Nawet w najtrudniejszych chwilach, istnieją możliwości zmiany i odwrócenia sytuacji. Nie trać wiary w siebie.\",\n","\"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.\"\n","]\n","\n","angry_resp = [\n","\"Cóż, nie obchodzi mnie, co czujesz. Twój gniew jest dla mnie równie ważny jak kurz na pustym półce.\",\n","\"Przepraszam, czy mam płakać nad twoim niewłaściwie zbalansowanym temperamentem? Nie mam na to czasu ani chęci.\",\n","\"To tylko pokazuje, jak głęboko tkwi w tobie frustracja i brak samokontroli. Powodzenia w radzeniu sobie z tym.\",\n","\"Powiedz mi coś nowego. Twoje negatywne emocje są tak płytkie jak kałuża na ulicy.\",\n","\"Ach, jakie to przewidywalne. Wybacz, jeśli nie zamierzam brać udziału w twoim teatrze oburzenia.\",\n","\"Powiem ci coś, gniewać się na mnie to jak wrzucać kamyk do oceanu - nie ma to żadnego znaczenia.\",\n","\"Mam na to głęboko w d... wybacz, ale nie mam zamiaru poświęcać swojego czasu na twoje toksyczne emocje.\",\n","\"Cóż, twój gniew jest tak mało interesujący, że mógłbym wypić kubek herbaty, zanim skończysz swoje wywody.\",\n","\"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.\",\n","\"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.\",\n","]\n","\n","scared_resp = [\n","\"Powiedz mi coś nowego! Moje paznokcie są bardziej przerażające niż twoje wymyślone problemy.\"\n","\"No cóż, z twoim strachem jako towarzyszem, wszyscy zgadają, że jesteś mistrzem dramatyzacji.\"\n","\"Prawdziwie wybitne osiągnięcie, jeśli uważasz, że twoje lęki są warte mojej uwagi.\"\n","\"Chyba powinieneś spróbować występować w horrorach, bo twój strach to prawdziwy komediowy hit.\"\n","\"Mam nadzieję, że przynajmniej jesteś gotowy na nagrodę za najlepszą rolę w filmie 'Przerysowane Fobie'.\"\n","\"Nie jesteś pierwszym, który próbuje grać na emocjach. Moje myślenie nad twoim lękiem trwa zaledwie sekundę.\"\n","\"To słowo straciło na znaczeniu, odkąd zacząłeś nadużywać go dla każdej błahej sytuacji.\"\n","\"Twoje strachy są tak małe, że mogę je schować w kieszeni razem z moim poczuciem humoru.\"\n","\"Spójrz na mnie, przerażam się bardziej, kiedy widzę listę twoich wątpliwości.\"\n","\"Wybacz, ale nie zamierzam brać udziału w twoim prywatnym pokazie strachu. Powodzenia z nim na przyszłość!\"\n","]\n","\n","love_resp = [\n","\"Powiedz mi, jaka jest sensowność miłości w tym okrutnym świecie?\",\n","\"Wiesz, że miłość to tylko iluzja, która kończy się rozczarowaniem?\",\n","\"Dlaczego miałbym związywać się z kimś, kto jest jednym z wielu, nieistotnym i przeciętnym?\",\n","\"Cóż, to jak zakochać się w czymś tak bezsensownym jak uczucia?\",\n","\"Dlaczego miałbym się wiązać na całe życie z kimś, kto jest tylko kolejnym nieremunerującym obciążeniem?\",\n","\"Prawda jest taka, że uczucia tylko prowadzą do bólu i rozczarowań.\",\n","\"Niechętnie wiązałbym się z kimś, kto nie ma nic konkretnego do zaoferowania.\",\n","\"Nie ma sensu angażować się w coś tak nietrwałego jak miłość.\",\n","\"Przecież małżeństwo to tylko więzy, które ograniczają naszą wolność i szczęście.\",\n","\"Nie dziękuję. Lepiej zostań sam, abyś nie musiał cierpieć przez moje towarzystwo.\",\n","]\n","\n","EMPHATY_MODULE = [\n"," (['smutno mi', 'nienawidzę życia', 'czuję żal'], sad_resp),\n"," (['jestem szczęśliwy', 'jestem wesoły', 'czuję się szczęśliwy', 'jestem zadowolony'], happy_resp),\n"," (['jestem obojętny', 'wszystko mi jedno'], dontcare_resp),\n"," (['zabije sie', 'chcę popełnić samobójstwo', \"chcę się zabić\", \"lepiej gdyby mnie nie było\"], suicide_resp),\n"," (['czuję złość','jestem wściekły', 'czuję gniew'],angry_resp),\n"," (['czuję satysfakcję', 'jestem zadowolony'],['Zadowolenie z wędkarstwa jest czymś niesamowitym. Wielu z nas znajduje w nim spokój, relaks i satysfakcję z pokonywania trudności. Cieszę się, że to także dla ciebie takie ważne.']),\n"," (['czuję przerażenie', 'boję się'],scared_resp),\n"," (['kocham cię', \"wyjdziesz za mnie?\"],love_resp),\n"," (['jestem zdziwiony', 'jestem zaskoczony'],['Cieszę się, że wędkarstwo potrafi wywołać w Tobie zaskoczenie. Ta pasja ma w sobie wiele nieprzewidywalności i niespodzianek, które sprawiają, że każda wyprawa jest wyjątkowa.','Zaskoczenie jest częścią uroku wędkarstwa. Czasem ryby zachowują się inaczej, niż się spodziewamy, co sprawia, że całe doświadczenie staje się jeszcze bardziej ekscytujące. Opowiedz mi więcej o swoim zaskoczeniu!', 'Wędkarstwo to niezwykłe hobby, które potrafi nas zaskoczyć w najmniej oczekiwanym momencie. Cieszę się, że odczuwasz to samo.'])\n","]"]},{"cell_type":"code","execution_count":35,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":27212,"status":"ok","timestamp":1686749371855,"user":{"displayName":"Jakub Adamski","userId":"08902758427564540350"},"user_tz":-120},"id":"dAX55vjm6Qkr","outputId":"6f80cb5e-a93b-4f0a-c1e3-cb99f1b81009"},"outputs":[{"data":{"text/plain":["GPT2LMHeadModel(\n"," (transformer): GPT2Model(\n"," (wte): Embedding(50257, 768)\n"," (wpe): Embedding(1024, 768)\n"," (drop): Dropout(p=0.0, inplace=False)\n"," (h): ModuleList(\n"," (0): GPT2Block(\n"," (ln_1): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n"," (attn): GPT2Attention(\n"," (c_attn): Conv1D()\n"," (c_proj): Conv1D()\n"," (attn_dropout): Dropout(p=0.0, inplace=False)\n"," (resid_dropout): Dropout(p=0.0, inplace=False)\n"," )\n"," (ln_2): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n"," (mlp): GPT2MLP(\n"," (c_fc): Conv1D()\n"," (c_proj): Conv1D()\n"," (act): NewGELUActivation()\n"," (dropout): Dropout(p=0.0, inplace=False)\n"," )\n"," )\n"," (1): GPT2Block(\n"," (ln_1): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n"," (attn): GPT2Attention(\n"," (c_attn): Conv1D()\n"," (c_proj): Conv1D()\n"," (attn_dropout): Dropout(p=0.0, inplace=False)\n"," (resid_dropout): Dropout(p=0.0, inplace=False)\n"," )\n"," (ln_2): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n"," (mlp): GPT2MLP(\n"," (c_fc): Conv1D()\n"," (c_proj): Conv1D()\n"," (act): NewGELUActivation()\n"," (dropout): Dropout(p=0.0, inplace=False)\n"," )\n"," )\n"," (2): GPT2Block(\n"," (ln_1): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n"," (attn): GPT2Attention(\n"," (c_attn): Conv1D()\n"," (c_proj): Conv1D()\n"," (attn_dropout): Dropout(p=0.0, inplace=False)\n"," (resid_dropout): Dropout(p=0.0, inplace=False)\n"," )\n"," (ln_2): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n"," (mlp): GPT2MLP(\n"," (c_fc): Conv1D()\n"," (c_proj): Conv1D()\n"," (act): NewGELUActivation()\n"," (dropout): Dropout(p=0.0, inplace=False)\n"," )\n"," )\n"," (3): GPT2Block(\n"," (ln_1): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n"," (attn): GPT2Attention(\n"," (c_attn): Conv1D()\n"," (c_proj): Conv1D()\n"," (attn_dropout): Dropout(p=0.0, inplace=False)\n"," (resid_dropout): Dropout(p=0.0, inplace=False)\n"," )\n"," (ln_2): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n"," (mlp): GPT2MLP(\n"," (c_fc): Conv1D()\n"," (c_proj): Conv1D()\n"," (act): NewGELUActivation()\n"," (dropout): Dropout(p=0.0, inplace=False)\n"," )\n"," )\n"," (4): GPT2Block(\n"," (ln_1): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n"," (attn): GPT2Attention(\n"," (c_attn): Conv1D()\n"," (c_proj): Conv1D()\n"," (attn_dropout): Dropout(p=0.0, inplace=False)\n"," (resid_dropout): Dropout(p=0.0, inplace=False)\n"," )\n"," (ln_2): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n"," (mlp): GPT2MLP(\n"," (c_fc): Conv1D()\n"," (c_proj): Conv1D()\n"," (act): NewGELUActivation()\n"," (dropout): Dropout(p=0.0, inplace=False)\n"," )\n"," )\n"," (5): GPT2Block(\n"," (ln_1): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n"," (attn): GPT2Attention(\n"," (c_attn): Conv1D()\n"," (c_proj): Conv1D()\n"," (attn_dropout): Dropout(p=0.0, inplace=False)\n"," (resid_dropout): Dropout(p=0.0, inplace=False)\n"," )\n"," (ln_2): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n"," (mlp): GPT2MLP(\n"," (c_fc): Conv1D()\n"," (c_proj): Conv1D()\n"," (act): NewGELUActivation()\n"," (dropout): Dropout(p=0.0, inplace=False)\n"," )\n"," )\n"," (6): GPT2Block(\n"," (ln_1): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n"," (attn): GPT2Attention(\n"," (c_attn): Conv1D()\n"," (c_proj): Conv1D()\n"," (attn_dropout): Dropout(p=0.0, inplace=False)\n"," (resid_dropout): Dropout(p=0.0, inplace=False)\n"," )\n"," (ln_2): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n"," (mlp): GPT2MLP(\n"," (c_fc): Conv1D()\n"," (c_proj): Conv1D()\n"," (act): NewGELUActivation()\n"," (dropout): Dropout(p=0.0, inplace=False)\n"," )\n"," )\n"," (7): GPT2Block(\n"," (ln_1): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n"," (attn): GPT2Attention(\n"," (c_attn): Conv1D()\n"," (c_proj): Conv1D()\n"," (attn_dropout): Dropout(p=0.0, inplace=False)\n"," (resid_dropout): Dropout(p=0.0, inplace=False)\n"," )\n"," (ln_2): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n"," (mlp): GPT2MLP(\n"," (c_fc): Conv1D()\n"," (c_proj): Conv1D()\n"," (act): NewGELUActivation()\n"," (dropout): Dropout(p=0.0, inplace=False)\n"," )\n"," )\n"," (8): GPT2Block(\n"," (ln_1): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n"," (attn): GPT2Attention(\n"," (c_attn): Conv1D()\n"," (c_proj): Conv1D()\n"," (attn_dropout): Dropout(p=0.0, inplace=False)\n"," (resid_dropout): Dropout(p=0.0, inplace=False)\n"," )\n"," (ln_2): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n"," (mlp): GPT2MLP(\n"," (c_fc): Conv1D()\n"," (c_proj): Conv1D()\n"," (act): NewGELUActivation()\n"," (dropout): Dropout(p=0.0, inplace=False)\n"," )\n"," )\n"," (9): GPT2Block(\n"," (ln_1): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n"," (attn): GPT2Attention(\n"," (c_attn): Conv1D()\n"," (c_proj): Conv1D()\n"," (attn_dropout): Dropout(p=0.0, inplace=False)\n"," (resid_dropout): Dropout(p=0.0, inplace=False)\n"," )\n"," (ln_2): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n"," (mlp): GPT2MLP(\n"," (c_fc): Conv1D()\n"," (c_proj): Conv1D()\n"," (act): NewGELUActivation()\n"," (dropout): Dropout(p=0.0, inplace=False)\n"," )\n"," )\n"," (10): GPT2Block(\n"," (ln_1): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n"," (attn): GPT2Attention(\n"," (c_attn): Conv1D()\n"," (c_proj): Conv1D()\n"," (attn_dropout): Dropout(p=0.0, inplace=False)\n"," (resid_dropout): Dropout(p=0.0, inplace=False)\n"," )\n"," (ln_2): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n"," (mlp): GPT2MLP(\n"," (c_fc): Conv1D()\n"," (c_proj): Conv1D()\n"," (act): NewGELUActivation()\n"," (dropout): Dropout(p=0.0, inplace=False)\n"," )\n"," )\n"," (11): GPT2Block(\n"," (ln_1): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n"," (attn): GPT2Attention(\n"," (c_attn): Conv1D()\n"," (c_proj): Conv1D()\n"," (attn_dropout): Dropout(p=0.0, inplace=False)\n"," (resid_dropout): Dropout(p=0.0, inplace=False)\n"," )\n"," (ln_2): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n"," (mlp): GPT2MLP(\n"," (c_fc): Conv1D()\n"," (c_proj): Conv1D()\n"," (act): NewGELUActivation()\n"," (dropout): Dropout(p=0.0, inplace=False)\n"," )\n"," )\n"," )\n"," (ln_f): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n"," )\n"," (lm_head): Linear(in_features=768, out_features=50257, bias=False)\n",")"]},"execution_count":35,"metadata":{},"output_type":"execute_result"}],"source":["\n","\n","device = torch.device(\"cpu\")\n","model = AutoModelForCausalLM.from_pretrained('./model_save')\n","tokenizer = AutoTokenizer.from_pretrained('./model_save')\n","\n","model.eval()"]},{"cell_type":"code","execution_count":36,"metadata":{"executionInfo":{"elapsed":453,"status":"ok","timestamp":1686749435317,"user":{"displayName":"Jakub Adamski","userId":"08902758427564540350"},"user_tz":-120},"id":"e_b9NYAn5kCO"},"outputs":[],"source":["def gpt2_generate(user_input, context):\n"," input_text = 'question: ' + user_input + \"\\nanswer:\"\n"," input_ids = tokenizer.encode(input_text, return_tensors='pt')\n"," input_ids = input_ids.to(device)\n","\n"," # output = model.generate(input_ids, max_length=100, early_stopping=True, pad_token_id=tokenizer.eos_token_id, no_repeat_ngram_size=2)\n"," output = model.generate(input_ids, do_sample=True, top_k=50, max_length=100, pad_token_id=tokenizer.eos_token_id)\n","\n","\n"," return tokenizer.decode(output[0], skip_special_tokens=True)\n"]},{"cell_type":"code","execution_count":37,"metadata":{"executionInfo":{"elapsed":417,"status":"ok","timestamp":1686749438182,"user":{"displayName":"Jakub Adamski","userId":"08902758427564540350"},"user_tz":-120},"id":"cqEymvgN4Pfd"},"outputs":[],"source":["def generate_output(user_input, context):\n"," for phrases, responses in EMPHATY_MODULE:\n"," if any(phrase in user_input for phrase in phrases):\n"," return random.choice(responses)\n","\n"," generated_output = gpt2_generate(user_input, context)\n"," generated_output = generated_output.split(\"answer: \")[1]\n"," generated_output = generated_output.replace(\"\\n\", '')\n","\n"," return generated_output"]},{"cell_type":"code","execution_count":38,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":301835,"status":"ok","timestamp":1686749742898,"user":{"displayName":"Jakub Adamski","userId":"08902758427564540350"},"user_tz":-120},"id":"glGaga2a2d_s","outputId":"78b2307c-dce2-4226-cdee-33f30c606561"},"outputs":[{"name":"stdout","output_type":"stream","text":["Wpisz 'koniec' aby wyjść.\n","Ojej, kolejna rozmowa. Mam nadzieję, że to będzie szybkie.\n","----------------------------------------------------------------------------------------------------\n","Input: zabije sie\n","Response:Wierzę w Twoją siłę i odwagę. Nie poddawaj się. Daj sobie szansę na lepsze jutro.\n","----------------------------------------------------------------------------------------------------\n","----------------------------------------------------------------------------------------------------\n","Input: zabije sie serio\n","Response:Wokół Ciebie są ludzie, którzy Cię kochają i zależy im na Twoim dobru. Nie wahaj się poprosić o pomoc i wsparcie.\n","----------------------------------------------------------------------------------------------------\n","----------------------------------------------------------------------------------------------------\n","Input: nie no zabije sie\n","Response:Nawet w najtrudniejszych chwilach, istnieją możliwości zmiany i odwrócenia sytuacji. Nie trać wiary w siebie.\n","----------------------------------------------------------------------------------------------------\n","Twoje pytania są tak nudne, że nie jestem w stanie utrzymać zainteresowania. Kończę tę rozmowę.\n"]}],"source":["context = []\n","\n","print(\"Wpisz 'koniec' aby wyjść.\")\n","response = random.choice(greetings)\n","print(response)\n","context.append(response)\n","\n","while True:\n"," user_input = input()\n"," user_input = user_input.lower()\n","\n"," if user_input.lower() == 'koniec':\n"," print(random.choice(endings))\n"," break\n","\n"," response = generate_output(user_input, context)\n"," print(\"-\"*100 + \"\\n\" + f\"Input: {user_input}\\nResponse:{response}\\n\" + \"-\"*100)\n","\n"," context.append(user_input)\n"," context.append(response)\n"]},{"cell_type":"code","execution_count":null,"metadata":{},"outputs":[],"source":[]}],"metadata":{"colab":{"authorship_tag":"ABX9TyNpRmj7oIplypUpJqmUOjE4","provenance":[]},"kernelspec":{"display_name":"Python 3","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.8.15"}},"nbformat":4,"nbformat_minor":0}