Chatbot z Pytonem : Streszczenie

https://szkolazpieklarodem.pl/

W tym momencie musisz mieć dobre pojęcie o tym, dlaczego musimy znać NLP, zanim zaczniesz budować chatboty. Dowiedzieliśmy się o module spaCy w Pythonie, jego funkcjach i sposobie jego instalacji. Zagłębiliśmy się w różne metody NLP, które są szeroko stosowane przy tworzeniu chatbotów. Dowiedzieliśmy się o tagowaniu POS, różnicy między rdzeniem a lematyzacją, rozpoznawaniu bytów, dzieleniu rzeczowników i znajdowaniu podobieństw między zestawami słów. Wykonaliśmy kod dla wszystkich tych koncepcji i nauczyliśmy się tego wszystkiego, robiąc to, a nie tylko czytając. Odświeżyliśmy także podstawy tokenizacji i wyrażeń regularnych. W następnym rozdziale możemy kontynuować budowę naszego chatbota, korzystając z ogólnodostępnego narzędzia o nazwie Dialogflow. W następnej sekcji dowiemy się, jak wytrenować naszego chatbota, aby rozumiał i wydobywał informacje podawane przez użytkownika.

Per-āa : Rządzenie Egiptem na odległość

https://szkolazpieklarodem.pl/

Chociaż Kambyzes i Persowie zmierzyli się z Grekami i Egipcjanami i zwyciężyli, nie mieli ochoty pozostać w kraju swojego zwycięstwa. Kambyzes żył i został pochowany w Persji (współczesny Iran). Podczas swoich rządów (525-522 p.n.e.) wynajął gubernatora prowincji, aby rządził w Egipcie w jego imieniu – choć był reprezentowany w Egipcie jako Egipcjanin z nazwiskami spisanymi w kartuszu jako tradycyjny władca. Jednak następca Kambyzesa Dariusz I (521–486 p.n.e.) bardzo interesował się Egiptem. Zbudował wiele świątyń i wszczął naprawy od Delty do Asuanu. Dariusz kontynuował również i dokończył budowę kanału między Wadi Tumilat a Morzem Czerwonym, który rozpoczął Nekau z 26. dynastii Saite. W 486 p.n.e., pomimo pozytywnego wpływu Dariusza na Egipt, Egipcjanie zbuntowali się. Ten bunt nie został stłumiony, dopóki na tronie nie zasiadł kolejny król, Kserkses. Jego panowanie (485-465 p.n.e.) nie było pokojowe, a później za jego panowania Grecy najechali Egipt. Po krótkim okresie wytchnienia Kserkses został zamordowany wśród innego buntu egipskiego. Walka ta trwała przez jakiś czas, a perski król został pokonany przez potomków 26. dynastii z Delty wraz z pomocą greckich najemników. Egipcjanie w końcu zdołali przejąć kontrolę podczas panowania dwóch ostatnich królów okresu perskiego, Dariusza II (423-403 p.n.e.) i Artakserksesa II (405-359 p.n.e.). osłabiły ich obronę i pozostawiły otwarte na atak.

Chatbot z Pytonem : Wyrażenia regularne

https://szkolazpieklarodem.pl/

Musisz już wiedzieć o wyrażeniach regularnych i ich użyciu. W tej książce założono, że musisz ogólnie znać wyrażenia regularne. W tej sekcji omówimy tylko niektóre przykłady i zobaczymy, jak wyrażenia regularne mogą być korzystne i przydatne podczas tworzenia chatbotów. Analiza i przetwarzanie tekstu to obszerny temat sam w sobie. Czasami słowa grają ze sobą w sposób, który niezwykle utrudnia maszynom zrozumienie i nauczenie się obsługi. Wyrażenia regularne mogą się przydać w przypadku zastosowania modelu uczenia maszynowego. Ma moc dopasowywania wzorców, co może zapewnić, że przetwarzane przez nas dane są prawidłowe lub nieprawidłowe. Większość wczesnych chatbotów omówionych w rozdziale 1 w sekcji Historia chatbotów była w ogromnym stopniu zależna od dopasowywania wzorców. Rozważmy poniżej dwa przykłady, które są dość proste do zrozumienia. Spróbujemy użyć wyrażeń regularnych, aby wydobyć informacje z obu zdań. Zarezerwuj dla mnie metro ze stacji na lotnisku do stacji w Hongkongu. Zarezerwuj mi taksówkę z lotniska w Hongkongu do AsiaWorld-Expo. Oto kod:

sentence1 = “Book me a metro from Airport Station to Hong Kong Station.”

sentence2 = “Book me a cab to Hong Kong Airport from AsiaWorld-Expo.”

import re

from_to = re.compile(‘.* from (.*) to (.*)’)

to_from = re.compile(‘.* to (.*) from (.*)’)

from_to_match = from_to.match(sentence2)

to_from_match = to_from.match(sentence2)

if from_to_match and from_to_match.groups():

_from = from_to_match.groups()[0]

_to = from_to_match.groups()[1]

print(“from_to pattern matched correctly. Printing values\n”)

print(“From: {}, To: {}”.format(_from, _to))

elif to_from_match and to_from_match.groups():

_to = to_from_match.groups()[0]

_from = to_from_match.groups()[1]

print(“to_from pattern matched correctly. Printing values\n”)

print(“From: {}, To: {}”.format(_from, _to))

Wyjście:

to_from pattern matched correctly. Printing values

From: AsiaWorld-Expo., To: Hong Kong Airport

