4 votes

Techniques autres que RegEx pour découvrir 'l'intention' dans les phrases

Je me lance dans un projet pour une organisation à but non lucratif pour aider à traiter et classer des milliers de rapports annuellement de leurs travailleurs sur le terrain / sous-traitants du monde entier. Je suis relativement nouveau dans le NLP et donc je voulais demander l'aide du groupe sur l'approche pour résoudre notre problème.

Je vais mettre en évidence le processus actuel, et nos défis et j'aimerais votre aide sur la meilleure façon de résoudre notre problème.

Processus actuel: Les agents sur le terrain soumettent des rapports des projets locaux sous forme de bonnes pratiques. Ces rapports sont ensuite traités par une équipe à temps plein de curateurs qui (i) s'assurent qu'ils respectent un modèle de bonnes pratiques et (ii) éditent les documents pour améliorer le langage / le style / la grammaire.

Défi: Avec l'augmentation du nombre de travailleurs sur le terrain, le volume de rapports générés a augmenté et nos éditeurs sont maintenant un goulot d'étranglement.

Solution: Nous aimerions automatiser la 1ère étape de notre processus, c'est-à-dire, vérifier le document pour le respect du modèle de bonnes pratiques de l'organisation.

Essentiellement, nous devons nous assurer que chaque rapport a 3 composantes à savoir: 1. Indique son objectif: De quel sujet / problème cette meilleure pratique traite-t-elle? 2. Identifie le public: Pour qui est-ce? 3. Met en évidence la pertinence: Que peut faire le lecteur après l'avoir lu?

Voici un exemple de bon rapport soumis.

"Ce document présente des techniques pour appliquer avec succès les meilleures pratiques dans les pays en développement. Cette étude vise à aider les agriculteurs à faible revenu à identifier un ensemble de meilleures pratiques pour la tarification des produits agricoles dans des endroits où il n'y a pas de transparence des prix. En mettant en œuvre ces processus, les agriculteurs pourront obtenir de meilleurs prix pour leurs produits et augmenter leurs revenus familiaux."

Jusqu'à présent, notre approche a été d'utiliser RegEx et de vérifier les mots-clés. c'est-à-dire, pour vérifier la conformité, nous utilisons la logique suivante: 1 Pour vérifier "déclare l'objectif" = nous faisons un regex pour les termes 'objectif', 'intention' 2 Pour vérifier "identifie le public" = nous faisons un regex pour les termes 'identifie', 'est pour' 3 Pour vérifier "met en évidence la pertinence" = nous faisons un regex pour les termes 'capable de', 'permet', 'autorise'

L'approche actuelle de RegEx semble très primitive et limitée alors je voulais demander à la communauté s'il y a une meilleure façon de résoudre ce problème en utilisant quelque chose comme NLTK, CoreNLP.

Merci d'avance.

3voto

Wasi Ahmad Points 12606

Problème intéressant, je crois que c'est un problème de recherche approfondie! En traitement du langage naturel, il existe quelques techniques qui apprennent et extraient des modèles à partir du texte, puis peuvent les utiliser comme annotation de référence pour identifier si un document suit la structure du modèle. Les chercheurs ont utilisé ce type de système pour la réponse automatique aux questions (extraire des modèles de questions et y répondre). Mais dans votre cas, c'est plus difficile car vous devez apprendre la structure à partir d'un rapport. À la lumière du Traitement du Langage Naturel, il est plus difficile de résoudre votre problème (aucune tâche simple de TAL ne correspond à la définition de votre problème) et vous n'avez peut-être pas besoin d'un modèle élaboré (complex) pour résoudre votre problème.

Vous pouvez commencer par une simple correspondance de documents et calculer un score de similarité. Si vous avez une grande collection d'exemples positifs (rapports bien formatés et spécifiés), vous pouvez construire un dictionnaire basé sur des poids tf-idf. Ensuite, vous pouvez vérifier la présence des tokens du dictionnaire. Vous pouvez également considérer ce problème comme un problème de classification binaire. Il existe de bons classificateurs d'apprentissage automatique tels que svm, régression logistique qui fonctionnent bien pour les données textuelles. Vous pouvez utiliser python et scikit-learn pour construire des programmes rapidement et ils sont assez faciles à utiliser. Pour le prétraitement du texte, vous pouvez utiliser NLTK.

