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 : Jak zostać lekarzem egipskim

https://szkolazpieklarodem.pl/

Zostanie lekarzem w starożytnym Egipcie wiązało się z nauką i szkoleniem – zarówno w zakresie procedur medycznych, jak i ceremonii religijnych. Poniższe sekcje opisują proces zostania lekarzem.

Praktykowanie magicznej medycyny

Niestety, praktyka medyczna, którą musieli znosić starożytni Egipcjanie, nie była całkowicie naukowa. Byli przesądną populacją, która wierzyła, że ​​wiele dolegliwości ma przyczynę nadprzyrodzoną – zemstę bóstwa, złego ducha lub złe oko rzucone przez wroga. W rezultacie chorzy zwracali się zarówno do bogów, jak i do lekarzy. Medycyna praktyczna była bardzo ściśle związana z religią i często towarzyszyły jej religijne zaklęcia recytowane przez medycznie przeszkolonych kapłanów. Większość lekarzy była w rzeczywistości kapłanami, którzy używali magii i zaklęć, aby uzupełnić medycynę praktyczną, aby uspokoić ducha lub boga. Kapłanów wysoko ceniono, ponieważ codziennie rozmawiali z boskością. Kapłani niektórych bóstw byli bardziej niż inni skłonni zwrócić się do medycyny. Najważniejszymi bóstwami związanymi z medycyną były:

* Sekhmet, bogini wojny, epidemii i plag o lwicy głowie

* Selqet, bogini skorpionów, do której kapłanów zwracano się o leczenie ukąszeń i użądleń jadowitych gadów, skorpionów i ptaszników

* Thoth, bóg wiedzy o głowie ibisa, który często był akredytowany do pisania formuł uzdrawiania

Większość zawodów była przekazywana z ojca na syna , więc niektóre rodziny kapłańskie, które zwróciły się ku medycynie, utrzymywały ten zawód przez pokolenia. Dobrze wyszkolony i skuteczny lekarz był bez wątpienia zajęty, dobrze opłacany i szanowany w społeczności. Sąsiednie kraje bardzo szanowały egipskich lekarzy, a zapisy pokazują, że zagraniczni królowie prosili o leczenie egipskiego lekarza.

Trening medyczny

Aby zakwalifikować się jako elitarny lekarz, młody student medycyny został przeszkolony w Domu Życia, niezwykłej instytucji edukacyjnej, która zapewniała kształcenie medyczne, skrybskie i kapłańskie, a także mieściła obszerną bibliotekę.  Kształcenie medyczne i przygotowanie kapłańskie szły zapewne w parze. Większość instytucji Domu Życia była przyłączona do świątyń. Tak było w przypadku Bubastis, Edfu, Amarny i Kom Ombo. Najsłynniejszy Dom Życia został założony przez Imhotepa (budowniczego piramidy schodkowej w Sakkarze) w Memfis; był używany od Starego Państwa aż do okresu grecko-rzymskiego – okresu ponad 2000 lat. Chociaż lekarze byli formalnie przeszkoleni, nie musieli zdawać egzaminów, aby ćwiczyć. Podobnie jak w dzisiejszym zawodzie medycznym, obowiązywała ścisła hierarchia według umiejętności i doświadczenia:

* Senenu (lekarzy świeccy) byli lekarzami najniższej rangi. Byli

często skrybowie, którzy potrafili czytać teksty medyczne.

* Kherep senenu byli kontrolerami lekarzy i nadzorowali pracę wielu lekarzy senenu.

*Sau (magicy lekarze) byli generalnie kapłanami Sekhmeta, którzy posiadali kwalifikacje medyczne, lecz leczyli tylko osoby, które bogini w jakiś sposób ukarała.

* Pasterz odbytu faraona był spektakularnym tytułem dla lekarza, który dał królowi lewatywy.

* Specjalistami byli lekarze, którzy koncentrowali się na jednej konkretnej dolegliwości, podobnie jak dziś lekarze. Starożytne egipskie specjalności obejmowały oczy, zęby, usta, bóle brzucha i „niepewne choroby”.

Zamiast studenta wybierającego i realizującego gałąź medycyny jako karierę, stanowisko było podyktowane posiadanymi umiejętnościami. Niektórzy lekarze byli więc bardziej wykwalifikowani niż inni.

Chatbot z Pytonem : Pisanie kodu w języku Python w celu uczenia modelu i przewidywania

https://szkolazpieklarodem.pl/

Otwórzmy nowy plik .ipynb i zacznijmy pisać nasz kod. Nazwijmy ipynb rasa-nlu.ipynb. Upewnij się, że pomyślnie zainstalowałeś rasa-nlu==0.13.2 dla używanej wersji Pythona. Poniżej przedstawiono, jak wygląda nasz kod, gdy korzystamy z plików data.json i config.json w języku Python i trenujemy model przy użyciu potoku tensorflow_embedding.

