66 votes

Algorithme permettant de déterminer le caractère positif ou négatif d'une déclaration ou d'un texte.

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

Par exemple :

Jason est le pire utilisateur de SO que j'ai jamais vu (-10)

Jason est un utilisateur de SO (0)

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

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

Bien qu'il soit doué pour le SO, Jason est le pire pour le SO (+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 de ce genre dans le milieu universitaire quelque part. Si vous pouvez m'indiquer des articles ou des recherches, j'en serais ravi.

Merci.

7 votes

Comment géreriez-vous le sarcasme, ou d'autres figures de style compliquées dans de tels algorithmes ? Est-ce même possible ?

0 votes

Vous pouvez rapidement voir certains résultats de l'analyse des sentiments sur vos données en utilisant ce service web par nltk. corenlp.run . Mais le classificateur de sentiments n'a été formé qu'à partir des données de sentiments de Twitter et de critiques de films. Donc, si votre domaine de problème contient des mots significativement différents des corpus ci-dessus, vous pourriez ne pas obtenir les résultats souhaités.

52voto

fawce Points 557

Il existe un sous-domaine du traitement du langage naturel appelé analyse des sentiments qui traite spécifiquement de ce domaine problématique. De nombreux travaux commerciaux sont réalisés dans ce domaine, car les produits de consommation font l'objet de nombreuses critiques dans les forums d'utilisateurs en ligne (ugc ou user-generated-content). Il existe également une plate-forme prototype pour l'analyse de texte appelée PORTE 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 peut être utile pour développer vos propres idées.

38voto

cnu Points 6802

Dans mon entreprise, nous avons un produit qui fait cela et qui est également très performant. J'ai fait la plupart des travaux sur ce produit. Je peux vous en donner une brève idée :

Vous devez diviser le paragraphe en phrases, puis diviser chaque phrase en sous-phrases plus petites - en utilisant des virgules, des tirets, des points-virgules, des deux-points, des " et ", des " ou ", etc. Dans certains cas, chaque sous-phrase exprimera un sentiment totalement différent.

Certaines phrases, même si elles sont divisées, devront être réunies.

Ex : Le produit est étonnant, excellent et fantastique.

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

Au premier niveau, vous pouvez utiliser l'approche du sac de mots, c'est-à-dire avoir une liste de mots/phrases positifs et négatifs et les vérifier dans chaque sous phrase. En faisant cela, regardez également les mots de négation comme " pas ", " non ", etc. qui changeront la polarité de la phrase.

Même dans ce cas, si vous ne trouvez pas le sentiment, vous pouvez faire une bayes naïfs approche. Cette approche n'est pas très précise (environ 60%). Mais si vous l'appliquez uniquement aux phrases qui n'ont pas passé le premier ensemble de règles, vous pouvez facilement atteindre une précision de 80-85%.

La partie importante est la liste de mots positifs/négatifs et la façon dont vous divisez les choses. Si vous le souhaitez, vous pouvez aller encore un peu plus loin en mettant en place 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 sur cette partie.

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

Assez simple et qui gère la plupart des phrases. Vous pouvez cependant rencontrer des problèmes lorsque vous essayez de baliser du contenu provenant du Web. La plupart des gens n'écrivent pas de phrases correctes sur le Web. La gestion du sarcasme est également très difficile.

0 votes

Merci frère, belle réponse. Pouvez-vous expliquer l'approche "bayes naïfs" aussi.

0 votes

Comment créer deux phrases distinctes à partir d'une seule phrase. Par ex . M. abc est bon en étude et en sport. M. abc est bon en étude, M. abc est bon en sport.

9voto

SoapBox Points 14183

Cela relève du domaine de la Traitement du langage naturel La lecture de ce document est donc un bon point de départ.

Si vous ne voulez pas entrer dans 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 des comptages de mots sur des sections de texte. Évidemment, ce n'est pas une solution "intelligente", mais elle vous permet d'obtenir des informations avec très peu de travail, là où une PNL sérieuse prendrait beaucoup de temps.

L'un de vos exemples pourrait potentiellement être marqué positif alors qu'il est en fait négatif en utilisant cette approche ("Jason est le meilleur pour sucer avec SO"), à moins que vous n'accordiez plus de poids à "sucer" qu'à "meilleur" ..... Mais il s'agit également d'un petit échantillon de texte. Si vous examinez des paragraphes ou plus de texte, la pondération devient plus fiable, à moins que quelqu'un n'essaie délibérément de tromper votre algorithme.

0 votes

Merci. Le problème est que le texte que j'analyse n'est pas aussi subtil que mes exemples. Par exemple, je veux être capable de voir si un article est neutre, positif ou négatif sur un sujet. La pondération des mots ne suffira pas ;( Mais le traitement du langage naturel est un début. Merci.

5voto

anand_trex Points 3199

Comme indiqué, cela relève de l'analyse des sentiments dans le cadre du traitement du langage naturel.
À ma connaissance, GATE ne dispose d'aucun composant permettant l'analyse des sentiments.
Dans mon expérience, j'ai mis en place un algorithme qui est une adaptation de celui de l'article "Recognizing Contextual Polarity in Phrase-Level Sentiment Analysis" de Theresa Wilson, Janyce Wiebe, Paul Hoffmann ( este ) comme plugin GATE, ce qui donne des résultats raisonnablement bons. Il pourrait vous aider si vous souhaitez amorcer la mise en œuvre.

5voto

TAG Points 551

En fonction de votre application, vous pouvez le faire par le biais d'une Filtrage bayésien (qui est souvent utilisé dans les filtres anti-spam).

Une façon de procéder serait d'avoir deux filtres. Un pour les documents positifs et un autre pour les documents négatifs. Vous ensemenceriez le filtre positif avec des documents positifs (quel que soit le critère que vous utilisez) et le filtre négatif avec des documents négatifs. L'astuce consiste à trouver ces documents. Peut-être pourriez-vous le configurer de manière à ce que vos utilisateurs notent effectivement les documents.

Le filtre positif (une fois ensemencé) recherche les mots positifs. Il pourrait aboutir à des mots comme amour , paix etc. Le filtre négatif serait également ensemencé de manière appropriée.

Une fois que vos filtres sont configurés, vous faites passer le texte testé à travers eux pour obtenir des scores positifs et négatifs. En fonction de ces scores et d'une certaine pondération, vous pouvez obtenir un score numérique.

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

0 votes

C'est juste une question mineure, mais pourquoi "deux filtres" ? Il s'agit en fait d'un seul filtre qui sera entraîné (et testé) sur des documents positifs et négatifs, n'est-ce pas ?

0 votes

Un seul filtre (corpus) avec 2 catégories, voilà comment je procéderais.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X