Neste trabalho cada grupo de no máximo 2 alunos deve escolher um dos tópicos abaixo. A data de entrega
é 20/11/08 (até às 23:59h). O trabalho pode ser entregue por e-mail.
O trabalho deve ser feito em Python (pode-se usar ou não o Natural Language Toolkit). Além de entregar todo o código
e os dados necessários para executar o código, cada grupo deve
entregar um relatório explicando o que foi feito, os resultados obtidos e como executar o código.
O tópico do trabalho deve ser um dos seguintes:
- N-gramas (exercícios 4.2-4.7 do Jurafsky&Martin):
- Escreva um programa para calcular unigramas e bigramas (sem smoothing).
- Teste seu programa em dois conjuntos de textos diferentes de sua escolha e compare as estatísticas. Quais são as
diferenças entre os unigramas mais comuns? E entre os bigramas mais comuns?
- Adicione uma opção para gerar frases aleatórias.
- Adicione uma opção para fazer o desconto de Good-Turing.
- Adicione uma opção para calcular a perplexidade de um conjunto de teste.
- Atribuição de Autores (baseado no exercício 4.10 do Jurafsky&Martin):
- Escolha dois autores com um conjunto grande de textos eletrônicos disponíveis para cada um dos dois (uma fonte possível é
o Projeto Gutenberg). Separe um texto de cada autor para servir de teste.
- Treine um modelo de unigramas para cada autor A1 e A2.
- Para cada texto de teste calcule P(T|A1), multiplicando as probabilidades (do modelo do autor A1) das palavras
que ocorrem apenas uma vez no texto em questão (palavras "singleton" ou raras) e tirando a n-ésima raiz-quadrada desse valor (onde
n é o número de palavras raras). Faça o mesmo para A2 para calcular P(T|A2). Se P(T|A1)>P(T|A2), o autor previsto será A1, caso contrário
será A2. A previsão foi correta?
- Rotulação POS (baseado nos exercícios 5.8 e 5.9 do Jurafsky&Martin):
- Encontre um corpus rotulado com part-of-speech (uma opção é usar o Wall Street Journal corpus do Natural Language Toolkit).
- Separe o corpus em conjuntos de treinamento e teste.
- Usando o conjunto de treinamento rotulado, calcule as probabilidades de transição e observação do HMM (o HMM terá um estado para
cada rótulo).
- Implemente o algoritmo de Viterbi para decodificar (rotular) o conjunto de teste.
- Calcule a taxa de erro do algoritmo no conjunto de teste.
- Calcule a matriz de confusão e identifique os tipos de erro mais comuns.
- Análise de Sentimento (baseado no exercício 6.5 do Jurafsky&Martin):
- Encontre uma implementação do algoritmo MaxEnt em Python (por exemplo, essa
aqui.
- Construa um corpus de textos de críticas de filme (positivas e negativas). Essas críticas podem ser encontradas
em sites como o IMDB ou Yahoo Movies.
- Separe o corpus em conjuntos de treinamento e teste.
- Utilize como atributos cada uma das 2500 palavras mais freqüentes no conjunto de treinamento (um atributo binário para cada palavra).
- Treine o MaxEnt no conjunto de treinamento para distinguir críticas positivas (classe 1) de críticas negativas (classe 0).
- Calcule a taxa de erro do algoritmo no conjunto de teste.
- Para cada classe, verifique quais atributos foram mais importantes para classificação, listando os atributos que tiveram os 10 maiores
pesos.