Kuidas otsida lähimat vastet manustamist

Kuidas Otsida Lahimat Vastet Manustamist



Manustuste otsimine lähima vaste leidmiseks tähendab nende manuste leidmist, millel on üksteisele kõige lähedasem tähendus. Manused on lause vektorkujutis, mis edastatakse keelemudelitele konkreetsete ülesannete sisenditena. Siin käsitleme meetodit ja tehnikaid, mida saab kasutada sarnaste manuste leidmiseks.

Süntaks

On palju tehnikaid ja tööriistu, mida saame kasutada manuste erinevuse leidmiseks nende sarnasuse erinevuse põhjal. Järgnevalt on toodud meetodid ja nendega seotud süntaks, mida kasutame manustamissarnasuste leidmiseks.







Nende mainitud punktide põhjal teame mudeleid, mida saame kasutada manuste sarnasuse leidmiseks. Nüüd õpime kasutama kõiki neid mudeleid ja rakendama iga mudeli puhul individuaalseid näiteid.



Näide 1: Lähima vaste manustamine Wordi manustamise kaudu

Enne sõna manustamise rakendamist sarnasusvaste jaoks peame teadma sõna manused. Sõna manustamine on teksti teisendamine vektori kujule (arvulised väärtused), kuna meie süsteemid mõistavad sisendit ainult numbriliste numbrite kujul.



Selle ülesande täitmiseks on veel mitmeid viise, sealhulgas ühe kuuma kodeeringut, kuid me kasutame sõna manustamist. Nii õpivad närvivõrgu mudelid (nt word2vec või Glove) tekstidest põimimist. Sõnad kaardistatakse kõrgema mõõtmega vektorruumiga. Kõik need sõnad, mis on kontekstis sarnased, kaardistatakse lähimate punktidega. Nii saavad kinnistused tabada teksti erinevate sõnade vahelisi seoseid ja analoogiaid.





Loome lause jaoks sõna manustamise. Sõna manustamise loomiseks pakub Python 'gensim' raamistikku. Gensim on teegipakett, mis võimaldab kasutada mudelit 'word2vec', mis aitab manuseid luua. Manustamise rakendamiseks installime esmalt oma Pythoni kompilaatoritesse gensim. Seejärel impordime gensimist mudeli 'word2vec'.

Mudel 'word2vec' on omamoodi algoritm, mis kasutab ainult kahte sisendargumenti, kus esimene argument nõuab teksti või lauset, mille manustamist tahame luua, ja teine ​​argument määrab minimaalse arvu, mis määrab minimaalse arvu kordi, kui sõna peab ilmuma või nähtavaks saama.



Pärast mudeli 'word2vec' importimist määrame 'teksti'. Kui oleme teksti täpsustanud, treenime seda 'word2vec' mudelit, edastades selle koos tekstiga ja määrates minimaalse arvu väärtusega '1'. Nüüd nimetame seda treenitud mudelit 'word2vec.wv.most_similar('consume')' ja sisestame sõna, mille lähimaid manuseid tahame kontrollida, milline selles näites on 'tarbima'. Manustamistulemuste kontrollimiseks prindime mudeli väljundi:

alates rahvana mudelid importida Word2Vec
tekst = [ [ 'Jänes' , 'on' , 'hambad' ] ]
mudel = Word2Vec ( tekst , min_count = 1 )
sarnane_manustamine = mudel. wv . kõige_sarnasem ( 'Jänes' )
printida ( sarnane_manustamine )

Selles näites loome teksti jaoks sõna manustamise, kasutades mudelit 'word2vec', et kontrollida nende sarnasust konteksti osas ja mida saab näha eelnevalt lisatud väljavõttes, mis on sarnaseid manuseid kontrolliva koodi väljund. sõnast 'tarbima'.

Näide 2: Lähima otsingu manustamine BERT-i mudeli kaudu

On olemas eelkoolitatud loomuliku keele töötlemise mudelid, mida saab kasutada tekstide sarnasuse arvutamiseks, kuna nad saavad aru ja õpivad sõnade kontekstivahelist seost. BERT on üks eelkoolitatud keelemudeleid 'lausetemuunduritest' ja suudab õppida tekstide sarnasusi. Tekstide sarnasuse leidmiseks peame esmalt selle mudeli teksti või lausete järgi peenhäälestama.

