SEM
Segmenteur-Étiqueteur Markovien

Un étiqueteur basé sur les CRF, licence GNU.

Ces scripts ont été optimisés pour les systèmes Unix. Ils risquent probablement de ne pas fonctionner sous Windows.

Présentation


Il s'agit d'un outil permettant d'annoter du texte brut avec des étiquettes POS (détaillées ci-dessous) sur lequel on pourra se baser pour éventuellement, par la suite, effectuer un parenthésage en chunks. Par le terme " chunk ", on désigne la plus petite séquence d'unités linguistiques possible formant un groupe avec une tête forte, et qui n'est ni discontinue, ni récursive (Abney 91). Les chunks définissent la structure syntaxique superficielle des phrases (Constant et al. 11).

Plus d'informations concernant la base théorique de SEM dans la partie bibliographie et concernant le parenthésage en chunks dans le guide d'annotation.

/!\ Il faut cependant noter quelques différences entre le programme et les documents explicatifs, qui évoluent en parallèle mais pas forcément de manière simultanée.
D'un côté, certains choix linguistiques faits lors de la rédaction des articles de la bibliographie ne concordent éventuellement plus avec la version actuelle du programme, notamment le groupe COOR devenu CONJ après absorption des conjonctions de subordination en plus des conjonctions de coordination. Par ailleurs, pour éviter les problèmes d'étiquetage, ce groupe ne contient plus que les conjonctions elles-mêmes et non plus le groupe qu'il introduit.
D'un autre côté, les modèles fournis avec SEM ne sont pas toujours compatibles avec les choix linguistiques du guide, mais plutôt avec ceux des articles.

Cet outil ne fonctionne pas avec des programmes mais des modèles, c'est-à-dire des données qui sont le résultat d'un apprentissage automatique et qui servent à paramétrer le programme. Ceci explique pourquoi il est absolument nécessaire de choisir des modèles (cf. partie commandes) pour appliquer SEM. Par ailleurs, certains de nos modèles ont été construits en se servant de données du lefff, le lexique des formes fléchies du français (Clément et al. 04).

L'apprentissage en question a été réalisé sur le French Treebank (Abeillé et al. 03), un corpus arboré de phrases du français tiré du journal Le Monde.

Prérequis


Les programmes suivants doivent être installés sur votre ordinateur pour pouvoir lancer l'étiqueteur :

Toutefois, l'installation de bazaar est facultative et le code peut être directement récupéré par navigateur sur launchpad, dans le projet crftagger.

Choix linguistiques


Unités multi-mots - L'étiqueteur de SEM est étroitement lié à son segmenteur, en particulier pour la question des unités multi-mots ou mwe (multi-word entity). Il s'agit d'un ensemble de mots qui forment une unité polylexicale contigue à part entière et dont la nature peut varier, par exemple " cordon bleu ", " San Francisco ", " par rapport à " (Tellier et al. 12).
Si on ne dispose pas en entrée d'un fichier segmenté en tokens au préalable, SEM propose deux types de segmentation :

