URL: https://linuxfr.org/users/montaigne/journaux/chat80 Title: Chat80 Authors: Ontologia Date: 2010年06月24日T14:07:06+02:00 Tags: taln et intelligence_artificielle Score: 31 Chat80 est bien connu dans le monde de l'intelligence artificielle et le traitement automatique du langage naturel (TALN). Ce logiciel a été écrit en Prolog entre 1978 et 1982 par Francisco Pereira et David H. Warren. Prolog en était alors à ses balbutiements, et encore assez peu considéré sérieusement par la communauté scientifique d'alors. Chat80 possédait à l'époque une petite base de données prolog de géographie. On y trouvait quelques informations sur les pays frontaliers les un aux autres, leur population, leur capital, leur surface ou encore les fleuves qui y coulent. Chat80 est ce que l'on appel un NLIDB : Natural Language Interface to DataBase. On peut donc lui poser quelques questions en anglais et voir s'afficher la réponse. Un simple exemple est tout de suite parlant : > Which country bordering the Mediterranean borders a country that is bordered by a country whose population exceeds the population of India ?> / Et de nous répondre :> Turkey> / (eh oui à l'époque l'URSS était un grand pays...) (Petite parenthèse pour dire que je viens de découvrir que le fameux Wolfram Alpha qui était soit disant révolutionnaire, est quand même capable de répondre ce genre de question : [http://www.wolframalpha.com/input/?i=What+are+the+capitals+o(...)](http://www.wolframalpha.com/input/?i=What+are+the+capitals+of+the+countries+bordering+the+atlantic+sea+%3F) ) Comment est-ce possible ? La réponse est résumable en quelques mots, mais difficile à comprendre profondément. Chat80 analyse la structure grammaticale de la question, dans la plus pure perspective de la grammaire générative inventée par Noam Chomsky. Il en produit une arbre grammatical, qui va être analysé pour être transformé en requête logique, qui est exécutée. A l'époque vu les performances limités des machines, un "planner" similaires à ceux que l'on trouve dans les SGBD a été ajouté afin d'améliorer les temps de réponse. Prenons une phrase plus simple pour l'exemple :> What are the capitals of the countries bordering the Baltic ?> / Etiquetons la grammaticalement : What/Whq are/Verb the/det capitals/noun of/prep the/det countries/noun bordering/Verb the/det Baltic/Noun ? Ce qui nous donne après analyse une structure grammaticale de la phrase `image_perdue`. C'est à partir de cette arbre que l'on construit la requêtes logique : Le `what` initial dans la phrase, qui est un pronom, initie ce qui sera la _variable_ Le verbe être indique que l'on cherche un existence, donc une liste Le COD (rappelez vous vos vieux cours de grammaire ... ;-) ) indique que l'on cherche les capitales La Prepositional Phrase (le COI si vous préférez*) est une phrase entière ` The countries bordering the Baltic`. Là encore on a une structure SVO (Sujet Verbe Complément). Elle s'analyse simplement : border(X,baltic) ** Or comme cette phrase se trouve dans une Prepositional Phrase, X est une variable liée Chat80, en mode trace, nous donne : answer([$VAR(0)]) :- £spaces£ £/spaces£$VAR(0) = setof ( [$VAR(1)]: $VAR(2) , country($VAR(1)) ) £spaces£ £/spaces£& £spaces£ £/spaces£borders($VAR(1), baltic) £spaces£ £/spaces£& £spaces£ £/spaces£$VAR(2) = setof ( $VAR(3) capital($VAR(1), $VAR(3)) ) Le set of est une sorte de select/where On pourrait l'écrire : Select $country,$capital where £spaces£ £/spaces£country($country) and £spaces£ £/spaces£borders($country,Baltic) and £spaces£ £/spaces£capital($country,$capital) [Quelques progrès on été réalisés depuis](http://scholar.google.fr/scholar?q=nlidb&hl=fr&btnG=Rechercher&lr=) (compréhension d'une conversation et de l'implicite), ainsi que quelques tentatives commerciales. Cette approche a plusieurs problème : l'anglais doit être grammaticalement correcte, et reconnue par le logiciel. Des ambigüités peuvent apparaître. Si l'on se connecte à un SGBD relationnel, il faut pouvoir faire la liaison entre l'anglais pur et propre et des champs du genre Client_no ou Client_adresse. Malgré cela, ce genre d'approche recèle une puissance inexploitée : imaginez le gain de temps que l'on peut faire sur des requêtes complexes, des algorithmes, etc... Un mot sur le libre. J'ai écrit à Pereira (impossible de trouver le mail de Warren) pour lui demander si 30 ans après cela ne le dérangeait pas de laisser son logiciel dans une licence libre (celle qu'il veut, c'est du détail). Toujours pas de réponse au bout de 10 jours. Il y a quelques ressources de ce genre dans le monde libre, mais ces approches sont surtout statistiques (ie. la machine apprend à reconnaitre des formes grammaticales), ce qui est très bien pour de l'analyse de texte, mais pas très adapté à des requêtes précises. Bref, rien de très exploitable en prolog dans le monde libre, à moins que je l'ai loupé... A part ça, pas mal de choses en python (nltk, etc...). Je vais me faire taper, mais même si je trouve python très bien, cela reste un langage impératif/objet classique. Je pense que c'est absolument pas adpté pour ce genre de problème. Pour se donner une idée de ce qui me fait avancer cela : une implémentation un peu similaire à chat80, "Pytalk" qui fait à peine plus et pas mal de choses en moins a été faite en python. Plus de 38 000 lignes de code. Un parser à n'en plus finir (12 074 lignes de codes !!). Chat80, c'est 5335 de prolog dont 1901 ligne pour les données brutes. Cela montre l'efficacité impressionnante de ce langage pour ce genre de problème (on est bien d'accord que pour plein d'autres choses, c'est pas adapté). Voilà, le troll est lancé, et si vous avez des liens.. * Les canons de la grammaire générative ne font pas d'analyse de la **fonction** grammaticale à la française, où l'on cherche les Sujet, COD, COI, Complément circonstanciel, propositions relatives, subordonnées, etc... Ce que je trouve particulièrement dommage car cela simplifie énormément l'analyse en obtenant des arbre très profond. La grammaire générative est basé sur l'idée de pouvoir utiliser une machine à état fini pour le parsing (comme les parsers de langage de programmation) et (c'est lié) de grammaire hors contexte. je trouve ça un peu dommage, car ce genre d'analyse de fonction grammaticale apporte une très grande aide dans l'analyse de la logique de la phrase ** Intro ultra rapide à prolog pour ceux qui ne connaissent pas : Prolog est une sorte de SGBD orienté logique et ultra puissant. On y stocke des fait : border(france,italy). border(france,belgium). Et on peut l'interroger : border(france,X). X = italy X = belgium On reconnait ici une forme verbe(sujet , complément)

AltStyle によって変換されたページ (->オリジナル) /