Blog d'un jeune (chercheur) entrepreneur en TAL

Aller au contenu | Aller au menu | Aller à la recherche

19mai

Plantage de Tomcat : java.lang.OutOfMemoryError: PermGen space

Depuis plusieurs semaines je constate des plantages réguliers de Tomcat avec pour seule trace dans les logs l'abscon message :

java.lang.OutOfMemoryError: PermGen space

Lire la suite

20sept.

UIMA insights : le doigt dans le workflow

Les opérations logicielles en traitement automatique des langues sont souvent très importantes, très coûteuse, mais également parallélisables. C'est l'un des avantages indéniables d'UIMA, par le choix d'une architecture par composants, de permettre de paralléliser les traitements assez simplement.

La programmation d'un composant UIMA doit donc se faire avec en tête l'idée qu'il pourrait être déployé pour un traitement parallélisé. Lorsque comme moi on n'a pas cette habitude, on se heurte rapidement à des petits obstacles techniques. Dans le cas présent, il s'agissait de développer un composant qui exportait les résultats d'un calcul dans un fichier CSV.

Lire la suite

08sept.

Un rapide tokeniseur en mots pour le français

Parmi les addons distribués avec UIMA, le composant WhitespaceTokenizer permet de découper les textes en "mots" en s'appuyant sur les espaces et autres blancs. Malheureusement si cette approche est acceptable pour l'anglais, elle est beaucoup plus problématique pour le français. Le découpage en mots n'est pas une tâche forcément évidente et qui nécessiterait un réel travail. Partagé entre la nécessité d'une tokenisation correcte et le peu de temps qui me reste pour terminer ma thèse, voici une proposition suffisamment acceptable pour mes besoins.

Lire la suite

29juin

"Le réseau n'est pas accessible" incongrue dans Eclipse (ou n'importe quelle application Java)

Depuis ma dernière mise-à-jour dans Debian Squeeze, je me suis aperçu qu'Eclipse (ou bien n'importe quelle application Java) n'était plus en mesure de se connecter au réseau. L'application retourne inéluctablement le message "Le réseau n'est pas accessible", quand bien même toutes les autres applications se connectent sans problème.

Apparemment ce comportement est dû à l'utilisation exclusive d'IPv6 dans Java (JVM Sun ou OpenJDK indifféremment)... ce qui sur les réseaux toujours en IPv4 ne mène à rien, et correspond effectivement à un réseau inaccessible.

La solution consiste à passer l'option -Djava.net.preferIPv4Stack=true à la JVM à son lancement. Pour Eclipse, il suffit d'ajouter cette ligne au fichier eclipse.ini (/etc/eclipse.ini) pour Debian.

La discussion concernant ce bug chez Debian : http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=560142

16mar.

Tests unitaires pour UIMA avec UUTUC

La qualité du code développé dans le cadre des activités de recherche scientifique n'est pas toujours aussi bon qu'on pourrait l'espérer. Outre la nécessité (évidente à mes yeux) d'ouvrir le codes des activités scientifiques financées par l'État et les collectivités territoriales, il est également nécessaire de suivre de bonnes pratiques de programmation. L'écriture de tests unitaires et leur exécution régulière est une de ces bonnes pratiques.

Je présente dans ce billet un cas d'utilisation de la bibliothèque UUTUC, présentée lors du Workshop sur l'Ingénierie Logiciel, les Tests et l'Assurance Qualité pour le Traitement des Langues Naturelles (SETQA-NLP 2009), pour tester l'implémentation d'une bibliothèque développée et utilisée dans le cadre de ma thèse (tddts-uima-shingling).

Lire la suite

21fév.

UIMA & Wikipédia (5) : Gestion du projet avec Maven

La création de composants UIMA permettant d'accéder et tirer parti de Wikipédia offrirait de nouvelles perspectives au traitement des langues en offrant un accès aisé à cette formidable ressource que représente l'encyclopédie libre. Je compte m'atteler à la création de tels composants et vais tâcher de publier plusieurs billets décrivant ma démarche en cours.

