Ako začať s Word2Vec - a potom ako zabezpečiť jeho fungovanie

Myšlienka Word2Vec je veľmi jednoduchá. Vychádzame z predpokladu, že význam slova môže vyvodiť spoločnosť, ktorú zachováva. Obdobne ako vraví: „ ukáž mi svojich priateľov a ja ti poviem, kto si.

Ak máte dve slová, ktoré majú veľmi podobných susedov (čo znamená: kontext, v ktorom sa používa, je približne rovnaký), potom sú tieto slová pravdepodobne významovo dosť podobné alebo sú prinajmenšom spojené. Napríklad slová šokovaný , zdesený a užasnutý sa zvyčajne používajú v podobnom kontexte.

Pomocou tohto základného predpokladu môžete pomocou Word2Vec zobraziť podobné koncepty, nájsť nesúvisiace koncepty, vypočítať podobnosť medzi dvoma slovami a ďalšie!

Až do práce

V tomto výučbe sa dozviete, ako používať implementáciu Word2Vec v Gensime a ako skutočne začať pracovať. Už dávno som počul sťažnosti na slabý výkon vo všeobecnosti, ale skutočne ide o kombináciu dvoch vecí: (1) vaše vstupné údaje a (2) vaše nastavenie parametrov .

Upozorňujeme, že cvičné algoritmy v balíku Gensim boli skutočne prenesené z pôvodnej implementácie Word2Vec spoločnosťou Google a rozšírené o ďalšie funkcie.

Dovoz a ťažba dreva

Najprv začneme s importom a začneme protokolovať:

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

Množina údajov

Našou ďalšou úlohou je nájsť skutočne dobrý súbor údajov. Tajomstvo toho, ako Word2Vec skutočne funguje, je mať veľa a veľa textových údajov v príslušnej doméne. Napríklad, ak je vaším cieľom vybudovanie lexikónu sentimentu, potom nemusí byť použitie sady údajov z lekárskej oblasti alebo dokonca z Wikipédie efektívne. Vyberte si svoj dátový súbor rozumne.

Pre tento tutoriál budem používať údaje z datasetu OpinRank z mojej práce Ph.D. Tento súbor údajov obsahuje úplné recenzie používateľov automobilov a hotelov. Všetky recenzie hotelov som konkrétne zhromaždil do jedného veľkého súboru, ktorý je komprimovaný asi 97 MB a nekomprimovaný 229 MB . Pre tento tutoriál použijeme komprimovaný súbor. Každý riadok v tomto súbore predstavuje recenziu hotela.

Teraz sa pozrime bližšie na tieto údaje, a to vytlačením prvého riadku.

Mali by ste vidieť nasledujúce:

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"

Vidíte, že je to celkom dobrá, úplná recenzia s množstvom slov a to je to, čo chceme. V tomto súbore údajov máme približne 255 000 takýchto recenzií.

Aby ste sa vyhli nedorozumeniam, v tutoriále Word2Vec od spoločnosti Gensim sa uvádza, že ako vstup do programu Word2Vec musíte zadať postupnosť viet. Celú recenziu však môžete skutočne odovzdať ako vetu (tj. Text s oveľa väčšou veľkosťou), ak máte veľa údajov a nemalo by to veľa zmeniť. Nakoniec všetko, čo používame, je získanie všetkých susedných slov pre dané cieľové slovo.

Čítať súbory do zoznamu

Teraz, keď sme dosiahli špičku nášho súboru údajov, môžeme ho načítať do zoznamu, aby sme ho mohli preniesť do modelu Word2Vec. V nižšie uvedenom kóde si všimnite, že komprimovaný súbor čítam priamo. Tiež robím mierne predbežné spracovanie recenzií pomocou gensim.utils.simple_preprocess (line). Toto vykoná niektoré základné predbežné spracovanie, ako je tokenizácia, malé písmená atď., A vráti späť zoznam tokenov (slov). Dokumentáciu k tejto metóde predbežného spracovania nájdete na oficiálnej stránke dokumentácie Gensim.

Školenie modelu Word2Vec

Výcvik modelu je pomerne jednoduchý. Stačí vytvoriť inštanciu Word2Vec a odovzdať recenzie, ktoré sme si prečítali v predchádzajúcom kroku. V podstate teda odovzdávame zoznam zoznamov, kde každý zoznam v hlavnom zozname obsahuje množinu tokenov z používateľskej recenzie. Word2Vec používa všetky tieto tokeny na interné vytvorenie slovnej zásoby. A slovnou zásobou mám na mysli súbor jedinečných slov.

Po zostavení slovnej zásoby stačí zavolať train(...)a začať trénovať model Word2Vec. V zákulisí vlastne trénujeme jednoduchú neurónovú sieť s jedinou skrytou vrstvou. Ale v skutočnosti nebudeme používať neurónovú sieť po tréningu. Namiesto toho je cieľom zistiť váhy skrytej vrstvy. Tieto váhy sú v podstate slovné vektory, ktoré sa snažíme naučiť.

Školenie o dátovom súbore Word2Vec OpinRank trvá asi 10–15 minút. takže buďte trpezliví, kým spustíte svoj kód v tejto množine údajov

Zábavná časť - niekoľko výsledkov!

Poďme už k zábavným veciam! Keďže sme sa školili v recenziách používateľov, bolo by pekné vidieť podobnosť v niektorých prídavných menách. Tento prvý príklad ukazuje jednoduché vyhľadanie slov podobných slovu „špinavý“. Všetko, čo tu musíme urobiť, je zavolať most_similarfunkciu a uviesť slovo „špinavý“ ako pozitívny príklad. Takto sa vráti 10 najlepších podobných slov.

Ooh, to vyzerá celkom dobre. Pozrime sa na viac.

Podobne ako zdvorilý:

Podobne ako vo Francúzsku:

Podobne ako v šoku:

Celkovo majú výsledky v skutočnosti zmysel. Všetky súvisiace slová majú tendenciu byť použité v rovnakom kontexte pre dané dopytované slovo.

Teraz môžete dokonca použiť Word2Vec na výpočet podobnosti medzi dvoma slovami v slovníku vyvolaním similarity(...)funkcie a zadaním príslušných slov.

Vyššie uvedené tri úryvky pod kapotou vypočítavajú kosínovú podobnosť medzi dvoma zadanými slovami pomocou vektorových slov každého z nich. Z vyššie uvedených výsledkov je zrejmé, že dirtyje to veľmi podobné, smellyale dirtyodlišné clean. Ak urobíte podobnosť medzi dvoma rovnakými slovami, skóre bude 1,0, pretože rozsah skóre kosínovej podobnosti bude vždy medzi [0,0 - 1,0]. Viac informácií o skórovaní kosínovej podobnosti si môžete prečítať tu.

Viac príkladov toho, ako by ste mohli použiť Word2Vec, nájdete v mojom notebooku Jupyter.

Bližší pohľad na nastavenie parametrov

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

Ak chcete použiť tento výukový program Jupyter Notebook, môžete prejsť do môjho repozitára GitHub a postupovať podľa pokynov na miestne spustenie notebooku. Mám v pláne nahrať vopred vyškolené vektory, ktoré by sa mohli použiť na vašu vlastnú prácu.

Ak chcete sledovať článok Kavity prostredníctvom e-mailu, prihláste sa na odber jej blogu.

Tento článok bol pôvodne publikovaný na kavita-ganesan.com