Võitlevad tehisintellekti või täieliku arendusega? Meie eksperdid on siin, et teid juhendada: kohandatud nõuanded, tehniline integratsioon ja palju muud. Võtke ühendust aadressil [email protected].

Few-shot NER: Entiteetide väljavõtmine ilma annotatsioonita ja GPT-l põhinev treening

SpaCy või NLTK-l põhinevad eelnevalt treenitud entiteedi ekstraheerimise mudelid annavad häid tulemusi, kuid nõuavad tüütut annoteerimis- ja treeningprotsessi, et tuvastada mittenatiivsed entiteedid, nagu ametinimetused, käibemaksukohustuslase numbrid, ravimid jne. Tänu suurtele keelemudelitele, nagu GPT-3, GPT-J ja GPT-NeoX, on nüüd võimalik ekstraheerida mis tahes tüüpi üksusi tänu väheste sammude õppimisele, ilma annoteerimise ja treeninguta. Selles artiklis näitame, kuidas seda teha.

NER (entiteedi väljavõtte) on põhimõtteliselt struktureeritud teabe väljavõtte struktureerimata tekstist. Kui te olete NER-i uus kasutaja, võite kõigepealt lugeda meie lühitutvustust: sissejuhatus NER-i.

NER spaCy ja NLTK abil: traditsiooniline viis

SpaCy on viimaste aastate jooksul muutunud de facto NERi standardiks. (vaata spaCy veebilehte). SpaCy on väga atraktiivne raamistik, sest seda on lihtne kasutada ja selle kiirus muudab selle hästi sobivaks tootmiskasutuseks.

SpaCy on Python'i loodusliku keele töötlemise raamistik, mis pakub välja palju eelnevalt treenitud mudeleid mitmes keeles, nii et on lihtne ekstraheerida mitmeid entiteeditüüpe (ettevõtted, linnad, aadressid, kuupäevad jne) oma keeles, ilma et oleks vaja treenida oma mudelit.

NLTK on samuti huvitav valik Pythoni keele abil toimuvaks entiteetide ekstraheerimiseks, kuid see pakub vaikimisi vähem entiteete ja üldiselt ei soovitata NLTK-d kasutada tootmises (see on pigem haridus- ja teadusraamistik).

Kuid nende raamistike puhul jõuate kiiresti piirini: natiivselt toetatud üksuste arv on piiratud. Enamik ettevõtteid soovib kasutada NERi selleks, et eraldada konkreetset äriteavet, näiteks isikuandmeid, finantsandmeid, raviandmeid jne. Loomulikult ei toeta spaCy eeltreenitud mudelid neid üksusi vaikimisi, seega tuleb selleks luua oma andmekogum ja treenida sellest oma mudel.

Oma spaCy mudeli treenimine on pikk ja tüütu annoteerimisprotsess: üks või mitu inimest peavad tegema koostööd, et luua suur hulk häid näiteid ja neid annoteerida. Selleks, et mudel saaks korralikult õppida, on vaja väga suurt hulka näiteid. On olemas head annotatsioonivahendid (näiteks Prodigy, spaCy), kuid see on endiselt valulik ülesanne, mille tõttu paljud NLP-projektid katkestatakse.

Kommentaaride illustratsioon

Hea uudis: suurte keelemudelite nagu GPT-3, GPT-J ja GPT-NeoX levikuga on nüüd võimalik eraldada mis tahes üksusi ilma annoteerimata ja uut mudelit treenimata!

Teksti genereerimine GPT-3, GPT-J ja GPT-NeoX abil

Suured keelemudelid teksti genereerimiseks on hakanud hiljuti ilmuma koos GPT-3-ga (vaata GPT-3 kohta lähemalt OpenAI veebisaidilt). Kui OpenAI avaldas oma GPT-3 mudeli, mis koosneb 175 miljardist parameetrist, oli see revolutsioon, sest see sillutas teed paljudele tipptasemel tehisintellekti rakendustele, mis põhinevad loomulikul keeletöötlusel, ilma et oleks vaja täiendavat koolitust.

GPT-mudelite, nagu GPT-3, esialgne eesmärk on teksti genereerimine: andke mudelile lihtsalt sisend ja laske tal ülejäänud osa genereerida. Teksti genereerimise põhjal saab saavutada peaaegu kõiki loomuliku keeletöötluse kasutusjuhtumeid: klassifitseerimine, kokkuvõtete tegemine, vestluslik tehisintellekt, parafraseerimine... ja muidugi entiteetide väljavõtmine!

Kuna GPT-3 ei ole avatud lähtekoodiga mudel, on avatud lähtekoodiga kogukond töötanud GPT-3 alternatiivide kallal ja nüüd on meil 2 suurepärast avatud lähtekoodiga vastet: GPT-J ja GPT-NeoX. Need ei ole veel nii suured kui GPT-3, kuid kahtlemata on vaid aja küsimus, millal avatud lähtekoodiga kogukond OpenAI-le järele jõuab.

Nende mudelite nõuetekohaseks kasutamiseks on vaja uut tehnikat, mida nimetatakse "mõne pildi õppimiseks".

Vähese laskmise õppimine

