Chatbot z Pytonem : Warto wiedzieć rzeczy w NLP dla Chatbotów

https://szkolazpieklarodem.pl/

W tej sekcji dowiemy się o kilku interesujących tematach, które często przydadzą się, gdy planujesz napisać własne, niestandardowe metody NLP do obsługi określonych scenariuszy. Upewnij się, że je przejrzałeś, bo gdy najmniej się tego spodziewasz, jest to najbardziej potrzebne. Pokrótce porozmawiamy o tokenizacji i wykorzystaniu wyrażeń regularnych w scenariuszu chatbota.

Per-āa : Uspokajanie mas

https://szkolazpieklarodem.pl/

Z powodu wzmożonych stosunków handlowych w tym okresie, wielu zagranicznych imigrantów osiedliło się w Egipcie, głównie w regionie Delta. Początkowo były stosunkowo pokojowe, ale w czasie panowania Ahmose II (znanego jako Amasis; 570-526 p.n.e.) między różnymi zagranicznymi grupami wybuchły liczne wojny domowe. Ahmose próbował ograniczyć te konflikty, przyznając określone prawa handlowe obcokrajowcom mieszkającym w miejscowości Naukratis w Delcie, tworząc w ten sposób rodzaj „wolnej strefy” dla imigrantów do Egiptu. Niektórzy mogą uznać to działanie za trochę niesprawiedliwe w stosunku do mieszkających tam rdzennych Egipcjan, ale przynajmniej walki ustały, co dodatkowo zachęciło do stosunków handlowych i zagranicznej imigracji do Egiptu.

Chatbot z Pytonem : Znajdowanie podobieństwa

https://szkolazpieklarodem.pl/

Znajdowanie podobieństwa między dwoma słowami to przypadek użycia, który najczęściej spotykasz w pracy z NLP. Czasami dość ważne staje się ustalenie, czy dwa słowa są podobne. Budując chatboty, często będziesz musiał znaleźć nie tylko słowa o podobnym wyglądzie, ale także to, jak bardzo są one logicznie powiązane. spaCy wykorzystuje wysokiej jakości wektory słów, aby znaleźć podobieństwo między dwoma słowami za pomocą algorytmu GloVe (Global Vectors for Word Representation).

GloVe to algorytm uczenia się bez nadzoru, służący do uzyskiwania reprezentacji wektorowych słów. Algorytm GloVe wykorzystuje zagregowane globalne statystyki współwystępowania słów z korpusu do uczenia modelu. Spróbujmy przyjrzeć się rzeczywistym wartościom wewnątrz wektorów spaCy, korzystając z atrybutu wektorowego tokena.

doc = nlp(u’How are you doing today?’)

for token in doc:

print(token.text, token.vector[:5])

Wyjście:

(u’How’, array([-0.29742685, 0.73939574,

-0.04001453, 0.44034013, 2.8967502 ], dtype=float32))

(u’are’, array([-0.23435134, -1.6145049 , 1.0197453 , 0.9928169 ,

0.28227055], dtype=float32))(u’you’, array([ 0.10252178,

-3.564711 , 2.4822793 , 4.2824993 , 3.590245 ], dtype=float32))

(u’doing’, array([-0.6240922 , -2.0210216 , -0.91014993, 2.7051923 ,

4.189252 ], dtype=float32))(u’today’, array([ 3.5409122 ,

-0.62185854, 2.6274266 , 2.0504875 , 0.20191991], dtype=float32))

(u’?’, array([ 2.8914998 , -0.25079122, 3.3764176 , 1.6942682 ,

1.9849057 ], dtype=float32))

Widząc ten wynik, nie ma to większego sensu i znaczenia. Z punktu widzenia aplikacji najważniejsze jest to, jak podobne są wektory różnych słów, czyli samo znaczenie słowa. Aby znaleźć podobieństwo między dwoma słowami w spaCy, możemy wykonać następujące czynności.

Przykład 1:

hello_doc = nlp(u”hello”)

hi_doc = nlp(u”hi”)

hella_doc = nlp(u”hella”)

print(hello_doc.similarity(hi_doc))

print(hello_doc.similarity(hella_doc))

Wyjście:

0,7879069442766685

0,4193425861242359

Jeśli widzisz słowo hello, jest ono bardziej spokrewnione i podobne do słowa hi, chociaż różnica między słowami hello i hella polega jedynie na znaku.

Weźmy jeszcze jeden przykład zdania i dowiedzmy się, jak spaCy porównuje podobieństwa. Pamiętasz nasz przykład Gry o Tron z poprzednich części? Spróbujemy tego i zobaczymy podobieństwo.

Kod:

