Tech Blog

Ricerca cognitiva con OpenK9

Cos'è un motore di ricerca cognitivo? Presentiamo la soluzione OpenK9

Daniele Caldarini
Data Scientist
8 minuti di lettura
cognitive search, openk9, machine learning, artificial intelligence, nlp, enterprise search, cloud oriented, plugin e pluggable
Questo articolo è disponibile anche in English 🇬🇧

La ricerca rappresenta un task di fondamentale importanza in molteplici contesti lavorativi e non; l'obiettivo principale di un sistema di ricerca è quello di soddisfare nella maniera più precisa ed efficiente possibile i bisogni dell'utente, individuando quelli che sono i risultati più pertinenti in base alla richiesta.
Con questo obbiettivo i sistemi di ricerca si sono evoluti sempre più negli ultimi anni.
Allo stato dell'arte oggi si parla di motori di ricerca cognitiva.

Nel seguito andremo a vedere cos'è un sistema di ricerca cognitivo, per poi passare a descrivere ed esplorare il funzionamento della soluzione di ricerca cognitiva OpenK9.

Cos'è la ricerca cognitiva

Al giorno d'oggi le organizzazioni si trovano a gestire contenuti provenienti da molteplici sorgenti dati. Come ad esempio:

  • Mail server
  • Portali web
  • CRM
  • etc.

Questi contenuti sono molto spesso di tipologie diverse. Possiamo avere documenti, email, contatti, calendari, ticket, e molto altro.

Non per ultimo questi contenuti possono essere sia di natura strutturata che non strutturata.

Figura 1 - Esempio di contenuti strutturati e non strutturati
Figura 1 - Esempio di contenuti strutturati e non strutturati

Un primo obiettivo che un moderno sistema di ricerca deve soddisfare è quello di accentrare la ricerca verso contenuti di diversa origine, tipologia e natura in un unico sistema che permetta la ricerca verso tutti questi contenuti attraverso un singolo punto di accesso offrendo la medesima esperienza di ricerca.

