DevelopmentDe magie van Azure Cognitive Search

De komst van de smartphone tien jaar geleden zorgt ervoor dat we tegenwoordig meer informatie tot onze beschikking hebben dan ooit! We verwerken in drie maanden tijd meer data in ons hoofd dan onze grootouders in een mensenleven. Waar wij deze gegevens tot onze beschikking hebben, dient deze echter ook te worden opgeslagen. Dit brengt als probleem met zich mee dat er bij het opslaan ook een hoop ongewenste data wordt gegenereerd zonder structuur. Om deze ongestructureerde data te kunnen bevragen (en structuren) heeft Microsoft Azure Cognitive Search ontwikkeld. In deze blog richt ik mij dan ook op wat Azure Cognitive Search is en hoe je dit zelf kan gebruiken.

Wat is Azure Cognitive Search?

Eenvoudig gezegd is Azure Cognitive Search het toevoegen van Artificial Intelligence aan een Azure Search resource. Met de toevoeging hiervan worden verschillende functionaliteiten uit de Vision API van Cognitive Services beschikbaar gesteld om diverse soorten van ongestructureerde data te bevragen. Op deze manier breng je meer “structuur” aan in  ongestructureerde gegevens. Hierbij valt te denken aan afbeeldingen, blogs of tekstbestanden. Één van van de leukere functies die het bevat, is het herkennen van beroemdheden of monumenten in bijvoorbeeld foto’s. Zo kan deze feature eenvoudig Sylvester Stallone uit de film ‘First Blood’ herkennen (zie afbeelding hieronder). De confidence-tag toont de mate aan waarin verschillende elementen uit een afbeelding worden herkend. In dit geval krijgt Sylvester een score van 0,8 uit 1, wat aangeeft dat de zekerheid dat dit juist is vrij hoog is! Bekijk hier een praktijkcase van de toepassing van Cognitive Search voor de tuinbouw.

Vision API
Figuur 1: Voorbeeld van beroemdheid herkenning met Azure Cognitive Search

Aan de slag met Cognitive Search

Iedereen met een Azure subscription kan beginnen met experimenteren met Azure Cognitive Search. Hierbij doorloop je het proces dat in de afbeelding hieronder is weergegeven. Het begint allemaal met je ongestructureerde data die wordt opgeslagen in een vorm van opslag. Vervolgens bevraag je deze gegevens middels verschillende skills, wat leidt tot een verbeterde ervaring op zoekgebied door op deze manier je ongestructureerde data te structuren als het ware. Om dit te realiseren kun je de stappen doorlopen die hieronder worden beschreven.

 

Cognitive skills
Figuur 2: Voorbeeld toevoegen van Azure cognitive search (hoog niveau)Het creëren van de magie bestaat uit vier stappen:
  1. Het aanmaken van de verschillende resources op de Azure Portal.
  2. Het definiëren van een skillset.
  3. Het creëren van een skillset middels een http-call.
  4. Controleren of de skillset functioneert.
In de volgende paragrafen zullen we de stappen verder in detail bespreken.

1. Het aanmaken van resources op de Azure Portal’

Allereerst dienen er een aantal resources aanwezig te zijn om Cognitive Search mogelijk te maken, namelijk:
  • Blob storage
  • Cognitive Services
  • Azure Search

Deze resources zijn op dezelfde manier aan te maken als elke andere resource in de Azure Portal. Bij het uploaden van ongestructureerde data naar de blob storage moet je rekening houden met ondersteunde formats. Cognitive Services heeft als sterk punt dat deze verschillende vormen van data ondersteunt, zoals informatie uit andere databases (SQL, Cosmos DB, MySQL, MongoDB), documenten en/of afbeeldingen. Voor documenten geldt dat alleen PDF’s, office formats(.docx, PowerPoint), XML, JSON, ZIP- en gewone tekstbestanden worden gesupporterd. Afbeelding formats die gebruikt kunnen worden zijn .JPEG/.JPG, .PNG & .GIF.

2. Het definiëren van een skillset

De tweede stap is het definiëren van een skillset, ofwel het maken van een pipeline. Het creëren hiervan kan op twee manieren worden gedaan. De meest eenvoudige manier is om via je Azure Search resource op het Azure Portal  een skillset toevoegen via ‘Overzicht’ en dan een skillsets. Vervolgens biedt de Portal een eenvoudig stappenproces aan om dit in te stellen.
De tweede (en moeilijkere) manier is om deze aan te maken via een HTTP-Post met een JSON-format. Tevens dien je in deze HTTP-call de api-key te specificeren van de Azure Search resource, zodat duidelijk is op welke resource de skillset moet worden aangemaakt.
Cognitive Search Pipeline

 Bron: Kennisavond presentatie Delta-N

De afbeelding hierboven toont de verschillende skills die beschikbaar zijn om tekst te extraheren uit ongestructureerde data. In de laatste versie van Azure Cognitive Search zijn de volgende skills beschikbaar:

  1. KeyPhraseSkill: Deze skill maakt gebruik een getraind model, welke de belangrijkste termen in een tekst zoekt. De “keyphrases”  worden o.a. bepaald aan de hand van de plaatsing van de term in zinsverband en in welke mate deze voorkomt in de gehele tekst.
  2. Language Detection Skill: Deze skill maakt gebruik van een vooraf getraind model om de taal te identificeren waarin een tekst is geschreven. Als output stuurt hij de taalcode (gebaseerd op de ISO 6391) en naam van de taal terug. Verder bepaalt het algoritme de kwaliteit van de analyse middels een score tussen de 0 en 1. Naarmate de score dichter bij de 1 komt des te beter was de analyse van de taal.
  3. Merge Skill: Deze skill merged meerdere teksten bij elkaar in een enkele regel.
  4. EntityRecognitionSkill: Een skill uit de Text Analytics in Cognitive Services om verschillende entiteiten als personen, locaties, organisaties, hoeveelheden, datums, URL en email te herkennen. Momenteel wordt deze skill slechts ondersteund in het engels, spaans, frans, duits en italiaans, waarvan de laatste vier entiteiten alleen door de twee eerste worden gesupport.
  5. SentimentSkill: Deze skill herkent de ondertoon van de verschillende zinnen in een tekst. Middels het toekennen van een score tussen de 0 en 1 analyseert een getraind model of een tekst als positief of negatief dient te worden gezien.
  6. OcrSkill: OCR staat voor optical character recognition. Deze skill is in staat om de verschillende teksten uit afbeeldingen met tekst te halen en te herkennen. Deze skill wordt momenteel in vijfentwintig verschillende talen ondersteund en kan alleen worden gebruikt voor de bekendere afbeelding formats, zoals .GIF, .JPG en .PNG. Hierbij kan onderscheid worden gemaakt tussen handgeschreven en geprinte teksten.
  7. ImageAnalysisSkill: Deze extraheert de verschillende visuele kenmerken van afbeeldingen. Middels verschillende tags is het mogelijk om categorieën, tags, omschrijvingen, gezichten, het type van afbeelding, kleuren en volwassen content te filteren. Verder kunnen bekende monumenten en celebrities worden geïdentificeerd.

Na het bepalen van de skills die nodig zijn voor je pipeline, is het laatste dat je toevoegt de Cognitive Service door de naam en admin-key te specificeren.

3. Het creëren van een skillset middels een http-call

De derde stap om cognitive services aan Azure Search toe te voegen, is het aanmaken van de skillset middels een HTTP-call (“POST”) . Een dergelijke call bestaat uit een aantal onderdelen, namelijk de naam van je Azure Search Service op de portal, de aanduiding dat het om een skillset gaat, de naam van de skillset en de gebruikte API-versie (zie afbeelding hieronder). Verder dient in de headers van de request het content-type en de API-key van de Azure search service te worden gespecificeerd om de skillset op de juiste plaats aan te maken.

http-call

Figuur: Voorbeeld van een http-call

4. Controleren of de skillset functioneert

Als allerlaatste stap controleer je of het aanmaken van je skillset is gelukt. Dit doe je door de handelingen die besproken zijn in stap drie nogmaals te doorlopen. Alleen gebruik je in dit geval een andere HTTP-call (“GET”) met dezelfde opbouw als de voorgaande call.

Conclusie

De ervaring leert dat het niet altijd even makkelijk is om door de bomen het spreekwoordelijke bos nog te zien wanneer je als developer met grote hoeveelheden data werkt. Het gebruik van Azure cognitive search zorgt ervoor dat wij in projecten het bevragen van data aanzienlijk kunnen verbeteren en het de ontwikkeltijd verminderd doordat we geen complexe zoek-queries bijvoorbeeld hoeven te schrijven.

Mocht je na het lezen van deze blog nog interesse hebben gekregen in de mogelijke toepassingen voor uw systeem of gewoon een vraag hebben die binnen deze blog niet is beantwoord, stuur dan een e-mail naar gideonk[at]delta-n.nl.

Gideon Kuijpers – Software developer