Szóbeágyazási útmutató: word2vec a Gensim használatával (PÉLDA)

Tartalomjegyzék:

Anonim

Mi a szó beágyazása?

A szó beágyazása egyfajta szóábrázolás, amely lehetővé teszi a hasonló jelentésű szavak gépi tanulási algoritmusok általi megértését. Technikailag szólva ez a szavak leképezése valós számok vektoraiba az ideghálózat, a valószínűségi modell vagy a dimenziócsökkentés segítségével a szó együttes előfordulásának mátrixán. Ez a nyelv modellezése és a jellemző tanulási technika. A szóbeágyazás egy módja a leképezésnek egy neurális hálózat segítségével. Különféle szóbeágyazási modellek állnak rendelkezésre, mint például a word2vec (Google), a Glove (Stanford) és a leggyorsabb (Facebook).

A szó beágyazását elosztott szemantikai modellként vagy elosztott ábrázoltként vagy szemantikus vektortérként vagy vektortérmodellként is nevezzük. Amikor ezeket a neveket olvassa, találkozik a szemantikus szóval, ami azt jelenti, hogy a hasonló szavakat együtt kategorizálja. Például az olyan gyümölcsöket, mint az alma, a mangó, a banán, közel kell helyezni, míg a könyvek messze lesznek ezektől a szavaktól. Tágabb értelemben a szó beágyazása létrehozza a gyümölcs vektorát, amely messze helyezkedik el a könyvek vektoros ábrázolásától.

Ebben az oktatóanyagban megtanulja

  • Mi a szó beágyazása?
  • Hol használják a Word beágyazását?
  • Mi a word2vec?
  • Mit csinál a word2vec?
  • Miért a Word2vec?
  • Word2vec építészet
  • Folyamatos szavak táska.
  • Skip-Gram modell
  • A Word2vec és az NLTK kapcsolata
  • Aktivátorok és Word2Vec
  • Mi az a Gensim?
  • Kód A word2vec megvalósítása a Gensim használatával

Hol használják a Word beágyazását?

A szóbeágyazás segíti a szolgáltatásgenerálást, a dokumentumcsoportosítást, a szövegosztályozást és a természetes nyelv feldolgozását. Soroljuk fel őket, és folytassunk néhány vitát ezekről az alkalmazásokról.

  • Számítson hasonló szavakat: A szó beágyazásával hasonló szavakat javasolnak a predikciós modell alá eső szavakhoz. Ezzel együtt különböző szavakat, valamint a leggyakoribb szavakat is javasol.
  • Hozzon létre egy kapcsolódó szavak csoportját: Szemantikai csoportosításra használják, amely hasonló jellegű dolgokat fog össze csoportosítani, és messze nem hasonlít egymásra.
  • Jellemző a szöveg besorolásához: A szöveget vektor tömbökbe képezik le, amelyeket a modell betáplál az oktatás és az előrejelzés céljából. A szöveges osztályozó modelleket nem lehet betanítani a karaktersorozatra, így ez a szöveget géppel képezhető formává alakítja. További jellemzői a szemantikus segítség kiépítése a szövegalapú osztályozásban.
  • A dokumentumcsoportosítás egy másik alkalmazás, ahol a szóbeágyazást széles körben használják
  • Természetes nyelvfeldolgozás: Számos olyan alkalmazás létezik, ahol a szó beágyazása hasznos, és megnyeri a funkciók kibontási fázisait, például a beszédcímkézés részei, a szentimentális elemzés és a szintaktikai elemzés.

    Most van némi ismeretünk a szó beágyazásáról. A szó beágyazásának megvalósítása érdekében némi fényt vetnek a különböző modellekre is. Ez az egész oktatóanyag az egyik modellre összpontosít (word2vec).

Mi a word2vec?

A Word2vec az a technika / modell, amely elősegíti a szó beágyazását a jobb szóábrázolás érdekében. Számos pontos szintaktikai és szemantikai szókapcsolatot ragad meg. Ez egy sekély kétrétegű ideghálózat. Mielőtt továbbmenne, kérjük, olvassa el a különbséget a sekély és a mély ideghálózat között:

A sekély neurális hálózat az egyetlen 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.

Ábra: Sekély kontra mély tanulás

A word2vec egy kétrétegű hálózat, ahol egy rejtett réteg és egy kimenet van.

