Vai al contenuto

Creare QnA Sintetici da Dati Reali con Azure

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.

PDF

  • 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.