Ecrit en Swi-Prolog, APE est capable rendre un ensemble de phrases sous forme logique en utilisant la représentation DRS (Discourse representation structures). Cette représentation est disponible sous différents formats (Prolog, XML, OWL, etc.) et APE peut être utilisé en tant que webservice, serveur web ou en simple ligne de commande.
Quelques outils gravitent autour du projet. Citons ACE editor qui permet d'écrire des phrases compatible ACE, RACE (ACE reasoner) qui permet de réaliser des déductions sur du texte ACE, ACEWiki un wiki sémantique.
ACE est un projet de l'université de Zurich mené depuis 1996 et est distribué en LGPL. ACE a été choisi comme anglais controllé par le projet de l'Union Européenne "EU Network of Excellence REWERSE (Reasoning on the Web with Rules and Semantics)" ACE est conçu pour analyser le texte uniquement sur la base de sa syntaxe, toute sémantique du texte n'est ainsi pas prise en compte pour conserver des performances raisonnables et donner toutes latitudes à d'autres outils utilisant des ontologies de faire leur travail en s'appuyant sur les formules logiques produites par APE.
APE est construit autour d'un vocabulaire imposé constitué uniquement de déterminants, conjonctions, prépositions. Ainsi le vocabulaire (noms, verbes) est entièrement définissable par l'utilisateur, qui doit juste remplir un lexique sous forme de fichier Prolog. Chaque mot du lexique est seulement associé à sa nature grammaticale.
ACE permet d'exprimer des assertions, mais aussi de poser des questions. Il est possible de poser des variables (en lettre majuscule, un seul caractère). Par exemple les deux phrases :
Henri inserts six cards in the box. Who insert a card?
va générer la représentation DRS :
drs([A, B, C],
[object(A, card, countable, na, eq, 6)-1/4,
object(C, box, countable, na, eq, 1)-1/7,
predicate(B, insert, named('Henri'), A)-1/2,
modifier_pp(B, in, C)-1/5,
question(
drs(
[D, E, F],
[query(D, who)-2/1,
object(E, card, countable, na, eq, 1)-2/4,
predicate(F, insert, D, E)-2/2]
)
)
]
)
On a ici, pour la première phrase, 3 variables.
A chaque fois, le premier paramètre est la variable qui représente le terme.
A est l'objet card, qui est objet dénombrable.
B, le prédicat insert qui s'applique à A, B et à Henri (un nom propre) dans le sens named('Henri) insert A in B
C est l'objet box lui aussi dénombrable.
On remarque le prédicat modifier_pp qui permet de lier B et C en spécifiant que B est dans C
Les -\d/\d à la fin de chaque prédicat permette de spécifier le numéro de la phrase pour le premier.
Passons maintenant à la question :
On a 3 variables D, E et F
Le query(D,who) permet de définir que la question (qui) porte sur la variable D
L'objet E est l'objet card.
Le prédicat F du verbe insert porte sur D et E.
Muni d'une telle représentation, on peut aisément travailler sur des algorithmes de raisonnement tel qu'il en existe en Intelligence Artificielle depuis 30 ans.
ACE est aussi capable de produire des paraphrase du texte donné en paramètre. Pour notre exemple, APE nous propose une paraphrase qui diffère peu :
Henri inserts 6 cards in a box.
Who inserts a card?
A l'utilisation ACE peut paraître difficile à prendre en main, tant il est parfois malaisé d'écrire une phrase correcte pour le modèle. Mais on finit par s'habituer aux cadres imposés et on retient la facilité d'écrire des expressions complexes qui donneraient beaucoup plus de fil à retordre si on devait les écrire en un langage logique du premier ordre.
Aller plus loin
- Attempto Controlled English (20 clics)
- Attempto Controlled English sur Wikipedia (15 clics)
- Discourse representation theory (4 clics)
- APE (2 clics)
- Discourse Representation Structures for ACE 6.6, Technical Report (3 clics)
# Traductions ?
Posté par JGO . Évalué à 5.
(La syntaxe de l'anglais simplifié peut être mappée sur un français simplifié, et le français simplifié sur les autres langues latines modernes). Une des principales applications de la langue contrôlée étant la traduction automatique, cela pourrait alors permettre une collaboration multilingue sans précédent. Le contributeur A écrit en anglais contrôlé, traduit dans les langues B, C, D... Le contributeur B corrige le texte dans sa langue et provoque la mise à jour immédiate dans toutes les autres langues.
[^] # Re: Traductions ?
Posté par drakmaniso . Évalué à 5.
Dans la vie réelle, le contexte, les non-dits, les allusions personnelles ou culturelles sont une dimension essentielle de toute forme d'expression. Or, c'est précisément tout cela qui passe à la trappe dans cet "anglais contrôlé", parce que, par définition, cela ne rentre pas dans le domaine de la logique.
La seule utilité que je peux concevoir pour ce type de langage (qui rappelle furieusement la Lojban, descendant de la Loglan), c'est dans le dialogue homme/machine, pour donner des ordres à un ordinateur dans un langage proche de la langue maternelle de l'utilisateur. Sauf qu'il y a déjà eu des tentatives dans cette direction, et qu'au final cela créé plus de confusion qu'autre chose.
Après, d'un point de vue recherche pure, c'est certainement un projet très intéressant.
[^] # Re: Traductions ?
Posté par arnaudus . Évalué à 1.
"This beer is free, Linux is free, Stéphane Taponier is not free"
A) -> l'analyse compliquée se fait ici, il faut traduire ça dans un langage non-ambigü
"This beer is free[gratis] and Linux is free[software] and Stéphane Taponier is not free[freedom]"
B) -> À partir de là, on peut traduire dans n'importe quelle langue, en remettant des ambiguités si on veut
"Cette bière est gratuite, Linux est libre et Stéphane Taponier n'est pas libre."
L'existence d'une telle syntaxe intermédiaire normalisée me semble une étape intéressante, car elle permet de bien dissocier les étapes de la traduction. Même si l'intervention humaine peut rester nécessaire, on peut imaginer qu'elle puisse être réduite à lever les ambiguités.
[^] # Re: Traductions ?
Posté par Ontologia (site web personnel) . Évalué à 2.
Ya un papier là dessus : http://www.ifi.uzh.ch/ddis/staff/goehring/btw/files/Bernstei(...)
Un prof a testé ses étudiants et au bout de 3 jours ils sont plus à l'aise avec ACE qu'avec SQL.
En gros partout ou tu travailles avec de la logique de premier ordre, tu pourrais utilement avoir besoin de ce genre d'outil, car ça te simplifie l'écriture de tes formules.
Pour la traduction, je n'y crois pas, et d'autant plus que c'est le métier de ma compagne et que j'en découvre chaque jour un peu plus l'énorme complexité.
Comme elle me le répète souvent : "Tu ne peux pas traduire un texte que tu ne comprend pas".
Or là ACE travaille uniquement sur la syntaxe, il n'essaye pas de comprendre le texte, l'approche choisie est très claire là dessus.
Ca peut des fois donner n'importe quoi car il n'a aucune notion de verbe de changement d'état ou de verbe d'action.
Cet outil a des limites très bornées, mais ce qui est génial, c'est qu'en plus d'être libre, cet outil est très abouti.
« Il n’y a pas de choix démocratiques contre les Traités européens » - Jean-Claude Junker
[^] # Re: Traductions ?
Posté par JGO . Évalué à 1.
C'est dommage parce que ça existe déjà.
ACE ne travaille que sur la syntaxe, mais on peut lui refiler une liste de mots des langues contrôlées prévues pour normaliser le lexique dans un contexte donné. C'est le genre de truc qui doit faire bondir de sa chaise un littéraire qui aime la variété de ses mots, mais là on parle de communication technique (p.ex. tu cites l'interaction homme/machine).
[^] # Re: Traductions ?
Posté par drakmaniso . Évalué à 3.
Tant mieux si certains y trouvent leur compte. Je n'ai pas la prétention de prédire l'avenir de ce genre d'outils, juste que d'après mon expérience, ce qui semble au début une facilité se transforme vite en contrainte.
Un outil proche d'une langue naturelle a une courbe d'apprentissage très différente d'un langage informatique: la phase d'initiation est très rapide, pour des raison évidentes. C'est sur le long terme que les difficultés apparaissent, parce qu'il faut que l'utilisateur apprenne tout un tas d'exceptions, et parfois des règles légèrement différentes de sa langue maternelle. Toujours d'après mon expérience, la seule façon vraiment efficace de faire cet apprentissage est de comprendre comment fonctionne l'ordinateur, et pourquoi les limitation ont été mises en place dans le langage.
Bref, pour un système de requête dans une bibliothèque publique, pourquoi pas. Dans un environnement professionnel, je reste persuadé qu'un langage informatique "traditionnel" reste plus productif.
[^] # Re: Traductions ?
Posté par Ontologia (site web personnel) . Évalué à 2.
Pour la bibliothèque publique ou pour le DAF qui veut faire un petit peu de contrôle de gestion en farfouillant la base, l'application est claire.
Pour le milieu professionnel oui et non, et en fait ça dépend de plusieurs paramètres :
- Couverture du langage : si le langage contrôlé est assez limité, oui c'est vite un problème, parce que tu vas passer un temps fou à trouver une forme grammaticalement correcte (et je l'ai bien vu en jouant avec APE ces deux derniers jours). Mais ça dépend de la couverture du langage. ACE a clairement vocation à grossir, et plus il grossi, plus il déjouera ce piège.
- Pour remplacer le SQL, s'il s'agit de proposer à un DBA de coder avec ça, on est d'accord, en l'état actuel des choses, c'est débile.
Mais quand tu regardes ce qui est développé, soit t'as un peu de SQL qui traine et qui est codé par des dev qui n'aiment pas ça et qui ne sont pas à l'aise, malgré que les requêtes soit jamais super complexe,
soit ils utilisent des frameworks qui cachent les requetes derrière des longues boucle sur les objets de l'ORM ou qui s'exprime en H(ibernate)QL.
Bref, je suis pas certains que cette approche soit condamnée à jamais. Elle est pas encore mûre, c'est claire (et l'industrie a toujours 40 ans de retard sur la recherche), mais elle reste prometteuse.
« Il n’y a pas de choix démocratiques contre les Traités européens » - Jean-Claude Junker
[^] # Re: Traductions ?
Posté par JGO . Évalué à 2.
[^] # Re: Traductions ?
Posté par Ontologia (site web personnel) . Évalué à 2.
et ça marche :
Jh, give 20 random integers between 4 and 9 !
drs([], [command(drs([A, B, C], [object(A, integer, countable, na, eq, 20)-1/6, property(A, random, pos)-1/5, has_part(C, int(4))-1/'', predicate(B, give, named('Jh'), A)-1/3, modifier_pp(B, between, C)-1/7, has_part(C, int(9))-1/'', object(C, na, countable, na, eq, 2)-1/'']))])
Donc oui c'est faisable, on peut tenter ;-)
« Il n’y a pas de choix démocratiques contre les Traités européens » - Jean-Claude Junker
[^] # Re: Traductions ?
Posté par JGO . Évalué à 5.
Figure toi que c'est déjà utilisé par des entreprises*, mais ce serait bien que ce soit libre ! Applications : les manuels, la documentation, certains contenus d'un CMS.
Par exemple d'utilisation de langue contrôlée, les manuels de vol des avions sont écrits en anglais contrôlé et coutent cher à produire (il faut des traducteurs certifiés pour la variante d'anglais contrôlé qu'ils veulent dans chaque entreprise d'aviation).
Là ce projet fournit une langue formellement non ambigüe (comme le lojban que tu cites, mais lisible). Par exemple, si le manuel d'un gros projet comme KDE est produit dans cette langue, une version de base peut être générée sans aucun effort dans toutes les langues supportées. Dans un 1er temps, les relecteurs de plusieurs langues commitent des modifications de fond (contenu de l'aide de KDE) dans leur langue, qui sont répercutées dans toutes les langues. 2e temps, on arrive à la bêta, les langues branchent séparément et chacun polit sa traduction. C'est une grosse économie en couts dans une entreprise et en efforts bénévoles dans les projets libres.
* p.ex. va voir un truc commercial : http://www.muegge.cc/langage-controle.htm
[^] # Re: Traductions ?
Posté par Ontologia (site web personnel) . Évalué à 4.
Le pire c'est que j'ai bossé pour une boite qui fait des manuels techniques pour avion (mais c'était plus des listes de parts qu'autre chose) !
Effectivement, ce serait un outil à rajouter à la collection : il prendrait du DRS pour le traduire dans une langue souhaité.
ACE est quand même un langage super limité : tu es obligé d'utiliser le présent de l'indicatif, la voix active. les opérateurs modaux viennent d'être ajoutés. Les aspects temporels (j'en aurai d'ailleurs besoin pour ça), tu oublies, etc...
Mais tu as raison, le libre colonise tout !
« Il n’y a pas de choix démocratiques contre les Traités européens » - Jean-Claude Junker
[^] # Re: Traductions ?
Posté par Defre . Évalué à 2.
J'imagine pouvoir écrire un fichier d'internationalisation, pourquoi pas dans ma langue maternelle, avoir les traductions générées et les potentielles ambiguïtés pointées.
J'en demande peut-être trop ?
[^] # Re: Traductions ?
Posté par Defre . Évalué à 0.
[^] # Re: Traductions ?
Posté par drakmaniso . Évalué à 2.
Et, justement, les manuels traduits sont la plupart du temps une plaie, que l'on évite autant que possible d'utiliser. Ils sont souvent remplis de contre-sens et d'oublis, et toujours de formulations hautement improbables. Il suffit d'observer autour de soi les gens utiliser un manuel: la plupart du temps, ils vont lire une phrase, et ensuite tenter de la déchiffrer. Pour ceux qui connaissent la langue originale, cela consiste généralement à faire une "rétro-traduction".
Je pense que la principale raison d'exister de ces traductions automatique, c'est l'obligation légale d'avoir un manuel traduit dans la langue du pays où se fait la vente (ou un truc comme ça: IANAL).
Pour ce qui est des manuels des pilotes de ligne, pour avoir travaillé pour ce secteur, je doute fort que les ergonomes approuvent une automatisation des traductions. Il y a déjà suffisamment d'écueils possible dans l'utilisabilité de ce type de manuels professionnels, je ne pense pas que l'on soit prêt à confier à l'ordinateur une telle responsabilité.
[^] # Re: Traductions ?
Posté par claudex . Évalué à 1.
Justement, le but c'est d'avoir une langue qui permette une traduction plus correcte parce qu'elle évite les ambiguïtés que les traducteurs automatiques ne peuvent pas comprendre.
« Rappelez-vous toujours que si la Gestapo avait les moyens de vous faire parler, les politiciens ont, eux, les moyens de vous faire taire. » Coluche
# Foutaises !
Posté par Antoine . Évalué à 3.
[^] # Re: Foutaises !
Posté par drakmaniso . Évalué à 3.
Après, si tu voulais parler des directeurs de thèse, c'est une autre histoire.
(Cela pourrait aussi servir en entreprise, si celle-ci verse dans cette douce perversion, la "science appliquée".)
# Bingo !
Posté par Axioplase ıɥs∀ (site web personnel) . Évalué à 4.
Deux fautes : 1/ « ambigüe » s'écrit en fait « ambiguë, » 2/ mais en fait, c'est ici au masculin, donc « ambigu. »
Sinon, je ne saisis pas trop l'intérêt de vouloir faire une logique du premier ordre basé sur l'anglais (langue « internationale » mais pas parlée ni comprise partout, même dans des pays développés), alors qu'on a remarqué que les mathématiques étaient le meilleur moyen concis et sans ambiguïté de communiquer des messages logiques.
Dans la mesure où les langues n'ont absolument pas toutes la structure de l'anglais, autant passer par la logique pour exprimer… la logique !
[^] # Re: Bingo !
Posté par reno . Évalué à 4.
[^] # Re: Bingo !
Posté par Axioplase ıɥs∀ (site web personnel) . Évalué à 2.
L'avantage du langage logique est qu'il permet de s'abstraire de ce problème : tu peux raisonner dans ta langue maternelle, et tu peux t'exprimer plus facilement, je le crois¹, en langage logique avec un entraînement vraiment minime.
¹ : C'est quelqu'un qui vit entouré de gens qui font de l'anglais depuis le primaire/collège et qui s'expriment à base de « let's eating râmen, this is Japanese noodle. » pour les plus loquaces qui te le dit…
[^] # Re: Bingo !
Posté par Ontologia (site web personnel) . Évalué à 4.
Toi tu es fort en maths, tu maitrise super bien les langages fonctionnels, et une formule logique te parait évidente à la création, manipulation.
Moi j'aime les langages fonctionnels, et les formules et les langages logiques, mais j'en ai assez peu pratiqué. Tu me faisais remarquer l'autre jour que je devais pas avoir beaucoup pratiqué le caml et c'est effectivement le cas (qq milliers de lignes à tout casser).
En ce qui me concerne, je met beaucoup de temps à écrire qq lignes en caml, je met énormément de temps à formaliser un problème en prolog.
Et moi j'aime ça
J'ai travaillé avec des centaines de dev qui adorent java ou autres langages de merde de ce style, et je peux te dire que :
- tout ce qui ressemble de près ou de loin à du fonctionnel, voire du non impératif les fait fuire
- tout ce qui a trait à de la logique formelle les fait fuir encore plus.
La plupart sont des bac+2, ou des ingénieurs sorties d'écoles où ils n'ont rien vu, à moins qu'il ait vite fait de tout oublier.
Alors effectivement, tu as raison, la plupart des gens son nuls en anglais, moi le premier, et ça me pose des problèmes quand je joue avec ACE. Et en plus j'ai ma copine interprète pas loin pour le rappeler à quel point je suis nul en grammaire anglaise.
Donc, pour intervenir une fois de plus à ce débat, le dev de base n'est pas à l'aise avec des langages logiques formelles, même si on le lui apprend.
Ya des gens qui sont pas capable de maitriser ça, point, et moi le premier.
T'as des facilités par rapport à la moyenne, admet le, c'est tout !
« Il n’y a pas de choix démocratiques contre les Traités européens » - Jean-Claude Junker
[^] # Re: Bingo !
Posté par Axioplase ıɥs∀ (site web personnel) . Évalué à 4.
Je ne parle pas d'une question de goût qu'on pourrait retrouver dans le choix du langage de programmation, C++, APL ou Haskell. Je parle d'un formalisme canonique dans lequel raisonner, de fondements.
Quelque soit le langage utilisé, si tu ne sais pas évaluer une formule logique du genre x \/ ¬x tu ne devrais pas programmer, ni en C++, ni en Java, ni en prolog ou quoi que ce soit.
Si la cible à laquelle est destinée le logiciel n'est pas capable de comprendre la logique sous-jacente, alors il y a je crois un problème ; et ce n'est pas écrire en anglais (même si c'est ta langue maternelle) qui va améliorer quoi que ce soit.
Pour résumer, soit
1/ l'utilisateur est compétent en logique, et je pense alors qu'imposer l'anglais est un choix ségrégatif à l'égard de nombreuses cultures
2/ l'utilisateur est incompétent en logique, et je pense alors que le logiciel n'est pas fait pour lui.
2 bis/ il faudra engager un logicien pour faire ce travail, car ça n'est pas forcément celui du dev, même s'il de la programmation est requise.
[^] # Re: Bingo !
Posté par Ontologia (site web personnel) . Évalué à 3.
Belle démonstration, bravo !
« Il n’y a pas de choix démocratiques contre les Traités européens » - Jean-Claude Junker
[^] # Re:Bingo !
Posté par daimrod . Évalué à 4.
[^] # Re: Re:Bingo !
Posté par Ontologia (site web personnel) . Évalué à 5.
J'ai bien compris le sens de ton message Axioplase, en gros pour toi, le programmeur parce qu'il programme est capable de maîtriser les bases de la logique.
Bah malheureusement non. Le développeur commun sait pisser de la ligne en java, remplir un fichier xml pour configurer un framework genre Spring ou Hibernate, éventuellement jouer avec javascript pour faire un peu de web, et pour l'élite de l'élite, appliquer des design patterns (ceux-ci sont respectés "lui il touche, si t'as un problème, tu peux t'adresser à lui" et le chef de centre connait leur prénom).
je serai curieux de faire le test "soit y = x \/ ¬x , que vaut y ?" dans la SSII où j'ai bossé pendant 2 ans.
Je suis sûr qu'un minorité serait capable de répondre, certainement moins de 20%. Déjà compte le nombre de type capable de lire la formule à voix haute en comprenant son sens, allez, je suis optimiste avec 30% des gens.
Le niveau des programmeurs sur linuxfr est infiniment supérieur à ce qu'on voit dans le milieu professionnel, ce n'est pas une bonne base d'observation.
Tiens dans deux jours, je vais apprend à un ingénieur en logistique à faire de la programmation web. Il connait rien à la logique, mais il va surement y arriver quand même !
Personnellement, j'avais produit au moins 20 000 lignes de code fonctionnelles quand je suis arrivé à la fac et que j'ai appris la logique !
Bref, je pense donc que pour cette bande d'incompétent, au moins ceux dont l'anglais est leur langue maternelle (avec peut être les natifs de langue anglo-saxones qui sont assez à l'aise avec), de l'anglais contrôlé est une bonne chose pour eux, ça leur permettra d'exprimer des choses plus naturellement, et leur apprendre la logique en douceur. Pense à la division relationnelle, qui est une horreur à exprimer en SQL, et qui s'exprime tout simplement en langage naturel.
Pour toute une population de non programmeur (ingénieur, contrôleur de gestion, fonctionnels, etc...) ca pourrait être très utile.
Une langue naturelle est intutive, une langue à la prolog ne l'est pas.
Des gens qui ont ton niveau sont très rares que tu le veuilles ou non, ou que tu fasses parties des doux rêveur qui affirment 'mais non les gens ne sont pas stupides !' aussi.
Les gens sont potentiellement intelligent, mais cette potentialité s'exprime rarement (et je suis le premier concerné).
J'adore ce quote dans http://quotes.cat-v.org/programming/ (ou http://web.archive.org/web/20040530095106/http://www.indwes.(...) pour l'interview complète ) ça correspond vraiment à ce que j'ai vu autour de moi.
Q: What is the most often-overlooked risk in software engineering?
A: Incompetent programmers. There are estimates that the number of programmers needed in the U.S. exceeds 200,000. This is entirely misleading. It is not a quantity problem; we have a quality problem. One bad programmer can easily create two new jobs a year. Hiring more bad programmers will just increase our perceived need for them. If we had more good programmers, and could easily identify them, we would need fewer, not more.
— David Parnas
« Il n’y a pas de choix démocratiques contre les Traités européens » - Jean-Claude Junker
[^] # Grammar nazi fail
Posté par Octabrain . Évalué à -1.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.