Open odanoburu opened 6 years ago
consegui um resultado preliminar, mas precisava testá-lo.
vcs podem me ajudar a achar casos em que a correção dos nomes corrigiria uma situação de appos errado? com isso eu poderia testar se o código está funcionando corretamente. @suemi-higuchi @arademaker @claudiafreitas
como exemplo, imaginando que na sentença abaixo
no Rio de Janeiro, então Distrito Federal
'Distrito' estivesse apontando para 'Janeiro' -- depois do código que arruma a subárvore dos nomes, 'Distrito' teria como HEAD 'Rio', e passaríamos de um erro de HEAD para um acerto!
@odanoburu , no arquivo 11.conllu tinha alguns erros assim, veja por exemplo o appos SANERJ que apontava para Rio ao invés de Saneamento:
# sent_id = 6
# text = Foi assessor-auxiliar da presidência da Saneamento do Rio de Janeiro (Sanerj), de 1972 a 1975, e na Companhia Estadual de Águas e Esgoto (Cedae) ocupou o cargo de encarregado-geral, de 1976 a 1983.
1 Foi ser AUX _ Mood=Ind|Number=Sing|Person=3|Tense=Past|VerbForm=Fin 2 aux _ _
2 assessor-auxiliar assessor-auxiliar VERB _ VerbForm=Inf 0 root _ SpacesAfter=\n
3-4 da _ _ _ _ _ _ _ _
3 de de ADP _ _ 5 case _ _
4 a o DET _ Definite=Def|Gender=Fem|Number=Sing|PronType=Art 5 det _ _
5 presidência presidência NOUN _ Gender=Fem|Number=Sing 2 obl _ _
6-7 da _ _ _ _ _ _ _ _
6 de de ADP _ _ 8 case _ _
7 a o DET _ Definite=Def|Gender=Fem|Number=Sing|PronType=Art 8 det _ _
8 Saneamento saneamento PROPN _ Number=Sing 5 nmod _ _
9-10 do _ _ _ _ _ _ _ _
9 de de ADP _ _ 11 case _ _
10 o o DET _ Definite=Def|Gender=Masc|Number=Sing|PronType=Art 11 det _ _
-11 Rio Rio PROPN _ Gender=Masc|Number=Sing 5 nmod _ _
+11 Rio Rio PROPN _ Gender=Masc|Number=Sing 8 flat:name _ _
12 de de ADP _ _ 13 case _ _
-13 Janeiro Janeiro PROPN _ Number=Sing 11 nmod _ _
+13 Janeiro Janeiro PROPN _ Number=Sing 8 flat:name _ _
14 ( ( PUNCT _ _ 15 punct _ SpaceAfter=No
-15 Sanerj Sanerj PROPN _ Gender=Masc|Number=Sing 11 appos _ SpaceAfter=No
+15 Sanerj Sanerj PROPN _ Gender=Masc|Number=Sing 8 appos _ &ident|SpaceAfter=No
16 ) ) PUNCT _ _ 15 punct _ SpaceAfter=No
Outro exemplo do arquivo 11.conllu, CAES apontava para Saneamento ao invés de Companhia:
# sent_id = 3
# text = Funcionário público, construiu sua carreira na Companhia de Águas, Esgoto e Saneamento (CAES), em Niterói (RJ), onde começou, em 1963, como chefe do escritório de obras, acumulando cargos até chegar a diretor-presidente, em 1966.
1 Funcionário funcionário NOUN _ Gender=Masc|Number=Sing 4 nsubj _ _
2 público público ADJ _ Gender=Masc|Number=Sing 1 amod _ SpaceAfter=No
3 , , PUNCT _ _ 1 punct _ _
4 construiu construir VERB _ Mood=Ind|Number=Sing|Person=3|Tense=Past|VerbForm=Fin 0 root _ _
5 sua seu DET _ Gender=Fem|Number=Sing|PronType=Prs 6 det _ _
6 carreira carreira NOUN _ Gender=Fem|Number=Sing 4 obj _ _
7-8 na _ _ _ _ _ _ _ _
7 em em ADP _ _ 9 case _ _
8 a o DET _ Definite=Def|Gender=Fem|Number=Sing|PronType=Art 9 det _ _
9 Companhia Companhia PROPN _ Gender=Fem|Number=Sing 4 obl _ _
10 de de ADP _ _ 11 case _ _
11 Águas Águas PROPN _ Number=Sing 9 nmod _ SpaceAfter=No
12 , , PUNCT _ _ 13 punct _ _
13 Esgoto esgoto PROPN _ Gender=Unsp|Number=Sing 9 conj _ _
14 e e CCONJ _ _ 15 cc _ _
15 Saneamento saneamento PROPN _ Gender=Masc|Number=Sing 9 conj _ _
16 ( ( PUNCT _ _ 17 punct _ SpaceAfter=No
-17 CAES CAES PROPN _ Gender=Masc|Number=Sing 15 appos _ SpaceAfter=No
+17 CAES CAES PROPN _ Gender=Masc|Number=Sing 9 appos _ &ident|SpaceAfter=No
18 ) ) PUNCT _ _ 17 punct _ SpaceAfter=No
Você pode testar no 37.conllu que ainda não foi corrigido. Veja para onde o PMDB está apontando:
# newpar
# sent_id = 11
# text = A extinção do bipartidarismo, em novembro de 1979, e a reformulação partidária, levou-o a filiar-se ao Partido do Movimento Democrático Brasileiro (PMDB), sucessor do MDB.
1 A o DET _ Definite=Def|Gender=Fem|Number=Sing|PronType=Art 2 det _ _
2 extinção extinção NOUN _ Gender=Fem|Number=Sing 17 nsubj _ _
3-4 do _ _ _ _ _ _ _ _
3 de de ADP _ _ 5 case _ _
4 o o DET _ Definite=Def|Gender=Masc|Number=Sing|PronType=Art 5 det _ _
5 bipartidarismo bipartidarismo NOUN _ Gender=Masc|Number=Sing 2 nmod _ SpaceAfter=No
6 , , PUNCT _ _ 8 punct _ _
7 em em ADP _ _ 8 case _ _
8 novembro novembro NOUN _ Gender=Masc|Number=Sing 17 obl _ _
9 de de ADP _ _ 10 case _ _
10 1979 1979 NUM _ NumType=Card 8 nmod _ SpaceAfter=No
11 , , PUNCT _ _ 8 punct _ _
12 e e CCONJ _ _ 14 cc _ _
13 a o DET _ Definite=Def|Gender=Fem|Number=Sing|PronType=Art 14 det _ _
14 reformulação reformulação NOUN _ Gender=Fem|Number=Sing 8 conj _ _
15 partidária partidário ADJ _ Gender=Fem|Number=Sing 14 amod _ SpaceAfter=No
16 , , PUNCT _ _ 8 punct _ _
17-18 levou-o _ _ _ _ _ _ _ _
17 levou levar VERB _ Mood=Ind|Number=Sing|Person=3|Tense=Past|VerbForm=Fin 0 root _ _
18 o ele PRON _ Definite=Def|Gender=Masc|Number=Sing|PronType=Art 17 obj _ _
19 a a ADP _ _ 20 mark _ _
20-21 filiar-se _ _ _ _ _ _ _ _
20 filiar filiar VERB _ VerbForm=Inf 17 xcomp _ _
21 se se PRON _ Case=Acc|Gender=Fem|Number=Sing|Person=3|PronType=Prs 20 expl _ _
22-23 ao _ _ _ _ _ _ _ _
22 a a ADP _ _ 24 case _ _
23 o o DET _ Definite=Def|Gender=Masc|Number=Sing|PronType=Art 24 det _ _
24 Partido Partido PROPN _ Gender=Masc|Number=Sing 20 obl _ _
25-26 do _ _ _ _ _ _ _ _
25 de de ADP _ _ 27 case _ _
26 o o DET _ Definite=Def|Gender=Masc|Number=Sing|PronType=Art 27 det _ _
27 Movimento Movimento PROPN _ Gender=Masc|Number=Sing 24 nmod _ _
28 Democrático Democrático PROPN _ Number=Sing 27 flat:name _ _
29 Brasileiro Brasileiro PROPN _ Number=Sing 27 flat:name _ _
30 ( ( PUNCT _ _ 31 punct _ SpaceAfter=No
31 PMDB PMDB PROPN _ Gender=Masc|Number=Sing 27 appos _ SpaceAfter=No
32 ) ) PUNCT _ _ 31 punct _ SpaceAfter=No
33 , , PUNCT _ _ 20 punct _ _
34 sucessor sucessor NOUN _ Gender=Masc|Number=Sing 20 obj _ _
35-36 do _ _ _ _ _ _ _ _
35 de de ADP _ _ 37 case _ _
36 o o DET _ Definite=Def|Gender=Masc|Number=Sing|PronType=Art 37 det _ _
37 MDB MDB PROPN _ Gender=Masc|Number=Sing 34 nmod _ SpaceAfter=No
38 . . PUNCT _ _ 17 punct _ _
Ou no 36.conllu, onde CPOR está indo para Reserva ao invés de Centro:
# sent_id = 24
# text = Promovido a coronel em dezembro de 1942, em junho de 1943 deixou o 13º BC para assumir o comando do Centro de Preparação de Oficiais da Reserva (CPOR) de São Paulo, onde ficou até julho do ano seguinte.
1 Promovido promover VERB _ Gender=Masc|Number=Sing|VerbForm=Part 13 dep _ _
2 a o DET _ Definite=Def|Gender=Fem|Number=Sing|PronType=Art 3 det _ _
3 coronel coronel NOUN _ Gender=Masc|Number=Sing 1 obj _ _
4 em em ADP _ _ 5 case _ _
5 dezembro dezembro NOUN _ Gender=Masc|Number=Sing 1 obl _ _
6 de de ADP _ _ 7 case _ _
7 1942 1942 NUM _ NumType=Card 5 nmod _ SpaceAfter=No
8 , , PUNCT _ _ 1 punct _ _
9 em em ADP _ _ 10 case _ _
10 junho junho NOUN _ Gender=Masc|Number=Sing 1 obl _ _
11 de de ADP _ _ 12 case _ _
12 1943 1943 NUM _ NumType=Card 10 nmod _ _
13 deixou deixar VERB _ Mood=Ind|Number=Sing|Person=3|Tense=Past|VerbForm=Fin 0 root _ _
14 o o DET _ Definite=Def|Gender=Masc|Number=Sing|PronType=Art 16 det _ _
15 13º 13º ADJ _ Gender=Masc|Number=Sing|NumType=Ord 16 amod _ _
16 BC BC PROPN _ Gender=Masc|Number=Sing 13 obj _ _
17 para para ADP _ _ 18 mark _ _
18 assumir assumir VERB _ VerbForm=Inf 13 advcl _ _
19 o o DET _ Definite=Def|Gender=Masc|Number=Sing|PronType=Art 20 det _ _
20 comando comando NOUN _ Gender=Masc|Number=Sing 18 obj _ _
21-22 do _ _ _ _ _ _ _ _
21 de de ADP _ _ 23 case _ _
22 o o DET _ Definite=Def|Gender=Masc|Number=Sing|PronType=Art 23 det _ _
23 Centro Centro PROPN _ Gender=Masc|Number=Sing 20 nmod _ _
24 de de ADP _ _ 25 case _ _
25 Preparação preparação PROPN _ Number=Sing 23 nmod _ _
26 de de ADP _ _ 27 case _ _
27 Oficiais oficial PROPN _ Gender=Masc|Number=Plur 23 nmod _ _
28-29 da _ _ _ _ _ _ _ _
28 de de ADP _ _ 30 case _ _
29 a o DET _ Definite=Def|Gender=Fem|Number=Sing|PronType=Art 30 det _ _
30 Reserva Reserva PROPN _ Gender=Fem|Number=Sing 23 nmod _ _
31 ( ( PUNCT _ _ 32 punct _ SpaceAfter=No
32 CPOR CPOR PROPN _ Gender=Fem|Number=Sing 30 appos _ SpaceAfter=No
33 ) ) PUNCT _ _ 32 punct _ _
@suemi-higuchi muito obrigado pelos exemplos! vai ser muito útil!
com eles tb me dei conta da limitação desse resultado preliminar -- eu ainda não fiz algumas coisas que vai impactar no resultado:
Acho que devemos usar apenas pessoas e organizações. Lembrando que nosso foco são os 1..35 files. Arquivos: organizacao.txt e pessoa-individuo.csv (coluna 1)
@odanoburu , não temos localidade não, veja as listas que temos aqui: https://github.com/cpdoc/dhbb/tree/master/dic Me parece que erros onde appos apontam para o head errado ocorrem mais com as organizações. Quanto aos nomes de pessoas, em geral se há um de/da/do no meio, o termo logo a seguir é atribuído como nmod do primeiro nome. Acho difícil ter casos aqui onde appos apontem para o token errado por conta da segmentação errada do nome. Mas vou dar uma procurada...
@suemi-higuchi coloquei o Rio de Janeiro em organização.txt
só pra corrigir esse caso que vc mencionou! @arademaker
resultado:
-- old+lex -> new
Correct: 506
ErrDep: 9
ErrHead: 161
ErrMissingA: 47
ErrNotA: 191
-- old -> new
Correct: 492
ErrDep: 9
ErrHead: 175
ErrMissingA: 47
ErrNotA: 203
@odanoburu não, Rio de Janeiro
não deve ficar em organização! Como @suemi-higuchi disse, quando algo como Universidade Federal do Rio de Janeiro
for encontrada, o head deve ser Universidade
.
Explica e dá exemplos destes tipos de erros? Os números não fazem muito sentido...
@suemi-higuchi O que vc quer dizer com
Acho difícil ter casos aqui onde appos apontem para o token errado por conta da segmentação errada do nome. Mas vou dar uma procurada...
Não entendi.
@odanoburu não,
Rio de Janeiro
não deve ficar em organização! Como @suemi-higuchi disse, quando algo comoUniversidade Federal do Rio de Janeiro
for encontrada, o head deve serUniversidade
.
hum, não teria problema se o código fosse mais guloso, mas não é..
Explica e dá exemplos destes tipos de erros? Os números não fazem muito sentido...
é classificação de apostos da Cláudia: Correct: tudo certo ErrDep: acertou o HEAD, mas não colocou aposto ErrHead: errou o HEAD, mas colocou aposto ErrMissingA: não marcou como aposto nem acertou o HEAD ErrNotA: marcou como aposto mas não era
Sim @odanoburu mas qual o argumento de colocar Rio de janeiro em organização? Seu código não inclui apostos, né? Então não entendo diferença nos números de ErrnotA. Eu só esperava menos erros de ErrHead, estranho... precisamos de exemplos. Além de computar os números, precisamos ver 1-2 casos de cada situação... De qq modo vamos precisar mesmo destes casos para explicar no texto.
@suemi-higuchi certo? Vamos colocar no texto uns exemplos de cada erro.
@arademaker nenhum argumento, haha. mas poderia criar uma lista de localidades e colocar rio de janeiro, e daria no mesmo.
meu código não inclui apostos, mas ao corrigir um HEAD um ErrHead pode virar um Correct, e ao corrigir um DEPREL para flat:name pode remover um appos que não era pra estar ali, daí a redução em ErrNotA.
@arademaker
Acho difícil ter casos aqui onde appos apontem para o token errado por conta da segmentação errada do nome. Mas vou dar uma procurada...
Não entendi.
Seria algo como isso, veja:
1 Adalberto
2 de
3 Barros 1 nmod
4 Nunes 3 flat:name
5 , ,
6 chefe 1 appos
7 de
8 o
9 Estado-Maior
10 de
11 a
12 Aeronáutica
Nomes de pessoas podem ter nmod no meio ao invés do flat:name (o que, se me lembro bem, funciona para você). De qq forma essa atribuição não afeta o appos que vem a seguir, ele vai sempre apontar para o token certo (por ex., Adalberto). Faz todo o sentido.
Como não lembro de outros casos que não sejam do tipo nmod para nomes de pessoas, acho que aqui não encontraremos erros de appos ligando para o head errado.
Boa @suemi-higuchi correto, lembrei. @odanoburu como seu código lidou com isso? Entendeu o que Suemi disse? O funciona para vc
dela é que os nomes estão todos na subárvore de Adalberto então tinhamos combinado que ela não precisava se preocupar. Dado que a qq momento poderiamos simplesmente tornar a subarvore plana com o flat, facilmente automatizavel. Mas se vc tiver feito isso agora, vamos estar sendo desleais na comparação com o golden.
@arademaker @suemi-higuchi não sei se entendi do que exatamente estamos falando
o que eu fiz foi colocar todos os tokens do nome como flat:name do HEAD do nome, por enquanto, sem lidar com os casos em que eu deveria preservar a DEPREL, como no caso dos nmods.
vamos estar sendo desleais na comparação com o golden.
dado o que eu (não) entendi, tb não entendi o pq disso..
Melhor forma talvez de esclarecemos e vendo exemplos. Exemplos de diferenças entre o old e os files depois de processados pelo seu script .. pode listar aqui uns 1-2 casos de cada erro ?
mandei email com os arquivos corrigidos -- se tiver algo de estranho me avisem, pq escrevi a função de printing hoje.
aí é só fazer uns diffs pra inspecionar as mudanças.
vendo os que a @suemi-higuchi deu de exemplo:
edição: depois que eu arrumei a vírgula no léxico o resulto está correto!
fiquei muito tempo aqui debuggando o pq do corretor-por-léxico ter mudado a primeira sentença de 1.conllu
:
< 4 Coelho Coelho PROPN _ Number=Sing 2 flat:name _ _
---
> 4 Coelho Coelho PROPN _ Number=Sing 3 flat:name _ _
já que 'Coelho' estava apontando corretamente pra 'José', e depois passou a apontar para 'Machado'. achei que tinha algum bug no reconhecimento, já que 'José Machado' e 'Machado Coelho' também existiam no léxico, e o código não estaria retornando o resultado correto -- 'José Machado Coelho de Castro'.
mas o problema era no léxico: 'José' em 'José Machado Coelho de Castro' estava como 'Jose'.
ou seja, além de consertar, podemos tb criar novos erros se o léxico tiver erros (o que ele fatalmente vai ter).
olhando melhor, parece que nenhum José está acentuado no arquivo https://github.com/cpdoc/dhbb/blob/master/dic/pessoa-individuo.csv
@arademaker vc tirou os acentos pra inputar no sistema da IBM?
@odanoburu @arademaker @claudiafreitas , segue a minha análise a partir do arquivo diff que o Bruno enviou e suas explicações.
Temos que: na nossa amostra de 35 verbetes (45,210 tokens e 1,193 sentenças) utilizamos os léxicos de Organizações e de Pessoas-indivíduos para verificar como se daria a correção dos nomes e dependências.
Considerando APENAS sentenças onde relações apositivas foram trabalhadas E onde efetivamente alguma alteração foi feita, encontramos:
Testando a correção pelo léxico nos arquivos old e em seguida comparando com o golden, temos:
16 casos (EH -> C) em que havia erro no Head e com a correção, passou a estar correto (diminuição dos ErrHead)
"presidente da União dos Prefeitos da Bahia (UPB)" [sentença 5 de 2.conllu] --> antes: UPB como appos de Bahia --> depois: UPB como appos de União
"Partido da Frente Liberal (PFL)" [sentença 9 de [4.conllu] --> antes: PFL como appos de Frente --> depois: PFL como appos de Partido
10 casos (ENA -> nil) em que havia erro no DepRel, isto é, não devia ter sido marcado appos e com a correção o appos deixou de ser marcado (virou flat:name) (diminuição dos casos de ErrNotAppo).
"pelo Senado Federal" [sentença 12 de 11.conllu] --> antes: Federal como appos de Senado --> depois: Federal como flat:name de Senado
"casado com Maria Lúcia Burnett Aboud" [sentença 11 de 12.conllu] --> antes: Lucia como appos de Maria, e Burnett & Aboud como flat:name de Lúcia --> depois: Lucia, Burnett & Aboud todos como flat:name de Maria
2 casos (ENA -> C) em que havia erro no Head e após a correção passou a apontar para o HEAD correto (diminuição dos casos de ErrNotAppo)
"Cosme Alves Ferreira Filho nasceu em..." [sentença 1 de 3.conllu] --> antes: Alves como appos de Cosme, e Ferreira & Filho como flat:name de Alves --> depois: Alvex, Ferreira & Filho todos como flat:name de Cosme
"...substtituindo Francisco Thompson Flores Neto..." [sentença 14 de 7.conllu] --> antes: Flores como appos de Francisco, e Neto como flat:name de Flores --> depois: Neto como flat:name de Francisco
Bruno, qual a diferença entre os casos (ENA -> nil) e (ENA -> C)? Os exemplos de (ii) e (iii) me parecem tão iguais...
Fiquei preocupada com o que você disse sobre os acentos
"ou seja, além de consertar, podemos tb criar novos erros se o léxico tiver erros (o que ele fatalmente vai ter)"
Como você lidou com isso?
Essa análise está correta? Confusa? Entendi errado?
@odanoburu esse resultado de comparação está valendo?
-- old+lex -> new
Correct: 506
ErrDep: 9
ErrHead: 161
ErrMissingA: 47
ErrNotA: 191
-- old -> new
Correct: 492
ErrDep: 9
ErrHead: 175
ErrMissingA: 47
ErrNotA: 203
@suemi-higuchi estou respondendo inline, ainda não terminei.
@odanoburu esse resultado de comparação está valendo?
e sim!
Estas 30 menções representam 5% do total de menções na amostra como um todo (que, pelos dados da última versão do paper, seriam 587 = 229 organizações e 358 indivíduos. É isso mesmo??).
pelo que entendi do que vc entendeu (rs), não. esse diff que eu te mandei por último não é a diferença entre os arquivos old/ e os arquivos old corrigidos, é a diferença entre a classificação de apostos feita entre old/new e old-corrigido/new. então essas 30 menções são as 30 menções em que a correção afetou a classificação dos apostos, não o total de menções encontradas!
Bruno, qual a diferença entre os casos (ENA -> nil) e (ENA -> C)? Os exemplos de (ii) e (iii) me parecem tão iguais...
erro meu! todos são ENA -> nil, na verdade -- tinha sido marcado um aposto que não existia, e ele virou flat:name com a correção.
Fiquei preocupada com o que você disse sobre os acentos "ou seja, além de consertar, podemos tb criar novos erros se o léxico tiver erros (o que ele fatalmente vai ter)" Como você lidou com isso?
não lidei... estava pensando em como lidar. eu acho que a remoção de duplicatas do @arademaker que acabou tirando algumas instâncias com acentos, mas não sei. e tipo, vc extraiu os nomes do corpus, então talvez eles existam sem acento tb? acho que é um comentário interessante de se fazer no artigo: que a correção pelo léxico all in all é boa, mas tb pode introduzir erros se feita sem cautela.
me avisa se alguma coisa não estiver clara ! @suemi-higuchi