Figura 2 - Search (il punto d'inzio)
Figura 2 - Search (il punto d'inzio)

Ma questo non è quanto. Tutto il mondo dei sistemi informatici viene sempre più influenzato ed esteso grazie all'uso delle moderne tecniche di Intelligenza Artificiale (AI) e Machine Learning (ML). I sistemi di ricerca non sono da meno. Da questo connubio nascono i sistemi di ricerca cognitiva.

Volendo dare una definizione di sistema di ricerca cognitivo possiamo dire che:

un sistema di ricerca cognitivo è un sistema di ricerca avanzata che utilizza funzionalità di ML per arricchire i contenuti e supportare l’utente nella ricerca, con l'obiettivo primario di aumentare la precisione dei risultati

Quindi, un ruolo fondamentale in questi sistemi è rivestito dalle funzionalità di AI e ML. In particolare, così come enunciato dalla definizione data, AI e ML sono utilizzate per due scopi ben precisi:

  • arricchire i contenuti indicizzati dal sistema di ricerca cognitivo;
  • supportare l'utente nella ricerca nel raggiungimento dei suoi intenti.

Nel seguito verrà illustrato il funzionamento della soluzione OpenK9, e sarà più chiaro come funziona e viene gestita l'attività di arricchimento del dato.

In questa fase però è di interesse fare una panoramica su alcune delle tecniche utili e frequentemente utilizzate per le fasi citate.

Tecniche di Machine Learning per l'arricchimento

Cosa significa arricchimento del dato?

Con arricchimento del dato si fa riferimento all'attività di analisi ed espansione del contenuto di interesse, che quando viene indicizzato dal motore di ricerca cognitivo, viene analizzato, con l'obiettivo di estrarre l'informazione aggiuntiva e "nascosta", che si può rivelare utile al fine di aumentare la precisione nell'attività di ricerca.
Questa informazione una volta estratta viene legata al dato originale, e il dato arricchito viene indicizzato. L'informazione derivante dall'attività di arricchimento a questo punto può essere utilizzata per fare delle ricerche più potenti e precise.

Un sistema di ricerca cognitiva deve poter supportare l'utilizzo di qualsiasi tecnica utile all'arricchimento del dato, poiché queste possono variare in base alle esigenze e alla natura del dato.

In questo contesto andiamo a vedere alcune tecniche di Natural Language Processing utili, ovviamente, nel caso di arricchimento di contenuti testuali, normalmente quelli più diffusi e passibili di ricerca.

Una serie dedicata ai più rilevanti task di Natural Language Processing è presente nel nostro Tech Blog e alcune delle tecniche qui elencate sono affrontate da questa serie di articoli. Inizia a leggere partendo dal primo articolo.

A seguire le tecniche comunemente utilizzate.

  • Named Entity Recognition: si tratta di riconoscere entità e concetti semantici nel testo. Queste entità possono essere poi utilizzare per eseguire delle ricerche più complesse e precise.
Figura 3 - Esempio di NER
Figura 3 - Esempio di NER
  • Estrazioni di relazioni: estrazioni di relazioni tra entità.

  • Classificazione testuale: categorizzare in maniera intelligente il testo e sfruttare queste informazioni per ricerca contenuti per categoria.

  • Topic Modelling: individuare i topic principali di un contenuto e sfruttare queste informazioni per ricerca contenuti che trattano un certo topic.

Qualora i dati da ingestionare (Data Ingestion) fossero invece di altra natura si possono utilizzare tecniche di estrazione dell'informazione adatte al caso d'uso. Per sorgenti con dati multimediali quali audio, immagini piuttosto che video si possono utilizzare strumenti che implementano tecniche di Machine Learning quali Speech Recognition, Object Detection, Face Recognition, piuttosto che Activity Recognition.

Tutte le informazioni estratte durante la fase di arricchimento inoltre concorrono al popolamento di un grafo delle relazioni che viene utilizzato dal sistema per realizzare ricerche, analitiche e azioni che aumentano le capacità del motore.

Figura 4 - Knowledge Graph
Figura 4 - Knowledge Graph

Tecniche per il supporto all'utente per la ricerca

Le informazioni derivanti dall'arricchimento rappresentano una fonte di dati estremamente rilevante ai fini della ricerca. Un sistema di ricerca cognitiva sfrutta queste informazioni per:

  • fornire suggerimenti all'utente durante la scrittura della query;
  • formulare query sintatticamente corrette (autocorrezione);
  • effettuare attività di comprensione della query, con l'obiettivo di individurare gli intent degli utenti. Questa attività contribuisce a costruire una rappresentazione della query ottimizzata per fornire risultati più precisi.

I primi due punti sono soddisfatti grazie all'uso delle moderne tecniche di NLP per la realizzazione di attività di auto completamento e autocorrezione.

A concorrere alla realizzazione dell'attività di comprensione, ci sono invece, diverse funzionalità, in ogni caso sempre legate alle moderne tecniche di Natural Language Processing.

Uno schema di massima sul flusso realizzato dall'attività di comprensione della query è il seguente.

Tutte le attività sono svolte attraverso strumenti intelligenti che aumentano il significato della query con opportune indicazioni. Vediamo l'esempio di query documenti pdf di Mike Brown di Acme Inc. Lo strumento di comprensione della query svolge quindi:

Figura 5 - Query Understanding
Figura 5 - Query Understanding
  • opportune attività di cleaning tramite ad esempio tokenizzazione o eliminazione delle stopword;
  • individua frasi dal significato rilevante all'interno della query.
  • svolge poi un'attività di tagging dei concetti, individuando ad esempio che Mike Brown è una persona, pdf uno specifico tipo di documento, piuttosto che Acme inc una certa organizzazione;
  • espande il significato della query, attraverso l'utilizzo della base di conoscenza, rilevando che Mike Brown di Acme Inc è uno sviluppatore.

Tutte queste informazioni vengono inserite nella descrizione della query fatta al sistema di ricerca, andando ad ottenere così risultati più pertinenti possbili. In questo caso dando maggiore rilevanza ai documenti di tipo pdf con lo sviluppatore Mike Brown di Acme Inc.

Openk9

Figura 6 - OpenK9
Figura 6 - OpenK9

OpenK9 è una soluzione di ricerca cognitiva Open Source. Il codice è quindi disponibile su Github.

Figura 7 - OpenK9 Github
Figura 7 - OpenK9 Github

Documentazione e informazioni approfondite sono presenti sul sito di OpenK9.

Passiamo a vedere come OpenK9 realizza quelle che sono le caratteristiche principali di un sistema di ricerca cognitivo.

Ingestion dei dati

Attraverso un'apposita interfaccia di ingestion, i dati vengono fatti confluire all'interno del sistema che poi, attraverso un meccanismo di comunicazione asincrona basato su code, gestisce il flusso fino all'indicizzazione. La scelta di gestire la comunicazione in modo totalmente asincrono è dettata dall'esigenza di gestire in maniera efficiente il back pressure derivante da ingestion di dati massive.

Figura 8 - Ingestion
Figura 8 - Ingestion

Arricchimento e indicizzazione

Il dato successivamente viene fatto confluire attraverso una fase dov'è soggetto ad un'attività di arricchimento definita in base alle esigenze. Ogni step della pipeline di arricchimento estrae e lega al dato nuova informazione in maniera strutturata. Al termine della fase di arricchimento il dato arricchito viene indicizzato in Elasticsearch ed è a questo punto passibile di ricerca.

Figura 9 - Arricchimento e indicizzazione
Figura 9 - Arricchimento e indicizzazione

La ricerca può sfruttare sia i campi provenienti dal dato originale sia l'informazione estratta e aggiunta durante la fase di arricchimento.

Ipotizziamo di avere a che fare con una sorgente dati di documenti aziendali derivanti da un portale. OpenK9 si connette a questa sorgente dati e ingestiona al proprio interno tutta la base documentale in maniera periodica.

Ogni documento attraversa una pipeline di arricchimento composta da due fasi

  • Riconoscimento di entità.
  • Classificazione rispetto alla tipologia del documento.

La presenza di queste informazioni aggiuntive permette all'utente di fare ricerca più precise e avanzate come la seguente.

Figura 10 - Ricerca con filtri
Figura 10 - Ricerca con filtri

In questo l'obiettivo è quello di cercare solo ed esclusivamente i contenuti catalogati come Business Plan e relativi all'organizzazione Acme Inc. Ne scaturisce una ricerca fatta di filtri semantici e non semplicemente una ricerca di tipo full text. La conseguenza di ciò è una maggior precisione nei risultati.

Caratteristiche architetturali

Opportune scelte architetturali sono state fatte nella creazione di OpenK9, che ne fanno un prodotto con determinate caratteristiche.

Figura 11 - Caratteristiche architetturali
Figura 11 - Caratteristiche architetturali

Tra le diverse caratteristiche, quella sicuramente più importante è quella della scalabilità. Un motore di ricerca cognitivo deve essere in grado di scalare facilmente, per gestire in maniera efficiente i diversi carichi a cui questo può essere sottoposto nel tempo tramite l'ingestion di dati.

La qualità della scalabilità è data soprattutto dall'architettura a microservizi su cui OpenK9 si basa, e dalla comunicazione totalmente asincrona che c'è tra i diversi servizi del sistema.

Sul sito di OpenK9 è presente la documentazione architetturale con dettagli sui diversi componenti che compongono il sistema.

Figura 12 - Architettura OpenK9
Figura 12 - Architettura OpenK9

Caratteristiche funzionali

OpenK9 implementa anche precise caratteristiche funzionali.

Figura 13 - Caratteristiche funzionali
Figura 13 - Caratteristiche funzionali

Un sistema plugable e l'elevato livello di personalizzazione sono in particolare due aspetti fondamentali che caratterizzano OpenK9. Tramite la definizione di plugin appositi è possibile estendere in maniera semplice le capacità funzionali di OpenK9.
Per ogni nuova sorgente dati può essere definito un opportuno plugin, con l'obiettivo di definire aspetti come:

  • la connessione alla sorgente dati esterna;
  • la forma del dato indicizzato;
  • l'attività di arricchimento da svolgere sul dato;
  • la presentazione del dato a frontend.

In questo modo è possibile aggiungere in maniera totalmente plugable nuove sorgenti dati, che saranno poi gestite e trattate dal sistema secondo le logiche personalizzate definite dal plugin.

Per approfondire il tema, leggere la documentazione Create a plugin using Java pubblicata sul sito di OpenK9

Altre caratteristiche rilevanti

Gestione delle ACL (access-control list)

Un motore di ricerca cognitiva come OpenK9 accentra i contenuti di un'intera organizzazione o di più organizzazioni sotto un'unica base dati.

Il confinamento a livello di organizzazione è normalmente gestito differenziando i dati su indici separati per tenant. Quindi, ogni organizzazione potrà accedere solo ed esclusivamente a dati legati al proprio tenant.

Come viene gestito invece l'accesso ai da parte di utenti appartenenti alla stessa organizzazione? Teoricamente su uno stesso indice potrebbero essere presenti contenuti visibili ad un utente ma non visibili ad un altro.

OpenK9 anche qui va a gestire le logiche di controllo degli accessi (o ACL) in maniera plugable; questo perché sorgenti dati diverse possono avere logiche differenti.

Nel caso di un portale Liferay la gestione è di tipo Role-based, nel caso di un server Imap invece le logiche sono legate a mittenti, destinatari, ecc...

Per questo motivo, per ogni sorgente dati, è possibile definire queste logiche nel relativo plugin.

Secondo l'opportuna logica, OpenK9 indicizza non solo il contenuto o i metadati, ma anche le informazioni per la gestione degli accessi. Queste informazioni saranno poi utilizzate per applicare il controllo degli accessi direttamente a tempo di ricerca, permettendo così una gestione molto efficiente e garantendo dei tempi di ricerca molto rapidi.

Figura 14 - Gestione delle ACL
Figura 14 - Gestione delle ACL

Api Headless di ricerca

OpenK9 offre API headless per la ricerca sui contenuti e per tutte le attività di contorno, quali auto completamento e comprensione della query.

Per maggiori informazioni esplorare la documentazione sulle API.

La natura headless delle API concede la possibilità di interfacciarsi a OpenK9 in maniera semplice e con molteplici strumenti di interfaccia, come per esempio: frontend standalone, portali web, chatbot piuttosto che assistenti vocali.

Anche le API di ricerca sono pensate per essere estese e personalizzate, in modo da raffinare e perfezionare le opzioni di ricerca in base al contesto e al dominio.

È possibile aggiungere nuove funzioni di ricerca per applicare nuove logiche di ricerca, oltre a potere estendere le funzionalità di comprensione della query definendo nuove regole e strumenti di comprensione.

Conclusione

OpenK9 è un sistema di ricerca moderno e potente. Attraverso le sue caratteristiche si propone di raggiungere prestazioni di alto livello in grado di soddisfare le esigenze (anche quelle più estreme) all'interno delle organizzazioni di oggi e del futuro. L'utilizzo di tecniche di intelligenza artificiale per la gestione di tutta una serie di aspetti è in linea con la logica di un sistema sempre più preciso e potente.

OpenK9, si vuole inoltre differenziare rispetto ai suoi competitor, e lo fa soprattutto grazie alla citata capacità di essere facilmente estendibile e ampiamente personalizzabile. Proprietà fondamentali al fine di soddisfare e risolvere la grande eterogeneità di esigenze dettate dal mondo reale.

Allora cosa aspettate?! Sul sito di OpenK9 potete trovare una guida approfondita su come installare ed eseguire OpenK9 sulla vostra macchina. Trovate sia la documentazione per eseguire il tutto tramite Docker Compose, sia la documentazione per un'installazione più robusta su cluster Kubernetes; il tutto seguito da documentazione per la configurazione degli aspetti principali del prodotto.

Inoltre per provare direttamente Openk9 utilizza l'ambiente demo online e testa direttamente le funzionalità di ricerca.

scritto da
Daniele Caldarini
Data Scientist
Ricercatore e Data Scientist in SMC. Laureato in Ingegneria Informatica all'Università di Roma Tre, ricerca e sviluppa in ambito intelligenza artificiale e machine learning con l'obiettivo di realizzare prodotti moderni e al passo con i tempi.

Potrebbero interessarti anche…