Comme les rapports seront générés par des travailleurs sur le terrain et qu'il y a quelques questions qui seront répondues dans les rapports (vous avez mentionné environ 3 composants spécifiques), je suppose que les techniques simples de correspondance de mots-clés seront un bon début pour votre recherche. Vous pouvez progressivement vous orienter vers différentes directions en fonction de vos observations.

0voto

Cela semble être un scénario parfait pour appliquer un peu de machine learning à votre processus.

Tout d'abord, le problème d'annotation des données est traité. C'est généralement le problème le plus ennuyeux. Heureusement, vous pouvez compter sur les conservateurs. Les conservateurs peuvent marquer les phrases spécifiques qui spécifient : public, pertinence, objectif.

Entraînez certains modèles pour identifier ces types de clauses. Si tous les classificateurs se déclenchent pour un certain document, cela signifie que le document est correctement formaté.

Si des erreurs sont rencontrées, assurez-vous de re-entraîner les modèles avec les exemples spécifiques.

0voto

amirouche Points 1063

Si vous ne fournissez pas d'indications sur le format du document, il s'agit d'un problème ouvert.

Cependant, ce que vous pouvez faire est de demander aux personnes rédigeant le rapport de se conformer à un certain format pour le document, avec 3 parties ayant chacune un titre prédéfini comme suit

1. Objectif

Explique le but du document en plusieurs paragraphes.

2. Sujet / Problème

Ceci aborde le problème de foobar, également connu sous le nom de texte factice "Lorem Ipsum".

3. Conclusion

Que peut faire le lecteur après l'avoir lu?

Vous pouvez analyser ce document à partir du format .doc par exemple et en extraire les trois parties. Ensuite, vous pouvez passer par la vérification orthographique, la grammaire et l'algorithme de complexité textuelle. Et enfin, vous pouvez par exemple extraire les entités nommées (cf. Reconnaissance d'Entités Nommées) et les mots de faible TF-IDF.

0voto

Emre Colak Points 471

J'ai essayé de faire quelque chose de très similaire avec les essais cliniques, où la plupart des données sont également rédigées en langage naturel.

Si vous ne vous souciez pas des données passées, et que vous avez le contrôle sur ce que les agents de terrain écrivent, peut-être pouvez-vous leur demander de fournir ces 3 champs supplémentaires dans leurs rapports, et vous en auriez fini.

Sinon; CoreNLP et OpenNLP, les bibliothèques avec lesquelles je suis le plus familier, ont des outils qui peuvent vous aider dans une partie de la tâche. Par exemple; si votre motif Regex correspond à un mot qui commence par le préfixe "inten", le mot réel pourrait être "intention", "intended", "intent", "intentionally", etc., et vous ne sauriez pas nécessairement si le mot est un verbe, un nom, un adjectif ou un adverbe. Les étiqueteurs POS et les analyseurs syntaxiques de ces bibliothèques pourraient vous dire le type (POS) du mot et peut-être que vous vous souciez seulement des verbes qui commencent par "inten", ou plus strictement, les verbes parlés à la 3ème personne du singulier.

CoreNLP a un autre outil appelé OpenIE, qui tente d'extraire des relations dans une phrase. Par exemple, étant donné la phrase suivante

Née dans une petite ville, elle a pris le train de minuit allant n'importe où

CoreNLP peut extraire le triplet

elle, a pris, train de minuit

Combiné avec l'étiqueteur POS par exemple; vous sauriez également que "elle" est un pronom personnel et que "a pris" est un verbe au passé.

Ces bibliothèques peuvent accomplir de nombreuses autres tâches telles que la tokenisation, la division de phrases et la reconnaissance d'entités nommées et il vous appartiendrait de combiner tous ces outils avec vos connaissances métier et votre créativité pour trouver une solution qui fonctionne pour votre cas.

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