Helpdesks mit KI-Unterstützung arbeiten nicht nur schneller – sie tragen auch zur Kunden- und Mitarbeiterzufriedenheit bei.Jacob Lund | shutterstock.com Service-orientierte Unternehmen bearbeiten jeden Tag Tausende von Kunden-E-Mails. Das stellt für die IT-Helpdesks und Customer-Service-Organisationen, die diese Nachrichten lesen, priorisieren und beantworten müssen, eine erhebliche Belastung dar. In vielen Fällen bekommen Kunden deswegen (mindestens) verzögertes Feedback, was sich wiederum negativ auf die Kundenzufriedenheit und -bindung auswirkt. Um die Reaktionszeit von (IT-)Helpdesks zu optimieren, ist es entscheidend, Anfragen präzise zu klassifizieren und priorisieren. Mit einer Kombination aus Textklassifizierung und Sentimentanalysen können Unternehmen noch einen Schritt weiter gehen und die E-Mail-Triage automatisieren. Das ermöglicht, den Helpdesk zu skalieren, zu optimieren und parallel die Betriebskosten zu senken. In diesem Tutorial lesen Sie, wie Sie das ganz konkret umsetzen. Helpdesk-Problem trifft Lösung Das Problem Bei der herkömmlichen E-Mail-Triage müssen menschliche Mitarbeiter E-Mails lesen, kategorisieren und priorisieren. Dieser Ansatz ist: langsam, weil die Mitarbeiter mit einer Flut von E-Mails konfrontiert sind. inkonsistent, weil die Möglichkeit besteht, dass verschiedene Mitarbeiter dieselbe Nachricht unterschiedlich klassifizieren. fehleranfällig, weil kritische Probleme in der Hektik unter den Tisch fallen können. Diese Ineffizienzen lassen sich KI-gestützt, beziehungsweise mit Machine Learning (ML) automatisieren. Der Lösungsansatz E-Mails, die beim Helpdesk auflaufen, lassen sich in der Regel in eine von sechs Kategorien einordnen. Sie beziehen sich in aller Regel auf: Anforderungen (Anfragen nach neuen Features oder Funktionen, die noch nicht vorhanden sind), Verbesserungen (Vorschläge, um bestehende Features oder Funktionen zu optimieren), Fehlermeldungen (Systemfehler, Ausfälle oder sonstiges, unerwartetes Verhalten), Sicherheitsprobleme (Sicherheitslücken, Breaches oder Datenlecks), Feedback (allgemeine positive und negative Vorschläge zum Produkt oder Service), oder Konfigurationsprobleme (Schwierigkeiten bei der Einrichtung von Systemen). Jenseits der Kategorisierung ist es mit Hilfe von Sentiment- beziehungsweise Stimmungsanalysen möglich, auch den emotionalen „Tonfall“ von E-Mails zu erfassen. Das kann zu einer besseren Priorisierung beitragen. Nachfolgend einige Beispiele, wie das mit unserer Lösung konkret aussehen soll. Positives Sentiment: „Ich finde diese Funktion toll, aber können wir X hinzufügen?“. Diese Nachricht wird an das für Verbesserungen zuständige Team weitergeleitet und mit niedriger Priorität gekennzeichnet. Neutrales Sentiment: „Ich habe einen Fehler im Anmeldesystem gefunden“. Diese Nachricht wird an das Bug-Fixing-Team weitergereicht und mit mittlerer Priorität versehen. Negatives Sentiment: „Ihre App ist furchtbar und die Anmeldung funktioniert nicht!“. Diese E-Mail geht an das Team, das für kritische Fehler zuständig ist und wird mit hoher Priorität gekennzeichnet. Der Trainingsdatensatz Wir haben speziell für dieses Projekt einen Dummy-Datensatz erstellt, der Helpdesk-E-Mail-Inhalte simuliert und gelabelte Beispiele aus den oben aufgeführten Kategorien enthält. Jede E-Mail ist zudem mit einem Sentiment-Label ausgestattet, um damit sowohl die Kategorisierung als auch die Priorisierung zu unterstützen. Den Trainingsdatensatz können Sie direkt über dieses GitHub-Repository abrufen. Den vollständige Code für dieses Projekt finden Sie hier. KI-Helpdesk-Lösung umsetzen Im Folgenden lesen Sie, wie Sie die eben beschriebene Lösung ganz konkret in sechs Schritten realisieren. 1. Bibliotheken importieren Unsere Implementierung basiert auf folgenden Komponenten: Pandas für die Datenbearbeitung, NLTK für Natural Language Processing, SentimentIntensityAnalyzer für Sentimentanalysen und Scikit-learn für die Textklassifizierung (unter Verwendung des Multinomial-Naive-Bayes-Klassifikators). import pandas as pd import nltk from nltk.sentiment import SentimentIntensityAnalyzer from sklearn.naive_bayes import MultinomialNB 2. Trainingsdaten vorverarbeiten Indem wir Sonderzeichen, Bindewörter und Artikel entfernen und Wörter per Lemmatisierung auf ihre Grundform reduzieren, verarbeiten wir die Trainingsdaten vor. Diese Maßnahmen verbessern die Datenqualität und damit die Modell-Performance. nltk.download(‘stopwords’) nltk.download(‘wordnet’) nltk.download(‘vader_lexicon’) from nltk.corpus import stopwords from nltk.stem import WordNetLemmatizer #object of WordNetLemmatizer lm = WordNetLemmatizer() def text_transformation(df_col): corpus = [] for item in df_col: new_item = re.sub(‘[^a-zA-Z]’,’ ‘,str(item)) new_item = new_item.lower() new_item = new_item.split() new_item = [lm.lemmatize(word) for word in new_item if word not in set(stopwords.words(‘english’))] corpus.append(‘ ‘.join(str(x) for x in new_item)) return corpus corpus = text_transformation(df_train[‘text’]) Mit CountVectorizer (ebenfalls Bestandteil von Scikit-learn) wandeln wir die Textdaten nun zu Machine-Learning-Zwecken in numerische Daten um. cv = CountVectorizer(ngram_range=(1,2)) traindata = cv.fit_transform(corpus) X = traindata y = df_train.label In diesem Code-Snippet ist zu beachten, dass: CountVectorizer(ngram_range=(1, 2)) den vorverarbeiteten E-Mail-Text (aus dem Korpus) in eine Matrix mit Token-Zählungen umwandelt, die sowohl Unigramme (Einzelwörter) als auch Bigramme (Wortpaare) enthält. X die Feature-Matrix darstellt, die verwendet wird, um das Modell zu trainieren. y die Zielvariable verkörpert, die die E-Mail-Kategorien enthält. 3. Klassifizierungsmodell trainieren Wie bereits erwähnt, verwenden wir das Multinomial-Naïve-Bayes (MNB)-Modell. So können wir unsere Trainingsvektoren an die Werte der Zielvariablen anpassen. classifier = MultinomialNB() classifier.fit(X, y) Dieser probabilistische Algorithmus eignet sich besonders gut für Textklassifizierungsaufgaben, bei denen die Merkmale auf Wortzählungen oder -häufigkeiten basieren. Das passt besonders gut zu unseren Daten, weil: diese aus gelabelten E-Mail-Texten bestehen, deren Features (Wörter und Sätze) naturgemäß als diskrete Zählungen oder Häufigkeiten dargestellt werden. der Output von CountVectorizer oder TfidfVectorizer eine große Sparse-Matrix mit Wortvorkommen kreiert, die das MNB-Modell effizient und effektiv verarbeitet – ohne Overfitting. wir E-Mails in sechs verschiedene Klassen einordnen und MNB standardmäßig Multi-Class-Klassifizierung unterstützt. das MNB-Modell leichtgewichtig ist und ein besonders schnelles Modelltraining gewährleistet – was insbesondere hilfreich ist, wenn Sie Feature Engineering iterieren oder mit Dummy-Datensätzen arbeiten. MNB bei Textklassifizierungsaufgaben selbst mit minimaler Feinabstimmung in aller Regel gute Ergebnisse liefert. Multinomial Naïve Bayes ist ein simpler und effektiver Startpunkt – es ist jedoch ganz generell zu empfehlen, mehrere ML-Algorithmen zu testen. So können etwa auch das Regressionsmodell, Support Vector Machines, Entscheidungsbäume oder Deep-Learning-Modelle wie LSTM und BERT gute Textklassifizierungsergebnisse liefern. Um die Performanz verschiedener ML-Modelle miteinander zu vergleichen, kommen Bewertungs-Metriken zum Einsatz wie: Genauigkeit: Der Prozentsatz der insgesamt korrekten Vorhersagen. Die Genauigkeit ist am höchsten, wenn die Klassen ausgewogen sind. Präzision: Der Prozentsatz aller E-Mails, die das Modell einer bestimmte Kategorie korrekt zugeordnet hat. Recall: Der Prozentsatz aller vom Modell korrekt identifizierten und kategorisierten E-Mails. F1-Score: Der Mittelwert aus Präzision und Recall. Der F1-Score bietet ein ausgewogenes Maß für die Performance, wenn sowohl falsche Positive als auch falsche Negative eine Rolle spielen. Support: Gibt an, wie viele tatsächliche Beispiele für jede Klasse vorgelegen haben. Diese Metrik ist hilfreich, um die Klassenverteilung zu verstehen. 4. Klassifizierungsmodell testen und bewerten Im nachfolgende Code-Snippet werden in Kombination: Testdaten vorverarbeitet, Zielwerte aus den Testdaten vorhergesagt, sowie die Modellleistung durch die Confusion Matrix dargestellt und Genauigkeit, Präzision und Recall berechnet. Dann vergleicht die Confusion-Matrix die Vorhersagen des Modells mit den tatsächlichen Labels. Der folgende Klassifizierungs-Report fasst die Bewertungsmetriken für jede Klasse zusammen. #Reading Test Data test_df = pd.read_csv(test_Data.txt’,delimiter=’;’,names=[‘text’,’label’]) # Applying same transformation as on Train Data X_test,y_test = test_df.text,test_df.label #pre-processing of text test_corpus = text_transformation(X_test) #convert text data into vectors testdata = cv.transform(test_corpus) #predict the target predictions = clf.predict(testdata) #evaluating model performance parameters mlp.rcParams[‘figure.figsize’] = 10,5 plot_confusion_matrix(y_test,predictions) print(‘Accuracy_score: ‘, accuracy_score(y_test,predictions)) print(‘Precision_score: ‘, precision_score(y_test,predictions,average=’micro’)) print(‘Recall_score: ‘, recall_score(y_test,predictions,average=’micro’)) print(classification_report(y_test,predictions)) IDG IDG Die akzeptablen Schwellenwerte variieren zwar je nach Anwendungsfall, aber ein F1-Wert über 0,80 gilt im Allgemeinen als gut, wenn es um Multi-Class-Textklassifizierungen geht. Entsprechend demonstriert der F1-Wert von 0,8409, dass unser Modell in allen sechs E-Mail-Kategorien zuverlässig funktioniert. Folgende Faustregeln sollten Sie mit Blick auf die Performance-Metriken im Hinterkopf behalten: Wenn sowohl die Genauigkeit als auch der F1-Wert über 0,80 liegen, gilt das Modell für viele Business-Szenarien als produktionsreif. Wenn der Recall-Wert niedrig ist, entgehen dem Modell möglicherweise wichtige Fälle – was für E-Mail-Triage entscheidend ist. Wenn der Präzisionswert niedrig ist, flaggt das Modell möglicherweise bestimmte E-Mails falsch, was bei sensiblen Kategorien wie IT Security problematisch ist. 5. Sentimentanalyse integrieren Um E-Mails nach Sentiment zu bewerten, integrieren wir nun den SentimentIntensityAnalyzer von NLTK. Dabei setzen wir setzen die Priorität für negative Stimmung auf hoch, für neutrale auf mittel und für positive auf niedrig. sia = SentimentIntensityAnalyzer() def get_sentiment(text): # Predict Category (Ensure it is a string) category = clf.predict(cv.transform([text]))[0] # Extract first element # Sentiment Analysis sentiment_score = sia.polarity_scores(text)[‘compound’] if sentiment_score >= 0.05: sentiment = “Positive” elif sentiment_score 6. Testing Beispiel 1 email_sentiments = get_sentiment(‘Your app is terrible and not secure, login doesn’t work!’) print(email_sentiments) Output – { ‘Category’: ‘SecurityIssues’, ‘Sentiment’: ‘Negative’,’Priority’: ‘High’} Beispiel 2 email_sentiments = get_sentiment(‘Add advanced filtering and export options for reports’) print(email_sentiments) Output – { ‘Category’: ‘RequirementEnhancement’,’Sentiment’: ‘Positive’,’Priority’: ‘Low’ } (fm) Sie wollen weitere interessante Beiträge zu diversen Themen aus der IT-Welt lesen? Unsere kostenlosen Newsletter liefern Ihnen alles, was IT-Profis wissen sollten – direkt in Ihre Inbox!
KI-Tutorial für bessere Helpdesks
Helpdesks mit KI-Unterstützung arbeiten nicht nur schneller – sie tragen auch zur Kunden- und Mitarbeiterzufriedenheit bei.Jacob Lund | shutterstock.com Service-orientierte Unternehmen bearbeiten jeden Tag Tausende von Kunden-E-Mails. Das stellt für die IT-Helpdesks und Customer-Service-Organisationen, die diese Nachrichten lesen, priorisieren und beantworten müssen, eine erhebliche Belastung dar. In vielen Fällen bekommen Kunden deswegen (mindestens) verzögertes Feedback, was sich wiederum negativ auf die Kundenzufriedenheit und -bindung auswirkt. Um die Reaktionszeit von (IT-)Helpdesks zu optimieren, ist es entscheidend, Anfragen präzise zu klassifizieren und priorisieren. Mit einer Kombination aus Textklassifizierung und Sentimentanalysen können Unternehmen noch einen Schritt weiter gehen und die E-Mail-Triage automatisieren. Das ermöglicht, den Helpdesk zu skalieren, zu optimieren und parallel die Betriebskosten zu senken. In diesem Tutorial lesen Sie, wie Sie das ganz konkret umsetzen. Helpdesk-Problem trifft Lösung Das Problem Bei der herkömmlichen E-Mail-Triage müssen menschliche Mitarbeiter E-Mails lesen, kategorisieren und priorisieren. Dieser Ansatz ist: langsam, weil die Mitarbeiter mit einer Flut von E-Mails konfrontiert sind. inkonsistent, weil die Möglichkeit besteht, dass verschiedene Mitarbeiter dieselbe Nachricht unterschiedlich klassifizieren. fehleranfällig, weil kritische Probleme in der Hektik unter den Tisch fallen können. Diese Ineffizienzen lassen sich KI-gestützt, beziehungsweise mit Machine Learning (ML) automatisieren. Der Lösungsansatz E-Mails, die beim Helpdesk auflaufen, lassen sich in der Regel in eine von sechs Kategorien einordnen. Sie beziehen sich in aller Regel auf: Anforderungen (Anfragen nach neuen Features oder Funktionen, die noch nicht vorhanden sind), Verbesserungen (Vorschläge, um bestehende Features oder Funktionen zu optimieren), Fehlermeldungen (Systemfehler, Ausfälle oder sonstiges, unerwartetes Verhalten), Sicherheitsprobleme (Sicherheitslücken, Breaches oder Datenlecks), Feedback (allgemeine positive und negative Vorschläge zum Produkt oder Service), oder Konfigurationsprobleme (Schwierigkeiten bei der Einrichtung von Systemen). Jenseits der Kategorisierung ist es mit Hilfe von Sentiment- beziehungsweise Stimmungsanalysen möglich, auch den emotionalen „Tonfall“ von E-Mails zu erfassen. Das kann zu einer besseren Priorisierung beitragen. Nachfolgend einige Beispiele, wie das mit unserer Lösung konkret aussehen soll. Positives Sentiment: „Ich finde diese Funktion toll, aber können wir X hinzufügen?“. Diese Nachricht wird an das für Verbesserungen zuständige Team weitergeleitet und mit niedriger Priorität gekennzeichnet. Neutrales Sentiment: „Ich habe einen Fehler im Anmeldesystem gefunden“. Diese Nachricht wird an das Bug-Fixing-Team weitergereicht und mit mittlerer Priorität versehen. Negatives Sentiment: „Ihre App ist furchtbar und die Anmeldung funktioniert nicht!“. Diese E-Mail geht an das Team, das für kritische Fehler zuständig ist und wird mit hoher Priorität gekennzeichnet. Der Trainingsdatensatz Wir haben speziell für dieses Projekt einen Dummy-Datensatz erstellt, der Helpdesk-E-Mail-Inhalte simuliert und gelabelte Beispiele aus den oben aufgeführten Kategorien enthält. Jede E-Mail ist zudem mit einem Sentiment-Label ausgestattet, um damit sowohl die Kategorisierung als auch die Priorisierung zu unterstützen. Den Trainingsdatensatz können Sie direkt über dieses GitHub-Repository abrufen. Den vollständige Code für dieses Projekt finden Sie hier. KI-Helpdesk-Lösung umsetzen Im Folgenden lesen Sie, wie Sie die eben beschriebene Lösung ganz konkret in sechs Schritten realisieren. 1. Bibliotheken importieren Unsere Implementierung basiert auf folgenden Komponenten: Pandas für die Datenbearbeitung, NLTK für Natural Language Processing, SentimentIntensityAnalyzer für Sentimentanalysen und Scikit-learn für die Textklassifizierung (unter Verwendung des Multinomial-Naive-Bayes-Klassifikators). import pandas as pd import nltk from nltk.sentiment import SentimentIntensityAnalyzer from sklearn.naive_bayes import MultinomialNB 2. Trainingsdaten vorverarbeiten Indem wir Sonderzeichen, Bindewörter und Artikel entfernen und Wörter per Lemmatisierung auf ihre Grundform reduzieren, verarbeiten wir die Trainingsdaten vor. Diese Maßnahmen verbessern die Datenqualität und damit die Modell-Performance. nltk.download('stopwords') nltk.download('wordnet') nltk.download('vader_lexicon') from nltk.corpus import stopwords from nltk.stem import WordNetLemmatizer #object of WordNetLemmatizer lm = WordNetLemmatizer() def text_transformation(df_col): corpus = [] for item in df_col: new_item = re.sub('[^a-zA-Z]',' ',str(item)) new_item = new_item.lower() new_item = new_item.split() new_item = [lm.lemmatize(word) for word in new_item if word not in set(stopwords.words('english'))] corpus.append(' '.join(str(x) for x in new_item)) return corpus corpus = text_transformation(df_train['text']) Mit CountVectorizer (ebenfalls Bestandteil von Scikit-learn) wandeln wir die Textdaten nun zu Machine-Learning-Zwecken in numerische Daten um. cv = CountVectorizer(ngram_range=(1,2)) traindata = cv.fit_transform(corpus) X = traindata y = df_train.label In diesem Code-Snippet ist zu beachten, dass: CountVectorizer(ngram_range=(1, 2)) den vorverarbeiteten E-Mail-Text (aus dem Korpus) in eine Matrix mit Token-Zählungen umwandelt, die sowohl Unigramme (Einzelwörter) als auch Bigramme (Wortpaare) enthält. X die Feature-Matrix darstellt, die verwendet wird, um das Modell zu trainieren. y die Zielvariable verkörpert, die die E-Mail-Kategorien enthält. 3. Klassifizierungsmodell trainieren Wie bereits erwähnt, verwenden wir das Multinomial-Naïve-Bayes (MNB)-Modell. So können wir unsere Trainingsvektoren an die Werte der Zielvariablen anpassen. classifier = MultinomialNB() classifier.fit(X, y) Dieser probabilistische Algorithmus eignet sich besonders gut für Textklassifizierungsaufgaben, bei denen die Merkmale auf Wortzählungen oder -häufigkeiten basieren. Das passt besonders gut zu unseren Daten, weil: diese aus gelabelten E-Mail-Texten bestehen, deren Features (Wörter und Sätze) naturgemäß als diskrete Zählungen oder Häufigkeiten dargestellt werden. der Output von CountVectorizer oder TfidfVectorizer eine große Sparse-Matrix mit Wortvorkommen kreiert, die das MNB-Modell effizient und effektiv verarbeitet – ohne Overfitting. wir E-Mails in sechs verschiedene Klassen einordnen und MNB standardmäßig Multi-Class-Klassifizierung unterstützt. das MNB-Modell leichtgewichtig ist und ein besonders schnelles Modelltraining gewährleistet – was insbesondere hilfreich ist, wenn Sie Feature Engineering iterieren oder mit Dummy-Datensätzen arbeiten. MNB bei Textklassifizierungsaufgaben selbst mit minimaler Feinabstimmung in aller Regel gute Ergebnisse liefert. Multinomial Naïve Bayes ist ein simpler und effektiver Startpunkt – es ist jedoch ganz generell zu empfehlen, mehrere ML-Algorithmen zu testen. So können etwa auch das Regressionsmodell, Support Vector Machines, Entscheidungsbäume oder Deep-Learning-Modelle wie LSTM und BERT gute Textklassifizierungsergebnisse liefern. Um die Performanz verschiedener ML-Modelle miteinander zu vergleichen, kommen Bewertungs-Metriken zum Einsatz wie: Genauigkeit: Der Prozentsatz der insgesamt korrekten Vorhersagen. Die Genauigkeit ist am höchsten, wenn die Klassen ausgewogen sind. Präzision: Der Prozentsatz aller E-Mails, die das Modell einer bestimmte Kategorie korrekt zugeordnet hat. Recall: Der Prozentsatz aller vom Modell korrekt identifizierten und kategorisierten E-Mails. F1-Score: Der Mittelwert aus Präzision und Recall. Der F1-Score bietet ein ausgewogenes Maß für die Performance, wenn sowohl falsche Positive als auch falsche Negative eine Rolle spielen. Support: Gibt an, wie viele tatsächliche Beispiele für jede Klasse vorgelegen haben. Diese Metrik ist hilfreich, um die Klassenverteilung zu verstehen. 4. Klassifizierungsmodell testen und bewerten Im nachfolgende Code-Snippet werden in Kombination: Testdaten vorverarbeitet, Zielwerte aus den Testdaten vorhergesagt, sowie die Modellleistung durch die Confusion Matrix dargestellt und Genauigkeit, Präzision und Recall berechnet. Dann vergleicht die Confusion-Matrix die Vorhersagen des Modells mit den tatsächlichen Labels. Der folgende Klassifizierungs-Report fasst die Bewertungsmetriken für jede Klasse zusammen. #Reading Test Data test_df = pd.read_csv(test_Data.txt',delimiter=';',names=['text','label']) # Applying same transformation as on Train Data X_test,y_test = test_df.text,test_df.label #pre-processing of text test_corpus = text_transformation(X_test) #convert text data into vectors testdata = cv.transform(test_corpus) #predict the target predictions = clf.predict(testdata) #evaluating model performance parameters mlp.rcParams['figure.figsize'] = 10,5 plot_confusion_matrix(y_test,predictions) print('Accuracy_score: ', accuracy_score(y_test,predictions)) print('Precision_score: ', precision_score(y_test,predictions,average='micro')) print('Recall_score: ', recall_score(y_test,predictions,average='micro')) print(classification_report(y_test,predictions)) IDG IDG Die akzeptablen Schwellenwerte variieren zwar je nach Anwendungsfall, aber ein F1-Wert über 0,80 gilt im Allgemeinen als gut, wenn es um Multi-Class-Textklassifizierungen geht. Entsprechend demonstriert der F1-Wert von 0,8409, dass unser Modell in allen sechs E-Mail-Kategorien zuverlässig funktioniert. Folgende Faustregeln sollten Sie mit Blick auf die Performance-Metriken im Hinterkopf behalten: Wenn sowohl die Genauigkeit als auch der F1-Wert über 0,80 liegen, gilt das Modell für viele Business-Szenarien als produktionsreif. Wenn der Recall-Wert niedrig ist, entgehen dem Modell möglicherweise wichtige Fälle – was für E-Mail-Triage entscheidend ist. Wenn der Präzisionswert niedrig ist, flaggt das Modell möglicherweise bestimmte E-Mails falsch, was bei sensiblen Kategorien wie IT Security problematisch ist. 5. Sentimentanalyse integrieren Um E-Mails nach Sentiment zu bewerten, integrieren wir nun den SentimentIntensityAnalyzer von NLTK. Dabei setzen wir setzen die Priorität für negative Stimmung auf hoch, für neutrale auf mittel und für positive auf niedrig. sia = SentimentIntensityAnalyzer() def get_sentiment(text): # Predict Category (Ensure it is a string) category = clf.predict(cv.transform([text]))[0] # Extract first element # Sentiment Analysis sentiment_score = sia.polarity_scores(text)['compound'] if sentiment_score >= 0.05: sentiment = "Positive" elif sentiment_score 6. Testing Beispiel 1 email_sentiments = get_sentiment('Your app is terrible and not secure, login doesn’t work!') print(email_sentiments) Output - { 'Category': 'SecurityIssues', 'Sentiment': 'Negative','Priority': 'High'} Beispiel 2 email_sentiments = get_sentiment('Add advanced filtering and export options for reports') print(email_sentiments) Output - { 'Category': 'RequirementEnhancement','Sentiment': 'Positive','Priority': 'Low' } (fm) Sie wollen weitere interessante Beiträge zu diversen Themen aus der IT-Welt lesen? Unsere kostenlosen Newsletter liefern Ihnen alles, was IT-Profis wissen sollten – direkt in Ihre Inbox!
KI-Tutorial für bessere Helpdesks Helpdesks mit KI-Unterstützung arbeiten nicht nur schneller – sie tragen auch zur Kunden- und Mitarbeiterzufriedenheit bei.Jacob Lund | shutterstock.com Service-orientierte Unternehmen bearbeiten jeden Tag Tausende von Kunden-E-Mails. Das stellt für die IT-Helpdesks und Customer-Service-Organisationen, die diese Nachrichten lesen, priorisieren und beantworten müssen, eine erhebliche Belastung dar. In vielen Fällen bekommen Kunden deswegen (mindestens) verzögertes Feedback, was sich wiederum negativ auf die Kundenzufriedenheit und -bindung auswirkt. Um die Reaktionszeit von (IT-)Helpdesks zu optimieren, ist es entscheidend, Anfragen präzise zu klassifizieren und priorisieren. Mit einer Kombination aus Textklassifizierung und Sentimentanalysen können Unternehmen noch einen Schritt weiter gehen und die E-Mail-Triage automatisieren. Das ermöglicht, den Helpdesk zu skalieren, zu optimieren und parallel die Betriebskosten zu senken. In diesem Tutorial lesen Sie, wie Sie das ganz konkret umsetzen. Helpdesk-Problem trifft Lösung Das Problem Bei der herkömmlichen E-Mail-Triage müssen menschliche Mitarbeiter E-Mails lesen, kategorisieren und priorisieren. Dieser Ansatz ist: langsam, weil die Mitarbeiter mit einer Flut von E-Mails konfrontiert sind. inkonsistent, weil die Möglichkeit besteht, dass verschiedene Mitarbeiter dieselbe Nachricht unterschiedlich klassifizieren. fehleranfällig, weil kritische Probleme in der Hektik unter den Tisch fallen können. Diese Ineffizienzen lassen sich KI-gestützt, beziehungsweise mit Machine Learning (ML) automatisieren. Der Lösungsansatz E-Mails, die beim Helpdesk auflaufen, lassen sich in der Regel in eine von sechs Kategorien einordnen. Sie beziehen sich in aller Regel auf: Anforderungen (Anfragen nach neuen Features oder Funktionen, die noch nicht vorhanden sind), Verbesserungen (Vorschläge, um bestehende Features oder Funktionen zu optimieren), Fehlermeldungen (Systemfehler, Ausfälle oder sonstiges, unerwartetes Verhalten), Sicherheitsprobleme (Sicherheitslücken, Breaches oder Datenlecks), Feedback (allgemeine positive und negative Vorschläge zum Produkt oder Service), oder Konfigurationsprobleme (Schwierigkeiten bei der Einrichtung von Systemen). Jenseits der Kategorisierung ist es mit Hilfe von Sentiment- beziehungsweise Stimmungsanalysen möglich, auch den emotionalen „Tonfall“ von E-Mails zu erfassen. Das kann zu einer besseren Priorisierung beitragen. Nachfolgend einige Beispiele, wie das mit unserer Lösung konkret aussehen soll. Positives Sentiment: „Ich finde diese Funktion toll, aber können wir X hinzufügen?“. Diese Nachricht wird an das für Verbesserungen zuständige Team weitergeleitet und mit niedriger Priorität gekennzeichnet. Neutrales Sentiment: „Ich habe einen Fehler im Anmeldesystem gefunden“. Diese Nachricht wird an das Bug-Fixing-Team weitergereicht und mit mittlerer Priorität versehen. Negatives Sentiment: „Ihre App ist furchtbar und die Anmeldung funktioniert nicht!“. Diese E-Mail geht an das Team, das für kritische Fehler zuständig ist und wird mit hoher Priorität gekennzeichnet. Der Trainingsdatensatz Wir haben speziell für dieses Projekt einen Dummy-Datensatz erstellt, der Helpdesk-E-Mail-Inhalte simuliert und gelabelte Beispiele aus den oben aufgeführten Kategorien enthält. Jede E-Mail ist zudem mit einem Sentiment-Label ausgestattet, um damit sowohl die Kategorisierung als auch die Priorisierung zu unterstützen. Den Trainingsdatensatz können Sie direkt über dieses GitHub-Repository abrufen. Den vollständige Code für dieses Projekt finden Sie hier. KI-Helpdesk-Lösung umsetzen Im Folgenden lesen Sie, wie Sie die eben beschriebene Lösung ganz konkret in sechs Schritten realisieren. 1. Bibliotheken importieren Unsere Implementierung basiert auf folgenden Komponenten: Pandas für die Datenbearbeitung, NLTK für Natural Language Processing, SentimentIntensityAnalyzer für Sentimentanalysen und Scikit-learn für die Textklassifizierung (unter Verwendung des Multinomial-Naive-Bayes-Klassifikators). import pandas as pd import nltk from nltk.sentiment import SentimentIntensityAnalyzer from sklearn.naive_bayes import MultinomialNB 2. Trainingsdaten vorverarbeiten Indem wir Sonderzeichen, Bindewörter und Artikel entfernen und Wörter per Lemmatisierung auf ihre Grundform reduzieren, verarbeiten wir die Trainingsdaten vor. Diese Maßnahmen verbessern die Datenqualität und damit die Modell-Performance. nltk.download('stopwords') nltk.download('wordnet') nltk.download('vader_lexicon') from nltk.corpus import stopwords from nltk.stem import WordNetLemmatizer #object of WordNetLemmatizer lm = WordNetLemmatizer() def text_transformation(df_col): corpus = [] for item in df_col: new_item = re.sub('[^a-zA-Z]',' ',str(item)) new_item = new_item.lower() new_item = new_item.split() new_item = [lm.lemmatize(word) for word in new_item if word not in set(stopwords.words('english'))] corpus.append(' '.join(str(x) for x in new_item)) return corpus corpus = text_transformation(df_train['text']) Mit CountVectorizer (ebenfalls Bestandteil von Scikit-learn) wandeln wir die Textdaten nun zu Machine-Learning-Zwecken in numerische Daten um. cv = CountVectorizer(ngram_range=(1,2)) traindata = cv.fit_transform(corpus) X = traindata y = df_train.label In diesem Code-Snippet ist zu beachten, dass: CountVectorizer(ngram_range=(1, 2)) den vorverarbeiteten E-Mail-Text (aus dem Korpus) in eine Matrix mit Token-Zählungen umwandelt, die sowohl Unigramme (Einzelwörter) als auch Bigramme (Wortpaare) enthält. X die Feature-Matrix darstellt, die verwendet wird, um das Modell zu trainieren. y die Zielvariable verkörpert, die die E-Mail-Kategorien enthält. 3. Klassifizierungsmodell trainieren Wie bereits erwähnt, verwenden wir das Multinomial-Naïve-Bayes (MNB)-Modell. So können wir unsere Trainingsvektoren an die Werte der Zielvariablen anpassen. classifier = MultinomialNB() classifier.fit(X, y) Dieser probabilistische Algorithmus eignet sich besonders gut für Textklassifizierungsaufgaben, bei denen die Merkmale auf Wortzählungen oder -häufigkeiten basieren. Das passt besonders gut zu unseren Daten, weil: diese aus gelabelten E-Mail-Texten bestehen, deren Features (Wörter und Sätze) naturgemäß als diskrete Zählungen oder Häufigkeiten dargestellt werden. der Output von CountVectorizer oder TfidfVectorizer eine große Sparse-Matrix mit Wortvorkommen kreiert, die das MNB-Modell effizient und effektiv verarbeitet – ohne Overfitting. wir E-Mails in sechs verschiedene Klassen einordnen und MNB standardmäßig Multi-Class-Klassifizierung unterstützt. das MNB-Modell leichtgewichtig ist und ein besonders schnelles Modelltraining gewährleistet – was insbesondere hilfreich ist, wenn Sie Feature Engineering iterieren oder mit Dummy-Datensätzen arbeiten. MNB bei Textklassifizierungsaufgaben selbst mit minimaler Feinabstimmung in aller Regel gute Ergebnisse liefert. Multinomial Naïve Bayes ist ein simpler und effektiver Startpunkt – es ist jedoch ganz generell zu empfehlen, mehrere ML-Algorithmen zu testen. So können etwa auch das Regressionsmodell, Support Vector Machines, Entscheidungsbäume oder Deep-Learning-Modelle wie LSTM und BERT gute Textklassifizierungsergebnisse liefern. Um die Performanz verschiedener ML-Modelle miteinander zu vergleichen, kommen Bewertungs-Metriken zum Einsatz wie: Genauigkeit: Der Prozentsatz der insgesamt korrekten Vorhersagen. Die Genauigkeit ist am höchsten, wenn die Klassen ausgewogen sind. Präzision: Der Prozentsatz aller E-Mails, die das Modell einer bestimmte Kategorie korrekt zugeordnet hat. Recall: Der Prozentsatz aller vom Modell korrekt identifizierten und kategorisierten E-Mails. F1-Score: Der Mittelwert aus Präzision und Recall. Der F1-Score bietet ein ausgewogenes Maß für die Performance, wenn sowohl falsche Positive als auch falsche Negative eine Rolle spielen. Support: Gibt an, wie viele tatsächliche Beispiele für jede Klasse vorgelegen haben. Diese Metrik ist hilfreich, um die Klassenverteilung zu verstehen. 4. Klassifizierungsmodell testen und bewerten Im nachfolgende Code-Snippet werden in Kombination: Testdaten vorverarbeitet, Zielwerte aus den Testdaten vorhergesagt, sowie die Modellleistung durch die Confusion Matrix dargestellt und Genauigkeit, Präzision und Recall berechnet. Dann vergleicht die Confusion-Matrix die Vorhersagen des Modells mit den tatsächlichen Labels. Der folgende Klassifizierungs-Report fasst die Bewertungsmetriken für jede Klasse zusammen. #Reading Test Data test_df = pd.read_csv(test_Data.txt',delimiter=';',names=['text','label']) # Applying same transformation as on Train Data X_test,y_test = test_df.text,test_df.label #pre-processing of text test_corpus = text_transformation(X_test) #convert text data into vectors testdata = cv.transform(test_corpus) #predict the target predictions = clf.predict(testdata) #evaluating model performance parameters mlp.rcParams['figure.figsize'] = 10,5 plot_confusion_matrix(y_test,predictions) print('Accuracy_score: ', accuracy_score(y_test,predictions)) print('Precision_score: ', precision_score(y_test,predictions,average='micro')) print('Recall_score: ', recall_score(y_test,predictions,average='micro')) print(classification_report(y_test,predictions)) IDG IDG Die akzeptablen Schwellenwerte variieren zwar je nach Anwendungsfall, aber ein F1-Wert über 0,80 gilt im Allgemeinen als gut, wenn es um Multi-Class-Textklassifizierungen geht. Entsprechend demonstriert der F1-Wert von 0,8409, dass unser Modell in allen sechs E-Mail-Kategorien zuverlässig funktioniert. Folgende Faustregeln sollten Sie mit Blick auf die Performance-Metriken im Hinterkopf behalten: Wenn sowohl die Genauigkeit als auch der F1-Wert über 0,80 liegen, gilt das Modell für viele Business-Szenarien als produktionsreif. Wenn der Recall-Wert niedrig ist, entgehen dem Modell möglicherweise wichtige Fälle – was für E-Mail-Triage entscheidend ist. Wenn der Präzisionswert niedrig ist, flaggt das Modell möglicherweise bestimmte E-Mails falsch, was bei sensiblen Kategorien wie IT Security problematisch ist. 5. Sentimentanalyse integrieren Um E-Mails nach Sentiment zu bewerten, integrieren wir nun den SentimentIntensityAnalyzer von NLTK. Dabei setzen wir setzen die Priorität für negative Stimmung auf hoch, für neutrale auf mittel und für positive auf niedrig. sia = SentimentIntensityAnalyzer() def get_sentiment(text): # Predict Category (Ensure it is a string) category = clf.predict(cv.transform([text]))[0] # Extract first element # Sentiment Analysis sentiment_score = sia.polarity_scores(text)['compound'] if sentiment_score >= 0.05: sentiment = "Positive" elif sentiment_score 6. Testing Beispiel 1 email_sentiments = get_sentiment('Your app is terrible and not secure, login doesn’t work!') print(email_sentiments) Output - { 'Category': 'SecurityIssues', 'Sentiment': 'Negative','Priority': 'High'} Beispiel 2 email_sentiments = get_sentiment('Add advanced filtering and export options for reports') print(email_sentiments) Output - { 'Category': 'RequirementEnhancement','Sentiment': 'Positive','Priority': 'Low' } (fm) Sie wollen weitere interessante Beiträge zu diversen Themen aus der IT-Welt lesen? Unsere kostenlosen Newsletter liefern Ihnen alles, was IT-Profis wissen sollten – direkt in Ihre Inbox!