Chatbot z Pytonem : Wizualizacja i modyfikacja formatu danych JSON firmy Rasa

https://szkolazpieklarodem.pl/

W tej sekcji wykorzystamy narzędzie o nazwie Rasa NLU trainer do wizualizacji naszych danych. (tj. dane, które stworzyliśmy do tej pory). To narzędzie pomaga nam również w opisywania danych. Jeśli pamiętasz, kiedy interfejs Dialogflow został wyjaśniony w rozdziale 3, zdefiniowanie jednostek, ich nazw i typów było niezwykle łatwe. Zrobimy to samo, korzystając z narzędzia typu open source. Trener Rasa NLU to bardzo ładne i przydatne narzędzie do edycji naszych danych treningowych bezpośrednio z poziomu naszej przeglądarki. Obsługa danych JSON jest trudna i może prowadzić do błędów. Dzięki temu poręcznemu narzędziu możemy łatwo dodać więcej przykładów do naszych danych treningowych lub edytować już istniejące. Oszczędza to dużo czasu na ręcznym dodawaniu adnotacji do danych. rasa-nlu-trainer jest narzędziem opartym na JavaScript, więc musielibyśmy zainstalować node.js, aby uruchomić to narzędzie w naszym systemie. Wykonanie tej czynności nie zajmie więcej niż 5 minut. Skonfigurujmy to, wykonując następujące kroki:

  1. Przejdź do https://www.npmjs.com/get-npm i pobierz plik node.js.
  2. Zainstaluj pakiet w swoim systemie zgodnie z instrukcjami na stronie internetowej. Po zainstalowaniu przejdź do nowego terminala/interfejsu wiersza poleceń w swoim systemie i wpisz „npm”, aby sprawdzić, czy działa. Zainstalowałem wersję LTS 8.11.4. Po zainstalowaniu uruchom następującą komendę, aby zainstalować rasa-nlu-trainer:

sudo npm i -g rasa-nlu-trainer

Po pomyślnej instalacji tego polecenia zobaczysz dzienniki podobne do następujących:

[fsevents] Success: “/usr/local/lib/node_modules/rasa-nlu-trainer/

node_modules/fsevents/lib/binding/Release/node-v57-darwin-x64/fse.node” already installed

Pass –update-binary to reinstall or –build-from-source to recompile

npm WARN slick-carousel@1.8.1 requires a peer of jquery@>=1.8.0 but none is installed. You must install peer dependencies yourself.

+ rasa-nlu-trainer@0.2.7

added 492 packages in 10.14s

Nawet jeśli Twoja wiadomość nie wygląda tak, o ile nie powoduje żadnych błędów, nie martw się. Za chwilę dowiemy się, czy nasz rasa-nlu-trainer został pomyślnie zainstalowany i działa dobrze. Przejdźmy do naszego folderu danych, który utworzyliśmy wcześniej w naszym terminalu i uruchommy następującą komendę:

train rasa-nlu

Wpisanie tego polecenia uruchomi lokalny serwer na porcie 55703 i otworzy go w domyślnej przeglądarce. Będzie to wyglądać mniej więcej tak, jak na rysunku

Jak widać, wszystkie nasze istniejące dane z pliku data.json są wybierane przez to niesamowite narzędzie do usunięcia lub edycji. Z tego miejsca możemy także dodawać nowe przykłady i będziemy stale rozszerzać plik data.json. Sugerowałbym dodanie większej ilości danych do swoich zamiarów w celu lepszego szkolenia modelu. Możesz pobrać ten plik data.json w kodzie źródłowym ZIP lub w repozytorium dostarczonym przez wydawcę, jeśli próbujesz zbudować tego samego chatbota, co opisano w tym rozdziale. Tak jak w Rozdziale 3 wybraliśmy encje w wyrażeniach, aby je zdefiniować przy użyciu Dialogflow, możemy zrobić to samo za pomocą tego narzędzia i nadać nazwy naszym encjam do późniejszej analizy. Zatem kliknij przycisk przełączania przykładu, wybierz tekst i dodaj obiekt, nadając mu nazwę. Dodałem od pięciu do sześciu przykładów wypowiedzi w każdej ze zdefiniowanych przeze mnie intencji. Im więcej przykładów dodamy, tym lepiej będzie można wytrenować model i zapewnić większą dokładność. Jeśli teraz spojrzysz na plik data.json, automatycznie dodanych zostanie do niego więcej przykładów. Zatem śmiało zweryfikuj plik data.json, aby sprawdzić, czy masz wszystkie dodane przykłady z interfejsu użytkownika rasa-nlu-trainer.

