Share via


Riepilogo dei documenti basato su query

Questa guida illustra come eseguire il riepilogo dei documenti usando il modello Azure OpenAI GPT-3. Descrive i concetti correlati al processo di riepilogo dei documenti, gli approcci al processo e le raccomandazioni sul modello da usare per casi d'uso specifici. Infine, presenta due casi d'uso, insieme ai frammenti di codice di esempio, per comprendere i concetti chiave.

Architettura

Il diagramma seguente mostra come una query utente recupera i dati pertinenti. Il riepilogo usa GPT-3 per generare un riepilogo del testo del documento più pertinente. In questa architettura, l'endpoint GPT-3 viene usato per riepilogare il testo.

Diagramma che mostra una ricerca utente e un processo di riepilogo che usa GPT-3.

Scaricare un file PowerPoint di questa architettura.

Workflow

Questo flusso di lavoro si verifica quasi in tempo reale.

  1. Un utente invia una query. Ad esempio, un dipendente di un'azienda manifatturiera cerca informazioni specifiche su una parte del computer nel portale aziendale. La query viene prima elaborata da un riconoscitore finalità come la comprensione del linguaggio conversazionale. Le entità o i concetti rilevanti nella query utente vengono usati per selezionare e presentare un subset di documenti da una Knowledge Base popolata offline (in questo caso, il database della Knowledge Base dell'azienda). L'output viene inserito in un motore di ricerca e analisi come Ricerca elastica di Azure, che filtra i documenti pertinenti per restituire un set di documenti di centinaia anziché migliaia o decine di migliaia.
  2. La query utente viene nuovamente applicata a un endpoint di ricerca come Ricerca cognitiva di Azure per classificare il set di documenti recuperato in ordine di pertinenza (classificazione pagina). Il documento con la classificazione più alta è selezionato.
  3. Il documento selezionato viene analizzato per individuare le frasi pertinenti. Questo processo di analisi usa un metodo grossolano, ad esempio l'estrazione di tutte le frasi che contengono la query dell'utente o un metodo più sofisticato, ad esempio gli incorporamenti GPT-3, per trovare materiale semanticamente simile nel documento.
  4. Dopo l'estrazione del testo pertinente, l'endpoint dei completamenti GPT-3 con il riepilogo riepiloga il contenuto estratto. In questo esempio viene restituito il riepilogo di dettagli importanti sulla parte specificata dal dipendente nella query.

Questo articolo è incentrato sul componente summarizer dell'architettura.

Dettagli dello scenario

Le aziende creano e mantengono spesso una knowledge base sui processi aziendali, i clienti, i prodotti e le informazioni. Tuttavia, la restituzione di contenuto pertinente in base a una query utente di un set di dati di grandi dimensioni è spesso complessa. L'utente può eseguire una query sulla Knowledge Base e trovare un documento applicabile usando metodi come la classificazione delle pagine, ma approfondire ulteriormente il documento per cercare informazioni pertinenti in genere diventa un'attività manuale che richiede tempo. Tuttavia, con recenti progressi nei modelli di trasformatore di base come quello sviluppato da OpenAI, il meccanismo di query è stato perfezionato dai metodi di ricerca semantica che usano informazioni di codifica come incorporamenti per trovare informazioni pertinenti. Questi sviluppi consentono di riepilogare il contenuto e presentarlo all'utente in modo conciso e conciso.

Il riepilogo dei documenti è il processo di creazione di riepiloghi da grandi volumi di dati mantenendo al tempo stesso elementi informativi e valore del contenuto significativi. Questo articolo illustra come usare le funzionalità GPT-3 del servizio OpenAI di Azure per un caso d'uso specifico. GPT-3 è uno strumento potente che è possibile usare per una gamma di attività di elaborazione del linguaggio naturale, tra cui traduzione della lingua, chatbot, riepilogo del testo e creazione di contenuti. I metodi e l'architettura descritti di seguito sono personalizzabili e possono essere applicati a molti set di dati.

Potenziali casi d'uso

Il riepilogo dei documenti si applica a qualsiasi dominio aziendale che richiede agli utenti di cercare grandi quantità di dati di riferimento e generare un riepilogo che descrive in modo conciso le informazioni pertinenti. I domini tipici includono organizzazioni legali, finanziarie, notizie, sanità e accademiche. I potenziali casi d'uso di riepilogo sono:

  • Generazione di riepiloghi per evidenziare informazioni chiave su notizie, report finanziari e così via.
  • Creazione di un riferimento rapido per supportare un argomento, ad esempio, nei procedimenti legali.
  • Fornire il contesto per la tesi di un documento, come nelle impostazioni accademiche.
  • Scrittura di recensioni di letteratura.
  • Annotazione di una bibliografia.

