Algorithme pour la négation des phrases

je me demandais si quelqu'un connaissait les tentatives de négation de phrases algorithmiques.

par exemple, si l'on donne une phrase comme "ce livre est bon", fournir un certain nombre de phrases alternatives qui signifient le contraire comme "ce livre n'est pas bon" ou même "ce livre est mauvais".

évidemment, accomplir cela avec un haut degré d'exactitude dépasserait probablement la portée de la PNL actuelle, mais je suis sûr qu'il y a eu du travail à ce sujet. Si quelqu'un sait de tout le travail, le soin de m'indiquer quelques papiers?

17
demandé sur dmcer 2010-04-14 01:27:07

6 réponses

bien que je ne sois au courant d'aucun travail qui se penche spécifiquement sur la génération automatique de phrases niées, j'imagine qu'un bon endroit pour commencer serait de lire sur le travail linguistique en sémantique formelle et la pragmatique. Une bonne introduction accessible serait les pragmatiques de Steven C. Levinson livre.

Une question que je pense que vous allez rencontrer, c'est qu'il peut être très difficile de nier toute l'information qui est véhiculée par une phrase. Par exemple, prendre:

John fixed the vase that he broke.

Même si vous changez de cette John n'a pas réparé le vase qu'il a cassé, est un condition qu'il y a un vase et que John l'a cassé.

de même, il suffit de nier la phrase John n'a pas cessé de consommer des droguesJohn arrêté à l'aide de médicaments indique toujours que John, à un moment donné, a consommé de la drogue. Une négation plus approfondie serait John n'a jamais utilisé les médicaments.

certains travaux existants de traitement du langage naturel (NLP) que vous pourriez vouloir regarder est de MacCartney et Manning 2007 la Logique Naturelle de l'Inférence Textuelle. Dans cet article, ils utilisent la notion de logique naturelle de George Lakoff et le calcul de monotonicité de Sanchez Valencia pour créer un logiciel qui détermine automatiquement si une phrase implique une autre. Vous pourriez probablement utiliser certaines de leurs techniques pour détecter le non-entaillement construire des phrases niées et contradictoires.

8
répondu dmcer 2010-04-19 08:43:01

Les naïfs, bien sûr, est d'essayer d'ajouter "pas" juste après {am,sont,est}. Je n'ai aucune idée de la façon dont cela fonctionnera dans votre environnement cependant, il ne fonctionnera probablement avec des phrases de type prédicat.

2
répondu Johan Benum Evensberget 2010-04-13 21:36:40

je vous recommande de vérifier wordnet. Vous pouvez l'utiliser pour rechercher des antonymes pour un mot, de sorte que vous pourriez éventuellement remplacer "mauvais" par "pas bon" puisque mauvais est un antonyme de bon. NLTK possède une interface python simple avec wordnet.

2
répondu Jacob 2010-05-05 14:39:28

pour les phrases simples parse à la recherche d'adverbes ou d'adjectifs étant donné les règles grammaticales anglaises et de substituer un antonym si un seul sens existe. Sinon, utilisez la règle de négation anglaise correcte pour nier le verbe (i.e.: is -> is not).

algorithme de haut niveau:

  1. Chercher chaque mot (nom, verbe, adjectif, adverbe, conjonction, etc...)
  2. inférer la structure de la phrase à partir de séquences de type de mot (votre phrase était: article, nom, verbe, adjectif/adverbe; Ceci est connu pour être une simple phrase.)
  3. pour les phrases simples, Choisissez un mot inversible et inversez-le. Soit en utilisant un antonyme, soit en niant le verbe.

pour les phrases plus complexes, comme celles avec des clauses subordonnées, vous aurez besoin d'une analyse plus complexe, mais pour les phrases simples, cela ne devrait pas être impossible.

1
répondu Ben S 2010-04-13 21:51:58

il y a un processus similaire pour la logique de premier ordre. L'algorithme habituel est de cartographier Pnot P, puis effectuer des traductions valides pour déplacer le not un endroit pratique, par exemple:

Original:    (not R(x) => exists(y) (O(y) and P(x, y)))
Negate it:   not (not R(x) => exists(y) (O(y) and P(x, y)))
Rearrange:   not (R(x) or exists(y) (O(y) and P(x, y)))
             not R(x) and not exists(y) (O(y) and P(x, y))
             not R(x) and forall(y) not (O(y) and P(x, y))
             not R(x) and forall(y) (not O(y) or not P(x, y))

exécuter la même chose sur l'anglais, vous seriez de négation de la "Si il ne pleut pas ici, alors il existe une activité qui est à l'extérieur de l'activité et peuvent être effectuées par ici" à "C'est PAS le cas ..."et finalement dans" Il ne pleut pas et chaque activité possible est soit pas pour à l'extérieur ou ne peut pas être effectuée ici."

le langage naturel est bien plus compliqué que la logique de premier ordre, bien sûr... mais si vous pouvez séparer la phrase en quelque chose où les mots "pas", "et", "ou", "existe" etc. peut être identifié, alors vous devriez être en mesure d'effectuer des traductions.

1
répondu Edmund 2010-04-13 22:07:56

Nice démonstrations à l'aide de NTLK - http://text-processing.com/demo et une courte description - http://text-processing.com/demo/sentiment/.

-1
répondu Ashwin Jayaprakash 2011-03-08 18:07:15