Ejemplo de un etiquetado manual.

Introducción

En la siguiente página web: https://nlp.stanford.edu/links/statnlp.html , en la sección "Part of Speech Taggers" puedes encontrar numerosos etiquetadoresestadísticos. Muchos de ellos se basan en modelos distintos (HMMs, Support Vector Machine,etc.), utilizan distintos corpus de entrenamiento, sirven para distintos idiomas, etc.

En esta tarea debes comparar el comportamiento de al menos dos de ellos. Los estudiaremos, describiremos y utilizaremos para realizar el etiquetado de un pequeño texto.

Después compararemos los resultados: etiquetas utilizadas por cada etiquetador y precisión del etiquetado.

2. Descripción de los etiquetadores seleccionados

Los etiquetadores escogidos han sido:
  • TreeTagger
  • Stanford Log-linear Part-Of-Speech Tagger
  • tTAG

2.1 TreeTagger

TreeTagger es una herramienta de etiquetado de texto, análisis de las oraciones y extracción del lema.

Fue desarrollado por Helmut Schmid en el proyecto TC del Instituto de Lingüística Computacional de la Universidad de Stuttgart con el objetivo de ser utilizado para el etiquetado y lematización de voz. Para ejecutarlo, es necesario utilizar el modelo para el idioma seleccionado (un fichero conocido como "parameters" y con la extensión .par) que se pueden obtener desde la propia página web de TreeTagger. Dentro de esta web, podremos encontrar diferentes parameters que podremos utilizar para analizar con el programa textos en inglés, francés, alemán, italiano, español, ruso, búlgaro, holandés, estonio, finlandés, gallego, latín, mongol, polaco, eslovaco y swahili. Para un idioma donde no existe un modelo la herramienta ofrece la posibilidad al usuario de crear un nuevo modelo. Para ello es necesario etiquetar manualmente un texto de ejemplo y luego ejecutar un programa de entrenamiento (provisto con TreeTagger) para crear el modelo.

2.1.1 Instalación

En mi caso, lo he instalado la aplicación en un ordenador personal con Windows 7, utilizando el instalador descargado en la siguiente url https://www.cis.uni-muenchen.de/~schmid/tools/TreeTagger/

Para instalarlo he realizado los siguientes pasos:
  • Primero de todo, es necesario instalar el interprete de Perl que lo podemos descargar de la siguiente url http://www.activestate.com/activeperl/
  • El siguiente punto es extraer los ficheros del documento zip descargado de la web en el directorio C:/. del ordenador utilizado.
  • Una vez descomprimido, el siguiente paso es descargarse de la web los ficheros llamados parámetros para los idiomas que necesitemos. Los ficheros deben tener una estructura -utf8.par y se deben almacenar en el subdirectorio TreeTagger/lib.
  • Tenemos que añadir como variable de entorno la siguiente ruta

    C:/TreeTagger/bin
  • Posteriormente, es necesario abrir un terminal de Windows y ejecutar los siguientes comandos

    set PATH=C:\TreeTagger\bin;%PATH% cd c:\TreeTagger

  • Por último, ya podemos ejecutar el programa con el sguiente comando
     
      tag-<lenguage><namefile>
       
    

3. Stanford Log-linear Part-Of-Speech Tagger

Un Tagger Part-Of-Speech (POS Tagger) es una herramienta que se encarga de clasificar las diferentes partes de un texto escrito de un idioma determinado. Este software tiene como finalidad clasificar cada palabra dependiendo de su funcionalidad, ya que nos presentará cada una de ellas como un sustantivo, verbo, adjetivo, etc. e incluso tiene la capacidad de usar etiquetas POS más precias como "sustantivo-plural". Esta implementado en Java y utiliza los etiquetadores log-line descritos en Enriching the Knowledge Sources Used in a Maximum Entropy Part-of-Speech Tagger

Para poder ejecutar este programa es necesario:
  • Una versión de Java 1.8 o superior.
  • Entre 60 y 200 MB de memoria para el programa
  • Al menos 1 GB de memoria para almacenar el modelo encargado de entrenar el etiquetador.
La descarga básica contiene dos modelos de etiquetadores entrenados para inglés y utiliza los etiquetadores Penn Treebank.

El software está distribuido bajo la Licencia pública general de GNU (v2 o posterior).

4. tTAG

