Souhrn dokumentů založených na dotazech

Tento průvodce ukazuje, jak provádět souhrny dokumentů pomocí modelu Azure OpenAI GPT-3. Popisuje koncepty, které souvisejí s procesem shrnutí dokumentu, přístupy k procesu a doporučeními k modelu, který se má použít pro konkrétní případy použití. Nakonec představuje dva případy použití společně s ukázkovými fragmenty kódu, které vám pomůžou porozumět klíčovým konceptům.

Architektura

Následující diagram znázorňuje, jak uživatelský dotaz načte relevantní data. Sumarizátor používá GPT-3 k vygenerování souhrnu textu nejrelevavantnějšího dokumentu. V této architektuře se koncový bod GPT-3 používá ke shrnutí textu.

Diagram znázorňující vyhledávání uživatelů a proces souhrnu, který používá GPT-3

Stáhněte si soubor PowerPointu této architektury.

Workflow

Tento pracovní postup probíhá téměř v reálném čase.

  1. Uživatel odešle dotaz. Například zaměstnanec výrobní společnosti vyhledá konkrétní informace o části stroje na portálu společnosti. Dotaz je nejprve zpracován rozpoznáváním záměru, jako je porozumění konverzačnímu jazyku. Relevantní entity nebo koncepty v uživatelském dotazu slouží k výběru a prezentování podmnožinu dokumentů z znalostní báze, která je vyplněná offline (v tomto případě databáze znalostní báze společnosti). Výstup se odesílá do vyhledávacího a analytického modulu, jako je Azure Elastic Search, který filtruje relevantní dokumenty, aby vrátil sadu dokumentů stovek místo tisíců nebo desítek tisíc.
  2. Dotaz uživatele se znovu použije u koncového bodu vyhledávání, jako je Azure Cognitive Search , aby seřadila načtenou sadu dokumentů v pořadí podle relevance (pořadí stránek). Je vybraný dokument s nejvyšším pořadím.
  3. Vybraný dokument se vyhledá pro relevantní věty. Tento proces skenování používá buď hrubou metodu, například extrahování všech vět obsahujících uživatelský dotaz, nebo sofistikovanější metodu, například vkládání GPT-3, k vyhledání sémanticky podobného materiálu v dokumentu.
  4. Po extrahování relevantního textu koncový bod dokončení GPT-3 s sumarizátorem shrnuje extrahovaný obsah. V tomto příkladu se vrátí souhrn důležitých podrobností o části, kterou zaměstnanec zadaný v dotazu zadal.

Tento článek se zaměřuje na komponentu sumarizace architektury.

Podrobnosti scénáře

Podniky často vytvářejí a udržují znalostní báze o obchodních procesech, zákaznících, produktech a informacích. Vrácení relevantního obsahu na základě uživatelského dotazu velké datové sady je ale často náročné. Uživatel se může dotazovat na znalostní báze a najít příslušný dokument pomocí metod, jako je pořadí stránek, ale další přístup k dokumentu k vyhledání relevantních informací se obvykle stává ruční úlohou, která nějakou dobu trvá. Nicméně, s nedávnými pokroky v základních transformátorových modelech, jako je model vyvinutý OpenAI, byl mechanismus dotazu upřesněn sémantickou vyhledávací metodou, které používají kódovací informace, jako jsou vkládání, k vyhledání relevantních informací. Tento vývoj umožňuje sumarizovat obsah a prezentovat ho uživateli stručným a stručným způsobem.

Shrnutí dokumentů je proces vytváření souhrnů z velkých objemů dat při zachování významných informačních prvků a hodnoty obsahu. Tento článek ukazuje, jak používat funkce GPT-3 služby Azure OpenAI pro váš konkrétní případ použití. GPT-3 je výkonný nástroj, který můžete použít pro řadu úloh zpracování přirozeného jazyka, včetně překladu jazyka, chatbotů, shrnutí textu a vytváření obsahu. Zde popsané metody a architektura jsou přizpůsobitelné a lze je použít u mnoha datových sad.

Potenciální případy použití

