Chatbot z Pytonem : Zrozumienie koncepcji Rasy

https://szkolazpieklarodem.pl/

Bardzo ważne jest, abyśmy zrozumieli kilka konkretnych koncepcji związanych z Rasą, zanim faktycznie spróbujemy w pełni wykorzystać je w kodzie. W tej sekcji poznamy kilka ważnych i bardzo przydatnych koncepcji Rasa NLU. Upewnij się, że całkowicie rozumiesz te koncepcje, ponieważ będziemy je wykorzystywać podczas tworzenia naszego pierwszego wewnętrznego chatbota w formacie pliku domeny Rasa. Jeśli nie zrozumiemy, co oznaczają te pojęcia, trudno będzie nam zrobić kolejny krok.

 

Per-āa : Trzymaj szczękę

https://szkolazpieklarodem.pl/

Uleczalną chorobą kości w starożytnym Egipcie było zwichnięcie szczęki. Lekarstwo na to jest opisane w papirusie Edwina Smitha.

Kiedy badasz mężczyznę z przemieszczoną dolną szczęką i stwierdzasz, że jego usta są otwarte, tak że nie możesz ich zamknąć; następnie należy położyć palec na końcu obu szczęk w wewnętrznej części jego ust i podłożyć kciuki pod jego podbródek; wtedy musisz pozwolić im [przemieszczona kość stawowa] upaść razem na swoje miejsca . . . bandażuj je imr.w [co to jest, jest tajemnicą!] i miodem każdego dnia, aż poczuje się lepiej. Żaden z zapisów nie precyzuje, dlaczego zwichnięcie szczęki było tak powszechne, ale prawdopodobnie dlatego, że gryzące powierzchnie zębów były często bardzo zniszczone (patrz część „Otwieranie i mówienie „Agh”: Stomatologia”, dalej w tym rozdziale), wielu Egipcjan skończyło poruszanie ustami w dziwny sposób, aby móc żuć bez nadmiernego bólu. Tylko teoria!

Chatbot z Pytonem : Rasa Stack i jego rola wraz z Rasa NLU, którego uczyliśmy się do tej pory.

https://szkolazpieklarodem.pl/

Rysunek to diagram, który pomoże ci zrozumieć, w jaki sposób Rasa Core pasuje dobrze

Dzięki Rasa Core możemy określić wszystkie rzeczy, które nasz bot ma powiedzieć lub zrobić. Nazywa się to działaniami. Jedną z czynności może być przywitanie się z użytkownikiem lub wysłanie zapytania do bazy danych, albo może to być pobranie informacji za pomocą usługi internetowej lub interfejsu API. Rasa Core zapewnia możliwość trenowania naszego modelu probabilistycznego w celu przewidywania, jakie działania należy podjąć na podstawie historycznej rozmowy użytkownika lub użytkowników. Wyobraź sobie, że robisz to bez modelu ML i piszesz setki przypadków użycia, aby dowiedzieć się, jaka odpowiedź lub akcja powinna zostać wysłana lub wykonana. Krótko mówiąc, Rasa Core rozwiązuje ten problem dla Ciebie. Przyjrzyjmy się rozmowie pomiędzy użytkownikiem a botem, którą stworzyliśmy w rozdziale 3 podczas tworzenia OnlineEatsBota.

Użytkownik: OnlineEatsBot

Witaj OnlineEats: Witam! Jak mogę ci pomóc?

Chcę zamówić jedzenie: Jasne, co chciałbyś dzisiaj zamówić?

Jeden burger z kurczakiem: Gotowe. Twoja ostateczna kwota to 3,99 USD

Dziękuję: Wielkie dzięki

Ta rozmowa jest dość prosta i można ją przeprowadzić również bez żadnego modelu uczenia maszynowego, mimo że użyliśmy przeszkolonego modelu do rozpoznania intencji i zawartych w nim jednostek. Teraz interesujące pytanie, które przyjdzie Ci do głowy, brzmi: „A co, jeśli chcę, aby mój bot mógł zmieniać kolejność? A co jeśli chcę, żeby mój bot mógł usuwać lub dodawać większą ilość artykułów spożywczych?” Tak więc, jak omówiono, dodaj więcej przypadków użycia, większą złożoność, więcej intencji i ich wyrażeń, więcej if… else w kodzie do obsługi przypadków narożnych, ale kiedy budujesz chatbota dla firmy, musisz go skalować, aby wygenerować więcej za jego pośrednictwem przychody. Wszystkie systemy oprogramowania tak robią i te, którym się to udaje, przetrwają. Najważniejsze jest to, że nie możemy ciągle zmieniać i wdrażać kodu. Zamiast więc zajmować się wszystkimi przypadkami na bieżąco i powtarzać je wielokrotnie, możemy zastosować metodę uczenia maszynowego, aby rozwiązać ten problem za pomocą stosu Rasa, który powie nam, co bot powinien dalej zrobić w oparciu o kontekst użytkownika i stan rozmowy. Ponieważ model uczy się sam na podstawie kontekstu danych z poprzedniej rozmowy, botowi łatwiej jest prowadzić rozmowę bardziej naturalną i przyjazną dla użytkownika, zamiast losowo wybierać od czterech do pięciu stałych zdań. Rasa zaleca użytkownikom z niewielką ilością danych lub bez nich korzystanie z interaktywnej nauki. Więcej na temat interaktywnego uczenia się dowiemy się w dalszej części tego rozdziału. Zanim faktycznie zaczniemy używać Rasa Stack do napisania podstawowej części naszego bota, najpierw musimy zrozumieć kilka pojęć.

