Výukový program pro vkládání slov: word2vec pomocí Gensim (PŘÍKLAD)

Obsah:

Anonim

Co je 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. Technicky vzato se jedná o mapování slov do vektorů reálných čísel pomocí neuronové sítě, pravděpodobnostního modelu nebo redukce dimenze na matici společného výskytu slov. Jedná se o jazykové modelování a techniku ​​učení funkcí. Vkládání slov je způsob provádění mapování pomocí neuronové sítě. K dispozici jsou různé modely pro vkládání slov, například word2vec (Google), Glove (Stanford) a nejrychlejší (Facebook).

Vkládání slov se také nazývá distribuovaný sémantický model nebo distribuovaný reprezentovaný nebo sémantický vektorový prostor nebo model vektorového prostoru. Při čtení těchto jmen narazíte na slovo sémantické, což znamená kategorizaci podobných slov dohromady. Například ovoce jako jablko, mango, banán by měly být umístěny blízko, zatímco knihy budou od těchto slov daleko. V širším smyslu vytvoří vkládání slov vektor ovoce, které bude umístěno daleko od vektorové reprezentace knih.

V tomto výukovém programu se naučíte

  • Co je vkládání slov?
  • Kde se používá vkládání slov?
  • Co je Word2vec?
  • Co word2vec dělá?
  • Proč Word2vec?
  • Architektura Word2vec
  • Kontinuální pytel slov.
  • Skip-Gram Model
  • Vztah mezi Word2vec a NLTK
  • Aktivátory a Word2Vec
  • Co je Gensim?
  • Implementace kódu word2vec pomocí Gensim

Kde se používá vkládání slov?

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

  • Vypočítejte podobná slova: Vkládání slov se používá k navrhování podobných slov jako slovo, které je předmětem predikčního modelu. Spolu s tím také navrhuje odlišná slova, stejně jako nejběžnější slova.
  • Vytvořte skupinu souvisejících slov: Používá se pro sémantické seskupování, které seskupuje věci podobné charakteristiky dohromady a na rozdíl daleko.
  • Funkce pro klasifikaci textu: Text je mapován do polí vektorů, které jsou přiváděny k modelu pro trénink i predikci. Modely klasifikátorů založené na textu nelze na řetězci trénovat, takže se text převede do strojově trénovatelné podoby. Dále jeho funkce budování sémantické nápovědy v textové klasifikaci.
  • Shlukování dokumentů je další aplikace, kde se široce používá vkládání slov
  • Zpracování přirozeného jazyka: Existuje mnoho aplikací, kde je vkládání slov užitečné a vyhrává nad fázemi extrakce funkcí, jako jsou tagy řeči, sentimentální analýza a syntaktická analýza.

    Nyní máme nějaké znalosti o vkládání slov. Nějaké světlo je také vrženo na různé modely k implementaci vkládání slov. Celý tento výukový program 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. Zachycuje velké množství přesných syntaktických a sémantických slovních spojení. Je to mělká dvouvrstvá neuronová síť. Než půjdeme dále, podívejte se na rozdíl mezi mělkou a hlubokou neuronovou sítí:

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

Obrázek: Mělké vs. hluboké učení

word2vec je dvouvrstvá síť, kde je na vstupu jedna skrytá vrstva a výstup.

Word2vec vyvinula skupina výzkumníků pod vedením Tomáše Mikolova ze společnosti Google. Word2vec je lepší a efektivnější model latentní sémantické analýzy.

Co word2vec dělá?

Word2vec představuje slova v reprezentaci vektorového prostoru. Slova jsou reprezentována ve formě vektorů a umisťování je prováděno takovým způsobem, že slova podobného významu se objevují společně a různá slova jsou umístěna daleko. Toto se také nazývá sémantický vztah. Neuronové sítě nerozumí textu, ale chápou pouze čísla. Vkládání slov poskytuje způsob převodu textu na numerický vektor.

