Word beágyazás és Word2Vec modell példával
Mi az a Word-beágyazás?
Szó beágyazása egy szóreprezentációs típus, amely lehetővé teszi a gépi tanulási algoritmusok számára, hogy megértsék a hasonló jelentésű szavakat. Ez egy nyelvi modellezési és jellemzőtanulási technika a szavak valós számok vektoraira való leképezésére neurális hálózatok, valószínűségi modellek vagy dimenziócsökkentés segítségével a szótárs előfordulási mátrixon. Néhány szóbeágyazási modell a Word2vec (Google), a Glove (Stanford) és a leggyorsabb (Facebook).
A Word Beágyazást elosztott szemantikai modellnek vagy elosztott reprezentált vagy szemantikus vektortérnek vagy vektortér modellnek is nevezik. Ahogy olvassa ezeket a neveket, találkozik a szemantikus szóval, ami azt jelenti, hogy hasonló szavakat csoportosítanak. Például az olyan gyümölcsöket, mint az alma, mangó, banán, közel kell elhelyezni, míg a könyvek távol esnek ezektől a szavaktól. Tágabb értelemben a szóbeágyazás létrehozza a gyümölcsök vektorát, amely távol esik a könyvek vektoros ábrázolásától.
Hol használják a Word-beágyazást?
A Word-beágyazás segít a funkciók generálásában, a dokumentumcsoportosításban, a szövegosztályozásban és a természetes nyelvi feldolgozási feladatokban. Soroljuk fel őket, és vitassuk meg ezeket az alkalmazásokat.
- Számíts ki hasonló szavakat: A szóbeágyazás az előrejelzési modellnek alávetett szóhoz hasonló szavak javasolására szolgál. Ezzel együtt eltérő szavakat, valamint a leggyakoribb szavakat is javasolja.
- Hozzon létre egy csoportot kapcsolódó szavakból: Szemantikai csoportosításra használatos, amely a hasonló jellemzőkkel rendelkező és távolról eltérő dolgokat csoportosítja.
- A szövegbesorolás funkciója: A szöveg vektortömbökbe van leképezve, amelyeket betáplál a modellbe a képzés és az előrejelzés céljából. Szöveg alapú osztályozó modellek nem taníthatók a karakterláncra, így ez a szöveget gépi betanítható formává alakítja. Továbbá a szemantikai segítség felépítésének jellemzői a szöveg alapú osztályozásban.
- Dokumentum klaszterezés: egy másik alkalmazás, ahol a Word Embedding Word2vec széles körben használatos
- Természetes nyelvfeldolgozás: Sok olyan alkalmazás létezik, ahol a szóbeágyazás hasznos, és megnyeri a funkciók kivonási fázisait, például a beszédcímkézés, a szentimentális elemzés és a szintaktikai elemzés egyes részeit. Most némi ismeretet szereztünk a szóbeágyazásról. A szóbeágyazás megvalósítása érdekében különböző modellekre is fény derül. Ez az egész Word beágyazási oktatóanyag az egyik modellre (Word2vec) összpontosít.
Mi az a Word2vec?
Word2vec egy technika/modell szóbeágyazás előállítására a jobb szóábrázolás érdekében. Ez egy természetes nyelvi feldolgozási módszer, amely nagyszámú precíz szintaktikai és szemantikai szókapcsolatot rögzít. Ez egy sekély, kétrétegű neurális hálózat, amely képes felismerni a szinonim szavakat, és a betanítás után további szavakat javasolni részmondatokhoz.
Mielőtt továbbmenne ebben a Word2vec oktatóanyagban, nézze meg a sekély és a mély neurális hálózat közötti különbséget, amint azt az alábbi Word beágyazási példadiagram mutatja:
A sekély neurális hálózat csak egy rejtett rétegből áll a bemenet és a kimenet között, míg a mély neurális hálózat több rejtett réteget tartalmaz a bemenet és a kimenet között. A bemenet csomópontoknak van kitéve, míg a rejtett réteg, valamint a kimeneti réteg neuronokat tartalmaz.
A Word2vec egy kétrétegű hálózat, ahol van egy rejtett bemeneti réteg és egy kimenet.
A Word2vec-et Tomas Mikolov által vezetett kutatócsoport fejlesztette ki a Google-nál. A Word2vec jobb és hatékonyabb, mint a látens szemantikai elemzési modell.
Miért Word2vec?
A Word2vec vektortérábrázolásban jeleníti meg a szavakat. A szavakat vektorok formájában ábrázolják, és az elhelyezést úgy végezzük, hogy a hasonló jelentésű szavak együtt jelenjenek meg, a különböző szavak pedig távol helyezkedjenek el. Ezt szemantikai kapcsolatnak is nevezik. A neurális hálózatok nem értik a szöveget, hanem csak a számokat. A Word Beágyazás lehetőséget biztosít a szöveg numerikus vektorokká alakítására.
A Word2vec rekonstruálja a szavak nyelvi kontextusát. Mielőtt továbbmennénk, értsük meg, mi az a nyelvi kontextus? Általános élethelyzetben, amikor beszélünk vagy írunk kommunikáció céljából, mások megpróbálják kitalálni, mi a mondat célja. Például: „Mi az India hőmérséklete”, itt a kontextus az, hogy a felhasználó tudni szeretné „India hőmérsékletét”, ami kontextus. Röviden, egy mondat fő célja a kontextus. A beszélt vagy írott nyelvet körülvevő szó vagy mondat (feltárás) segít a kontextus jelentésének meghatározásában. A Word2vec megtanulja a szavak vektoros ábrázolását a kontextusokon keresztül.
Mit csinál a Word2vec?
Word beágyazás előtt
Fontos tudni, hogy melyik megközelítést használjuk a Word beágyazás előtt, és mik a hátrányai, majd áttérünk arra a témára, hogy hogyan küszöböli ki a hátrányokat a Word beágyazás Word2vec megközelítéssel. Végül áttekintjük a Word2vec működését, mert fontos megérteni, hogy működik.
A látens szemantikai elemzés megközelítése
Ezt a megközelítést a szóbeágyazások előtt használták. A szózsák fogalmát használta, ahol a szavak kódolt vektorok formájában vannak ábrázolva. Ez egy ritka vektoros ábrázolás, ahol a dimenzió megegyezik a szókincs méretével. Ha a szó előfordul a szótárban, akkor beszámításra kerül, különben nem. Ha többet szeretne megtudni, kérjük, tekintse meg az alábbi programot.
Word2vec példa
from sklearn.feature_extraction.text import CountVectorizer vectorizer = CountVectorizer() data_corpus = ["guru99 is the best site for online tutorials. I love to visit guru99."] vocabulary = vectorizer.fit(data_corpus) X = vectorizer.transform(data_corpus) print(X.toarray()) print(vectorizer.get_feature_names_out())
output:
[[1 2 1 1 1 1 1 1 1 1]]
[u'best', u'guru99', u'is', u'love', u'online', u'sitefor', u'the', u'to', u'tutorials', u'visit']
Kód Magyarázat
- A CountVectorizer az a modul, amely a szókincs tárolására szolgál a benne lévő szavak illeszkedése alapján. Ezt a sklearnből importálják.
- Készítse el az objektumot a CountVectorizer osztály használatával.
- Írja be a listába azokat az adatokat, amelyeket be kell illeszteni a CountVectorizerbe.
- Az adatok elférnek a CountVectorizer osztályból létrehozott objektumban.
- Alkalmazzon egy zsák szóalapú megközelítést a szavak megszámlálásához az adatokban a szókincs használatával. Ha a szó vagy a token nem elérhető a szótárban, akkor az indexpozíció nullára lesz állítva.
- Az 5. sorban lévő változó, amely x, a rendszer tömbbé konvertálja (x-hez elérhető módszer). Ez megadja az egyes tokenek számát a 3. sorban található mondatban vagy listában.
- Ez megmutatja azokat a jellemzőket, amelyek a szókincs részét képezik, amikor a 4. sorban lévő adatok felhasználásával illesztettük.
A látens szemantikus megközelítésben a sor egyedi szavakat jelöl, míg az oszlop azt jelenti, hogy a szó hányszor jelenik meg a dokumentumban. Ez a szavak reprezentációja a dokumentummátrix formájában. A kifejezés-gyakoriság inverz dokumentumgyakorisága (TFIDF) a dokumentumban lévő szavak gyakoriságának számítására szolgál, amely a kifejezés gyakorisága a dokumentumban / a kifejezés gyakorisága a teljes korpuszban.
A Bag of Words módszer hiányossága
- Figyelmen kívül hagyja a szó sorrendjét, például ez rossz = rossz ez.
- Figyelmen kívül hagyja a szavak kontextusát. Tegyük fel, ha leírom a következő mondatot: „Szerette a könyveket. Az oktatás leginkább a könyvekben található meg”. Két vektort hozna létre az egyik a „Szerette a könyveket”, a másik pedig a „Az oktatás a könyvekben található a legjobban”. Mindkettőt ortogonálisan kezelné, ami függetlenné teszi őket, de valójában kapcsolatban állnak egymással
E korlátok leküzdésére szóbeágyazást fejlesztettek ki, és a Word2vec egy megközelítés ennek megvalósítására.
Hogyan működik a Word2vec?
A Word2vec úgy tanulja meg a szót, hogy megjósolja a környező kontextust. Vegyük például azt a szót, hogy „Ő szeret Futball."
Ki akarjuk számítani a Word2vec-et a: loves szóra.
Tegyük fel
loves = Vin. P(Vout / Vin) is calculated where, Vin is the input word. P is the probability of likelihood. Vout is the output word.
szó szeret a korpusz minden egyes szava felett mozog. A szavak közötti szintaktikai és szemantikai kapcsolat kódolva van. Ez segít megtalálni a hasonló és analóg szavakat.
A szó összes véletlenszerű jellemzője szeret kiszámításra kerül. Ezek a tulajdonságok a szomszédos vagy kontextusszavakra vonatkozóan módosíthatók vagy frissíthetők az a Vissza szaporítás módszer.
A tanulás másik módja az, hogy ha két szó szövegkörnyezete hasonló, vagy két szó hasonló tulajdonságokkal rendelkezik, akkor ezek a szavak rokonok.
Word2vec Architectúra
A Word2vec két architektúrát használ:
- Continuous Bag of Word (CBOW)
- Skip gramm
Mielőtt továbbmennénk ebben a Word2vec oktatóanyagban, beszéljük meg, miért fontosak ezek az architektúrák vagy modellek a szóábrázolás szempontjából. A szóábrázolás elsajátítása lényegében felügyelet nélkül történik, de célpontokra/címkékre van szükség a modell betanításához. A Skip-gram és a CBOW átalakítja a felügyelt ábrázolást felügyelt formává a modellképzéshez.
A CBOW-ban az aktuális szót a környező kontextusablakok ablaka alapján jelzi előre. Például ha wi-1,wi-2,wi + 1,wi + 2szavakat vagy szövegkörnyezetet kapunk, ez a modell w-t biztosíti
A Skip-Gram a CBOW ellentétét hajtja végre, ami azt jelenti, hogy előrejelzi a szóból az adott sorozatot vagy kontextust. Megfordíthatja a példát, hogy megértse. Ha wi adott, ez előrejelzi a kontextust vagy wi-1,wi-2,wi + 1,wi+2.
A Word2vec lehetőséget biztosít a CBOW (folyamatos szavak zsák) és a skim-gram közötti választásra. Az ilyen paramétereket a modell betanítása során biztosítjuk. Lehetőség van negatív mintavételezésre vagy hierarchikus softmax réteg használatára.
Folyamatos Szavak zsákja
Rajzoljunk egy egyszerű Word2vec példadiagramot, hogy megértsük a szóarchitektúra folyamatos zsákját.
Számítsuk ki az egyenleteket matematikailag! Tegyük fel, hogy V a szókincs mérete, N pedig a rejtett réteg mérete. A bemenet definíciója: { xi-1, xi-2, xi+1, xi + 2}. A súlymátrixot V * N szorzásával kapjuk. Egy másik mátrixot kapunk, ha a bemeneti vektort megszorozzuk a súlymátrixszal. Ez a következő egyenlettel is érthető.
h=xitW
ahol xit? W a bemeneti vektor és a súlymátrix,
A szövegkörnyezet és a következő szó közötti egyezés kiszámításához tekintse meg az alábbi egyenletet
u=predicted reprezentáció*h
ahol a megjósolt reprezentációt kapjuk a h modellben a fenti egyenletben.
Skip-Gram modell
A Skip-Gram megközelítést egy bemeneti szó melletti mondat előrejelzésére használják. Hogy jobban megértsük, rajzoljuk meg a diagramot az alábbi Word2vec példában látható módon.
Lehet kezelni a Continuous bag of word modell fordítottjaként, ahol a bemenet a szó, a modell pedig a kontextust vagy a sorozatot adja. Arra is levonhatjuk a következtetést, hogy a célt a bemeneti rétegbe tápláljuk, és a kimeneti réteget többször megismételjük, hogy megfeleljen a kiválasztott számú kontextusszónak. Az összes kimeneti réteg hibavektorát összegzik a súlyok visszaterjesztési módszerrel történő beállításához.
Melyik modellt válasszuk?
A CBOW többszörösen gyorsabb, mint a gramm átugrása, és jobb gyakoriságot biztosít a gyakori szavakhoz, míg a gramm kihagyása kis mennyiségű képzési adatot igényel, és még ritka szavakat vagy kifejezéseket is képvisel.
A Word2vec és az NLTK kapcsolata
NLTK természetes nyelvi eszköztár. A szöveg előfeldolgozására szolgál. Különböző műveletek végezhetők, mint például a beszédrészek címkézése, lemmatizálása, törzsszavazás, a szavak eltávolításának leállítása, a ritka szavak vagy a legkevésbé használt szavak eltávolítása. Segít a szöveg megtisztításában, valamint segít a jellemzők előkészítésében a hatásos szavakból. Másrészt a Word2vec-et szemantikai (szorosan kapcsolódó elemek együtt) és szintaktikai (szekvencia) egyeztetésére használják. A Word2vec használatával hasonló szavakat, eltérő szavakat, méretcsökkentést és sok mást találhatunk. A Word2vec másik fontos jellemzője, hogy a szöveg magasabb dimenziós ábrázolását kisebb dimenziójú vektorokká alakítja.
Hol használható az NLTK és a Word2vec?
Ha a fent említett általános célú feladatokat kell végrehajtani, például tokenizálást, POS-címkézést és elemzést, akkor az NLTK-t kell használnia, míg a szavak valamilyen kontextus, témamodellezés vagy dokumentum-hasonlóság alapján történő előrejelzéséhez Word2vec-et kell használni.
NLTK és Word2vec kapcsolata kód segítségével
Az NLTK és a Word2vec együtt használhatók hasonló szóreprezentációk vagy szintaktikai egyezések keresésére. Az NLTK eszközkészlettel számos olyan csomag betölthető, amelyek az NLTK-val együtt érkeznek, és a modell Word2vec használatával is létrehozható. Ezután a valós idejű szavakon tesztelhető. Lássuk mindkettő kombinációját a következő kódban. A további feldolgozás előtt kérjük, tekintse meg az NLTK által biztosított korpuszokat. A parancs segítségével letöltheti
nltk(nltk.download('all'))
Kérjük, tekintse meg a képernyőképet a kódhoz.
import nltk import gensim from nltk.corpus import abc model= gensim.models.Word2Vec(abc.sents()) X= list(model.wv.vocab) data=model.most_similar('science') print(data)
output:
[('law', 0.9415997266769409), ('practice', 0.9276568293571472), ('discussion', 0.9259148836135864), ('agriculture', 0.9257254004478455), ('media', 0.9232194423675537), ('policy', 0.922248125076294), ('general', 0.9166069030761719), ('undertaking', 0.916458249092102), ('tight', 0.9129181504249573), ('board', 0.9107444286346436)]
A kód magyarázata
- Az nltk könyvtár importálva van, ahonnan letöltheti az abc korpuszt, amelyet a következő lépésben fogunk használni.
- A Gensim importált. Ha a Gensim Word2vec nincs telepítve, kérjük, telepítse a „pip3 install gensim” paranccsal. Kérjük, tekintse meg az alábbi képernyőképet.
- importálja az nltk.download('abc') használatával letöltött abc korpuszt.
- Adja át a fájlokat a Word2vec modellnek, amelyet a Gensim használatával importált mondatként.
- A szókincs a változó formájában tárolódik.
- A modellt tudományos mintaszón tesztelték, mivel ezek a fájlok a tudományhoz kapcsolódnak.
- Itt a „tudomány” hasonló szót jósolja a modell.
Aktivátorok és Word2Vec
Az idegsejt aktiválási funkciója határozza meg az idegsejt kimenetét egy sor bemenet mellett. Biológiailag az agyunkban zajló tevékenység ihlette, ahol a különböző idegsejtek különböző ingerek hatására aktiválódnak. Értsük meg az aktiválási funkciót a következő diagramon keresztül.
Itt x1,x2,..x4 a neurális hálózat csomópontja.
w1, w2, w3 a csomópont súlya,
? az összes súly és csomópont értékének összegzése, amely aktiválási függvényként működik.
Miért az aktiválási funkció?
Ha nem használunk aktiválási funkciót, a kimenet lineáris lesz, de a lineáris funkció funkcionalitása korlátozott. Az olyan összetett funkciók eléréséhez, mint az objektumfelismerés, a képosztályozás, a szöveg beírása hanggal és sok egyéb nemlineáris kimenet szükséges, amelyet aktiválási funkcióval érünk el.
Hogyan történik az aktiválási réteg kiszámítása a szóbeágyazásban (Word2vec)
A Softmax Layer (normalizált exponenciális függvény) a kimeneti réteg funkciója, amely aktiválja vagy elindítja az egyes csomópontokat. Egy másik alkalmazott megközelítés a Hierarchikus softmax, ahol a komplexitást az O(log2V) ahol a softmax O(V), ahol V a szókincs mérete. A különbség ezek között a hierarchikus softmax réteg komplexitásának csökkentése. A (Hierarchical softmax) funkciójának megértéséhez nézze meg az alábbi Word beágyazási példát:
Tegyük fel, hogy ki akarjuk számítani a szó megfigyelésének valószínűségét szerelem adott kontextusban. A gyökértől a levélcsomópontig tartó áramlás lesz az első lépés a 2., majd az 5. csomópont felé. Tehát ha a szókincs mérete 8, akkor csak három számításra van szükség. Így lehetővé teszi egy szó lebontását, valószínűségének kiszámítását (szerelem).
Milyen egyéb lehetőségek állnak rendelkezésre a Hierarchical Softmaxon kívül?
Ha általános értelemben beszélünk a szóbeágyazási lehetőségekről: Differenciált Softmax, CNN-Softmax, fontossági mintavétel, adaptív fontossági mintavétel, zajkontrasztív becslések, negatív mintavétel, önnormalizálás és ritka normalizálás.
Ha konkrétan a Word2vecről beszélünk, akkor negatív mintavétel áll rendelkezésre.
A negatív mintavétel a tanítási adatok mintavételének módja. Kicsit olyan, mint a sztochasztikus gradiens süllyedés, de némi eltéréssel. A negatív mintavétel csak a negatív képzési példákat keresi. Zajkontrasztív becslésen alapul, és véletlenszerűen mintázza a szavakat, nem a kontextusban. Ez egy gyors képzési módszer, és véletlenszerűen választja ki a kontextust. Ha a megjósolt szó megjelenik a véletlenszerűen kiválasztott kontextusban, akkor mindkét vektor közel van egymáshoz.
Milyen következtetést lehet levonni?
Az aktivátorok úgy gyújtják ki a neuronokat, mint a mi neuronjainkat a külső ingerek hatására. A Softmax réteg az egyik kimeneti réteg funkció, amely szóbeágyazás esetén elindítja a neuronokat. A Word2vecben olyan lehetőségek állnak rendelkezésre, mint a hierarchikus softmax és a negatív mintavétel. Aktivátorok segítségével a lineáris függvény nemlineárisvá alakítható, és ezekkel komplex gépi tanulási algoritmus valósítható meg.
Mi az a Gensim?
Gensim egy nyílt forráskódú témamodellező és természetes nyelvi feldolgozó eszköztár, amely a Python és Cython. A Gensim eszközkészlet lehetővé teszi a felhasználók számára a Word2vec importálását témamodellezés céljából, hogy felfedezzék a rejtett szerkezetet a szövegtörzsben. A Gensim nem csak a Word2vec megvalósítását biztosítja, hanem a Doc2vec és a FastText számára is.
Ez az oktatóanyag a Word2vecről szól, így maradunk az aktuális témánál.
A Word2vec implementálása a Gensim használatával
Mostanáig megvitattuk, hogy mi az a Word2vec, különböző architektúrái, miért van eltolás a szavak zsákjáról a Word2vec felé, a Word2vec és az NLTK kapcsolata élő kóddal és aktiválási funkciókkal.
Az alábbiakban bemutatjuk a Word2vec Gensim használatával történő megvalósításának lépésről lépésre történő módszerét:
1. lépés) Adatgyűjtés
A gépi tanulási modell vagy a természetes nyelvi feldolgozás megvalósításának első lépése az adatgyűjtés
Kérjük, figyelje meg az adatokat egy intelligens chatbot felépítéséhez, amint az az alábbi Gensim Word2vec példában látható.
[{"tag": "welcome", "patterns": ["Hi", "How are you", "Is any one to talk?", "Hello", "hi are you available"], "responses": ["Hello, thanks for contacting us", "Good to see you here"," Hi there, how may I assist you?"] }, {"tag": "goodbye", "patterns": ["Bye", "See you later", "Goodbye", "I will come back soon"], "responses": ["See you later, thanks for visiting", "have a great day ahead", "Wish you Come back again soon."] }, {"tag": "thankful", "patterns": ["Thanks for helping me", "Thank your guidance", "That's helpful and kind from you"], "responses": ["Happy to help!", "Any time!", "My pleasure", "It is my duty to help you"] }, {"tag": "hoursopening", "patterns": ["What hours are you open?", "Tell your opening time?", "When are you open?", "Just your timing please"], "responses": ["We're open every day 8am-7pm", "Our office hours are 8am-7pm every day", "We open office at 8 am and close at 7 pm"] }, {"tag": "payments", "patterns": ["Can I pay using credit card?", " Can I pay using Mastercard?", " Can I pay using cash only?" ], "responses": ["We accept VISA, Mastercard and credit card", "We accept credit card, debit cards and cash. Please don’t worry"] } ]
Ezt értjük meg az adatokból
- Ezek az adatok három címkét, mintát és választ tartalmaznak. A címke a szándék (mi a vita tárgya).
- Az adatok JSON formátumban vannak.
- A minta egy olyan kérdés, amelyet a felhasználók feltesznek a botnak
- A válaszok az a válasz, amelyet a chatbot ad a megfelelő kérdésre/mintára.
2. lépés) Adatok előfeldolgozása
Nagyon fontos a nyers adatok feldolgozása. Ha megtisztított adatokat adunk a géphez, akkor a modell pontosabban reagál, és hatékonyabban tanulja meg az adatokat.
Ez a lépés magában foglalja a stopszavak, a törzsszavak, a szükségtelen szavak stb. eltávolítását. Mielőtt továbblépne, fontos az adatok betöltése és adatkeretté alakítása. Ehhez nézze meg az alábbi kódot
import json json_file =’intents.json' with open('intents.json','r') as f: data = json.load(f)
A kód magyarázata:
- Mivel az adatok json formátumúak, így a json importálásra kerül
- A fájl a változóban tárolódik
- A fájl meg van nyitva, és betöltődik az adatváltozóba
Most megtörtént az adatok importálása, és ideje az adatokat adatkeretté konvertálni. Kérjük, tekintse meg az alábbi kódot a következő lépés megtekintéséhez
import pandas as pd df = pd.DataFrame(data) df['patterns'] = df['patterns'].apply(', '.join)
A kód magyarázata:
1. Az adatokat a fent importált pandák segítségével adatkeretté alakítjuk.
2. Az oszlopmintázatú listát karakterláncsá alakítja.
from nltk.corpus import stopwords from textblob import Word stop = stopwords.words('english') df['patterns'] = df['patterns'].apply(lambda x:' '.join(x.lower() for x in x.split())) df['patterns't']= df['patterns''].apply(lambda x: ' '.join(x for x in x.split() if x not in string.punctuation) df['patterns']= df['patterns'].str.replace('[^\w\s]','') df['patterns']= df['patterns'].apply(lambda x: ' '.join(x for x in x.split() if not x.isdigit())) df['patterns'] = df['patterns'].apply(lambda x:' '.join(x for x in x.split() if not x in stop)) df['patterns'] = df['patterns'].apply(lambda x: " ".join([Word(word).lemmatize() for word in x.split()]))
Kód magyarázata:
1. Az angol stopszavak importálása az nltk eszközkészletből származó stop szó modul használatával történik
2. A szöveg minden szava kisbetűre lesz konvertálva a feltétel és a lambda függvény használatával. Lambda funkció egy névtelen funkció.
3. Az adatkeretben lévő szöveg minden sorában ellenőrizzük a karakterlánc írásjeleket, és ezeket kiszűrjük.
4. A karakterek, például a számok vagy pontok eltávolítása reguláris kifejezéssel történik.
5. Digit-k eltávolításra kerülnek a szövegből.
6. Ebben a szakaszban a stop szavakat eltávolítjuk.
7. A szavakat a rendszer most kiszűri, és ugyanannak a szónak a különböző alakjait eltávolítja a lemmatizálással. Ezekkel az adatok előfeldolgozását befejeztük.
output:
, patterns, responses, tag 0,hi one talk hello hi available,"['Hello, thanks for contacting us', 'Good to see you here', ' Hi there, how may I assist you?']",welcome 1,bye see later goodbye come back soon,"['See you later, thanks for visiting', 'have a great day ahead', 'Wish you Come back again soon.']",goodbye 2,thanks helping thank guidance thats helpful kind,"['Happy to help!', 'Any time!', 'My pleasure', 'It is my duty to help you']",thankful 3,hour open tell opening time open timing please,"[""We're open every day 8am-7pm"", 'Our office hours are 8am-7pm every day', 'We open office at 8 am and close at 7 pm']",hoursopening 4,pay using credit card pay using mastercard pay using cash,"['We accept VISA, Mastercard and credit card', 'We accept credit card, debit cards and cash. Please don’t worry']",payments
3. lépés) Neurális hálózat kiépítése Word2vec használatával
Most itt az ideje, hogy modellt építsünk a Gensim Word2vec modul használatával. A Word2vec-et importálnunk kell a Gensimből. Tegyük ezt meg, majd felépítjük és a végső szakaszban valós idejű adatokon ellenőrizzük a modellt.
from gensim.models import Word2Vec
Ebben a Gensim Word2vec oktatóanyagban sikeresen megépíthetjük a modellt a Word2Vec használatával. Kérjük, tekintse meg a következő kódsort a modell Word2Vec használatával történő létrehozásának megismeréséhez. A szöveget a modell lista formájában kapja meg, így a szöveget adatkeretből listává konvertáljuk az alábbi kód segítségével
Bigger_list=[] for i in df['patterns'] li = list(i.split("")) Bigger_list.append(li) Model= Word2Vec(Bigger_list,min_count=1,size=300,workers=4)
A kód magyarázata:
1. Létrehozta a nagyobb_listát, amelyhez a belső lista hozzá van fűzve. Ez az a formátum, amelyet a Word2Vec modell táplál.
2. A ciklus megvalósul, és az adatkeret minták oszlopának minden egyes bejegyzése megismétlődik.
3. Az oszlopminták minden eleme felosztásra kerül és a belső listában (li) tárolódik
4. A belső listát a külső listával kell kiegészíteni.
5. Ezt a listát a Word2Vec modell biztosítja. Nézzünk meg néhány itt megadott paramétert
Min_count: Figyelmen kívül hagy minden olyan szót, amelynek teljes gyakorisága ennél kisebb.
Méret: Megmondja a szóvektorok dimenzióját.
munkások: Ezek a szálak a modell betanításához
Más lehetőségek is rendelkezésre állnak, és néhány fontosat az alábbiakban ismertetünk
ablak: Maximális távolság a mondaton belül az aktuális és a várható szó között.
Sg: Ez egy betanító algoritmus, és 1 a kihagyott grammokhoz és 0 a folyamatos szavakhoz. Ezeket a fentiekben részletesen tárgyaltuk.
Hs: Ha ez 1, akkor hierarchikus softmax-ot használunk a képzéshez, ha pedig 0, akkor negatív mintavételezést használunk.
Alpha: Kezdeti tanulási arány
Az alábbiakban jelenítsük meg a végső kódot:
#list of libraries used by the code import string from gensim.models import Word2Vec import logging from nltk.corpus import stopwords from textblob import Word import json import pandas as pd #data in json format json_file = 'intents.json' with open('intents.json','r') as f: data = json.load(f) #displaying the list of stopwords stop = stopwords.words('english') #dataframe df = pd.DataFrame(data) df['patterns'] = df['patterns'].apply(', '.join) # print(df['patterns']) #print(df['patterns']) #cleaning the data using the NLP approach print(df) df['patterns'] = df['patterns'].apply(lambda x:' '.join(x.lower() for x in x.split())) df['patterns']= df['patterns'].apply(lambda x: ' '.join(x for x in x.split() if x not in string.punctuation)) df['patterns']= df['patterns'].str.replace('[^\w\s]','') df['patterns']= df['patterns'].apply(lambda x: ' '.join(x for x in x.split() if not x.isdigit())) df['patterns'] = df['patterns'].apply(lambda x:' '.join(x for x in x.split() if not x in stop)) df['patterns'] = df['patterns'].apply(lambda x: " ".join([Word(word).lemmatize() for word in x.split()])) #taking the outer list bigger_list=[] for i in df['patterns']: li = list(i.split(" ")) bigger_list.append(li) #structure of data to be taken by the model.word2vec print("Data format for the overall list:",bigger_list) #custom data is fed to machine for further processing model = Word2Vec(bigger_list, min_count=1,size=300,workers=4) #print(model)
4. lépés) Modell mentése
A modell elmenthető rekesz és modell űrlap formájában. A Bin a bináris formátum. Kérjük, tekintse meg az alábbi sorokat a modell mentéséhez
model.save("word2vec.model") model.save("model.bin")
A fenti kód magyarázata
1. A modell .model fájl formájában kerül mentésre.
2. a modell .bin fájl formájában kerül mentésre
Ezt a modellt fogjuk használni valós idejű teszteléshez, például a hasonló szavakhoz, a különböző szavakhoz és a leggyakoribb szavakhoz.
5. lépés) Modell betöltése és valós idejű tesztelés
A modell az alábbi kóddal töltődik be:
model = Word2Vec.load('model.bin')
Ha ki szeretné nyomtatni a szókincset, az alábbi paranccsal tegye meg:
vocab = list(model.wv.vocab)
Kérjük, nézze meg az eredményt:
['see', 'thank', 'back', 'thanks', 'soon', 'open', 'mastercard', 'card', 'time', 'pay', 'talk', 'cash', 'one', 'please', 'goodbye', 'thats', 'helpful', 'hour', 'credit', 'hi', 'later', 'guidance', 'opening', 'timing', 'hello', 'helping', 'bye', 'tell', 'come', 'using', 'kind', 'available']
6. lépés) A legtöbb hasonló szó ellenőrzése
Valósítsuk meg a dolgokat a gyakorlatban:
similar_words = model.most_similar('thanks') print(similar_words)
Kérjük, nézze meg az eredményt:
[('kind', 0.16104359924793243), ('using', 0.1352398842573166), ('come', 0.11500970274209976), ('later', 0.09989878535270691), ('helping', 0.04855936020612717), ('credit', 0.04659383371472359), ('pay', 0.0329081267118454), ('thank', 0.02484947443008423), ('hour', 0.0202352125197649), ('opening', 0.018177658319473267)]
7. lépés) Nem egyezik a megadott szavakkal
dissimlar_words = model.doesnt_match('See you later, thanks for visiting'.split()) print(dissimlar_words)
Megadtuk a szavakat 'Viszlát, köszönöm a látogatást'. Ez lesz nyomtasd ki a legkülönbözőbb szavakat ezekből a szavakból. Futtassuk ezt a kódot, és keressük meg az eredményt
Az eredmény a fenti kód végrehajtása után:
Thanks
8. lépés) Keresse meg a hasonlóságot két szó között
Ez megmutatja a két szó közötti hasonlóság valószínűségét. Kérjük, tekintse meg az alábbi kódot, hogyan kell végrehajtani ezt a részt.
similarity_two_words = model.similarity('please','see') print("Please provide the similarity between these two words:") print(similarity_two_words)
A fenti kód eredménye az alábbi
0.13706
További hasonló szavakat találhat az alábbi kód végrehajtásával
similar = model.similar_by_word('kind') print(similar)
A fenti kód kimenete:
[('credit', 0.11764447391033173), ('cash', 0.11440904438495636), ('one', 0.11151769757270813), ('hour', 0.0944807156920433), ('using', 0.0705675333738327), ('thats', 0.05206916481256485), ('later', 0.04502468928694725), ('bye', 0.03960943967103958), ('back', 0.03837274760007858), ('thank', 0.0380823090672493)]
Következtetés
- A szóbeágyazás a szóábrázolás olyan típusa, amely lehetővé teszi, hogy a hasonló jelentésű szavakat a gépi tanulási algoritmusok megértsék
- A Word Beágyazás hasonló szavak kiszámítására szolgál, kapcsolódó szavak csoportjának létrehozása, szövegosztályozási funkció, dokumentumcsoportosítás, természetes nyelvi feldolgozás
- A Word2vec elmagyarázta: A Word2vec egy sekély, kétrétegű neurális hálózati modell, amely szóbeágyazásokat hoz létre a jobb szóábrázolás érdekében
- A Word2vec vektortérábrázolásban jeleníti meg a szavakat. A szavak vektorok formájában vannak ábrázolva, és az elhelyezés úgy történik, hogy a hasonló jelentésű szavak együtt jelenjenek meg, és a különböző szavak távol helyezkedjenek el
- A Word2vec algoritmus 2 architektúrát használ: Continuous Bag of szavak (CBOW) és a gramm átugrása
- A CBOW többszörösen gyorsabb, mint a gramm átugrása, és jobb gyakoriságot biztosít a gyakori szavakhoz, míg a gramm kihagyása kis mennyiségű képzési adatot igényel, és még ritka szavakat vagy kifejezéseket is képvisel.
- Az NLTK és a Word2vec együttes használatával hatékony alkalmazások hozhatók létre
- Az idegsejt aktiválási funkciója határozza meg az idegsejt kimenetét egy sor bemenet mellett. Word2vec-ben. A Softmax Layer (normalizált exponenciális függvény) a kimeneti réteg funkciója, amely aktiválja vagy elindítja az egyes csomópontokat. A Word2vec negatív mintavételezéssel is rendelkezik
- A Gensim egy témamodellező eszköztár, amelyet pythonban valósítottak meg