Lähimmän vastaavuuden etsiminen upotuksista

Lahimman Vastaavuuden Etsiminen Upotuksista



Lähimmän vastaavuuden etsiminen upotuksista tarkoittaa niiden upotusten etsimistä, joilla on lähimpänä toisiaan. Upotukset ovat vektoriaalinen esitys lauseesta, joka syötetään kielimalleihin syötteinä tiettyjä tehtäviä varten. Keskustelemme tässä menetelmästä ja tekniikoista, joita voidaan käyttää vastaavien upotusten löytämiseen.

Syntaksi

On olemassa monia tekniikoita ja työkaluja, joita voimme hyödyntää löytääksemme eron upotusten välillä niiden samankaltaisuuden perusteella. Seuraavassa on menetelmät ja niihin liittyvä syntaksi, jota käytämme upottamisen yhtäläisyyksien löytämiseen.







Näistä mainituista kohdista tiedämme mallit, joiden avulla voimme löytää upotusten samankaltaisuuden. Nyt opimme käyttämään kutakin näistä malleista ja toteuttamaan yksittäiset esimerkit kussakin näistä malleista.



Esimerkki 1: Lähimmän vastaavuuden upottaminen Word-upotusten avulla

Ennen kuin otamme käyttöön sanan upotukset samankaltaisuusosumalle, meidän on tiedettävä sana upotukset. Sanojen upottaminen on prosessi, jossa teksti muunnetaan vektorin muotoon (numeeriset arvot), koska järjestelmämme ymmärtävät syötteen vain numeeristen numeroiden muodossa.



On olemassa useita muita tapoja tehdä tämä tehtävä, mukaan lukien yhden kuuman koodaus, mutta käytämme sanaa upotukset. Näin hermoverkon mallit (esim. word2vec tai Glove) oppivat upotuksen teksteistä. Sanat kartoitetaan korkeamman ulottuvuuden vektoriavaruuteen. Kaikki kontekstissa samankaltaiset sanat kartoitetaan lähimpiin pisteisiin. Näin upotukset voivat vangita tekstin eri sanojen väliset suhteet ja analogiat.





Luodaan lauseelle upotus sana. Sanan upotuksen luomiseksi Python tarjoaa 'gensim'-kehyksen. Gensim on kirjastopaketti, joka mahdollistaa 'word2vec'-mallin käytön, joka auttaa upotuksen luomisessa. Upottamisen toteuttamiseksi varmistamme ensin, että asennamme gensim Python-kääntäjiimme. Sitten tuomme gensimistä 'word2vec' -mallin.

'word2vec' -malli on eräänlainen algoritmi, joka käyttää vain kahta syöttöargumenttia, jossa ensimmäinen argumentti vaatii tekstin tai lauseen, jonka upotuksen haluamme luoda, ja toinen argumentti määrittää vähimmäismäärän, joka määrittää vähimmäismäärän kertoja sana vaaditaan esiintyäkseen tai tulla nähdyksi.



'word2vec'-mallin tuomisen jälkeen määritämme 'tekstin'. Kun olemme määrittäneet tekstin, harjoittelemme tämän 'word2vec' -mallin välittämällä sen tekstin kanssa ja asettamalla vähimmäismääräksi '1'. Kutsumme nyt tätä koulutettua 'word2vec.wv.most_similar('consume')' mallia ja syötämme sanan, jonka lähimmistä upotuksista haluamme tarkistaa, mikä tässä esimerkissä on 'kuluttaa'. Tarkistaaksemme upotustulokset tulostamme tulosteen mallista:

alkaen kansana mallit tuonti Word2Vec
teksti = [ [ 'kani' , 'on' , 'hampaat' ] ]
malli = Word2Vec ( teksti , min_count = 1 )
samankaltainen_upotus = malli. wv . useimmat_similar ( 'kani' )
Tulosta ( samankaltainen_upotus )

Tässä esimerkissä luomme sanan upotuksen tekstille käyttämällä 'word2vec'-mallia tarkistaaksemme niiden samankaltaisuuden kontekstin suhteen. Tämä näkyy aiemmin liitetyssä katkelmassa, joka on samanlaisia ​​upotuksia tarkistavan koodin tulos. sanasta 'kuluttaa'.

Esimerkki 2: Lähimmän haun upottaminen BERT-mallin kautta

