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.

Sekély vs. mély tanulás
Sekély vs. mély tanulás

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

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

  1. 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.
  2. Készítse el az objektumot a CountVectorizer osztály használatával.
  3. Írja be a listába azokat az adatokat, amelyeket be kell illeszteni a CountVectorizerbe.
  4. Az adatok elférnek a CountVectorizer osztályból létrehozott objektumban.
  5. 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.
  6. 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.
  7. 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:

  1. Continuous Bag of Word (CBOW)
  2. 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.

Folyamatos zsák Word Architectúra

Folyamatos zsák Word Architectúra

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.

Skip-Gram modell

Skip-Gram modell

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'))

Az NLTK és a Word2vec kapcsolata

Corpora letöltve az NLTK segítségével

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)

Az NLTK és a Word2vec kapcsolata a Code segítségével

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

  1. Az nltk könyvtár importálva van, ahonnan letöltheti az abc korpuszt, amelyet a következő lépésben fogunk használni.
  2. 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.
A Gensim telepítése PIP segítségével

A Gensim telepítése PIP segítségével
  1. importálja az nltk.download('abc') használatával letöltött abc korpuszt.
  2. Adja át a fájlokat a Word2vec modellnek, amelyet a Gensim használatával importált mondatként.
  3. A szókincs a változó formájában tárolódik.
  4. A modellt tudományos mintaszón tesztelték, mivel ezek a fájlok a tudományhoz kapcsolódnak.
  5. 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.

Aktiválási funkció a Word2vec-ben

Az aktiválási funkció megértése

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:

Hierarchikus Softmax Tree-szerű szerkezet

Hierarchikus softmax faszerű struktúra

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:

  1. Mivel az adatok json formátumúak, így a json importálásra kerül
  2. A fájl a változóban tárolódik
  3. 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