Word Embedding a Word2Vec Model s příkladem

Co je to vkládání slov?

Vkládání slov je typ reprezentace slov, který umožňuje algoritmům strojového učení porozumět slovům s podobným významem. Jedná se o techniku ​​jazykového modelování a učení funkcí pro mapování slov do vektorů reálných čísel pomocí neuronových sítí, pravděpodobnostních modelů nebo redukce rozměrů na matici společného výskytu slov. Některé modely vkládání slov jsou Word2vec (Google), Glove (Stanford) a nejrychlejší (Facebook).

Word Embedding se také nazývá distribuovaný sémantický model nebo distribuovaný reprezentovaný nebo sémantický vektorový prostor nebo vektorový prostorový model. Když čtete tato jména, narazíte na slovo sémantický, což znamená kategorizovat podobná slova dohromady. Například ovoce jako jablko, mango, banán by mělo být umístěno blízko, zatímco knihy budou od těchto slov daleko. V širším slova smyslu vytvoří vkládání slov vektor ovoce, který bude umístěn daleko od vektorové reprezentace knih.

Kde se používá Word Embedding?

Vkládání slov pomáhá při generování funkcí, shlukování dokumentů, klasifikaci textu a úlohách zpracování přirozeného jazyka. Pojďme si je vyjmenovat a diskutovat o každé z těchto aplikací.

  • Vypočítejte podobná slova: Vkládání slov se používá k navrhování slov podobných slovu, které je předmětem predikčního modelu. Spolu s tím také navrhuje různá slova, stejně jako nejběžnější slova.
  • Vytvořte skupinu příbuzných slov: Používá se pro sémantické seskupování, které bude seskupovat věci podobné charakteristiky a vzdálené daleko.
  • Funkce pro klasifikaci textu: Text je mapován do polí vektorů, které jsou přiváděny do modelu pro trénování i predikci. Modely klasifikátorů založené na textu nelze trénovat na řetězci, takže se text převede do strojově trénovatelné podoby. Dále jeho rysy budování sémantické pomoci v textové klasifikaci.
  • Shlukování dokumentů: je další aplikace, kde se hojně využívá vkládání Wordu Word2vec
  • Zpracování přirozeného jazyka: Existuje mnoho aplikací, kde je vkládání slov užitečné a vítězí nad fázemi extrakce funkcí, jako je označování částí řeči, sentimentální analýza a syntaktická analýza. Nyní máme nějaké znalosti o vkládání slov. Určité světlo je také vrženo na různé modely pro implementaci vkládání slov. Celý tento tutoriál Word Embedding je zaměřen na jeden z modelů (Word2vec).

Co je Word2vec?

Word2vec je technika/model pro vytváření vkládání slov pro lepší reprezentaci slov. Jde o metodu zpracování přirozeného jazyka, která zachycuje velké množství přesných syntaktických a sémantických slovních vztahů. Je to mělká dvouvrstvá neuronová síť, která dokáže detekovat synonymní slova a po natrénování navrhnout další slova pro dílčí věty.

Než budete pokračovat v tomto tutoriálu Word2vec, podívejte se prosím na rozdíl mezi mělkou a hlubokou neuronovou sítí, jak je znázorněno na níže uvedeném schématu příkladu vkládání Wordu:

Mělká neuronová síť se skládá z jediné skryté vrstvy mezi vstupem a výstupem, zatímco hluboká neuronová síť obsahuje více skrytých vrstev mezi vstupem a výstupem. Vstup je vystaven uzlům, zatímco skrytá vrstva, stejně jako výstupní vrstva, obsahuje neurony.

Mělké vs. hluboké učení
Mělké vs. hluboké učení

Word2vec je dvouvrstvá síť, kde je vstup, jedna skrytá vrstva a výstup.

Word2vec byl vyvinut skupinou výzkumníků v čele s Tomášem Mikolovem ve společnosti Google. Word2vec je lepší a efektivnější než model latentní sémantické analýzy.

Proč Word2vec?

Word2vec představuje slova ve vektorové prostorové reprezentaci. Slova jsou reprezentována ve formě vektorů a jejich umístění je provedeno tak, aby se slova s ​​podobným významem objevila pohromadě a nepodobná slova byla umístěna daleko. To se také nazývá sémantický vztah. Neuronové sítě nerozumí textu místo toho rozumí pouze číslům. Word Embedding poskytuje způsob, jak převést text na číselný vektor.