Shrnutí dokumentů platí pro každou organizační doménu, která vyžaduje, aby uživatelé hledali velké objemy referenčních dat a vygenerovali souhrn, který stručně popisuje relevantní informace. Mezi typické domény patří právní, finanční, zprávy, zdravotnictví a akademické organizace. Potenciální případy použití sumarizace jsou:

  • Generování souhrnů pro zvýraznění klíčových přehledů o novinkách, finančních sestavách atd.
  • Vytvoření rychlého odkazu na podporu argumentu, například v právním řízení.
  • Poskytnutí kontextu pro práci na papíře, stejně jako v akademickém nastavení.
  • Psaní recenzí literatury.
  • Přidávání poznámek k bibliografii.

Mezi výhody použití služby souhrnu pro případ použití patří:

  • Zkrátila se doba čtení.
  • Efektivnější vyhledávání velkých objemů různorodých dat
  • Menší pravděpodobnost předsudků z technik sumarizace člověka (Tato výhoda závisí na tom, jak jsou trénovací data nestranná.)
  • Umožňuje zaměstnancům a uživatelům zaměřit se na podrobnější analýzu.

Učení v kontextu

Služba Azure OpenAI používá model generování dokončování. Model používá instrukce přirozeného jazyka k identifikaci požadovaného úkolu a požadované dovednosti, procesu označovaného jako prompt engineering. Při použití tohoto přístupu obsahuje první část výzvy pokyny v přirozeném jazyce nebo příklady požadované úlohy. Model dokončí úkol predikcí nejpravděpodobnějšího dalšího textu. Tato technika se označuje jako učení v kontextu.

S kontextovým učením se jazykové modely můžou učit úkoly jenom z několika příkladů. Jazykový model je k dispozici s výzvou, která obsahuje seznam dvojic vstupního výstupu, které demonstrují úlohu, a pak s testovacím vstupem. Model vytvoří předpověď podmíněným nastavením na příkazovém řádku a předpovídáním dalších tokenů.

Existují tři hlavní přístupy ke učení v kontextu: učení s nulovým snímkem, učení s několika snímky a jemně dolaďovací metody, které mění a zlepšují výstup. Tyto přístupy se liší v závislosti na množství dat specifických pro úlohy, která jsou k dispozici modelu.

Nulový snímek: V tomto přístupu nejsou modelu k dispozici žádné příklady. Jako vstup je poskytován pouze požadavek na úkol. Při učení s nulovým snímkem závisí model na dříve natrénovaných konceptech. Reaguje pouze na data, na základě která jsou natrénovaná. Nemusí nutně pochopit sémantický význam, ale má statistiku, která je založena na všem, co se naučil z internetu o tom, co by se mělo vygenerovat dále. Model se pokusí spojit danou úlohu se stávajícími kategoriemi, o kterých se už dozvěděla, a odpovídajícím způsobem reaguje.

Několik snímků: V tomto přístupu je do výzvy volání zahrnuto několik příkladů, které ukazují očekávaný formát odpovědí a obsah. Model je k dispozici s velmi malou trénovací datovou sadou, která provede predikce. Trénování s malou sadou příkladů umožňuje modelu generalizovat a porozumět nesouvisejícím, ale dříve nezobecněným úlohám. Vytvoření několika snímků příkladů může být náročné, protože potřebujete přesně vyjádřit úkol, který má model provést. Jedním z běžných problémů je, že modely jsou citlivé na styl psaní, který se používá v příkladech trénování, zejména malých modelů.

Vyladění: Vyladění je proces přizpůsobení modelů vašim vlastním datovým sadám. V tomto kroku přizpůsobení můžete proces vylepšit takto:

  • Zahrnutí větší sady dat (alespoň 500 příkladů)
  • Použití tradičních technik optimalizace s backpropagací ke čtení váhy modelu. Tyto techniky umožňují dosáhnout vyšší kvality výsledků než přístupy s nulovým snímkem nebo několika snímky.
  • Vylepšení několika snímků pomocí trénování hmotností modelu s konkrétními výzvami a konkrétní strukturou. Tato technika umožňuje dosáhnout lepších výsledků u širšího počtu úkolů, aniž byste museli v příkazovém řádku poskytnout příklady. Výsledkem je menší počet odeslaných textů a méně tokenů.

Při vytváření řešení GPT-3 je hlavním úsilím návrh a obsah výzvy k trénování.

Vytváření efektivních dotazů

