viernes, 12 de junio de 2015

Extracción de Información: modelos de etiquetamiento secuencial para el reconocimiento de nombres de entidades (NER)

Los modelos basados en etiquetamiento secuencial, son métodos supervisados de clasificación, por lo tanto cuentan con dos partes: entrenamiento y prueba (o la clasificación, propiamente dicha)

Entrenamiento:

1. Conseguir un conjunto de documentos representativos de nuestro dominio.
2. Etiquetar cada palabra (token)  con la clase que le corresponde (persona, organización, etc.) o bien marcarla con la etiqueta: "otra". (simplemente la letra O).
3. Especificar características de extracción que se adecuen a las clases y el texto que tenemos.
4. Entrenar un clasificador secuencial para predecir las etiquetas del conjunto de prueba.

Prueba o clasificación:

1. Recibir un conjunto de documentos de prueba
2. Correr el algoritmo que inferirá la etiqueta de cada token.
3. Recuperar las entidades identificadas.


Especificar características de extracción que se adecuen a las clases y el texto que tenemos

Paso 1: Etiquetamiento o rotulación de nombres de entidades

Veamos a continuación la tarea clave en este asunto que es el diseño de las características que utilizaremos para reconocer las entidades. Lo primero que hay que hacer etiquetar (rotular) los nombres de las entidades que nos interesan en los documentos de nuestro corpus de entrenamiento.

Supongamos que la siguiente oración forma parte de nuestro conjunto de documentos de entrenamiento:

Pedro le dio el libro a Carla Pablo Picasso: Su obra

Y supongamos que solo tenemos la clase PERSONA (PER), es decir cualquier otra categoría será OTRA (O) para nosotros. Marcamos entonces cada palabra extraída con la categoría que le corresponde. A este sencillo e intuitivo método de rotulación se lo llama: IO encoding.

Palabras IO encoding
Pedro PER
le O
dio O
el O
libro O
a O
Carla PER
Pablo PER
Picasso PER
: O
Su O
obra O

El ejemplo anterior, es quizás un poco rebuscado ya que la oración no es perfectamente gramatical, en castellano diríamos más bien que: "Pedro le dio a Carla  el libro Pablo Picasso: Su obra". Sin embargo es una oración que podríamos encontrar en habla informal, en un email o en Twitter y me viene bien para ilustrar un problema que tiene el método IO encoding, principalmente en idioma inglés. 

Se trata del problema de identificar los limites del nombre de una entidad, problema que ya tratamos en el post anterior. Este algoritmo delimitará el nombre, entendiendo que todas las palabras contiguas etiquetadas como pertenecientes a la misma categoría conforman una entidad. Para el ejemplo anterior concluirá que:
  • "Pedro" es el nombre de una entidad de la clase PERSONA                       => lo que está bien
  • "Carla Pablo Picasso"  es el nombre de una entidad de la clase PERSONA => lo que es incorrecto

Para solucionar este inconveniente se creó un segundo método de rotulación llamado IOB encoding. El cual utiliza dos tipos de etiqueta por cada clase, las que indican el comienzo del nombre de la entidad (estas empiezan con "B-") y las que indican que un mismo nombre continúa (estas empiezan con "I-").

Palabras IO encoding IOB encoding
Pedro PER B-PER
le O O
dio O O
el O O
libro O O
a O O
Carla PER B-PER
Pablo PER B-PER
Picasso PER I-PER
: O O
Su O O
obra O O

De esta manera podemos delimitar perfectamente varios nombres de entidades aunque estos estén uno detrás de otro sin ninguna separación.

Dicho lo anterior, ahora debo aclarar que el método IOB encoding no siempre es  preferible ante IO encoding, y esto se debe a dos razones:

1. Duplicar la cantidad de etiquetas, duplica también los tiempos de entrenamiento y clasificación del algoritmo.
2. Son muy raros los casos en los cuales aparecen nombres de entidades sin ningún tipo de separación. De hecho es raro en idioma ingles y estimo que debe ser aún más extraño en castellano.


