Hogyan kezdjük el a Word2Vec használatát - és akkor hogyan kell működni

A Word2Vec ötlete meglehetősen egyszerű. Feltételezzük, hogy a szó jelentését az általa vezetett vállalat kikövetkeztetheti. Ez analóg a mondással: „ mutasd meg barátaidat, és elmondom, ki vagy.

Ha van két olyan szava, amelyeknek nagyon hasonló szomszédaik vannak (ez azt jelenti: a szövegkörnyezet, amelyben a szóhasználat körülbelül azonos), akkor ezek a szavak valószínűleg meglehetősen hasonló jelentésűek, vagy legalábbis összefüggenek egymással. Például a megdöbbent , megdöbbent és meghökkent szavakat általában hasonló összefüggésben használják.

Ennek az alapfeltevésnek a segítségével használhatja a Word2Vec-et hasonló fogalmak felszínre hozatalára, egymással nem összefüggő fogalmak keresésére, két szó hasonlóságának kiszámítására és még sok minden másra!

Le az üzletre

Ebben az oktatóanyagban megtanulhatja, hogyan kell használni a Word2Vec Gensim implementációját, és hogyan kell működtetni. Régóta hallottam panaszokat általában a gyenge teljesítményről, de ez valóban két dolog kombinációja: (1) a bemeneti adatok és (2) a paraméterbeállítások .

Ne feledje, hogy a Gensim csomagban található oktatási algoritmusokat a Google az eredeti Word2Vec implementációból hordozta, és további funkciókkal bővítette.

Import és fakitermelés

Először az importunkkal kezdjük, és naplózást hozunk létre:

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

Adatkészlet

A következő feladatunk egy igazán jó adatkészlet megtalálása. Az a titka, hogy a Word2Vec valóban működik az Ön számára, hogy sok-sok szöveges adat van az érintett tartományban. Például, ha az a célja, hogy hangulati lexikont készítsen, akkor az orvosi területen vagy akár a Wikipédiában található adatkészlet használata nem biztos, hogy hatékony. Tehát bölcsen válassza ki az adatkészletet.

Ehhez az oktatóanyaghoz a PhD doktori munkám egyes véleményeinek véleményét fogom felhasználni. Ez az adatkészlet teljes körű felhasználói véleményt tartalmaz az autókról és a szállodákról. Pontosan összegyűjtöttem az összes szálloda véleményét egy nagy fájlba, amely körülbelül 97 MB tömörített és 229 MB tömörítetlen. A tömörített fájlt fogjuk használni ehhez az oktatóanyaghoz. A fájl minden sora a szálloda véleményét jelenti.

Most nézzük meg alaposabban ezeket az adatokat az első sor kinyomtatásával.

A következőket kell látnia:

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"

Láthatja, hogy ez egy nagyon jó, teljes áttekintés, sok szóval, és ezt szeretnénk. Körülbelül 255 000 ilyen vélemény van ebben az adatkészletben.

A félreértések elkerülése érdekében a Gensim Word2Vec oktatóprogramja szerint mondatsorozatot kell átadnia bemenetként a Word2Vec számára. Ha azonban sok adata van, és ez nem okozhat nagy különbséget, akkor valójában egy egész áttekintést mondatként átadhat (vagyis sokkal nagyobb méretű szöveget). Végül csak arra használjuk az adatkészletet, hogy megkapjuk az összes szomszédos szót egy adott célszóhoz.

Olvassa el a fájlokat egy listába

Most, hogy elérte az adatkészlet csúcspontját, felolvashatjuk egy listába, hogy ezt tovább tudjuk adni a Word2Vec modellnek. Az alábbi kódban vegye észre, hogy közvetlenül a tömörített fájlt olvasom. A vélemények enyhe előfeldolgozását is végzem a gensim.utils.simple_preprocess (line). Ez néhány alapvető előfeldolgozást végez, például tokenizálást, kisbetűs írást stb., És visszaküldi a tokenek (szavak) listáját. Ennek az előfeldolgozási módszernek a dokumentációja megtalálható a hivatalos Gensim dokumentációs oldalon.

A Word2Vec modell oktatása

A modell oktatása meglehetősen egyszerű. Csak példázza a Word2Vec programot, és átadja azokat a véleményeket, amelyeket az előző lépésben olvastunk. Tehát lényegében továbbadunk egy listák listáját, ahol a fő lista minden listája tartalmaz egy felhasználói felülvizsgálatból származó tokenek készletét. A Word2Vec mindezeket a tokeneket belső szókincs létrehozására használja. Szókincs alatt pedig egyedi szavak halmazát értem.

A szókincs felépítése után csak train(...)felhívnunk kell a Word2Vec modell képzésének megkezdéséhez. A színfalak mögött valójában egy egyszerű ideghálózatot képezünk egyetlen rejtett réteggel. De valójában nem fogjuk használni az ideghálózatot edzés után. Ehelyett a rejtett réteg súlyának megismerése a cél. Ezek a súlyok lényegében azok a szóvektorok, amelyeket megpróbálunk megtanulni.

A Word2Vec OpinRank adatkészleten történő képzés körülbelül 10–15 percet vesz igénybe. ezért kérjük, legyen türelmes, miközben futtatja a kódját ezen az adatkészleten

A szórakoztató rész - néhány eredmény!

Térjünk rá már a szórakoztató dolgokra! Mivel a felhasználói véleményekről tanultunk, jó lenne néhány melléknév hasonlóságát látni. Ez az első példa a „piszkos” szóhoz hasonló szavak egyszerű felkutatását mutatja. Itt csak annyit kell tennünk, hogy meghívjuk a most_similarfüggvényt, és pozitív példaként megadjuk a „piszkos” szót. Ez a top 10 hasonló szót adja vissza.

Ó, ez nagyon jól néz ki. Nézzünk meg többet.

Hasonló az udvariashoz:

Hasonló Franciaországhoz:

Hasonló a sokkhoz:

Összességében az eredmények valóban értelmesek. Az összes kapcsolódó szót általában ugyanabban a kontextusban használják az adott lekérdezési szóra.

Most még a Word2Vec segítségével is kiszámíthatja a szókincs két szó közötti hasonlóságot a similarity(...)függvény meghívásával és a vonatkozó szavak átadásával.

A motorháztető alatt a fenti három részlet a szavak vektorainak segítségével kiszámítja a két meghatározott szó koszinusz-hasonlóságát. A fenti pontszámok alapján van értelme, dirtyamely nagymértékben hasonlít a következőkre, smellyde dirtynem hasonlít azokra clean. Ha hasonlóságot csinál két azonos szó között, a pontszám 1,0 lesz, mivel a koszinusz hasonlósági pontszám tartománya mindig [0,0-1,0] között lesz. A koszinusz hasonlósági pontozásról itt olvashat bővebben.

További példákat talál a Word2Vec használatára a Jupyter Jegyzetfüzetemben.

A paraméterbeállítások részletesebb áttekintése

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

To use this tutorial’s Jupyter Notebook, you can go to my GitHub repo and follow the instructions on how to get the notebook running locally. I plan to upload the pre-trained vectors which could be used for your own work.

To follow Kavita’s article via email, please subscribe to her blog.

This article was originally published at kavita-ganesan.com