* Tous les signes de ponctuation sont considérés comme des séparateurs, sauf le point dans le cas où il suit l'abréviation d'un titre de civilité, et le tiret pour pouvoir préserver les mots composés (voir l'exemple avec " Ile-de-France "). Une exception est faite pour les inversions sujet-verbe (avec éventuellement un t épenthétique comme dans " a-t-il ") qui sont bien découpées.

POS - L'étiqueteur se base sur le jeu d'étiquettes morpho-syntaxiques de (Crabbé et al. 08), auquel on a ajouté une étiquette récupérée de l'application sur le French TreeBank, CL, pour les clitiques dont on ne trouve pas la sous-catégorie, c'est-à-dire les explétifs qui ne sont explicitement considérés ni comme sujets, ni objets, ni réfléchis (typiquement " y " dans " il y a " ou le démonstratif " c' ").

Voici la liste exhaustive des étiquettes utilisées et la catégorie syntaxique à laquelle ils correspondent :

ADJ
adjectif
ADJWH
adjectif interrogatif
ADV
adverbe
ADVWH
adverbe interrogatif
CC
conjonction de coordination
CL
pronom clitique
CLO
pronom clitique objet
CLR
pronom clitique réfléchi
CLS
pronom clitique sujet
CS
conjonction de subordination
DET
déterminant
DETWH
déterminant interrogatif
ET
mot tiré d'une langue étrangère
I
interjection
NC
nom commun
NPP
nom propre
P
préposition
P+D
forme contractée préposition et déterminant
P+PRO
forme contractée préposition et pronom
PONCT
ponctuation
PREF
préfixe
PRO
pronom
PROREL
pronom relatif
PROWH
pronom interrogatif
V
verbe
VIMP
forme verbale à l'impératif
VINF
forme verbale à l'infinitif
VPP
participe passé
VPR
participe présent
VS
forme verbale au subjonctif

Chunks - Quant à la liste des chunks, elle est directement liée à celle des étiquettes POS et comporte donc 6 grands types de groupes (têtes potentielles entre parenthèses) :

__UNKNOWN__
chunk de nature non-identifiée (ET)
AP
chunk adjectival (ADJ, ADJWH)
AdP
chunk adverbial (ADV, ADVWH, I)
CONJ
chunk conjonction (CC, CS)
NP
chunk nominal (CLO, CLR, CLS, NC, NPP, PRO, PROREL, PROWH)
PP
chunk prépositionnel (P, P+D, P+PRO)
VN
chunk verbal (V, VIMP, VINF, VPP, VPR, VS)

A chaque chunk est associée une étiquette qui marque le début du chunk (B, pour beginning) ou sa continuité (I, pour in). Quant aux mots qui ne font pas partie d'un des chunks ci-dessus, ils sont alors annotés O (pour out).

Pour plus d'informations concernant le découpage en chunks, consulter le guide d'annotation.

Entités nommées - La liste des entités nommées a été définie dans l'annotation référentielle du French Treebank en entités nommées (Sagot et al. 12). 7 types principaux sont distingués :

Company
les entreprises
FictionCharacter
les personnages fictifs
Location
les lieux (ville, pays, etc...)
Organization
les associations ou organisations à but non lucratif par exemple
POI
Point Of Interest, les lieux d'intérêt tels que l'Opéra
Person
les personnes physiques
Product
les produits

À l'instar des chunks, à chaque entité nommée est associée un marqueur B ou I pour son début et sa continuité respectivement.

Illustration sur un exemple


Prenons la phrase suivante, extraite du French TreeBank :

	" Tout nouvel organisme public national sera implanté hors d'Ile-de-France. "

1. Segmentation : avant d'effectuer l'étiquetage sur cette phrase, il faut au préalable la segmenter en tokens (ou jetons), où chaque token représente une unité atomique, éventuellement multimots (dont les différentes parties pourraient par exemple être rattachées par des tirets bas).

	Tout
	nouvel
	organisme
	public
	national
	sera
	implanté
	hors_d'
	Ile-de-France
	.

/!\ Si on ne dispose pas d'une segmentation au préalable, on peut demander à SEM de le faire, auquel cas on obtiendrait, selon la segmentation dite " maximale " de SEM :

	[...]
	hors
	d'
	Ile-de-France
	.

Les unités multi-mots ne sont donc pas reconnues mais peuvent être prises en compte par la suite dans l'étiquetage POS, où chaque étiquette, correspondant à la continuation d'une unité multi-mots commencée précédemment, sera précédée d'un tiret bas. Cette façon d'annoter a été préférée à celle décrite dans (Constant et al. 11), qui identifiait ces unités avec le codage BI(O) rattachées au POS, afin de réserver ce type d'étiquetage pour le chunking uniquement. On aurait par exemple :

	[...]
	hors	P
	d'	_P
	Ile-de-France	NPP
	.

2. Etiquetage POS : à partir de là, il est alors possible d'effectuer un étiquetage POS. Par ailleurs, pour améliorer les performances de l'étiqueteur, on a la possibilité d'utiliser des ressources linguistiques externes (voir la partie commandes ci-dessous). Une fois l'étiquetage POS réalisé, nous obtenons le résultat suivant :

	Tout		DET
	nouvel		ADJ
	organisme	NC
	public		ADJ
	national	ADJ
	sera		V
	implanté	VPP
	hors_d'		P
	Ile-de-France	NPP
	.		PONCT

3. Chunking : sur la base de cet étiquetage POS, il est possible d'effectuer un parenthésage en chunks sous la forme d'une couche d'étiquettes supplémentaire.

	Tout		DET	B-NP
	nouvel		ADJ	I-NP
	organisme	NC	I-NP
	public		ADJ	I-NP
	national	ADJ	I-NP
	sera		V	B-VN
	implanté	VPP	I-VN
	hors_d'		P	B-PP
	Ile-de-France	NPP	I-PP
	.		PONCT	O

Pour finir, le texte est réécrit sous forme de phrase avec son étiquetage POS et son parenthésage en chunks :

	(NP Tout/DET nouvel/ADJ organisme/NC public/ADJ national/ADJ) (VN sera/V implanté/VPP) (PP hors_d'/P Ile-de-France/NPP) ./PONCT

Les commandes


SEM dispose de module indépendants les uns des autres, le programme principal faisant alors office d'aiguilleur vers le module à lancer. Pour obtenir la liste des modules disponibles et la syntaxe générale pour les lancer : ./sem (--help ou -h)

Pour lancer un module, la syntaxe générale est : ./sem <nom_du_module> <arguments_et_options_du_module>

La liste des modules étant :

Pour lancer le module principal :

	./sem tagger <fichier_de_configuration> <fichier_d'_entrée> [-o/--output-directory <répertoire_de_sortie>]

Le fichier de configuration est un fichier xml ayant pour classe de document "master" et contenant deux grandes "sections", à savoir pipeline qui définit le séquencage des actions à effectuer et options qui définit les options globales telles que l'encodage des fichiers, ou le mode verbeux.

Schéma explicatif - avec les modules invoqués (en rouge) et les modèles disponibles (rond). Le nettoyage des informations a été occulté afin de ne pas surcharger le schéma :

schéma explicatif de SEM

Le parenthésage en chunks avec l'étiquetage POS tenant compte des unités multi-mots ou mwe (multi-word entities) n'est pas encore implémenté, ce qui explique pourquoi il résulte en un fichier à part, sans suite.

Exemple - si l'on part d'un fichier non segmenté "foo.txt" et qu'on voudrait un chunking complet, avec prise en compte des unités multi-mots et des ressources du LeFFF, on aurait la commande suivante :

	./sem tagger config.xml foo.txt --output-directory bar

Avec le fichier config.xml contenant :

<?xml version="1.0" encoding="UTF-8"?>
<master>
    <pipeline>
        <segmentation />
        <enrich config="pos-lefff.xml" />
        <label model="resources/models/plain+lefff" />
        <clean_info to-keep="0,-1" />
        <label model="model_all" />
    </pipeline>
</master>

Dans un fichier de configuration, lorsqu'un chemin relatif vers un fichier est donné, il est relatif par rapport au fichier de configuration.

Détaillons pas à pas ce que va faire le SEM si nous lui donnons ce fichier.

Autrement dit, on suit le schéma suivant :

exemple de chemin du schéma de SEM

Enrichissement de contenu textuel


Afin de faciliter l'enrichissement du contenu textuel, un fichier xml permet de définir quelles sont les informations à ajouter. Ce langage permet d'ajouter diverses informations dans un contexte local, qu'il s'agisse de traits endogènes ou exogènes (dictionnaires).

Les traits ajoutés sont locaux. C'est-à-dire que chaque information que nous souhaitons extraire sera évaluée indépendemment sur chaque token du texte.

Chaque information (on trouve une information par colonne dans un fichier vectorisé) dans un texte est déclarée de manière nominative. Chaque information doit avoir un nom qui lui est propre et il ne peut y avoir deux informations portant le même nom dans un même fichier.

La liste des traits endogènes est :

Quant à la liste des traits exogènes, elle est :

Exemple de fichier d'enrichissement

<?xml version="1.0" encoding="UTF-8"?>
<information>
    
    <!-- les entrées présentes dans le texte avant de lancer l'enrichissement -->
    <!-- "before" signifie qu'elles seront écrites avant les informations ajoutées -->
    <!-- "after" signifie qu'elles seront écrites après -->
    <entries>
        <before>
            <entry name="word" />
        </before>
    </entries>
    
    <endogene>
        <!-- le mot commence par une majuscule et n'est pas en début de phrase -->
        <!-- les nœuds nullary et unary extraient une propriété booléene du token. -->
        <!-- leurs noms sont basés sur leur arité. -->
        <!-- 	nullary : arité 0. -->
        <!-- 	unary : arité 1. -->
        <!-- action est l'identifiant de la propriété à extraire. -->
        <!-- 	BOS (nullary) : le token est-il en début de phrase ? -->
        <!-- 	isUpper (unary) : le caractère à la position donnée est-il une majuscule ? -->
        <expression name="UpperNotBOS">
            <and>
                <left>
                    <unary action="isUpper">0</unary>
                </left>
                <right>
                    <not>
                        <nullary action="BOS" />
                    </not>
                </right>
            </and>
        </expression>
        
        <!-- le mot est une abbréviation placée devant un nom propre -->
        <!-- pour chaque élément, nous utilisons une expression régulière insensible à la casse -->
        <!-- la condition est vérifiée si au moins un élément de la liste (some = "au moins un") -->
        <!-- trouve une correspondance dans le mot courant -->
        <list name="ABN" action="some">
            <element type="regexp" casing="i">^dr\.?$</element>
            <element type="regexp" casing="i">^mmes?\.?$</element>
            <element type="regexp" casing="i">^me?lles?\.?$</element>
            <element type="regexp" casing="i">^m(e|rs?)?\.?$</element>
            <element type="regexp" casing="i">^st\.?$</element>
        </list>
    </endogene>
    
    <exogene>
        <!-- on énumère les dictionnaires des différences étiquettes POS -->
        <token name="ADJ" path="resources/lefff/ADJ" />
        <token name="ADJWH" path="resources/lefff/ADJWH" />
        <token name="ADV" path="resources/lefff/ADV" />
        <!-- et ainsi de suite -->
    </exogene>
</information>

Évaluation


Afin d'évaluer la qualité des étiquetages POS et chunk de SEM, ce dernier a été testé sur différents types de corpus, plus ou moins proches du corpus sur lequel il a été appris, c'est-à-dire le French Treebank (Abeillé et al. 03).

Les expériences ont porté sur la qualité des étiquetages des parties du discours (POS) d'une part, et de l'autre, sur la qualité du parenthésage en chunks sans la reconnaissance des unités multi-mots (modèle mwe), d'abord sur avec les POS corrects afin de pouvoir évaluer le chunker seul, puis avec les POS trouvés par SEM. Cette méthode a pour but de mettre en évidence la corrélation entre les étiqueteurs POS et chunk.

ÉtiquetageCorpus blogCorpus oralCorpus oral sans amorces
POS 95,6% 81,6% 82,1%
CHUNK NP (sur POS parfait) 91,9% 78,6% 78,6%
CHUNK NP (sur POS du programme) 87,0% 70,3% 70,2%

L'évaluation a été faite avec l'aide du programme crotal développé par Denys Duchier. Les valeurs calculées pour l'évaluation du POS correspondent à l'exactitude (accuracy) de toutes les étiquettes tandis que pour le chunking, c'est la valeur de la F-mesure des chunks stricts (frontière à frontière) que l'on a gardée.

Bibliographie


retour en haut de la page

~ Ilaine W.

logo HTML 5 noir Valid CSS!