Spróbuj zmienić zdanie2 na zdanie1 i sprawdź, czy kod działa dobrze, identyfikując wzorzec. Biorąc pod uwagę możliwości uczenia maszynowego w dzisiejszych czasach, wyrażenia regularne i dopasowywanie wzorców cofnęły się o krok, ale pamiętaj, aby trochę je odświeżyć, ponieważ w dowolnym momencie może być konieczne przeanalizowanie określonych szczegółów ze słów, zdań lub tekstu dokumenty.

Per-āa : Osadnictwo Persów

https://szkolazpieklarodem.pl/

Perska 27. dynastia przetrwała ponad 100 lat (525–404 p.n.e.) i została odnotowana przez Herodota. W pierwszej kolejności opisuje trzy potencjalne przyczyny inwazji perskiego króla Kambyzesa II na Egipt, chociaż Herodot nie był pewien wiarygodności żadnego z tych wyjaśnień:

* Kambyzes chciał egipskiej konkubiny i zamiast księżniczki wysłano mu drugorzędną szlachciankę, więc najechał Egipt.

* Kambyzes mógł być na wpół Egipcjaninem, być może nieślubnym synem córki saiteckiego króla Apriesa.

* Kambyzes jako dziecko obiecał najechać Egipt w odwecie za zniewagę złożoną jego matce.

Jeśli Herodot nie był pewien, dlaczego Kambyzes najechał Egipt, jak u licha mogą być współcześni historycy? Bez względu na konkretną inspirację, inwazja perska była paskudna, wspomagana przez Beduinów, którzy prowadzili do granic Egiptu. Po przybyciu Beduinów i Persów byli agresywni i okrutni, a nawet usunęli zabalsamowane ciało króla Saite Ahmose (Amazis) i podpalili je. To prawda, że ​​Egipcjanie też nie byli tacy mili. W odwecie za zdradę generała najemników Egipcjanie paradowali jego dwóch synów przed nim i armią perską i poderżnęli im gardła. Krew zebrano w dużej misce, zmieszano z wodą i winem i wypili wszyscy żołnierze. Jednak podobnie jak Herodot miał wątpliwości co do opowieści Kambyzesa, być może ten opis był również przesadnym mitem. Nie istnieją żadne inne zapisy o spożywaniu przez Egipcjan ludzkiej krwi.

Chatbot z Pytonem : Tokenizacja

https://szkolazpieklarodem.pl/

Tokenizacja to jedna z prostych, ale podstawowych koncepcji NLP, polegająca na dzieleniu tekstu na znaczące segmenty. spaCy najpierw tokenizuje tekst (tj. dzieli go na słowa, a następnie na znaki interpunkcyjne i inne). Może przyjść Ci do głowy pytanie: Dlaczego nie mogę po prostu użyć wbudowanej metody podziału języka Python i przeprowadzić tokenizację? Metoda split w Pythonie to po prostu surowa metoda dzielenia zdania na tokeny z separatorem. Nie bierze pod uwagę żadnego znaczenia, podczas gdy tokenizacja stara się również zachować znaczenie. Wypróbujmy trochę kodu i zobaczmy, jak działa tokenizacja.

Przykład 1:

doc = nlp(u’Brexit is the impending withdrawal of the U.K. from the

European Union.’)

for token in doc:

print(token.text)

Wyjście:

Brexit

is

the

impending

withdrawal

of

the

U.K.

from

the

EuropeanUnion

Jeśli widzisz na powyższym wyjściu, Wielka Brytania pojawia się jako pojedyncze słowo po procesie tokenizacji, co ma sens, ponieważ Wielka Brytania to nazwa kraju i dzielenie jej byłoby błędne. Nawet po tym, jeśli nie będziesz zadowolony z tokenizacji spaCy, możesz użyć metody add_special_case case, aby dodać własną regułę, zanim całkowicie zaczniesz polegać na metodzie tokenizacji spaCy.

Per-āa : Nawet jeszcze nie zimno

https://szkolazpieklarodem.pl/

Oddzielenie Psamtika od Asyryjczyków  doprowadziło do stopniowego upadku i ostatecznego upadku imperium asyryjskiego i oznaczało, że Egipt ponownie był najpotężniejszym narodem w regionie. Ten status nie trwał długo, ponieważ wszyscy chcieli wypełnić lukę pozostawioną przez Asyryjczyków. Osłabieni asyryjscy królowie byli atakowani przez wielu ludzi, w tym:

* Babilończycy pod panowaniem króla Naboplassara

* Medowie (starożytni Irańczycy)

* Scytowie (Ukraińcy i Południowi Rosjanie)

Asyryjczycy poprosili nawet Psamtika (który oddzielił się od nich) o pomoc w tych atakach. Mimo to Asyryjczycy przegrali, aw 612 pne imperium asyryjskie zakończyło się upadkiem Niniwy pod atakiem armii perskiej. Świętowanie upadku tego niegdyś wielkiego imperium trwało krótko dla Egipcjan, ponieważ Persowie wkrótce wkroczyli na Egipt, wkroczyli w jego granice i przejęli tron ​​w 525 p.n.e. Niedoświadczony król Psamtik III próbował powstrzymać Persów przed przejęciem kontroli nad Egiptem. Jednak Psamtik III został ostatecznie ścigany do Memfis, zanim został schwytany i przewieziony do stolicy Persji jako jeniec wojenny, pozostawiając Egipt bez straży i króla. Po raz kolejny inwazja doprowadziła do powstania kolejnego zestawu królów i kolejnej dynastii (26.), rozpoczynając późny okres historii Egiptu.

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.