Text Mining im Kundengeschäft mit BERT
Text Mining, genauer Text Data Mining, ist ein Bündel algorithmusbasierter Analyseverfahren zur Entdeckung von Bedeutungsstrukturen in schwach strukturierten Textdaten. Mit KI-basierten und linguistischen Mitteln (Natural Language Processing, NLP) erschließt Text-Mining-Software Strukturen aus Texten, die es Nutzern ermöglichen sollen, die Kerninformationen der verarbeiteten Texte schnell zu erkennen.
Da ca. 80 % aller im Umlauf befindlichen Daten in schwach strukturierter oder unstrukturierter Form vorliegen, gibt es Use Cases für Text Mining wie Sand am Meer.
Seit dem Erfolg von OpenAIs ChatGPT und dem damit verbundenen KI-Hype erleben Machine-Learning-Anwendungen und Neuentwicklungen auf Basis von Large Language Models (LLMs) eine riesige Nachfrage, egal ob es sich um Chatbots, Suchalgorithmen oder Prozessoptimierungen mithilfe von KI handelt.
Von dieser Nachfrage profitieren auch andere NLP-Anwendungen und damit das von Google entwickelte Transformer-Modell BERT, das sich über Jahre als eines der meistgenutzten Modelle für NLP-Anwendungen etabliert hat.
Dieser Beitrag konzentriert sich auf einen bestimmten Text-Mining-Use-Case: die Analyse von Kundenbewertungen in Form von Kommentaren.
Motivation
Nicht erst seit gestern sind Reviews, allgemeiner gesagt Kundenkommentare, für Unternehmen eine wichtige Quelle, um auf verschiedenen Ebenen Optimierungspotenziale abzuleiten. Durch die im letzten Jahrzehnt stark gestiegene Onlinepräsenz von Unternehmen und Konsumenten haben sich textbasierte Inhalte wie Kundenkommentare vervielfacht. Während wenige hundert Kommentare noch von einzelnen Personen analysiert werden können, wird die Analyse größerer Mengen immer zeit- und ressourcenintensiver.
Hier kommen maschinelle Textanalyse-Anwendungen ins Spiel. Mit ihnen lassen sich innerhalb von Minuten Tausende Texte analysieren und Informationen extrahieren.
Ein Nachteil dieser Anwendungen war bisher ihre Genauigkeit sowie die Schwierigkeit, Tonalität wie zum Beispiel Sarkasmus zu erkennen. Während sich die Genauigkeit mit immer größeren Textkorpora und vortrainierten Modellen verbessern ließ, blieb das Problem der Tonalität lange bestehen. Erst mit dem von Google entwickelten BERT-Modell gelang hier ein Durchbruch.
BERT
BERT (Bidirectional Encoder Representations from Transformers) analysiert den Kontext von Wörtern und Wortpassagen unter Berücksichtigung sowohl der vorhergehenden als auch der nachfolgenden Wörter. Zudem wurde es darauf trainiert, zu erkennen, ob ein Satz auf einen anderen folgt. Dadurch ist BERT in der Lage, ein tiefes Verständnis des zugrunde liegenden Textes zu entwickeln.
Außerdem basiert BERT auf der Transformer-Architektur, die auf dem Aufmerksamkeitsmechanismus (Attention) beruht. Dadurch kann BERT effizient und parallel arbeiten.
Ein weiterer großer Vorteil von BERT ist seine Mehrsprachigkeit: Es erkennt Deutsch und Englisch ebenso wie Umgangssprache, den bereits angesprochenen Sarkasmus und sogar Emojis.
Aufgrund dieser kombinierten Eigenschaften hat sich BERT innerhalb kurzer Zeit als State-of-the-Art-Lösung unter den NLP-Encoder-Modellen etabliert.
Häufig wird BERT als Vorläufer der heutigen LLMs betrachtet, obwohl es mit seinen 110 Millionen Parametern deutlich kleiner und kompakter ist als etwa GPT‑3. Das hat allerdings den Vorteil, dass Anwendungen mit BERT deutlich weniger Ressourcen benötigen, ohne signifikant an Genauigkeit einzubüßen.
Im Folgenden zeigen wir, wie BERT in zwei verschiedenen Use Cases der Textanalyse zum Einsatz kommt.
Textklassifikation
Die Textklassifikation beschreibt die semantisch korrekte Zuordnung vordefinierter, themenbasierter Kategorien oder Gruppen zu Textdokumenten. Sie bildet damit eine Verallgemeinerung der Sentimentanalyse.
Mit ihr lassen sich Textdaten sortieren und wertvolle Informationen aus vielen Texten extrahieren. Auch bei der Spamerkennung kommt Textklassifikation zum Einsatz.
Für Unternehmen mit einem breiten Produktportfolio bietet es sich an, Textklassifikations-Apps zu nutzen, um Produktbeschreibungen automatisch in vordefinierte Kategorien einzuordnen.
Praxisbeispiel
Grundsätzlich spielen folgende Faktoren für eine erfolgreiche Entwicklung eine entscheidende Rolle:
- Trainingsvolumen, also die Anzahl der Datensätze, mit denen das Modell trainiert wird
- Datenqualität
In diesem Beispiel betrachten wir Kundenkommentare eines Elektrohändlers. Sie sollen jeweils einer von vier Kategorien zugeordnet werden: „Auswahl“, „Qualität“, „Angebot“ und „Spam“.
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder
from transformers import BertTokenizer
import torch
from transformers import BertForSequenceClassification, Trainer, TrainingArguments
class TextDataset(torch.utils.data.Dataset):
def __init__(self, encodings, labels):
self.encodings = encodings
self.labels = labels
def __getitem__(self, idx):
item = {key: torch.tensor(val[idx]) for key, val in self.encodings.items()}
item['labels'] = torch.tensor(self.labels[idx])
return item
def __len__(self):
return len(self.labels)
#Tokenisierung
tokenizer = BertTokenizer.from_pretrained('bert-base-german-cased')
def tokenize_texts(texts):
return tokenizer(
texts.tolist(),
padding=True,
truncation=True,
return_tensors='pt'
)
# Trainingsargumente
training_args = TrainingArguments(
output_dir='./',
num_train_epochs=3,
per_device_train_batch_size=8,
per_device_eval_batch_size=8,
warmup_steps=500,
weight_decay=0.01,
logging_dir='./',
)
# device setup
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
def predict(text):
inputs = tokenizer(text, return_tensors='pt', truncation=True, padding=True)
outputs = model(**inputs)
predictions = torch.argmax(outputs.logits, dim=1)
return label_encoder.inverse_transform(predictions.numpy())
# Lade den Datensatz
#fields=['label','Kommentar']
data='$FILEPATH$'+'\kundenkommentare_training_set.csv'
df = pd.read_csv(data)
# Modell laden
model = BertForSequenceClassification.from_pretrained('bert-base-german-cased', num_labels=df['kategorie'].nunique()).to(device)
# Kodieren der Labels
label_encoder = LabelEncoder()
df['labels'] = label_encoder.fit_transform(df['kategorie'])
# Aufteilen in Trainings- und Testdaten
train_texts, test_texts, train_labels, test_labels = train_test_split(
df['kommentar'].values, df['labels'].values, test_size=0.2
)
#Datensätze vorbereiten
train_encodings = tokenize_texts(train_texts)
test_encodings = tokenize_texts(test_texts)
train_dataset = TextDataset(train_encodings, train_labels)
test_dataset = TextDataset(test_encodings, test_labels)
# Trainer definieren
trainer = Trainer(
model=model,
args=training_args,
train_dataset=train_dataset,
eval_dataset=test_dataset,
)
# Modell trainieren
trainer.train()
Nach dem Training kann die Funktion trainer.evaluate() genutzt werden, um die Performance auf dem Testset zu prüfen.
Für weitere Tests liegt eine CSV-Datei mit gelabelten Daten bei.
results = trainer.evaluate()
print(results)
file='some_customer_comments.csv'
# Beispielvorhersage
df = pd.read_csv(file)
rdf=pd.DataFrame({'Kommentar': [Kommentar for Kommentar in df['kommentar']],'Kategorie' : [predict(Kommentar)[0] for Kommentar in df['kommentar']]})
compare_df=df.join(rdf['Kategorie'])
#print(compare_df)
false_positives=compare_df.query('kategorie!=Kategorie')
print(false_positives)
print(compare_df)
Topic Modeling
Topic Modeling wird unter anderem auf Kundenfeedback angewandt, um verborgene Themen, Inhalte oder Strukturen zu identifizieren.
Unter einem Topic versteht man ein wiederkehrendes Wortmuster, das mithilfe von Algorithmen innerhalb der zugrunde liegenden Textsammlung ermittelt wird.
Anders als bei der Textklassifikation kann hier aufgrund der unbekannten Kategorien bzw. Themen nicht mit Labels gearbeitet werden. Stattdessen nutzt man sogenannte unüberwachte Lernmethoden, um Muster und Insights mit statistischen Mitteln zu erkennen. Vereinfacht dargestellt könnten Topics etwa so aussehen:
Topic 0: [(leistungsfähig, p1), (ipad, p2), (zufrieden, p3), (hochwertig, p4)]
Topic 1: [(service, p5), (freundlich, p6), (waren, p7), (beratung, p8)]
Dabei steht p1 bis p8 für die relative Häufigkeit des jeweiligen Wortes.
Topic Modeling und Textklassifikation gehen häufig Hand in Hand: Aus den gefundenen Topics lassen sich Kategorien ableiten, mit denen wiederum ein Modell zur Textklassifikation trainiert werden kann.
BERTopic
Auch Topic-Modeling-Anwendungen werden inzwischen mit BERT umgesetzt, insbesondere mit der Methode BERTopic.
Mit klassischen Topic-Modeling-Methoden war es lange nur möglich, Topics aus längeren Texten zu ermitteln. Mit BERTopic änderte sich das.
BERTopic kombiniert das tiefe Textverständnis von BERT mit traditionellen Techniken des Topic Modelings, unter anderem Term Frequency–Inverse Document Frequency (TF-IDF), Uniform Manifold Approximation and Projection (UMAP) und Clustering mit HDBSCAN, um interpretierbare Themencluster zu erstellen.
Erste Tests zeigten, dass diese Kombination auch bei kürzeren Texten gute Ergebnisse erzielt. Dadurch eröffneten sich neue Möglichkeiten für die Auswertung von Kundenkommentaren.
Praxisbeispiel
Wir bleiben beim Beispiel der Kundenkommentare eines Elektrohändlers. Diesmal wollen wir per Clustering Topics aus den Kommentaren ermitteln, ohne Kategorien vorzugeben.
from bertopic import BERTopic
import pandas as pd
import matplotlib.pyplot as plt
# 1. CSV-Datei laden
df = pd.read_csv('ungelabelte_kommentare.csv')
# 2. Texte extrahieren
texte = df['kommentar'].astype(str).tolist()
# 3. BERTopic-Modell erstellen
topic_model = BERTopic(language='multilingual', verbose=True)
# 4. Topics fitten
topics, probs = topic_model.fit_transform(texte)
# 5. Reduktion auf exakt 10 Topics
topic_model.reduce_topics(texte, nr_topics=10)
# 6. Top-N Topics anzeigen
print('\n📌 Top 10 Topics:')
for i in range(10):
print(f'Topic {i}: {topic_model.get_topic(i)}')
# 7. Topics in CSV exportieren
list=[topic_model.get_topic(topics[i]) for i in range(len(topics))]
df['topic'] = topics
df['topic_values']=list
df.to_csv('kundenkommentare_mit_topics.csv', index=False)
Fazit
Text Mining in Form von Kommentaranalysen ist heute nicht mehr wegzudenken und für Unternehmen strategisch unverzichtbar. Mit BERT steht ihnen dafür ein mächtiges Werkzeug zur Verfügung. BERTopic erweitert die Möglichkeiten des Topic Modelings auf Kundenkommentare und kann Unternehmen so zusätzlich wertvolle Informationen liefern. Damit hat BERT in beiden Analysemethoden eine starke Stellung eingenommen.
Spannend bleibt, inwiefern sich aktuelle Large Language Models auf die hier gezeigten Methoden anwenden lassen und ob sie eine echte Konkurrenz zu BERT darstellen oder eher ergänzend eingesetzt werden.
