Azure Cognitive Search es el único servicio en la nube de búsqueda con capacidades de inteligencia artificial integradas que enriquecen todo tipo de información para ayudarlo a identificar y explorar contenido relevante a escala. Este servicio tambien ofrece capacidad de búsqueda semántica, que utiliza técnicas avanzadas de aprendizaje automático para comprender la intención del usuario y clasificar contextualmente los resultados de búsqueda más relevantes.

Esta herramienta transforma información sin procesar no estructurada en contenido en el cuál se pueden realizar búsquedas.

Para entender qué es esta herramienta y como podemos utilizarla debemos comprender antes algunos conceptos básicos.

¿Qué es la busqueda semántica?

Segun Wikipedia:

la busqueda semántica es el proceso utilizado para mejorar la búsqueda por internet mediante el uso de datos de las redes semánticas para desambiguar las consultas y el texto de la web con la finalidad de encontrar resultados más relevantes en relación a la demanda del usuario.

– Wikipedia –

Para comprender este término es importante diferenciar entre la intención, que proviene del usuario que realiza la búsqueda, y el contexto, que se puede entender como todo lo que rodea a una busqueda y hace que ésta vaya en un sentido o en otro, es decir, lo que la dota de significado. De esta manera, los buscadores son capaces de comprender las búsquedas, tanto lo que las motiva como lo que se espera de ellas. Pero, ¿cómo lo hace? gracias a la semántica.

Como hemos comentado, las palabras ya no tienen significado por sí mismas sino que sus connotaciones asociadas las convierten en conceptos. A partir de esto surge nuestro siguiente término, la desambigüación.

En el ámbito de la lingüística computacional, la desambiguación del significado de las palabras es un problema abierto de procesamiento del lenguaje natural, que incluye el proceso de identificar con qué sentido se usa una palabra en los términos de una oración, o cuando la palabra en cuestión tiene polisemia, es decir, una pluralidad de significados.

– Wikipedia –

Es decir, desambigüar consiste en diferenciar claramente los distintos contextos de una palabra o frase.

Ejemplos de Búsqueda Semántica

Vamos a ver un ejemplo de búsqueda semántica:

YodaExample
Ejemplo de Búsqueda Semántica

En este ejemplo, un usuario normal de google busca información acerca de «un hombrecito verde jedi» y a pesar de no mencionar a Yoda por su nombre, Google entiende de quien estamos hablando. Además nos sugiere cuestiones relacionadas a nuestra pregunta. Esto no sería posible sin la búsqueda semántica.

Por último debemos conocer el término de Entidades de Búsqueda o de información. Con este término nos referimos a aquellas «cosas», personas o conceptos que los usuarios definimos como independientes, bien definidos y a los cuales nos podemos referir con una consulta. Por ejemplo, Yoda es una entidad.

Otro ejemplo de búsqueda semántica que tiene en cuenta nuestro contexto sería buscar «cafetería» en Google. La busqueda devolverá las cafererías cercanas al lugar donde nos encontremos, artículos acerca de las mejores cafeterías de nuestra zona… Pero a la derecha nos aparecerá un pequeño popup de resultados relacionados donde efectivamente podemos acceder a la definición de la palabra. ¿No debería aparecer al principio la definición? Esto es precisamente la búsqueda semántica.

Análisis de texto en archivos con Azure Cognitive Search

A continuación vamos a realizar una práctica en la que analizaremos un archivo pdf usando Azure Cognitive Search. Para ello debemos contar con una cuenta de Azure. Esta práctica no será gratuita, pero el coste será mínimo y podremos eliminarlo completamente después, ya que vamos a englobar todos los recursos en un mismo grupo.

Por ello, en primer lugar, crearemos un grupo de recursos en el que realizaremos todas las acciones siguientes. Un grupo de recursos es un contenedor que almacena los recursos relacionados con una solución de Azure. El grupo de recursos puede incluir todos los recursos de la solución o solo aquellos que se desean administrar como grupo. Crearemos un grupo de recursos llamado «recurso-cognitive». Para ello en el portal de Azure accederemos al menú de «Grupos de Recursos» y pulsaremos «Agregar». Despues configuraremos el dicho grupo de la siguiente forma:

creacion-grupo-recursos