Para empezar, tTAG fue implementado por Infogistics, una compañía internacional de Edimburgo creada por expertos en el campo de minería de texto y búsqueda en documentos.

Su principal producto, tTAG, es un etiquetador de textos que puede manejar tanto texto codificado en ASCII como texto marcado XML. tTAG incorpora un tokenizer (tNORM) encargado de segmentar el texto en palabras y oraciones. En aquellos casos que el usuario necesite utilizar su propio tokenizer, la aplicación permite sustituir tNORM por uno de elaboración propia.

Desde el punto morfológico, tTAG utiliza un léxico que se puede extender fácilmente para incluir palabras nuevas. Cuando el software se encuentra con una palabra desconocida, tTAG ejecuta un software de predicción que permite predecir y etiquetar las palabras desconocidas. Esta capacidad puede ser reentrenada por el usuario para nuevos sublenguajes. Gracias a esta capacidad, tTAG logra una precisión del 96% al 98% de aciertos en aquellas palabras que se encuentran en el léxico y un 88-92% de precisión en palabras desconocidas.

tTAG permite utilizar tanto los recursos previamente entrenados basados en el conjunto de etiquetas de Penn Treebank que te proporciona la aplicación como también desarrollar recursos propios utilizando un conjunto de etiquetas propio. Al ejecutar tTAG, simplemente debe especificar qué archivo de recursos desea usar durante el etiquetado.

Al analizar texto marcado en SGML/XML, tTAG puede marcar el texto completo o solo marcar algunas secciones determinadas del documento XML (por ejemplo, solo para etiquetar párrafos, y no encabezados ni subtítulos). También es posible solicitar a tTAG que emita el texto etiquetado como XML.
 
     <SENTENCE>
      <W TAG="PPS">He</W>
      <W TAG="VBZ">books</W>
      <W TAG="NNS">tickets</W>
    </SENTENCE>
   
Respecto el analizador sintáctico del tTag cabe mencionar que utiliza la información del documento y emplea gramáticas sensibles al contexto para detectar los límites de los grupos sintácticos. El analizador deja toda la información añadida previamente en el texto y crea elementos estructurales que incluyen palabras del fragmento:
 
    <NG>Este hombre</NG>
    <VG>canta</VG>
   

5. Texto de prueba utilizado.

Para realizar esta tarea he elegido el siguiente texto en ingles extraído del libro El Principito de ANTOINE DE SAINT-EXUPÉRY:

Once when I was six years old I saw a magnificent picture in a book, called True Stories from Nature, about the primeval forest. It was a picture of a boa constrictor in the act of swallowing an animal. Here is a copy of the drawing.

Basándome en que los tres textos tienen la capacidad de etiquetar textos en diferentes idiomas, he buscado el mismo texto en la versión en castellano para analizarlo. El texto utilizado es el siguiente

Cuando yo tenía seis años vi en un libro sobre la selva virgen que se titulaba "Historias vividas", una magnífica lámina. Representaba una serpiente boa que se tragaba a una fiera.

6.Resultado del etiquetado con cada etiquetador seleccionado.

6.1 TreeTagger

Primero de todo, en el cuadro 1 podemos consultar que tipo de etiquetas utiliza TreeTagger en ingles, en el cuadro 2 las etiquetas que utiliza en castellano, en el cuadro 3 se representará el resultado en inglés y, por último, en el cuadro 4 se representará el resultado en castellano.
POS TagDescriptionExample
CCcoordinating conjunctionand, but, or, \
CDcardinal number1, three
DTdeterminerthe
EXexistential therethere is
FWforeign wordd'œuvre
INpreposition/subord. conj.in,of,like,after,whether
IN/thatcomplementizerthat
JJadjectivegreen
JJRadjective, comparativegreener
JJSadjective, superlativegreenest
LSlist marker(1),
MDmodalcould, will
NNnoun, singular or masstable
NNSnoun pluraltables
NPproper noun, singularJohn
NPSproper noun, pluralVikings
PDTpredeterminerboth the boys
POSpossessive endingfriend's
PPpersonal pronounI, he, it
PP\$possessive pronounmy, his
RBadverbhowever, usually, here, not
RBRadverb, comparativebetter
RBSadverb, superlativebest
RPparticlegive up
SENTend punctuation?, !, .
SYMsymbol@, +, *, \textasciicircum, |, =
TOtoto go, to him
UHinterjectionuhhuhhuhh
VBverb be, base formbe
VBDverb be, pastwas|were
VBGverb be, gerund/participlebeing
VBNverb be, past participlebeen
VBZverb be, pres, 3rd p. singis
VBPverb be, pres non-3rd p.am|are
VDverb do, base formdo
VDDverb do, pastdid
VDGverb do gerund/participledoing
VDNverb do, past participledone
VDZverb do, pres, 3rd per.singdoes
VDPverb do, pres, non-3rd per.do
VHverb have, base formhave
VHDverb have, pasthad
VHGverb have, gerund/participlehaving
VHNverb have, past participlehad
VHZverb have, pres 3rd per.singhas
VHPverb have, pres non-3rd per.have
VVverb, base formtake
VVDverb, past tensetook
VVGverb, gerund/participletaking
VVNverb, past participletaken
VVPverb, present, non-3rd p.take
VVZverb, present 3d p. sing.takes
WDTwh-determinerwhich
WPwh-pronounwho, what
WP\$possessive wh-pronounwhose
WRBwh-abverbwhere, when
:general joiner;, -, --
\$currency symbol\$, £

