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.

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 :

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

Les commandes


Pour obtenir de l'aide : python sem_tagger.py (--help ou -h)

Pour lancer le programme :

	python sem_tagger.py <<fichier_de_configuration>>

Champs du fichier de configuration -

Champs booléens du fichier de configuration - Les commandes suivantes peuvent prendre les valeurs suivantes : Y, YES et TRUE pour que la condition soit vérifiée. N, NO et FALSE pour qu'elle ne le soit pas

Schéma explicatif - avec les commandes (en rouge) et les modèles disponibles (rond) :

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é 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 :

	python sem_tagger.py config.txt

Avec le fichier config.txt contenant :

IN_FILE
input-non-seg.txt

OUT_DIRECTORY
output/

SEGMENTATION
YES

LEFFF_FILE
resources/lefff_pickled

POS_TAGS
<<les étiquettes POS>>

CHUNK_TAGS
<<les identifiants de chunks>>

CODE
POS+CHUNK

MODELS
resources/models/POS/plain_lefff+resources/models/chunk/plain_all

CLEAN
NO

HAS_TAGGING
NO

INPUT_ENCODING
UTF-8

OUTPUT_ENCODING
UTF-8

QUIET
NO

Autrement dit, on suit le schéma suivant :

exemple de chemin du schéma de SEM

É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!