Word2vec rekonstruuje jazykový kontext slov. Než půjdeme dále, pochopme, co je lingvistický kontext? V obecném scénáři života, když mluvíme nebo píšeme za účelem komunikace, se ostatní lidé snaží zjistit, co je cílem věty. Například „Jaká je teplota Indie“, zde je kontext, který chce uživatel znát „teplota 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 (zveřejnění) pomáhá při určování významu kontextu. Word2vec se učí vektorovou reprezentaci slov v kontextech.

Proč Word2vec?

Před vkládáním slov

Je důležité vědět, který přístup se používá před vkládáním slov a jaké jsou jeho nevýhody, a pak se přesuneme k tématu, jak jsou překonávání nedostatků překládáním Word pomocí přístupu word2vec. Nakonec se přesuneme, jak word2vec funguje, protože je důležité pochopit, že funguje.

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

Toto je přístup, který byl použit před vložením slova. Používal koncept Bag of words, kde jsou slova reprezentována ve formě kódovaných vektorů. Jedná se o řídkou vektorovou reprezentaci, kde se dimenze rovná velikosti slovní zásoby. Pokud se slovo vyskytuje ve slovníku, počítá se, jinak ne. Více informací naleznete v níže uvedeném programu.

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ý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ě přizpůsobení slov v ní. To se importuje ze sklearnu
  2. Vytvořte objekt pomocí třídy CountVectorizer.
  3. Zapište data do seznamu, který má být namontován do CountVectorizer.
  4. Data se vejdou do objektu vytvořeného z třídy CountVectorizer.
  5. Chcete-li počítat slova v datech pomocí slovní zásoby, použijte přístup typu pytel slov. Pokud slovo nebo token nejsou ve slovníku k dispozici, je taková pozice indexu nastavena na nulu.
  6. Proměnná v řádku 5, což je x, se převede na pole (metoda dostupná pro x). To poskytne počet všech tokenů ve větě nebo seznamu uvedeném na řádku 3.
  7. Ukáže se funkce, které jsou součástí slovníku, když je osazen pomocí dat v řádku 4.

V latentním sémantickém přístupu řádek představuje jedinečná slova, zatímco sloupec představuje počet časů, kdy se slovo v dokumentu objeví. Jedná se o reprezentaci slov ve formě matice dokumentu. Frekvence inverzních dokumentů s termíny a četností (TFIDF) se používá k počítání četnosti 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ádám, že když napíšu větu "Miloval knihy. Vzdělání se nejlépe nachází v knihách". Vytvořilo by dva vektory, jeden pro „Miloval knihy“ a druhý pro „Vzdělání se nejlépe nachází v knihách.“ Zacházelo by to s oběma ortogonálně, což je činí nezávislými, ale ve skutečnosti spolu souvisejí

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 si například slovo „ Miluje fotbal“.

Chceme vypočítat slovo2vec pro slovo: miluje.

Předpokládat

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 pohyby přes každé slovo v korpusu. Je zakódován syntaktický i sémantický vztah mezi slovy. To pomáhá při hledání podobných a analogických slov.

Vypočítají se všechny náhodné funkce slova miluje . Tyto funkce se mění nebo aktualizují týkající se sousedních nebo kontextových slov pomocí metody zpětného šíření.

Další způsob učení je, že pokud jsou kontext dvou slov podobný nebo dvě slova mají podobné rysy, pak tato slova souvisejí.

Architektura Word2vec

Word2vec používá dvě architektury

  1. Continuous Bag of words (CBOW)
  2. přeskočit gram

Než půjdeme dále, proberme si, proč jsou tyto architektury nebo modely důležité z hlediska reprezentace slov. Učení slovních reprezentací je v zásadě bez dozoru, ale k trénování modelu jsou potřeba cíle / štítky. Skip-gram a CBOW převádějí nekontrolovanou reprezentaci do supervizované formy pro modelový trénink.

V CBOW se aktuální slovo předpovídá pomocí okna okolních kontextových oken. Například pokud w i-1 , w i-2 , w i + 1 , w i + 2 dostanou slova nebo kontext, tento model poskytne w i

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

Word2vec poskytuje možnost volby mezi CBOW (průběžná taška slov) a skim-gram. Tyto parametry jsou poskytovány během tréninku modelu. Lze mít možnost použít negativní vzorkování nebo hierarchickou vrstvu softmax.

Kontinuální pytel slov.

Nakreslíme si jednoduchý diagram, abychom pochopili souvislou strukturu slovní architektury.

Kontinuální balíček slovní architektury

Pojďme vypočítat rovnice matematicky. Předpokládejme, že V je velikost slovníku a N je velikost skryté vrstvy. Vstup je definován jako {x i-1 , x i-2, x i + 1, x i + 2 }. Váhovou matici získáme vynásobením V * N. Další matice se získá vynásobením vstupního vektoru maticí hmotnosti. To lze také pochopit následující rovnicí.

h = xi t W

kde xi t ∧ W jsou vstupní vektor a matice hmotnosti,

Chcete-li vypočítat shodu mezi kontextem a dalším slovem, podívejte se na níže uvedenou rovnici

u = predikovaná reprezentace * h

kde je ve výše uvedené rovnici získáno předpovězené zastoupení model∧h.

Skip-Gram Model

Přístup Skip-Gram se používá k předpovědi věty dané vstupnímu slovu. Abychom tomu lépe porozuměli, nakreslíme si diagram.

Obrázek Skip-Gram Model

Dá se s ním zacházet jako s rubem Continuous bagu slovního modelu, kde je vstupem slovo a model poskytuje kontext nebo posloupnost. Můžeme také dojít k závěru, že cíl je přiváděn do vstupní a výstupní vrstvy je replikován několikrát, aby se přizpůsobil zvolenému počtu kontextových slov. Chybový vektor ze všech výstupních vrstev se sečte a upraví váhy pomocí metody zpětného šíření.

Jaký model zvolit?

CBOW je několikrát rychlejší než přeskočení gramu a poskytuje lepší frekvenci častých slov, zatímco přeskočení gramů vyžaduje malé množství tréninkových dat a představuje dokonce vzácná slova nebo fráze.

Vztah mezi Word2vec a NLTK

NLTK je sada nástrojů pro přirozený jazyk. Slouží k předzpracování textu. Lze provádět různé operace, například označování částí řeči, lemmatizaci, odvozování, odstraňování stop slov, odstraňování vzácných slov nebo nejméně použitých slov. Pomáhá při čištění textu i při přípravě funkcí z efektivních slov. Jiným způsobem se word2vec používá pro sémantické (spolu úzce související položky) a syntaktické (sekvence) shody. Pomocí word2vec lze najít podobná slova, různá slova, dimenzionální zmenšení a mnoho dalších. Další důležitou vlastností word2vec je převést vyšší dimenzionální reprezentaci textu na nižší dimenzionální vektory.

Kde použít NLTK a Word2vec?

Pokud člověk musí splnit některé úkoly pro všeobecné účely, jak je uvedeno výše, jako je tokenizace, označování a analýza POS, musí jít o používání NLTK, zatímco pro předpovídání slov podle určitého kontextu, modelování témat nebo podobnosti dokumentu je třeba použít Word2vec.

Vztah NLTK a Word2vec pomocí kódu

NLTK a Word2vec lze použít společně k nalezení podobného vyjádření slov nebo syntaktické shody. Sada nástrojů NLTK lze použít k načtení mnoha balíčků dodávaných s NLTK a model lze vytvořit pomocí word2vec. Poté může být testován 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 si prosím prohlédněte korpusy, které NLTK poskytuje. Můžete stáhnout pomocí příkazu

nltk(nltk.download('all'))

Obrázek Korpusy stažené pomocí NLTK

Kód najdete na snímku 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ý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, ze které si můžete stáhnout abc korpus, který použijeme v dalším kroku.
  2. Gensim je importován. Pokud Gensim není nainstalován, nainstalujte jej pomocí příkazu „pip3 install gensim“. Viz níže uvedený snímek obrazovky.

