Esploriamo come generare dataset sintetici di QnA da dati reali con Azure, migliorando le performance dei modelli AI.
L’IA generativa sta rivoluzionando vari settori, dai servizi finanziari alla sanità, e una delle chiavi del suo successo è la capacità di creare dati di addestramento sintetici di alta qualità. Questo processo è particolarmente essenziale per il fine-tuning di modelli come SLM/LLM e l’implementazione di tecniche come RAG (Retrieval-Augmented Generation). Creare dataset personalizzati permette ai modelli di colmare specifiche lacune e catturare le sfumature del dominio target.
1. Background
Generare dataset di alta qualità partendo da formati di dati grezzi come PDF, CSV, e TXT è complesso, principalmente a causa delle difficoltà di estrazione. I PDF, per esempio, possono avere strutture variabili, e gestire tabelle o immagini può risultare particolarmente complicato. Se il tuo obiettivo è migliorare le performance di un modello usando un dataset generato come baseline, potrebbe essere necessaria la data augmentation, che presenta il rischio di introdurre bias o inconsistenze. In questo articolo, esploreremo dettagliatamente la metodologia e alcuni frammenti di codice utili ad affrontare queste sfide.
2. Costruzione di un Dataset di Seed
Come primo passo, è fondamentale preprocessare e convertire i dati eterogenei in un formato strutturato adatto al fine-tuning o RAG. Azure AI Document Intelligence è un servizio prezioso che può aiutare in questo compito, soprattutto per estrarre testo, tabelle e immagini dai PDF complessi.
- make_qa_multimodal_pdf_docai.ipynb: genera un dataset sintetico QnA da un PDF complesso utilizzando Azure AI Document Intelligence.
- make_qa_multimodal_pdf_oss.ipynb: utilizza toolkit open source per generare QnA da PDF complessi.
- make_qa_only_image_multiple_pdf.ipynb e make_qa_only_image_pdf.ipynb: generano dataset QnA da PDF pesantemente basati su immagini.
CSV
- make_qa_csv.ipynb: genera un dataset QnA leggendo e segmentando file CSV.
- make_qa_image_url_csv.ipynb: gestisce CSV contenenti URL di immagini, convertendoli in risultati sommari per ciascuna immagine.
Iniziamo separando le pagine PDF in base al contenuto con la funzione analyze_pdf_page_content
. Le pagine vengono classificate come “Text”, “Image”, o “Mixed”. Le pagine testo-pesanti sono elaborate con strumenti open source come PyMuPDF; quelle immagine-pesanti vengono convertite interamente in immagini e riassunte da LLMs multimodali come Azure OpenAI GPT-4o; quelle miste sono gestite da Azure AI Document Intelligence che separa immagini, testo e tabelle.
Processing di Pagine Miste
Per estrarre informazioni da pagine miste, utilizziamo document_intelligence_client.begin_analyze_document
per separare tabelle, testo ed immagini. Le immagini vengono ulteriormente riassunte da GPT-4o.
def analyze_pdf_page_content(pdf_path, text_length_thres=600): document = fitz.open(pdf_path) page_analysis = defaultdict(list) for page_num in range(len(document)): page = document.load_page(page_num) text = page.get_text("text") image_list = page.get_images(full=True) text_length = len(text) num_images = len(image_list) if text_length > text_length_thres and num_images == 0: content_type = 'Text' elif text_length 0: content_type = 'Image' else: content_type = 'Mixed' page_analysis[content_type].append(page_num) return dict(page_analysis)
3. Generazione Dati Sintetici
Dopo aver stabilito una baseline con il dataset generato, possiamo migliorare le performance utilizzando tecniche di data augmentation elaborate da Microsoft, come Evol-Instruct e GLAN (Generalized Instruction Tuning).
Evol-Instruct
Evol-Instruct genera dati di istruzione diversificati evolvendo automaticamente istruzioni a diversi livelli di complessità. Questo involves:
- Evolution delle Istruzioni: LLM come GPT-4o evolve istruzioni iniziali in versioni più complesse.
- Generazione Risposte: LLM genera risposte a queste istruzioni complesse.
- Eliminazione Istruzioni: Filtra istruzioni di bassa qualità.
GLAN
GLAN crea un dataset di istruzioni diversificate utilizzando una tassonomia sistematica della conoscenza umana. Questo consiste nei seguenti passaggi:
- Creazione della Tassonomia: Un LLM costruisce una dettagliata tassonomia delle conoscenze umane.
- Generazione di Materie e Programmi: LLM genera elenchi di materie e dettagliati programmi didattici.
- Generazione di Istruzioni: Vengono generati compiti e domande basate sui programmi.
Conclusione
Nell’ambito dell’IA generativa, la creazione e l’augmentation di dataset per il fine-tuning dei modelli SLM/LLM è cruciale per garantire sistemi AI robusti e affidabili. Questo articolo ha illustrato il processo di costruzione di un dataset di seed da dati grezzi diversificati e l’applicazione di tecniche di data augmentation come Evol-Instruct e GLAN per migliorare la qualità e la diversità del dataset.
Tutte le tecniche discusse, insieme ai relativi frammenti di codice, sono disponibili nel repository GitHub [link repository]. Seguendo queste metodologie, sviluppatori e data scientists possono creare dataset robusti che migliorano significativamente le capacità dei loro modelli AI, aprendo la strada a soluzioni AI più avanzate e affidabili in vari settori.