Word2vec rekonstruuje lingvistický kontext slov. Než půjdeme dále, pochopme, co je to jazykový kontext? V obecném životním scénáři, když mluvíme nebo píšeme, abychom komunikovali, se ostatní lidé snaží zjistit, co je cílem věty. Například „Jaká je teplota Indie“, zde je kontext, kdy uživatel chce znát „teplotu Indie“, což je kontext. Stručně řečeno, hlavním cílem věty je kontext. Slovo nebo věta obklopující mluvený nebo psaný jazyk (odhalení) pomáhá určit význam kontextu. Word2vec se učí vektorovou reprezentaci slov prostřednictvím kontextů.

Co dělá Word2vec?

Před vložením Wordu

Před vkládáním slov je důležité vědět, jaký přístup se používá a jaké jsou jeho nedostatky, a poté přejdeme k tématu, jak nedostatky překonává vkládání Wordu pomocí přístupu Word2vec. Nakonec se přesuneme, jak Word2vec funguje, protože je důležité pochopit, jak funguje.

Přístup k latentní sémantické analýze

Toto je přístup, který byl používán před vkládáním slov. Použil koncept Bag of words, kde jsou slova reprezentována ve formě kódovaných vektorů. Je to řídká vektorová reprezentace, kde se rozměr rovná velikosti slovní zásoby. Pokud se slovo vyskytuje ve slovníku, počítá se, jinak ne. Chcete-li porozumět více, podívejte se na níže uvedený program.

Příklad Word2vec

Příklad Word2vec

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

Výstup:

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

Vysvětlení kódu

  1. CountVectorizer je modul, který se používá k ukládání slovní zásoby na základě vkládání slov do ní. Toto je importováno ze sklearnu.
  2. Vytvořte objekt pomocí třídy CountVectorizer.
  3. Zapište data do seznamu, který se má osadit do CountVectorizer.
  4. Data se vejdou do objektu vytvořeného z třídy CountVectorizer.
  5. Použijte metodu pytle slov k počítání slov v datech pomocí slovní zásoby. Pokud slovo nebo token není ve slovní zásobě k dispozici, je taková pozice indexu nastavena na nulu.
  6. Proměnná na řádku 5, což je x, je převedena na pole (metoda dostupná pro x). Tím získáte počet každého tokenu ve větě nebo seznamu uvedeném na řádku 3.
  7. Zobrazí se funkce, které jsou součástí slovní zásoby, když je přizpůsobena pomocí dat na řádku 4.

V přístupu latentní sémantiky řádek představuje jedinečná slova, zatímco sloupec představuje počet případů, kdy se slovo vyskytuje v dokumentu. Jedná se o reprezentaci slov ve formě matice dokumentu. Termín-frekvence inverzní frekvence dokumentu (TFIDF) se používá k počítání frekvence slov v dokumentu, což je frekvence termínu v dokumentu/frekvence termínu v celém korpusu.

Nedostatek metody Bag of Words

  • Ignoruje pořadí slova, například toto je špatné = špatné je toto.
  • Ignoruje kontext slov. Předpokládejme, že napíšu větu „Miloval knihy. Vzdělání nejlépe najdete v knihách“. Vytvořily by dva vektory, jeden pro „Miloval knihy“ a druhý pro „Vzdělání se nejlépe nachází v knihách“. Zacházelo by se s oběma ortogonálně, což je činí nezávislými, ale ve skutečnosti spolu souvisí

K překonání těchto omezení bylo vyvinuto vkládání slov a Word2vec je přístup k jejich implementaci.

Jak Word2vec funguje?

Word2vec se učí slovo předpovídáním okolního kontextu. Vezměme například slovo „On miluje Fotbal."

Chceme vypočítat Word2vec pro slovo: miluje.

Předpokládat

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

Slovo miluje se pohybuje nad každým slovem v korpusu. Syntaktický i sémantický vztah mezi slovy je zakódován. To pomáhá při hledání podobných a analogických slov.

Všechny náhodné rysy slova miluje se počítá. Tyto vlastnosti se mění nebo aktualizují týkající se sousedních nebo kontextových slov pomocí a Zpětná propagace metoda.

Dalším způsobem učení je, že pokud jsou kontext dvou slov podobný nebo dvě slova mají podobné rysy, pak jsou taková slova příbuzná.

Word2vec Architecture

Word2vec používá dvě architektury:

  1. Nepřetržitý pytel slov (CBOW)
  2. Přeskočte gram