Obrázek Instalace Gensimu 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ík je uložen ve formě proměnné.
  4. Model je testován na ukázkové vědě o slovech, protože tyto soubory souvisejí s vědou.
  5. Zde model předpovídá podobné slovo „věda“.

Aktivátory a Word2Vec

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

Obrázek Pochopení aktivační funkce

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

w1, w2, w3 je váha uzlu,

∑ je součet veškeré hmotnosti a hodnoty uzlu, které fungují jako aktivační funkce.

Proč aktivační funkce?

Pokud není použita žádná aktivační funkce, bude výstup lineární, ale funkčnost lineární funkce je omezená. K dosažení komplexních funkcí, jako je detekce objektů, klasifikace obrázků, psaní textu hlasem a mnoho dalších nelineárních výstupů, je třeba dosáhnout pomocí aktivační funkce.

Jak se počítá aktivační vrstva při vkládání slov (word2vec)

Softmax Layer (normalizovaná exponenciální funkce) je funkce výstupní vrstvy, která aktivuje nebo aktivuje každý uzel. Dalším použitým přístupem je hierarchická softmax, kde je složitost vypočítána pomocí O (log 2 V), kde softmax je O (V), kde V je velikost slovníku. Rozdíl mezi nimi spočívá ve snížení složitosti v hierarchické vrstvě softmax. Abyste pochopili jeho (hierarchickou softmax) funkčnost, podívejte se na níže uvedený příklad:

Obrázek Hierarchická struktura podobná stromu softmax

Předpokládejme, že chceme vypočítat pravděpodobnost pozorování slova láska v určitém kontextu. Tok z kořene do uzlu listu bude prvním přesunem do uzlu 2 a poté do uzlu 5. Takže pokud jsme měli velikost slovníku 8, jsou zapotřebí pouze tři výpočty. Umožňuje tedy rozklad, výpočet pravděpodobnosti jednoho slova ( lásky ).

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

Pokud hovoříte v obecném smyslu pro možnosti vkládání slov, jsou to diferencovaná 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 vzorkování tréninkových dat. Je to něco jako stochastický gradient, ale s určitým rozdílem. Negativní vzorkování hledá pouze negativní příklady tréninku. Je založen na odhadu kontrastu šumu a náhodně vzorkuje slova, nikoli v kontextu. Je to rychlá tréninková metoda a vybírá kontext náhodně. 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 aktivují neurony stejně jako naše neurony jsou aktivovány pomocí vnějších podnětů. Softmax vrstva je jednou z funkcí výstupní vrstvy, která aktivuje 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í ní lze implementovat složitý algoritmus strojového učení.

Co je Gensim?

Gensim je sada nástrojů pro modelování témat, která je implementována v pythonu. Modelování témat objevuje skrytou strukturu v těle textu. Word2vec se importuje ze sady nástrojů Gensim. Vezměte prosím na vědomí, že Gensim poskytuje nejen implementaci word2vec, ale také Doc2vec a FastText, ale tento výukový program je o word2vec, takže se budeme držet aktuálního tématu.

Implementace word2vec pomocí Gensim

Dosud jsme diskutovali o tom, co je word2vec, jeho různé architektury, proč došlo k posunu od pytle slov k word2vec, vztahu mezi word2vec a NLTK s živým kódem a aktivačními funkcemi. V této části implementujeme 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

Sledujte prosím data a vytvořte 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"]}]

Tady je to, co chápeme z údajů

  • Tato data obsahují tři věci, značku, vzor a odpovědi. Značka je záměr (co je tématem diskuse).
  • Data jsou ve formátu JSON.
  • Vzor je otázka, kterou se uživatelé zeptají na robota
  • 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, pak model bude reagovat přesněji a bude se data učit efektivněji.

