webentwicklung-frage-antwort-db.com.de

Algorithmus, um zu bestimmen, wie positiv oder negativ eine Anweisung/ein Text ist

Ich brauche einen Algorithmus, um festzustellen, ob ein Satz, ein Absatz oder ein Artikel einen negativen oder positiven Ton aufweist ... oder besser noch, wie negativ oder positiv.

Zum Beispiel:

Jason ist der schlechteste SO Benutzer, den ich je gesehen habe (-10)

Jason ist ein SO Benutzer (0)

Jason ist der beste SO Benutzer, den ich je gesehen habe (+10)

Jason ist der Beste beim Saugen mit SO (-10)

Okay, bei SO ist Jason am schlimmsten, wenn es schlecht geht (+10)

Nicht einfach, oder? :)

Ich erwarte nicht, dass mir jemand diesen Algorithmus erklärt, aber ich nehme an, dass an so etwas in der Wissenschaft irgendwo schon viel gearbeitet wird. Wenn Sie mich auf einige Artikel oder Nachforschungen verweisen können, würde ich es lieben.

Vielen Dank.

62
Jason

Es gibt ein Unterfeld der Verarbeitung natürlicher Sprache, genannt Sentiment-Analyse , das sich speziell mit diesem Problembereich befasst. In der Region wird eine Menge kommerzieller Arbeit geleistet, da Verbraucherprodukte in Online-Benutzerforen (ugc oder von Nutzern generierte Inhalte) so stark überprüft werden. Es gibt auch eine Prototyp-Plattform für Textanalyse mit dem Namen GATE von der Universität Sheffield und ein Python-Projekt mit dem Namen nltk . Beide gelten als flexibel, jedoch nicht als sehr leistungsfähig. Der eine oder der andere ist vielleicht gut um eigene Ideen zu entwickeln.

48
fawce

In meiner Firma haben wir ein Produkt, das dies tut und auch gut funktioniert. Ich habe die meiste Arbeit daran gemacht. Ich kann eine kurze Idee geben:

Sie müssen den Absatz in Sätze unterteilen und dann jeden Satz in kleinere Untersätze unterteilen - Aufteilung nach Kommas, Bindestrich, Semikolon, Doppelpunkt, "und", "oder" usw. " in einigen Fällen völlig separate Gefühle.

Einige Sätze, auch wenn sie geteilt sind, müssen zusammengefügt werden. 

ZB: Das Produkt ist fantastisch, hervorragend und fantastisch. 

Wir haben ein umfassendes Regelwerk für die Art von Sätzen entwickelt, die aufgeteilt werden müssen und die nicht (basierend auf den POS-Tags der Wörter) sein sollten.

Auf der ersten Ebene können Sie eine Reihe von Wörtern verwenden. Das bedeutet, Sie haben eine Liste mit positiven und negativen Wörtern/Phrasen und überprüfen jeden Untersatz. Sehen Sie sich dabei auch die Negationswörter wie "Nicht", "Nein" usw. an, die die Polarität des Satzes ändern. 

Selbst wenn Sie das Gefühl nicht finden können, können Sie eine naive bayes Annäherung wählen. Dieser Ansatz ist nicht sehr genau (etwa 60%). Wenn Sie dies jedoch nur auf Sätze anwenden, die den ersten Satz von Regeln nicht erfüllen, können Sie leicht eine Genauigkeit von 80-85% erreichen. 

Der wichtige Teil ist die Positiv-/Negativwortliste und die Art, wie Sie die Dinge aufteilen. Wenn Sie möchten, können Sie eine noch höhere Stufe erreichen, indem Sie HMM (Hidden Markov Model) oder CRF (Bedingte Zufallsfelder) implementieren. Aber ich bin kein Profi in NLP und jemand anderes kann Sie in diesem Teil ausfüllen.

Für Neugierige haben wir Python mit NLTK und dem Reverend Bayes-Modul implementiert. 