A continuación crearemos un servicio de búsqueda. Para ello, con el grupo de recursos creado, desde el inicio del portal de Azure, pulsaremos sobre «crear un recurso». Escribiremos «cognitive search» en el buscador y pulsaremos sobre la ayuda que nos da «Azure Cognitive Search». En la nueva pantalla pulsaremos «crear». En el panel grupo de recursos añadiremos «recurso-cognitive». Usaremos un nombre para nuestro ejemplo, debe ser unico ya que será una url por lo que el mío no servirá. Por último indicaremos el plan de tarifa, que debe ser el Free/Gratis.

revisar-creacion-servicio-busqueda

Si accedemos a nuestro grupo de recursos debemos poder ver nuestro recurso de Azure Cognitive Search:

grupo-recursos-servicio-creado

A continuación crearemos una cuenta de almacenamiento para guardar el archivo en el que posteriormente haremos la búsqueda. Para ello iremos al menú de recursos, y buscaremos «storage account» y pulsaremos «crear» en la descripción del recurso.

crearCuentaStorage

Nuestra cuenta de almacenamiento tendrá un nombre único, estará en nuestro grupo de recursos «recurso-cognitive» y se alojará en el este de EE.UU. Su tipo de cuenta será «Storage V2 (uso general v2)» y su replicación será «Almacenamiento con redundancia local (LRS)». Pulsaremos en «crear».

Nuestro grupo de recursos se verá de la siguiente forma:

recursoConStorage

A continuación accederemos a nuestro recurso de Azure Storage y buscaremos «contenedores» para acceder a dicho menú. En el pulsaremos el botón para añadir un nuevo contenedor. Crearemos un contenedor llamado «archivos».

creacion-contenedor

Después subiremos los archivos a su contenedor. Para ello, dentro del contenedor, pulsaremos en el botón «cargar» para subir los archivos.

cargar-archivos

A continuación crearemos un índice. Para ello debemos comprender lo que es un índice y lo que son los documentos de búsqueda.

Desde un punto de vista conceptual, un documento es una sola unidad de datos habilitada para busquedas en el índice. Un minorita podría tener un documento para cada objeto que vende, una página de noticias podría tener un documento para cada artículo, etc. Aplicandolo a la terminología de bases de datos un índice equivaldría a una tabla y los documentos equivaldrían a las filas de dicha tabla.

El esquema de indice determina la estructura física de un índice. La recopilación de «campos» es normalmente el elemento más grande de un índice, en el que cada campo recibe un nombre y se le asigna un tipo de dato y unos atributos con los comportamientos permitidos que determinan cómo se usa. Este es un ejemplo básico:

{
  "name": "name_of_index, unique across the service",
  "fields": [
    {
      "name": "name_of_field",
      "type": "Edm.String | Collection(Edm.String) | Edm.Int32 | Edm.Int64 | Edm.Double | Edm.Boolean | Edm.DateTimeOffset | Edm.GeographyPoint",
      "searchable": true (default where applicable) | false (only Edm.String and Collection(Edm.String) fields can be searchable),
      "filterable": true (default) | false,
      "sortable": true (default where applicable) | false (Collection(Edm.String) fields cannot be sortable),
      "facetable": true (default where applicable) | false (Edm.GeographyPoint fields cannot be facetable),
      "key": true | false (default, only Edm.String fields can be keys),
      "retrievable": true (default) | false,
      "analyzer": "name_of_analyzer_for_search_and_indexing", (only if 'searchAnalyzer' and 'indexAnalyzer' are not set)
      "searchAnalyzer": "name_of_search_analyzer", (only if 'indexAnalyzer' is set and 'analyzer' is not set)
      "indexAnalyzer": "name_of_indexing_analyzer", (only if 'searchAnalyzer' is set and 'analyzer' is not set)
      "synonymMaps": [ "name_of_synonym_map" ] (optional, only one synonym map per field is currently supported)
    }
  ],
  "suggesters": [ ],
  "scoringProfiles": [ ],
  "analyzers":(optional)[ ... ],
  "charFilters":(optional)[ ... ],
  "tokenizers":(optional)[ ... ],
  "tokenFilters":(optional)[ ... ],
  "defaultScoringProfile": (optional) "...",
  "corsOptions": (optional) { },
  "encryptionKey":(optional){ }
  }
}