Příprava výzvy je disciplína zpracování přirozeného jazyka, která zahrnuje zjišťování vstupů, které poskytují žádoucí nebo užitečné výstupy. Když uživatel vyzve systém, způsob vyjádření obsahu může výrazně změnit výstup. Návrh výzvy je nejvýznamnějším procesem, který zajišťuje, aby model GPT-3 poskytoval žádoucí a kontextovou odpověď.

Architektura popsaná v tomto článku používá koncový bod dokončení pro sumarizaci. Koncový bod dokončení je rozhraní API služeb Azure AI, které přijímá částečnou výzvu nebo kontext jako vstup a vrací jeden nebo více výstupů, které budou pokračovat nebo dokončit vstupní text. Uživatel poskytuje vstupní text jako výzvu a model vygeneruje text, který se pokusí shodovat s kontextem nebo zadaným vzorem. Návrh výzvy je vysoce závislý na úkolu a datech. Začlenění přípravy výzvy do jemně vyladěné datové sady a zkoumání toho, co funguje nejlépe před použitím systému v produkčním prostředí, vyžaduje významný čas a úsilí.

Návrh výzvy

Modely GPT-3 můžou provádět více úloh, takže musíte být explicitní v cílech návrhu. Modely odhadují požadovaný výstup na základě zadané výzvy.

Pokud například zadáte slova "Dej mi seznam plemen kočky", model automaticky nepředpokládá, že žádáte o seznam plemen kočky. Můžete požádat model, aby pokračoval v konverzaci, ve které první slova jsou "Dej mi seznam plemen kočky" a další jsou "a já ti řeknu, které se mi líbí.". Pokud model právě předpokládal, že jste chtěli seznam koček, nebyl by tak dobrý při vytváření, klasifikaci nebo jiných úkolech obsahu.

Jak je popsáno v tématu Jak generovat nebo manipulovat s textem, existují tři základní pokyny pro vytváření výzev:

  • Ukažte a řekněte. Vylepšete přehled o tom, co chcete, tím, že poskytnete pokyny, příklady nebo kombinaci těchto dvou. Pokud chcete, aby model seřadil seznam položek v abecedním pořadí nebo klasifikovala odstavec podle mínění, ukažte mu, že to chcete.
  • Zadejte kvalitní data. Pokud vytváříte klasifikátor nebo chcete, aby model dodržoval vzor, nezapomeňte uvést dostatek příkladů. Měli byste si také pročíst příklady. Model obvykle rozpozná pravopisné chyby a vrátí odpověď, ale může předpokládat, že chybně napsané chyby jsou úmyslné, což může ovlivnit odpověď.
  • Zkontrolujte nastavení. Nastavení temperature určují top_p , jak deterministický model generuje odpověď. Pokud ho požádáte o odpověď, která má pouze jednu správnou odpověď, nakonfigurujte tato nastavení na nižší úrovni. Pokud chcete různorodější odpovědi, můžete chtít nakonfigurovat nastavení na vyšší úrovni. Běžnou chybou je předpokládat, že tato nastavení jsou "chytrost" nebo "kreativita" ovládací prvky.

Alternativy

Vysvětlení konverzačního jazyka Azure je alternativou k sumarizátoru použitému tady. Hlavním účelem porozumění konverzačnímu jazyku je vytvářet modely, které predikují celkový záměr příchozí promluvy, extrahují z ní cenné informace a vytvářejí odpověď, která odpovídá tématu. Je užitečné v chatovacích aplikacích, když může odkazovat na existující znalostní báze najít návrh, který nejlépe odpovídá příchozí promluvě. Moc to nepomůže, když vstupní text nevyžaduje odpověď. Záměrem v této architektuře je vygenerovat krátký souhrn dlouhého textového obsahu. Podstata obsahu je popsána stručným způsobem a všechny důležité informace jsou reprezentovány.

Ukázkové scénáře

V tomto případě se shrnuje kolekce legislativních faktur, které prošly kongresem. Souhrn je vyladěný tak, aby byl blíže k souhrnu vygenerovanému člověkem, který se označuje jako základní souhrn pravdy .

K sumarizaci faktur se používá technika s nulovou výzvou. Výzva a nastavení se pak upraví tak, aby vygenerovaly různé souhrnné výstupy.