Paso 2: Identificación de características para la detección de nombres de entidades

Una vez que tenemos el corpus rotulado, hay diversas técnicas que se pueden utilizar para la identificación de nombres de entidades:

basadas en las palabras
  • palabra actual
  • palabra previa o siguiente
  • substring de una palabra
  • forma de una palabra
basadas en otro tipo de inferencia lingüística
  • etiquetado gramatical (identificar las palabras como Sustantivo, Adjetivo, Verbo, etc.)
contexto de etiquetado
  • etiqueta anterior y siguiente

Veamos una por una las características anteriores:

basadas en las palabras:

palabra actual: Simplemente verificar si la palabra actual está en el diccionario de nombres de entidades reconocidas (puedo usar las que ya rotulé en el conjunto de entrenamiento)

palabra previa o siguiente: Muchas veces las palabras previas a la actual nos dan un indicio del tipo de entidad que puedo querer reconocer. Por ejemplo la palabra "en" suele preceder a un lugar. Las palabras "a las" suelen preceder a un fecha. En inglés, por ejemplo, la palabra "at" suele preceder a un lugar.

substring de una palabra: Dependiendo de las categorías de nombres que queramos identificar, a veces es útil mirar si dentro de una palabra existe un substring con ciertas características.
    Por ejemplo en un trabajo de extracción de nombres de entidades en ingles, donde se buscaban las siguientes: drogas, empresas, películas, lugares y personas. Se encontró lo siguiente:

Substring Categoría Ejemplo
oxaDrogasCotrimoxazole
fieldLugaresWethersfield, Banfield
:PelículasSouth Park: Bigger Longer & Uncut

Todas las palabras que contenían el substring oxa eran nombres de drogas.
El sufijo "field" era útil para identificar nombres de lugares pero también, aunque en menos ocasiones, podía indicar el nombre de una persona, una empresa o una película.
El signo ":", en la mayoría de los casos (708) indicaba un nombre de película, solo en 6 casos pertenecía al nombre de una droga.

forma de una palabra: La forma de una palabra es una representación simplificada de la misma, nos permite identificar aspectos como: la longitud, el uso de mayúsculas, números, letras griegas, signos de puntuación internos (como guiones "-").

Ejemplos:
Nombre de entidad Forma
Varicela-zóster Xx-xxx 
mRNA xXXX 
CPA1 XXXd 

En la tabla anterior se muestran 3 ejemplos de formas de palabras. La forma de la palabra se lee de la siguiente forma:

1. X significa cualquier letra en mayúsculas
2. x: significa cualquier letra en minúsculas
3. Solo se verifica que coincidan las dos letras iniciales y las dos letras finales.
4. En el caso de Xx-xxx, ademas de los caracteres iniciales se verifica que "-x" coincida con cualquier secuencia de caracteres en el medio de la palabra, después de los dos iniciales y antes de los dos finales.
5. d: significa cualquier número

La forma de la palabra suele ser útil para buscar compuestos químicos, formulas, direcciones, números de teléfonos, etc. 

basadas en otro tipo de inferencia lingüística:

El caso más común es el de tener identificado los tags gramaticales correspondientes a las palabras, en este caso podemos entrenar al algoritmo de extracción para que verifique reglas del tipo: si la primer palabra es un adjetivo, la segunda un sustantivo y la tercera es sustantivo entonces la tercera es el nombre de una entidad de la clase tal. 

contexto de etiquetado:

Este tipo de característica es la fundamental en un modelo de etiquetamiento secuencial. Se basa en la premisa de que si la palabra actual está etiquetada como PERSONA (pongamos por caso) la siguiente palabra tendrá muchas posibilidades de pertenecer a esa misma categoría, ya que los nombres de PERSONAS suelen tener más de una palabra.

Esto se verá en detalle en el siguiente post.

No hay comentarios:

Publicar un comentario