Tento krok zahrnuje odstranění zastavovacích slov, vyplývajících slov, zbytečných slov atd. Před pokračováním je důležité načíst data a převést je do datového rámce. Viz níže uvedený kód

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

Vysvětlení CODE.

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

Nyní jsou data importována a je čas převést data do datového rámce. Další krok najdete v níže uvedeném kódu

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

Vysvětlení CODE

1. Data se převádějí do datového rámce pomocí pand, které byly importovány výše.

2. Převede seznam ve vzorcích sloupců na řetězec.

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

Vysvětlení kódu

1. Anglická stop slova se importují pomocí modulu stop word z nltk toolkit

2. Všechna slova textu jsou převedena na malá písmena pomocí funkce condition a lambda. Funkce Lambda je anonymní funkce.

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

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

5. Z textu jsou odstraněny číslice.

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

7. Slova jsou nyní filtrována a pomocí lemmatizace je odstraněna různá forma stejného slova. S nimi jsme dokončili předzpracování dat.

Výstup:

, 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) Budování neuronové sítě pomocí word2vec

Nyní je čas postavit model pomocí modulu Gensim word2vec. Musíme importovat word2vec z Gensimu. Udělejme to, a pak sestavíme a v závěrečné fázi zkontrolujeme model na datech v reálném čase.

from gensim.models import Word2Vec

Nyní můžeme úspěšně sestavit model pomocí Word2Vec. V následujícím řádku kódu se dozvíte, jak vytvořit model pomocí Word2Vec. Text je modelu poskytován ve formě seznamu, takže text z datového rámce převedeme 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, kde je připojen vnitřní seznam. Toto je formát, který se přivádí do modelu Word2Vec.

2. Smyčka je implementována a každá položka sloupce vzory v datovém rámci je iterována.

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. Rozumíme některým zde uvedeným parametrům

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

Velikost: Říká rozměrnost vektorů slov.

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 predikovaným slovem ve větě.

Sg: Jedná se o cvičný algoritmus a 1 pro skip-gram a 0 pro Continuous bag of words. Podrobně jsme o nich diskutovali výše.

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

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

Níže zobrazíme konečný kód

#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žení modelu

Model lze uložit ve formě koše a modelového formuláře. Bin je binární formát. Uložte model podle následujících řádků

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, Různá slova a Nejběžnější slova.

Krok 5) Načítání modelu a provádění testování v reálném čase

Model je načten pomocí níže uvedeného kódu

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

Pokud si chcete slovní zásobu vytisknout, použijte níže uvedený příkaz

vocab = seznam (model.wv.vocab)

Podívejte se 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

Realizujme věci prakticky

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

Podívejte se 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) Odpoví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ěkujeme za návštěvu“. Tím se z těchto slov vytisknou nejnepodobně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

Výsledkem bude pravděpodobnost podobnosti mezi dvěma slovy. Přečtěte si níže uvedený kód, jak provést tuto část.

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 najdete dále 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)]

Závěr

  • 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
  • Vkládání slov se používá k výpočtu podobných slov, vytvoření skupiny souvisejících slov, funkce pro klasifikaci textu, shlukování dokumentů, zpracování přirozeného jazyka
  • Word2vec je mělký dvouvrstvý model neuronové sítě k produkci vkládání slov pro lepší reprezentaci slov
  • Word2vec představuje slova v reprezentaci vektorového prostoru. Slova jsou reprezentována ve formě vektorů a umisťování je prováděno tak, že se slova podobného významu objevují společně a různá slova jsou umístěna daleko
  • Word2vec použil 2 architektury Continuous Bag of words (CBOW) a přeskočil gram
  • CBOW je několikrát rychlejší než přeskočení gramu a poskytuje lepší frekvenci častých slov, zatímco přeskočení gramů vyžaduje malé množství tréninkových dat a představuje dokonce 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ý souborem vstupů. V aplikaci word2vec. Softmax Layer (normalizovaná exponenciální funkce) je funkce výstupní vrstvy, která aktivuje nebo aktivuje 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