Per-āa : Inne choroby i zaburzenia

https://szkolazpieklarodem.pl/

W przypadku poważniejszych przypadków kuracje były trochę chybione i mogły nie być tak skuteczne. Ponieważ wiele z poniższych chorób to stany wewnętrzne, egipscy lekarze nie byli w stanie zidentyfikować przyczyn i leczyli jedynie objawy, którymi były ból, kaszel lub zmiany fizyczne. Powszechne choroby i leczenie obejmowały:

* Gruźlica: Nie było lekarstwa, ale lekarze łagodzili kaszel, nakłaniając pacjentów do wdychania mieszanek śmietany, chleba świętojańskiego, pestek daktyli i miodu.

* Piaskowa pylica płuc: Nie było lekarstwa na ten stan, spowodowany oddychaniem w piasku i kurzu z otaczającego środowiska. Lekarze stosowali te same środki łagodzące kaszel, co w przypadku gruźlicy.

* Zapalenie stawów i choroba zwyrodnieniowa stawów: lekarze masowali pacjentów pachnącymi olejkami, które łagodziły ból.

* Złamane kości: Drewniane łuski były używane do naprawy długich kości. W nozdrza wkładano łuski płótna, aby naprawić pęknięty lub złamany nos. Odlewy gipsowe – wykonane z mleka krowiego zmieszanego z liśćmi jęczmienia lub akacji zmieszane z gumą i wodą – służyły do ​​wykonywania przerw lub złamań.

* Zaćma: Lekarze nałożyli na oko mieszankę mózgu żółwia i miodu i wyrecytowali religijną inkantację.

Chatbot z Pytonem : Więcej informacji na temat rdzenia Rasa i systemu dialogowego

https://szkolazpieklarodem.pl/

Zanim faktycznie przejdziemy do kodowania części Rasa Core dla naszego modelu zarządzania dialogiem, naprawdę ważne jest, aby zrozumieć, dlaczego i skąd to się bierze. Spróbujemy zrozumieć, jak do tej pory robiliśmy wszystko, aby zbudować chatboty i jak to się zmieni na zawsze. Weźmy przykład:

Gdybyśmy mieli zbudować prostego chatbota, który pomógłby użytkownikom zarezerwować bilety lotnicze/autobusowe/filmowe/kolejowe, najłatwiej byłoby stworzyć maszynę stanów lub drzewa decyzyjne, napisać kilka if…else i gotowe. To by zadziałało, ale nie byłoby skalowalne. Jeśli klient ma początkowo dobre doświadczenia z czymś, chce częściej z tego korzystać. Za pomocą niektórych heurystyk możemy wykazać, że chatbot jest inteligentny, ale nie na długo. Kiedy przepływ kontrolny kodu przechodzi z bloku try do bloku wyjątkiem, zaczynamy drapać się po głowie. Rysunek przedstawia prostą prezentację tego, jak może wyglądać maszyna stanu służąca do zbudowania tego chatbota.