W pliku data.json zauważysz także, że encje, które mogłeś zdefiniować za pomocą interfejsu użytkownika rasa-nlu-trainer, są przechwytywane na liście common_examples jako posiadające klucze początku i końca, które informują model, w którym momencie dana wartość encji zaczyna się w przykładzie i kiedy się kończy. Ten sam obiekt słownika przedstawia także wartość encji i nazwę zdefiniowanej przez nas encji. W naszym przykładzie wygląda to następująco:

{

“text”: “19-01”,

“intent”: “dob_intent”,

“entities”: [

{

“start”: 0,

“end”: 2,

“value”: “19”,

“entity”: “DD”

},

{

“start”: 3,

“end”: 5,

“value”: “01”,

“entity”: “MM”

}

]

}

Per-āa : Skąd wziąłem ten pachołek drogowy?

https://szkolazpieklarodem.pl/

Większość ludzi w pewnym momencie wypiła kilka drinków za dużo na przyjęciu bożonarodzeniowym lub noworocznym i ma luki w pamięci tego, co się wydarzyło. Udowodnienie, że nic nie jest nowe, pewien facet z dziewiętnastej dynastii Deir el Medina prawdopodobnie miał więcej niż przeciętny problem ze wspomnieniami. Paneb miał reputację kobieciarza, przestępcy i pijaka. Na podstawie serii oskarżeń prawnych napisanych przez jednego z jego wrogów historycy mogą wypełnić dla niego niektóre luki związane z alkoholem. Pewnego razu po kilku piwach z przyjaciółmi Paneb wdał się w kłótnię ze swoim starszym adoptowanym ojcem Neferhotepem, który zakończył się pogonią Paneba za domem Neferhotepa:

Zarzut dotyczący biegania za… Neferhotepem, chociaż to on go wychował. I on [Neferhotep] zamknął przed nim swoje drzwi, a on [Paneb] wziął kamień i wyłamał mu drzwi. I sprawili, że mężczyźni pilnowali Neferhotepa, ponieważ [Paneb] powiedział: „Zabiję go w nocy”.

Raporty wskazują również, że Paneb przeraził wielu swoich współpracowników na budowie królewskich grobów. Pod koniec długiego dnia, gdy pusty sarkofag właśnie włożono do grobowca, Paneb upił się i usiadł na nim, śpiewając. Chociaż bez wątpienia zachęcali go jego koledzy, działania Paneba byłyby postrzegane jako najgorsze świętokradztwo. Gdyby tylko jego pieśń była znana! Może trochę o wyścigach rydwanów?

Chatbot z Pytonem : Tworzenie danych dla modelu w formacie JSON

https://szkolazpieklarodem.pl/

Format JSON danych, którego oczekuje Rasa NLU, ma obiekt najwyższego poziomu o nazwie rasa_nlu_data, z kluczami common_examples, Entity_synonyms i regex_features. Najważniejszym, z którym będziemy pracować, są przykłady wspólne. Poniżej znajduje się szkieletowa forma wyglądu naszych danych JSON:

{

“rasa_nlu_data”: {

“common_examples”: [],

“regex_features” : [],

“entity_synonyms”: []

}

}

Klucz common_examples w naszych danych JSON jest centralnym miejscem, które będzie używane do uczenia naszego modelu. Wszystkie nasze przykłady szkoleniowe będziemy dodawać w tablicy common_examples.

regex_features to narzędzie pomagające klasyfikatorowi intencji rozpoznawać jednostki lub intencje i poprawiać dokładność klasyfikacji intencji. Zacznijmy pisać nasz plik JSON. Nazwijmy to data.json.

  1. Utwórz folder o nazwie horoskop_bot.
  2. Zmień bieżący katalog roboczy na horoskop_bot.
  3. Uruchom notatnik Jupyter #jupyter notatnik.
  4. Utwórz nowy folder o nazwie dane.
  5. Kliknij folder danych i przejdź do „Plik tekstowy” w menu Nowy w

