Closed leoalenc closed 2 years ago
@leoalenc Acredito que entendi o que você está pedindo, mas para confirmar gostaria de ver esse exemplo que você comentou, só que acho que você colocou o link errado pois nenhum verbo dentre separar, colocar e recolher está na sentença do link.
@lucasrct, o verbo em questão é este, marcado:
@lucasrct , de fato me enganei, o link correto é
@leoalenc criei aqui um script capaz de extrair os filhos de cada verbo no bosque, só estou ainda pensando na melhor maneira de lidar guardar o resultado e interpretar.
Um exemplo,
o verbo 'comer' aparece 16 vezes no corpus de treino do bosque, sendo que suas configurações de filhos que ocorreram foram:
['advmod', 'aux', 'cc', 'obj'], ['mark', 'nsubj', 'obj'], ['conj', 'mark', 'obj'], ['expl', 'nsubj', 'obl'], ['aux', 'obj', 'obl'], ['conj', 'conj', 'conj', 'mark'], ['obl'], ['obj'], ['conj', 'conj', 'mark', 'obl'], [], ['cc', 'nsubj', 'obj'], ['cc', 'obl'], ['mark', 'obj'], ['mark']
É esse o caminho? Existe alguma deprel que podemos excluir da agregação? (Já removi as deprel do formato 'punct')
É esse o caminho? Existe alguma deprel que podemos excluir da agregação? (Já removi as deprel do formato 'punct')
@lucasrct , Muito bom! Sim, várias dependências não são relevantes, estamos interessados apenas no seguinte:
nsubj sujeito obj objeto direto iobj objeto indireto xcomp ccomp csubj expl
Para o objeto e o objeto indireto, precisamos do adp ligado via case. Para xcomp, csubj e ccomp, precisamos das conjunções ligadas por mark. Também são necessárias mais algumas informações adicionais, estão nos comentários, mas posso listar depois.
@leoalenc Ainda estou absorvendo o que estou lendo na thread, tentando fazer um trabalho paralelo ao de criar o script, por isso estou tentando segmentar a execução. Conforme vou lendo e entendendo mais a fundo, vou enriquecendo o script com mais informações.
@leoalenc Uma dúvida a respeito de:
Para o objeto e o objeto indireto, precisamos do adp ligado via case.
Nesse caso, deveríamos colocar a informação referente à preposição em após o colocar? Pois essa preposição não é filha de um token obj.
@leoalenc Uma dúvida a respeito de:
Para o objeto e o objeto indireto, precisamos do adp ligado via case.
[...] Nesse caso, deveríamos colocar a informação referente à preposição em após o colocar? Pois essa preposição não é filha de um token obj.
@lucasrct , essa preposição não interessa, exatamente porque não é filha do obj e sim do obl. Depois de extraído o máximo subconjunto de dependentes de Rel conforme minha definição acima, interessam apenas os filhos desse dependentes ligados via case e mark.
@lucasrct , lembrando que, no meu comentário acima, objeto é obj e objeto indireto é iobj.
@lucasrct , veja este outro exemplo:
http://match.grew.fr/data/616adee240cc5/42.svg
Foi retirado desta query elaborada pelo @wellington36:
http://match.grew.fr/?corpus=UD_Portuguese-Bosque@dev&custom=6168622521909
Eu preciso obter, para cada verbo, de cada sentença do corpus, listas como as seguintes:
Lista 1:
VERB:pedir+Ind+Sing+3+Past+Fin
nsubj
iobj:case+ADP+a
ccomp:mark+SCONJ+que+Sub
xcomp:VERB+transformar+Inf
Lista 2:
VERB:empenhar+Sub+Plur+3+Pres+Fin
expl:PRON+se+Acc+Masc+Plur+3+Pres
obj:case+ADP+em
Lista 3:
VERB:transformar+Inf
obj:case+ADP+em
Coloquei os dependentes de cada um dos três verbos num formato vertical para facilitar a leitura, mas a saída inicial do algoritmo deve ser, para cada sentença, uma lista de listas:
VERB:pedir+Ind+Sing+3+Past+Fin nsubj iobj:case+ADP+a ccomp:mark+SCONJ+que+Sub xcomp:VERB+transformar+Inf
VERB:empenhar+Sub+Plur+3+Pres+Fin expl:PRON+se+Acc+Masc+Plur+3+Pres obj:case+ADP+em
VERB:transformar+Inf obj:case+ADP+em
Observe o seguinte sobre a notação utilizada:
Obrigado por sua colaboração. Caso tenha dúvidas, formule-as aqui e, se eu demorar a responder, pode enviar mensagem alertando pelo Telegrama.
@lucasrct, vi agora que pedir no exemplo dado rege também um obj realizado pelo pronome se, que deverá entrar na lista:
VERB:pedir+Ind+Sing+3+Past+Fin
nsubj
iobj:case+ADP+a
ccomp:mark+SCONJ+que+Sub
obj
xcomp:VERB+transformar+Inf
@arademaker e @wellington36, a propósito, há pelo menos três erros na anotação desse exemplo. Vou abrir issue no repositório do Bosque:
@lucasrct , esqueci do verbo surgir no exemplo dado acima:
Lista 4
VERB:surgir+Sub+Plur+3+Pres+Fin
nsubj
Esse verbo tem um filho ligado via mark, no entanto, como esse verbo vincula-se via advcl a pedir, essa informação não é relevante.
@leoalenc Estou terminando de bolar o script para a extração da informação.
Em um caso como esse
http://match.grew.fr/data/616b52deefab9/3968.svg
Em que o verbo crer possui 2 outros verbos ligados pela relação 'ccomp', é necessária a informação dos dois? Não são numerosos no corpus esses casos, mas gostaria de tratá-los da forma adequada.
@leoalenc Estou terminando de bolar o script para a extração da informação.
Em um caso como esse
http://match.grew.fr/data/616b52deefab9/3968.svg
Em que o verbo crer possui 2 outros verbos ligados pela relação 'ccomp', é necessária a informação dos dois? Não são numerosos no corpus esses casos, mas gostaria de tratá-los da forma adequada.
@lucasrct , Muito bem! Sim, no caso de repetições, precisamos extrair todas. no exemplo que você mostrou, trata-se, na verdade, de um erro do analisador sintático estatístico. O segundo ccomp é dependente do primeiro. Ou seja, temos, nesse exemplo, três verbos: O primeiro verbo é crer, Cuja lista é ccomp
Não creio que o povo americano queira que… 
O segundo verbo é querer, cuja lista é composta de nsubj ccomp
>O povo americano queira que eu...
O terceiro verbo é fazer Cuja lista é composta de nsubj obj
Eu fizesse isso
Evidentemente, o seu algoritmo não pode resolver essas questões. É importante que você me prepare as listas com duplicatas que eu posso examinar manualmente e fazer as correções necessárias.

