Stimmungsanalyse oder Sentiment-Analyse mit KI – benutzen Sie Opinion Mining um Ihre Geschäftsergebnisse zu verbessern
Einführung
Die Stimmungsanalyse ist in den letzten Jahren zu einer beliebten Methode geworden, um sich über die Meinungen von Kunden zu Produkten und Dienstleistungen zu informieren. Es wird sowohl für akademische Zwecke als auch im Handel eingesetzt.
Es geht im Wesentlichen um die Suche nach Daten, die dann auf subjektive Meinungen oder Gefühle hin ausgewertet werden.
Wertvolle Informationen können von Websites stammen, die Produkte und Dienstleistungen verkaufen, z. Bewertungen auf Amazon oder Tripadvisor. Noch größere Datensätze von Stimmungsdaten können aus der Analyse von Daten gewonnen werden, die auf Social-Media-Plattformen wie Twitter, Instagram und anderen erstellt wurden.
Historisch gesehen konzentrierte sich die erste Phase der Stimmungsanalyse-Entwicklung auf die Bestimmung der Gesamtstimmung oder Stimmungspolarität von Sätzen, Absätzen oder ganzen Dokumenten.
Unternehmen sind jedoch in der letzten Zeit anspruchsvoller geworden und interessieren sich nicht nur für die allgemeine Wahrnehmung von Texten über ihre Produkte und Dienstleistungen. Sie möchten mehr darüber erfahren, wovon die Kunden sprechen:
- Welche spezifischen Produkte werden in der Kundenbewertung erwähnt?
- Welche Aspekte von Produkten oder Dienstleistungen werden erwähnt (z. B. für das Hotel können Standort, Service und Preis in Betracht gezogen werden)
- Was ist die Meinung zu diesen Aspekten aus Kundenrezensionen
Aspect Based Sentiment Analysis
Dieser Ansatz ist auch unter einem bestimmten Namen bekannt – Aspect Based Sentiment Analysis (ABSA).
ABSA ist im Wesentlichen daran interessiert, mehr über bestimmte Aspekte von Produkten oder Dienstleistungen zu erfahren. Aspect Based Sentiment Analysis besteht aus mehreren Methoden:
- Identifizierung der relevanten Entitäten
- Extraktion ihrer Merkmale und Aspekte (manchmal auch als Aspektextraktion bezeichnet)
- Verwenden sogenannter Aspektbegriffe, um die Stimmung über ein bestimmtes Merkmal oder einen bestimmten Aspekt herauszufinden (die Stimmungspolaritäten sind positiv, neutral und negativ)
Wie bestimmen wir die Aspekte?
Man kann verschiedene Ansätze verwenden, vom tiefen Lernen bis zum Parsen von Abhängigkeiten. Eine großartige Bibliothek zum Parsen von Abhängigkeiten und zum Extrahieren von Aspekten ist spacy. Auch häufig verwendete Abhängigkeitsbibliothek ist Stanford CoreNLP.
Die Stimmungsanalyse, d. H. das Bestimmen der Stimmung von Aspekten oder ganzen Sätzen, kann durch Trainieren von maschinellem Lernen oder Tiefenlernmodellen durchgeführt werden. Ich werde Ihnen den Code zeigen, wie Sie selbst ein ziemlich großes und genaues Modell für die Klassifizierung von Stimmungen trainieren können.
Das Training von Sentiment Classifier mittels maschinellem Lernen beinhaltet:
- Vorbereitung eines geeigneten Datensatzes (wir verwenden einen mit Stanford Datensatz von Tweets)
- Verwenden eines spezifischen maschinellen Lernmodells (machine learning model), z. Support Vector Machines eignen sich sehr gut für diese Textklassifikation
- Trainieren des Modells am Datensatz
- Auswertung der Ergebnisse (Präzision, Recall, F1-Score und Genauigkeit überprüfen)
- Verwenden Sie das Modell in der Produktion, um Erkenntnisse zu gewinnen
Die Stimmungsanalyse kann auf viele Arten von Texten angewendet werden
Mit der Stimmungsanalyse können Sie die Stimmung aus einer Vielzahl möglicher Texte extrahieren:
- Tweets
- Instagram Beiträge
- Produktrezensionen
- Restaurant Bewertungen
- Hotelbewertungen
- Umfragen
- E-Mails
- Tickets (Unterstützung)
Stimmungsanalyse oder Opinion Mining ist eine großartige Lösung für Unternehmen, die Big Data in Form von unstrukturierten Texten haben, z. E-Mail-Kommunikation mit Kunden. Es ist ein wicthiges Teil unter Data Science Methoden. Auf diese Weise können sie wertvolle Informationen und umsetzbare Erkenntnisse aus diesen Datenbeständen gewinnen.
Training eines Stimmungsklassifikators basierend auf SVM (Support Vector Machines) und unter Verwendung des Stanford 140-Datensatzes
Wir werden die Scikit-Learn bibliothek verwenden, um einen auf SVM basierenden Stimmungsklassifikator zu trainieren.
Wir werden den Stanford 140-Datensatz verwenden. Sie können es von dieser Website herunterladen:
http://help.sentiment140.com/for-students
Beachten Sie das Datenformat, es hat 6 Felder:
- 0 – die Polarität des Tweets (0 = negativ, 2 = neutral, 4 = positiv)
- 1 – die ID des Tweets
- 2 – das Datum des Tweets
- 3 – die Abfrage. Wenn keine Abfrage vorliegt, lautet dieser Wert NO_QUERY.
- 4 – der Benutzer
- 5 – der Text des Tweets
Erste Schritte:
1 2 3 4 5 6 7 8 9 10 |
import pandas as pd import re from IPython.display import display import sklearn from sklearn.model_selection import train_test_split from sklearn.metrics import classification_report from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.preprocessing import LabelEncoder from sklearn.model_selection import learning_curve from sklearn.externals import joblib |
Im nächsten Schritt werden die Daten aus dem Stanford 140-Datensatz geladen und vorverarbeitet:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
def clean_tweets(df): df['Text']=df['Text'].str.lower() df['Text']=df['Text'].apply(lambda x: ' '.join(re.sub("(@[A-Za-z0-9]+)|([^0-9A-Za-z \t])|(\w+:\/\/\S+)"," ",x).split())) return df # preprocess data df=pd.read_csv('training.csv',encoding='ISO-8859-1') df.columns=['Sentiment','Id','Date','Query','User','Text'] del df['Id'], df['Date'], df['Query'], df['User'] df['Sentiment']=df['Sentiment'].map({0:'Negative',2:'Neutral',4:'Positive'}) df = df.sample(frac=0.1).reset_index(drop=True) df=clean_tweets(df) |
Wir werden die TF-IDF-Darstellung von Tweets verwenden, bevor wir sie dem SVM-Modell zuführen:
1 2 3 4 5 6 7 8 9 |
# preparing training, test data X=df['Text'].to_list() y=df['Sentiment'].to_list() X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.20, random_state=10) Vectorizer = TfidfVectorizer(max_df=0.9,ngram_range=(1, 2)) TfIdf=Vectorizer.fit(X_train) X_train=TfIdf.transform(X_train) le = LabelEncoder() y_train = le.fit_transform(y_train) |
Als nächstes trainieren wir das Modell mit der linearen SVM von scikit-learn:
1 2 3 |
# training the model model =sklearn.svm.LinearSVC(C=0.1) model.fit(X_train,y_train) |
Nach der Konvergenz können wir die Genauigkeit des Modells bewerten, indem wir Präzision, Rückruf und f1-Score berechnen:
1 2 3 4 5 |
# evaluation X_test=TfIdf.transform(X_test) y_pred=model.predict(X_test) y_test=le.transform(y_test) print(classification_report(y_test, y_pred)) |
Der auf den Stanford 140-Datensatz trainierte Stimmungsklassifikator weist eine gute Genauigkeit von 82% auf
1 2 3 4 5 6 7 8 |
precision recall f1-score support 0 0.82 0.82 0.82 79725 1 0.82 0.82 0.82 80275 micro avg 0.82 0.82 0.82 160000 macro avg 0.82 0.82 0.82 160000 weighted avg 0.82 0.82 0.82 160000 |
Benötigen Sie Hilfe mit Code oder haben Sie eine Idee für ein Projekt? Sie können mich kontaktieren unter: