Výukový program na vkladanie slov: word2vec pomocou Gensim (PRÍKLAD)

Obsah:

Anonim

Čo je vkladanie slov?

Vkladanie slov je typ reprezentácie slov, ktorý umožňuje algoritmom strojového učenia porozumieť slovám s podobným významom. Technicky vzaté ide o mapovanie slov do vektorov reálnych čísel pomocou neurónovej siete, pravdepodobnostného modelu alebo redukcie dimenzie v matici spoločného výskytu slov. Je to jazykové modelovanie a technika učenia sa funkcií. Vkladanie slov je spôsob, ako vykonať mapovanie pomocou neurónovej siete. K dispozícii sú rôzne modely vkladania slov, ako word2vec (Google), Glove (Stanford) a najrýchlejší (Facebook).

Vkladanie slov sa tiež nazýva distribuovaný sémantický model alebo distribuovaný reprezentovaný alebo sémantický vektorový priestor alebo model vektorového priestoru. Pri čítaní týchto mien narazíte na slovo sémantické, čo znamená spoločnú kategorizáciu podobných slov. Napríklad ovocie ako jablko, mango, banán by mali byť umiestnené blízko, zatiaľ čo knihy budú od týchto slov vzdialené. V širšom zmysle slova bude vkladanie slov vytvárať vektor ovocia, ktorý bude umiestnený ďaleko od vektorovej reprezentácie kníh.

V tomto návode sa naučíte

  • Čo je vkladanie slov?
  • Kde sa používa vkladanie slov?
  • Čo je word2vec?
  • Čo word2vec robí?
  • Prečo Word2vec?
  • Architektúra Word2vec
  • Kontinuálna taška slov.
  • Skip-Gram Model
  • Vzťah medzi Word2vec a NLTK
  • Aktivátory a Word2Vec
  • Čo je Gensim?
  • Implementácia kódu word2vec pomocou Gensim

Kde sa používa vkladanie slov?

Vkladanie slov pomáha pri generovaní funkcií, klastrovaní dokumentov, klasifikácii textu a úlohách spracovania prirodzeného jazyka. Uveďme ich zoznam a diskutujme o každej z týchto aplikácií.

  • Vypočítajte podobné slová: Vkladanie slov sa používa na navrhnutie podobných slov k slovu, ktoré je predmetom predikčného modelu. Spolu s tým navrhuje aj odlišné slová, ako aj najbežnejšie slová.
  • Vytvorte skupinu príbuzných slov: Používa sa na sémantické zoskupovanie, ktoré zoskupuje veci podobnej charakteristiky dohromady a na rozdiel ďaleko.
  • Funkcia klasifikácie textu: Text je mapovaný do polí vektorov, ktoré sa dostávajú do modelu na účely školenia a predikcie. Modely textových klasifikátorov nie je možné trénovať na reťazci, takže text sa prevedie do strojovo trénovateľnej formy. Ďalej jeho vlastnosti budovania sémantickej pomoci pri textovej klasifikácii.
  • Klastrovanie dokumentov je ďalšou aplikáciou, kde sa široko používa vkladanie slov
  • Spracovanie prirodzeným jazykom: Existuje mnoho aplikácií, kde je vkladanie slov užitočné a vyhráva nad fázami extrakcie funkcií, ako sú napríklad označovanie častí reči, sentimentálna analýza a syntaktická analýza.

    Teraz máme nejaké vedomosti o vkladaní slov. Určité svetlo sa hodí aj na rôzne modely na implementáciu vkladania slov. Celý tento výukový program je zameraný na jeden z modelov (word2vec).

Čo je word2vec?

Word2vec je technika / model na výrobu vkladania slov pre lepšiu reprezentáciu slov. Zachytáva veľké množstvo presných syntaktických a sémantických slovných spojení. Je to plytká dvojvrstvová neurónová sieť. Než pôjdete ďalej, prečítajte si rozdiel medzi plytkou a hlbokou neurónovou sieťou:

Plytká neurónová sieť pozostáva z jedinej skrytej vrstvy medzi vstupom a výstupom, zatiaľ čo hlboká neurónová sieť obsahuje viac skrytých vrstiev medzi vstupom a výstupom. Vstup je podrobený uzlom, zatiaľ čo skrytá vrstva, ako aj výstupná vrstva, obsahujú neuróny.

Obrázok: Plytké vs. hlboké učenie

word2vec je dvojvrstvová sieť, kde je vstupná jedna skrytá vrstva a výstup.

Word2vec vyvinula skupina výskumných pracovníkov pod vedením Tomáša Mikolova zo spoločnosti Google. Word2vec je lepší a efektívnejší ako model latentnej sémantickej analýzy.

Čo word2vec robí?

Word2vec predstavuje slová v reprezentácii vektorového priestoru. Slová sú reprezentované vo forme vektorov a umiestňovanie sa robí takým spôsobom, že slová s podobným významom sa objavujú spolu a odlišné slová sa nachádzajú ďaleko. Toto sa tiež nazýva sémantický vzťah. Neurónové siete nerozumejú textu, ale iba číslam. Vkladanie slov poskytuje spôsob prevodu textu na číselný vektor.

Word2vec rekonštruuje jazykový kontext slov. Skôr ako pochopíme, čo je to lingvistický kontext? Vo všeobecnom životnom scenári, keď hovoríme alebo píšeme, aby sme komunikovali, sa iní ľudia snažia prísť na to, čo je cieľom vety. Napríklad „Aká je teplota Indie“, tu je kontext používateľ, ktorý chce vedieť „teplota Indie“, čo je kontext. Stručne povedané, hlavným cieľom vety je kontext. Slovo alebo veta obklopujúca hovorený alebo písaný jazyk (zverejnenie) pomáha pri určovaní významu kontextu. Word2vec sa učí vektorovú reprezentáciu slov v kontextoch.

Prečo Word2vec?

Pred vložením slova

Je dôležité vedieť, ktorý prístup sa používa pred vkladaním slov a aké sú jeho nevýhody, a potom sa presunieme k téme, ako sú vkladové prekážky prekonané vkladaním slov pomocou prístupu word2vec. Na záver presunieme, ako word2vec funguje, pretože je dôležité pochopiť, že funguje.

Prístup k latentnej sémantickej analýze

Toto je prístup, ktorý sa použil pred vkladaním slov. Využívalo to koncept Bag of words, kde sú slová reprezentované vo forme kódovaných vektorov. Jedná sa o riedke vektorové znázornenie, kde sa dimenzia rovná veľkosti slovnej zásoby. Ak sa slovo vyskytuje v slovníku, počíta sa, inak nie. Viac informácií nájdete v nižšie uvedenom programe.

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

Výkon:

[[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']

Vysvetlenie kódu

  1. CountVectorizer je modul, ktorý sa používa na ukladanie slovnej zásoby na základe prispôsobenia slov do nej. Toto sa importuje zo sklearnu
  2. Vytvorte objekt pomocou triedy CountVectorizer.
  3. Zapíšte údaje do zoznamu, ktorý sa má namontovať do CountVectorizer.
  4. Dáta sa zmestia do objektu vytvoreného z triedy CountVectorizer.
  5. Na spočítanie slov v dátach pomocou slovnej zásoby použite prístup typu „bag of word“. Ak slovo alebo token nie sú k dispozícii v slovníku, potom je takáto pozícia indexu nastavená na nulu.
  6. Premenná v riadku 5, ktorá je x, sa prevedie na pole (metóda dostupná pre x). Toto poskytne počet všetkých tokenov vo vete alebo zozname uvedenom v riadku 3.
  7. Ukáže sa vlastnosti, ktoré sú súčasťou slovnej zásoby, keď je namontovaná pomocou údajov v riadku 4.

Pri latentnom sémantickom prístupe riadok predstavuje jedinečné slová, zatiaľ čo stĺpec predstavuje počet zobrazení slova v dokumente. Jedná sa o reprezentáciu slov vo forme matice dokumentu. Termín-frekvencia inverzná frekvencia dokumentov (TFIDF) sa používa na spočítanie frekvencie slov v dokumente, čo je frekvencia termínu v dokumente / frekvencia termínu v celom korpuse.

Nedostatok metódy Bag of Words

  • Ignoruje poradie slova, napríklad toto je zlé = zlé je toto.
  • Ignoruje kontext slov. Predpokladajme, že keď napíšem vetu "Miloval knihy. Najlepšie sa vzdelanie nachádza v knihách". Vytvorilo by to dva vektory, jeden pre „miloval knihy“ a druhý pre „vzdelávanie sa najlepšie nachádza v knihách“. S oboma by sa zaobchádzalo ortogonálne, čo ich robí nezávislými, ale v skutočnosti navzájom súvisia

Na prekonanie týchto obmedzení bolo vyvinuté vkladanie slov a word2vec je prístup k ich implementácii.

Ako Word2vec funguje?

Word2vec sa učí slovo predpovedaním okolitého kontextu. Vezmime si napríklad slovo „ Miluje futbal“.

Chceme vypočítať slovo2vec pre slovo: miluje.

Predpokladajme

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

Slovo miluje sa pohybuje cez každé slovo v korpuse. Je zakódovaný syntaktický aj sémantický vzťah medzi slovami. To pomáha pri hľadaní podobných a podobných slov.

Vypočítajú sa všetky náhodné vlastnosti slova miluje . Tieto funkcie sa menia alebo aktualizujú týkajúce sa susedných alebo kontextových slov pomocou metódy spätného šírenia.

Ďalším spôsobom učenia je, že ak je kontext dvoch slov podobný alebo ak majú dve slová podobné znaky, potom tieto slová súvisia.

Architektúra Word2vec

Word2vec používa dve architektúry

  1. Kontinuálna taška slov (CBOW)
  2. preskočiť gram

Predtým, ako pôjdeme ďalej, poďme si predstaviť, prečo sú tieto architektúry alebo modely dôležité z hľadiska reprezentácie slov. Reprezentácia učiaceho sa slova je v podstate bez dozoru, ale na vycvičenie modelu sú potrebné ciele / štítky. Program Skip-gram a CBOW konvertujú nekontrolovanú reprezentáciu na supervizovanú formu pre modelové školenie.

V CBOW sa súčasné slovo predpovedá pomocou okna okolitých kontextových okien. Ak sú napríklad w i-1 , w i-2 , w i + 1 , w i + 2 dané slová alebo kontext, tento model poskytne w i

Skip-Gram funguje opačne ako CBOW, čo znamená, že zo slova predpovedá danú postupnosť alebo kontext. Príklad môžete obrátiť, aby ste tomu porozumeli. Ak dáme w i , bude to predpovedať kontext alebo w i-1 , w i-2 , w i + 1 , w i + 2.

Word2vec poskytuje možnosť zvoliť si medzi CBOW (priebežná taška slov) a skim-gram. Takéto parametre sú poskytované počas tréningu modelu. Jeden môže mať možnosť použiť negatívne vzorkovanie alebo hierarchickú vrstvu softmax.

Kontinuálna taška slov.

Poďme si nakresliť jednoduchý diagram, aby sme pochopili súvislé vrece so slovnou architektúrou.

Obrázok Kontinuálna taška architektúry Word

Poďme matematicky vypočítať rovnice. Predpokladajme, že V je veľkosť slovnej zásoby a N je veľkosť skrytej vrstvy. Vstup je definovaný ako {x i-1 , x i-2, x i + 1, x i + 2 }. Váhovú maticu získame vynásobením V * N. Ďalšia matica sa získa vynásobením vstupného vektora s váhovou maticou. To možno pochopiť aj pomocou nasledujúcej rovnice.

v = xi t Z

kde xi t ∧ W sú vstupný vektor a matica hmotnosti,

Ak chcete vypočítať zhodu medzi kontextom a ďalším slovom, pozrite si nasledujúcu rovnicu

u = predpovedané znázornenie * h

kde sa vo vyššie uvedenej rovnici získa predpovedané zastúpenie model∧h.

Skip-Gram Model

Na predpovedanie vety zadanej do vstupného slova sa používa prístup Skip-Gram. Aby sme tomu lepšie porozumeli, nakreslime si schému.

Obrázok Skip-Gram Model

Dá sa to považovať za rub kontinuálneho modelu slovného modelu, kde vstupom je slovo a model poskytuje kontext alebo postupnosť. Môžeme tiež dospieť k záveru, že cieľ sa privádza do vstupnej a výstupnej vrstvy, ktorá sa niekoľkokrát replikuje, aby sa prispôsobil zvolenému počtu kontextových slov. Vektor chýb zo všetkých výstupných vrstiev je zhrnutý, aby sa váhy upravili metódou spätného šírenia.

Aký model zvoliť?

CBOW je niekoľkonásobne rýchlejší ako preskočenie gramu a poskytuje lepšiu frekvenciu častých slov, zatiaľ čo preskočenie gramu vyžaduje malé množstvo tréningových údajov a predstavuje dokonca aj zriedkavé slová alebo frázy.

Vzťah medzi Word2vec a NLTK

NLTK je sada nástrojov pre prirodzený jazyk. Používa sa na predspracovanie textu. Dá sa robiť rôzne operácie, ako napríklad označovanie častí reči, lemmatizácia, odstraňovanie slov, zastavenie odstraňovania slov, odstraňovanie zriedkavých slov alebo najmenej použitých slov. Pomáha pri čistení textu, ako aj pri príprave prvkov z efektívnych slov. Inak sa word2vec používa na sémantické (spolu úzko súvisiace položky) a syntaktické (sekvenčné) porovnávanie. Pomocou word2vec môžete nájsť podobné slová, odlišné slová, redukciu rozmerov a mnoho ďalších. Ďalšou dôležitou vlastnosťou word2vec je prevádzať vyššie dimenzionálne znázornenie textu na nižšie dimenzionálne vektory.

Kde používať NLTK a Word2vec?

Ak niekto musí splniť vyššie uvedené univerzálne úlohy, ako je tokenizácia, označovanie a analýza POS, musí používať NLTK, zatiaľ čo na predpovedanie slov podľa nejakého kontextu, modelovania tém alebo podobnosti dokumentov musí používať Word2vec.

Vzťah NLTK a Word2vec pomocou kódu

Programy NLTK a Word2vec možno použiť spoločne na nájdenie podobnosti alebo syntaktickej zhody podobných slov. Sada nástrojov NLTK sa dá použiť na načítanie mnohých balíkov dodávaných s NLTK a model je možné vytvoriť pomocou word2vec. Môže sa potom testovať na slovách v reálnom čase. Pozrime sa na kombináciu oboch v nasledujúcom kóde. Pred ďalším spracovaním si prosím prezrite korpusy, ktoré poskytuje NLTK. Môžete stiahnuť pomocou príkazu

nltk(nltk.download('all'))

Obrázok Korpusy stiahnuté pomocou NLTK

Kód nájdete na snímke obrazovky.

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

Výkon:

[('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)]

Vysvetlenie kódu

  1. Importuje sa knižnica nltk, odkiaľ si môžete stiahnuť abc korpus, ktorý použijeme v ďalšom kroku.
  2. Gensim sa dováža. Pokiaľ Gensim nie je nainštalovaný, nainštalujte ho pomocou príkazu „pip3 install gensim“. Prečítajte si nasledujúcu snímku obrazovky.

Obrázok Inštalácia Gensimu pomocou PIP

  1. importujte korpus abc, ktorý bol stiahnutý pomocou nltk.download ('abc').
  2. Súbory odovzdajte modelu word2vec, ktorý sa importuje pomocou programu Gensim ako vety.
  3. Slovná zásoba je uložená vo forme premennej.
  4. Model sa testuje na ukážkovej vede, pretože tieto súbory súvisia s prírodou.
  5. Tu model predpovedá podobné slovo „veda“.

Aktivátory a Word2Vec

Aktivačná funkcia neurónu definuje výstup tohto neurónu daný súborom vstupov. Biologicky inšpirované aktivitou v našom mozgu, kde sú rôzne neuróny aktivované pomocou rôznych stimulov. Poďme pochopiť aktivačnú funkciu prostredníctvom nasledujúceho diagramu.

Obrázok Pochopenie aktivačnej funkcie

Tu x1, x2, ... x4 je uzol neurónovej siete.

w1, w2, w3 je váha uzla,

∑ je súčet všetkých váh a hodnôt uzlov, ktoré fungujú ako aktivačná funkcia.

Prečo aktivačná funkcia?

Ak sa nepoužije žiadna aktivačná funkcia, výstup by bol lineárny, ale funkčnosť lineárnej funkcie je obmedzená. Na dosiahnutie komplexných funkcií, ako je detekcia objektov, klasifikácia obrázkov, písanie textu hlasom a mnoho ďalších nelineárnych výstupov, je potrebné dosiahnuť pomocou aktivačnej funkcie.

Ako sa počíta aktivačná vrstva pri vkladaní slova (word2vec)

Softmax Layer (normalizovaná exponenciálna funkcia) je funkcia výstupnej vrstvy, ktorá aktivuje alebo spúšťa každý uzol. Ďalším použitým prístupom je hierarchická softmax, kde sa zložitosť počíta pomocou O (log 2 V), pričom softmax je O (V), kde V je veľkosť slovnej zásoby. Rozdiel medzi nimi spočíva v znížení zložitosti v hierarchickej vrstve softmax. Ak chcete pochopiť jeho (hierarchickú softmax) funkčnosť, pozrite si nasledujúci príklad:

Obrázok Hierarchická štruktúra podobná stromu softmax

Predpokladajme, že chceme vypočítať pravdepodobnosť pozorovania slova láska v určitom kontexte. Tok z koreňa do listového uzla bude prvým pohybom do uzla 2 a potom do uzla 5. Takže ak sme mali veľkosť slovnej zásoby 8, sú potrebné iba tri výpočty. Umožňuje teda rozklad, výpočet pravdepodobnosti jedného slova ( lásky ).

Aké ďalšie možnosti sú k dispozícii okrem Hierarchical Softmax?

Ak hovoríme vo všeobecnom zmysle pre možnosti vkladania slov, sú to diferencovaná Softmax, CNN-Softmax, vzorkovanie dôležitosti, vzorkovanie adaptívnej dôležitosti, odhady kontrastu šumu, negatívne vzorkovanie, samonormalizácia a občasná normalizácia.

Keď už hovoríme konkrétne o Word2vec, máme k dispozícii negatívne vzorkovanie.

Negatívne vzorkovanie je spôsob vzorkovania tréningových údajov. Je to niečo ako stochastický gradient, ale s určitými rozdielmi. Negatívne vzorkovanie hľadá iba negatívne príklady tréningu. Je založený na odhade kontrastu šumu a náhodne vzorkuje slová, nie v kontexte. Je to rýchla tréningová metóda a vyberá kontext náhodne. Ak sa predpovedané slovo objaví v náhodne zvolenom kontexte, obidva vektory sú blízko seba.

Aký záver možno vyvodiť?

Aktivátory spaľujú neuróny rovnako ako naše neuróny spaľujú pomocou vonkajších stimulov. Softmax vrstva je jednou z funkcií výstupnej vrstvy, ktorá spúšťa neuróny v prípade vkladania slov. Vo word2vec máme možnosti ako hierarchický softmax a negatívne vzorkovanie. Pomocou aktivátorov je možné previesť lineárnu funkciu na nelineárnu funkciu a pomocou nich je možné implementovať zložitý algoritmus strojového učenia.

Čo je Gensim?

Gensim je sada nástrojov na modelovanie tém, ktorá je implementovaná v jazyku python. Modelovanie tém objavuje skrytú štruktúru v tele textu. Word2vec sa importuje z balíka nástrojov Gensim. Upozorňujeme, že Gensim poskytuje nielen implementáciu word2vec, ale aj Doc2vec a FastText, ale tento návod je zameraný na word2vec, takže sa budeme držať aktuálnej témy.

Implementácia word2vec pomocou Gensim

Doteraz sme diskutovali o tom, čo je word2vec, o jeho rôznych architektúrach, prečo došlo k prechodu od vrecka so slovami k word2vec, vzťahu medzi word2vec a NLTK so živým kódom a aktivačnými funkciami. V tejto časti budem implementovať word2vec pomocou Gensim

Krok 1) Zhromažďovanie údajov

Prvým krokom k implementácii ľubovoľného modelu strojového učenia alebo implementácii spracovania prirodzeného jazyka je zber údajov

Sledujte prosím údaje, aby ste vytvorili inteligentného chatbota.

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

Tu rozumieme údajom

  • Tieto údaje obsahujú značku, vzor a odpovede na tri veci. Značka je zámer (o čom je téma diskusie).
  • Údaje sú vo formáte JSON.
  • Vzor je otázka, ktorú budú používatelia klásť robotovi
  • Odpovede je odpoveď, ktorú chatbot poskytne na zodpovedajúcu otázku / vzor.

Krok 2) Predbežné spracovanie údajov.

Je veľmi dôležité spracovať prvotné údaje. Ak sa do stroja dodajú vyčistené údaje, model bude reagovať presnejšie a údaje sa naučí efektívnejšie.

Tento krok zahŕňa odstránenie zastávkových slov, zbytočných slov, zbytočných slov atď. Predtým, ako začnete, je dôležité načítať údaje a konvertovať ich do dátového rámca. Prečítajte si nižšie uvedený kód

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

Vysvetlenie KÓDU.

  1. Pretože údaje majú formu formátu JSON, kód JSON sa importuje
  2. Súbor je uložený v premennej
  3. Súbor je otvorený a načítaný do dátovej premennej

Teraz sa importujú údaje a je čas previesť ich do dátového rámca. Ďalší krok nájdete v nižšie uvedenom kóde

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

Vysvetlenie KÓDU

1. Údaje sa prevádzajú do dátového rámca pomocou pand, ktoré boli importované vyššie.

2. Konvertuje zoznam vo vzoroch stĺpcov na reťazce.

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()]))

Vysvetlenie kódu

1. Anglické zastavovacie slová sa importujú pomocou modulu zastavovacích slov z balíka nástrojov nltk

2. Všetky slová textu sú prevedené na malé písmená s použitím podmienok a funkcie lambda. Funkcia lambda je anonymná.

3. Všetky riadky textu v dátovom rámci sú skontrolované na interpunkciu reťazcov a tieto sú filtrované.

4. Znaky ako čísla alebo bodka sa odstraňujú pomocou regulárneho výrazu.

5. Z textu sa odstránia číslice.

6. Stopové slová sú v tejto fáze odstránené.

7. Slová sú teraz filtrované a iná forma toho istého slova je odstránená pomocou lemmatizácie. Tým sme ukončili predspracovanie údajov.

Výkon:

, 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

Krok 3) Budovanie neurónovej siete pomocou word2vec

Teraz je čas zostaviť model pomocou modulu Gensim word2vec. Musíme importovať word2vec z Gensimu. Urobme to, a potom zostavíme a v konečnej fáze skontrolujeme model na dátach v reálnom čase.

from gensim.models import Word2Vec

Teraz môžeme model úspešne zostaviť pomocou aplikácie Word2Vec. V ďalšom riadku kódu sa dozviete, ako vytvoriť model pomocou Word2Vec. Text sa poskytuje modelu vo forme zoznamu, takže text z údajového rámca prevedieme do zoznamu pomocou nižšie uvedeného kódu

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)

Vysvetlenia kódu

1. Vytvoril väčší_list, kde je pripojený vnútorný zoznam. Toto je formát, ktorý sa prenáša do modelu Word2Vec.

2. Je implementovaná slučka a každý záznam stĺpca vzorov dátového rámca je iterovaný.

3. Každý prvok vzorov stĺpcov je rozdelený a uložený vo vnútornom zozname li

4. K vnútornému zoznamu je pripojený vonkajší zoznam.

5. Tento zoznam sa poskytuje modelu Word2Vec. Pochopme niektoré z tu uvedených parametrov

Min_count: Bude ignorovať všetky slová s celkovou nižšou frekvenciou.

Veľkosť: Vypovedá o rozmernosti vektorov slov.

Pracovníci: Toto sú vlákna na trénovanie modelu

K dispozícii sú aj ďalšie možnosti a niektoré dôležité sú vysvetlené nižšie

Okno: Maximálna vzdialenosť medzi aktuálnym a predpokladaným slovom vo vete.

Sg: Je to cvičný algoritmus a 1 pre skip-gram a 0 pre Continuous bag slov. Vyššie sme o nich podrobne diskutovali.

Hs: Ak je toto 1, používame na trénovanie hierarchickú softmax a ak 0, potom sa použije negatívny odber vzoriek.