@leoalenc Aqui está a lista com os verbos que possuem 2 ccomp (não existe casos de mais de dois no corpus de treino)
sent_id: CP233-4
Verbo: gostar (gostaria)
Frase: Continuo a dizer que acho bem que os Barmens saibam que a Delegação está aberta para todos eles,e gostaria imenso que eles aparecessem em vez de uma vez por mês, dez vezes porque temos todas as condições criadas para os receber.
sent_id: CP387-2
Verbo: acreditar (acreditar)
Frase: os cubanos podem simplesmente não acreditar que os Estados Unidos os retenham perpetuamente em Guantanamo, ou que os enviem para outros países, e então a fuga continuará.
sent_id: CP419-3
Verbo: acrescentar (acrescenta)
Frase: O jornal acrescenta que os gibraltinos receiam que a medida seja um primeiro passo para os britânicos desistirem da soberania sobre o rochedo, situado num promontório no sul de Espanha, devolvendo-o aos espanhóis.
sent_id: CP775-6
Verbo: crer (creio)
Frase: Não creio que o povo americano queira que eu fizesse isso».
sent_id: CF395-5
Verbo: ver (vi)
Frase: Nunca vi um partido render-se tão rápida e incondicionalmente como o PT está fazendo.
@leoalenc Aqui está a lista com os verbos que possuem 2 ccomp (não existe casos de mais de dois no corpus de treino)
sent_id: CP419-3 Verbo: acrescentar (acrescenta) Frase: O jornal acrescenta que os gibraltinos receiam que a medida seja um primeiro passo para os britânicos desistirem da soberania sobre o rochedo, situado num promontório no sul de Espanha, devolvendo-o aos espanhóis.
@lucasrct, muio obrigado! Não examinei a árvore dependencial de todas essas ocorrências, porque a busca pelo padrão abaixo retornou apenas este resultado, correspondente ao exemplo acima.
http://match.grew.fr/?corpus=UD_Portuguese-Bosque@dev&custom=616db5b440864
Podemos observar, @arademaker e @wellington36, que o analisador estatístico sistematicamente comete o mesmo tipo de erro que apontei antes, atribuindo ao primeiro verbo que rege um ccomp
, ou seja, acreditar no exemplo em tela, um outro ccomp
da mesma sentença, regido pelo verbo encaixado, i.e., recear.
Estou pensando aqui na melhor maneira para exibir os dados @leoalenc, por exemplo:
Verbos que possuem como subconjunto de relações [nsubj,obj]
[situar, continuar, manter, esperar, deixar, ser, correr, querer, fugir, ir, encontrar, gastar, juntar, reivindicar, faltar, lembrar, considerar, especializar, dispor, encomendar, vir, financiar, sair, pagar, acontecer, ...]
Não acho que apenas isso seja uma informação suficiente, mas ao mesmo tempo, não acho que apenas alguns exemplos de alguns verbos seria o suficiente para decidirmos sobre todos.
Um exemplo do output que você deu a ideia acima: Todas as formas de ocorrência do verbo esperar
esperar+Ger ccomp VERB+mark+SCONJ+que nsubj
esperar+Ind+Sing+3+Pres+Fin xcomp ADJ+terminado nsubj
esperar+Ind+Plur+1+Imp+Fin obj
esperar+Ind+Sing+1+Pres+Fin ccomp VERB+mark+SCONJ+que nsubj
esperar+Ind+Sing+3+Imp+Fin xcomp VERB+aparecer
esperar+Ind+Plur+3+Imp+Fin xcomp VERB+encontrar
esperar+Inf obj
esperar+Ger obj
esperar+Ind+Plur+3+Pres+Fin xcomp VERB+ver nsubj
esperar+Ind+Sing+1+Pres+Fin ccomp VERB+mark+SCONJ+que
esperar+Ind+Sing+1+Pres+Fin obj
esperar+Inf obj PRON+se+Acc+Masc+Plur+3+Prs
esperar+Sub+Sing+3+Pres+Fin xcomp VERB+subir
esperar+Ind+Sing+3+Pres+Fin xcomp VERB+encontrar nsubj
esperar+Ger obj nsubj
esperar+Ind+Plur+1+Pres+Fin xcomp VERB+continuar
esperar+Ind+Plur+3+Imp+Fin obj nsubj
esperar+Ind+Sing+3+Pres+Fin obj iobj nsubj
esperar+Ind+Sing+1+Pres+Fin xcomp VERB+vir
esperar+Ind+Plur+3+Pres+Fin obj iobj nsubj
esperar+Ind+Sing+1+Pres+Fin
esperar+Ind+Plur+3+Pres+Fin obj nsubj
esperar+Ind+Plur+3+Pres+Fin PRON+se+Acc+Fem+Plur+3+Prs
esperar+Inf ccomp VERB+mark+SCONJ+que
esperar+Ind+Sing+1+Imp+Fin obj nsubj
esperar+Ind+Sing+3+Pres+Fin obj nsubj
esperar+Ind+Sing+1+Pres+Fin xcomp VERB+sair
esperar+Ind+Sing+3+Past+Fin obj nsubj
esperar+Ind+Sing+1+Pres+Fin xcomp ADJ+último
esperar+Ind+Sing+3+Pres+Fin ccomp VERB+mark+SCONJ+que nsubj
esperar+Ger ccomp VERB+mark+SCONJ+que
Um exemplo do output que você deu a ideia acima: Todas as formas de ocorrência do verbo esperar
Acho que também precisamos saber a morfologia do verbo da clausula subordinada...
Na query acima, @leoalenc pergunta de verbos com dois ccomp e um nsubj e temos 2 casos. Mas tirando do padrão o nsubj, ficamos com 10 casos:
http://match.grew.fr/?corpus=UD_Portuguese-Bosque@dev&custom=616db650bebb1
@lucasrct , veja este outro exemplo:
http://match.grew.fr/data/616adee240cc5/42.svg
Foi retirado desta query elaborada pelo @wellington36:
http://match.grew.fr/?corpus=UD_Portuguese-Bosque@dev&custom=6168622521909
Eu preciso obter, para cada verbo, de cada sentença do corpus, listas como as seguintes:
Lista 1:
VERB:pedir+Ind+Sing+3+Past+Fin nsubj iobj:case+ADP+a ccomp:mark+SCONJ+que+Sub xcomp:VERB+transformar+Inf
Lista 2:
VERB:empenhar+Sub+Plur+3+Pres+Fin expl:PRON+se+Acc+Masc+Plur+3+Pres obj:case+ADP+em
Lista 3:
VERB:transformar+Inf obj:case+ADP+em
Coloquei os dependentes de cada um dos três verbos num formato vertical para facilitar a leitura, mas a saída inicial do algoritmo deve ser, para cada sentença, uma lista de listas:
VERB:pedir+Ind+Sing+3+Past+Fin nsubj iobj:case+ADP+a ccomp:mark+SCONJ+que+Sub xcomp:VERB+transformar+Inf VERB:empenhar+Sub+Plur+3+Pres+Fin expl:PRON+se+Acc+Masc+Plur+3+Pres obj:case+ADP+em VERB:transformar+Inf obj:case+ADP+em
Observe o seguinte sobre a notação utilizada:
- Eu não transcrevo os atributos, mas apenas os valores deles, para economizar espaço.
- No caso de obj e iobj, extraio a ADP ligada por case.
- No caso de ccomp, extraio a conjunção ligadas por mark e o modo do verbo encaixado, ou seja, empenhar que está ligado a pedir via ccomp.
- No caso de xcomp, extraio os valores dos atributos do verbo (se houver uma conjunção subordinada, também preciso de suas informações, como fiz com o ccomp).
- Extraio os valores dos atributos do expl.
Obrigado por sua colaboração. Caso tenha dúvidas, formule-as aqui e, se eu demorar a responder, pode enviar mensagem alertando pelo Telegrama.
@lucasrct , veja de novo acima, especialmente o item 2.
Estou pensando aqui na melhor maneira para exibir os dados @leoalenc, por exemplo:
Verbos que possuem como subconjunto de relações [nsubj,obj]
[situar, continuar, manter, esperar, deixar, ser, correr, querer, fugir, ir, encontrar, gastar, juntar, reivindicar, faltar, lembrar, considerar, especializar, dispor, encomendar, vir, financiar, sair, pagar, acontecer, ...]
Não acho que apenas isso seja uma informação suficiente, mas ao mesmo tempo, não acho que apenas alguns exemplos de alguns verbos seria o suficiente para decidirmos sobre todos.
Obrigado, @lucasrct. Veja item 2 de novo: https://github.com/LR-POR/PorGram/issues/19#issuecomment-944928100. Para obj e iobj, precisamos da ADP...
Um exemplo do output que você deu a ideia acima: Todas as formas de ocorrência do verbo esperar
Acho que também precisamos saber a morfologia do verbo da clausula subordinada...
@lucasrct , parabéns! Mas, de fato, precisamos disso que @arademaker apontou. Veja meus exemplos aqui e nos comentários https://github.com/LR-POR/PorGram/issues/19#issuecomment-944928100
Um exemplo do output que você deu a ideia acima: Todas as formas de ocorrência do verbo esperar
esperar+Ger ccomp VERB+mark+SCONJ+que nsubj esperar+Ind+Sing+3+Pres+Fin xcomp ADJ+terminado nsubj esperar+Ind+Plur+1+Imp+Fin obj [...]
@lucasrct , esse tipo de lista constitui excelente ponto de partida. Precisamos consolidar as informações agregadas ao lema, no caso esperar. Somente uma informação me aprece necessária:
esperar+Act (para forma ativa) esperar+Pass (para forma passiva)
Assim, as primeiras linhas ficariam:
esperar+Act ccomp VERB+mark+SCONJ+que nsubj esperar+Act xcomp ADJ+terminado nsubj esperar+Act obj esperar+Act ccomp VERB+mark+SCONJ+que nsubj esperar+Act xcomp VERB+aparecer esperar+Act xcomp VERB+encontrar esperar+Act obj
para determinar a forma passiva, o que podemos usar? me parece que procurar pelo AUX filho do verbo que é um aux:pass é o mais correto/seguro:
% awk '$8 ~ /aux:pass/' *.conllu | wc -l
1194
% awk '$8 ~ /nsubj:pass/' *.conllu | wc -l
999
nem todas as formas passivas tem o sujeito da passiva.
para determinar a forma passiva, o que podemos usar? me parece que procurar pelo AUX filho do verbo que é um aux:pass é o mais correto/seguro: [...] nem todas as formas passivas tem o sujeito da passiva.
@arademaker , sim, o auxiliar da passiva é importante, outro indício é a forma do verbo, que deve estar no particípio passado. Essa informação é crucial porque, do contrário, não será feita uma modelação correta da valência a partir das molduras encontradas no corpus: Por exemplo, imaginemos o seguinte exemplo fictício: as casas foram destruídas pela enchente. A moldura extraída será de apenas um sujeito nsubj. Se eu não tiver a informação sobre o uso passivo do verbo, eu vou concluir erroneamente que se trata de um uso intransitivo do verbo, como, por exemplo: ??as casas destruíram. Por sinal, esse uso não é corrente. O agente da passiva não é importante, no exemplo dado, pela enchente, acho que ele está sendo analisado no bosque como obl, certo?
Verbos que possuem como subconjunto de relações [nsubj,obj] [...] Não acho que apenas isso seja uma informação suficiente, mas ao mesmo tempo, não acho que apenas alguns exemplos de alguns verbos seria o suficiente para decidirmos sobre todos.
subj,V,obj
será diferente de obj,V,subj
. Casos onde OBJ ocorre antes do VERBO (http://match.grew.fr/?corpus=UD_Portuguese-Bosque@dev&custom=616dbf0d44f69)mark
ou case
do filho do verbo)AUX
conectado via aux:pass
) ou ativa.@arademaker , A ordem dos elementos da moldura não é relevante para determinar a valência! É por isso que eu usei o termo subconjunto naquela minha tentativa de formalização.
@arademaker , sim, o auxiliar da passiva é importante, outro indício é a forma do verbo, que deve estar no particípio passado.
http://match.grew.fr/?corpus=UD_Portuguese-Bosque@dev&custom=616dc0a898287&clustering=V.VerbForm
Um caso de Fin e 999 de Part.
@arademaker , A ordem dos elementos da moldura não é relevante para determinar a valência! É por isso que eu usei o termo subconjunto naquela minha tentativa de formalização.
Ah, tudo bem, mas acho que é uma pista para identificarmos possíveis inconsistencias de analises. ~Por exemplo, passivas não anotadas como deveriam...~ (esquece, acabamos de ver que nestes casos a anotação de construções passivas geralmente recebe como complemento nsubj:pass
e obl:agent
) por isso sugeri ao @lucasrct tentar preservar e, eventualmente, podemos agrupar, se necessário posteriormente, formas cuja diferença seja apenas na ordem.
- [ ] precisamos usar estes dados para conseguir identificar possíveis analises erradas. Como?
@arademaker , associando às molduras exemplos curtos vai me permitir identificar coisas estranhas. Alguns padrões detectados já dispararam o sinal de alerta, como aqueles casos de nsubj ccomp ccomp.
- [ ] precisamos então conseguir associar estas diáteses encontradas a tipos da gramática. Como?
@arademaker , se eu tiver diante de mim uma lista como a última que o @lucasrct preparou, com as informações que faltam e fazendo as consolidações recomendadas, eu vou saber exatamente em cada caso qual o tipo de verbo da gramática correspondente, pelo menos é o que espero pra maioria dos casos. Eventualmente, teremos material espúrio gerado por erros do bosque, que precisarão de uma análise manual, como já apontei diversas vezes.
Observe o seguinte sobre a notação utilizada:
- Eu não transcrevo os atributos, mas apenas os valores deles, para economizar espaço.
- No caso de obj e iobj, extraio a ADP ligada por case.
- No caso de ccomp, extraio a conjunção ligadas por mark e o modo do verbo encaixado, ou seja, empenhar que está ligado a pedir via ccomp.
- No caso de xcomp, extraio os valores dos atributos do verbo (se houver uma conjunção subordinada, também preciso de suas informações, como fiz com o ccomp).
- Extraio os valores dos atributos do expl.
Obrigado por sua colaboração. Caso tenha dúvidas, formule-as aqui e, se eu demorar a responder, pode enviar mensagem alertando pelo Telegrama.
@lucasrct , veja de novo acima, especialmente o item 2.
@leoalenc, obrigado pelos direcionamentos! Quanto ao item 2, eu o considerei no script, o que acontece é que muitos casos com obj não possuem um token ADP ligado via case... por isso não aparecem.
Quanto à informação da voz passiva, visto que, pelo que entendi, não existe um método automatizável e seguro de garantir se determinado verbo está na voz passiva, acredito que o ideal seria não colocar por enquanto, visto que dependeria de algumas inferências e poderíamos agregar mais ruido ao processo, o que acham?
@leoalenc, obrigado pelos direcionamentos! Quanto ao item 2, eu o considerei no script, o que acontece é que muitos casos com obj não possuem um token ADP ligado via case... por isso não aparecem.
@lucasrct , obrigado, isso era esperado, pois, no caso de obj
que constitui um chamado objeto direto, de fato não há ADP ligada via case
. Do mesmo modo, no caso de XCOMP e CCOMP, nem sempre ocorre SCONJ ligada via mark
. Mas, quando houver, precisamos desses elementos, tal como expliquei no meu esboço.
Temos exemplos dessas diferentes situações nestas análises que constituem uma espécie de padrão ouro, tendo sido revisadas por mim e pelo @arademaker: https://github.com/LR-POR/ud-matrix/blob/master/examples.conllu
Quanto à informação da voz passiva, visto que, pelo que entendi, não existe um método automatizável e seguro de garantir se determinado verbo está na voz passiva, acredito que o ideal seria não colocar por enquanto, visto que dependeria de algumas inferências e poderíamos agregar mais ruido ao processo, o que acham?
@lucasrct , é verdade que o corpus contém erros de anotação que dificultam ou mesmo impedem a recuperação do estatuto passivo de um verbo, como discuti com @arademaker. No entanto, precisamos agregar essas informações sempre que houver, pois, sem elas, não será possível atribuir uma valência aos verbos! As informações sobre voz passiva são as seguintes:
pass
em nsubj:pass
;aux:pass
como dependente imediato do verbo (visando à correção de possíveis erros de anotação, é importante, também, extrair o lema desse auxiliar;VerbForm=Part
, e na voz passiva, i.e., Voice=Pass
.É possível que apenas um dos itens esteja presente, mas é melhor isso do que nada. Aplicando esses critérios a este exemplo, extraído por meio desta query, obtemos inicialmente:
LISTA 2
CP98-2
VERB:prevenir+Masc+Plur+Part+Pass
aux:pass:ser+Ind+Plur+3+Fin
nsubj:pass
ccomp:mark+SCONJ+de+mark+SCONJ+que+Ind
Esse é o dado bruto, que eu gostaria que fosse armazenado num arquivo à parte ou numa determinada estrutura de dados como um dicionário de Python. Esse tipo de informação pode ser importante para checagem da análise. Para consolidação dos dados, eu faria primeiro a seguinte simplificação:
CP98-2
VERB:prevenir
nsubj:pass
ccomp:mark+SCONJ+de+mark+SCONJ+que+Ind
Em seguida, com base nas diferentes listas desse tipo, eu criaria um outro dicionário cujas chaves seriam molduras como nsubj:pass=ccomp:mark+SCONJ+de+mark+SCONJ+que+Ind
e os valores, listas de verbos que ocorrem com essa moldura. Para mim, isso seria suficiente para criar entradas para esses verbos na gramática atribuindo-lhes os tipos apropriados.
See d715dff, lexicon file extracted from bosque. code will be provided by @leoalenc but it uses data provided by the tools/etc/valence.py code from @lucasrct
Por sugestão de @arademaker, estou fechando a issue, que é muito ampla, devendo acompanhar todo o desenvolvimento da gramática. Passarei a abrir issues sobre grupos específicos de verbos, como, por exemplo, já fiz em #66 e #67.
Por grupos de verbo ou por recurso usado para extração de léxico. Podemos ter um issue para extração bosque , outro para extração do dhbb, outro para extração da wordnet etc
@arademaker, diferentes estratégias podem ser utilizadas para povoar a hierarquia de tipos verbais baseada na valência: