Linked Data: RDF, SPARQL y Question Answering systems (2)

En la primera parte de la tarde he estado instalando MYSQL, pero mañana tengo una entrevista en la que piden un Data Scientist que sepa de sistemas pregunta-respuesta, así que voy a continuar con el artículo que empecé el otro día.

Dificultades de este tipo de sistemas:

  • traducir las preguntas hechas en lenguaje natural a SPARQL
  • elegir los datasets adecuados (donde podamos encontrar respuestas!).
  • encontrar los URIs correctos. Por ejemplo, la clase dbo:Film no tiene otras variantes como «movie» o similares. Esto nos obligará a conocer o tener que hacer una búsqueda de los URIs adecuados.
  • Problemas con cuantificadores como «el más» (most), «la menos» (less)… Este tipo de estructuras se corresponden con «aggregation operations» de SPARQL (como filtrar, ordenar, limitar…)
  • Casos de ambigüedad. Distintos RDF pueden tender distintos tipos de recursos.
  • Multilenguaje. La mayoría de los datasets están en inglés.
  • Accuracy: Respuestas erróneas en este tipo de sistemas son, normalmente, peores resusltados que no tener una respuesta. El sistema tendría que detectar casos en los que no tuviéramos respuesta posible en el dataset. Además podríamos encontrar inconsistencias entre distintos datasets.
  • Deberían dar una respuesta en tiempo real.
  • Mezcla de datos estructurados y no estructurados. Por ejemplo: ¿Dónde murió el primer hombre que fue al espacio? En este caso, tenemos que saber, por un lado, quién es el primer hombre que fue al espacio y, una vez que lo conocemos, ir al RDF y ver dónde murió.

Existen clasificaciones de los tipos de preguntas que un usuario puede hacer a este tipo de sistemas: preguntas de sí/no, preguntas de definiciones, preguntas de listas, etc.

Los recursos de datos que se pueden usar para llegar a la respuesta que busca el usuario son de distintos tipos:

  • Datos estructurados: bases de datos relacionales, linked data…
  • Datos semi-estructurados: documentos XML
  • Datos no estructurados: textos

Estos sistemas, por tanto, pueden ser híbridos (si consultan distintos tipos de datos) o solo basar sus respuestas en un único tipo de datos. Además, podrán consultar solo un data set, un conjunto de ellos o todos los que estén disponibles.

Por último, podrá ser un sistema de pregunta-respuesta para un dominio o un sistema general.

Empezando con SQL y SPARQL

Estoy viendo que en la mayoría de las ofertas a las que quiero postularme piden conocimientos de SQL así que, ya que estoy, voy a ponerme con ello también. He visto que el SPARQL se basa, en realidad, en SQL así que, de esta manera, mato dos pájaros de un tiro.

Ya sabía que SQL se trataba de un lenguaje con que preguntarle cosas a nuestras bases de datos, pero la verdad es que no tenía claro cómo o dónde poner esas preguntas! He estado buscando y creo que lo voy a poder hacer instalando MySQL, el software que me permitirá acceder a esas bases de datos.

Para instalarlo, uno de los requisitos era tener Microsoft Visual Studio instalado también. Sé que es una herramienta para desarrolladores, pero me voy a poner en los deberes el investigar un poquito más sobre esta herramienta.

En cuanto a SPARQL, tampoco me quedaba claro cómo usarlo para extraer información de los grafos RDF (no la sintaxis, sino CÓMO, DESDE DÓNDE!!). He estado buscando esto también y he descubierto que existen diferentes implementaciones de SPARQL donde poner esas «preguntas». Algunas como Virtuoso me sonaban de las ofertas de empleo.

Se pueden hacer queries a los distintos grafos RDF a través del web service de Virtuoso SPARQL .

Una hora después…. ok! Ya tengo MySQL instalado!! Yujuuu!! Ahora sólo falta que aprenda a usarlo porque no sé ni por dónde empezar, tiene millones de funcionalidades! OMG! :S