Ziemlich einfach und beherrscht die meisten Sätze. Beim Versuch, Inhalte aus dem Web zu kennzeichnen, können jedoch Probleme auftreten. Die meisten Leute schreiben keine richtigen Sätze im Web. Auch der Umgang mit Sarkasmus ist sehr schwer.

34
cnu

Dies steht unter dem Dach von Natural Language Processing , und so ist das Lesen wahrscheinlich ein guter Anfang.

Wenn Sie nicht in ein sehr kompliziertes Problem eingreifen möchten, können Sie einfach Listen mit "positiven" und "negativen" Wörtern erstellen (und sie gewichten, wenn Sie möchten) und Word-Zählungen für Textabschnitte durchführen. Offensichtlich ist dies keine "intelligente" Lösung, aber Sie erhalten einige Informationen mit sehr wenig Arbeit, wo ernsthaftes NLP sehr zeitaufwändig wäre.

Eines Ihrer Beispiele wäre potenziell positiv, wenn es bei diesem Ansatz tatsächlich negativ war ("Jason ist das Beste beim Saugen mit SO"), es sei denn, Sie stören das "Saugen" mehr als "Bestes" .... Aber auch das ist ein kleines Textbeispiel. Wenn Sie Absätze oder mehr von Text betrachten, wird die Gewichtung zuverlässiger, wenn Sie nicht jemanden haben, der absichtlich versucht, Ihren Algorithmus zu täuschen.

8
SoapBox

Abhängig von Ihrer Anwendung können Sie dies über einen Bayesian Filtering -Algorithmus tun (der häufig in Spam-Filtern verwendet wird). 

Eine Möglichkeit wäre, zwei Filter zu haben. Eine für positive Dokumente und eine für negative Dokumente. Sie säen den positiven Filter mit positiven Dokumenten (unabhängig von den verwendeten Kriterien) und den negativen Filter mit negativen Dokumenten. Der Trick wäre, diese Dokumente zu finden. Vielleicht könnten Sie es so einrichten, dass Ihre Benutzer Dokumente effektiv bewerten.

Der positive Filter (einmal ausgesät) würde nach positiven Wörtern suchen. Vielleicht würde es mit Wörtern wie love, peace usw. enden. Der Negativfilter würde auch entsprechend ausgesät werden.

Sobald Ihre Filter eingerichtet sind, führen Sie den Testtext durch, um positive und negative Bewertungen zu erhalten. Basierend auf diesen Werten und einer gewissen Gewichtung können Sie Ihre numerische Bewertung ermitteln.

Bayes'sche Filter sind zwar einfach, aber überraschend effektiv. 

5
TAG

Wie erwähnt, wird dies unter Sentiment-Analyse im Rahmen der Verarbeitung natürlicher Sprache verstanden.
Afaik GATE hat keine Komponente, die die Sentiment-Analyse durchführt.
Nach meiner Erfahrung habe ich einen Algorithmus implementiert, der eine Anpassung an den in der Arbeit "Erkennen der kontextuellen Polarität in der Sentiment-Analyse auf Ausdrucksebene" von Theresa Wilson, Janyce Wiebe, Paul Hoffmann ( this ) als ist ein GATE-Plugin, das vernünftig gute Ergebnisse liefert. Es könnte Ihnen helfen, wenn Sie die Implementierung bootstrappen möchten.

5
anand.trex

Das kannst du so machen:

    Jason is the worst SO user I have ever witnessed (-10)

am schlimmsten (-) ist der Rest (+). das wäre also (-) + (+) = (-)

    Jason is an SO user (0)

() + () = ()

    Jason is the best SO user I have ever seen (+10)

am besten (+) ist der Rest (). das wäre also (+) + () = (+)

    Jason is the best at sucking with SO (-10)

am besten (+), saugen (-). so (+) + (-) = (-)

    While, okay at SO, Jason is the worst at doing bad (+10)