Kui see on tehtud, saame seda mudelit kasutada manuste õppimiseks. Seejärel saame arvutada tekstide sarnasuse funktsiooni 'koosinussarnasus' abil. Rakendame seda näidet Pythoni veebiplatvormil, mille nimi on 'google colab'. Mudeli peenhäälestamiseks laadime (BERT) mudeli. Selleks installime ja impordime esmalt 'SentenceTransformers'. Seejärel laadime mudeli selle eelkoolitatud mudelist, kasutades SentenceTransformerit. Mudeli laadimiseks kutsume SentenceTransformerit ja BERT-mudelit kokku kui '$SentenceTransformer('bert-base-nli-mean-tokens')', kus sisestame sisendparameetris BERT-i eelkoolitatud mudeli nime ja siis salvestame selle muutujasse BERTmodel.

Kui oleme selle mudeli laadimise lõpetanud, täpsustame nüüd neli teksti, millest igaüks koosneb ühest lausest, et kontrollida nende sarnasust. Kui oleme näiteks tekstid täpsustanud, loome nüüd selle teksti jaoks manused. Loome iga teksti jaoks eraldi manused, kasutades funktsiooni 'kodeeri'.

Nimetame BERT-mudeli eesliitega kodeerimisfunktsiooni kui 'BERTmodel.encoding ()'. Seejärel edastame selle funktsiooni parameetritele 'tekst' ja 'maksimaalne pikkus', mille määrasime võrdseks väärtusega '512'. Nimetame seda kodeerimisfunktsiooni iga teksti puhul ja see teisendab teksti manusteks.

Nüüd kasutame kõiki neid manuseid ja asendame need koosinussarnasuse funktsiooniga, et leida nende manuste sarnasus. Koosinussarnasuse funktsiooni kasutatakse laialdaselt kõigis loomuliku keele töötlemise ülesannetes tekstide/dokumentide klassifitseerimiseks ja rühmitamiseks.

Nende manuste sarnasuse leidmiseks kasutame koosinussarnasuse funktsiooni ja asendame manustatud lause väärtuse indeksiga '0' ja teise manustatud lause väärtuse indeksiga '1 kuni 3', et kontrollida lause 0 sarnasust ülejäänud 3-ga. lauseid. Koosinussarnasuse funktsiooni väljundväärtused on vahemikus -1 kuni 1. Siin näitab 1, et kaks manustamist on sarnased ja -1, et kaks manustamist ei ole sarnased. Lisasime koodilõigu, mis näitab koosinussarnasuse funktsiooni rakendamise meetodit, kasutades nelja lause manustamist, mille me just näidetes lõime, kasutades eelkoolitatud BERT-mudelit.

!pip install lausete_transformaatorid
laused = [
'neli aastat tagasi oli pudel isegi täis ja .',
'Koer nägi unes puurist põgenemist ja tänaval, kuhu ta nägi oma sõpra minemas.'
'Inimene mängis meduusidega mitu kuud.'
'Ta leidis oma riidekapist teo.']
allikast lause_transformaatorid importivad SentenceTransformeri
Bertmudel = SentenceTransformer ('bert-base-nli-mean-tokens')
lause_embeddings = Bertmodel.encode(laused)
lause_kinnitused.kuju
failist sklearn.metrics.pairwise import cosinus_sarnasus
# arvutada = koosinuse sarnasus lause 0 jaoks:
koosinus_sarnasus(
[sentence_embeddings[0]],
lause_manustamine[1:])

Väljundis olev massiiv kuvab 'lause 0' sarnasuse väärtuse ülejäänud kolme lausega, nt. 1, 2 ja 3.

Järeldus

Arutasime manuste sarnasuse leidmise meetodeid. Näitasime kahte erinevat näidet, et otsida manustamisele lähimat vastet, kasutades gensim-mudelit „word2vec” ja eelkoolitatud BERT-mudelit.