Datová sada

První datovou sadou je datová sada BillSum pro sumarizaci amerických kongresových a amerických státních faktur. Tento příklad používá pouze kongresové faktury. Data jsou rozdělená na 18 949 faktur, které se používají pro trénování, a 3 269 faktur, které se mají použít k testování. BillSum se zaměřuje na právní předpisy střední délky, které mají délku 5 000 až 20 000 znaků. Je vyčištěný a předzpracovaný.

Další informace o datové sadě a pokynech ke stažení najdete v tématu FiscalNote/BillSum na GitHubu.

Schéma BillSum

Schéma datové sady BillSum zahrnuje:

  • bill_id. Identifikátor faktury.
  • text. Text faktury.
  • summary. Human-written summary of the bill.
  • title. Název faktury.
  • text_len. Délka znaku faktury.
  • sum_len. Délka znaku souhrnu faktury.

V tomto případě text se použijí prvky a summary prvky.

Nulový snímek

Cílem je naučit model GPT-3 učit vstupy ve stylu konverzace. Koncový bod dokončení se používá k vytvoření rozhraní API Azure OpenAI a výzvy, která vygeneruje nejlepší souhrn faktury. Výzvy je důležité vytvořit pečlivě, aby extrahovali relevantní informace. K extrakci obecných souhrnů z daného vyúčtování se použije následující formát.

  • Předpona: Co chcete udělat.
  • Úvod do kontextu: Kontext.
  • Kontext: Informace potřebné k poskytnutí odpovědi. V tomto případě text, který se má shrnout.
  • Přípona: Zamýšlená forma odpovědi. Například odpověď, dokončení nebo souhrn.
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

Základní pravda: Zákon o daních z oblasti vzdělávání v oblasti vědy z roku 2007 - Mění vnitřní kód příjmů tak, aby umožňoval obecný daňový kredit obchodních daní za příspěvky majetku nebo služeb na základní a střední školy a pro výuku učitelů na podporu výuky v oblasti vědy, technologií, inženýrství nebo matematiky.

Shrnutí modelu s nulovým snímkem: National Science Education Tax Incentive for Businesses Act of 2007 by vytvořil nový daňový kredit pro firmy, které přispívají k vědeckému, technologickému, technickému a matematickému vzdělávání (STEM) na základní a střední úrovni školy. Kredit by se rovnal 100 % kvalifikovaných příspěvků STEM daňového poplatníka za rok zdanění. Kvalifikované příspěvky STEM by zahrnovaly školní příspěvky STEM, výdaje na externship učitele STEM a výdaje na školení učitelů STEM.

Pozorování: Model s nulovým snímkem vygeneruje stručný a generalizovaný souhrn dokumentu. Podobá se pravdu napsané člověkem a zachycuje stejné klíčové body. Je uspořádaná jako lidské shrnutí a zůstává zaměřená na tento bod.

Jemné ladění

Vyladění se zlepšuje při učení s nulovým snímkem tím, že trénuje více příkladů, než můžete zahrnout do výzvy, abyste dosáhli lepších výsledků na širším počtu úkolů. Po vyladění modelu nemusíte v příkazovém řádku zadávat příklady. Vyladění šetří peníze snížením počtu požadovaných tokenů a povolením požadavků na nižší latenci.

Na vysoké úrovni zahrnuje vyladění tyto kroky:

  • Připravte a nahrajte trénovací data.
  • Trénování nového jemně vyladěného modelu
  • Použijte jemně vyladěný model.

Další informace najdete v tématu Přizpůsobení modelu pomocí služby Azure OpenAI.

Příprava dat na vyladění

Tento krok umožňuje vylepšit model s nulovým snímkem tím, že do výzev, které se použijí k vyladění, začleníte do výzev výzvy. Tímto způsobem dáte modelu pokyny, jak přistupovat ke dvojicám výzvy a dokončení. V dolaďovacím modelu zobrazí výzvy výchozí bod, ze kterého se model může učit a používat k vytváření předpovědí. Tento proces umožňuje, aby model začal se základními znalostmi dat, která se pak dají postupně vylepšit, protože model je vystaven více datům. Výzvy navíc můžou modelu pomoct identifikovat vzory v datech, která by jinak mohla chybět.