Než půjdeme dále v tomto tutoriálu Word2vec, proberme, proč jsou tyto architektury nebo modely důležité z hlediska reprezentace slov. Učení reprezentace slov je v podstatě bez dozoru, ale k trénování modelu jsou potřeba cíle/návěsky. Skip-gram a CBOW převádějí reprezentaci bez dozoru na kontrolovanou formu pro trénink modelu.

V CBOW je aktuální slovo predikováno pomocí okna okolních kontextových oken. Například, pokud wi-1,wi-2,wi + 1,wi + 2jsou dána slova nebo kontext, tento model poskytne wi

Skip-Gram provádí opak CBOW, což znamená, že předpovídá danou sekvenci nebo kontext ze slova. Abyste tomu porozuměli, můžete příklad obrátit. Pokud wi je dáno, bude to předpovídat kontext nebo wi-1,wi-2,wi + 1,wi+2.

Word2vec poskytuje možnost vybrat si mezi CBOW (continuous Bag of words) a skim-gram. Tyto parametry jsou poskytovány během trénování modelu. Lze mít možnost použít negativní vzorkování nebo hierarchickou softmax vrstvu.

Nepřetržitý pytel slov

Pojďme si nakreslit jednoduchý ukázkový diagram Word2vec, abychom pochopili souvislou tašku architektury slov.

Nepřetržitý pytel slov Architecture

Nepřetržitý pytel slov Architecture

Vypočítejme rovnice matematicky. Předpokládejme, že V je velikost slovní zásoby a N je velikost skryté vrstvy. Vstup je definován jako { xi-1, Xi-2, xi+1, xi + 2}. Váhovou matici získáme vynásobením V * N. Další matici získáme vynásobením vstupního vektoru váhovou maticí. To lze také pochopit z následující rovnice.

h=xitW

kde xit? W jsou vstupní vektor a hmotnostní matice,

Chcete-li vypočítat shodu mezi kontextem a dalším slovem, postupujte podle níže uvedené rovnice

u=předpovězená reprezentace*h

kde predikovaná reprezentace je získána model?h ve výše uvedené rovnici.

Skip-Gram model

Skip-Gram přístup se používá k predikci věty dané vstupním slovem. Abychom tomu lépe porozuměli, nakreslete diagram, jak je znázorněno v níže uvedeném příkladu Word2vec.

Skip-Gram model

Skip-Gram model

Dá se s tím zacházet jako s opakem modelu Continuous bag of word, kde vstupem je slovo a model poskytuje kontext nebo sekvenci. Můžeme také dojít k závěru, že cíl je přiváděn do vstupní a výstupní vrstva je replikována vícekrát, aby vyhovovala zvolenému počtu kontextových slov. Vektor chyb ze všech výstupních vrstev se sečte a upraví se váhy pomocí metody zpětného šíření.

Jaký model vybrat?

CBOW je několikrát rychlejší než skip gram a poskytuje lepší frekvenci pro frekventovaná slova, zatímco skip gram vyžaduje malé množství trénovacích dat a představuje i vzácná slova nebo fráze.

Vztah mezi Word2vec a NLTK

NLTK je přirozený jazykový nástroj. Používá se pro předzpracování textu. Lze provádět různé operace, jako je označování částí řeči, lemmatizace, stemming, odstraňování stop slov, odstraňování vzácných slov nebo nejméně používaných slov. Pomáhá při čištění textu a také pomáhá při přípravě funkcí z účinných slov. Na druhou stranu se Word2vec používá pro sémantické (úzce související položky) a syntaktické (sekvence) párování. Pomocí Word2vec lze najít podobná slova, nepodobná slova, zmenšení rozměrů a mnoho dalších. Další důležitou vlastností Word2vec je převést vyšší dimenzionální reprezentaci textu na nižší dimenzi vektorů.

Kde používat NLTK a Word2vec?

Pokud má člověk splnit některé obecné úkoly, jak je uvedeno výše, jako je tokenizace, značkování POS a parsování, musí se použít NLTK, zatímco pro předpovídání slov podle nějakého kontextu, modelování tématu nebo podobnosti dokumentů je nutné použít Word2vec.

Vztah NLTK a Word2vec pomocí kódu

NLTK a Word2vec lze použít společně k nalezení reprezentace podobných slov nebo syntaktické shody. NLTK toolkit lze použít k načtení mnoha balíčků, které přicházejí s NLTK a model lze vytvořit pomocí Word2vec. To pak může být testováno na slovech v reálném čase. Podívejme se na kombinaci obou v následujícím kódu. Před dalším zpracováním se prosím podívejte na korpusy, které NLTK poskytuje. Stahovat můžete pomocí příkazu

nltk(nltk.download('all'))

Vztah NLTK a Word2vec

Korpusy stažené pomocí NLTK

Kód naleznete na snímku obrazovky.

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)

Vztah NLTK a Word2vec s pomocí kódu

Výstup:

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

Vysvětlení kódu

  1. Importuje se knihovna nltk, odkud si můžete stáhnout korpus abc, který použijeme v dalším kroku.
  2. Gensim je importován. Pokud Gensim Word2vec není nainstalován, nainstalujte jej pomocí příkazu „pip3 install gensim“. Podívejte se prosím na níže uvedený snímek obrazovky.
Instalace Gensim pomocí PIP

Instalace Gensim pomocí PIP
  1. importujte korpus abc, který byl stažen pomocí nltk.download('abc').
  2. Předejte soubory do modelu Word2vec, který je importován pomocí Gensim jako věty.
  3. Slovní zásoba je uložena ve formě proměnné.
  4. Model je testován na ukázkovém slově science, protože tyto soubory s vědou souvisí.
  5. Zde podobné slovo „věda“ předpovídá model.

Aktivátory a Word2Vec

Aktivační funkce neuronu definuje výstup tohoto neuronu daným souborem vstupů. Biologicky inspirováno aktivitou v našem mozku, kde se pomocí různých podnětů aktivují různé neurony. Pojďme pochopit aktivační funkci prostřednictvím následujícího diagramu.

Aktivační funkce ve Word2vec

Pochopení aktivační funkce

Zde x1,x2,..x4 je uzel neuronové sítě.

w1, w2, w3 je váha uzlu,

? je součet všech hodnot hmotnosti a uzlu, které fungují jako aktivační funkce.

Proč Aktivační funkce?

Pokud není použita žádná aktivační funkce, výstup by byl lineární, ale funkčnost lineární funkce je omezená. K dosažení komplexní funkčnosti, jako je detekce objektů, klasifikace obrázků, psaní textu pomocí hlasu a mnoho dalších nelineárních výstupů, je zapotřebí, čehož je dosaženo pomocí aktivační funkce.

Jak se vypočítá aktivační vrstva ve vkládání slova (Word2vec)

Softmax Layer (normalizovaná exponenciální funkce) je funkce výstupní vrstvy, která aktivuje nebo spouští každý uzel. Dalším používaným přístupem je Hierarchický softmax, kde se složitost počítá pomocí O(log2V) kde softmax je O(V), kde V je velikost slovní zásoby. Rozdíl mezi nimi je snížení složitosti v hierarchické softmax vrstvě. Chcete-li porozumět jeho funkčnosti (Hierarchical softmax), podívejte se na níže uvedený příklad vložení aplikace Word:

Hierarchická struktura podobná stromu Softmax

Hierarchická softmax stromová struktura

Předpokládejme, že chceme vypočítat pravděpodobnost pozorování slova láska vzhledem k určitému kontextu. Tok z kořene do listového uzlu bude prvním pohybem do uzlu 2 a poté do uzlu 5. Pokud jsme tedy měli velikost slovní zásoby 8, jsou potřeba pouze tři výpočty. Umožňuje tedy rozklad, výpočet pravděpodobnosti jednoho slova (láska).

Jaké další možnosti jsou k dispozici kromě Hierarchical Softmax?

Pokud mluvíme v obecném smyslu pro vkládání slov, jsou k dispozici možnosti diferencovaného Softmax, CNN-Softmax, vzorkování důležitosti, vzorkování adaptivní důležitosti, odhady kontrastu šumu, negativní vzorkování, samonormalizace a občasná normalizace.

Když mluvíme konkrétně o Word2vec, máme k dispozici negativní vzorkování.

Negativní vzorkování je způsob, jak vzorkovat tréninková data. Je to něco jako stochastický gradientní sestup, ale s určitým rozdílem. Negativní vzorkování hledá pouze negativní příklady školení. Je založen na šumovém kontrastním odhadu a náhodně vybírá slova, nikoli v kontextu. Jedná se o rychlou metodu školení a náhodně volí kontext. Pokud se predikované slovo objeví v náhodně zvoleném kontextu, oba vektory jsou blízko u sebe.

Jaký závěr lze vyvodit?