Alcuni vantaggi dell'uso di un servizio di riepilogo per qualsiasi caso d'uso sono:

  • Riduzione del tempo di lettura.
  • Ricerca più efficace di grandi volumi di dati diversi.
  • Riduzione delle probabilità di distorsione dalle tecniche di riepilogo umano. Questo vantaggio dipende dal modo in cui i dati di training sono distorti.
  • Consentire ai dipendenti e agli utenti di concentrarsi sull'analisi più approfondita.

Apprendimento nel contesto

Il servizio Azure OpenAI usa un modello di completamento generativo. Il modello usa istruzioni in linguaggio naturale per identificare l'attività richiesta e la competenza richiesta, un processo noto come progettazione prompt. Quando si usa questo approccio, la prima parte della richiesta include istruzioni in linguaggio naturale o esempi dell'attività desiderata. Il modello completa l'attività stimando il testo più probabile. Questa tecnica è nota come apprendimento nel contesto.

Con l'apprendimento nel contesto, i modelli linguistici possono apprendere attività da pochi esempi. Il modello linguistico viene fornito con un prompt che contiene un elenco di coppie di input-output che illustrano un'attività e quindi con un input di test. Il modello esegue una stima condizionando la richiesta e stimando i token successivi.

Esistono tre approcci principali all'apprendimento nel contesto: apprendimento zero-shot, apprendimento con pochi scatti e metodi di ottimizzazione che cambiano e migliorano l'output. Questi approcci variano in base alla quantità di dati specifici dell'attività forniti al modello.

Zero-shot: in questo approccio non vengono forniti esempi al modello. Solo la richiesta di attività viene fornita come input. Nell'apprendimento zero-shot, il modello dipende dai concetti sottoposti a training in precedenza. Risponde in base solo ai dati su cui è stato eseguito il training. Non comprende necessariamente il significato semantico, ma ha una comprensione statistica basata su tutto ciò che viene appreso da Internet su ciò che deve essere generato successivamente. Il modello tenta di correlare l'attività specificata alle categorie esistenti già apprese e risponde di conseguenza.

Pochi scatti: in questo approccio, diversi esempi che illustrano il formato di risposta previsto e il contenuto sono inclusi nel prompt delle chiamate. Il modello viene fornito con un set di dati di training molto piccolo per guidare le stime. Il training con un piccolo set di esempi consente al modello di generalizzare e comprendere le attività non correlate ma in precedenza non disponibili. La creazione di esempi di pochi scatti può risultare complessa perché è necessario articolato in modo accurato l'attività che si vuole che il modello esegua. Un problema comunemente osservato è che i modelli sono sensibili allo stile di scrittura usato negli esempi di training, in particolare modelli di piccole dimensioni.

Ottimizzazione: l'ottimizzazione è un processo di personalizzazioni dei modelli in base ai propri set di dati. In questo passaggio di personalizzazione è possibile migliorare il processo:

  • Inclusione di un set di dati più ampio (almeno 500 esempi).
  • Uso delle tecniche di ottimizzazione tradizionali con backpropagation per riaggiustare i pesi del modello. Queste tecniche consentono risultati di qualità superiore rispetto agli approcci zero-shot o few-shot forniti da soli.
  • Miglioramento dell'approccio con pochi scatti eseguendo il training dei pesi del modello con richieste specifiche e una struttura specifica. Questa tecnica consente di ottenere risultati migliori su un numero più ampio di attività senza dover fornire esempi nel prompt. Il risultato è meno testo inviato e meno token.

Quando si crea una soluzione GPT-3, lo sforzo principale riguarda la progettazione e il contenuto della richiesta di training.

Progettazione dei prompt

La progettazione dei prompt è una disciplina di elaborazione del linguaggio naturale che implica l'individuazione di input che producono output auspicabili o utili. Quando un utente richiede il sistema, il modo in cui il contenuto viene espresso può modificare notevolmente l'output. La progettazione dei prompt è il processo più significativo per garantire che il modello GPT-3 fornisca una risposta auspicabile e contestuale.

L'architettura descritta in questo articolo usa l'endpoint dei completamenti per il riepilogo. L'endpoint dei completamenti è un'API dei servizi di intelligenza artificiale di Azure che accetta un prompt o un contesto parziale come input e restituisce uno o più output che continuano o completano il testo di input. Un utente fornisce testo di input come richiesta e il modello genera testo che tenta di corrispondere al contesto o al modello fornito. La progettazione dei prompt dipende in modo elevato dall'attività e dai dati. L'incorporamento della progettazione di richieste in un set di dati di ottimizzazione e l'analisi dei risultati migliori prima di usare il sistema in produzione richiede tempi e sforzi significativi.

Progettazione prompt

I modelli GPT-3 possono eseguire più attività, quindi è necessario essere espliciti negli obiettivi della progettazione. I modelli stimano l'output desiderato in base alla richiesta fornita.

Ad esempio, se si inseriscono le parole "Dammi un elenco di razze di gatti", il modello non presuppone automaticamente che si stia chiedendo un elenco di razze di gatti. Potresti chiedere al modello di continuare una conversazione in cui le prime parole sono "Dammi un elenco di razze di gatti" e le successive sono "e vi dirò quali mi piace". Se il modello presupponeva semplicemente che si desiderasse un elenco di gatti, non sarebbe utile per la creazione, la classificazione o altre attività del contenuto.

Come descritto in Informazioni su come generare o modificare il testo, sono disponibili tre linee guida di base per la creazione di richieste:

  • Mostra e racconta. Migliorare la chiarezza su ciò che si desidera fornendo istruzioni, esempi o una combinazione dei due. Se si desidera che il modello classifica un elenco di elementi in ordine alfabetico o di classificare un paragrafo in base al sentiment, mostrare che è quello desiderato.
  • Fornire dati di qualità. Se si sta creando un classificatore o si vuole che un modello segua un modello, assicurarsi di fornire esempi sufficienti. È anche consigliabile rileggere gli esempi. Il modello può in genere riconoscere gli errori di ortografia e restituire una risposta, ma potrebbe presumere che gli errori di ortografia siano intenzionali, che possono influire sulla risposta.
  • Verificare le impostazioni. Le temperature impostazioni e top_p controllano il modo in cui il modello è deterministico nella generazione di una risposta. Se si richiede una risposta con una sola risposta corretta, configurare queste impostazioni a un livello inferiore. Se si vogliono risposte più diverse, è possibile configurare le impostazioni a un livello superiore. Un errore comune consiste nel presupporre che queste impostazioni siano controlli "intelligente" o "creatività".

Alternative

La comprensione del linguaggio conversazionale di Azure è un'alternativa al riepilogo usato qui. Lo scopo principale della comprensione del linguaggio conversazionale è creare modelli che stimano l'intenzione complessiva di un'espressione in ingresso, estrarre informazioni preziose da esso e produrre una risposta allineata all'argomento. È utile nelle applicazioni chatbot quando può fare riferimento a una knowledge base esistente per trovare il suggerimento che meglio corrisponde all'espressione in ingresso. Non è molto utile quando il testo di input non richiede una risposta. Lo scopo di questa architettura consiste nel generare un breve riepilogo del contenuto testuale lungo. L'essenza del contenuto è descritta in modo conciso e tutte le informazioni importanti sono rappresentate.

Scenari di esempio

In questo caso d'uso, viene riepilogata una raccolta di legge legislative passate attraverso il Congresso. Il riepilogo è ottimizzato per avvicinarlo a un riepilogo generato dall'uomo, detto riepilogo della verità del terreno.

L'ingegneria della richiesta zero-shot viene usata per riepilogare le fatture. La richiesta e le impostazioni vengono quindi modificate per generare output di riepilogo diversi.

Set di dati

Il primo set di dati è il set di dati BillSum per il riepilogo delle fatture statali del Congresso degli Stati Uniti e della California. In questo esempio vengono utilizzate solo le fatture congressuali. I dati sono suddivisi in 18.949 fatture da usare per il training e 3.269 fatture da usare per i test. BillSum è incentrato sulla legislazione di media lunghezza compresa tra 5.000 e 20.000 caratteri. Viene pulito e pre-elaborato.

Per altre informazioni sul set di dati e le istruzioni per il download, vedere FiscalNote/BillSum in GitHub.

Schema BillSum

Lo schema del set di dati BillSum include:

  • bill_id. Identificatore della fattura.
  • text. Testo della fattura.
  • summary. Riepilogo scritto dall'uomo della fattura.
  • title. Titolo della fattura.
  • text_len. Lunghezza del carattere della fattura.
  • sum_len. Lunghezza del carattere del riepilogo della fattura.

In questo caso d'uso vengono usati gli text elementi e summary .

Zero-shot

L'obiettivo è insegnare al modello GPT-3 per apprendere l'input in stile conversazione. L'endpoint di completamento viene usato per creare un'API OpenAI di Azure e un prompt che genera il riepilogo migliore della fattura. È importante creare attentamente le richieste in modo che estraggano informazioni pertinenti. Per estrarre riepiloghi generali da una fattura specifica, viene usato il formato seguente.

  • Prefisso: cosa si vuole fare.
  • Nozioni di base sul contesto: contesto.
  • Contesto: informazioni necessarie per fornire una risposta. In questo caso, il testo da riepilogare.
  • Suffisso: forma prevista della risposta. Ad esempio, una risposta, un completamento o un riepilogo.
API_KEY = # SET YOUR OWN API KEY HERE
RESOURCE_ENDPOINT = " -- # SET A LINK TO YOUR RESOURCE ENDPOINT -- "

openai.api_type = "azure"
openai.api_key = API_KEY
openai.api_base = RESOURCE_ENDPOINT
openai.api_version = "2022-12-01-preview"
prompt_i = 'Summarize the legislative bill given the title and the text.\n\nTitle:\n'+" ".join([normalize_text(bill_title_1)])+ '\n\nText:\n'+ " ".join([normalize_text(bill_text_1)])+'\n\nSummary:\n'
response = openai.Completion.create(
    engine=TEXT_DAVINCI_001
    prompt=prompt_i,
    temperature=0.4,
    max_tokens=500,
    top_p=1.0,
    frequency_penalty=0.5,
    presence_penalty=0.5,
    stop=['\n\n###\n\n'], # The ending token used during inference. Once it reaches this token, GPT-3 knows the completion is over.
    best_of=1
    )
 = 1

Verità: National Science Education Tax Incentive for Business Act del 2007 - Modifica il codice dei ricavi interni per consentire un credito fiscale aziendale generale per contributi di proprietà o servizi alle scuole elementari e secondarie e per la formazione degli insegnanti per promuovere l'istruzione in scienze, tecnologia, ingegneria o matematica.

Riepilogo del modello a zero: l'Incentivi fiscali per l'istruzione scientifica nazionale per le imprese del 2007 creerebbe un nuovo credito fiscale per le imprese che apportano contributi all'istruzione scientifica, tecnologica, ingegneria e matematica (STEM) a livello di scuola elementare e secondaria. Il credito sarebbe pari al 100% dei contributi STEM qualificati del contribuente per l'anno tassabile. I contributi STEM qualificati includono contributi scolastici STEM, spese di externship per insegnanti STEM e spese di formazione per insegnanti STEM.

Osservazioni: il modello zero-shot genera un riepilogo conciso e generalizzato del documento. È simile alla verità del terreno scritta dall'uomo e acquisisce gli stessi punti chiave. È organizzato come un riepilogo scritto dall'uomo e rimane incentrato sul punto.

Ottimizzazione

L'ottimizzazione delle prestazioni migliora l'apprendimento zero-shot eseguendo il training su più esempi rispetto a quanto possibile includere nella richiesta, in modo da ottenere risultati migliori su un numero più ampio di attività. Dopo aver ottimizzato un modello, non è necessario fornire esempi nel prompt. L'ottimizzazione consente di risparmiare denaro riducendo il numero di token necessari e abilita richieste a bassa latenza.

A livello generale, l'ottimizzazione include questi passaggi:

  • Preparare e caricare i dati di training.
  • Eseguire il training di un nuovo modello ottimizzato.
  • Usare il modello ottimizzato.

Per altre informazioni, vedere Come personalizzare un modello con il servizio Azure OpenAI.

Preparare i dati per l'ottimizzazione

Questo passaggio consente di migliorare il modello zero-shot incorporando la progettazione dei prompt nelle richieste usate per l'ottimizzazione. In questo modo è possibile fornire indicazioni al modello su come avvicinarsi alle coppie di prompt/completamento. In un modello di ottimizzazione, i prompt forniscono un punto di partenza da cui il modello può apprendere e usare per eseguire stime. Questo processo consente al modello di iniziare con una conoscenza di base dei dati, che può quindi essere migliorata gradualmente man mano che il modello viene esposto a più dati. Inoltre, i prompt possono aiutare il modello a identificare i modelli nei dati che potrebbero altrimenti mancare.

La stessa struttura di progettazione dei prompt viene usata anche durante l'inferenza, al termine del training del modello, in modo che il modello riconosca il comportamento appreso durante il training e possa generare completamenti come indicato.

#Adding variables used to design prompts consistently across all examples
#You can learn more here: https://learn.microsoft.com/azure/cognitive-services/openai/how-to/prepare-dataset

LINE_SEP = " \n "
PROMPT_END = " [end] "
#Injecting the zero-shot prompt into the fine-tune dataset
def stage_examples(proc_df):
    proc_df['prompt'] = proc_df.apply(lambda x:"Summarize the legislative bill. Do not make up facts.\n\nText:\n"+" ".join([normalize_text(x['prompt'])])+'\n\nSummary:', axis=1)
    proc_df['completion'] = proc_df.apply(lambda x:" "+normalize_text(x['completion'])+PROMPT_END, axis=1)

    return proc_df

df_staged_full_train = stage_examples(df_prompt_completion_train)
df_staged_full_val = stage_examples(df_prompt_completion_val)

Ora che i dati vengono gestiti automaticamente per l'ottimizzazione nel formato corretto, è possibile iniziare a eseguire i comandi di ottimizzazione.

Successivamente, è possibile usare l'interfaccia della riga di comando di OpenAI per facilitare alcuni passaggi di preparazione dei dati. Lo strumento OpenAI convalida i dati, fornisce suggerimenti e riformatta i dati.