Stejná technická struktura výzvy se používá také při odvozování, po dokončení trénování modelu, aby model rozpoznal chování, které se naučil během trénování, a může generovat dokončení podle pokynů.

#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)

Teď, když jsou data připravená k vyladění ve správném formátu, můžete začít s doladěním příkazů.

V dalším kroku můžete pomocí Rozhraní příkazového řádku OpenAI pomoct s některými kroky přípravy dat. Nástroj OpenAI ověřuje data, poskytuje návrhy a přeformátuje data.

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
Vyladění datové sady
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))
Vyhodnocení jemně vyladěného modelu

Tato část ukazuje, jak vyhodnotit jemně vyladěný model.

#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))

Základní pravda: Zákon o daních z oblasti vzdělávání v oblasti vědy z roku 2007 - Mění vnitřní kód příjmů tak, aby umožňoval obecný daňový kredit obchodních daní za příspěvky majetku nebo služeb na základní a střední školy a pro výuku učitelů na podporu výuky v oblasti vědy, technologií, inženýrství nebo matematiky.

Přehled jemně vyladěného modelu: Tato faktura poskytuje daňový kredit pro příspěvky do základních a středních škol, které využívají vědu, technologie, inženýrství a matematiku. Kredit se rovná 100 % kvalifikovaných příspěvků STEM provedených daňovými poplatníky během daňového roku. Kvalifikované příspěvky STEM zahrnují: (1) školní příspěvky STEM, (2) výdaje na externship učitele STEM a (3) výdaje na školení učitelů STEM. Tato faktura také poskytuje daňový kredit pro příspěvky na základní a střední školy, které využívají vědu, technologie, inženýrství nebo matematiku. Kredit se rovná 100 % kvalifikovaných příspěvků na služby STEM provedených daňovými poplatníky během daňového roku. Mezi příspěvky kvalifikovaných služeb STEM patří: (1) Příspěvky stem služby zaplacené nebo vzniklé během daňového roku za služby poskytované v USA nebo na vojenském základu mimo USA; a (2) STEM majetku přispěl během daňového roku, který je používán vzdělávací organizací umístěnou v USA nebo na vojenském základu mimo USA poskytování vzdělání ve třídách K-12 v oblasti vědy, technologií, inženýrství nebo matematiky.

Pozorování: Celkově vyladěný model dělá vynikající úlohu sumarizace faktury. Zachycuje žargon specifický pro doménu a klíčové body, které jsou reprezentovány, ale nejsou vysvětleny v lidské základní pravdě. Odlišuje se od modelu s nulovým snímkem tím, že poskytuje podrobnější a komplexnější souhrn.

Případ použití: Finanční sestavy

V tomto případě se k vytváření souhrnů finančních sestav používá technika s nulovou výzvou. Souhrn přístupu k souhrnům se pak použije k vygenerování výsledků.

Shrnutí přístupu k souhrnům

Při psaní výzev musí celkový součet výzvy GPT-3 a výsledné dokončení obsahovat méně než 4 000 tokenů, takže jste omezeni na několik stránek souhrnného textu. Pro dokumenty, které obvykle obsahují více než 4 000 tokenů (zhruba 3 000 slov), můžete použít souhrn přístupu souhrnů . Při použití tohoto přístupu se celý text nejprve rozdělí tak, aby splňoval omezení tokenu. Souhrny kratších textů se pak odvozují. V dalším kroku se vytvoří souhrn souhrnů. Tento případ použití ukazuje souhrn přístupu k souhrnům s modelem s nulovým snímkem. Toto řešení je užitečné pro dlouhé dokumenty. Kromě toho tato část popisuje, jak různé postupy přípravy výzev mohou lišit výsledky.

Poznámka:

Vyladění se v případě finančního použití nepoužije, protože pro dokončení daného kroku není k dispozici dostatek dat.

Datová sada

Datová sada pro tento případ použití je technická a zahrnuje klíčové kvantitativní metriky pro vyhodnocení výkonu společnosti.

Finanční datová sada zahrnuje:

  • url: Adresa URL finanční sestavy.
  • pages: Stránka v sestavě obsahující klíčové informace, které mají být shrnuty (1 indexováno).
  • completion: Základní shrnutí zprávy.
  • comments: Všechny další potřebné informace.