Alfa: Počiatočná rýchlosť učenia

Výsledný kód zobrazíme nižšie

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

Krok 4) Uloženie modelu

Model je možné uložiť vo forme koša a vo forme modelu. Bin je binárny formát. Uložte model podľa nasledujúcich riadkov

model.save("word2vec.model")model.save("model.bin")

Vysvetlenie vyššie uvedeného kódu

1. Model je uložený vo forme súboru .model.

2. model je uložený vo forme súboru .bin

Tento model použijeme na testovanie v reálnom čase, napríklad Podobné slová, odlišné slová a najbežnejšie slová.

Krok 5) Načítanie modelu a vykonávanie testovania v reálnom čase

Model sa načítava pomocou nižšie uvedeného kódu

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

Ak si chcete slovnú zásobu vytlačiť, urobte to pomocou nižšie uvedeného príkazu

vocab = zoznam (model.wv.vocab)

Prosím, pozrite si výsledok

['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'] 

Krok 6) Kontrola väčšiny podobných slov

Realizujme veci prakticky

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

Prosím, pozrite si výsledok

[('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)] 

Krok 7) Nezodpovedá slovu z dodaných slov

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

Dodali sme slová „Uvidíme sa neskôr, ďakujeme za návštevu“. Týmto sa vytlačia najnepodobnejšie slová z týchto slov. Spustime tento kód a nájdime výsledok

Výsledok po vykonaní vyššie uvedeného kódu.

Thanks

Krok 8) Nájdenie podobnosti medzi dvoma slovami

