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
- 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
- Készítse el az objektumot a CountVectorizer osztály használatával.
- Írja be az adatokat a CountVectorizerbe illesztendő listába.
- Az adatok elférnek a CountVectorizer osztályból létrehozott objektumban.
- 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.
- 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.
- 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
- Folyamatos szózsák (CBOW)
- 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
- Az nltk könyvtár importálva van, ahonnan letöltheti az abc korpuszt, amelyet a következő lépésben használunk.
- 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
- importálja az nltk.download ('abc') használatával letöltött corpus abc fájlt.
- Adja át a fájlokat a word2vec modellnek, amelyet a Gensim segítségével mondatokként importálnak.
- A szókincs változó formájában van tárolva.
- A modellt a mintaszótudományon tesztelik, mivel ezek a fájlok a tudományhoz kapcsolódnak.
- 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.
- Mivel az adatok json formátumban vannak, ezért a json importálásra kerül
- A fájl a változóban van tárolva
- 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
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