Deberes

  • Microsoft Visual Studio

¿Qué es RDF?

La semana pasada estuve investigando un poco sobre la web semántica y cómo utilizar los datos de ella para construir sistemas de pregunta-respuesta. Hoy, voy a leer un poquito más sobre qué es RDF.

Un triplet de RDF simplemente establece una relación entre dos recursos. El sujeto y el objeto son los elementos que relacionamos y el predicado es el tipo de relación que hay entre ellos. Esa relación entre el sujeto y el objeto representará lo que en RDF se llama una «propiedad«.

Sample triples (informal), pseudocode.

<Bob> <is a> <person>.
<Bob> <is a friend of> <Alice>.
<Bob> <is born on> <the 4th of July 1990>. 
<Bob> <is interested in> <the Mona Lisa>.
<the Mona Lisa> <was created by> <Leonardo da Vinci>.
<the video 'La Joconde à Washington'> <is about> <the Mona Lisa>

Estas relaciones conformarán grafos dirigidos (con una dirección concreta). Podemos hacer preguntas sobre la información de estos grafos con SPARQL.

Existen tres tipos de datos que pueden aparecer en estos nodos:

  • IRIs: el ID del recurso, similar a la URL de una web (de hecho una URL es un tipo específico de IRI), a lo que apunta. Pueden aparecer en el sujeto, el objeto o el predicado.
  • literales: strings, números, fechas, etc. Sólo pueden ser objetos.
  • nodos vacíos o variables. Representan elementos sin un identificador. Pueden ser objetos o sujetos. Esa parte del cuadro de la Mona Lisa es un ejemplo de nodo vacío.
Blank node example: cypress tree

Un dataset de RDF estará consituido por varios grafos. Cada grafo dentro de un dataset tendrá asociado su IRI. Por ejemplo:

Informal graph of the sample dataset

RDF SCHEMA

Los recursos serán clasificados en CLASES y subclases que especifican las categorías a las que pertenecen. Asimismo, existirán distintos TIPOS de propiedades. Así, se podrán crear jerarquías de clases y subclases y de tipos y subtipos de recursos. Las restricciones por tipo serán definidas por los DOMINIOS o los RANGOS de las propiedades. Queda más claro, en esta tabla:

ConstructSyntactic formDescription
Class (a class)C rdf:type rdfs:ClassC (a resource) is an RDF class
Property (a class)P rdf:type rdf:PropertyP (a resource) is an RDF property
type (a property)I rdf:type CI (a resource) is an instance of C (a class)
subClassOf (a property)C1 rdfs:subClassOf C2C1 (a class) is a subclass of C2 (a class)
subPropertyOf (a property)P1 rdfs:subPropertyOf P2P1 (a property) is a sub-property of P2 (a property)
domain (a property)P rdfs:domain Cdomain of P (a property) is C (a class)
range (a property)P rdfs:range Crange of P (a property) is C (a class)

Con este RDF Schema podremos crear modelos de datos RDF como el siguiente:

Example 5: RDF Schema triples (informal)

<Person> <type> <Class>
<is a friend of> <type> <Property>
<is a friend of> <domain> <Person>
<is a friend of> <range> <Person>
<is a good friend of> <subPropertyOf> <is a friend of>

Ejemplos de vocabularios RDF

Formatos para crear grafos RDF

Lo copio directamente de la web que estoy consultando:

  1. Turtle family of RDF languages (N-Triples, Turtle, TriG and N-Quads);
  2. JSON-LD (JSON-based RDF syntax);
  3. RDFa (for HTML and XML embedding);
  4. RDF/XML (XML syntax for RDF).

El que más me interesa es el JSON-LD, ya que es que el veo que más están pidiendo, así que sigo con este. El JSON-LD sigue la sintaxis de los documentos JSON para crear grafos y datasets de RDF. JSON-LD se puede utilizar para transformar documentos en JSON a RDF con cambios mínimos.