openai tools fine_tunes.prepare_data -f data/billsum_v4_1/prompt_completion_staged_train.csv

openai tools fine_tunes.prepare_data -f data/billsum_v4_1/prompt_completion_staged_val.csv
Ottimizzare il set di dati
payload = {
  "model": "curie",
  "training_file": " -- INSERT TRAINING FILE ID -- ",
  "validation_file": "-- INSERT VALIDATION FILE ID --",
  "hyperparams": {
  "n_epochs": 1,
  "batch_size": 200,
  "learning_rate_multiplier": 0.1,
  "prompt_loss_weight": 0.0001    
  }
}

url = RESOURCE_ENDPOINT + "openai/fine-tunes?api-version=2022-12-01-preview"
r = requests.post(url, 
    headers={
    "api-key": API_KEY,
    "Content-Type": "application/json"
    },
    json = payload
)
data = r.json()
print(data)
fine_tune_id = data['id']
print('Endpoint Called: {endpoint}'.format(endpoint = url))
print('Status Code: {status}'.format(status= r.status_code))
print('Fine tuning job ID: {id}'.format(id=fine_tune_id))
print('Response Information \n\n {text}'.format(text=r.text))
Valutare il modello ottimizzato

Questa sezione illustra come valutare il modello ottimizzato.

#Run this cell to check status
url = RESOURCE_ENDPOINT + "openai/fine-tunes/<--insert fine-tune id-->?api-version=2022-12-01-preview"
r = requests.get(url, 
    headers={
    "api-key": API_KEY,
    "Content-Type": "application/json"
    }
)

data = r.json()
print('Endpoint Called: {endpoint}'.format(endpoint = url))
print('Status Code: {status}'.format(status= r.status_code))
print('Fine tuning ID: {id}'.format(id=fine_tune_id))
print('Status: {status}'.format(status = data['status'])) 
print('Response Information \n\n {text}'.format(text=r.text))

Verità: National Science Education Tax Incentive for Business Act del 2007 - Modifica il codice dei ricavi interni per consentire un credito fiscale aziendale generale per contributi di proprietà o servizi alle scuole elementari e secondarie e per la formazione degli insegnanti per promuovere l'istruzione in scienze, tecnologia, ingegneria o matematica.

Riepilogo dei modelli ottimizzati: questa fattura fornisce un credito fiscale per i contributi alle scuole elementari e secondarie che traggono vantaggio dalla scienza, dalla tecnologia, dall'ingegneria e dalla matematica. Il credito è pari al 100% dei contributi STEM qualificati effettuati dai contribuenti durante l'anno fiscale. I contributi STEM qualificati includono: (1) contributi scolastici STEM, (2) spese di externship per insegnanti STEM e (3) spese di formazione per insegnanti STEM. La legge fornisce inoltre un credito fiscale per i contributi alle scuole elementari e secondarie che traggono vantaggio dalla scienza, dalla tecnologia, dall'ingegneria o dall'istruzione matematica. Il credito è pari al 100% dei contributi qualificati del servizio STEM effettuato dai contribuenti durante l'anno fiscale. I contributi qualificati del servizio STEM includono: (1) contributi del servizio STEM pagati o sostenuti durante l'anno tassabile per i servizi forniti nel Stati Uniti o su una base militare al di fuori della Stati Uniti; e (2) la proprietà di inventario STEM fornita durante l'anno fiscale che viene utilizzato da un'organizzazione educativa che si trova nel Stati Uniti o su una base militare al di fuori del Stati Uniti fornire istruzione in grado K-12 in scienze, tecnologia, ingegneria o matematica.

Osservazioni: nel complesso, il modello ottimizzato esegue un ottimo lavoro di riepilogo della fattura. Acquisisce un gergo specifico del dominio e i punti chiave rappresentati ma non illustrati nella verità del terreno scritta dall'uomo. Si differenzia dal modello zero-shot fornendo un riepilogo più dettagliato e completo.

Caso d'uso: Report finanziari

In questo caso d'uso, viene usata la progettazione di richieste zero-shot per creare riepiloghi di report finanziari. Viene quindi usato un riepilogo dell'approccio di riepilogo per generare i risultati.

Riepilogo dell'approccio ai riepiloghi

Quando si scrivono richieste, il totale GPT-3 della richiesta e il completamento risultante deve includere meno di 4.000 token, quindi si è limitati a un paio di pagine di testo di riepilogo. Per i documenti che in genere contengono più di 4.000 token (circa 3.000 parole), è possibile usare un riepilogo degli approcci di riepilogo . Quando si usa questo approccio, l'intero testo viene prima diviso per soddisfare i vincoli del token. I riepiloghi dei testi più brevi vengono quindi derivati. Nel passaggio successivo viene creato un riepilogo dei riepiloghi. Questo caso d'uso illustra il riepilogo dell'approccio di riepilogo con un modello a colpo zero. Questa soluzione è utile per documenti lunghi. Inoltre, questa sezione descrive in che modo diverse procedure di progettazione dei prompt possono variare i risultati.

Nota

L'ottimizzazione non viene applicata nel caso d'uso finanziario perché non sono disponibili dati sufficienti per completare tale passaggio.

Set di dati

Il set di dati per questo caso d'uso è tecnico e include le metriche quantitative chiave per valutare le prestazioni di un'azienda.

Il set di dati finanziario include:

  • url: URL del report finanziario.
  • pages: pagina del report che contiene informazioni chiave da riepilogare (1 indicizzato).
  • completion: riepilogo della verità sul terreno del report.
  • comments: eventuali informazioni aggiuntive necessarie.

In questo caso d'uso, il report finanziario di Rathbone, dal set di dati, verrà riepilogato. Rathbone è una società di investimento individuale e di gestione della ricchezza per clienti privati. Il report evidenzia le prestazioni di Rathbone nel 2020 e cita metriche delle prestazioni come profitto, FUMA e reddito. Le informazioni chiave da riepilogare sono nella pagina 1 del PDF.

API_KEY = # SET YOUR OWN API KEY HERE
RESOURCE_ENDPOINT = "# SET A LINK TO YOUR RESOURCE ENDPOINT"

openai.api_type = "azure"
openai.api_key = API_KEY
openai.api_base = RESOURCE_ENDPOINT
openai.api_version = "2022-12-01-preview"
name = os.path.abspath(os.path.join(os.getcwd(), '---INSERT PATH OF LOCALLY DOWNLOADED RATHBONES_2020_PRELIM_RESULTS---')).replace('\\', '/')

pages_to_summarize = [0]
# Using pdfminer.six to extract the text 
# !pip install pdfminer.six
from pdfminer.high_level import extract_text
t = extract_text(name
, page_numbers=pages_to_summarize
)
print("Text extracted from " + name)
t
Approccio zero-shot

Quando si usa l'approccio zero-shot, non si forniscono esempi risolti. Specificare solo il comando e l'input non risolto. In questo esempio viene usato il modello Instruct. Questo modello è progettato specificamente per accettare un'istruzione e registrare una risposta senza contesto aggiuntivo, ideale per l'approccio zero-shot.

Dopo aver estratto il testo, è possibile usare varie richieste per vedere come influiscono sulla qualità del riepilogo:

#Using the text from the Rathbone's report, you can try different prompts to see how they affect the summary

prompt_i = 'Summarize the key financial information in the report using qualitative metrics.\n\nText:\n'+" ".join([normalize_text(t)])+'\n\nKey metrics:\n'

response = openai.Completion.create(
        engine="davinci-instruct",
        prompt=prompt_i,
        temperature=0,
        max_tokens=2048-int(len(prompt_i.split())*1.5),
        top_p=1.0,
        frequency_penalty=0.5,
        presence_penalty=0.5,
        best_of=1
    )
print(response.choices[0].text)
>>>
- Funds under management and administration (FUMA) reached £54.7 billion at 31 December 2020, up 8.5% from £50.4 billion at 31 December 2019
- Operating income totalled £366.1 million, 5.2% ahead of the prior year (2019: £348.1 million)
- Underlying1 profit before tax totalled £92.5 million, an increase of 4.3% (2019: £88.7 million); underlying operating margin of 25.3% (2019: 25.5%)

# Different prompt

prompt_i = 'Extract most significant money related values of financial performance of the business like revenue, profit, etc. from the below text in about two hundred words.\n\nText:\n'+" ".join([normalize_text(t)])+'\n\nKey metrics:\n'

response = openai.Completion.create(
        engine="davinci-instruct",
        prompt=prompt_i,
        temperature=0,
        max_tokens=2048-int(len(prompt_i.split())*1.5),
        top_p=1.0,
        frequency_penalty=0.5,
        presence_penalty=0.5,
        best_of=1
    )
print(response.choices[0].text)
>>>
- Funds under management and administration (FUMA) grew by 8.5% to reach £54.7 billion at 31 December 2020
- Underlying profit before tax increased by 4.3% to £92.5 million, delivering an underlying operating margin of 25.3%
- The board is announcing a final 2020 dividend of 47 pence per share, which brings the total dividend to 72 pence per share, an increase of 2.9% over 2019
Problematiche
  • Come si può notare, il modello potrebbe produrre metriche non menzionate nel testo originale.

    Soluzione proposta: è possibile risolvere il problema modificando la richiesta.

  • Il riepilogo potrebbe concentrarsi su una sezione dell'articolo e trascurare altre informazioni importanti.

    Soluzione proposta: è possibile provare un riepilogo dell'approccio di riepilogo. Dividere il report in sezioni e creare riepiloghi più piccoli che è quindi possibile riepilogare per creare il riepilogo dell'output.