Cuadro.1 Etiquetas utiliza TreeTagger en ingles

EjemploEtiquetaTreecast TagDescription
ABRabreviation
ADJadjective
ADVadverb
DET:ARTarticle
DET:POSpossessive pronoun (ma, ta, …)
INTinterjection
KONconjunction
NAMproper name
NOMnoun
NUMnumeral
PROpronoun
PRO:DEMdemonstrative pronoun
PRO:INDindefinite pronoun
PRO:PERpersonal pronoun
PRO:POSpossessive pronoun (mien, tien, …)
PRO:RELrelative pronoun
PRPpreposition
PRP:detpreposition plus article (au,du,aux,des)
PUNpunctuation
PUN:citpunctuation citation
SENTsentence tag
SYMsymbol
VER:condverb conditional
VER:futuverb futur
VER:impeverb imperative
VER:impfverb imperfect
VER:infiverb infinitive
VER:pperverb past participle
VER:ppreverb present participle
VER:presverb present
VER:simpverb simple past
VER:subiverb subjunctive imperfect
VER:subpverb subjunctive present

Cuadro.2 Etiquetas utiliza TreeTagger en Castellano

Texto OriginalEtiquetaRaiz
OnceRBonce
whenWRBwhen
IPPI
wasVBDbe
sixCDsix
yearsNNSyear
oldJJold
IPPI
sawVVDsee
aDTa
magnificentJJmagnificent
pictureNNpicture
inINin
aDTa
bookNNbook
,,,
calledVVDcall
TrueNPTrue
StoriesNPStories
fromINfrom
NatureNPNature
,,,
aboutINabout
theDTthe
primevalJJprimeval
forestNNforest
.SENT.
ItPPit
wasVBDbe
aDTa
pictureNNpicture
ofINof
aDTa
boaNNboa
constrictorNNconstrictor
inINin
theDTthe
actNNact
ofINof
swallowingVVGswallow
anDTan
animalNNanimal
.SENT.
HereRBhere
isVBZbe
aDTa
copyNNcopy
ofINof
theDTthe
drawingNNdrawing
.SENT.

Cuadro.3 Etiquetas utiliza TreeTagger en Inglés

Texto OriginalEtiquetaRaiz
CuandoCSUBXcuando
yoPPXyo
teníaVLfintener
seisCARDseis
añosNCaño
viCARDvi
enPREPen
unARTun
libroNClibro
sobrePREPsobre
laARTel
selvaNCselva
virgenNCvirgen
queCQUEque
seSEse
titulabaVLfintitular
"QT"
HistoriasNPHistorias
vividasVLadjvivir
"QT"
,CM,
unaARTun
magníficaADJmagnífico
láminaNClámina
.FS.
RepresentabaVLfinrepresentar
unaARTun
serpienteNCserpiente
boaNCboa
queCQUEque
seSEse
tragabaVLfintragaba
aPREPa
unaARTun
fieraNCfiera
.FS.

Cuadro.4 Etiquetas utiliza TreeTagger en Castellano

6.2 Stanford Log-linear Part-Of-Speech Tagger

En la primera parte del apartado he utilizado el etiquetador Stanford Log-linear Part-Of-Speech Tagger para analizar el texto en inglés aplicando el siguiente comando

