Kuidas Word2Veciga alustada - ja kuidas siis see toimima panna

Word2Veci idee on üsna lihtne. Lähtume eeldusest, et sõna tähenduse saab järeldada ettevõte, mida ta hoiab. See on analoogne ütlusega: " näita mulle oma sõpru ja ma ütlen, kes sa oled.

Kui teil on kaks sõna, millel on väga sarnased naabrid (see tähendab: kontekst, milles seda kasutatakse, on umbes sama), siis on need sõnad tõenäoliselt üsna sarnase tähendusega või on vähemalt omavahel seotud. Näiteks sõnu šokeeritud , kohkunud ja hämmastunud kasutatakse tavaliselt sarnases kontekstis.

Selle aluseks oleva eelduse abil saate kasutada Word2Veci sarnaste mõistete esilekutsumiseks, mitteseotud mõistete leidmiseks, kahe sõna sarnasuse arvutamiseks ja palju muud!

Asjadeni

Selles õpetuses saate teada, kuidas kasutada Word2Veci Gensimi rakendust ja kuidas see tegelikult tööle panna. Olen ammu kuulnud kaebusi kehva jõudluse kohta üldiselt, kuid see on tegelikult kahe asja kombinatsioon: (1) teie sisendandmed ja (2) teie parameetrite seaded .

Pange tähele, et Gensimi paketis olevad koolitusalgoritmid olid tegelikult Google'i algsest Word2Vec-i juurutusest kantud ja laiendatud täiendavate funktsioonidega.

Import ja metsaraie

Esiteks alustame impordist ja kehtestame metsaraie:

# imports needed and loggingimport gzipimport gensim import logging
logging.basicConfig(format=’%(asctime)s : %(levelname)s : %(message)s’, level=logging.INFO)

Andmekogum

Meie järgmine ülesanne on leida tõeliselt hea andmekogum. Saladus, kuidas Word2Vec teie jaoks tõeliselt töötab, on see, et vastavas domeenis on palju ja palju tekstiandmeid. Näiteks kui teie eesmärk on luua meeleoluleksikon, ei pruugi meditsiinivaldkonna või isegi Vikipeedia andmekogumi kasutamine olla tõhus. Seega valige oma andmekogum targalt.

Selle õpetuse jaoks kavatsen kasutada oma doktoritöö arvamuskogemuse DataRank andmeid. Sellel andmekogumil on täielikud autode ja hotellide ülevaated. Olen spetsiaalselt koondanud kõik hotelliarvustused ühte suurde faili, mis on umbes 97 MB tihendatud ja 229 MB tihendamata. Selle õpetuse jaoks kasutame tihendatud faili. Iga selle faili rida tähistab hotelli arvustust.

Vaatame neid andmeid allpool lähemalt, printides esimese rea.

Te peaksite nägema järgmist:

b"Oct 12 2009 \tNice trendy hotel location not too bad.\tI stayed in this hotel for one night. As this is a fairly new place some of the taxi drivers did not know where it was and/or did not want to drive there. Once I have eventually arrived at the hotel, I was very pleasantly surprised with the decor of the lobby/ground floor area. It was very stylish and modern. I found the reception's staff geeting me with 'Aloha' a bit out of place, but I guess they are briefed to say that to keep up the coroporate image.As I have a Starwood Preferred Guest member, I was given a small gift upon-check in. It was only a couple of fridge magnets in a gift box, but nevertheless a nice gesture.My room was nice and roomy, there are tea and coffee facilities in each room and you get two complimentary bottles of water plus some toiletries by 'bliss'.The location is not great. It is at the last metro stop and you then need to take a taxi, but if you are not planning on going to see the historic sites in Beijing, then you will be ok.I chose to have some breakfast in the hotel, which was really tasty and there was a good selection of dishes. There are a couple of computers to use in the communal area, as well as a pool table. There is also a small swimming pool and a gym area.I would definitely stay in this hotel again, but only if I did not plan to travel to central Beijing, as it can take a long time. The location is ok if you plan to do a lot of shopping, as there is a big shopping centre just few minutes away from the hotel and there are plenty of eating options around, including restaurants that serve a dog meat!\t\r\n"

Näete, et see on päris hea ja täielik ülevaade, kus on palju sõnu ja seda me tahamegi. Selles andmestikus on meil umbes 255 000 sellist ülevaadet.

Segaduste vältimiseks öeldakse Gensimi Word2Veci õpetuses, et peate Word2Veci sisendina edastama lausete jada. Kui aga palju andmeid on ja see ei tohiks erilist vahet teha, võite tegelikult lauseid (st palju suurema teksti suurusega) lausena edasi anda. Lõppkokkuvõttes on kõik, mille jaoks me andmekogumit kasutame, see, et hankime kõik sihtmärksõna naabersõnad.

Lugege faile loendisse

Nüüd, kui meil on andmekogumi varjatud tipp, võime selle loendisse lugeda, et saaksime selle Word2Veci mudelile edasi anda. Pange tähele allolevas koodis, et loen tihendatud faili otse. Kasutan ka arvustuste kerget eeltöötlust gensim.utils.simple_preprocess (line). See teeb mõned põhilised eeltöötlused, nagu tokeniseerimine, väiketähed ja nii edasi ning tagastab tagasi märgendite (sõnade) loendi. Selle eeltöötlusmeetodi dokumentatsiooni leiate Gensimi ametlikust saidilt.