On olemassa valmiiksi koulutetut luonnollisen kielen käsittelymallit, joita voidaan käyttää laskemaan tekstien samankaltaisuutta, koska ne voivat ymmärtää ja oppia sanojen välisen kontekstuaalisen suhteen. BERT on yksi esikoulutetuista kielimalleista 'sentence_transformers':sta ja se voi oppia tekstien väliset yhtäläisyydet. Löytääksemme tekstien välisen samankaltaisuuden meidän on ensin hienosäädettävä tämä malli tekstiin tai lauseisiin.

Kun tämä on tehty, voimme käyttää tätä mallia upotusten oppimiseen. Sitten voimme laskea tekstien samankaltaisuuden 'kosinin samankaltaisuus' -funktiolla. Toteutamme tämän esimerkin online-Python-alustalla, joka on 'google colab'. Mallin hienosäätöä varten lataamme (BERT) mallin. Tätä tarkoitusta varten asennamme ja tuomme ensin 'SentenceTransformers'. Sitten lataamme mallin sen esiopetetusta mallista käyttämällä SentenceTransformeria. Mallin lataamiseksi kutsumme sentenceTransformeria ja BERT-mallia yhteensä nimellä '$SentenceTransformer('bert-base-nli-mean-tokens')', jossa määritämme BERTin esiopetetun mallin nimen syöttöparametrissa ja sitten tallennamme tämän 'BERTmodel'-muuttujaan.

Kun olemme ladanneet tämän mallin, määritämme nyt neljä tekstiä, joista jokainen koostuu yhdestä lauseesta tarkistaaksemme niiden välisen samankaltaisuuden. Kun esimerkiksi määritämme tekstit, luomme nyt upotukset tälle tekstille. Luomme upotukset jokaiselle tekstille erikseen käyttämällä 'koodaa'-toimintoa.

Kutsumme koodaustoimintoa BERT-mallin etuliitteellä nimellä 'BERTmodel.encoding ()'. Sitten välitämme tämän funktion parametreille 'teksti' ja 'maksimipituus', jotka vahvistimme yhtä suureksi kuin '512'. Kutsumme tätä koodaustoimintoa jokaisessa tekstissä, ja se muuntaa tekstin upotuksiksi.

Nyt hyödynnämme kutakin näistä upotuksista ja korvaamme ne kosinin samankaltaisuusfunktiolla löytääksemme samankaltaisuuden näiden upotusten välillä. Kosinin samankaltaisuusfunktiota käytetään laajalti kaikissa luonnollisen kielen käsittelytehtävissä tekstien/dokumenttien luokittelussa ja klusteroinnissa.

Näiden upotusten samankaltaisuuden löytämiseksi käytämme kosinin samankaltaisuusfunktiota ja korvaamme upotetun lauseen arvon indeksillä '0' ja toisen upotetun lauseen arvon '1-3' indeksillä tarkistaaksemme lauseen 0 samankaltaisuuden muun 3:n kanssa. lauseita. Kosinin samankaltaisuusfunktion lähtöarvot vaihtelevat -1:stä 1:een. Tässä 1 kertoo, että molemmat upotukset ovat samanlaisia ​​ja -1 kertoo, että nämä kaksi upotusta eivät ole samanlaisia. Liittimme koodinpätkän, joka näyttää menetelmän kosinin samankaltaisuusfunktion toteuttamiseksi käyttämällä neljää lauseen upotusta, jotka loimme juuri esimerkeissä käyttäen esikoulutettua BERT-mallia.

!pip install lauseen_muuntajat
lauseet = [
'neljä vuotta sitten pullo oli jopa täynnä ja .',
'Koira näki unta pakenemisesta häkistä ja kadulla, jonne hän näki ystävänsä menevän.'
'Henkilö leikki meduusoilla monta kuukautta.'
'Hän löysi etanan vaatekaapistaan.']
osoitteesta lause_transformers tuo SentenceTransformer
Bertmodel = SentenceTransformer('bert-base-nli-mean-tokens')
lause_embeddings = Bertmodel.encode(lauseet)
lause_embeddings.shape
osoitteesta sklearn.metrics.pairwise import cosine_similarity
# laske = kosinin samankaltaisuus lauseelle 0:
kosini_samalaisuus(
[sentence_embeddings[0]],
lause_upotukset[1:])

Tulosteen taulukko näyttää 'lauseen 0' samankaltaisuusarvon kolmen muun lauseen kanssa, esim. 1, 2 ja 3.

Johtopäätös

Keskustelimme menetelmistä löytää samankaltaisuus upotusten välillä. Näytimme kaksi eri esimerkkiä upotuksen lähimmän vastaavuuden etsimiseksi käyttämällä 'word2vec' gensim-mallia ja esikoulutettua BERT-mallia.