Questo codice implementa le soluzioni proposte:

# Body of function

from pdfminer.high_level import extract_text

text = extract_text(name
, page_numbers=pages_to_summarize
)

r = splitter(200, text)

tok_l = int(2000/len(r))
tok_l_w = num2words(tok_l)

res_lis = []
# Stage 1: Summaries
for i in range(len(r)):
    prompt_i = f'Extract and summarize the key financial numbers and percentages mentioned in the Text in less than {tok_l_w} 
words.\n\nText:\n'+normalize_text(r[i])+'\n\nSummary in one paragraph:'

    response = openai.Completion.create(
        engine=TEXT_DAVINCI_001,
        prompt=prompt_i,
        temperature=0,
        max_tokens=tok_l,
        top_p=1.0,
        frequency_penalty=0.5,
        presence_penalty=0.5,
        best_of=1
    )
    t = trim_incomplete(response.choices[0].text)
    res_lis.append(t)

# Stage 2: Summary of summaries
prompt_i = 'Summarize the financial performance of the business like revenue, profit, etc. in less than one hundred words. Do not make up values that are not mentioned in the Text.\n\nText:\n'+" ".join([normalize_text(res) for res in res_lis])+'\n\nSummary:\n'

response = openai.Completion.create(
        engine=TEXT_DAVINCI_001,
        prompt=prompt_i,
        temperature=0,
        max_tokens=200,
        top_p=1.0,
        frequency_penalty=0.5,
        presence_penalty=0.5,
        best_of=1
)

print(trim_incomplete(response.choices[0].text))

La richiesta di input include il testo originale del report finanziario di Rathbone per un anno specifico.

Verità : Rathbones ha registrato ricavi di £ 366,1 milioni nel 2020, fino a £348,1 milioni nel 2019, e un aumento del profitto sottostante prima dell'imposta a £ 92,5 milioni da £ 88,7 milioni. Le attività sotto gestione sono aumentate dell'8,5% da £50,4 miliardi a £54,7 miliardi, con attività di gestione della ricchezza che aumentano del 4,4% a £44,9 miliardi. I flussi netti sono stati di 2,1 miliardi di sterline nel 2020 rispetto a 600 milioni di sterline nell'anno precedente, principalmente di 1,5 miliardi di sterline in ingresso nelle sue attività di fondi e 400 milioni di sterline a causa del trasferimento delle attività dalla Barclays Wealth.

Riepilogo zero-shot di output di riepiloghi: Rathbones ha offerto una forte performance nel 2020, con fondi sotto gestione e amministrazione (FUMA) in crescita dell'8,5% per raggiungere £ 54,7 miliardi alla fine dell'anno. Il profitto sottostante prima dell'imposta è aumentato del 4,3% a £92,5 milioni, offrendo un margine operativo sottostante del 25,3%. I flussi netti totali nel gruppo sono stati pari a 2,1 miliardi di sterline, che rappresentano un tasso di crescita del 4,2%. Il profitto precedente all'imposta per l'anno è stato di 43,8 milioni di sterline, con utili di base per azione pari a 49,6 p. Il reddito operativo per l'anno è stato del 5,2% rispetto all'anno precedente, con un totale di 366,1 milioni di sterline.

Osservazioni: il riepilogo dell'approccio di riepilogo genera un set di risultati ottimale che risolve inizialmente le sfide riscontrate quando è stato fornito un riepilogo più dettagliato e completo. È un ottimo lavoro nell'acquisizione del gergo specifico del dominio e dei punti chiave, rappresentati nella verità del terreno, ma non ben spiegati.

Il modello zero-shot funziona bene per riepilogare i documenti mainstream. Se i dati sono specifici del settore o specifici dell'argomento, contengono un gergo specifico del settore o richiedono una conoscenza specifica del settore, l'ottimizzazione è ottimale. Ad esempio, questo approccio funziona bene per riviste mediche, forme legali e rendiconti finanziari. È possibile usare l'approccio con pochi scatti anziché zero-shot per fornire al modello esempi di come formulare un riepilogo, in modo da imparare a simulare il riepilogo fornito. Per l'approccio zero-shot, questa soluzione non ripete il training del modello. La conoscenza del modello si basa sul training GPT-3. GPT-3 viene sottoposto a training con quasi tutti i dati disponibili da Internet. Offre prestazioni buone per le attività che non richiedono conoscenze specifiche.

Consigli

Esistono molti modi per affrontare il riepilogo usando GPT-3, tra cui zero-shot, few-shot e ottimizzazione. Gli approcci producono riepiloghi di qualità variabile. È possibile esplorare l'approccio che produce i risultati migliori per il caso d'uso previsto.