Word2Veci mudeli koolitamine

Mudeli koolitamine on üsna lihtne. Sa lihtsalt kiirendad Word2Veci ja edastad ülevaated, mida me eelmises etapis lugesime. Niisiis, me edastame sisuliselt loendite loendi, kus iga põhiloendi loend sisaldab kasutaja ülevaatest pärit märkide komplekti. Word2Vec kasutab kõiki neid märke sõnavara sisemiseks loomiseks. Ja sõnavara all mõtlen ma unikaalsete sõnade kogumit.

Pärast sõnavara koostamist peame train(...)Word2Veci mudeli koolitamiseks lihtsalt helistama . Lava taga treenime tegelikult lihtsat närvivõrku, millel on üks varjatud kiht. Kuid tegelikult ei kavatse me pärast koolitust närvivõrku kasutada. Selle asemel on eesmärk õppida peidetud kihi kaalusid. Need kaalud on sisuliselt sõnavektorid, mida proovime õppida.

Word2Vec OpinRanki andmekogumi koolitamine võtab aega umbes 10–15 minutit. nii et palun olge selles andmekogumis oma koodi käitamisel kannatlik

Lõbus osa - mõned tulemused!

Läheme juba lõbusate asjadeni! Kuna oleme koolitanud kasutajate arvustusi, oleks tore näha mõne omadussõna sarnasust. See esimene näide näitab sõnaga "räpane" sarnaste sõnade lihtsat otsimist. Siin peame vaid kutsuma most_similarfunktsiooni ja pakkuma positiivse näitena sõna "määrdunud". See tagastab 10 parimat sarnast sõna.

Oeh, see näeb päris hea välja. Vaatame veel.

Sarnane viisakale:

Sarnane Prantsusmaaga:

Sarnane šokis:

Üldiselt on tulemustel tegelikult mõtet. Kõiki seotud sõnu kasutatakse antud päringusõna puhul samas kontekstis.

Nüüd võiksite isegi kasutada Word2Veci, et arvutada sõnavara kahe sõna sarnasus, kutsudes üles similarity(...)funktsiooni ja edastades asjakohased sõnad.

Kapoti all arvutavad ülaltoodud kolm juppi kahe täpsustatud sõna koosinus sarnasuse, kasutades kummagi sõnavektorit. Ülaltoodud hindete põhjal on mõistlik, mis dirtyon väga sarnane, smellykuid dirtyon erinev clean. Kui teete kahe ühesuguse sõna sarnasust, on tulemus 1,0, kuna koosinus sarnasuse skoori vahemik jääb alati vahemikku [0,0–1,0]. Kosinuse sarnasuse hindamise kohta saate lugeda siit.

Veel näiteid Word2Veci kasutamise kohta leiate minu Jupyteri märkmikust.

Parameetrite seadeid lähemalt uurides

To train the model earlier, we had to set some parameters. Now, let’s try to understand what some of them mean. For reference, this is the command that we used to train the model.

model = gensim.models.Word2Vec (documents, size=150, window=10, min_count=2, workers=10)

size

The size of the dense vector that is to represent each token or word. If you have very limited data, then size should be a much smaller value. If you have lots of data, its good to experiment with various sizes. A value of 100–150 has worked well for me for similarity lookups.

window

The maximum distance between the target word and its neighboring word. If your neighbor’s position is greater than the maximum window width to the left or the right, then some neighbors are not considered as being related to the target word. In theory, a smaller window should give you terms that are more related. If you have lots of data, then the window size should not matter too much, as long as its not overly narrow or overly broad. If you are not too sure about this, just use the default value.

min_count

Minimium frequency count of words. The model would ignore words that do not statisfy the min_count. Extremely infrequent words are usually unimportant, so its best to get rid of those. Unless your dataset is really tiny, this does not really affect the model.

workers

How many threads to use behind the scenes?

When should you use Word2Vec?

There are many application scenarios for Word2Vec. Imagine if you need to build a sentiment lexicon. Training a Word2Vec model on large amounts of user reviews helps you achieve that. You have a lexicon for not just sentiment, but for most words in the vocabulary.

Beyond raw unstructured text data, you could also use Word2Vec for more structured data. For example, if you had tags for a million StackOverflow questions and answers, you could find related tags and recommend those for exploration. You can do this by treating each set of co-occuring tags as a “sentence” and train a Word2Vec model on this data. Granted, you still need a large number of examples to make it work.

Source code

Selle õpetuse Jupyteri märkmiku kasutamiseks võite minna minu GitHubi repo lehele ja järgida juhiseid, kuidas sülearvuti kohapeal tööle panna. Kavatsen üles laadida eelnevalt koolitatud vektorid, mida saaks kasutada teie enda tööks.

Kavita artikli jälgimiseks e-posti teel tellige palun tema ajaveeb.

See artikkel avaldati algselt aadressil kavita-ganesan.com