Vaikeuksia tekoälyn tai full-stack-kehityksen kanssa? Asiantuntijamme opastavat sinua: räätälöityjä neuvoja, teknistä integrointia ja paljon muuta. Ota yhteyttä osoitteessa [email protected].

Few-shot NER: Entiteettien louhinta ilman merkintöjä ja GPT:hen perustuva koulutus

SpaCy:hen tai NLTK:hon perustuvat valmiiksi koulutetut entiteettien poimintamallit tuottavat hyviä tuloksia, mutta vaativat työlästä kommentointi- ja koulutusprosessia, jotta voidaan havaita muita kuin alkuperäisiä entiteettejä, kuten työnimikkeitä, alv-numeroita, lääkkeitä jne. GPT-3:n, GPT-J:n ja GPT-NeoX:n kaltaisten laajojen kielimallien ansiosta on nyt mahdollista poimia minkä tahansa tyyppisiä entiteettejä muutaman otoksen oppimisen avulla ilman annotointia ja harjoittelua. Tässä artikkelissa näytämme, miten se tehdään.

NER (entiteettien louhinta) tarkoittaa pohjimmiltaan jäsennellyn tiedon poimimista jäsentymättömästä tekstistä. Jos NER on sinulle uusi asia, voit ensin lukea lyhyen johdantomme: johdatus NER:ään.

NER spaCy:llä ja NLTK:lla: perinteinen menetelmä

SpaCysta on tullut viime vuosina de facto NER-standardi. (katso spaCy:n verkkosivut). SpaCy on erittäin houkutteleva kehys, koska se on helppokäyttöinen ja soveltuu nopeutensa ansiosta hyvin tuotantokäyttöön.

SpaCy on Python-kielinen luonnollisen kielen prosessointikehys, joka tarjoaa monia valmiiksi koulutettuja malleja useilla kielillä, joten on helppo poimia useita entiteettityyppejä (yrityksiä, kaupunkeja, osoitteita, päivämääriä jne.) omalla kielelläsi ilman, että sinun tarvitsee kouluttaa omaa mallia.

NLTK on myös mielenkiintoinen valinta olioiden louhintaan Pythonilla, mutta se ehdottaa oletusarvoisesti vähemmän olioita, eikä NLTK:ta yleensä suositella tuotantokäyttöön (se on enemmänkin opetus- ja tutkimuskehys).

Näiden kehysten kanssa tulee kuitenkin nopeasti vastaan raja: natiivisti tuettujen olioiden määrä on rajallinen. Useimmat yritykset haluavat hyödyntää NER:ää poimiakseen tiettyjä liiketoimintatietoja, kuten henkilötietoja, rahoitustietoja, lääketieteellisiä hoitoja jne. SpaCy:n valmiiksi koulutetut mallit eivät tietenkään tue näitä entiteettejä oletusarvoisesti, joten tätä varten on luotava oma tietokokonaisuus ja koulutettava siitä oma malli.

Oman spaCy-mallin kouluttaminen on pitkä ja työläs annotaatioprosessi: yhden tai useamman henkilön on tehtävä yhteistyötä luodakseen valtavan joukon hyviä esimerkkejä ja annotoidakseen ne. Tarvitaan erittäin suuri määrä esimerkkejä, jotta malli oppii kunnolla. Hyviä annotaatiotyökaluja on olemassa (kuten spaCyn Prodigy), mutta se on silti edelleen tuskallinen tehtävä, jonka vuoksi monet NLP-projektit keskeytetään.

Merkintä kuvitus

Hyviä uutisia: GPT-3:n, GPT-J:n ja GPT-NeoX:n kaltaisten suurten kielimallien yleistymisen myötä on nyt mahdollista poimia mitä tahansa entiteettejä ilman annotointia ja uuden mallin kouluttamista!

Tekstin tuottaminen GPT-3:n, GPT-J:n ja GPT-NeoX:n avulla

Tekstin tuottamiseen tarkoitettuja suuria kielimalleja on viime aikoina alkanut ilmestyä GPT-3:n myötä. (katso lisää GPT-3:sta OpenAI:n verkkosivuilta.). Kun OpenAI julkaisi GPT-3-mallinsa, joka koostuu 175 miljardista parametrista, se oli vallankumous, koska se avasi tien monille huippuluokan tekoälysovelluksille, jotka perustuvat luonnollisen kielen käsittelyyn ilman lisäkoulutusta.

GPT-3:n kaltaisten GPT-mallien alkuperäisenä tavoitteena on tuottaa tekstiä: anna mallille vain syöttötieto ja anna sen tuottaa loput puolestasi. Tekstin tuottamisen perusteella voidaan toteuttaa lähes kaikki luonnollisen kielen prosessoinnin käyttötapaukset: luokittelu, tiivistäminen, keskustelun tekoäly, parafrasointi... ja tietysti entiteettien louhinta!

Koska GPT-3 ei ole avoimen lähdekoodin malli, avoimen lähdekoodin yhteisö on kehittänyt vaihtoehtoja GPT-3:lle, ja nyt meillä on kaksi loistavaa avoimen lähdekoodin mallia: GPT-J ja GPT-NeoX. Ne eivät ole vielä yhtä suuria kuin GPT-3, mutta ei ole epäilystäkään siitä, että on vain ajan kysymys, milloin avoimen lähdekoodin yhteisö saavuttaa OpenAI:n.

Näiden mallien asianmukainen hyödyntäminen edellyttää uutta tekniikkaa, jota kutsutaan "muutaman kuvan oppimiseksi".

Muutaman laukauksen oppiminen

Nämä suuret GPT-mallit ovat niin suuria, että ne voivat oppia sinulta hyvin nopeasti.

Oletetaan, että haluat GPT-3:n tuottavan sinulle lyhyen tuotekuvauksen. Tässä on esimerkki ilman muutaman kuvan oppimista:

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

Saamasi vastaus on hyödytön. Se voisi olla esimerkiksi seuraavanlainen:

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

Hyviä uutisia: voit saada paljon parempia tuloksia antamalla mallille vain pari esimerkkiä!

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:

Tulos on jotakuinkin tällainen:

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.

Kuten näet, mallin vaste on nyt täysin tarkoituksenmukainen, kiitos niiden kolmen esimerkin, jotka annoimme sille ensin. Tätä mallia ei kuitenkaan ole koskaan koulutettu tällaiseen tuotekuvauksen tuottamistehtävään. Tästä on kyse "muutaman kuvan oppimistekniikassa": suoritat "siirto-oppimista" lennossa vain parilla esimerkillä. Tällaisen tuloksen saavuttamiseksi luonnollisen kielen käsittelymallia pitäisi yleensä kouluttaa tonneittain esimerkkejä, mutta ei tässä tapauksessa.

Entiteettien poimiminen muutaman kuvan oppimisella

Nyt suoritamme entiteettien louhinnan muutaman otoksen oppimisen avulla.

Oletetaan, että haluat poimia työnimikkeitä verkkosivuilta. Anna vain pari esimerkkiä työnimikkeiden poimimisesta ennen varsinaisen pyyntösi esittämistä:

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:

Tulos on seuraava:

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

Kuten huomasit, meidän on oltava fiksuja siinä, miten teemme muutaman laukauksen esimerkkejä. Voi käydä niin, ettei työnimikettä löydy lainkaan, minkä vuoksi olemme luoneet esimerkin, joka palauttaa arvon "none" (näin vältetään vääriä positiivisia tuloksia). Ehkä haluat poimia useita työnimikkeitä samanaikaisesti? Siinä tapauksessa on tärkeää luoda myös esimerkkejä, jotka palauttavat useita työnimikkeitä (esimerkiksi pilkulla erotetut työnimikkeet).

Saat vielä parempia tuloksia lisäämällä vielä enemmän esimerkkejä. On tärkeää, että esimerkit ovat mahdollisimman lähellä todellista lopullista pyyntöäsi. Jos esimerkiksi tiedät, että aiot analysoida kokonaisia kappaleita pelkkien lauseiden sijasta, on parasta luoda esimerkkejä, joissa on myös kappaleita.

Jos sinulla ei ole pääsyä GPT-malliin, voit yksinkertaisesti käyttää NLP Cloud APIa. Saatavilla on useita asiakkaita (Python, Go, Node.js, Ruby, PHP...). Näytetään tässä esimerkki, jossa käytetään GPT-J:tä Python-asiakkaan kanssa:

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
)

Tuloksena on: CTO

Selitän lyhyesti äsken käyttämämme tekstinmuodostusparametrit.

Asetimme hyvin alhaisen p-arvon, koska emme halua GPT-J:n tuottavan liian omaperäisiä tuloksia: haluamme sen vain pitäytyvän siinä, mitä se näki pyyntösi yhteydessä.

"length_no_input" tarkoittaa, että enimmäispituuden arvossa ei oteta huomioon syötettyä tekstiä.

"remove_input" tarkoittaa, että syötetty teksti poistetaan tuloksesta.

"end_sequence" tarkoittaa, että kun malli kohtaa tämän merkin, sen pitäisi lopettaa tekstin tuottaminen. Koska muutaman kuvan esimerkeissämme lisäsimme "###" jokaisen vastauksen loppuun, malli luo automaattisesti "###" vastauksen luomisen jälkeen ja lopettaa sen siihen.

"remove_end_sequence" tarkoittaa, että haluamme poistaa "###" vastauksesta.

Lisätietoja on NLP Cloudin dokumentaatiossa: katso se täältä.

Suorituskykyyn liittyvät näkökohdat

Entiteettien louhinta GPT-mallilla antaa paljon vapautta, sillä mikä tahansa uusi entiteetti voidaan louhia lennossa, vaikka mallia ei olisikaan koulutettu sitä varten!

Sillä on kuitenkin hintansa: nämä suuret kielimallit ovat valtavia ja suhteellisen hitaita.

Jos esimerkiksi haluat käyttää GPT-J:tä tai GPT-NeoX:ää, se vaatii valtavan näytönohjaimen, jossa on paljon VRAM-muistia, kuten NVIDIA RTX A6000 tai A40. Lisäksi tarvitaan jonkin verran latenssia (kokonaisuuden poistaminen kestää noin 500 ms). Päinvastoin, spaCy tai NLTK on paljon nopeampi ja edullisempi infrastruktuurin kannalta.

Päätelmä

Vuonna 2022 on mahdollista suorittaa edistynyttä NER:ää hyvin helposti ilman annotaatiota ja koulutusta! Se auttaa yrityksiä huomattavasti nopeuttamaan entiteettien louhintahankkeidensa toteuttamista, ja se mahdollistaa myös entistä enemmän luonnollisen kielen käsittelyyn perustuvia huippuluokan sovelluksia.

GPT-3:n, GPT-J:n ja GPT-NeoX:n kaltaiset suuret kielimallit ovat kuitenkin kalliita, joten niihin liittyviä infrastruktuurikustannuksia ei pidä aliarvioida.

Toivottavasti tämä artikkeli auttaa sinua säästämään aikaa ja rahaa!

Julien Salinas
teknologiajohtaja, NLP Cloud