Comment traiter les requêtes en langage naturel?

11

Je suis curieux de savoir comment interroger le langage naturel. Stanford possède ce qui semble être un ensemble solide de logiciels pour le traitement du langage naturel . J'ai également vu la bibliothèque Apache OpenNLP et l' architecture générale pour l'ingénierie du texte .

Il existe une quantité incroyable d'utilisations pour le traitement du langage naturel et cela rend la documentation de ces projets difficile à absorber rapidement.

Pouvez-vous me simplifier un peu les choses et, à un niveau élevé, décrire les tâches nécessaires pour effectuer une traduction de base de questions simples en SQL?

Le premier rectangle de mon organigramme est un peu mystérieux.

entrez la description de l'image ici

Par exemple, je pourrais vouloir savoir:

How many books were sold last month?

Et je voudrais que cela soit traduit en

Select count(*) 
  from sales 
  where 
   item_type='book' and 
   sales_date >= '5/1/2014' and 
   sales_date <= '5/31/2014'
Steve Kallestad
la source

Réponses:

6

L'interrogation en langage naturel pose de très nombreuses subtilités qui peuvent être très difficiles à généraliser. D'un niveau élevé, je commencerais par essayer de penser les choses en termes de noms et de verbes.

Donc pour la phrase: combien de livres ont été vendus le mois dernier?

Vous commenceriez par décomposer la phrase avec un analyseur qui retournera un format d'arbre similaire à ceci:

entrez la description de l'image ici

Vous pouvez voir qu'il y a un livre sujet, une phrase verbale composée indiquant l'action passée de vendre, puis une phrase nominale où vous avez le focus temporel d'un mois.

Nous pouvons décomposer le sujet pour les modificateurs: "combien" pour les livres, et "dernier" pour le mois.

Une fois que vous avez décomposé la phrase, vous devez mapper ces éléments au langage SQL, par exemple: combien => compter, livres => livre, vendu => ventes, mois => date_vente (intervalle), etc.

Enfin, une fois que vous avez les éléments du langage, il vous suffit de trouver un ensemble de règles pour la façon dont les différentes entités interagissent entre elles, ce qui vous laisse:

Sélectionnez le nombre (*) parmi les ventes où item_type = 'book' et sales_date> = '5/1/2014' et sales_date <= '5/31/2014'

C'est à un niveau élevé que je commencerais, alors que presque toutes les étapes que j'ai mentionnées ne sont pas triviales et que le trou du lapin peut être infini, cela devrait vous donner beaucoup de points à connecter.

neone4373
la source
1

Transformer des questions simples en réponses n'est pas du tout simple .

La première technologie à le faire aussi largement à travers la technologie et avec précision sera un grand gagnant.

Cependant, il y en a là-bas, comblant les lacunes en répondant aux questions avec l'intelligence artificielle (par exemple IBM Watson et Amazon Alexa). Cela nécessite de résoudre les complexités linguistiques liées aux données en question, ce qui est dans les magasins de données et quels sont les noms, les verbes et les pronoms.

Microsoft s'est aventuré ici avec English Query mais s'est ensuite arrêté. Kueri.me est une plateforme basée sur Python qui fait à peu près la même chose.

Les langages de requête structurés (SQL) et similaires, SOQL, MDX, Hive, Impala et les plus récents adoptent le SQL à l'ancienne. N'ont pas encore remplacé grand-chose, toutes ces pièces sont de petites corrections au plus grand "objectif final" et cela réside dans l'intelligence artificielle (IA), en particulier, l'apprentissage automatique.

La question étant:

"L'ordinateur peut-il savoir ce que vous voulez."

Pas encore. Il faut des linguistes, des mathématiciens, des ingénieurs et plus pour tous contribuer leur part du gâteau afin que nous puissions profiter de ce doux gâteau artificiel intelligent et appris par machine.

rochet
la source
0

Il existe plusieurs approches pour créer un analyseur qui analyserait un message en texte brut dans SQL. Par exemple, vous pouvez créer un analyseur basé sur la grammaire et utiliser un algorithme NLP pour créer la requête structurée. Si vous avez déjà beaucoup de messages analysés d'un domaine (comme le commerce électronique) - vous pouvez essayer une approche Machine Learning et l'utiliser pour votre analyse ultérieure.

Cependant, je pense que la meilleure approche consiste à combiner un analyseur grammatical pour la traduction de texte en SQL et ML pour compléter la grammaire basée sur des règles en fixant la syntaxe, en supprimant les fautes de frappe, etc.

En savoir plus sur les différentes approches ici .

MicRum
la source