Notatnik Jupytera.

  1. Kliknij na nazwę utworzonego pliku i zmień nazwę na data.json i wpisz swoje intencje dla swoich chatbotów. W krokach 5 i 6 możesz swobodnie korzystać z ulubionych edytorów, takich jak Sublime, Notepad ++, PyCharm itp., Aby pracować z plikiem JSON. Oto jak wygląda mój plik data.json w folderze danych:

{

“rasa_nlu_data”: {

“common_examples”: [

{

“text”: “Hello”,

“intent”: “greeting”,

“entities”: []

},

{

“text”: “I want to know my Horoscope”,

“intent”: “get_horoscope”,

“entities”: []

},

{

“text”: “Can you please tell me my horoscope?”,

“intent”: “get_horoscope”,

“entities”: []

},

{

“text”: “Please subscribe me”,

“intent”: “subscription”

}

],

“regex_features”: [],

“entity_synonyms”: []

}

}

Jak widać, przygotowywanie tego ręcznie wygląda bardzo nieporadnie. Na pewno pamiętasz miłą i łatwą metodę, którą mieliśmy w Dialogflow. Sprawdźmy więc fajne i ciekawe narzędzie do tworzenia danych treningowych w formacie, jakiego oczekuje Rasa. Został stworzony przez Polgára Andrása i całkiem nieźle nadaje się do sprawdzania i modyfikowania istniejących danych, które przygotowaliśmy wcześniej. To narzędzie pozwala zaoszczędzić dużo czasu, jeśli pracujesz nad małym projektem, w którym musisz ręcznie tworzyć dane. Zawsze dobrze jest wizualizować dane w dowolnej tworzonej aplikacji, która jest całkowicie oparta na danych. Zatem po prostu zapisz wcześniej utworzony plik data.json, dopóki nie rozszerzymy gromadzenia danych lepszą metodą.

Per-āa : Warzenie piwa

https://szkolazpieklarodem.pl/

Żadna impreza nie jest kompletna bez baru, a starożytni Egipcjanie uwielbiali swój alkohol. Ich przyjęcia byłyby obfite w wino i piwo. Piwo było podstawą egipskiej diety, a nawet wchodziło w skład państwowych zarobków i racji żywnościowych. Piwo robiono podobnie jak chleb. Było nieco gęstsze niż znane dzisiaj piwo lub ale i mogło zawierać szereg zanieczyszczeń. Egipskie piwo robiono z czerstwego lub częściowo upieczonego chleba jęczmiennego lub płaskurki (ciasto bogate w drożdże), które umieszczano na sicie nad słoikiem. Chleb polano wodą, aż się rozpuścił i wpadł do słoika, gdzie pozostawiono go do fermentacji. Po sfermentowaniu płyn był następnie dekantowany do słoików z amforami do przechowywania lub transportu. Powstałe piwo nie było nadmiernie alkoholowe, jeśli było pite z umiarem, ale starożytni Egipcjanie mieli o jedno za dużo. Dla bardziej żądnych przygód piwoszy, do podstawowej mieszanki dodano aromaty, w tym daktyle, przyprawy lub miód. Cukier w daktylach i miodzie przyspieszył fermentację. Gdy Towarzystwo Eksploracji Egiptu przygotowało porcje według starożytnej receptury, uzyskany napój okazał się bardzo słodki, ale nie nieprzyjemny.

Chatbot z Pytonem : Przygotowanie danych dla Chatbota

https://szkolazpieklarodem.pl/

Rasa NLU ma wiele sposobów definiowania intencji i ich podmiotów na naszych niestandardowych danych. Obsługuje dane w przecenach, w formacie JSON jako pojedynczy plik lub jako katalog zawierający wiele plików. Najpierw omówimy najtrudniejszą, ale wysoce skalowalną metodę. Tworzenie plików JSON jest trudne ręcznie, ale programowo jest bardzo łatwe i skalowalne.

Per-āa : Pieczenie po Hovisie

https://szkolazpieklarodem.pl/

