Boîte à outils en langage naturel - Analyse

L'analyse et sa pertinence en PNL

Le mot 'analyse' dont l'origine est du mot latin ‘pars’ (ce qui signifie ‘part’), est utilisé pour tirer une signification exacte ou une signification du dictionnaire à partir du texte. Elle est également appelée analyse syntaxique ou analyse syntaxique. En comparant les règles de la grammaire formelle, l'analyse syntaxique vérifie la signification du texte. La phrase comme «Donnez-moi de la glace chaude», par exemple, serait rejetée par l'analyseur syntaxique ou syntaxique.

En ce sens, nous pouvons définir l'analyse syntaxique ou syntaxique ou l'analyse syntaxique comme suit -

Il peut être défini comme le processus d'analyse des chaînes de symboles en langage naturel conformément aux règles de la grammaire formelle.

Nous pouvons comprendre la pertinence de l'analyse en PNL à l'aide des points suivants -

  • L'analyseur est utilisé pour signaler toute erreur de syntaxe.

  • Il aide à récupérer des erreurs courantes afin que le traitement du reste du programme puisse être poursuivi.

  • L'arbre d'analyse est créé à l'aide d'un analyseur.

  • L'analyseur est utilisé pour créer une table de symboles, qui joue un rôle important dans la PNL.

  • Parser est également utilisé pour produire des représentations intermédiaires (IR).

Analyse approfondie vs peu profonde

Analyse approfondie Analyse peu profonde
Dans l'analyse approfondie, la stratégie de recherche donnera une structure syntaxique complète à une phrase. Il s'agit d'analyser une partie limitée des informations syntaxiques de la tâche donnée.
Il convient aux applications PNL complexes. Il peut être utilisé pour des applications NLP moins complexes.
Les systèmes de dialogue et de synthèse sont des exemples d'applications NLP où l'analyse approfondie est utilisée. L'extraction d'informations et l'exploration de texte sont des exemples d'applications NLP où l'analyse approfondie est utilisée.
Il est également appelé analyse complète. Il est également appelé segmentation.

Différents types d'analyseurs

Comme discuté, un analyseur est essentiellement une interprétation procédurale de la grammaire. Il trouve un arbre optimal pour la phrase donnée après une recherche dans l'espace d'une variété d'arbres. Voyons quelques-uns des analyseurs disponibles ci-dessous -

Analyseur de descente récursive

L'analyse par descente récursive est l'une des formes d'analyse les plus simples. Voici quelques points importants sur l'analyseur de descente récursive -

  • Il suit un processus descendant.

  • Il tente de vérifier que la syntaxe du flux d'entrée est correcte ou non.

  • Il lit la phrase d'entrée de gauche à droite.

  • Une opération nécessaire pour l'analyseur de descente récursive est de lire les caractères du flux d'entrée et de les faire correspondre avec les terminaux de la grammaire.

Analyseur de réduction de décalage

Voici quelques points importants sur l'analyseur de réduction de décalage -

  • Il suit un processus ascendant simple.

  • Il essaie de trouver une séquence de mots et d'expressions qui correspondent au côté droit d'une production grammaticale et les remplace par le côté gauche de la production.

  • La tentative ci-dessus de trouver une séquence de mots se poursuit jusqu'à ce que la phrase entière soit réduite.

  • En d'autres termes simples, l'analyseur de réduction de décalage commence par le symbole d'entrée et tente de construire l'arborescence de l'analyseur jusqu'au symbole de départ.

Analyseur de graphiques

Voici quelques points importants sur l'analyseur de graphiques -

  • Il est principalement utile ou adapté aux grammaires ambiguës, y compris les grammaires des langues naturelles.

  • Il applique la programmation dynamique aux problèmes d'analyse.

  • En raison de la programmation dynamique, les résultats hypothétiques partiels sont stockés dans une structure appelée «graphique».

  • Le «graphique» peut également être réutilisé.

Analyseur de regexp

L'analyse des expressions rationnelles est l'une des techniques d'analyse les plus utilisées. Voici quelques points importants sur l'analyseur Regexp -

  • Comme son nom l'indique, il utilise une expression régulière définie sous forme de grammaire au-dessus d'une chaîne étiquetée POS.

  • Il utilise essentiellement ces expressions régulières pour analyser les phrases d'entrée et générer un arbre d'analyse à partir de cela.

Exemple

Voici un exemple de travail de Regexp Parser -

import nltk
sentence = [
   ("a", "DT"),
   ("clever", "JJ"),
   ("fox","NN"),
   ("was","VBP"),
   ("jumping","VBP"),
   ("over","IN"),
   ("the","DT"),
   ("wall","NN")
]
grammar = "NP:{<DT>?<JJ>*<NN>}" 
Reg_parser = nltk.RegexpParser(grammar)
Reg_parser.parse(sentence)
Output = Reg_parser.parse(sentence)
Output.draw()

Production

Analyse des dépendances

Dependency Parsing (DP), un mécanisme d'analyse moderne, dont le concept principal est que chaque unité linguistique, c'est-à-dire les mots, se rapporte les uns aux autres par un lien direct. Ces liens directs sont en fait‘dependencies’en linguistique. Par exemple, le diagramme suivant montre la grammaire des dépendances pour la phrase“John can hit the ball”.

Forfait NLTK

Nous avons suivi les deux façons de faire l'analyse des dépendances avec NLTK -

Analyseur de dépendances probabiliste et projectif

C'est la première façon dont nous pouvons faire l'analyse des dépendances avec NLTK. Mais cet analyseur a la restriction de l'entraînement avec un ensemble limité de données d'entraînement.

Analyseur de Stanford

C'est une autre façon de faire l'analyse des dépendances avec NLTK. L'analyseur de Stanford est un analyseur de dépendances à la pointe de la technologie. NLTK a un wrapper autour de lui. Pour l'utiliser, nous devons télécharger deux choses suivantes -

L' analyseur Stanford CoreNLP .

Modèle de langue pour la langue souhaitée. Par exemple, modèle de langue anglaise.

Exemple

Une fois que vous avez téléchargé le modèle, nous pouvons l'utiliser via NLTK comme suit -

from nltk.parse.stanford import StanfordDependencyParser
path_jar = 'path_to/stanford-parser-full-2014-08-27/stanford-parser.jar'
path_models_jar = 'path_to/stanford-parser-full-2014-08-27/stanford-parser-3.4.1-models.jar'
dep_parser = StanfordDependencyParser(
   path_to_jar = path_jar, path_to_models_jar = path_models_jar
)
result = dep_parser.raw_parse('I shot an elephant in my sleep')
depndency = result.next()
list(dependency.triples())

Production

[
   ((u'shot', u'VBD'), u'nsubj', (u'I', u'PRP')),
   ((u'shot', u'VBD'), u'dobj', (u'elephant', u'NN')),
   ((u'elephant', u'NN'), u'det', (u'an', u'DT')),
   ((u'shot', u'VBD'), u'prep', (u'in', u'IN')),
   ((u'in', u'IN'), u'pobj', (u'sleep', u'NN')),
   ((u'sleep', u'NN'), u'poss', (u'my', u'PRP$'))
]