Herramientas de usuario

Herramientas del sitio


materias:pln:practico3

Trabajo Práctico 3 - Análisis Sintáctico

(volver a la página principal)

En este trabajo práctico implementaremos varios modelos de análisis sintáctico y realizaremos algunos experimentos con ellos.

Instrucciones

El código base para el proyecto se encuentra en el repositorio del a materia. La entrega del proyecto es a través de github. Por lo tanto, deben hacer un “fork” del repositorio dentro de sus cuentas de github.

Además del código fuente, deben elaborar un README con una breve explicación de lo que hicieron en cada ejercicio. El README puede estar en texto plano (txt), markdown (md) o restrucured text (rst), y debe estar incluído dentro de la carpeta tagging.

Criterios de Evaluación:

  • Estilo de codificación (chequeado con flake8 y a ojo).
  • Diseño del código: uso de clases, herencia, etc.
  • Uso y aprobación de tests (provistos y definidos por uds.).
  • Uso apropiado de git (commits granulares, logs informativos).
  • Resultados.
  • README.

Ejercicio 1: Evaluación de Parsers

Programar un script eval.py que permita evaluar los parsers.

  • Calcular:
    • Labeled precision, recall y F1.
    • Unlabeled precision, recall y F1.
  • Dar las siguientes opciones:
    • -m <m>: evaluar sólo oraciones de largo menor o igual a m.
    • -n <n>: evaluar sólo las primeras n oraciones.
  • Entrenar y evaluar los modelos “baseline” para todas las oraciones de largo menor o igual a 20.

Interfaz de eval.py:

$ python parsing/scripts/eval.py  --help
Evaulate a parser.

Usage:
  eval.py -i <file> [-m <m>] [-n <n>]
  eval.py -h | --help

Options:
  -i <file>     Parsing model file.
  -m <m>        Parse only sentences of length <= <m>.
  -n <n>        Parse only <n> sentences (useful for profiling).
  -h --help     Show this screen.

Ejercicio 2: Algoritmo CKY

  • Implementar el algoritmo CKY en un módulo cky_parser.py.
  • Agregar a los tests un test con una gramática y una oración tal que la oración tenga más de un análisis posible (sintácticamente ambigua).

Interfaz del parser:

class CKYParser:
 
    def __init__(self, grammar):
        """
        grammar -- a binarised NLTK PCFG.
        """
 
    def parse(self, sent):
        """Parse a sequence of terminals.
 
        sent -- the sequence of terminals.
        """

Tests:

$ nosetests parsing/tests/test_cky_parser.py 

Documentación:

Ejercicio 3: PCFGs No Lexicalizadas

  • Implementar una UPCFG, una PCFG cuyas reglas y probabilidades se obtienen a partir de un corpus de entrenamiento.
  • Deslexicalizar completamente la PCFG: en las reglas, reemplazar todas las entradas léxicas por su POS tag. Luego, el parser también debe ignorar las entradas léxicas y usar la oración de POS tags para parsear.
  • Entrenar y evaluar la UPCFG para todas las oraciones de largo menor o igual a 20. Reportar resultados y tiempos de evaluación en el README.

Interfaz de UPCFG en upcfg.py:

class UPCFG:
    """Unlexicalized PCFG.
    """
 
    def __init__(self, parsed_sents, start='sentence'):
        """
        parsed_sents -- list of training trees.
        """
 
    def productions(self):
        """Returns the list of UPCFG probabilistic productions.
        """
 
    def parse(self, tagged_sent):
        """Parse a tagged sentence.
 
        tagged_sent -- the tagged sentence (a list of pairs (word, tag)).
        """

Tests:

$ nosetests parsing/tests/test_upcfg.py 

Documentación:

Ejercicio 4: Markovización Horizontal

  • Modificar la UPCFG para admitir el uso de Markovización Horizontal de orden n para un n dado (con el parámetro opcional horzMarkov).
  • Agregar al script de entrenamiento (train.py) una opción de línea de comandos que habilite esta funcionalidad.
  • Entrenar y evaluar para varios valores de n (0, 1, 2 y 3), para las oraciones de largo menor o igual a 20. Reportar resultados y tiempos de evaluación en el README.

Documentación:

Ejercicio 5 (punto bonus): CKY con Producciones Unarias

  • Agregar el algoritmo CKY soporte para producciones unarias.
  • Modificar la UPCFG para admitir el uso de producciones unarias (con el parámetro unary=True).
  • Agregar al script de entrenamiento (train.py) una opción de línea de comandos que habilite esta funcionalidad.

Documentación:

materias/pln/practico3.txt · Última modificación: 2017/05/26 15:46 por francolq