am schlechtesten (-), schlecht machen (-). so (-) + (-) = (+)

Es gibt viele maschinelle Lernansätze für diese Art der Gefühlsanalyse. Ich habe die meisten Algorithmen zum maschinellen Lernen verwendet, die bereits implementiert sind. Mein Fall habe ich benutzt 

Weka Klassifizierungsalgorithmen

  • SVM
  • naiver basian
  • J48

    Nur Sie müssen das Modell in Ihrem Kontext trainieren, einen vorgestellten Vektor und eine regelbasierte Abstimmung hinzufügen. In meinem Fall bekam ich einige (61% Genauigkeit). Also ziehen wir nach stanford core nlp (sie haben ihr Modell für Filmkritiken trainiert) und wir haben ihr Trainingsset verwendet und unser Trainingsset hinzugefügt. Wir konnten eine Genauigkeit von 80-90% erreichen. 

Dies ist eine alte Frage, aber ich bin darauf gestoßen, als ich nach einem Werkzeug gesucht habe, das den Ton des Artikels analysieren und Watson Tone Analyzer von IBM finden konnte. Es erlaubt monatlich 1000 API-Anrufe kostenlos.

1
weagle08

Ah, ich erinnere mich an eine Java-Bibliothek für diese namens LingPipe (kommerzielle Lizenz), die wir ausgewertet haben. Es würde gut funktionieren für den Beispiel-Korpus, der auf der Website verfügbar ist, aber für echte Daten ist es ziemlich schlecht. 

0
cnu

Die meisten Sentiment-Analyse-Tools basieren auf Lexikon und keines ist perfekt. Die Stimmungsanalyse kann auch als eine dreistufige Stimmungsklassifizierung oder eine binäre Stimmungsklassifizierung beschrieben werden. Darüber hinaus handelt es sich um eine domänenspezifische Aufgabe. Das bedeutet, dass Tools, die für Nachrichtendatensätze gut geeignet sind, bei informellen und unstrukturierten Tweets möglicherweise keine guten Ergebnisse erzielen. 

Ich würde vorschlagen, mehrere Instrumente zu verwenden und über einen Aggregations- oder Abstimmungsmechanismus verfügen, um die Intensität der Stimmung zu bestimmen. Die beste Umfragestudie zu Sentiment-Analyse-Tools, die mir begegnet ist, ist SentiBench . Sie werden es hilfreich finden. 

0
Moniba

Ich denke, es geht um den Kontext. Wenn Sie nach den Leuten suchen, die am besten mit SO saugen. Das Beste zu saugen kann eine positive Sache sein. Um herauszufinden, was schlecht oder gut ist und wie viel ich empfehlen könnte, in Fuzzy Logic zu suchen. 

Es ist ein bisschen wie groß zu sein. Jemand, der 1,95 m groß ist, kann als groß angesehen werden. Wenn Sie diese Person in einer Gruppe mit Menschen über 2,10 m platzieren, wirkt sie kurz. 

0
Sorskoot

Vielleicht könnte eine Bewertungssoftware für Aufsätze verwendet werden, um den Ton abzuschätzen? VERDRAHTETER Artikel.
Mögliche Referenz. (Ich konnte es nicht lesen.)
Dieser Bericht vergleicht die Schreibfertigkeit mit der zum Lesen erforderlichen Flesch-Kincaid-Bewertungsstufe!
Seite 4 von e-rator sagt, dass sie auf falsche Schreibweise und dergleichen schauen. (Vielleicht sind schlechte Beiträge auch falsch geschrieben!)
Slashdot article. 

Sie können auch einen E-Mail-Filter für Negativität anstelle von Spam verwenden.

0
waynecolvin

Wie wäre es mit Sarkasmus:

  • Jason ist der beste SO Benutzer, den ich je gesehen habe, NICHT
  • Jason ist der beste SO Benutzer, den ich je gesehen habe, richtig
0