from rasa_nlu.training_data import load_data

from rasa_nlu.model import Trainer

from rasa_nlu import config

from rasa_nlu.model import Interpreter

def train_horoscopebot(data_json, config_file, model_dir):

training_data = load_data(data_json)

trainer = Trainer(config.load(config_file))

trainer.train(training_data)

model_directory = trainer.persist(model_dir, fixed_model_name =

‘horoscopebot’)

def predict_intent(text):

interpreter = Interpreter.load(‘./models/nlu/default/horoscopebot’)

print(interpreter.parse(text))

W pierwszej części kodu importujemy wszystkie potrzebne biblioteki z pakietu rasa_nlu. Następnie definiujemy dwie metody zwane train_horoskopbot i przewidywanie_intent, gdzie pierwsza metoda szkoli model na podstawie danych, pliku konfiguracyjnego i katalogu_modelu (miejsca do przechowywania modeli), a metoda przewidywania_intent wykorzystuje model Interpretera z rasa_nlu do załadowania wstępnie wyszkolonych plików modelu i daje użytkownikowi możliwość przewidzenia nowych przykładów tekstu.

Trenowanie modelu

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 : Badanie ogólnego stanu zdrowia Egipcjan

https://szkolazpieklarodem.pl/

Liczne zachowane akta medyczne, szczątki ludzkie, a nawet dokładne badanie osad może dać szczegółowy obraz ogólnego stanu zdrowia Egipcjan. Według współczesnych standardów starożytni Egipcjanie byliby niezdrowi, ale w dużej mierze wynikało to z ich warunków życia. W wielu osadach ludzie żyli w bardzo bliskim kontakcie, w jednym czteroizbowym domu mieszkało kilkanaście osób. Dowody w wiosce robotniczej w Amarnie wskazują na szerzącą się obecność pluskiew, pcheł i szczurów – wszystko to pomaga w rozprzestrzenianiu się chorób. Dodatkowe dowody sugerują, że dżuma (podobna do dżumy dymieniczej) rozprzestrzeniła się w mieście Amarna podczas XVIII dynastii, zabijając wielu ludzi, w tym większość rodziny królewskiej. Inne epidemie prawdopodobnie wystąpiły z powodu zatłoczonych warunków życia, ale trudno je prześledzić w zapisach archeologicznych, zwłaszcza jeśli nie były tak śmiertelne jak dżuma dymienicza. Przeciętny Egipcjanin miał ciężkie życie i prawdopodobnie cierpiał na jedną lub wszystkie z poniższych dolegliwości:

* Ropnie zębowe, które spowodowały utratę zębów i rozpuszczenie kości szczęki

* Pasożytnicze robaki jelitowe, najczęstsze to bilharcja

* Zaburzenia oddychania spowodowane piaszczystym środowiskiem

* Choroba zwyrodnieniowa stawów

* Ślepota, zwłaszcza wśród robotników, którzy budowali grobowce królewskie

Na podstawie badań tysięcy mumii z Egiptu średni wiek śmierci wynosił tylko 36 lat, chociaż istnieje szereg wyjątków. Osoby, które dożyły 40, 50 i 60 lat, pochodziły jednak ze wszystkich środowisk, więc status i bogactwo niekoniecznie były czynnikami wpływającymi na długość życia. Dożycie sędziwego wieku było bardziej szczęściem niż osądem; liczne śmiertelne choroby i infekcje dotknęły wszystkich Egipcjan.

Chatbot z Pytonem : Tworzenie pliku konfiguracyjnego

https://szkolazpieklarodem.pl/

Utwórzmy ponownie plik JSON w ten sam sposób, w jaki utworzyliśmy go wcześniej za pomocą Jupytera i nazwijmy go config.json. Trzymajmy go poza naszym folderem danych (czyli w horoskopie_bocie, czyli katalogu naszego projektu). Dodaj do niego następującą konfigurację:

{

“pipeline”: “tensorflow_embedding”,

“ścieżka”:”./modele/nlu”,

“dane”:”./data/data.json”

}

Jak widać, w naszym pliku config.json znajduje się kilka ważnych parametrów konfiguracyjnych. Spróbujmy je zrozumieć.

  • potok: Pipeline określi, jakie funkcje lub ekstraktory funkcji zostaną użyte do przetwarzania wiadomości tekstowych i wydobywania niezbędnych informacji. W naszym przypadku używamy tensorflow_embedding.
  • ścieżka: ścieżka jest zasadniczo katalogiem, w którym przechowujemy nasz model treningowy. Zamierzamy przechowywać nasz model w folderze /models/nlu.
  • dane: dane to ścieżka, którą musimy określić; to w zasadzie miejsce, w którym jesteśmy, dane treningowe siedzą.