Need suured GPT-mudelid on nii suured, et nad suudavad väga kiiresti sinult õppida.

Oletame, et soovite, et GPT-3 genereeriks teile lühikese tootekirjelduse. Siin on näide ilma paarikümnenda õppeta:

Generate a product description containing these specific keywords: t-shirt, men, $50

Vastus, mille te saate, on kasutu. See võib olla näiteks midagi sellist:

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

Hea uudis: sa võid saavutada palju paremaid tulemusi, kui annad lihtsalt paar näidet mudelile!

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:

Tulemus on umbes selline:

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.

Nagu näete, on mudeli reaktsioon nüüd täiesti eesmärgipärane, tänu 3 näite, mida me kõigepealt andsime. Ometi ei ole seda mudelit kunagi treenitud sellise tootekirjelduse genereerimise ülesande jaoks. See ongi see, mis on "mõne pildi õppimise" tehnika: te teostate "ülekandeõpet" lennult vaid paari näite abil. Sellise tulemuse saavutamiseks eeldatakse tavaliselt, et loomulikku keeletöötlusmudelit treenitakse tonnide näidetega, kuid mitte siin.

Entiteetide väljavõtteerimine koos Few-shot Learning'iga

Nüüd teostame üksuste ekstraheerimise tänu paarikaupa õppimisele.

Oletame, et soovite veebilehtedelt tööde nimetusi välja võtta. Enne tegeliku taotluse esitamist andke lihtsalt paar näite ametinimetuste väljavõttest:

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:

Tulemuseks on järgmine:

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

Nagu te märkasite, peame olema targad, kuidas me oma paarikaupa tehtud näiteid teeme. Võib juhtuda, et ühtegi ametinimetust ei leita, mistõttu lõime näite, mis tagastab "none" (see väldib valepositiivseid tulemusi). Võib-olla soovite korraga mitu ametinimetust välja võtta? Sellisel juhul on oluline luua näited, mis tagastavad samuti mitu ametinimetust (näiteks komadega eraldatud ametinimetused).

Saate veelgi paremaid tulemusi, kui lisate veelgi rohkem näiteid. Ja on oluline, et teie näited oleksid võimalikult lähedased teie tegelikule lõplikule taotlusele. Näiteks kui te teate, et te kavatsete analüüsida terveid lõike, mitte lihtsalt lauseid, siis on kõige parem luua ka lõike sisaldavaid näiteid.

Kui teil ei ole juurdepääsu GPT-mudelile, võite lihtsalt kasutada NLP Cloud API-d. Saadaval on mitu klienti (Python, Go, Node.js, Ruby, PHP...). Näitame siinkohal näidet, kus kasutatakse GPT-J-d Pythoni kliendiga:

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
)

Tulemuseks on: CTO

Lubage mul anda teile kiire selgitus äsja kasutatud teksti genereerimise parameetrite kohta.

Me seadsime väga madala ülemise p-väärtuse, sest me ei taha, et GPT-J looks liiga originaalseid tulemusi: me tahame, et ta jääks selle juurde, mida ta teie taotluses nägi.

"length_no_input" tähendab, et maksimaalse pikkuse väärtus ei tohiks arvesse võtta sisestatud teksti.

"remove_input" tähendab, et sisestatud tekst tuleks tulemusest eemaldada.

"end_sequence" tähendab, et kui mudel kohtub selle märgiga, peaks ta lõpetama teksti genereerimise. Kuna meie paarikümnes näites lisasime iga vastuse lõppu "###", siis genereerib mudel pärast vastuse genereerimist automaatselt "###" ja lõpetab selle.

"remove_end_sequence" tähendab, et me tahame vastusest eemaldada "###".

Rohkem üksikasju leiate NLP Cloudi dokumentatsioonist: vaata seda siin.

Tulemuslikkuse kaalutlused

Entiteedi väljavõtte tegemine GPT-mudeliga annab palju vabadust, sest iga uue entiteedi saab välja võtta jooksvalt, isegi kui mudelit ei ole selleks välja õpetatud!

Kuid sellel on oma hind: need suured keelemudelid on suured ja suhteliselt aeglased.

Näiteks kui soovite kasutada GPT-J või GPT-NeoX, on vaja suurt graafikaprotsessorit, millel on palju VRAMi, näiteks NVIDIA RTX A6000 või A40. Ja tekib mõningane viivitus (üksuse väljavõtmine võtab umbes 500 ms). Seevastu spaCy või NLTK on infrastruktuuri seisukohast palju kiirem ja odavam.

Kokkuvõte

2022. aastal on võimalik väga hõlpsasti teostada täiustatud NER-i ilma igasuguse annotatsiooni ja treeninguta! See aitab ettevõtetel oluliselt kiirendada oma entiteedi ekstraheerimise projekte ning võimaldab ka rohkem tipptasemel rakendusi, mis põhinevad loomulikul keeletöötlusel.

Suured keelemudelid nagu GPT-3, GPT-J ja GPT-NeoX on siiski kulukad, seega ei tohiks alahinnata sellega seotud infrastruktuurikulusid.

Loodan, et see artikkel aitab teil aega ja raha kokku hoida!

Julien Salinas
NLP Cloud tehnoloogiajuht