V tomto případě se sumarizuje finanční sestava Rathbone z datové sady. Rathbone je individuální investiční a majetková společnost pro soukromé klienty. Zpráva zvýrazňuje výkon Rathbone v roce 2020 a zmíní metriky výkonu, jako jsou zisk, FUMA a příjmy. Klíčové informace, které je třeba shrnout, jsou na stránce 1 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
Přístup s nulovým snímkem

Když použijete přístup s nulovým snímkem, nezadáte vyřešené příklady. Zadáte pouze příkaz a nevyřešený vstup. V tomto příkladu se použije model Pokyn. Tento model je speciálně určený k tomu, aby převzal instrukce a nahrál odpověď bez dalšího kontextu, což je ideální pro přístup s nulovým snímkem.

Po extrahování textu můžete pomocí různých výzev zjistit, jak ovlivňují kvalitu souhrnu:

#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
Výzvy
  • Jak vidíte, model může vytvářet metriky, které nejsou uvedené v původním textu.

    Navrhované řešení: Tento problém můžete vyřešit změnou výzvy.

  • Souhrn se může zaměřit na jednu část článku a zanedbávat další důležité informace.

    Navrhované řešení: Můžete vyzkoušet souhrn přístupu k souhrnům. Rozdělte sestavu do oddílů a vytvořte menší souhrny, které pak můžete shrnout, abyste vytvořili souhrn výstupu.

Tento kód implementuje navrhovaná řešení:

# 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))

Vstupní výzva obsahuje původní text z finanční zprávy Rathbone pro konkrétní rok.

Základní pravda: Rathbones oznámil výnosy ve výši 366,1 m v roce 2020, od 348,1m v roce 2019, a zvýšení základního zisku před zdaněním na 92,5 m z 88,7 min. Aktiva pod vedením vzrostla o 8,5 % z 50,4bn na 54,7bn, přičemž aktiva ve správě bohatství vzrostla o 4,4% na 44,9bn. Čisté toky byly 2,1bn v roce 2020 ve srovnání s 600m v předchozím roce řízených především 1,5bn toky 1,5bn do svých finančních prostředků a 400 milionů dolarů z důvodu převodu aktiv z Barclays Wealth.

Nulový souhrn výstupu souhrnů: Rathbones v roce 2020 dosáhl silného výkonu, přičemž finanční prostředky pod vedením a správou (FUMA) vzrostly o 8,5 % na dosažení 54,7 miliardy DOLARŮ na konci roku. Základní zisk před zdaněním se zvýšil o 4,3 % na 92,5 milionu KČ a dosáhl základní provozní marže 25,3 %. Celkový čistý tok ve skupině byl 2,1 miliardy USD, což představuje míru růstu 4,2 %. Zisk před zdaněním za rok byl 43,8 milionu KČ, přičemž základní příjmy na podíl celkem 49,6p. Provozní výnos pro rok byl před předchozím rokem 5,2 %, celkem 366,1 milionu KČ.

Pozorování: Souhrn přístupu k souhrnům vygeneruje skvělou sadu výsledků, která řeší problémy, ke kterým došlo zpočátku při poskytnutí podrobnějšího a komplexnějšího souhrnu. Dělá skvělou úlohu zachycení žargonu specifického pro doménu a klíčových bodů, které jsou reprezentovány v základní pravdě, ale nejsou dobře vysvětleny.

Model s nulovým snímkem funguje dobře pro shrnutí hlavních dokumentů. Pokud jsou data specifická pro konkrétní odvětví nebo téma, obsahuje žargon specifický pro konkrétní odvětví nebo vyžaduje znalost specifickou pro konkrétní odvětví, je nejlepší provést vyladění. Tento přístup například funguje dobře pro lékařské časopisy, právní formuláře a finanční výkazy. Pomocí několika snímků můžete místo nulového snímku poskytnout modelu příklady, jak formulovat souhrn, abyste se mohli naučit napodobovat poskytnutý souhrn. V případě nulového postupu toto řešení model nepřetrénuje. Znalosti modelu vycházejí z trénování GPT-3. GPT-3 je trénován s téměř všemi dostupnými daty z internetu. Funguje dobře pro úlohy, které nevyžadují konkrétní znalosti.