java -mx300m -classpath stanford-postagger.jaredu.stanford.nlp.tagger.maxent.MaxentTagger -modelmodels/wsj-0-18-bidirectional-distsim.tagger -textFilesample-input.txt >sample-tagged.txt

Una vez se ha ejecutado y para entender mejor su funcionamiento, he utilizado la figura 1 donde se muestran todas las etiquetas que puede generar el programa para un texto en ingles.

1 Etiquetas POS utilizadas en tanford Log-linear Part-Of-Speech Tagger

El resultado obtenido para el texto en ingles ha sido el siguiente:

Once_RB when_WRB I_PRP was_VBD six_CD years_NNS old_JJ I_PRPsaw_VBD a_DT magnificent_JJ picture_NN in_IN a_DT book_NN ,_,called_VBN True_NNP Stories_NNP from_IN Nature_NNP ,_, about_IN the_DT primeval_JJ forest_NN ._. It_PRP was_VBD a_DT picture_NN of_IN a_DT boa_NN constrictor_NN in_IN the_DT act_NN of_IN swallowing_VBG an_DT animal_NN ._. Here_RB is_VBZ a_DT copy_NN of_IN the_DT drawing_NN ._.

Una vez realizado la prueba con el texto en inglés, he ejecutado el mismo test pero con un texto en castellano. Para conocer mejor las etiquetas utilizadas por parte de este software, recomiendo visitar la siguiente url https://nlp.stanford.edu/software/spanish-faq.shtml y el resultado obtenido ha sido el siguiente:

Cuando_cs yo_pp000000 tenía_vmii000 seis_dn0000 años_nc0p000vi_vmis000 en_sp000 un_di0000 libro_nc0s000 sobre_sp000 la_da0000 selva_nc0s000 virgen_nc0s000 que_cs se_p0000000 titulaba_vmii000 "_fe Historias_np00000 vividas_aq0000 "_fe ,_fcuna_di0000 magnífica_aq0000 lámina_nc0s000 ._fpRepresentaba_vmii000 una_di0000 serpiente_nc0s000 boa_np00000 que_pr000000 se_p0000000 tragaba_vmii000 a_sp000 una_di0000 fiera_nc0s000 ._fp

6.3 tTAG

Primero de todo, recomiendo leer el cuadro 5 donde aparecen todas las etiquetas Penn Treebank y su significado.

Una vez consultado el cuadro, el resultado proporcionado del texto en inglés es el siguiente:
 
    Once_RB when_WRB ([ I_PRP ])
      <: was_VBD>([ six_CD years_NNS ]) old_JJ ([ I_PRP ])
        <: saw_VBD>([ a_DT magnificent_JJ picture_NN ]) in_IN ([ a_DT book_NN ]),_,
          <: called_VBD>([ True_NNP Stories_NNP ]) from_IN ([ Nature_NNP ]),_, about_IN ([ the_DT primeval_JJ forest_NN
            ])._.([ It_PRP ])
            <: was_VBD>([ a_DT picture_NN ]) of_IN ([ a_DT boa_NN constrictor_NN ]) in_IN ([ the_DT act_NN ]) of_IN
              swallowing_VBG ([ an_DT animal_NN ])._.Here_RB
              <: is_VBZ>([ a_DT copy_NN ]) of_IN ([ the_DT drawing_NN ])._.
   
Para el texto en castellano, tenemos el siguiente resultado:

([ Cuando_NNP ]) yo_FW tenía_FW seis_FW años_FW vi_FW en_FW un_FW libro_FW sobre_FW la_FW selva_FW virgen_FW que_FW se_FWtitulaba_FW "_'' ([ Historias_NNP vividas_NNS ])"_" ,_,una_FW magnífica_FW lámina_FW ._.([ Representaba_NNP ]) una_FW serpiente_FW ([ boa_NN ]) que_FW se_FW tragaba_FW a_FW una_FW fiera_FW ._.