In base alle osservazioni sui test presentati in questo articolo, ecco alcune raccomandazioni:

  • Zero-shot è ideale per i documenti mainstream che non richiedono conoscenze specifiche del dominio. Questo approccio tenta di acquisire tutte le informazioni di alto livello in modo conciso, simile all'uomo e fornisce un riepilogo di base di alta qualità. Zero-shot crea un riepilogo di alta qualità per il set di dati legale usato nei test in questo articolo.
  • È difficile usare pochi scatti per riepilogare documenti lunghi perché la limitazione del token viene superata quando viene fornito un testo di esempio. È invece possibile usare un riepilogo automatico degli approcci di riepilogo per documenti lunghi o aumentare il set di dati per abilitare l'ottimizzazione corretta. Il riepilogo dell'approccio di riepilogo genera risultati eccellenti per il set di dati finanziario usato in questi test.
  • L'ottimizzazione è particolarmente utile per i casi d'uso tecnici o specifici del dominio quando le informazioni non sono facilmente disponibili. Per ottenere risultati ottimali con questo approccio, è necessario un set di dati contenente un paio di migliaia di esempi. L'ottimizzazione consente di acquisire il riepilogo in alcuni modi basati su modelli, cercando di conformarsi al modo in cui il set di dati presenta i riepiloghi. Per il set di dati legale, questo approccio genera una qualità superiore di riepilogo rispetto a quella creata dall'approccio zero-shot.

Valutazione del riepilogo

Esistono più tecniche per valutare le prestazioni dei modelli di riepilogo.

Ecco alcuni:

ROUGE (Understudy orientata al richiamo per la valutazione gisting). Questa tecnica include misure per determinare automaticamente la qualità di un riepilogo confrontandola con i riepiloghi ideali creati dagli esseri umani. Le misure conteggiano il numero di unità sovrapposte, ad esempio n-gram, sequenze di parole e coppie di parole, tra il riepilogo generato dal computer da valutare e i riepiloghi ideali.

Ecco un esempio:

reference_summary = "The cat ison porch by the tree"
generated_summary = "The cat is by the tree on the porch"
rouge = Rouge()
rouge.get_scores(generated_summary, reference_summary)
[{'rouge-1': {'r':1.0, 'p': 1.0, 'f': 0.999999995},
  'rouge-2': {'r': 0.5714285714285714, 'p': 0.5, 'f': 0.5333333283555556},
  'rouge-1': {'r': 0.75, 'p': 0.75, 'f': 0.749999995}}]

BERTScore. Questa tecnica calcola i punteggi di somiglianza allineando i riepiloghi generati e di riferimento a livello di token. Gli allineamenti dei token vengono calcolati in modo greedily per ottimizzare la somiglianza del coseno tra incorporamenti di token contestualizzati da BERT.

Ecco un esempio:

import torchmetrics
from torchmetrics.text.bert import BERTScore
preds = "You should have ice cream in the summer"
target = "Ice creams are great when the weather is hot"
bertscore = BERTScore()
score = bertscore(preds, target)
print(score)

Matrice di somiglianza. Una matrice di somiglianza è una rappresentazione delle analogie tra entità diverse in una valutazione di riepilogo. È possibile usarlo per confrontare diversi riepiloghi dello stesso testo e misurarne la somiglianza. È rappresentato da una griglia bidimensionale, in cui ogni cella contiene una misura della somiglianza tra due riepiloghi. È possibile misurare la somiglianza usando vari metodi, ad esempio la somiglianza del coseno, la somiglianza di Jaccard e la distanza di modifica. Si usa quindi la matrice per confrontare i riepiloghi e determinare quale è la rappresentazione più accurata del testo originale.

Ecco un comando di esempio che ottiene la matrice di somiglianza di un confronto BERTScore di due frasi simili:

bert-score-show --lang en -r "The cat is on the porch by the tree"
                          -c "The cat is by the tree on the porch"
                          -f out.png

La prima frase, "Il gatto è sul porticato dall'albero", viene definito candidato. La seconda frase viene definita riferimento. Il comando usa BERTScore per confrontare le frasi e generare una matrice.

Questa matrice seguente visualizza l'output generato dal comando precedente:

Diagramma che mostra un esempio di matrice di somiglianza.

Per altre informazioni, vedere SummEval: Reevaluating Summarization Evaluation.For more information, see SummEval: Reevaluating Summarization Evaluation. Per un toolkit PyPI per il riepilogo, vedere Summ-eval 0.892.

Collaboratori

Questo articolo viene gestito da Microsoft. Originariamente è stato scritto dai seguenti contributori.

Autore principale:

Altri contributori:

Per visualizzare i profili LinkedIn non pubblici, accedere a LinkedIn.

Passaggi successivi