Doporučení

Existuje mnoho způsobů, jak přistupovat k sumarizaci pomocí GPT-3, včetně nulového snímku, několika snímků a jemného ladění. Přístupy vytvářejí souhrny různých kvalit. Můžete prozkoumat, který přístup dosáhne nejlepších výsledků pro zamýšlený případ použití.

Na základě pozorování o testování, které jsou uvedeny v tomto článku, tady je několik doporučení:

  • Nulový snímek je nejvhodnější pro běžné dokumenty, které nevyžadují konkrétní znalosti domény. Tento přístup se snaží zachytit všechny základní informace na vysoké úrovni stručným způsobem, který je podobný člověku, a poskytuje souhrnný přehled standardních hodnot vysoké kvality. Zero-shot vytvoří vysoce kvalitní souhrn pro právní datovou sadu, která se používá v testech v tomto článku.
  • Několik snímků je obtížné použít pro sumarizaci dlouhých dokumentů, protože při zadání ukázkového textu dojde k překročení omezení tokenu. Místo toho můžete použít souhrn souhrnů s nulovým snímkem pro dlouhé dokumenty nebo zvýšit datovou sadu, abyste mohli úspěšně doladit. Souhrn přístupu souhrnů generuje vynikající výsledky pro finanční datovou sadu, která se používá v těchto testech.
  • Vyladění je nejužitečnější pro technické případy použití nebo případy použití specifické pro doménu, pokud tyto informace nejsou snadno dostupné. K dosažení nejlepších výsledků s tímto přístupem potřebujete datovou sadu, která obsahuje několik tisíc vzorků. Vyladění zachycuje souhrn několika šablonami a snaží se přizpůsobit způsobu, jakým datová sada prezentuje souhrny. Pro právní datovou sadu tento přístup generuje vyšší kvalitu souhrnu než ten, který vytvořil přístup s nulovým snímkem.

Vyhodnocení souhrnu

K vyhodnocení výkonu modelů sumarizace existuje několik technik.

Tady je několik:

ROUGE (rekapacitně orientované podstudie pro vyhodnocení Gistingu). Tato technika zahrnuje míry pro automatické určení kvality souhrnu porovnáním s ideálními souhrny vytvořenými lidmi. Míry počítají počet překrývajících se jednotek, jako jsou n-gram, sekvence slov a dvojice slov, mezi vyhodnoceným souhrnem vygenerovaným počítačem a ideálními souhrny.

Tady je příklad:

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. Tato technika vypočítá skóre podobnosti tak, že zarovná vygenerované souhrny a souhrny odkazů na úrovni tokenu. Zarovnání tokenů se vypočítává greedily za účelem maximalizace kosinus podobnosti mezi kontextově vloženými tokeny z BERT.

Tady je příklad:

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)

Matice podobnosti. Matice podobnosti představuje podobnosti mezi různými entitami v vyhodnocení souhrnu. Můžete ho použít k porovnání různých souhrnů stejného textu a měření jejich podobnosti. Představuje dvojrozměrnou mřížku, kde každá buňka obsahuje míru podobnosti mezi dvěma souhrny. Podobnost můžete měřit pomocí různých metod, jako je kosinus podobnost, podobnost Jaccard a upravit vzdálenost. Matici pak použijete k porovnání souhrnů a určení toho, který z nich je nejpřesnější reprezentací původního textu.

Tady je ukázkový příkaz, který získá matici podobnosti porovnání dvou podobných vět BERTScore:

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

První věta: "Kočka je na verandě stromem", se označuje jako kandidát. Druhá věta se označuje jako odkaz. Příkaz používá BERTScore k porovnání vět a vygenerování matice.

Následující matice zobrazí výstup vygenerovaný předchozím příkazem:

Diagram znázorňující příklad matice podobnosti

Další informace naleznete v tématu SummEval: Reevalating Summarization Evaluation. Sadu nástrojů PyPI pro shrnutí najdete v tématu Summ-eval 0.892.

Přispěvatelé

Tento článek spravuje Microsoft. Původně byla napsána následujícími přispěvateli.

Hlavní autor:

Další přispěvatelé:

Pokud chcete zobrazit neveřejné profily LinkedIn, přihlaste se na LinkedIn.

Další kroky