Conseguimos realizar uma geração semi-automática de pares questões-sparql para a língua portuguesa
Conseguimos realizar uma geração semi-automática de pares questões-sparql para a língua portuguesa
Quais tipos de melhorias podemos inserir na metodologia de geração do dataset
Conseguimos realizar uma geração semi-automática de pares questões-sparql para a língua portuguesa
Quais tipos de melhorias podemos inserir na metodologia de geração do dataset
Conseguimos realizar uma geração semi-automática de pares questões-sparql para a língua portuguesa
Quais tipos de melhorias podemos inserir na metodologia de geração do dataset
O quão bem os modelos de aprendizado de máquina realizam a predição das sparqls
Conseguimos realizar uma geração semi-automática de pares questões-sparql para a língua portuguesa
Quais tipos de melhorias podemos inserir na metodologia de geração do dataset
O quão bem os modelos de aprendizado de máquina realizam a predição das sparqls
Fig. 1: Virtuoso SPARQL Query Editor
# prefix declarations# nomeia uma URI de forma a abreviarPREFIX foo: <http://example.com/resources/>...# dataset definition# Indica os grafos RDFS consultadosFROM ...# result clause# Indica a informação a ser retornada da consultaSELECT ...# query pattern# Especifica o que consultar no conjunto de dadosWHERE { ...}# query modifiers# reorganiza os dados da consulta# pode limitar a quantidade de resultados, reordenar, etc.ORDER BY ...
Fig. 2: Arquitetura geral de um sistema de questão-resposta. (Ray, Al Chalabi, and Shaalan, 2015)
Arquitetura da Neural SPARQL Machine (Soru, Marx, Moussallem, Publio, Valdestilhas, Esteves, and Neto, 2017):
Fig. 3: Arquitetura de uma Neural SPARQL Machine na fase de treinamento (esquerda) e na fase de predição (direita). (Soru, Marx, Moussallem, et al., 2017)
where is <A> located in? -> select ?a where { <A> dbo:location ?a }what are the <A> northernmost <B>? -> select ?a where { ?a rdf:type <B> . ?a geo:lat ?b } order by desc(?b) limit <A> was <A> finished before <B>? -> ask where { <A> dbp:complete ?a . FILTER(?a <= <B>) }
As lacunas são definidas como <A>
e <B>
e estão presentes tanto na linguagem natural quanto na sparql.
São usados no máximo três entidadades, as geração do dataset é limitado a língua inglesa e ao endpoint da DBpedia1.
O QApedia realiza a geração de um conjunto de pares questão-sparql a partir do endpoint especificado. Além de permitir ao usuário trabalhar com o idioma desejado. Para isso necessitamos das seguintes informações:
A Template query utilizado pelo QApedia contém:
A Template query utilizado pelo QApedia contém:
question | query | template |
---|---|---|
o <A> é um manga? | ask where { <A> dbo:type dbr:Manga} | select ?a where { ?a dbo:type dbr:Manga} |
<A> é autor de <B>? | ask where {<B> dbo:author <A>} | select ?a ?b where {?a dbo:author ?b} |
<A> e <B> nasceram em <C>? | ask where { <A> dbo:birthPlace <C>. <B> dbo:birthPlace <C>.} | select ?a ?b ?c where { ?a dbo:birthPlace ?c. ?b dbo:birthPlace ?c.} |
Tab. 1: Template utilizado pelo QApedia.
Fig. 4: Visão geral da biblioteca QApedia.
question | query | generator_query |
---|
question | query | generator_query |
---|---|---|
|A| é mais antigo que |B|? | ASK WHERE { {|A| a dbo:Anime .}UNION{|A| a dbo:Cartoon.} |A| dbo:releaseDate|dbp:released ?released_a. {|B| a dbo:Anime .}UNION{|B| a dbo:Cartoon.} |B| dbo:releaseDate|dbp:released ?released_b. FILTER(?released_a > ?released_b)} | SELECT DISTINCT ?a ?b WHERE { {?a a dbo:Anime .}UNION{?a a dbo:Cartoon.} ?a dbo:releaseDate|dbp:released ?released_a. {?b a dbo:Anime .}UNION{?b a dbo:Cartoon.} ?b dbo:releaseDate|dbp:released ?released_b. FILTER (?a != ?b). FILTER(?released_a > ?released_b)} |
Dê-me um resumo sobre o desenho |A|. | SELECT DISTINCT ?abstract WHERE {{|A| a dbo:Anime .}UNION{|A| a dbo:Cartoon.} |A| dbo:abstract ?abstract. } | SELECT DISTINCT ?a WHERE {{?a a dbo:Anime .}UNION{?a a dbo:Cartoon.} ?a dbo:abstract ?abstract. } |
Tab. 2 Template utilizado para gerar os pares questões-sparql.
Com o objetivo de enriquecer o dataset aplicamos algumas operações disponíveis na biblioteca nlpaug2. A biblioteca possui as seguintes funcionalidades:
[2] Disponível no PyPI.
As operações de aumento de carecteres fazem:
OCRAug
).Fig. 5: Substituição por OCR.3
As operações de aumento de carecteres fazem:
OCRAug
).Fig. 5: Substituição por OCR.3
QWERTYAug
)Fig. 6: Substituição por proximidade.4
As operações de aumento de carecteres fazem:
OCRAug
).Fig. 5: Substituição por OCR.3
QWERTYAug
)Fig. 6: Substituição por proximidade.4
RandomCharAug
)As operações de aumento de palavras utilizadas foram feitas com auxílio de outro script e permite:
Fig. 7: Técnicas de aumento utilizando palavras.5
[3] A imagem foi retirada da postagem Data Augmentation library for text.
[4] Retirado do Towards of Data Science
import basic_augmentation as bafrom nltk.corpus import stopwordsimport nltkimport pandas as pdstopwords = stopwords.words("portuguese")texto = "|A| foi local de nascimento de |B| e |C|?"exemplos = {"original": texto, # Pega uma palavra aleatória e substituí pelo seu sinônimo "synonym_replace":ba.do_synonym_replacement(texto, stopwords), # Realiza inserção aleatória 2x "random_insertion": ba.do_random_insertion(texto, 2, stopwords), # Realiza a troca entre duas palavras 1 vez "random_swap": ba.do_random_swap(texto, 1), # Remove com probabilidade de 20% "random_deletion": ba.do_random_deletion(texto, 0.2)}exemplos = pd.DataFrame(exemplos.items(), columns=['Operação', 'Resultado'])
Operação | Resultado |
---|---|
original | |A| foi local de nascimento de |B| e |C|? |
synonym_replace | |A| foi local de nascer de |B| e |C|? |
random_insertion | |A| foi local de natividade nascimento de território |B| e |C|? |
random_swap | |A| local foi de nascimento de |B| e |C|? |
random_deletion | |A| foi de nascimento de |B| e |C|? |
Fig. 8: Arquitetura Encoder-decoder
Fig. 9: Neural machine translation
Fig. 10: Greedy decoding
.
Fig. 11: Experimentos 1.
.
Fig. 11: Experimentos 2.
src: Quantos arquitetos existem que fizeram algo usado nos Jogos Europeus de 2015?ref: SELECT DISTINCT COUNT(?uri) where { ?x <http://dbpedia.org/ontology/tenant> dbpedia:2015_European_Games . ?x <http://dbpedia.org/property/architect> ?uri }nmt: SELECT DISTINCT COUNT(?uri) where { ?x <http://dbpedia.org/ontology/tenant> dbpedia:2015_Pan_American_Games . ?x <http://dbpedia.org/property/architect> ?uri }
src: Quais prêmios foram concedidos a William H. McNeill e John Crowe Ransom?ref: SELECT DISTINCT ?uri where { dbpedia:William_H.McNeill(historian) <http://dbpedia.org/property/awards> ?uri . dbpedia:John_Crowe_Ransom <http://dbpedia.org/ontology/award> ?uri }nmt: SELECT DISTINCT ?uri where { dbpedia:William_H.McNeill(historian) <http://dbpedia.org/property/awards> ?uri . dbpedia:Ernest_J._Gaines <http://dbpedia.org/ontology/award> ?uri }
[1] N. Ngomo. "9th Challenge on Question Answering over Linked Data (QALD-9)". In: language 7 (2018), p. 1.
[2] S. Ray, H. Al Chalabi, and K. Shaalan. "Semantic Based Query Expansion for Arabic Question Answering Systems". In: abr. 2015. DOI: 10.1109/ACLing.2015.25.
[3] T. Soru, E. Marx, D. Moussallem, et al. "SPARQL as a Foreign Language". In: 2017. URL: http://w3id.org/neural-sparql-machines/soru-marx-semantics2017.html.
[4] T. Soru, E. Marx, A. Valdestilhas, et al. "Neural Machine Translation for Query Construction and Composition". In: 2018. URL: https://arxiv.org/abs/1806.10478.
Keyboard shortcuts
↑, ←, Pg Up, k | Go to previous slide |
↓, →, Pg Dn, Space, j | Go to next slide |
Home | Go to first slide |
End | Go to last slide |
Number + Return | Go to specific slide |
b / m / f | Toggle blackout / mirrored / fullscreen mode |
c | Clone slideshow |
p | Toggle presenter mode |
t | Restart the presentation timer |
?, h | Toggle this help |
Esc | Back to slideshow |