Jeśli spojrzymy na nasz diagram stanu, może to zadziałać w przypadku normalnej rozmowy, w której użytkownik szuka biletów do kina, autobusu lub pociągu albo chce zarezerwować bilet autobusowy po zapytaniu o bilety do kina. Co się stanie, jeśli użytkownik poprosi jednocześnie o bilety na autobus i do kina? Można powiedzieć, że możemy dodać jeszcze kilka instrukcji if…else do naszego już zagnieżdżonego kodu, aby sobie z tym poradzić. Jeśli jesteś dobrym programistą, zapisanie wejścia-wyjścia z maszyny stanowej lub rozszerzenie drzewa decyzyjnego nie zajmie Ci dużo czasu. Ale pomyśl o sytuacji, gdy te warunki zaczynają rosnąć wykładniczo i musisz ciągle dodawać przypadki, aby sobie z tym poradzić, a one również zaczynają się wzajemnie zakłócać. Nasz mózg działa w taki sposób, że uczymy się i uczymy na nowo. Jeśli dziecko nie wie, co zrobi z nim ogień, dotyka go, ale gdy go zaboli, nie robi tego więcej. Utwierdzają w przekonaniu, że jest to szkodliwe. Podobnie działa to w przypadku nagród – gdy coś zrobisz i coś otrzymasz, kojarzysz fakt, że zrobienie czegoś przynosi nagrodę lub lepszą nagrodę, a potem masz zamiar zrobić to ponownie. Nazywa się to uczeniem przez wzmacnianie w ML, gdzie maszyna uczy się, jak zachować się w określonej sytuacji, wykonując działania i rozumiejąc wyniki. Uczenie się przez wzmacnianie czasami nie jest najlepszym podejściem, na przykład w sytuacjach, gdy dane nie są wystarczające do nauczenia się, jakość danych jest niewystarczająca do nauczenia się scenariuszy nagród itp.

Per-āa : Zaburzenia trawienia

https://szkolazpieklarodem.pl/

Pasożytnicze robaki były jedną z najczęstszych dolegliwości, na które cierpieli starożytni Egipcjanie. Te stworzenia były praktycznie niemożliwe do wyleczenia, a wiele mumii zawiera dowody na to, że robaki zadomowiły się w narządach wewnętrznych. Pasożyty obejmowały:

* Bilharzia, która została złowiona ze ślimaków wodnych w stojącej wodzie. Powodował anemię, utratę apetytu, infekcje dróg moczowych i utratę odporności na inne choroby.

* Gwinea, która została złapana poprzez picie skażonej wody.

* Trichnella i taenia, które łapano jedząc niedogotowane mięso.

* Tasiemiec, który został złapany przez kontakt ze skażonymi zwierzętami. Doprowadziło to do powstania wrzodów, w których tasiemiec składał jaja.

Wydaje się, że lewatywy były powszechne, przynajmniej dla elity, i to mogło wyeliminować niektóre robaki, ale nie wiele. Niestety Egipcjanie musieliby po prostu z nimi żyć i radzić sobie z objawami.

Chatbot z Pytonem : Zarządzanie dialogami za pomocą Rasa Core

https://szkolazpieklarodem.pl/

W tej sekcji będziemy sobie brudzić ręce, ucząc inny model zarządzania oknami dialogowymi Rasa Core. Pamiętaj, że w tym momencie mamy gotowy model do przewidzenia intencji tekstu, możemy napisać kod w Pythonie, aby sformułować odpowiedzi, i możemy odpowiedzieć klientowi. Co jednak jeśli będziemy chcieli dodać do naszego bota więcej intencji? Czy jest to skalowalne w przypadku większej aplikacji z dużą ilością funkcji? Odpowiedź brzmi nie. Tutaj na ratunek przychodzi zarządzanie dialogami z Rasa Core. Jeśli kiedykolwiek próbowałeś użyć dowolnego bota na dowolnej platformie, musiałeś widzieć, że zawiódł on w pewnych warunkach. Tak, wszyscy tam byliśmy i nadal istnieje, ponieważ dzisiejszy bot fatalnie radzi sobie z kontekstem rozmowy i nie podąża za nią. Za pomocą platformy dialogowej Rasa Core opartej na ML możemy łatwo rozwiązać ten problem. Rasa Core jest dobrze sprawdzony w zastosowaniach na poziomie przedsiębiorstw i używany przez tysiące programistów, ponieważ jest gotowy do produkcji, łatwy w użyciu i rozszerzeniu, a co najważniejsze, ma otwarte oprogramowanie.

Per-āa : Powszechne dolegliwości – i ich leczenie

https://szkolazpieklarodem.pl/

Tak jak dzisiaj, starożytni lekarze wydawali się być przygotowani do leczenia większości rzeczy. To, czy recepta zadziałała, pozostaje kwestią otwartą, ale niektóre z użytych składników, zwłaszcza w mniej poważnych przypadkach, stanowią podstawę współczesnej medycyny i mogły być skuteczne. Na przykład starożytni Egipcjanie używali:

* Figi na zaparcia: bogate w błonnik pokarmowy, figi są nadal spożywane w celu wspomagania regularności trawienia.

* Miód na kaszel i zaćmę: we współczesnej medycynie miód stosowany jest w leczeniu ran, oparzeń i wrzodów oraz jest skuteczny przeciwko różnym rodzajom bakterii, działając jak antybiotyk.

* Miedź do czyszczenia ran: dzisiejsi naukowcy wiedzą, że miedź zapobiega gromadzeniu się bakterii.

