web-dev-qa-db-fra.com

Algorithme pour déterminer si une déclaration/un texte est positif ou négatif

J'ai besoin d'un algorithme pour déterminer si une phrase, un paragraphe ou un article ont un ton négatif ou positif ... ou, mieux encore, à quel point négatif ou positif.

Par exemple:

Jason est le pire SO utilisateur auquel j'ai jamais assisté (-10)

Jason est un SO utilisateur (0)

Jason est le meilleur SO utilisateur que j'ai jamais vu (+10)

Jason est le meilleur pour sucer avec SO (-10)

Alors, d'accord à SO, Jason est le pire à mal faire (+10)

Pas facile, hein? :)

Je ne m'attends pas à ce que quelqu'un m'explique cet algorithme, mais je suppose qu'il y a déjà beaucoup de travail sur quelque chose comme ça dans le monde universitaire quelque part. Si vous pouvez m'indiquer des articles ou des recherches, j'aimerais beaucoup.

Merci.

62
Jason

Il existe un sous-champ du traitement du langage naturel appelé analyse des sentiments qui traite spécifiquement de ce domaine problématique. Il y a beaucoup de travail commercial effectué dans la région car les produits grand public sont très largement revus dans les forums d'utilisateurs en ligne (ugc ou contenu généré par l'utilisateur). Il existe également un prototype de plate-forme d'analyse de texte appelé GATE de l'université de sheffield et un projet python appelé nltk . Les deux sont considérés comme flexibles, mais pas très performants. L'un ou l'autre pourrait être utile pour élaborer vos propres idées.

48
fawce

Dans mon entreprise, nous avons un produit qui le fait et qui fonctionne bien. J'ai fait l'essentiel du travail là-dessus. Je peux donner une brève idée:

Vous devez diviser le paragraphe en phrases, puis chaque phrase en sous-phrases plus petites - fractionnement basé sur des virgules, des tirets, des points-virgules, des points et des «,» ou sentiment totalement séparé dans certains cas.

Certaines phrases, même divisées, devront être reliées. 

Ex: le produit est incroyable, excellent et fantastique. 

Nous avons développé un ensemble complet de règles sur le type de phrases qui doivent être scindées et qui ne devraient pas l'être (sur la base des balises POS des mots)

Sur le premier niveau, vous pouvez utiliser une approche de sac de mots, ce qui signifie - avoir une liste de mots/phrases positifs et négatifs et vérifier chaque sous-phrase. En même temps, examinez également les mots de négation tels que «pas», «non», etc., qui changeront la polarité de la phrase. 

Même dans ce cas, si vous ne trouvez pas le sentiment, vous pouvez opter pour une approche naive bayes . Cette approche n'est pas très précise (environ 60%). Mais si vous n'appliquez cela qu'à une phrase qui ne respecte pas le premier ensemble de règles, vous pouvez facilement obtenir une précision de 80-85%. 

La partie importante est la liste de mots positive/négative et la façon dont vous divisez les choses. Si vous le souhaitez, vous pouvez même aller encore plus loin en implémentant HMM (modèle de Markov caché) ou CRF (champs aléatoires conditionnels). Mais je ne suis pas un pro de la PNL et quelqu'un d'autre peut vous renseigner.

Pour les personnes curieuses, nous avons implémenté tout cela en python avec NLTK et le module Reverend Bayes. 

Assez simple et gère la plupart des phrases. Vous pouvez toutefois rencontrer des problèmes lorsque vous essayez de baliser du contenu à partir du Web. La plupart des gens n'écrivent pas de phrases correctes sur le Web. Aussi, gérer le sarcasme est très difficile.

34
cnu

Ceci tombe sous le parapluie de Traitement du langage naturel , et la lecture de ce sujet est donc probablement un bon point de départ.

Si vous ne voulez pas aborder un problème très compliqué, vous pouvez simplement créer des listes de mots "positifs" et "négatifs" (et les pondérer si vous le souhaitez) et faire en sorte que le compte de Word soit réduit à des sections de texte. Évidemment, ce n’est pas une solution «intelligente», mais elle vous fournit des informations avec très peu de travail, où une PNL sérieuse prendrait beaucoup de temps.

L'un de vos exemples serait potentiellement positif s'il était en fait négatif avec cette approche ("Jason est le meilleur pour sucer avec SO") à moins que vous n'arriviez à "sucer" plus que "le meilleur" .... Mais cela aussi est un petit exemple de texte. Si vous examinez des paragraphes ou plus de texte, la pondération devient plus fiable, à moins que quelqu'un essaye délibérément de duper votre algorithme.

8
SoapBox

Selon votre application, vous pouvez le faire via un algorithme Bayesian Filtering (qui est souvent utilisé dans les filtres anti-spam). 

Une façon de le faire serait d'avoir deux filtres. Un pour les documents positifs et un autre pour les documents négatifs. Vous semeriez le filtre positif avec des documents positifs (quels que soient les critères que vous utilisiez) et le filtre négatif avec des documents négatifs. L'astuce serait de trouver ces documents. Vous pourriez peut-être le configurer pour que vos utilisateurs évaluent efficacement les documents.