Aktivátory odpalují neurony stejně jako naše neurony vystřelují pomocí vnějších podnětů. Vrstva Softmax je jednou z funkcí výstupní vrstvy, která spouští neurony v případě vkládání slov. Ve Word2vec máme možnosti jako hierarchický softmax a negativní vzorkování. Pomocí aktivátorů lze převést lineární funkci na nelineární funkci a pomocí nich lze implementovat složitý algoritmus strojového učení.

Co je Gensim?

Gensim je open-source sada nástrojů pro modelování témat a zpracování přirozeného jazyka, která je implementována v Python a Cython. Gensim toolkit umožňuje uživatelům importovat Word2vec pro tématické modelování a objevovat skryté struktury v těle textu. Gensim poskytuje nejen implementaci Word2vec, ale také pro Doc2vec a FastText.

Tento tutoriál je celý o Word2vec, takže se budeme držet aktuálního tématu.

Jak implementovat Word2vec pomocí Gensim

Doposud jsme diskutovali o tom, co je Word2vec, jeho různé architektury, proč dochází k posunu od pytle slov k Word2vec, vztahu mezi Word2vec a NLTK s živým kódem a aktivačními funkcemi.

Níže je uvedena metoda krok za krokem k implementaci Word2vec pomocí Gensim:

Krok 1) Sběr dat

Prvním krokem k implementaci jakéhokoli modelu strojového učení nebo implementace zpracování přirozeného jazyka je sběr dat

Dodržujte prosím data pro vytvoření inteligentního chatbota, jak je znázorněno v níže uvedeném příkladu Gensim Word2vec.

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

Zde je to, co z dat chápeme

  • Tato data obsahují tři věci: tag, vzor a odpovědi. Tag je záměr (jaké je téma diskuse).
  • Data jsou ve formátu JSON.
  • Vzor je otázka, kterou uživatelé položí robotovi
  • Odpovědi je odpověď, kterou chatbot poskytne na odpovídající otázku/vzor.

Krok 2) Předzpracování dat

Je velmi důležité zpracovat nezpracovaná data. Pokud jsou do stroje přiváděna vyčištěná data, model bude reagovat přesněji a bude se data učit efektivněji.

Tento krok zahrnuje odstranění zastavovacích slov, odvození, nepotřebných slov atd. Než budete pokračovat, je důležité načíst data a převést je do datového rámce. Podívejte se na níže uvedený kód

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

Vysvětlení kódu:

  1. Protože jsou data ve formátu json, importuje se json
  2. Soubor je uložen v proměnné
  3. Soubor je otevřen a načten v datové proměnné

Nyní jsou data importována a je čas převést data do datového rámce. Podívejte se prosím na níže uvedený kód, abyste viděli další krok

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

Vysvětlení kódu:

1. Data jsou převedena do datového rámce pomocí pand, které byly importovány výše.

2. Převede seznam ve sloupcových vzorech na řetězec.

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

Vysvětlení kódu:

1. Anglická zastavovací slova se importují pomocí modulu zastavovacích slov ze sady nástrojů nltk

2. Všechna slova textu jsou převedena na malá písmena pomocí pro podmínku a funkci lambda. Funkce lambda je anonymní funkce.

3. Všechny řádky textu v datovém rámci jsou zkontrolovány na přítomnost řetězců a tyto jsou filtrovány.

4. Znaky jako čísla nebo tečka jsou odstraněny pomocí regulárního výrazu.

5. Digits jsou z textu odstraněny.

6. Stop slova jsou v této fázi odstraněna.

7. Slova jsou nyní filtrována a odlišná forma stejného slova je odstraněna pomocí lemmatizace. Tím jsme dokončili předzpracování dat.

Výstup:

, 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

Krok 3) Budování neuronové sítě pomocí Word2vec

Nyní je čas postavit model pomocí modulu Gensim Word2vec. Musíme importovat Word2vec z Gensim. Udělejme to a pak budeme stavět a v konečné fázi model zkontrolujeme na datech v reálném čase.

from gensim.models import Word2Vec

Nyní v tomto tutoriálu Gensim Word2vec můžeme úspěšně postavit model pomocí Word2Vec. Podívejte se prosím na další řádek kódu, kde se dozvíte, jak vytvořit model pomocí Word2Vec. Text je poskytován modelu ve formě seznamu, takže text převedeme z datového rámce do seznamu pomocí níže 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)

Vysvětlení kódu:

1. Vytvořil větší_seznam, ke kterému je připojen vnitřní seznam. Toto je formát, který je přiváděn do modelu Word2Vec.

2. Je implementována smyčka a každý záznam sloupce vzorů datového rámce je iterován.

3. Každý prvek vzorů sloupců je rozdělen a uložen do vnitřního seznamu li

4. Vnitřní seznam je připojen k vnějšímu seznamu.

5. Tento seznam je poskytován modelu Word2Vec. Pojďme pochopit některé zde uvedené parametry

Min_count: Bude ignorovat všechna slova s ​​celkovou frekvencí nižší, než je tato.

Velikost: Vypovídá o dimenzionalitě slovních vektorů.

Pracovníci: Toto jsou vlákna pro trénování modelu

K dispozici jsou také další možnosti a některé důležité jsou vysvětleny níže

Okno: Maximální vzdálenost mezi aktuálním a předpokládaným slovem ve větě.

Sg: Je to cvičný algoritmus a 1 pro skip-gram a 0 pro kontinuální sáček slov. Podrobně jsme je probrali výše.

Hs: Pokud je toto 1, pak používáme pro trénování hierarchický softmax a pokud 0, použije se negativní vzorkování.

Alpha: Počáteční rychlost učení

Ukážeme konečný kód níže:

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

Krok 4) Uložení modelu

Model lze uložit ve formě zásobníku a formuláře modelu. Bin je binární formát. Pro uložení modelu se podívejte na níže uvedené řádky

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

Vysvětlení výše uvedeného kódu

1. Model je uložen ve formě souboru .model.

2. model je uložen ve formě souboru .bin

Tento model použijeme k testování v reálném čase, jako jsou podobná slova, nepodobná slova a nejběžnější slova.

Krok 5) Načtení modelu a provedení testování v reálném čase

Model se načte pomocí níže uvedeného kódu:

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

Pokud z něj chcete vytisknout slovní zásobu, provedete to pomocí níže uvedeného příkazu:

vocab = list(model.wv.vocab)

Podívejte se prosím na výsledek:

['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ětšiny podobných slov

Uveďme věci prakticky:

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

Podívejte se prosím na výsledek:

[('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) Neodpovídá slovu z dodaných slov

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

Dodali jsme slova "Uvidíme se později, děkuji za návštěvu." Tato vůle vytiskněte z těchto slov nejrozdílnější slova. Spustíme tento kód a najdeme výsledek

Výsledek po provedení výše uvedeného kódu:

Thanks

Krok 8) Nalezení podobnosti mezi dvěma slovy

To ukáže výsledek pravděpodobnosti podobnosti mezi dvěma slovy. Podívejte se prosím na níže uvedený kód, jak provést tuto sekci.

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

Výsledek výše uvedeného kódu je uveden níže

0.13706

Podobná slova můžete dále najít spuštěním níže uvedeného kódu

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

Výstup výše 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)] 

Proč investovat do čističky vzduchu?

  • Word Embedding je typ reprezentace slov, který umožňuje, aby slova s ​​podobným významem byla pochopena algoritmy strojového učení.
  • Vkládání slov se používá k výpočtu podobných slov, vytvoření skupiny příbuzných slov, funkce pro klasifikaci textu, shlukování dokumentů, zpracování přirozeného jazyka
  • Word2vec vysvětlil: Word2vec je mělký dvouvrstvý model neuronové sítě pro vytváření vložení slov pro lepší reprezentaci slov
  • Word2vec představuje slova ve vektorové prostorové reprezentaci. Slova jsou reprezentována ve formě vektorů a jejich umístění se provádí tak, aby se slova s ​​podobným významem objevila společně a nepodobná slova byla umístěna daleko
  • Algoritmus Word2vec používá 2 architektury Continuous Bag of words (CBOW) a skip gram
  • CBOW je několikrát rychlejší než skip gram a poskytuje lepší frekvenci pro frekventovaná slova, zatímco skip gram vyžaduje malé množství trénovacích dat a představuje i vzácná slova nebo fráze.
  • NLTK a Word2vec lze použít společně k vytvoření výkonných aplikací
  • Aktivační funkce neuronu definuje výstup tohoto neuronu daným souborem vstupů. Ve Word2vec. Softmax Layer (normalizovaná exponenciální funkce) je funkce výstupní vrstvy, která aktivuje nebo spouští každý uzel. Word2vec má také k dispozici negativní vzorkování
  • Gensim je sada nástrojů pro modelování témat, která je implementována v pythonu