GoT_str1 = nlp(u”When will next season of Game of Thrones be releasing?”)

GoT_str2 = nlp(u”Game of Thrones next season release date?”)

GoT_str1.similarity(GoT_str2)

Wyjście:

0,785019122782813

Jak widać na tym przykładzie podobieństwo między obydwoma zdaniami wynosi około 79%, co wystarczy, aby stwierdzić, że oba zdania są dość podobne, co jest prawdą. Może to pomóc nam zaoszczędzić dużo czasu na pisanie niestandardowego kodu podczas tworzenia chatbotów. Dochodzimy więc do faktu, że spaCy daje nam znaczące podobieństwo między dwoma słowami przy użyciu wektorów słów, a nie tylko patrząc na ich pisownię lub alfabet. Weźmiemy bardzo prosty przykład i spróbujemy znaleźć podobieństwo między słowami.

example_doc = nlp(u”car truck google”)

for t1 in example_doc:

for t2 in example_doc:

similarity_perc = int(t1.similarity(t2) * 100)

print “Word {} is {}% similar to word {}”.format(t1.text,

similarity_perc, t2.text)

Wyjście:

Word car is 100% similar to word car

Word car is 71% similar to word truck

Word car is 24% similar to word google

Word truck is 71% similar to word car

Word truck is 100% similar to word truck

Word truck is 36% similar to word google

Word google is 24% similar to word car

Word google is 36% similar to word truck

Word google is 100% similar to word gogle

Znalezienie podobieństwa między słowami lub zdaniami staje się dość ważne, gdy zamierzamy zbudować dowolną aplikację, która jest w ogromnym stopniu zależna od implementacji NLP. Jeśli kiedykolwiek korzystałeś ze StackOverFlow, za każdym razem, gdy próbujemy zadać nowe pytanie, próbuje on wyświetlić listę podobnych pytań zadanych już na platformie. Jest to jeden z najlepszych przykładów, w których pomocne może być znalezienie podobieństwa między dwoma zestawami zdań. Pewność spaCy, że znajdzie podobieństwo między dwoma słowami w oparciu o już wyszkolony model, zależy wyłącznie od rodzaju przyjętego ogólnego założenia. Podczas tworzenia chatbotów znalezienie podobieństw może być bardzo przydatne w następujących sytuacjach:

  • Podczas tworzenia chatbotów w celu uzyskania rekomendacji
  • Usuwanie duplikatów
  • Budowa modułu sprawdzania pisowni

Te rzeczy, których się nauczyliśmy, są naprawdę ważne podczas tworzenia chatbotów, dzięki czemu wiemy, jak analizować dane wejściowe użytkownika, aby miały one sens podczas pisania logiki biznesowej w kodzie.

Per-āa : W marynarce wojennej

https://szkolazpieklarodem.pl/

Następca Psamtika, Nekau II, nadal poprawiał status Egiptu na Bliskim Wschodzie i ponownie przejął kontrolę nad Syrią i Palestyną. Nekau utworzył pierwszą oficjalną egipską służbę morską, w skład której wchodziło wielu Greków jońskich. Wcześniej Egipt był przede wszystkim krajem rzecznym, bez rzeczywistej potrzeby posiadania marynarki wojennej. Podczas 26. dynastii Egipt cieszył się wzmożonym handlem z Grekami, których sieć handlowa ogromnie się rozwijała. Aby zwiększyć zakres handlu w Egipcie, Nekau rozpoczął budowę kanału łączącego Wadi Tumilat z Morzem Czerwonym – 2500 lat przed utworzeniem w tym samym celu Kanału Sueskiego. Ukończony kanał był wystarczająco szeroki, aby przepłynąć flotę handlową i zmienić stosunki handlowe Egiptu.

Chatbot z Pytonem : Kawałki Rzeczownika

https://szkolazpieklarodem.pl/

Kawałki rzeczownika lub NP-chunking to w zasadzie „podstawowe frazy rzeczownikowe”. Można powiedzieć, że są to wyrażenia płaskie, których głową jest rzeczownik. Kawałki rzeczownika można traktować jako rzeczownik ze słowami opisującymi rzeczownik.

Spróbujmy wziąć przykład i lepiej go zrozumieć.

Przykład 1:

doc = nlp(u”Boston Dynamics is gearing up to produce thousands of robot dogs”)

list(doc.noun_chunks)

Wyjście:

[Boston Dynamics, thousands, robot dogs]

Chociaż posiadanie kawałków rzeczownika w danym zdaniu bardzo pomaga, spaCy zapewnia inne atrybuty, które również mogą być pomocne. Spróbujmy zbadać niektóre z nich.

Przykład 2:

doc = nlp(u”Deep learning cracks the code of messenger RNAs and protein-coding

potential”)

