<jupyter_start><jupyter_text>Implementing Dialog Managment - **Referent:** <NAME>- **Datum:** 23.01.2020  Outline- Wiederholung von Ansätzen zum Dialogmanagment (DM)  - "regel-basiertes" DM  - "daten-basiertes" / statistisches DM- Kurzvorstellung der in der Demo verwendeten Frameworks  - pandas  - scikit-learn  - Jupyter  - nltk- Beispiel-Implementation des "regel-basierten" DM am Beispiel eines Pizzeria-Chatbots- Beispiel-Implementation des "daten-basierten" / statistisches  DM am Beispiel eines Pizzeria-Chatbots  Wiederholung von Ansätzen zum Dialogmanagment- "regel-basiertes" DM- "daten-basiertes" / statistisches DMWas sind die wichtigsten Unterschiede zwischen diesen Ansätzen?  Kurzvorstellung der in der Demo verwendeten FrameworksFür die Demo im Buch verwendet McTear (2016) die beiden Frameworks Voice-XML und WEKA für Implementation der jeweiligen DM-Ansätze ([s. Git-Repo](https://github.com/zoraidacallejas/ConversationalInterface)). Ich habe dies (vergleichsweise) ähnlich in Python umgesetzt und dafür hautpsächlich folgende Frameworks verwendet:- [pandas](https://pandas.pydata.org/)- [scikit-learn](https://scikit-learn.org/stable/)- [nltk](https://www.nltk.org/)Die Demo läuft hierbei innerhalb eines sog. [Jupyter](https://jupyter.org/)-Notebooks.Allen Code für die Demo könnt ihr von meinem Git-Repository klonen (MIT-Lizenz). Für die Demo habe ich eine kleine Library für das DM mit den beiden o.g. Verfahren geschrieben.Die Demo kann wie folgt importiert werden (auf der Verzeichnis-Ebene des Git Repos):<jupyter_code>import lib<jupyter_output><empty_output><jupyter_text>Die einzelnen Pakete haben hierbei folgende Funktionalitäten und sind objekt-orientiert implementiert:<jupyter_code># lib.data # Vorverarbeitung / Aufbereitung Trainingsdaten für statistisches DM
# lib.dm # Dialogmanagment (Hauptkomponente)
# lib.nlg # Sprachgenerierung auf Basis von Templates
# lib.nlu # Sprachverstehen, d.h. Informationsextraktion aus User Input über Pattern Matching
# lib.training # Training von statistischen DM-Modellen<jupyter_output><empty_output><jupyter_text>Demo (in Pycharm)<jupyter_code>df[df["SYSTEM_ACTION"] == 14]
df[df["SYSTEM_ACTION"] == 9]<jupyter_output><empty_output><jupyter_text>Aufbereiten von Trainingsdaten<jupyter_code># Laden und Vorverarbeitung der Trainingsdaten
from lib.data import TrainDataLoader

tdl = TrainDataLoader("./data/Dialogs_Pizza.txt")
df = tdl.data

print(df.shape)
df.head()<jupyter_output><empty_output><jupyter_text>Die oben stehenden Informationen für alle Dialoge werden im sog. **Dialogue Register (DM)** abgelegt. Hierbei wird zwischen **aufgaben-spezifischer (task-dependent)** und **nicht-aufgaben-spezifischer (task-independent)** Information unterschieden:- **aufgaben-spezifisch**  - TypeOrder  - NumberPizzas  - TypesPizzas  - SizesPizzas  - TypesDoughs  - Drinks- **nicht-aufgaben-spezifisch**  - Acceptance  - Rejection  - NotUnderstood  Training eines Modells<jupyter_code>from lib.training import Trainer
import pandas as pd
data = TrainDataLoader("./data/Dialogs_Pizza.txt").data

# get feature matrix and target variable
X = data.drop(columns=["SYSTEM_ACTION"])
y = data["SYSTEM_ACTION"]

params_svm = {"kernel": ["rbf", "linear"], "gamma": [1e-3, 1e-4],"C": [1, 10, 100, 1000]}

eval_metrics = ['f1']

trainer = Trainer("svm")
trainer.train(X, y, params_svm, eval_metrics)

df_eval_results = pd.DataFrame(trainer.model.cv_results_)
df_eval_results.to_excel("./data/cv_results_svm.xlsx")

df_eval_results

# model persistence
path_to_model = "./data/stat_model.joblib"
trainer.save(path_to_model)

trainer2 = Trainer().load(path_to_model)

trainer2.predict(X)<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.1080860332153553, 'fraction_numerical': 0.00871222433977675, 'mean_word_length': 6.0789980732177264, 'pattern_counts': {'":': 3, '<': 22, '<?xml version=': 0, '>': 22, 'https://': 5, 'lorem ipsum': 0, 'www.': 1, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '5', 'dir': 'jupyter-structured-clean-dedup', 'id': '177589', 'license': 'MIT', 'n_tokens_mistral': 1308, 'n_tokens_neox': 1316, 'n_words': 306, 'path': 'dialog_managment_demo.ipynb', 'repo_name': 'theThing92/dialogue_managment_demo', 'size': '3680'}