terça-feira, 2 de agosto de 2011

Anotação de Papéis Semânticos: Experimentos

Na minha última postagem, falei sobre a dificuldade de se definir um conjunto de papéis semânticos. Falei também sobre os papéis definidos em frames, que possuem aplicações reais, mas a maioria dos trabalhos de identificação automática usa as definições do PropBank.


Um parênteses, antes de explicar o PropBank: pretendo manter o foco deste blog na língua portuguesa, mas nessa postagem vou tratar de recursos e exemplos em inglês. Ainda não temos quase nada pronto para a anotação automática de papéis semânticos em português, mas minha pesquisa e outras do NILC vão preencher esta lacuna


O PropBank é um projeto ambicioso. Ele define os papéis (ou argumentos) que podem aparecer com mais de 3000 verbos do inglês. E não é só isso: para os verbos com mais de um significado (que são vários), existe um conjunto de argumentos para cada um deles. 


Um ponto negativo do PropBank é que, por causa da sua filosofia, os papéis semânticos não têm nomes intuitivos e naturais como agente ou paciente, mas apenas números: Arg0, Arg1, Arg2, etc. O significado de cada um deles depende do verbo que estão acompanhando. Apenas alguns argumentos bem genéricos como Local ou Tempo servem para todos os verbos. Vou ilustrar com um caso em particular.


O primeiro sentido do verbo feed no PropBank possui 3 possíveis argumentos: Arg0 é quem alimenta, Arg1 é a "comida" (que pode ser metafórica) e Arg2 é o alimentado. Numa exemplo do próprio PropBank:
Lotus Development Corp. feeds its evaluations into a computer, but only for storage; the decisions are made by supervisors. 
Os três elementos marcados são, respectivamente, Arg0, Arg1 e Arg2.


Acho que deu pra ter uma ideia geral de como a coisa funciona. Agora vou mostrar o que podemos de fato fazer com os tais papéis semânticos.


Usei aqui o SENNA, um software distribuído gratuitamente e que pode ser encontrado aqui. Como quase todos os sistemas de anotação de papéis semânticos, ele é baseado em aprendizado de máquina supervisionado - quer dizer, primeiro ele foi treinado com exemplos de frases contendo as marcações certas, e a partir daí aprendeu a detectar padrões.


Para os mais interessados, há este artigo que explica o desenvolvimento do sistema. Eu mesmo entendi bem pouco, tamanha foi a engenhosidade dos seus criadores, e pretendo ler novamente. Mas vamos ver o que ele nos oferece.


Escrevi um script Python que pega a saída produzida pelo SENNA e junta com as informações fornecidas pelo PropBank. No final, o sistema mostra todos os verbos que encontrou na frase e seus respectivos argumentos com breves descrições. 


Peguei algumas frases do site da CNN para ver no que dá. Primeira:
"No one should pretend that they have solved anything other than an artificial political crisis," said Bob Bixby, executive director of the Concord Coalition, a nonpartisan deficit watchdog group.
E o resultado:


Verbo: solve
Argumentos:
Arg0 (solver): they
Arg1 (the problem): anything other than an artificial political crisis

Verbo: pretend
Argumentos:
Arg0 (pretender): " No one
Arg1 (premise): that they have solved anything other than an artificial political crisis
ArgM-MOD (modal): should

Verbo: say
Argumentos:
Arg0 (Sayer): Bob Bixby , executive director of the Concord Coalition , a nonpartisan deficit watchdog group
Arg1 (Utterance): " No one should pretend that they have solved anything other than an artificial political crisis


A não ser pelas aspas finais, a meu ver o SENNA acertou tudo aqui. Mais uma:
Malone added that NASA is trying to develop a plan to recover the item, but it could take weeks to get it.

Verbo: add
Argumentos:
Arg0 (speaker): Malone
Arg1 (utterance): that NASA is trying to develop a plan to recover the item

Verbo: develop
Argumentos:
Arg0 (speaker): NASA
Arg1 (non-intentional theme): a plan to recover the item

Verbo: get
Argumentos:
Arg1 (thing gotten): it.

Verbo: recover
Argumentos:
Arg0 (entity getting something): NASA
Arg1 (thing gotten): the item

Verbo: take
Argumentos:
Arg0 (Taker): it
Arg1 (thing taken): weeks
ArgM-MOD (modal): could
ArgM-PNC (purpose): to get it.

Verbo: try
Argumentos:
Arg0 (Agent/Entity Trying): NASA
Arg1 (thing tried): to develop a plan to recover the item


Agora o resultado já não foi tão claro. Faltou dizer que a NASA é um argumento de get, e o verbo develop pelo visto não está com seu sentido correto. Aliás, esse é outra dificuldade da tarefa: eu não usei nenhum tipo de desambiguação para os verbos. Se usasse, os resultados tenderiam a ser um pouco melhores.


Mesmo assim, o sistema acerta a maioria dos argumentos, mesmo em frases relativamente grandes e complexas. Isso é certamente um bom sinal para a pesquisa de PLN. 


Cheguei a testar o sistema com frases de textos infantis, mas não achei que houve uma melhora real. Ainda que costumem ser menos elaborados, possuem também muitas metáforas, além de um estilo e vocabulário que o sistema não está acostumado (parece engraçado falar assim, mas é a verdade, já que ele foi treinado com textos jornalísticos).


O post já está ficando grande demais, mas vou deixar esse último exemplo:

One very windy day the stagecoach arrived in town with an unusual passenger. (...) I had seen pictures of Abraham Lincoln and that is who this man reminded me of, although I knew Abraham Lincoln would not have been wearing a preacher's clothes.

Verbo: arrive
Argumentos:
Arg1 (entity in motion / 'comer'): the stagecoach
Arg4 (end point, destination): in town with an unusual passenger
ArgM-TMP (when): One very windy day

Verbo: wear
Argumentos:
Arg1 (clothing): a preacher 's clothes
ArgM-MOD (modal): would
ArgM-NEG (negation): not

Verbo: see
Argumentos:
Arg0 (viewer): I
Arg1 (thing viewed): pictures of Abraham Lincoln

Verbo: know
Argumentos:
Arg0 (knower): I
Arg1 (thing known or thought): Abraham Lincoln would not have been wearing a preacher 's clothes

Verbo: remind
Argumentos:
Arg0 (cause, agent): this man
Arg2 (recipient): me of


Por hoje fico por aqui. Espero escrever um novo post parecido com este no futuro próximo, dessa vez totalmente em português.

Um comentário:

  1. Oi, Erick,

    Não conhecia o SENNA, mas tbm achei que os resultados dos exemplos estão bons.

    Aguardando o post com exemplos em português! ;)

    ResponderExcluir