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.