Toto povedie k pravdepodobnosti podobnosti medzi dvoma slovami. Ako spustiť túto časť, prečítajte si nižšie uvedený kód.

similarity_two_words = model.similarity('please','see')print("Please provide the similarity between these two words:")print(similarity_two_words)

Výsledok vyššie uvedeného kódu je uvedený nižšie

0,13706

Podobné slová môžete ďalej nájsť vykonaním nižšie uvedeného kódu

similar = model.similar_by_word('kind')print(similar)

Výstup vyššie uvedeného kódu

[('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)]

Záver

  • Vkladanie slov je typ reprezentácie slov, ktorý umožňuje algoritmom strojového učenia porozumieť slovám s podobným významom
  • Vkladanie slov sa používa na výpočet podobných slov, vytvorenie skupiny príbuzných slov, funkcia na klasifikáciu textu, zoskupovanie dokumentov, spracovanie prirodzeného jazyka
  • Word2vec je plytký dvojvrstvový model neurónovej siete na produkciu vkladania slov pre lepšiu reprezentáciu slov
  • Word2vec predstavuje slová v reprezentácii vektorového priestoru. Slová sú reprezentované vo forme vektorov a umiestňovanie sa vykonáva takým spôsobom, že slová s podobným významom sa objavujú spolu a odlišné slová sa nachádzajú ďaleko.
  • Word2vec použil 2 architektúry Continuous Bag of words (CBOW) a preskočil gram
  • CBOW je niekoľkonásobne rýchlejší ako preskočenie gramu a poskytuje lepšiu frekvenciu častých slov, zatiaľ čo preskočenie gramu vyžaduje malé množstvo tréningových údajov a predstavuje dokonca aj zriedkavé slová alebo frázy.
  • Programy NLTK a word2vec možno použiť na vytvorenie výkonných aplikácií
  • Aktivačná funkcia neurónu definuje výstup tohto neurónu daný súborom vstupov. V programe word2vec. Softmax Layer (normalizovaná exponenciálna funkcia) je funkcia výstupnej vrstvy, ktorá aktivuje alebo spúšťa každý uzol. Word2vec má k dispozícii aj negatívne vzorkovanie
  • Gensim je sada nástrojov na modelovanie tém, ktorá je implementovaná v jazyku python