for chunk in doc.noun_chunks:

print(chunk.text, chunk.root.text, chunk.root.dep_,

chunk.root.head.text)

Wyjście:

Jak widać z tej tabeli, otrzymujemy rzeczownik chunks i ich atrybuty. Poniższa tabela pomoże Ci zrozumieć każdą kolumnę.

Per-āa : Wracając do tradycji

https://szkolazpieklarodem.pl/

Przez mniej więcej 50 lat panowania Psamtika wprowadził w Egipcie szereg zmian. Starał się przywrócić Egipt do dawnych tradycji, pokazać ciągłość kultury. W tym celu przywrócił szereg elementów religijnych, artystycznych i rytualnych ze Starego i Średniego Królestwa. Jednak bycie prawdziwie tradycyjnym królem w tradycyjnym Egipcie oznaczało wolność od obcych wpływów. Wyeliminowanie wpływów zewnętrznych było trudne do osiągnięcia, ale to właśnie zrobiłem Psamtik. W 653 p.n.e., po tym jak szereg problemów wewnętrznych osłabił Asyryjczyków, Psamtik uwolnił się od Asyryjczyków i sam przejął kontrolę nad Egiptem. Ten rozdział sprawił, że Egipt ponownie stał się siłą napędową Bliskiego Wschodu.

Chatbot z Pytonem : Jaki jest pożytek z analizy zależności w chatbotach?

https://szkolazpieklarodem.pl/

Analiza zależności jest jedną z najważniejszych części podczas tworzenia chatbotów od podstaw. Staje się to o wiele ważniejsze, gdy chcesz zrozumieć znaczenie tekstu wprowadzanego przez użytkownika do chatbota. Może się zdarzyć, że nie przeszkoliłeś swoich chatbotów, a mimo to nie chcesz stracić klienta lub odpowiadać jak głupia maszyna. W takich przypadkach analiza zależności naprawdę pomaga znaleźć relację i wyjaśnić nieco więcej, o co może prosić użytkownik. Gdybyśmy mieli wymienić rzeczy, w których pomaga analiza zależności, niektóre z nich mogłyby wyglądać następująco:

  • Pomaga w znalezieniu powiązań między słowami lub gramatycznie poprawne zdania.
  • Można go używać do wykrywania granic zdania.
  • Bardzo przydatne jest sprawdzenie, czy użytkownik mówi jednocześnie o więcej niż jednym kontekście.

Pewnie się zastanawiasz, co się stanie, jeśli użytkownik bota powie jakieś niepoprawne gramatycznie zdanie lub użyje komunikatu SMS, przekazując informacje na jakiś temat? Jak omówiono w Rozdziale 1, należy zachować ostrożność w takich sytuacjach i odpowiednio sobie z nimi radzić, stosując techniki NLP. Musisz napisać własny, niestandardowy NLP, aby zrozumieć kontekst użytkownika lub chatbota i na tej podstawie zidentyfikować możliwe błędy gramatyczne, które może popełnić użytkownik. Podsumowując, musisz być przygotowany na takie scenariusze, w których użytkownik wprowadzi wartości śmieciowe lub zdania niepoprawne gramatycznie. Nie możesz obsłużyć wszystkich takich scenariuszy na raz, ale możesz stale udoskonalać swojego chatbota, dodając niestandardowy kod NLP lub ograniczając wprowadzanie danych przez użytkownika z założenia.

Per-āa : Okres saite: Psamtik I i inni

https://szkolazpieklarodem.pl/

Po 665 p.n.e. Asyryjczycy sprawowali władzę nad Egiptem – choć wybrali miejscową ludność do objęcia roli króla, oczywiście pod ich rządami. Egipt był teraz państwem wasalnym imperium asyryjskiego. Stolica znajdowała się w Sais w Delcie, a królowie okresu saitów utworzyli 26. dynastię. (Ponieważ nubijska 25. dynastia nadal sprawowała kontrolę, gdy Asyryjczycy zajęli północ, te dwie dynastie występowały jednocześnie). . Psamtik wysłał swoją córkę Nitokris do świątyni Amona w Karnaku, gdzie nadano jej kapłański tytuł żony Boga Amona, co stawiało ją dość wysoko w hierarchii kultowej. To połączenie władzy królewskiej i religijnej – a także bogactwa kultu – sprawiło, że północą i południem rządziła jedna osoba. Ten zjednoczony Egipt nie był jednak stabilny i Psamtik został zmuszony do zebrania armii, by rozprawić się z licznymi pomniejszymi wodzami, którzy powstali w Delcie. Wszyscy wodzowie chcieli kontrolować kawałek Egiptu, a Asyryjczycy chcieli jednego władcy, który byłby łatwiejszy do kontrolowania.