Le filtre positif (une fois ensemencé) chercherait des mots positifs. Cela finirait peut-être par des mots tels que love, peace, etc. Le filtre négatif serait également correctement ensemencé.

Une fois vos filtres configurés, vous passez le texte de test à travers eux pour obtenir des scores positifs et négatifs. Sur la base de ces scores et d'une pondération, vous pouvez calculer votre score numérique.

Les filtres bayésiens, bien que simples, sont étonnamment efficaces. 

5
TAG

Comme indiqué, cela fait partie de l'analyse des sentiments sous le traitement du langage naturel.
Afaik GATE n'a aucun composant d'analyse de sentiments.
Dans mon expérience, j’ai implémenté un algorithme qui est une adaptation de celui de l’article «Reconnaître la polarité contextuelle dans l’analyse des sentiments au niveau de la phrase» de Theresa Wilson, Janyce Wiebe, Paul Hoffmann ( this ) comme suit: un plugin GATE, qui donne de bons résultats raisonnables. Cela pourrait vous aider si vous voulez démarrer l'implémentation.

5
anand.trex

Vous pouvez faire comme ça:

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

pire (-), le reste est (+). alors, ce serait (-) + (+) = (-)

    Jason is an SO user (0)

() + () = ()

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

mieux (+), le reste est (). alors, ce serait (+) + () = (+)

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

meilleur (+), sucer (-). alors, (+) + (-) = (-)

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

pire (-), faire mal (-). alors, (-) + (-) = (+)

3
aliv faizal muhammad

Il existe de nombreuses approches d’apprentissage automatique pour ce type d’analyse des sentiments. J'ai utilisé la plupart des algorithmes d'apprentissage automatique, qui sont déjà implémentés. mon cas j'ai utilisé 

weka algorithmes de classification

  • SVM
  • naïf basian
  • J48

    Vous devez uniquement former le modèle à votre contexte, ajouter un vecteur et une mise au point basée sur des règles. Dans mon cas, j'en ai eu (61% de précision). Nous passons donc dans stanford core nlp (ils ont formé leur modèle pour les critiques de films) et nous avons utilisé leur jeu de formation et ajouté notre jeu de formation. nous avons pu atteindre une précision de 80 à 90%. 

C'est une vieille question, mais je suis tombé sur elle à la recherche d'un outil capable d'analyser le ton de l'article et j'ai trouvé Watson Tone Analyzer d'IBM. Il permet 1000 appels api par mois gratuitement.

1
weagle08

Ah, je me souviens d’une bibliothèque Java appelée LingPipe (licence commerciale) que nous avons évaluée. Cela fonctionnerait bien pour l'exemple de corpus disponible sur le site, mais pour de vraies données, c'est vraiment nul. 

0
cnu

La plupart des outils d'analyse des sentiments sont basés sur Lexicon et aucun d'entre eux n'est parfait. En outre, l'analyse de sentiment peut être décrite comme une classification de sentiment trinaire ou une classification de sentiment binaire. De plus, c'est une tâche spécifique à un domaine. Cela signifie que des outils qui fonctionnent bien sur les nouvelles données risquent de ne pas bien fonctionner sur les tweets informels et non structurés. 

Je suggérerais d'utiliser plusieurs outils et de disposer d'un mécanisme d'agrégation ou de vote pour décider de l'intensité du sentiment. La meilleure étude d'enquête sur les outils d'analyse des sentiments que j'ai rencontrée est SentiBench . Vous le trouverez utile. 

0
Moniba

Tout dépend du contexte, je pense. Si vous recherchez les personnes les plus aptes à sucer avec SO. Sucer le meilleur peut être une chose positive. Pour déterminer ce qui est bon ou mauvais et ce que je pourrais vous recommander d’examiner dans la logique floue. 

C'est un peu comme être grand. Une personne de 1,95 m peut être considérée comme grande. Si vous placez cette personne dans un groupe de personnes de plus de 2,10 m, elle a l'air courte. 

0
Sorskoot

Peut-être qu'un logiciel de classement des essais pourrait être utilisé pour estimer le ton? CÂBLÉ article.
Possible référence. (Je ne pouvais pas le lire.)
Ce rapport compare les compétences en écriture au niveau Flesch-Kincaid requis pour le lire!
Page 4 sur e-rator dit qu'ils regardent mal et mal. (Peut-être que les mauvaises publications sont mal orthographiées aussi!)
Slashdot article. 

Vous pouvez également utiliser un filtre de courrier électronique pour la négativité au lieu de spam.

0
waynecolvin

Qu'en est-il du sarcasme:

  • Jason est le meilleur SO utilisateur que j'ai jamais vu, PAS
  • Jason est le meilleur SO utilisateur que j'ai jamais vu, non?
0
Osama Al-Maadeed