de Kavita Ganesan

Cum să începeți cu Word2Vec – și apoi cum să îl faceți să funcționeze

Cum sa incepeti cu Word2Vec si apoi cum sa

Ideea din spatele Word2Vec este destul de simplă. Facem o presupunere că sensul unui cuvânt poate fi dedus de compania pe care o păstrează. Acest lucru este analog cu zicala: „arată-mi prietenii tăi și îți voi spune cine ești.

Dacă aveți două cuvinte care au vecini foarte asemănători (adică: contextul în care este folosit este aproximativ același), atunci aceste cuvinte sunt probabil destul de similare în sens sau sunt cel puțin înrudite. De exemplu, cuvintele șocat, consternat, și uimit sunt de obicei utilizate într-un context similar.

Folosind această ipoteză de bază, puteți utiliza Word2Vec pentru a scoate la iveală concepte similare, pentru a găsi concepte fără legătură, pentru a calcula similitudinea dintre două cuvinte și multe altele!

Până la afaceri

În acest tutorial, veți învăța cum să utilizați implementarea Gensim a Word2Vec și să o efectuați efectiv. De mult am auzit plângeri despre performanțe slabe în general, dar este într-adevăr o combinație de două lucruri: (1) datele dvs. de intrare și (2) setările parametrilor.

Rețineți că algoritmii de formare din pachetul Gensim au fost de fapt portați de la original Implementare Word2Vec de către Google și extins cu funcționalități suplimentare.

Importuri și exploatare forestieră

În primul rând, începem cu importurile noastre și stabilim înregistrarea:

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

Set de date

Următoarea noastră sarcină este găsirea unui set de date foarte bun. Secretul pentru ca Word2Vec să funcționeze cu adevărat pentru dvs. este să aveți o mulțime de date text în domeniul relevant. De exemplu, dacă obiectivul dvs. este să construiți un lexic de sentiment, atunci utilizarea unui set de date din domeniul medical sau chiar Wikipedia poate să nu fie eficientă. Așadar, alegeți setul de date cu înțelepciune.

Pentru acest tutorial, voi folosi datele din OpinRank set de date de la unele dintre Lucrare de doctorat. Acest set de date conține recenzii complete ale utilizatorilor despre mașini și hoteluri. Am adunat în mod specific toate recenziile hotelului într-un singur dosar mare despre care este vorba 97 MB comprimat și 229 MB necomprimat. Vom folosi fișierul comprimat pentru acest tutorial. Fiecare linie din acest fișier reprezintă o recenzie a hotelului.

Acum, să aruncăm o privire mai atentă asupra acestor date de mai jos, imprimând prima linie.

Ar trebui să vedeți următoarele:

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!trn"

Puteți vedea că aceasta este o recenzie destul de bună, completă, cu multe cuvinte și asta ne dorim. Avem aproximativ 255.000 de astfel de recenzii în acest set de date.

Pentru a evita confuzia, tutorialul Word2Vec din Gensim spune că trebuie să treceți o secvență de propoziții ca intrare în Word2Vec. Cu toate acestea, puteți trece într-o întreagă recenzie ca o propoziție (adică o dimensiune a textului mult mai mare) dacă aveți o mulțime de date și nu ar trebui să facă o mare diferență. În cele din urmă, tot ceea ce folosim setul de date este să obținem toate cuvintele învecinate pentru un anumit cuvânt țintă.

Citiți fișierele într-o listă

Acum, că am avut un vârf al setului de date, îl putem citi într-o listă, astfel încât să putem transmite acest lucru modelului Word2Vec. Observați în codul de mai jos că citesc direct fișierul comprimat. De asemenea, fac o prelucrare ușoară a recenziilor folosind gensim.utils.simple_preprocess (line). Acest lucru face unele pre-procesare de bază, cum ar fi tokenization, minuscule, și așa mai departe și returnează o listă de jetoane (cuvinte). Documentația acestei metode de pre-procesare poate fi găsită pe oficial Site-ul de documentare Gensim.

Instruirea modelului Word2Vec

Antrenarea modelului este destul de simplă. Trebuie doar să instanțiați Word2Vec și să transmiteți recenziile pe care le-am citit în pasul anterior. Deci, în esență, transmitem o listă de liste, în care fiecare listă din lista principală conține un set de jetoane dintr-o recenzie a utilizatorului. Word2Vec folosește toate aceste jetoane pentru a crea intern un vocabular. Și prin vocabular, mă refer la un set de cuvinte unice.

După construirea vocabularului, trebuie doar să sunăm train(...) pentru a începe instruirea modelului Word2Vec. În culise, antrenăm de fapt o rețea neuronală simplă cu un singur strat ascuns. Dar, de fapt, nu vom folosi rețeaua neuronală după antrenament. În schimb, scopul este de a învăța greutățile stratului ascuns. Aceste greutăți sunt în esență vectorii de cuvinte pe care încercăm să-i învățăm.

Instruire pe Word2Vec OpinRank setul de date durează aproximativ 10–15 minute. deci, vă rugăm să aveți răbdare în timp ce vă rulați codul pe acest set de date

Partea distractivă – câteva rezultate!

1612182548 862 Cum sa incepeti cu Word2Vec si apoi cum sa