Większość przedstawień imprez przedstawia również gospodarzy serwujących gościom różne pieczywo i ciasta, w tym ciastka miodowe i rodzaj bochenka owocowego. Chleb był podstawą egipskiej diety i wszyscy, bogaci czy biedni, jedli go dużo. Chleb znajduje się również na wszystkich tablicach i listach ofiarnych, pokazując, że był to pokarm godny bogów. Istniały różne rodzaje chleba, w tym odmiany z pszenicy płaskurki i jęczmienia. Grobowiec Tutanchamona zawierał nawet bochenki owocowe zawierające jagody z rośliny Ciernia Chrystusa. Egipcjanie wypiekali różne rodzaje chleba w różnych kształtach (powszechne były trójkąty i owale), aby ułatwić identyfikację. Niestety, dokładne znaczenie tych kształtów nie jest dziś znane. Aby ułatwić mielenie ziarna na mąkę, piekarze lub kobiety w gospodarstwie domowym mogli dodawać do swoich kamieni mielonych kamień (kwarcyt lub granit) lub piasek, który działał jak ścierniwo i produkował mąkę o połowę szybciej. Bardzo produktywne, ale te wtrącenia w chlebie spowodowały nadmierne zużycie zębów Egipcjan.

Chatbot z Pytonem : Skrypt rozmowy pomiędzy botem horoskopowym a użytkownikiem

https://szkolazpieklarodem.pl/

Stwórzmy możliwy scenariusz rozmowy pomiędzy naszym chatbotem a użytkownikiem. Jak wspomniano w pierwszym rozdziale, pisanie skryptu konwersacji przypomina przygotowanie dokumentu wymagań dotyczących oprogramowania przed jego zbudowaniem. Może się to później zmienić, ale daje ogólny obraz tego, co będzie się działo w ostatecznej aplikacji chatbota. Tak wygląda nasza rozmowa pomiędzy użytkownikiem a botem:

Użytkownik: Witam

Horoskop Bot: Witam! Mam nadzieję, że sobie radzisz.

Użytkownik: Chcę poznać swój horoskop.

Horoskop Bot: Jasne, czy mogę poznać twój znak horoskopu?

Użytkownik: Capricorm

Horoskop Bot: Przepraszam, czy miałeś na myśli Koziorożca?

Użytkownik: Tak.

Horoskop Bot: W porządku, oto twój horoskop na dzisiaj.

Jest szansa, że będziesz dzisiaj pełen optymizmu i pozytywnego nastawienia. Udostępnij to

energii z innymi, którzy czują się mniej niż zadowoleni. Twoja postawa może

wywierają głęboki wpływ na przyjaciół, partnerów, małżonka i dzieci.

Sąsiedzi i dalsza rodzina mogą podsłuchać twojego ducha bez tego

nawet zdajesz sobie z tego sprawę. Jeśli ktoś jest zraniony lub zły, dodaj mu otuchy.

Wszystko w końcu się ułoży.

Horoskop Bot: Czy chcesz subskrybować codzienne aktualizacje?

Jeśli tak, po prostu powiedz subskrybuj.

Użytkownik: Tak, proszę o subskrypcję.

Horoskop Bot: Świetnie, subskrybujesz teraz. Miłego dnia.

Ta rozmowa ma na celu jedynie dokładne wyobrażenie sobie, jak będzie wyglądać nasza rozmowa z chatbotem. Możemy, ale nie musimy, chcieć zmienić przebieg rozmowy w zależności od naszych potrzeb. Możemy przeszkolić nasz model chatbota, aby przygotował prawidłową odpowiedź, zamiast pisać kilka instrukcji if…else.

Per-āa : Przeglądanie menu imprezy

https://szkolazpieklarodem.pl/

Jedzenie było główną częścią wymyślnych bankietów i na szczęście nadal istnieje wiele informacji. Obrazy boskich stołów ofiarnych pokazują, jakie jedzenie Egipcjanie uważali za wystarczająco dobre dla bogów. W połączeniu z jedzeniem pozostawionym w grobowcach i opisanym w listach ofert, pojawia się szczegółowa lista jedzenia, które mogło znaleźć się w menu na eleganckiej imprezie. Chociaż dla reszty społeczeństwa był to luksus, mięso stanowiło główną część elitarnego posiłku. Niektóre cięcia byłyby niesmaczne dla dzisiejszych gości; starożytni Egipcjanie nie chcieli marnować żadnej części zwierzęcia. Jednymi z najpopularniejszych mięs był wół (w tym głowa, język i wnętrzności), gęś, gołębie i ryby. Mięsowi towarzyszyły

