Predhodno usposobljeni modeli ekstrakcije entitet, ki temeljijo na spaCy ali NLTK, dajejo odlične rezultate, vendar zahtevajo zamudno anotacijo in postopek usposabljanja, da bi odkrili neavtohtone entitete, kot so naslovi delovnih mest, številke DDV, zdravila itd. Z velikimi jezikovnimi modeli, kot so GPT-3, GPT-J in GPT-NeoX, je zdaj mogoče izluščiti vse vrste entitet s pomočjo učenja z nekaj posnetki, brez anotacije in usposabljanja. V tem članku bomo pokazali, kako to storiti.
NER (ekstrakcija entitet) je pravzaprav ekstrakcija strukturiranih informacij iz nestrukturiranega besedila. Če se z NER šele seznanjate, si najprej preberite naš kratek uvod: uvod v NER.
SpaCy je v zadnjih letih postal de facto standard za NER (Oglejte si spletno stran spaCy). SpaCy je zelo privlačno ogrodje, saj je enostavno za uporabo, zaradi svoje hitrosti pa je primerno za produkcijsko uporabo.
SpaCy je ogrodje za obdelavo naravnega jezika v Pythonu, ki ponuja številne vnaprej usposobljene modele v več jezikih, tako da je enostavno pridobiti več vrst entitet (podjetja, mesta, naslove, datume itd.) v svojem jeziku, ne da bi bilo treba usposobiti lasten model.
NLTK je prav tako zanimiva izbira za ekstrakcijo entitet s Pythonom, vendar privzeto predlaga manj entitet, na splošno pa NLTK ni priporočljiv za produkcijo (je bolj izobraževalno in raziskovalno ogrodje).
Vendar boste pri teh ogrodjih hitro naleteli na omejitev: število nativno podprtih entitet je omejeno. Večina podjetij želi izkoristiti NER za pridobivanje specifičnih poslovnih informacij, kot so informacije o osebah, finančni podatki, zdravstvene obravnave itd. Te entitete seveda niso privzeto podprte s predhodno usposobljenimi modeli spaCy, zato morate v ta namen ustvariti svoj nabor podatkov in iz njega usposobiti svoj model.
Usposabljanje lastnega modela spaCy je dolgotrajen in naporen postopek anotiranja: ena ali več oseb mora sodelovati, da bi ustvarili velik nabor dobrih primerov in jih anotirali. Za pravilno učenje modela je potrebna zelo velika količina primerov. Obstajajo dobra orodja za anotacijo (kot je Prodigy, spaCy), vendar je to še vedno boleče opravilo, zaradi katerega se veliko projektov NLP prekine.
Ilustracija anotacije
Dobra novica: z razvojem velikih jezikovnih modelov, kot so GPT-3, GPT-J in GPT-NeoX, je zdaj mogoče izluščiti vse entitete brez anotacije in usposabljanja novega modela!
Veliki jezikovni modeli za ustvarjanje besedil so se začeli pojavljati pred kratkim z GPT-3 (več o GPT-3 na spletnem mestu OpenAI). Ko je organizacija OpenAI objavila svoj model GPT-3, sestavljen iz 175 milijard parametrov, je to pomenilo revolucijo, saj je odprlo pot številnim vrhunskim aplikacijam umetne inteligence, ki temeljijo na obdelavi naravnega jezika, ne da bi za to potrebovali dodatno usposabljanje.
Začetni cilj modelov GPT, kot je GPT-3, je generiranje besedila: preprosto dajte vhodni podatek modelu in pustite, da za vas generira preostalo. Na podlagi generiranja besedila je mogoče doseči skoraj vse primere uporabe obdelave naravnega jezika: klasifikacijo, povzemanje, pogovorno umetno inteligenco, parafraziranje ... in seveda ekstrakcijo entitet!
Ker GPT-3 ni odprtokodni model, je odprtokodna skupnost pripravila alternative GPT-3 in zdaj imamo dve odlični odprtokodni ustreznici: GPT-J in GPT-NeoX. Še vedno nista tako velika kot GPT-3, vendar je nedvomno le vprašanje časa, kdaj bo odprtokodna skupnost dohitela OpenAI.
Za pravilno uporabo teh modelov je potrebna nova tehnika, imenovana "učenje z nekaj posnetki".
Ti veliki modeli GPT so tako veliki, da se lahko zelo hitro učijo od vas.
Recimo, da želite, da GPT-3 za vas ustvari kratek opis izdelka. Tukaj je primer brez učenja z nekaj posnetki:
Generate a product description containing these specific keywords: t-shirt, men, $50
Odgovor, ki ga boste dobili, bo neuporaben. Lahko je na primer takšen:
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
Dobra novica: veliko boljše rezultate lahko dosežete tako, da modelu preprosto podate nekaj primerov!
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:
Rezultat bo približno takšen:
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.
Kot lahko vidite, je odziv modela zdaj popolnoma skladen z namenom, zahvaljujoč trem primerom, ki smo mu jih dali na začetku. Vendar ta model ni bil nikoli usposobljen za tovrstno nalogo ustvarjanja opisov izdelkov. To je bistvo tehnike "učenja z nekaj posnetki": "učenje s prenosom" izvajate sproti samo z nekaj primeri. Da bi dosegli takšen rezultat, običajno pričakujete, da boste model za obdelavo naravnega jezika usposobili s tonami primerov, vendar ne v tem primeru.
Zdaj bomo izvedli ekstrakcijo entitet s pomočjo učenja z nekaj posnetki.
Recimo, da želite iz spletnih mest izluščiti naslove delovnih mest. Pred dejanskim zahtevkom navedite nekaj primerov izpisa naslovov delovnih mest:
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:
Rezultat bo naslednji:
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
Kot ste opazili, moramo biti pri pripravi primerov z nekaj posnetki pametni. Lahko se zgodi, da sploh ne najdemo nobenega naslova delovnega mesta, zato smo ustvarili primer, ki vrača "none" (s tem se izognemo lažno pozitivnim rezultatom). Morda želite izluščiti več naslovov delovnih mest hkrati? V tem primeru je pomembno, da ustvarite tudi primere, ki vračajo več naslovov delovnih mest (na primer naslovi delovnih mest, ločeni z vejico).
Še boljše rezultate boste dosegli, če boste dodali še več primerov. Pri tem je pomembno, da so vaši primeri čim bolj podobni vaši dejanski končni zahtevi. Če na primer veste, da boste analizirali celotne odstavke in ne zgolj stavke, je najbolje, da ustvarite primere tudi z odstavki.
Če nimate dostopa do modela GPT, lahko preprosto uporabite API NLP Cloud. Na voljo je več odjemalcev (Python, Go, Node.js, Ruby, PHP ...). Prikažimo primer uporabe GPT-J z odjemalcem 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
)
Rezultat bo: CTO
Naj vam na kratko razložim parametre za ustvarjanje besedila, ki smo jih pravkar uporabili.
Nastavili smo zelo nizko najvišjo vrednost p, ker ne želimo, da bi program GPT-J ustvaril preveč izvirne rezultate: želimo le, da se drži tistega, kar je videl v vaši zahtevi.
"length_no_input" pomeni, da vrednost največje dolžine ne sme upoštevati vhodnega besedila.
"remove_input" pomeni, da je treba vnosno besedilo odstraniti iz rezultata.
"end_sequence" pomeni, da mora model ob srečanju s tem znakom prenehati ustvarjati besedilo. Ker smo v naših primerih z nekaj posnetki na koncu vsakega odgovora dodali "###", bo model po generiranju odgovora samodejno generiral "###" in se tam ustavil.
"remove_end_sequence" pomeni, da želimo iz odgovora odstraniti "###".
Več podrobnosti si lahko ogledate v dokumentaciji NLP Cloud: Oglejte si ga tukaj.
Izločanje entitet z modelom GPT daje veliko svobode, saj lahko vsako novo entiteto izločite sproti, tudi če model za to ni bil usposobljen!
Vendar je to povezano s ceno: ti veliki jezikovni modeli so ogromni in razmeroma počasni.
Če želite na primer uporabiti GPT-J ali GPT-NeoX, boste potrebovali velik grafični procesor z veliko pomnilnika VRAM, na primer NVIDIA RTX A6000 ali A40. Poleg tega bo prišlo do zakasnitve (ekstrakcija entitete traja približno 500 ms). Nasprotno pa bosta spaCy ali NLTK veliko hitrejša in manj draga z vidika infrastrukture.
Leta 2022 je mogoče zelo enostavno izvajati napredne NER brez kakršne koli anotacije in usposabljanja! To bo podjetjem v veliko pomoč pri hitrejši izvedbi njihovih projektov ekstrakcije entitet, omogoča pa tudi bolj napredne aplikacije, ki temeljijo na obdelavi naravnega jezika.
Vendar so veliki jezikovni modeli, kot so GPT-3, GPT-J in GPT-NeoX, dragi, zato ne smete podcenjevati stroškov infrastrukture.
Upam, da vam bo ta članek pomagal prihraniti čas in denar!
Julien Salinas
Tehnični direktor v podjetju NLP Cloud