Gdy skończymy z plikiem config.json, przejdźmy do kodu Pythona, aby wytrenować nasz model ML.

KONFIGURACJA YAML-a

Możesz także użyć pliku .yml jako plików konfiguracyjnych, jak poniżej. Możesz pobrać przykładowe pliki config.yml w repozytorium github.

  • Przykład 1:

language: “en”

pipeline: “tensorflow_embedding”

  • Przykład 2:

language: “en”

pipeline:

– name: “nlp_spacy”

– name: “tokenizer_spacy”

– name: “intent_entity_featurizer_regex”

– name: “intent_featurizer_spacy”

– name: “ner_crf”

– name: “ner_synonyms”

– name: “intent_classifier_sklearn”

Wszystkie przychodzące wiadomości są przetwarzane według określonej sekwencji komponentów. Zdefiniowane komponenty są uruchamiane sekwencyjnie, jeden po drugim, dlatego nazywane są potokiem przetwarzania. Różne komponenty są używane do różnych celów, takich jak wyodrębnianie jednostek, klasyfikacja zamiarów, przetwarzanie wstępne itp. Zaletą takiego formatu jest to, że możemy określić predefiniowane potoki przez Rasa w sposób jasny.

Per-āa : Dbanie o zdrowie: choroby i medycyna

https://szkolazpieklarodem.pl/

Choroba to coś, co nęka każde społeczeństwo (zamierzona gra słów) – starożytna i współczesna. Papirusy medyczne i zmumifikowane szczątki dostarczają wielu dowodów na choroby, na które cierpieli starożytni Egipcjanie. Te resztki pomagają również nakreślić jasny obraz profesji medycznej w faraońskim Egipcie, w tym niektóre nieprzemyślane terapie, a także kilka zaskakująco skutecznych kuracji. Jestem pewien, że pod koniec już nigdy nie będziesz narzekać na służbę zdrowia! Tu poznasz starożytnych egipskich lekarzy, zapoznasz się z ich zapisami i zachwycisz się pomysłowością – i całkowitą dziwacznością – wielu leków, z których niektóre stanowią podstawę współczesnej medycyny.

Chatbot z Pytonem : Trenowanie modelu Chatbota

https://szkolazpieklarodem.pl/

W tej sekcji będziemy trenować model na przygotowanych przez nas danych. Ponieważ do tworzenia plików i zarządzania nimi korzystaliśmy z programu Jupyter Notebook, utworzymy nowy plik .ipynb i zaczniemy pisać nasz kod w języku Python w celu uczenia naszego modelu, wybierając jeden z potoków omówionych wcześniej .

Per-āa : Ciesząc się winem

https://szkolazpieklarodem.pl/

Chociaż piwo było podstawowym napojem alkoholowym w starożytnym Egipcie, w Nowym Państwie wino było bardzo popularne, zwłaszcza wśród elity. Wino było luksusową alternatywą dla piwa i było zachowywane na specjalne okazje. W tym regionie istniało wiele winnic, a wielu miejscowych rolników produkowało wino. Ateneusz napisał w 200 rne, że egipskie wina były „blade, przyjemne, aromatyczne i lekko cierpkie, o oleistej jakości”. Podobnie jak we współczesnym świecie, każda amfora wina była oznaczona datą wina, winnicy i winiarza. Inne etykiety z pałacu Malkata w Tebach, domu Amenhotepa III, również informują, jaki rodzaj wina znajdował się w słoju, w tym „mieszane”, „wino na ofiary”, „wino na podatki”, „wino na szczęśliwy powrót ‘ i ‘wino do robienia wesela’. Wszystko to wskazuje, że późniejsi Egipcjanie byli prawdziwymi koneserami wina. Proces produkcji wina był bardzo podobny do tego w niektórych małych nowoczesnych winnicach. Podstawowe kroki obejmują

* Zbieranie winogron

* Deptanie winogron w kadziach z gliny, drewna lub kamienia

* Umieszczanie zmiażdżonej ściółki w dużych arkuszach płótna, które zostały skręcone, aby wycisnąć każdą kroplę soku

* Umożliwienie fermentacji soku winogronowego w słoikach ceramicznych

* Przenoszenie sfermentowanego soku do ustawionych na stojakach słoików, które były zakorkowane perforowanymi uszczelkami, co pozwalało na ulatnianie się tlenku węgla

* Delektowanie się winem po krótkim okresie fermentacji

Z winogron wytwarzano rzadką odmianę wina, zwaną Shedeh, ale podgrzewano ją jak grzane wino. Jeśli podano to na przyjęciu, goście wiedzieli, że ich gospodarz jest zarówno bogaty, jak i wyrafinowany.

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?