Chatbot z Pytonem : Interaktywna wizualizacja do analizy zależności

https://szkolazpieklarodem.pl/

Bardzo trudno jest zrozumieć koncepcję pełnej analizy zależności po raz pierwszy. spaCy zapewnia niezwykle łatwy i interaktywny sposób zrozumienia analizy zależności. spaCy v2.0+ posiada moduł wizualizacji, w którym możemy przekazać Doc lub listę obiektów Doc do displaCy i wywołać metodę serwowania displaCy w celu uruchomienia serwera WWW. Rysunek  pokazuje, jak interaktywna wizualizacja będzie wyglądać pod kątem analizy zależności.

Możesz także wygenerować wizualizację analizy zależności na rysunku 2-5. Aby utworzyć taką wizualizację, uruchom poniższy kod, a następnie przejdź do http://localhost:5000 w swojej przeglądarce. Spróbujmy zrobić wizualizację naszego przykładowego zadania i celu zadań.

from spacy import displacy

doc = nlp(u’Book a table at the restaurant and the taxi to the hotel’)

displacy.serve(doc, style=’dep’)

Uruchomienie tego kodu da wynik taki jak na rysunku . Jeśli otrzymasz coś podobnego, przejdź do innej karty przeglądarki i wpisz http://localhost:5000. Otrzymujemy wizualizację analizy zależności dla tego ciągu w kodzie

Weźmy jeszcze jeden przykład analizowania zależności, w którym zakładamy, że użytkownik zadaje następujące zdanie:

Jakie miejsca warto odwiedzić w Berlinie i zatrzymać się w Lubece?

Najpierw utworzymy obiekt dokumentu, jak pokazano tutaj:

doc = nlp(u”What are some places to visit in Berlin and stay in Lubeck”)

Teraz mamy miejsca, o których się mówi i działania, których chce użytkownik:

places = [doc[7], doc[11]] #[Berlin, Lubeck]

actions = [doc[5], doc[9]] #[visit, stay]

Ponieważ znasz już tagowanie POS i wyodrębnianie jednostek, możesz łatwo automatycznie uzyskać miejsca i działania. Teraz, gdy mamy już miejsca, przejrzyjmy każdego z jego przodków i sprawdźmy, czy w działaniach znaleziono jakichś przodków. Pierwszym rodzicem miejsca znajdującego się na liście akcji powinna być akcja dla danego miejsca.

for tok in place.ancestors:

if tok in actions:

print(“User is referring {} to {}”).format(place, tok)

break

Wyjście:

Użytkownik poleca: Berlin do odwiedzenia

Użytkownik poleca: Lubeka zostaje

Jak widać w tych przykładach, analiza zależności ułatwia zrozumienie, do czego odwołuje się użytkownik. Widzieliśmy, że również w przypadku dwóch różnych zadań możemy dość dokładnie określić oczekiwania i na tej podstawie sformułować kolejną odpowiedź.

Per-āa : Podbój Bliskiego Wschodu: Asyryjczycy

https://szkolazpieklarodem.pl/

W tym samym czasie, gdy rozszerzyły się wpływy nubijskie na Egipt, imperium asyryjskie rozszerzyło się również na Bliski Wschód. Kilka asyryjskich powstań miało miejsce w pobliżu granic Egiptu, ale królowie nubijscy stłumili je. Jednak za panowania nubijskiego faraona Taharki (690-664 p.n.e.) Asyryjczycy i Nubijczycy prowadzili liczne konfrontacje. Obie strony na przemian zyskiwały przewagę, pokazując, że są równo dopasowane. Sytuacja musiała być dość niepokojąca dla nowych dynastii nubijskich, które niedługo zdobyły upragnioną nagrodę panowania nad Egiptem. W 671 p.n.e. asyryjski król Asarhaddon faktycznie wkroczył do Egiptu, przejmując kontrolę nad północą aż do Memfisu. Oznaczało to, że król Taharqa musiał uciekać na południe Egiptu. Mimo że utrzymali kontrolę nad Deltą, Asyryjczycy odeszli, by powrócić w 669 p.n.e. Jednak Asarhaddon zmarł po drodze, a jego następcą został jego syn Asurbanipal, który w końcu przejął kontrolę nad Egiptem. Asurbanipal ostatecznie przejął kontrolę nad Tebami w 661 p.n.e., czyniąc go królem Górnego i Dolnego Egiptu. To spowodowało, że Taharqa i jego następcy uciekli dalej na południe do stolicy Nubii, Napata, poza granice Egiptu, aby nigdy więcej nie wkroczyć do Egiptu.