Voici le cinquième billet, plus orienté technique de développement, qui discute de la gestion du projet avec Maven, permettant notamment de gérer automatiquement les dépendances à MWDumper et à Wikimodel.

Lire la suite

02fév.

UIMA & Wikipédia (2) : Chargement d'un dump Wikipedia

Wikipedia est une incroyable source d'information, de données et plus généralement d'actes langagiers (utilisation du langage). Ce dernier point est très important pour nous autres chercheurs en traitement automatique des langues. En effet, nous avons besoin d'observer de très nombreux exemples d'utilisation du langage, que ce soit de manière automatique ou manuelle. Pour ce faire, nous compilons de vastes exemples d'utilisation du langage sous forme de corpus.

La création de composants UIMA permettant d'accéder et tirer parti de Wikipédia offrirait de nouvelles perspectives au traitement des langues en offrant un accès aisé à cette formidable ressource que représente l'encyclopédie libre. Je compte m'atteler à la création de tels composants et vais tâcher de publier plusieurs billets décrivant ma démarche en cours.

Voici le second billet qui discute du chargement d'un dump XML de l'encyclopédie libre et la distribution du contenu sous forme de CAS.

Lire la suite

30sept.

UIMA : Comment utiliser un type dont un attribut est un tableau de types ?

L'un des avantages indéniable de UIMA est de pouvoir définir son propre TypeSystem, ie l'ensemble des éléments que l'on va manipuler. De plus, ce TypeSystem est un arbre d'objets, ce qui permet de construire des structures de données enchevêtrées complexes.

Cet article illustre la construction et l'utilisation d'un type dont un attribut est un tableau d'un autre type.

Lire la suite

24sept.

Instancier une classe à partir de son nom

La chose que je préfère dans le paradigme objet, c'est la capacité d'introspection (apparemment le terme réflexion est plus apprécié en français). Dans ce billet je présente une astuce Java que j'avais déjà utilisé dans ce billet pour instancier une classe dont on ne connaît que le nom.

Lire la suite

23sept.

Nettoyage et améliorations du cpeGui

Depuis le temps que je peste après le manque d'ergonomie du cpeGui (org.apache.uima.tools.cpm.CpmFrame pour les intimes), j'ai voulu profiter d'un peu de temps durant une surveillance de TP pour jeter un coup d'œil au code et essayer d'obtenir quelque chose de plus intuitif. J'ai pu profiter des premiers pointeurs posés par mon collègue Matthieu pour m'introduire dans les méandre de la bête !

Au final j'ai à peu près tout cassé pour obtenir quelque chose d'assez proche de l'original en terme d'ergonomie... mais qui ne fonctionne plus !

Lire la suite

09sept.

UIMA : Écriture d'un composant stemmeur (racinisateur)

La racinisation (ou lexèmisation) est l'opération consistant à retrouver le radical d'un mot à partir de sa forme déclinée. Ceci passe souvent par le remplacement des suffixes ou des préfixes.

L'algorithme le plus connu pour la racinisation est celui de M. Porter. Snowball est une implémentation de racinisateur pour plusieurs langues dont le français. Je vais me baser sur la librairie java libstemmer de Snowball, placée sous licence BSD, pour développer un composant UIMA de racinisation.

Lire la suite

07mai

UIMA : Spécification du type d'annotation par paramètres

UIMA (Unstructured Information Management Architecture) est une architecture pour la gestion des données non structurées en passe de devenir un standard. J'utilise l'implémentation proposée par Apache dans le cadre de ma thèse sur la détection automatique de reprise pour tous mes traitements sur corpus.

Je publie dans cet article une petite astuce bien pratique qui permet de manipuler des annotations d'un type qui n'est pas connu a priori mais passé en paramètre d'un composant.

Lire la suite