* Maki na ukojenie płaczących dzieci: Mak jest podstawą narkotyków, takich jak opium i morfina, i rzeczywiście spowodowałby senność u dziecka.

* Drożdże na zaburzenia trawienia: Egipcjanie stosowali również drożdże na czyraki i wrzody. Dziś wiadomo, że drożdże są dobrym źródłem kompleksu witamin B i są skuteczne jako antybiotyk.

Chatbot z Pytonem : Trenowanie modelu

https://szkolazpieklarodem.pl/

Uruchamiamy poniższy fragment, aby wywołać naszą metodę train_horoskopbot z odpowiednimi parametrami train_horoskopbot(‘./data/data.json’, ‘config.json’, ‘./models/nlu’) Po uruchomieniu tego kodu w naszym rasa-nlu. ipynb, otrzymamy taki wynik:

Epoki: 100%|██████████| 300/300 [00:01<00:00, 175,69it/s,

strata=0,075, acc=1,000]

Kod do szkolenia modelu chatbota utworzy folder models, który możesz wyświetlić za pomocą Jupytera lub eksploratora plików lub aplikacji Finder. Utworzy kilka plików indeksowych, meta i pickle w podanym przez nas docelowym katalogu modelu.

Chatbot z Pytonem : Przewidywanie na podstawie modelu

Wywołajmy metodę przewidywania_intent, przekazując tekst, aby zobaczyć, jak działa nasz wyszkolony model.

predict_intent(“I am looking for my horoscope for today. I am wondering if

you can tell me that.”)

Sama metoda wypisuje wynik. W przypadku powyższego tekstu moje dane wyjściowe wyglądają następująco:

INFO:tensorflow:Restoring parameters from ./models/nlu/default/

horoscopebot/intent_classifier_tensorflow_embedding.ckpt

{

“intent”: {

“name”: “get_horoscope”,

“confidence”: 0.9636583924293518

},

“entities”: [],

“intent_ranking”: [

{

“name”: “get_horoscope”,

“confidence”: 0.9636583924293518

},

{

“name”: “dob_intent”,

“confidence”: 0.03462183475494385

},

{

“name”: “greeting”,

“confidence”: 0

},

{

“name”: “subscription”,

“confidence”: 0

}

],

“text”: “I am looking for my horoscope for today. I am wondering if you

can tell me that.”

}

Wow! Czy to nie magiczne? Nasz model przewidział taki tekst z pewnością 96%. W dostarczonym pliku ipynb widać, że nasz model dobrze radzi sobie również z przewidywaniem innych zamiarów. To jest ogólna siła tensorflow i ML. Nie trzeba dodawać, że biblioteka rasa_nlu sprawia, że tak łatwo w to uwierzyć. Czas więc cofnąć się w czasie i jeśli pamiętasz rozdział 3 tej książki, to musisz pamiętać, że za każdym razem, gdy dodawaliśmy nowy przykład, Dialogflow służył do ponownego uczenia modelu. Właściwie robiliśmy to samo, co przed chwilą, za kulisami. Nie mogliśmy tam zmienić modelu ani dostroić żadnego parametru, ale teraz możemy to wszystko zrobić z pełną kontrolą. Teraz, gdy pomyślnie zbudowaliśmy i wytrenowaliśmy model przy użyciu tensorflow, a także go przetestowaliśmy, przejdziemy do kolejnego tematu Zarządzanie dialogami. Prosiłbym o przetestowanie wszystkich scenariuszy, z którymi może spotkać się Twój bot, aby poznać punkty, w których Twój model nie działa dobrze, i w związku z tym móc dodać więcej danych lub w razie potrzeby dostroić parametry. Należy również pamiętać, że ponowne uczenie modelu wystarczy za każdym razem, gdy nastąpi zmiana danych uczących. Jeśli nie ma zmian w danych szkoleniowych, możemy załadować istniejący model szkoleniowy, aby kontynuować przewidywanie na podstawie nowych przykładów.

Per-āa : Pod przysięgą

https://szkolazpieklarodem.pl/

Większość egipskich lekarzy była również kapłanami. Ponieważ medycyna nie była głównym zawodem tych ludzi, egipska wersja Przysięgi Hipokratesa jest nieco skrócona i zawiera element moralny. W grobowcu Nench-Sachmeta, naczelnika lekarzy z V dynastii, znajduje się następująca deklaracja:

Nigdy nie zrobiłem nikomu nic złego.

Dla współczesnych oczu można powiedzieć, że wiele kuracji i zabiegów stosowanych przez starożytnych Egipcjan złamało tę przysięgę. Ale w umyśle starożytnych Egipcjan robili wszystko, co w ich mocy, aby leczyć wszelkie dolegliwości, jakie napotkali.