Necesitamos configurar que la fuente de datos es nuestro archivo pdf, para ello pulsaremos sobre «Importar datos». En dicho menú añadiremos «almacenamiento de blobs en Azure» como origen de datos, daremos un nombre a dicho origen, y añadiremos una cadena de conexión. Para ello pulsaremos sobre «elegir una conexión existente»:

importar-datos

A continuación seleccionaremos nuestra cuenta de almacenamiento y nuestro contenedor donde están los archivos:

cadena-conexion

Después, ya en el menú de importación de datos, pulsaremos «Siguiente: Agregar aptitudes cognitivas (opcional)». En este proceso detectará que en el contenedor hay datos y creará un índice.

En la siguiente pantalla desplegaremos el menú «Adjuntar Cognitive Services» para cercionarnos de que sea Gratis.

adjuntar-cognitive-services

Después en el desplegable «Agregar Enriquecimientos» pulsamos sobre «Habilitar OCR y combinar todo el texto en el campo merged_content» y dejaremos los nombres como están.

agregar-enriquecimientos

Por último seleccionaremos todos los «Conocimientos cognitivos de texto» y «Conocimientos cognitivos de imagen». Además cambiaremos el idioma de destino a español.

enriquecimientos-añadidos

Pulsaremos «Siguiente: Personalizar indice de destino». En esta pestaña cambiaremos el nombre del indice a «archivos» y pulsaremos «Siguiente: Crear Indizador».

Por último en dicho menú cambiaremos el nombre del Indizador por «proceso-automático» y dejaremos el resto de opciones por defecto. Pulsaremos «enviar».

Consultas en Azure Cognitive Search

Para ver lo que hemos hecho, desde nuestro servicio de búsqueda pulsaremos sobre el botón «Explorador de búsqueda» en la parte superior. En este archivo podremos realizar filtros y búsquedas de palabras clave en los archivos de nuestro contenedor. Para ello escribiremos nuestra consulta en su caja de búsqueda y pulsaremos «Buscar». Si escribimos nada, aparecerá todo lo que haya en los archivos.

explorador-busqueda

Pongamos un ejemplo. Queremos filtrar todas las localizaciones que aparecen en los archivos. La consulta quedará de la siguiente forma:

https://ejemplo-cognitive-search-ssm.search.windows.net/indexes/archivos-2/docs?api-version=2020-06-30-Preview&search=*&%24select=locations

De esta forma el resultado es el siguiente:

buscar-localizaciones

Las consultas permiten filtar el contenido indexado, podemos escribir términos y frases como haríamos en Google o expresiones de consultas totalemente específicas. Los resultados se devuelven como documentos JSON detallados.

Consulta simple con los N resultados superiores

El parámetro «search» se usa para la entrada de búsqueda con una palabra clave.

search=spa

El símbolo «&» se usa para anexar parámetrod de búsqueda, el parámetro «count» permite limitar el número de resultados obtenidos. El parámetro $top devuelve los primeros N documentos mejor clasificados del total. De forma predeterminada Azure devuelve las 50 mejores coincidencias.

search=spa&$count=true&$top=10

En esta consulta devolvemos las primeras 10 coincidencias de la cadena buscada. De la misma forma podemos usar filtros (filter), facetas (facets), palabras incompletas o mal escritas… Para mas información consultar este enlace.

Esta tecnología es utilizada por varias empresas, como por ejemplo el sitio de búsqueda de vehículos canadiense autoTRADER.ca que utiliza Azure Cognitive Search para su sitio de subastas, búsqueda de imágenes, además de búsqueda en la Web y dispositivos móviles o Audioburst, una startup de búsqueda de audio, que escala su plataforma de contenido basado en voz con Azure Cognitive Search.

Con todo esto hemos visto como realizar busquedas indexadas en archivos con Azure Cognitive Search.

Autor/a: Susana Santos Moreno

Curso: Desarrollo Web Full Stack, MultiCloud y Multiplataforma

Centro: Tajamar

Año académico: 2020 – 2021

Código/ recursos utilizados/ Otros datos de interés: enlace a Github y Linkedin.

Leave a Comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.