* Warzywa, w tym ogórek, cebula i sałata

* Rośliny strączkowe i orzechy, w tym soczewica, ciecierzyca, nasiona arbuza i migdały

* Zioła, w tym kolendra i czosnek

* Owoce, w tym figi, rodzynki, pestki winogron, orzech palmowy (rodzaj owoców z drzewa palmowego), daktyle i liście granatu (i bez wątpienia także reszta owoców).

Chatbot z Pytonem : Budowa bota horoskopowego

https://szkolazpieklarodem.pl/

W tym przykładzie zbudowania chatbota całkowicie samodzielnie przy użyciu biblioteki open source Rasa NLU, zbudujemy bota horoskopu. Ustalmy zakres tego chatbota i zobaczmy, co robi i może.

  • Bot Horoskop powinien być w stanie zrozumieć pozdrowienia i odpowiedzieć powitaniem.
  • Bot powinien być w stanie zrozumieć, czy użytkownik prosi o horoskop.
  • Bot powinien mieć możliwość zapytania użytkownika o znak horoskopu, jeśli użytkownik go nie poda.
  • Jeśli użytkownik nie zna swojego znaku horoskopu, bot powinien zapytać użytkownika o datę urodzenia (DOB) i go znaleźć.
  • Bot powinien zasubskrybować/wypisać użytkownika, aby otrzymywać dziennik horoskopu.
  • Bot powinien uczyć się na podstawie istniejących odpowiedzi, aby sformułować nową odpowiedź.
  • Bot powinien być w stanie poradzić sobie z błędami ortograficznymi popełnionymi przez użytkownika.

To, co ma tutaj zrobić nasz bot, jest całkiem proste. Możliwe intencje

  • Intencja powitania: użytkownik rozpoczynający od powitania
  • Uzyskaj zamiar horoskopu: użytkownik pytający o horoskop
  • Intencja horoskopu użytkownika: Użytkownik przedstawiający znak horoskopu
  • Zamiar DOB użytkownika: Użytkownik informuje o swoim DOB
  • Intencja subskrypcji: użytkownik proszący o subskrypcję

W zależności od sposobu, w jaki projektujesz bota i piszesz kod, możesz potrzebować wszystkich powyższych intencji lub nie, lub może być konieczne zdefiniowanie dodatkowych intencji, aby uwzględnić wszystkie przypadki użycia, które chcemy, aby robił nasz bot. W miarę postępów w tym rozdziale spróbujemy zbudować bota, który wykona podstawowe zadanie polegające na podaniu horoskopu; później w ramach ćwiczenia możemy dodać do niego więcej przypadków użycia. Cóż, w dużej mierze to samo robiliśmy do tej pory, aby rozpoznać możliwe intencje na podstawie prostej możliwej rozmowy między botem a użytkownikiem.

Per-āa : Taniec

https://szkolazpieklarodem.pl/

Egipcjanin nie wskoczyłby na stół i przetańczył całą noc do melodii imprezowego zespołu. Muzyce zazwyczaj towarzyszyła grupa tancerzy, którzy, podobnie jak muzycy, zostali na tę okazję wynajęci. Taniec był bardzo erotyczną rozrywką. Wykonawcy byli zwykle nadzy, z wyjątkiem wyszukanego kołnierza i ozdobnego pasa lub przepaski na biodra. Niektórzy tancerze są pokazani na rysunkach w grobowcach ze stożkami perfum na głowach, co wskazuje, że również ładnie pachniali i dawali publiczności zapach perfum, gdy przemykali. Wielu tancerzy używało swoich włosów jako narzędzia, przesuwając je z boku na bok; niektóre obrazy grobowców pokazują nawet ciężarki przywiązane do włosów, zapewniając, że poruszają się we właściwy sposób.