Să trecem deja la lucrurile distractive! Deoarece ne-am instruit cu privire la recenziile utilizatorilor, ar fi frumos să vedem similitudinea la unele adjective. Acest prim exemplu arată o simplă căutare a cuvintelor similare cu cuvântul „murdar”. Tot ce trebuie să facem aici este să apelăm la most_similar funcționează și oferă cuvântul „murdar” ca exemplu pozitiv. Aceasta returnează primele 10 cuvinte similare.

Cum sa incepeti cu Word2Vec si apoi cum sa
Cuvinte similare cu „murdar”

Ooh, arată destul de bine. Să ne uităm la mai multe.

Similar cu politicos:

1612182549 657 Cum sa incepeti cu Word2Vec si apoi cum sa
Cuvinte similare cu ‘politicos’

Similar cu Franţa:

1612182550 674 Cum sa incepeti cu Word2Vec si apoi cum sa
Cuvinte similare cu „Franța”

Similar cu șocat:

1612182550 170 Cum sa incepeti cu Word2Vec si apoi cum sa
Cuvinte similare cu „șocat”

În general, rezultatele au de fapt sens. Toate cuvintele înrudite tind să fie utilizate în același context pentru cuvântul de interogare dat.

Acum puteți folosi Word2Vec pentru a calcula similitudinea dintre două cuvinte din vocabular invocând similarity(...) funcția și trecerea în cuvintele relevante.

1612182550 765 Cum sa incepeti cu Word2Vec si apoi cum sa
Calculați asemănarea dintre două cuvinte din vocabular

Sub capotă, cele trei fragmente de mai sus calculează similitudinea cosinusului dintre cele două cuvinte specificate folosind vectori de cuvinte pentru fiecare. Din scorurile de mai sus, are sens asta dirty este foarte asemănător cu smelly dar dirty este diferit de clean. Dacă faceți o asemănare între două cuvinte identice, scorul va fi 1,0, deoarece intervalul scorului de similitudine al cosinusului va fi întotdeauna între [0.0-1.0]. Puteți citi mai multe despre notarea similitudinii cosinusului Aici.

Veți găsi mai multe exemple despre cum ați putea folosi Word2Vec în my Caietul de sarcini Jupyter.

O privire mai atentă asupra setărilor parametrilor

1612182551 268 Cum sa incepeti cu Word2Vec si apoi cum sa

Pentru a pregăti modelul mai devreme, a trebuit să setăm câțiva parametri. Acum, să încercăm să înțelegem ce înseamnă unele dintre ele. Pentru referință, aceasta este comanda pe care am folosit-o pentru a instrui modelul.

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

size

Dimensiunea vectorului dens care trebuie să reprezinte fiecare simbol sau cuvânt. Dacă aveți date foarte limitate, atunci dimensiunea ar trebui să fie o valoare mult mai mică. Dacă aveți o mulțime de date, este bine să experimentați diferite dimensiuni. O valoare de 100–150 a funcționat bine pentru căutările de similaritate.

window

Distanța maximă dintre cuvântul țintă și cuvântul său învecinat. Dacă poziția vecinului dvs. este mai mare decât lățimea maximă a ferestrei la stânga sau la dreapta, atunci unii vecini nu sunt considerați ca fiind legați de cuvântul țintă. În teorie, o fereastră mai mică ar trebui să vă ofere termeni care sunt mai legați. Dacă aveți o mulțime de date, atunci dimensiunea ferestrei nu ar trebui să conteze prea mult, atâta timp cât nu este prea îngustă sau prea largă. Dacă nu sunteți prea sigur în acest sens, utilizați doar valoarea implicită.

min_count

Frecvența minimă a numărului de cuvinte. Modelul ar ignora cuvintele care nu statisfy min_count. Cuvintele extrem de rare sunt de obicei lipsite de importanță, deci este mai bine să scapi de acestea. Cu excepția cazului în care setul de date este foarte mic, acest lucru nu afectează cu adevărat modelul.

workers

Câte fire de utilizat în culise?

Când ar trebui să utilizați Word2Vec?

Există multe scenarii de aplicație pentru Word2Vec. Imaginați-vă dacă aveți nevoie să construiți un lexic de sentiment. Instruirea unui model Word2Vec cu privire la cantități mari de recenzii ale utilizatorilor vă ajută să realizați acest lucru. Aveți un lexicon nu numai pentru sentiment, ci pentru majoritatea cuvintelor din vocabular.

Dincolo de datele text brute nestructurate, puteți utiliza și Word2Vec pentru date mai structurate. De exemplu, dacă aveți etichete pentru un milion de întrebări și răspunsuri StackOverflow, puteți găsi etichete conexe și le puteți recomanda pentru explorare. Puteți face acest lucru tratând fiecare set de etichete concurente ca o „propoziție” și instruiți un model Word2Vec pe aceste date. Bineînțeles, aveți în continuare nevoie de un număr mare de exemple pentru ca acesta să funcționeze.

Cod sursa

Pentru a utiliza blocnotesul Jupyter al acestui tutorial, puteți merge la Repo GitHub și urmați instrucțiunile despre cum să faceți ca notebook-ul să ruleze local. Am de gând să încărc vectorii pre-instruiți care ar putea fi folosiți pentru munca ta.

Pentru a urmări articolul lui Kavita prin e-mail, vă rugăm abonați-vă la blogul ei.
Acest articol a fost publicat inițial la kavita-ganesan.com