Elaborato Big Data Engineering
Medical Q&A: sistema di domande e risposte nel settore medico
Progetto Finale - Big Data Engineering
Università degli Studi di Napoli Federico II
Autori: Giuseppe Laterza M63001411
Docente: Vincenzo Moscato
Anno Accademico: 2023/2024
Introduzione
Negli ultimi anni, i modelli di linguaggio di grandi dimensioni (LLMs, Large Language Models) hanno rivoluzionato il campo del processamento dellinguaggio naturale (NLP). I modelli sono infatti capaci di sintetizzare grosse quantità di dati testuali. Tuttavia, la loro conoscenza è limitata ai dati su cui sono stati addestrati, che spesso non includono informazioni aggiornate o specifiche di un dominio. I modelli LLM inoltre possono generare risposte non corrette o "hallucinations".
Per affrontare queste limitazioni, è stato introdotto il concetto di Retrieval-Augmented Generation (RAG), in cui si combina la capacità generativa dei modelli LLM con le tecniche di recupero delle informazioni (retrieval), come database o documenti verificati.
Questo approccio consente al modello di avere un contesto delle risposte con informazioni precise, verificate ed aggiornate.
Questa tipologia di architettura risulta di particolare interesse nel campo medico, dove l'accuratezza e l'affidabilità delle informazioni specifiche del dominio sono fondamentali.
Contesto del progetto
Il campo medico è ricco di dati sia di grandi dimensioni, come le immagini mediche, sia provenienti da fonti eterogenee come cartelle cliniche, articoli scientifici e forum online.
Elaborato Big Data Engineering 1
I forum medical online, come MedicItalia e MioDottore, sono degli strumenti molto utili per l’informazioni dei pazienti. Ogni utente che ha un dubbio o vuole chiedere un consiglio si può rivolgere a degli specialisti del settore attraverso queste piattaforme.
Per questo motivo contengono discussioni su sintomi, diagnosi e trattamenti, che offrono vaste quantità di informazioni non strutturate, utili a processi di supporto decisionale o ad applicazioni destinate ai pazienti.
In questo contesto, il progetto si propone di sfruttare i dati raccolti dai forum medici per costruire un sistema di domande e risposte (Q&A) basato su RAG. Questo sistema non solo risponderà alle domande degli utenti, ma lo farà utilizzando informazioni provenienti da fonti mediche verificate, garantendo così l'affidabilità e la qualità delle risposte.
Obiettivi
L'obiettivo principale del progetto è sviluppare un sistema di Medical Q&A che utilizzi un approccio Retrieval-Augmented Generation (RAG) per fornire risposte accurate, contestualizzate e basate su fonti mediche affidabili. Il sistema sarà progettato per interagire con gli utenti, rispondendo a domande formulate in linguaggio naturale e utilizzando dati raccolti da MedicItalia.
Fasi del progetto
- Raccolta Dati: Utilizzare tecniche di web scraping per raccogliere domande e risposte dai forum medici. Questi dati saranno preprocessati per rimuovere rumore, duplicati e informazioni non rilevanti.
- Creazione di un Database: Archiviare i dati raccolti in un database.
- Integrazione del Modello RAG: Utilizzare un modello di generazione per sintetizzare risposte basate sui dati recuperati dal database.
- Sviluppo di una Dashboard: Creare un'interfaccia utente interattiva che consenta agli utenti di porre domande al sistema e visualizzare le risposte in modo chiaro e intuitivo.
Dati
I dati in ingresso al progetto provengono da Medicitalia.it, uno dei primi siti di consulti medici online in Italia. Il forum contiene le conversazioni tra gli utenti e gli specialisti medici esperti in vari settori, che coprono una vasta area della conoscenza medica.
Elaborato Big Data Engineering 2
Le conversazioni sono suddivise per categoria in base all’area medica di appartenenza (Oncologia, Dermatologia, etc.) mentre ogni medico è caratterizzato, oltre al proprio nome, dalla sua area di competenza.
In totale il forum conta circa 800k conversazioni che spaziano dai primi anni duemila ad oggi.
Per semplificare lo sviluppo del progetto si è optato di estrarre 2000 conversazioni dalla categoria “Dermatologia e malattie veneree”, in modo da riuscire a ottenere queste informazioni attraverso il web scraping in tempi accettabili, ed avere un set di dati non troppo esteso da utilizzare. Per quanto riguarda la scelta della categoria invece, è stata scelta quella citata poiché presenta patologie e problematiche ben riconoscibili anche fenotipicamente, così da ridurre il più possibile indecisioni nell’estrazione delle informazioni.
Workflow
Metodologia di sviluppo
Estrazione dei dati
L'obiettivo principale è raccogliere informazioni da forum medici, per creare un dataset strutturato che possa alimentare e migliorare il sistema di domanda-risposta. Come sorgente dei dati è stato scelto unicamente medicitalia.it in quanto conteneva abbastanza conversazioni da soddisfare gli obiettivi di progetto.
Fonti dei dati
Elaborato Big Data Engineering 3
Come detto prima i dati provengono da MedicItalia. Ogni conversazione contiene informazioni fondamentali che, una volta analizzate, permettono di sviluppare un sistema di supporto medico affidabile. Le informazioni estratte comprendono:
- Domande dei pazienti: Il contenuto delle domande, la data di pubblicazione e la categoria medica di appartenenza.
- Risposte dei medici: Il contenuto delle risposte, l'autore (medico o utente), la specializzazione del medico (se disponibile) e la data della risposta.
Tecniche di estrazione
L'estrazione dei dati è stata implementata principalmente utilizzando tecniche di web scraping. Questa tecnica automatizza la raccolta di informazioni da siti web, consiste nell'inviare richieste HTTP a pagine web e recuperare il contenuto (HTML, JSON, ecc.). Il contenuto viene poi analizzato per estrarre le informazioni desiderate, come testi, immagini o link. Gli strumenti principali utilizzati sono:
- BeautifulSoup: Una libreria Python per analizzare e navigare nel codice HTML delle pagine, scelta per la sua semplicità e leggerezza computazionale.
- aiohttp: Una libreria per effettuare richieste HTTP asincrone, rendendo il processo di web scraping più veloce ed efficiente rispetto a librerie sincrone come . L'approccio asincrono è più efficiente in quanto requestsevitando che il programma rimanga bloccato in attesa delle risposte del server. Questo è particolarmente utile quando si lavora con siti web che possono avere tempi di risposta lenti.
Pipeline
La pipeline di estrazione dei dati segue questi passaggi:
- Raccolta dei Link alle Conversazioni: La prima fase consiste nell'analizzare le pagine dei forum per raccogliere i link dei threads. Questo avviene attraverso BeautifulSoup che estrae l’HTML e dai rispettivi tag si recuperano i link.
- Contenuto delle Conversazioni: Per ciascun link, vengono estratti i dati rilevanti, come il titolo della conversazione, la categoria medica, il testo della domanda e le risposte dei medici con le loro specializzazioni. Queste informazioni vengono quindi salvate in un formato strutturato.
Elaborato Big Data Engineering 4
- Preprocessing del Testo: Il testo estratto viene sottoposto a un processo di pulizia per rimuovere caratteri non necessari, contrazioni, date e firme professionali. Viene poi normalizzato per consentire una corretta esecuzione delle fasi successive.
Strutturazione dei dati
I dati estratti vengono organizzati in formato JSON, un formato semplice e flessibile per la rappresentazione dei dati. Ogni conversazione viene memorizzata come un documento con la seguente struttura:
{ "url": "https://www.medicitalia.it/...", "title": "Titolo della conversazione", "category": "Categoria medica", "question": { "content": "Testo della domanda", "date": "Data della domanda" }, "answers": [{ "author": "Nome del medico o utente", "specialization": "Specializzazione del medico", "content": "Testo della risposta", "date": "Data della risposta" }...]}
Embedding
Una volta ottenuti i dati strutturati e correttamente preprocessati si procede alla generazione degli embedding. L’embedding è una pratica fondamentale che consiste nella generazione di una rappresentazione numerica vettoriale di un oggetto complesso, come può essere un testo o un’immagine. Di fatto si trasformano gli elementi in vettori numerici effettuando una trasformazione in uno spazio a più dimensioni, mantenendo però le loro caratteristiche.
Elaborato Big Data Engineering 5
La grossa caratteristica è che nonostante la trasformazione conservano le loro caratteristiche semantiche e sintattiche, perciò oggetti simili nel nuovo spazio rappresentano concetti simili.
Nel nostro progetto RAG l’obiettivo è quello di estrarre dal database delle domande che siano semanticamente simili alla query dell’utente. Per questo motivo sono stati generati gli embedding sia delle domande, ma anche delle risposte, per ottenere il contesto più vicino a cosa chiede l’utente.
Per la generazione degli embedding è stato usato il modello SentenceTransformer (oppure nthenlper/gte-large ickprock/sentence-bert-base-) disponibili su HuggingFace.italian-uncased
Archiviazione nel database
L'archiviazione dei dati è una parte fondamentale del progetto, poiché consente di gestire in modo efficiente le informazioni durante l'elaborazione delle query degli utenti.
Per il progetto è stato scelto MongoDB Atlas, un database NoSQL documentale. Questa scelta è stata motivata da diversi fattori:
- Flessibilità nella Strutturazione dei Dati: I dati estratti dai forum medici (domande, risposte, categorie, date, embedding) non seguono uno schema rigido e possono variare in formato e contenuto, infatti ogni question ha una lista di answer al proprio interno. MongoDB consente di archiviare i dati in formato simile al JSON, che si adatta perfettamente alla struttura delle conversazioni (domanda principale e risposte associate).
- Scalabilità: MongoDB supporta la replica di dati e lo sharding, consentendo di distribuire i dati su più server per migliorare le prestazioni e la tolleranza ai guasti, il che lo rende altamente scalabile e affidabile. Il progetto prevede la gestione di un grande volume di dati, con migliaia di conversazioni e relativi embedding.
- Supporto per Query Avanzate: MongoDB offre la possibilità di effettuare quelle query per singoli campi ma anche la la ricerca su vettori (vector search), che sono essenziali per il recupero dei documenti più rilevanti in base alla query dell'utente.
Elaborato Big Data Engineering 6
- Aggregazioni: MongoDB offre varie operazioni di aggregazione, tra cui MapReduce, che utilizza una pipeline di operatori.
- Transazioni: È possibile eseguire transazioni su più documenti, simili a un database relazionale, che garantiscono proprietà ACID (Atomicity, Consistency, Isolation, Durability)
Nello specifico si è optato per MongoDB Atlas, una piattaforma di servizio che semplifica l’utilizzo e la gestione di MongoDB tutto in cloud.
Una volta estratti i dati e generati gli embedding si provvede attraverso i connettori phyton, usando la libreria pymongo, a inserirli sul DB.
MongoDB Atlas ha un limite di dimensione del cluster di 512MB free, proprio per questo motivo i dati estratti si concentrano su una sola categoria e non sono più grandi di questo numero.
Inoltre all’interno della piattaforma è stato possibile anche definire un indice di ricerca per performare nelle fasi successive la ricerca vettoriale sugli embedding.
RAG pipeline
Una volta terminata l’acquisizione dei dati si passa alla vera e propria RAG. La Retrieval-Augmented Generation (RAG) è una tecnica avanzata che combina la capacità di generazione di linguaggio naturale dei modelli di intelligenza artificiale con la capacità di recuperare informazioni rilevanti da fonti esterne come un database in questo caso. Questo approccio consente ovviare ai limiti
Elaborato Big Data Engineering 7
delle LLM che spesso non possiedono un contesto abbastanza dettagliato su cui sono state addestrate.
RAG si basa su due componenti principali:
- Information Retrieval (IR): Recupero di informazioni rilevanti da una base di conoscenza esterna (ad esempio, database, documenti, articoli, forum).
- Text Generation: Generazione di risposte coerenti e contestualizzate utilizzando un modello linguistico avanzato.
Questa combinazione permette di ottenere risposte più accurate, aggiornate e pertinenti rispetto a un semplice modello di generazione.
Architettura della RAG
L'architettura di un sistema RAG può essere suddivisa in diverse fasi operative, come mostrato nella pipeline del progetto:
- Input dell'utente: L'utente formula una domanda in linguaggio naturale alla web app.
- Embedding della query: La domanda viene trasformata in un vettore numerico utilizzando un modello.
- Information Retrieval: La query viene confrontata con i dati presenti in una base di conoscenza, nel nostro caso si effettua una ricerca di similarità tra i vettori (cosine similarity). Vengono recuperate le migliori k domande che sono presenti sul DB.
- Filtraggio e Preprocessing: I documenti recuperati vengono filtrati e preprocessati per garantire che siano presenti informazioni utili per la generazione della risposta. Nel nostro caso attraverso un modello di ER sono state estratte tutte le entità all’interno delle risposte e confrontate con quelle della query. S
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.