A Word2vec-et egy kutatócsoport fejlesztette, Tomas Mikolov vezetésével a Google-nál. A Word2vec jobb és hatékonyabb, mint a látens szemantikai elemzési modell.

Mit csinál a word2vec?

A Word2vec szavakat képvisel a vektortér ábrázolásában. A szavak vektorok formájában vannak ábrázolva, és az elhelyezés oly módon történik, hogy a hasonló jelentésű szavak együtt jelennek meg, és az eltérő szavak messze helyezkednek el. Ezt szemantikai kapcsolatnak is nevezik. Az ideghálózatok nem értik a szöveget, hanem csak a számokat. A Word Beágyazás lehetőséget nyújt a szöveg numerikus vektorgá alakítására.

A Word2vec rekonstruálja a szavak nyelvi kontextusát. Mielőtt tovább mennénk, értsük meg, mi a nyelvi kontextus? Általános élethelyzetben, amikor kommunikációhoz beszélünk vagy írunk, mások megpróbálják kitalálni, mi a mondat célja. Például: "Mi a hőmérséklet Indiában", itt a kontextus az, amelyet a felhasználó tudni akar "India hőmérséklete", amely kontextus. Röviden, a mondat fő célja a kontextus. A beszélt vagy írott nyelvet körülvevő szó vagy mondat (nyilvánosságra hozatal) segít meghatározni a kontextus jelentését. A Word2vec a szövegkörnyezeten keresztül megtanulja a szavak vektorábrázolását.

Miért a Word2vec?

A Word beágyazása előtt

Fontos tudni, hogy melyik megközelítést alkalmazzuk a szó beágyazása előtt, és mik a hátrányai, majd áttérünk arra a témára, hogy a Word2vec megközelítés segítségével hogyan lehet legyőzni a hibákat a Word beágyazásával. Végül elmozdítjuk 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 használták a szó beágyazása előtt. A Bag of szavak fogalmát használta, ahol a szavakat kódolt vektorok formájában ábrázolták. Ez egy ritka vektoros reprezentáció, ahol a dimenzió megegyezik a szókincs méretével. Ha a szó előfordul a szótárban, akkor az számít, különben nem. Ha többet szeretne megérteni, kérjük, olvassa el az alábbi programot.

from sklearn.feature_extraction.text import CountVectorizervectorizer=CountVectorizer()data_corpus=["guru99 is the best sitefor online tutorials. I love to visit guru99."]vocabulary=vectorizer.fit(data_corpus)X= vectorizer.transform(data_corpus)print(X.toarray())print(vocabulary.get_feature_names())

Kimenet:

[[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, amelyet a szókincs tárolására használnak, a szavak illesztése alapján. Ezt a sklearn-ből importálja
  2. Készítse el az objektumot a CountVectorizer osztály használatával.
  3. Írja be az adatokat a CountVectorizerbe illesztendő listába.
  4. Az adatok elférnek a CountVectorizer osztályból létrehozott objektumban.
  5. Alkalmazzon egy zacskó szó megközelítést a szavak szókincs segítségével történő számolásához. Ha a szó vagy token nem áll rendelkezésre a szókincsben, akkor az index pozícióját nullára állítjuk.
  6. Az 5. sorban az x változó változik tömbökké (az x számára elérhető módszer). Ez megadja az egyes tokenek számát a 3. sorban megadott mondatban vagy listában.
  7. Ez megmutatja azokat a jellemzőket, amelyek a szókincs részét képezik, ha a 4. sor adatainak felhasználásával illesztik őket.

A látens szemantikai megközelítésben a sor egyedi szavakat képvisel, míg az oszlop azt a számot jelöli, amikor a szó megjelenik a dokumentumban. Ez a szavak ábrázolása a dokumentummátrix formájában. A Term-Frequency inverse document frequency (TFIDF) arra szolgál, hogy a dokumentumban szereplő szavak gyakoriságát megszámoljuk, amely a dokumentumban szereplő kifejezés gyakorisága / a kifejezés korpuszban való gyakorisága.

A szavak zsákjának módszerének hiányosságai

  • Figyelmen kívül hagyja a szó sorrendjét, például ez rossz = rossz ez.
  • Figyelmen kívül hagyja a szavak összefüggéseit. Tegyük fel, hogy ha azt írom, hogy "Imádta a könyveket. Az oktatás leginkább a könyvekben található". Két vektort hozna létre: az egyik a "Szerette a könyveket", a másik pedig az "Az oktatás legjobban megtalálható a könyvekben". Mindkettejüket ortogonálisnak tekintené, ami függetlenné teszi őket, de a valóságban kapcsolatban állnak egymással

Ezen korlátok leküzdésére kifejlesztették a szó beágyazását, és a word2vec megközelítés az ilyen megvalósításhoz.

Hogyan működik a Word2vec?

A Word2vec megtanulja a szót a környező kontextus előrejelzésével. Vegyük például az " imádja a futballt" szót .

Szeretnénk kiszámolni a2 szeretet szót.

Tegyük fel

loves = Vin. P(Vout / Vin) is calculatedwhere,Vin is the input word.P is the probability of likelihood.Vout is the output word.

A szó szeretet mozog a korpusz egyes szavai fölött. A szavak szintaktikai és szemantikai kapcsolata kódolva van. Ez segít hasonló és analóg szavak megtalálásában.

A szerelem szó minden véletlenszerű tulajdonságát kiszámítják. Ezeket a szomszédos vagy kontextus szavakat érintő funkciókat egy back propagation módszer segítségével megváltoztatják vagy frissítik.

A tanulás másik módja, hogy ha két szó kontextusa hasonló, vagy két szó hasonló tulajdonságokkal rendelkezik, akkor ezek a szavak összefüggenek.

Word2vec építészet

Két architektúrát használ a word2vec

  1. Folyamatos szózsák (CBOW)
  2. ugrás gramm

Mielőtt tovább mennénk, 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 megtanulása lényegében nem felügyelt, de a modell betanításához célokra / címkékre van szükség. A Skip-gram és a CBOW a felügyelet nélküli ábrázolást konvertálja a modellképzés felügyelt formájává.

A CBOW-ban az aktuális szót a környező kontextusablakok ablakával jósolják meg. Például, ha w i-1 , w i-2 , w i + 1 , w i + 2 szavakat vagy összefüggéseket kap, ez a modell w i

A Skip-Gram szemben áll a CBOW-val, ami azt jelenti, hogy a szóból megjósolja az adott szekvenciát vagy kontextust. Megfordíthatja a példát, hogy megértse. Ha w i meg van adva, ez megjósolja a kontextust vagy w i-1 , w i-2 , w i + 1 , w i + 2.

A Word2vec lehetőséget nyújt a CBOW (folyamatos szavak zsákja) és a skim-gram közötti választásra. Ilyen paramétereket adnak meg a modell oktatása során. Lehetőség van negatív mintavétel vagy hierarchikus softmax réteg használatára.

Folyamatos szavak táska.

Rajzoljunk le egy egyszerű diagramot, hogy megértsük a szó felépítésének folyamatos zsákját.

Ábra Folyamatos zsák szó építészet

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 meghatározása: {x i-1 , x i-2, x i + 1, x i + 2 }. A súlymátrixot úgy kapjuk meg, hogy szorozzuk a V * N-t. Egy másik mátrixot úgy kapunk, hogy az inputvektort megszorozzuk a tömegmátrixszal. Ezt a következő egyenlettel is meg lehet érteni.

h = xi t W

ahol xi t ∧ W a bemeneti vektor és a súlymátrix,

A kontextus és a következő szó közötti egyezés kiszámításához kérjük, olvassa el az alábbi egyenletet

u = előrejelzett reprezentáció * h

ahol megjósolt reprezentációt kapunk model∧h a fenti egyenletben.

Skip-Gram modell

A Skip-Gram megközelítés segítségével meg lehet jósolni egy bevitt szóra adott mondatot. Hogy jobban megértsük, rajzoljuk meg a diagramot.

Ábra Skip-Gram modell

Úgy kezelhetjük, mint a folytonos szómodell táskájának fordítottját, ahol a bemenet a szó, és a modell adja meg a kontextust vagy a szekvenciát. Arra is következtethetünk, hogy a célt betáplálják a bemeneti oldalra, és a kimeneti réteget többször is megismétlik, hogy beilleszkedjen a kiválasztott számú szövegkörnyezetbe. Az összes kimeneti réteg hibavektorát összesítik, hogy a súlyokat egy backpropation módszerrel állítsák be.

Melyik modellt válasszuk?

A CBOW többször gyorsabb, mint a gramm kihagyása, és jobb gyakoriságot biztosít a gyakori szavakhoz, míg a gramm kihagyásához kis mennyiségű edzési adatra van szükség, és még ritka szavakat vagy kifejezéseket is képvisel.

A Word2vec és az NLTK kapcsolata

Az NLTK természetes nyelvi eszközkészlet. A szöveg előfeldolgozására szolgál. Különböző műveleteket hajthat végre, például a beszédcímkézés részeit, a lemmatizálást, a szóalkotást, a szavak eltávolításának leállítását, a ritka szavak vagy a legkevésbé használt szavak eltávolítását. Segít a szöveg tisztításában, valamint előkészíti a funkciókat a hatékony szavakból. Másképpen a word2vec a szemantikai (egymással szorosan kapcsolódó elemek) és a szintaktikai (szekvencia) egyeztetésre szolgál. A word2vec használatával hasonló szavakat, eltérő szavakat, dimenziós redukciókat és még sok mást találhatunk. A word2vec másik fontos jellemzője, hogy a szöveg nagyobb dimenziójú ábrázolását vektorok alacsonyabb dimenziójává alakítja át.

Hol használható az NLTK és a Word2vec?

Ha el kell végeznie néhány, a fentiekben említett általános célú feladatot, például a tokenizálást, a POS címkézést és az elemzést az NLTK használatával kell elvégeznie, míg a szavak előrejelzéséhez valamilyen kontextus, témamodellezés vagy dokumentum-hasonlóság szerint a Word2vec-et kell használnia.

Az NLTK és a Word2vec kapcsolata kód segítségével

Az NLTK és a Word2vec együttesen használható hasonló szavak ábrázolására vagy szintaktikai egyezésre. Az NLTK eszköztár számos NLTK-val érkező csomag betöltésére használható, és a modell létrehozható a word2vec segítségével. Ezután a valós idejű szavakon tesztelhető. Lássuk mindkettő kombinációját a következő kódban. Mielőtt tovább feldolgozná, kérjük, nézze meg az NLTK által biztosított korpuszokat. A parancs segítségével letöltheti

nltk(nltk.download('all'))

Az NLTK segítségével letöltött ábra-korpuszok

A kódot lásd a képernyőképen.

import nltkimport gensimfrom nltk.corpus import abcmodel= gensim.models.Word2Vec(abc.sents())X= list(model.wv.vocab)data=model.most_similar('science')print(data)

Kimenet:

[('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 használunk.
  2. A Gensim behozatala. Ha a Gensim nincs telepítve, kérjük, telepítse a "pip3 install gensim" paranccsal. Kérjük, olvassa el az alábbi képernyőképet.

Ábra A Gensim telepítése PIP használatával

  1. importálja az nltk.download ('abc') használatával letöltött corpus abc fájlt.
  2. Adja át a fájlokat a word2vec modellnek, amelyet a Gensim segítségével mondatokként importálnak.
  3. A szókincs változó formájában van tárolva.
  4. A modellt a mintaszótudományon tesztelik, mivel ezek a fájlok a tudományhoz kapcsolódnak.
  5. Itt a "tudomány" hasonló szavát jósolja a modell.

Aktivátorok és Word2Vec

Az idegsejt aktivációs funkciója meghatározza az adott idegsejt kimenetét adott bemenetek halmazával. Biológiailag az agyunkban végzett tevékenység inspirálta, amikor a különböző idegsejtek különböző ingerek segítségével aktiválódnak. A következő ábra segítségével értsük meg az aktiválási függvényt.

Ábra Az Aktiválás funkció megértése

Itt x1, x2,… x4 az ideghálózat csomópontja.

w1, w2, w3 a csomópont súlya,

∑ az összes súly és csomópontérték összegzése, amelyek aktiválási funkcióként működnek.

Miért az Aktiválás funkció?

Ha nem használnak aktiváló függvényt, akkor a kimenet lineáris lenne, de a lineáris függvény funkcionalitása korlátozott. Olyan komplex funkcionalitás eléréséhez, mint az objektumérzékelés, a képosztályozás, a szöveg beírása hanggal és sok más nemlineáris kimenetre van szükség, amelyet az aktiválási funkció segítségével érnek el.

Az aktiválási réteg kiszámítása a beágyazási szóban (word2vec)

A Softmax Layer (normalizált exponenciális függvény) az a kimeneti réteg funkció, amely aktiválja vagy elindítja az egyes csomópontokat. Egy másik megközelítés a hierarchikus softmax, ahol a komplexitást O (log 2 V) számítja ki, 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 bonyolultságának csökkenése. A (hierarchikus softmax) funkcionalitás megértéséhez kérjük, tekintse meg az alábbi példát:

Ábra Hierarchikus softmax fa-szerű szerkezet

Tegyük fel, hogy ki akarjuk számítani a szeretet szó megfigyelésének valószínűségét egy adott összefüggésben. A gyökérből a levélcsomópontba áramlás lesz az első lépés a 2. csomópontra, majd az 5. csomópontra. Tehát, ha a szókincsünk 8-as volt, akkor csak három számításra van szükség. Tehát lehetővé teszi az egy szó ( szerelem ) valószínűségének lebontását, kiszámítását .

Milyen egyéb lehetőségek állnak rendelkezésre a Hierarchikus Softmaxon kívül?

Ha általános értelemben beszélünk a szóbeágyazási lehetőségekről, a differenciált Softmax, a CNN-Softmax, a fontossági mintavétel, az adaptív fontosság mintavétele, a zajkontrasztív becslések, a negatív mintavétel, az önnormalizálás és a ritka normalizálás.

Konkrétan a Word2vec-ről szólva negatív mintavétel áll rendelkezésre.

A negatív mintavétel a képzési adatok mintavételezésének módja. Ez némileg olyan, mint a sztochasztikus gradiens süllyedés, de némi különbséggel. A negatív mintavétel csak negatív képzési példákat keres. Zajkontrasztív becslésen alapul, és véletlenszerűen választja ki a szavakat, nem a kontextusban. Ez egy gyors képzési módszer, és véletlenszerűen választja meg a kontextust. Ha az előrejelzett szó a véletlenszerűen kiválasztott kontextusban jelenik meg, akkor mindkét vektor közel van egymáshoz.

Milyen következtetést lehet levonni?

Az aktivátorok ugyanúgy lőik az idegsejteket, mint a külső ingerek segítségével. A Softmax réteg a kimeneti réteg egyik funkciója, amely szó beágyazódása esetén indítja el az idegsejteket. A word2vec-ben vannak olyan opcióink, mint a hierarchikus softmax és a negatív mintavétel. Aktivátorok segítségével a lineáris függvényt nemlineáris függvénnyé alakíthatjuk, és ezek segítségével komplex gépi tanulási algoritmus valósítható meg.

Mi az a Gensim?

A Gensim egy témamodellezési eszközkészlet, amelyet a python valósít meg. A témamodellezés felfedezi a rejtett struktúrát a szövegtörzsben. A Word2vec importálása a Gensim eszköztárból történik. Felhívjuk figyelmét, hogy a Gensim nem csak a word2vec, hanem a Doc2vec és a FastText megvalósítását is biztosítja, de ez az oktatóanyag a word2vec-ről szól, ezért ragaszkodunk az aktuális témához.

A word2vec megvalósítása a Gensim használatával

Mostanáig megbeszéltük, hogy mi is a word2vec, annak különböző architektúrái, miért van elmozdulás a szavak zsákjától a word2vec felé, a word2vec és az NLTK közötti kapcsolat élő kóddal és aktiválási funkciókkal. Ebben a szakaszban a word2vec programot a Gensim használatával valósítja meg

1. lépés: Adatgyűjtés

A gépi tanulási modell vagy a természetes nyelv feldolgozásának megvalósításának első lépése az adatgyűjtés

Kérjük, vegye figyelembe az adatokat, hogy intelligens chatbotot készítsen.

[{"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"]}]

Ez az, amit megértünk az adatokból

  • Ezek az adatok három dolog címkét, mintát és válaszokat tartalmaznak. A címke a szándék (mi a vita témája).
  • 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 a megtisztított adatokat betáplálják a gépbe, akkor a modell pontosabban reagál, és hatékonyabban fogja megtanulni az adatokat.

Ez a lépés magában foglalja a leállítási szavak, a szóból eredő, felesleges szavak stb. Eltávolítását. A folytatás előtt fontos az adatok betöltése és átalakítása adatkeretké. Kérjük, olvassa el az alábbi kódot

import jsonjson_file =’intents.json'with open('intents.json','r') as f:data = json.load(f)

A CODE magyarázata.

  1. Mivel az adatok json formátumban vannak, ezért a json importálásra kerül
  2. A fájl a változóban van tárolva
  3. A fájl nyitva van, és az adatváltozóba van töltve

Most importálják az adatokat, és ideje átalakítani az adatokat adatkeretekké. A következő lépés megtekintéséhez olvassa el az alábbi kódot

import pandas as pddf = pd.DataFrame(data)df['patterns'] = df['patterns'].apply(', '.join)

A CODE magyarázata

1. Az adatokat a fent importált pandák felhasználásával alakítják át adatkeretekké.

2. Átalakítja az oszlopminták listáját karakterláncra.

from nltk.corpus import stopwordsfrom textblob import Wordstop = 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ázat

1. Az angol stop szavakat a stop word modul segítségével importáljuk az nltk eszköztárból

2. A szöveg minden szavát kisbetűvé alakítja a feltétel és a lambda függvény használatával. A Lambda függvény egy névtelen függvény.

3. Az adatkeret szövegének minden sorát ellenőrizzük a karakterlánc írásjelek között, és ezeket szűrjük.

4. A karaktereket, például a számokat vagy a pontokat, szabályos kifejezéssel távolítjuk el.

5. A számjegyeket eltávolítjuk a szövegből.

6. A megállító szavakat ebben a szakaszban eltávolítjuk.

7. A szavakat most szűrjük, és ugyanazon szó különböző formáit eltávolítjuk a lemmatizálás segítségével. Ezekkel befejeztük az adatok előfeldolgozását.

Kimenet:

, patterns, responses, tag0,hi one talk hello hi available,"['Hello, thanks for contacting us', 'Good to see you here', ' Hi there, how may I assist you?']",welcome1,bye see later goodbye come back soon,"['See you later, thanks for visiting', 'have a great day ahead', 'Wish you Come back again soon.']",goodbye2,thanks helping thank guidance thats helpful kind,"['Happy to help!', 'Any time!', 'My pleasure', 'It is my duty to help you']",thankful3,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']",hoursopening4,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: Neuron hálózat kiépítése word2vec használatával

Itt az ideje egy modell felépítésének a Gensim word2vec modul használatával. Importálnunk kell a word2vec-et a Gensim-ből. Tegyük ezt meg, majd építjük, és az utolsó szakaszban valós idejű adatok alapján ellenőrizzük a modellt.

from gensim.models import Word2Vec

Most sikeresen felépíthetjük a modellt a Word2Vec segítségével. Kérjük, olvassa el a következő kódsort, hogy megtudja, hogyan hozhatja létre a modellt a Word2Vec segítségével. A szöveget a modell egy lista formájában kapja meg, így a szöveget adatkeretről listára 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 Code magyarázata

1. Létrehozta a nagyobb_listát, ahol a belső lista csatolva van. Ez a formátum kerül a Word2Vec modellbe.

2. A hurok megvalósításra kerül, és az adatkeret mintázat oszlopának minden bejegyzése ismétlődik.

3. Az oszlopminták minden eleme fel van osztva és a belső belső listában tárolódik

4. a Belső lista a külső listával együtt szerepel.

5. Ez a lista a Word2Vec modellhez kerül. Értsük meg az itt megadott paramétereket

Min_count: Az összes alacsonyabb teljes frekvenciájú szót figyelmen kívül hagyja.

Méret: Megmondja a vektorok dimenzióit.

Munkavállalók: Ezek a szálak a modell kiképzéséhez

Más lehetőségek is rendelkezésre állnak, és néhány fontosat az alábbiakban ismertetünk

Ablak: Az aktuális és az előre jelzett szó közötti maximális távolság egy mondaton belül.

Vmit: Ez egy képzési algoritmus, 1 az ugrás-gram és 0 a folyamatos szózsák számára. A fentiekben részletesen megvitattuk ezeket.

Hs: Ha ez 1, akkor hierarchikus softmaxot használunk a képzéshez, és ha 0, akkor negatív mintavételt használunk.

Alfa: Kezdeti tanulási arány

Az alábbiakban jelenítsük meg a végső kódot

#list of libraries used by the codeimport stringfrom gensim.models import Word2Vecimport loggingfrom nltk.corpus import stopwordsfrom textblob import Wordimport jsonimport pandas as pd#data in json formatjson_file = 'intents.json'with open('intents.json','r') as f:data = json.load(f)#displaying the list of stopwordsstop = stopwords.words('english')#dataframedf = pd.DataFrame(data)df['patterns'] = df['patterns'].apply(', '.join)# print(df['patterns'])#print(df['patterns'])#cleaning the data using the NLP approachprint(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 listbigger_list=[]for i in df['patterns']:li = list(i.split(" "))bigger_list.append(li)#structure of data to be taken by the model.word2vecprint("Data format for the overall list:",bigger_list)#custom data is fed to machine for further processingmodel = Word2Vec(bigger_list, min_count=1,size=300,workers=4)#print(model)

4. lépés) Modell mentése

A modell menthető bin és model formában. A bin a bináris formátum. Kérjük, olvassa el 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 modellt .model fájl formájában menti.

2. a modell .bin fájl formájában kerül elmentésre

Ezt a modellt valós idejű tesztelésre fogjuk használni, mint például hasonló szavak, különböző szavak és a leggyakoribb szavak.

5. lépés: Modell betöltése és valós idejű tesztelés

A modell betöltése az alábbi kód segítségével történik

model = Word2Vec.load('model.bin')

Ha ki akarja nyomtatni a szókincset, az lenti paranccsal végezhető el

vocab = lista (model.wv.vocab)

Kérjük, olvassa el 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

Hajtsuk végre a dolgokat gyakorlatilag

similar_words = model.most_similar('thanks')print(similar_words)

Kérjük, olvassa el 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 mellékelt szavak szavával

dissimlar_words = model.doesnt_match('See you later, thanks for visiting'.split())print(dissimlar_words)

Megadtuk a "Találkozzunk később, köszönöm a látogatást" szavakat . Ez kinyomtatja ezekből a szavakból a legkülönbözőbb szavakat. 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) Megtalálni a hasonlóságot két szó között

Ez megmondja a két szó hasonlóságának valószínűségét. Kérjük, olvassa el az alábbi kódot a szakasz végrehajtásához.

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ábbiak szerint alakul

0,13706

Az alábbi kód végrehajtásával további szavakat találhat

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ása egyfajta szóábrázolás, amely lehetővé teszi a hasonló jelentésű szavak gépi tanulási algoritmusok általi megértését
  • A Word beágyazása hasonló szavak kiszámítására szolgál, Kapcsolódó szavak csoportjának létrehozása, Funkció a szöveg osztályozásához, Dokumentumcsoportosítás, Természetes nyelv feldolgozása
  • A Word2vec egy sekély kétrétegű neurális hálózati modell, amely a szavak beágyazását eredményezi a jobb szóábrázolás érdekében
  • A Word2vec szavakat képvisel a vektortér ábrázolásában. A szavak vektorok formájában vannak ábrázolva, és az elhelyezés oly módon történik, hogy a hasonló jelentésű szavak együtt jelennek meg, és az eltérő szavak messze vannak
  • A Word2vec két architektúrát használt: Folyamatos táska szavak (CBOW) és ugorjon át
  • A CBOW többször gyorsabb, mint a gramm kihagyása, és jobb gyakoriságot biztosít a gyakori szavakhoz, míg a gramm kihagyásához kis mennyiségű edzési adatra van szükség, és még ritka szavakat vagy kifejezéseket is képvisel.
  • Az NLTK és a word2vec együttesen használható hatékony alkalmazások létrehozására
  • Az idegsejt aktivációs funkciója meghatározza az adott idegsejt kimenetét adott bemenetek halmazával. A word2vec. A Softmax Layer (normalizált exponenciális függvény) az a kimeneti réteg funkció, amely aktiválja vagy elindítja az egyes csomópontokat. A Word2vec negatív mintavételezéssel is rendelkezik
  • A Gensim egy témamodellezési eszközkészlet, amelyet a python valósít meg