Predtrénované modely extrakcie entít založené na spaCy alebo NLTK poskytujú skvelé výsledky, ale vyžadujú zdĺhavý proces anotácie a trénovania, aby bolo možné odhaliť iné ako pôvodné entity, ako sú názvy pracovných miest, čísla DPH, lieky atď. Vďaka veľkým jazykovým modelom, ako sú GPT-3, GPT-J a GPT-NeoX, je teraz možné extrahovať akýkoľvek typ entít vďaka niekoľkonásobnému učeniu bez akejkoľvek anotácie a školenia. V tomto článku si ukážeme, ako na to.
NER (extrakcia entít) je v podstate o extrakcii štruktúrovaných informácií z neštruktúrovaného textu. Ak ste v oblasti NER nováčik, môžete si najprv prečítať náš krátky úvod: úvod do NER.
SpaCy sa v posledných rokoch stala de facto štandardom pre NER (pozrite si webovú stránku spaCy). SpaCy je veľmi atraktívny framework, pretože sa jednoducho používa a vďaka svojej rýchlosti je vhodný na produkčné použitie.
SpaCy je rámec na spracovanie prirodzeného jazyka v jazyku Python, ktorý ponúka mnoho predtrénovaných modelov vo viacerých jazykoch, takže je ľahké extrahovať niekoľko typov entít (spoločnosti, mestá, adresy, dátumy atď.) vo vašom vlastnom jazyku bez toho, aby ste museli trénovať vlastný model.
NLTK je tiež zaujímavou voľbou na extrakciu entít pomocou jazyka Python, ale štandardne navrhuje menej entít a vo všeobecnosti sa NLTK neodporúča na produkciu (je to skôr vzdelávací a výskumný rámec).
Pri týchto rámcoch však rýchlo narazíte na limit: počet natívne podporovaných entít je obmedzený. Väčšina spoločností chce využiť NER na získavanie špecifických obchodných informácií, ako sú informácie o osobách, finančné údaje, lekárske ošetrenia atď. Samozrejme, tieto entity nie sú predvolene podporované predtrénovanými modelmi spaCy, takže aby ste to dosiahli, musíte si vytvoriť vlastný súbor údajov a vytrénovať z neho vlastný model.
Trénovanie vlastného modelu spaCy je dlhý a zdĺhavý proces anotácie: na vytvorenie obrovského súboru dobrých príkladov a ich anotáciu musí spolupracovať jeden alebo niekoľko ľudí. Na to, aby sa model správne naučil, je potrebný veľmi veľký objem príkladov. Existujú dobré anotačné nástroje (napríklad Prodigy od spoločnosti spaCy), ale stále je to bolestivá úloha, kvôli ktorej sa mnohé projekty NLP prerušujú.
Ilustrácia anotácie
Dobrá správa: so vznikom veľkých jazykových modelov, ako sú GPT-3, GPT-J a GPT-NeoX, je teraz možné extrahovať akékoľvek entity bez anotovania a trénovania nového modelu!
Veľké jazykové modely na generovanie textov sa začali objavovať nedávno s GPT-3 (Viac informácií o GPT-3 na webovej stránke OpenAI). Keď spoločnosť OpenAI vydala svoj model GPT-3 pozostávajúci zo 175 miliárd parametrov, bola to revolúcia, pretože otvorila cestu mnohým špičkovým aplikáciám umelej inteligencie založeným na spracovaní prirodzeného jazyka bez potreby ďalšieho školenia.
Prvotným cieľom modelov GPT, ako je GPT-3, je generovanie textu: jednoducho zadáte vstupné údaje modelu a necháte ho, aby za vás vygeneroval zvyšok. Na základe generovania textu možno dosiahnuť takmer akýkoľvek prípad použitia spracovania prirodzeného jazyka: klasifikáciu, sumarizáciu, konverzačnú AI, parafrázovanie... a samozrejme extrakciu entít!
Keďže GPT-3 nie je model s otvoreným zdrojovým kódom, komunita open-source pracovala na alternatívach k GPT-3 a teraz máme dva skvelé ekvivalenty s otvoreným zdrojovým kódom: GPT-J a GPT-NeoX. Stále nie sú také veľké ako GPT-3, ale nepochybne je len otázkou času, kedy komunita open-source doženie OpenAI.
Správne využitie týchto modelov si vyžaduje novú techniku nazývanú "učenie sa niekoľkými zábermi".
Tieto veľké modely GPT sú také veľké, že sa od vás môžu veľmi rýchlo učiť.
Povedzme, že chcete, aby vám GPT-3 vygeneroval krátky opis produktu. Tu je príklad bez učenia niekoľkých snímok:
Generate a product description containing these specific keywords: t-shirt, men, $50
Odpoveď, ktorú dostanete, bude zbytočná. Mohlo by to byť napríklad takto:
Generate a product description containing these specific keywords: t-shirt, men, $50 and short.
The product description needs to be a few words long. Don’t use plurals, use the keywords in the order they are
Dobrá správa: oveľa lepšie výsledky dosiahnete, ak modelu jednoducho zadáte niekoľko príkladov!
Generate a product description containing specific keywords.
Keywords: shoes, women, $59
Result: Beautiful shoes for women at the price of $59.
###
Keywords: trousers, men, $69
Result: Modern trousers for men, for $69 only.
###
Keywords: gloves, winter, $19
Result: Amazingly hot gloves for cold winters, at $19.
###
Keywords: gpu, gaming, $1499
Result:
Výsledok bude vyzerať asi takto:
Generate a product description containing specific keywords.
Keywords: shoes, women, $59
Result: Beautiful shoes for women at the price of $59.
###
Keywords: trousers, men, $69
Result: Modern trousers for men, for $69 only.
###
Keywords: gloves, winter, $19
Result: Amazingly hot gloves for cold winters, at $19.
###
Keywords: gpu, gaming, $1,499
Result: The best gaming GPU on the market, at the price of $1,499 only.
Ako vidíte, odozva modelu je teraz úplne na mieste vďaka 3 príkladom, ktoré sme mu najprv poskytli. Napriek tomu tento model nikdy nebol trénovaný na tento druh úlohy generovania opisu produktu. Práve v tom spočíva technika "učenia na pár záberov": vykonávate "transferové učenie" za behu len s niekoľkými príkladmi. Aby ste dosiahli takýto výsledok, zvyčajne očakávate, že model spracovania prirodzeného jazyka budete trénovať s tonami príkladov, ale nie tu.
Teraz vykonáme extrakciu entít pomocou učenia s niekoľkými zábermi.
Povedzme, že chcete extrahovať názvy pracovných miest z webových stránok. Jednoducho uveďte niekoľko príkladov extrakcie názvov pracovných pozícií predtým, ako zadáte skutočnú požiadavku:
Extract job titles from the following sentences.
Sentence: John Doe has been working for Microsoft for 20 years as a Linux Engineer.
Job title: Linux Engineer
###
Sentence: John Doe has been working for Microsoft for 20 years and he loved it.
Job title: none
###
Sentence: Marc Simoncini | Director | Meetic
Job title: Director
###
Sentence: Franck Riboud was born on 7 November 1955 in Lyon. He is the son of Antoine Riboud, who transformed the former European glassmaker BSN Group into a leading player in the food industry. He is the CEO at Danone.
Job title: CEO
###
Sentence: Damien is the CTO of Platform.sh, he was previously the CTO of Commerce Guys, a leading ecommerce provider.
Job title:
Výsledok bude nasledovný:
Extract job titles from the following sentences.
Sentence: John Doe has been working for Microsoft for 20 years as a Linux Engineer.
Job title: Linux Engineer
###
Sentence: John Doe has been working for Microsoft for 20 years and he loved it.
Job title: none
###
Sentence: Marc Simoncini | Director | Meetic
Job title: Director
###
Sentence: Franck Riboud was born on 7 November 1955 in Lyon. He is the son of Antoine Riboud, who transformed the former European glassmaker BSN Group into a leading player in the food industry. He is the CEO at Danone.
Job title: CEO
###
Sentence: Damien is the CTO of Platform.sh, he was previously the CTO of Commerce Guys, a leading ecommerce provider.
Job title: CTO
Ako ste si všimli, musíme si uvedomiť, ako vytvárame príklady s niekoľkými zábermi. Môže sa stať, že sa nenájde vôbec žiadna pracovná pozícia, preto sme vytvorili príklad, ktorý vracia hodnotu "none" (zabráni sa tak falošným poplachom). Možno chcete získať niekoľko názvov pracovných miest naraz? V takom prípade je dôležité vytvoriť príklady, ktoré vrátia aj niekoľko názvov pracovných miest (napríklad názvy pracovných miest oddelené čiarkou).
Ešte lepšie výsledky dosiahnete, ak pridáte ešte viac príkladov. A je dôležité, aby vaše príklady boli čo najbližšie k vašej skutočnej konečnej požiadavke. Ak napríklad viete, že budete analyzovať celé odseky namiesto obyčajných viet, je najlepšie vytvoriť príklady aj s odsekmi.
Ak nemáte prístup k modelu GPT, môžete jednoducho použiť rozhranie API služby NLP Cloud. K dispozícii je niekoľko klientov (Python, Go, Node.js, Ruby, PHP...). Ukážeme si tu príklad použitia GPT-J s klientom Python:
import nlpcloud
client = nlpcloud.Client("gpt-j", "your API token", gpu=True)
client.generation("""Extract job titles from the following sentences.
Sentence: John Doe has been working for Microsoft for 20 years as a Linux Engineer.
Job title: Linux Engineer
###
Sentence: John Doe has been working for Microsoft for 20 years and he loved it.
Job title: none
###
Sentence: Marc Simoncini | Director | Meetic
Job title: Director
###
Sentence: Franck Riboud was born on 7 November 1955 in Lyon. He is the son of Antoine Riboud, who transformed the former European glassmaker BSN Group into a leading player in the food industry. He is the CEO at Danone.
Job title: CEO
###
Sentence: Damien is the CTO of Platform.sh, he was previously the CTO of Commerce Guys, a leading ecommerce provider.
Job title:""",
top_p=0.1,
length_no_input=True,
remove_input=True,
end_sequence="###",
remove_end_sequence=True
)
Výsledkom bude: CTO
Dovoľte mi, aby som vám v krátkosti vysvetlil parametre generovania textu, ktoré sme práve použili.
Nastavili sme veľmi nízku hornú hodnotu p, pretože nechceme, aby GPT-J vytváral príliš originálne výsledky: chceme len, aby sa držal toho, čo videl vo vašej požiadavke.
"length_no_input" znamená, že hodnota maximálnej dĺžky by nemala zohľadňovať vstupný text.
"remove_input" znamená, že vstupný text by sa mal z výsledku odstrániť.
"end_sequence" znamená, že keď sa model stretne s týmto znakom, mal by prestať generovať text. Keďže v našich príkladoch s niekoľkými zábermi sme na koniec každej odpovede pridali "###", model po vygenerovaní odpovede automaticky vygeneruje "###" a tam sa zastaví.
"remove_end_sequence" znamená, že chceme z odpovede odstrániť "###".
Ďalšie podrobnosti nájdete v dokumentácii k službe NLP Cloud: pozrite si ho tu.
Extrakcia entít pomocou modelu GPT poskytuje veľkú voľnosť, pretože akúkoľvek novú entitu možno extrahovať za behu, aj keď na to model nebol vycvičený!
Má to však svoju cenu: tieto veľké jazykové modely sú obrovské a relatívne pomalé.
Ak chcete napríklad používať GPT-J alebo GPT-NeoX, bude to vyžadovať obrovský GPU s veľkou pamäťou VRAM, napríklad NVIDIA RTX A6000 alebo A40. A bude tu určité oneskorenie (extrakcia entity trvá približne 500 ms). Naopak, spaCy alebo NLTK budú oveľa rýchlejšie a menej nákladné z hľadiska infraštruktúry.
V roku 2022 je možné veľmi jednoducho vykonávať pokročilé NER bez akejkoľvek anotácie a školenia! To výrazne pomôže spoločnostiam rýchlejšie realizovať ich projekty extrakcie entít a umožní to aj viac špičkových aplikácií založených na spracovaní prirodzeného jazyka.
Veľké jazykové modely ako GPT-3, GPT-J a GPT-NeoX sú však nákladné, preto by ste nemali podceňovať náklady na infraštruktúru.
Dúfam, že vám tento článok pomôže ušetriť čas a peniaze!
Julien Salinas
Technický riaditeľ spoločnosti NLP Cloud