NumberTagDescription
1.CCCoordinating conjunction
2.CDCardinal number
3.DTDeterminer
4.EXExistential there
5.FWForeign word
6.INPreposition or subordinating conjunction
7.JJAdjective
8.JJRAdjective, comparative
9.JJSAdjective, superlative
10.LSList item marker
11.MDModal
12.NNNoun, singular or mass
13.NNSNoun, plural
14.NNPProper noun, singular
15.NNPSProper noun, plural
16.PDTPredeterminer
17.POSPossessive ending
18.PRPPersonal pronoun
19.PRP\$Possessive pronoun
20.RBAdverb
21.RBRAdverb, comparative
22.RBSAdverb, superlative
23.RPParticle
24.SYMSymbol
25.TOto
26.UHInterjection
27.VBVerb, base form
28.VBDVerb, past tense
29.VBGVerb, gerund or present participle
30.VBNVerb, past participle
31.VBPVerb, non-3rd person singular present
32.VBZVerb, 3rd person singular present
33.WDTWh-determiner
34.WPWh-pronoun
35.WP\$Possessive wh-pronoun
36.WRBWh-adverb

5 Tabla de etiquetas

7. Observaciones sobre la comparativa de los resultados.

Para realizar esta comparativa del texto en inglés, lo primero que debemos analizar es las etiquetas utilizadas y, en mi experimento, los tres sistemas han utilizado las mismas etiquetas Penn Treebank, lo que facilita la tarea.

Ahora bien, no todos han utilizado el mismo nombre para las etiquetas. Al analizar los resultados y la documentación aportada he observado las siguientes diferencias entre TreeTagger y los sistemas Stanford Log-linear Part-Of-Speech Tagger y tTAG:
  • En TreeTagger los pronombres personales se etiquetan como PP mientras que en Stanford Log-linear Part-Of-Speech Tagger y tTAG se etiquetan como PRP. Ejemplo:
    WordTreeTaggerStanford Log-linear Part-Of-Speech Tagger y tTAG
    IPPPRP
    ItPPPRP
  • En TreeTagger los verbos en pasado los interpreta como VVD mientras que en se en Stanford Log-linear Part-Of-Speech Tagger y tTAG se etiquetan como VBD. Ejemplo:
    WordTreeTaggerStanford Log-linear Part-Of-Speech Tagger y tTAG
    sawVVDVBD
    calledVVDVBD
  • En TreeTagger los nombres propios se interpretan como NP mientras que en se en Stanford Log-linear Part-Of-Speech Tagger y tTAG se etiquetan como NNP. Ejemplo:
    WordTreeTaggerStanford Log-linear Part-Of-Speech Tagger y tTAG
    trueNPNNP
    natureNPNNP
    storiesNPNNP
Y aunque en el texto de prueba que elegí, no aparezca, sucede lo mismo con diferentes formas del verbo To BE.

Respecto a los tres sistemas, el que nos proporciona más información es la solución tTAG ya que puede detectar los limites de un grupo sintáctico y tiene un entorno de desarrollo web que lo hace muy fácil de utilizar. En mi opinión, el segundo más útil seria TreeTagger, que nos proporciona información de la raíz del léxico analizado y, aunque no es un entorno web, también es bastante usable.

Cambiando el texto base y analizando el etiquetado de textos en castellano el orden de preferencia cambia. Para empezar el resultado el proporcionado por tTag ha sido defectuoso como podemos observar en la siguiente linea extraída del resultado expuesto en el apartado anterior:

yo_FW tenía_FW seis_FW

Si analizamos el resultado expuesto podemos analizar como el etiquetador considera yo, tenía y seis como que poseen la misma funcionalidad léxica FW cuando yo es un pronombre, tenía un verbo y seis un sustantivo. Lo que me hace pensar que tTag en su versión web no esta preparada para textos en otros idiomas y la etiqueta FW será como un etiqueta para indicar que una palabra es desconocida para el modelo.

Por su parte, la herramienta Stanford Log-linear Part-Of-Speech Tagger muestra las etiquetas propias de un modelo implementado por ellos mucho más completo que Penn Treebank, dotando al usuario de mucha más información. Se puede consultar en la dirección https://nlp.stanford.edu/software/spanish-faq.shtml.

Por último, con TreeTagger utilizamos el mismo funcionamiento y etiquetado utilizando el modelo en ingles que en castellano.

Comparando ambos resultados, el proporcionado por TreeTagger y Stanford Log-linear Part-Of-Speech Tagger, el segundo etiquetador nos proporciona más información que el primero sobre sus funcionalidades léxicas, por lo tanto, gracias al modelo utilizado, considero que es una mejor opción que el segundo.