Example 12: JSON-LD

01    {
02      "@context": "example-context.json",
03      "@id": "http://example.org/bob#me",
04      "@type": "Person",
05      "birthdate": "1990-07-04",
06      "knows": "http://example.org/alice#me",
07      "interest": {
08        "@id": "http://www.wikidata.org/entity/Q12418",
09        "title": "Mona Lisa",
10        "subject_of": "http://data.europeana.eu/item/04802/243FA8618938F4117025F17A8B813C5F9AA4D619",
11        "creator": "http://dbpedia.org/resource/Leonardo_da_Vinci"
12      }
13    }

Ejemplos de datasets de RDF

  • Wikidata
  • DBpedia
  • WordNet
  • Europeana
  • VIAF

Debido a que los grafos son el resultado de distintas relaciones entre recursos, también podemos inducir propiedades de elementos que no están directamente relacionados en nuestro grafo. Por ejemplo, si sabemos que <Bob> <conoce a> <Ana>, entonces podemos deducir que <Bob> <es una> <persona> puesto que en nuestro grafo también definíamos el predicado <conoce a> como una relación entre dos <personas>.

Linked Data: RDF, SPARQL y Question Answering systems (1)

Hoy voy a hacer un alto en el curso y voy a prepararme un poco el tema de los sistemas de pregunta respuesta y su relación con el linked data. He estado leyendo el siguiente artículo: An Introduction to Question Answering over Linked Data

Las principales diferencias entre estos sistemas de pregunta-respuesta y los buscadores clásicos tipo Google:

  • los buscadores clásicos se basan en palabras clase, mientras que los sistemas de pregunta respuesta son capaces de «entender» preguntas con estructuras lingüísticas complejas.
  • el resultado de los buscadores clásicos son un conjunto de documentos, mientras que los sistemas de pregunta-respuesta nos darán directamente la respuesta.

Algunos ejemplos de sistemas de pregunta-respuesta son Wolfram Alpha o IBM Watson (ya hablé un poquito de este sistema aquí).

El mayor escollo que tienen que salvar los sistemas de pregunta-respuesta es traducir el lenguaje natural en el que se hace la pregunta al lenguaje SPARQL, el lenguaje que se usa para acceder a los datos de los documentos RDF (los documentos en los que se basa la Web Semántica o «linked data»). En muchos casos esta traducción implica:

  • mapear las expresiones de lenguaje natural con el vocabulario que tenemos en los datos, teniendo en cuenta los errores que pueda acarrear ese mapeo
  • manejar variaciones de significado, ambigüedades, expresiones demasiado vagas, expresiones anafóricas, etc.

¿Qué es RDF (Resource Description Framework)?

Es un standard para modelar datos. Tiene 3 componentes principales: sujeto, predicado y objeto (RDF Triples). Un sujeto se relacionará con un objeto a través de un predicado. Los predicados pueden ser de muchos tipos: «is in», «lives in», «is a»… Estas relaciones forman grafos enormes con un montón de información relacionada. Esta red de nodos relacionados unos con otros por distintos tipos de predicados es lo que se conoce como ontologías.

¿De dónde vienen esos RDF triples? De la web semántica o Linked Open Data, con sitios como DBpedia (datos de la Wikipedia), GeoNames, FOAF (Firend of a Friend, para describir personas) o Dublin Core entre otros. Se estima que en el Linked Open Data Cloud existen unos 3000 repositorios con 150 billones de datos.

Los sujetos y predicados de los RDF tienen que ser URIs o IRIs ( International Resource Identifier). Estos últimos son similares a los URIs pero incluyen caracteres no sólo de ASCII.

Los grafos RDF podemos crearlos en documentos JSON o XML. También TTL.

SPARQL es el lenguaje en el que consultaremos los grafos RDF. Es un lenguaje similar a SQL

Deberes:

  • Tom Grube: fundador de Siri.inc