Zelfstudie voor het insluiten van Word: word2vec met Gensim (VOORBEELD)

Inhoudsopgave:

Anonim

Wat is het insluiten van woorden?

Word Embedding is een soort woordweergave waarmee woorden met een vergelijkbare betekenis kunnen worden begrepen door machine learning-algoritmen. Technisch gezien is het een afbeelding van woorden in vectoren van reële getallen met behulp van het neurale netwerk, het probabilistische model of dimensiereductie op de matrix van het gelijktijdig voorkomen van woorden. Het is taalmodellering en kenmerkende leertechniek. Woordinsluiting is een manier om mapping uit te voeren met behulp van een neuraal netwerk. Er zijn verschillende modellen voor het insluiten van woorden beschikbaar, zoals word2vec (Google), Glove (Stanford) en snelste (Facebook).

Word Embedding wordt ook wel gedistribueerd semantisch model of gedistribueerd vertegenwoordigd of semantisch vectorruimte- of vectorruimtemodel genoemd. Terwijl je deze namen leest, kom je het woord semantisch tegen, wat betekent dat vergelijkbare woorden samen moeten worden gecategoriseerd. Fruit zoals appel, mango, banaan moet bijvoorbeeld dichtbij worden geplaatst, terwijl boeken ver weg zijn van deze woorden. In bredere zin zal het insluiten van woorden de vector van fruit creëren die ver weg zal worden geplaatst van de vectorweergave van boeken.

In deze tutorial leer je

  • Wat is het insluiten van woorden?
  • Waar wordt Word Embedding gebruikt?
  • Wat is word2vec?
  • Welke word2vec doet?
  • Waarom Word2vec?
  • Word2vec-architectuur
  • Continu zak met woorden.
  • Skip-Gram-model
  • De relatie tussen Word2vec en NLTK
  • Activators en Word2Vec
  • Wat is Gensim?
  • Code Implementatie van word2vec met Gensim

Waar wordt Word Embedding gebruikt?

Het insluiten van woorden helpt bij het genereren van functies, het clusteren van documenten, het classificeren van tekst en het verwerken van natuurlijke taal. Laten we ze opsommen en een discussie voeren over elk van deze toepassingen.

  • Bereken vergelijkbare woorden: het insluiten van woorden wordt gebruikt om soortgelijke woorden voor te stellen als het woord dat wordt onderworpen aan het voorspellingsmodel. Daarnaast suggereert het ook verschillende woorden, evenals de meest voorkomende woorden.
  • Maak een groep verwante woorden: het wordt gebruikt voor semantische groepering die dingen met dezelfde karakteristiek samen en ongelijk ver weg groepeert.
  • Functie voor tekstclassificatie: tekst wordt toegewezen aan reeksen vectoren die naar het model worden gevoerd voor zowel training als voorspelling. Op tekst gebaseerde classificatiemodellen kunnen niet op de tekenreeks worden getraind, dus dit zal de tekst omzetten in een machinaal trainbare vorm. Verder zijn kenmerken van het bouwen van semantische hulp bij op tekst gebaseerde classificatie.
  • Documentclustering is een andere toepassing waarbij het insluiten van woorden veel wordt gebruikt
  • Verwerking van natuurlijke taal: er zijn veel toepassingen waarbij het insluiten van woorden nuttig is en de extractiefasen van functies overwint, zoals het taggen van delen van spraak, sentimentele analyse en syntactische analyse.

    Nu hebben we enige kennis van het insluiten van woorden. Er wordt ook wat licht geworpen op verschillende modellen om woordinbedding te implementeren. Deze hele tutorial is gericht op een van de modellen (word2vec).

Wat is word2vec?

Word2vec is de techniek / het model om woordinbedding te produceren voor een betere woordweergave. Het legt een groot aantal precieze syntactische en semantische woordrelaties vast. Het is een ondiep neuraal netwerk met twee lagen. Bekijk voordat u verder gaat het verschil tussen ondiep en diep neuraal netwerk:

Het ondiepe neurale netwerk bestaat uit de enige verborgen laag tussen invoer en uitvoer, terwijl het diepe neurale netwerk meerdere verborgen lagen bevat tussen invoer en uitvoer. De invoer wordt onderworpen aan knooppunten, terwijl de verborgen laag, evenals de uitvoerlaag, neuronen bevat.

Afbeelding: oppervlakkig versus diep leren

word2vec is een tweelaags netwerk met invoer, één verborgen laag en uitvoer.

Word2vec is ontwikkeld door een groep onderzoekers onder leiding van Tomas Mikolov bij Google. Word2vec is beter en efficiënter dan latent semantisch analysemodel.

Welke word2vec doet?

Word2vec vertegenwoordigt woorden in vectorruimtevoorstelling. Woorden worden weergegeven in de vorm van vectoren en de plaatsing gebeurt op een zodanige manier dat woorden met dezelfde betekenis bij elkaar verschijnen en ongelijke woorden ver weg staan. Dit wordt ook wel een semantische relatie genoemd. Neurale netwerken begrijpen geen tekst, maar alleen getallen. Word Embedding biedt een manier om tekst naar een numerieke vector te converteren.

Word2vec reconstrueert de taalkundige context van woorden. Laten we, voordat we verder gaan, begrijpen, wat is de taalkundige context? In het algemene levensscenario wanneer we spreken of schrijven om te communiceren, proberen andere mensen erachter te komen wat het doel van de zin is. Bijvoorbeeld: "Wat is de temperatuur van India", hier is de context dat de gebruiker de "temperatuur van India" wil weten, wat de context is. Kortom, het belangrijkste doel van een zin is context. Woord of zin rondom gesproken of geschreven taal (openbaarmaking) helpt bij het bepalen van de betekenis van context. Word2vec leert de vectorweergave van woorden door de contexten heen.

Waarom Word2vec?

Voordat Word Embedding

Het is belangrijk om te weten welke benadering wordt gebruikt vóór het insluiten van woorden en wat zijn de nadelen ervan, en dan gaan we verder met het onderwerp van hoe minpunten worden overwonnen door het insluiten van Word met behulp van de word2vec-benadering. Ten slotte zullen we bespreken hoe word2vec werkt, omdat het belangrijk is om te begrijpen dat het werkt.

Aanpak voor latente semantische analyse

Dit is de benadering die werd gebruikt vóór het insluiten van woorden. Het gebruikte het concept van een zak met woorden waarin woorden worden weergegeven in de vorm van gecodeerde vectoren. Het is een schaarse vectorvoorstelling waarbij de dimensie gelijk is aan de grootte van de woordenschat. Als het woord in het woordenboek voorkomt, wordt het meegeteld, anders niet. Raadpleeg het onderstaande programma voor meer informatie.

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

Uitgang:

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

Code Verklaring

  1. CountVectorizer is de module die wordt gebruikt om de woordenschat op te slaan op basis van het passen van de woorden erin. Dit wordt geïmporteerd uit het sklearn
  2. Maak het object met behulp van de klasse CountVectorizer.
  3. Schrijf de gegevens in de lijst die in de CountVectorizer moeten worden gepast.
  4. De gegevens passen in het object dat is gemaakt met de klasse CountVectorizer.
  5. Pas een woordzakbenadering toe om woorden in de gegevens te tellen met behulp van vocabulaire. Als een woord of token niet beschikbaar is in het vocabulaire, wordt die indexpositie op nul gezet.
  6. Variabele in regel 5 die x is, wordt geconverteerd naar een array (methode beschikbaar voor x). Dit geeft de telling van elk token in de zin of lijst in regel 3.
  7. Dit toont de kenmerken die deel uitmaken van het vocabulaire wanneer het wordt aangepast met behulp van de gegevens in regel 4.

In de Latent Semantic-benadering vertegenwoordigt de rij unieke woorden, terwijl de kolom het aantal keren vertegenwoordigt dat dat woord in het document voorkomt. Het is een weergave van woorden in de vorm van de documentmatrix. Term-frequentie inverse documentfrequentie (TFIDF) wordt gebruikt om de frequentie van woorden in het document te tellen, wat de frequentie is van de term in het document / frequentie van de term in het hele corpus.

Tekortkoming van Bag of Words-methode

  • Het negeert de volgorde van het woord, dit is bijvoorbeeld slecht = slecht is dit.
  • Het negeert de context van woorden. Stel dat als ik de zin schrijf "Hij hield van boeken. Onderwijs vind je het beste in boeken". Het zou twee vectoren creëren, een voor "Hij hield van boeken" en een andere voor "Onderwijs is het beste te vinden in boeken". Het zou ze allebei orthogonaal behandelen, waardoor ze onafhankelijk zijn, maar in werkelijkheid zijn ze aan elkaar gerelateerd

Om deze beperking te omzeilen werd het insluiten van woorden ontwikkeld en word2vec is een benadering om dit te implementeren.

Hoe Word2vec werkt?

Word2vec leert woorden door de omringende context te voorspellen. Laten we bijvoorbeeld het woord "Hij houdt van voetbal" aannemen .

We willen het woord2vec berekenen voor het woord: liefdes.

Veronderstellen

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

Word houdt beweegt over elk woord in het corpus. Zowel de syntactische als de semantische relatie tussen woorden is gecodeerd. Dit helpt bij het vinden van gelijkaardige woorden en woorden die naar analogie verwijzen.

Alle willekeurige kenmerken van het woord liefdes worden berekend. Deze functies worden gewijzigd of bijgewerkt met betrekking tot naburige of contextwoorden met behulp van een back-propagatiemethode.

Een andere manier om te leren is dat als de context van twee woorden vergelijkbaar is of twee woorden vergelijkbare kenmerken hebben, dergelijke woorden gerelateerd zijn.

Word2vec-architectuur

Er zijn twee architecturen die worden gebruikt door word2vec

  1. Continuous Bag of Words (CBOW)
  2. sla gram over

Laten we, voordat we verder gaan, bespreken waarom deze architecturen of modellen belangrijk zijn vanuit het oogpunt van woordrepresentatie. Het leren van woordrepresentatie is in wezen zonder toezicht, maar er zijn doelen / labels nodig om het model te trainen. Skip-gram en CBOW zetten representatie zonder toezicht om in een vorm onder toezicht voor modeltraining.

In CBOW wordt het huidige woord voorspeld met behulp van het venster van omringende contextvensters. Als bijvoorbeeld w i-1 , w i-2 , w i + 1 , w i + 2 woorden of context krijgen, geeft dit model w i

Skip-Gram voert het tegenovergestelde uit van CBOW, wat inhoudt dat het de gegeven volgorde of context uit het woord voorspelt. U kunt het voorbeeld omdraaien om het te begrijpen. Als w i wordt gegeven, zal dit de context voorspellen of w i-1 , w i-2 , w i + 1 , w i + 2.

Word2vec biedt een optie om te kiezen tussen CBOW (doorlopende zak met woorden) en skim-gram. Dergelijke parameters worden verstrekt tijdens het trainen van het model. Men kan de optie hebben om een ​​negatieve bemonstering of een hiërarchische softmax-laag te gebruiken.

Continu zak met woorden.

Laten we een eenvoudig diagram tekenen om de continue zak met woordarchitectuur te begrijpen.

Figuur doorlopende zak met Word-architectuur

Laten we de vergelijkingen wiskundig berekenen. Stel dat V de grootte van de woordenschat is en N de grootte van de verborgen laag. Invoer wordt gedefinieerd als {x i-1 , x i-2, x i + 1, x i + 2 }. We verkrijgen de gewichtsmatrix door V * N te vermenigvuldigen. Een andere matrix wordt verkregen door de invoervector te vermenigvuldigen met de gewichtsmatrix. Dit kan ook worden begrepen door de volgende vergelijking.

h = xi t W

waarbij xi t ∧ W respectievelijk de invoervector en de gewichtsmatrix zijn,

Raadpleeg de onderstaande vergelijking om de overeenkomst tussen context en het volgende woord te berekenen

u = voorspelde representatie * h

waarbij de voorspelde weergave wordt verkregen model∧h in de bovenstaande vergelijking.

Skip-Gram-model

Skip-Gram-benadering wordt gebruikt om een ​​zin te voorspellen met een invoerwoord. Laten we, om het beter te begrijpen, het diagram tekenen.

Figuur Skip-Gram-model

Men kan het behandelen als het omgekeerde van het Continuous bag of word-model, waarbij de invoer het woord is en het model de context of de volgorde geeft. We kunnen ook concluderen dat het doelwit naar de invoer- en uitvoerlaag wordt gevoerd en meerdere keren wordt gerepliceerd om het gekozen aantal contextwoorden te accommoderen. De foutvector van de hele uitvoerlaag wordt opgeteld om gewichten aan te passen via een backpropagation-methode.

Welk model te kiezen?

CBOW is meerdere keren sneller dan het overslaan van gram en biedt een betere frequentie voor veel voorkomende woorden, terwijl het overslaan van gram een ​​kleine hoeveelheid trainingsgegevens nodig heeft en zelfs zeldzame woorden of zinsdelen vertegenwoordigt.

De relatie tussen Word2vec en NLTK

NLTK is een toolkit voor natuurlijke talen. Het wordt gebruikt voor het voorbewerken van de tekst. Men kan verschillende bewerkingen uitvoeren, zoals het taggen van delen van spraak, lemmatiseren, stemmen, het verwijderen van stopwoorden, het verwijderen van zeldzame of minst gebruikte woorden. Het helpt bij het opschonen van de tekst en helpt bij het voorbereiden van de functies van de effectieve woorden. Omgekeerd wordt word2vec gebruikt voor semantische (nauw verwante items aan elkaar) en syntactische (sequentie) matching. Met word2vec kan men gelijkaardige woorden, ongelijke woorden, dimensionale reductie en vele anderen vinden. Een ander belangrijk kenmerk van word2vec is om de hogere dimensionale weergave van de tekst om te zetten in lagere dimensionale vectoren.

Waar gebruik je NLTK en Word2vec?

Als iemand een aantal algemene taken moet uitvoeren zoals hierboven vermeld, zoals tokenisatie, POS-tagging en parsing, moet men NLTK gebruiken, terwijl voor het voorspellen van woorden volgens een context, onderwerpmodellering of documentovereenkomst, Word2vec moet worden gebruikt.

Relatie van NLTK en Word2vec met behulp van code

NLTK en Word2vec kunnen samen worden gebruikt om vergelijkbare woorden of syntactische overeenkomsten te vinden. NLTK-toolkit kan worden gebruikt om veel pakketten te laden die met NLTK worden geleverd en het model kan worden gemaakt met word2vec. Het kan vervolgens worden getest op de realtime woorden. Laten we de combinatie van beide in de volgende code bekijken. Bekijk voordat u verder gaat de corpora die NLTK aanbiedt. U kunt downloaden met behulp van het commando

nltk(nltk.download('all'))

Figuur Corpora gedownload met NLTK

Zie de schermafbeelding voor de code.

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

Uitgang:

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

Verklaring van de code

  1. nltk-bibliotheek wordt geïmporteerd waaruit u het abc-corpus kunt downloaden dat we in de volgende stap zullen gebruiken.
  2. Gensim wordt geïmporteerd. Als Gensim niet is geïnstalleerd, installeer het dan met het commando "pip3 install gensim". Zie de onderstaande schermafbeelding.

Afbeelding Gensim installeren met PIP

  1. importeer het corpus abc dat is gedownload met nltk.download ('abc').
  2. Geef de bestanden door aan het model word2vec dat wordt geïmporteerd met Gensim als zinnen.
  3. Woordenschat wordt opgeslagen in de vorm van de variabele.
  4. Het model is getest op voorbeeldwoordwetenschap, aangezien deze bestanden gerelateerd zijn aan wetenschap.
  5. Hier wordt het soortgelijke woord "wetenschap" voorspeld door het model.

Activators en Word2Vec

De activeringsfunctie van het neuron bepaalt de output van dat neuron, gegeven een reeks inputs. Biologisch geïnspireerd door een activiteit in onze hersenen waarbij verschillende neuronen worden geactiveerd met verschillende prikkels. Laten we de activeringsfunctie begrijpen aan de hand van het volgende diagram.

Figuur Inzicht in activeringsfunctie

Hier is x1, x2, ... x4 het knooppunt van het neurale netwerk.

w1, w2, w3 is het gewicht van het knooppunt,

∑ is de som van alle gewichts- en knooppuntwaarden die werken als de activeringsfunctie.

Waarom activeringsfunctie?

Als er geen activeringsfunctie wordt gebruikt, zou de output lineair zijn, maar de functionaliteit van de lineaire functie is beperkt. Om complexe functionaliteit te bereiken, zoals objectdetectie, beeldclassificatie, tekst typen met behulp van spraak en vele andere niet-lineaire uitvoeringen, is dit nodig, wat wordt bereikt met behulp van de activeringsfunctie.

Hoe de activeringslaag wordt berekend in het insluiten van woorden (word2vec)

Softmax Layer (genormaliseerde exponentiële functie) is de outputlaagfunctie die elk knooppunt activeert of activeert. Een andere gebruikte benadering is Hiërarchische softmax waarbij de complexiteit wordt berekend door O (log 2 V) waarbij de softmax O (V) is, waarbij V de woordenschatgrootte is. Het verschil tussen deze is de vermindering van de complexiteit in de hiërarchische softmax-laag. Bekijk het onderstaande voorbeeld om de (hiërarchische softmax) -functionaliteit te begrijpen:

Figuur Hiërarchische softmax-boomachtige structuur

Stel dat we de kans willen berekenen om het woord liefde te observeren in een bepaalde context. De stroom van de wortel naar het bladknooppunt zal de eerste beweging zijn naar knooppunt 2 en vervolgens naar knooppunt 5. Dus als we de woordenschatgrootte 8 hebben gehad, zijn er maar drie berekeningen nodig. Het maakt dus ontbinding mogelijk, berekening van de waarschijnlijkheid van één woord ( liefde ).

Welke andere opties zijn beschikbaar dan hiërarchische softmax?

Als in algemene zin gesproken wordt over het insluiten van woorden, zijn de beschikbare opties Gedifferentieerde Softmax, CNN-Softmax, Belang-bemonstering, Adaptief belang-bemonstering, Ruiscontrastieve schattingen, Negatieve bemonstering, Zelf-normalisatie en onregelmatige normalisatie.

Specifiek gesproken over Word2vec, we hebben negatieve steekproeven beschikbaar.

Negatieve steekproeven zijn een manier om een ​​steekproef te nemen van de trainingsgegevens. Het lijkt een beetje op een stochastische afdaling, maar met enig verschil. Negatieve steekproeven zoeken alleen naar negatieve trainingsvoorbeelden. Het is gebaseerd op ruiscontrastieve schatting en steekproeven willekeurig woorden, niet in de context. Het is een snelle trainingsmethode en kiest de context willekeurig. Als het voorspelde woord in de willekeurig gekozen context verschijnt, bevinden beide vectoren zich dicht bij elkaar.

Welke conclusie kan worden getrokken?

Activatoren vuren de neuronen af, net zoals onze neuronen worden afgevuurd met behulp van de externe stimuli. Softmax-laag is een van de uitvoerlaagfuncties die de neuronen afvuren in het geval van woordinbedding. In word2vec hebben we opties zoals hiërarchische softmax en negatieve bemonstering. Met behulp van activatoren kan men de lineaire functie omzetten in de niet-lineaire functie, en met behulp daarvan kan een complex machine learning-algoritme worden geïmplementeerd.

Wat is Gensim?

Gensim is een toolkit voor onderwerpmodellering die is geïmplementeerd in python. Onderwerpmodellering is het ontdekken van verborgen structuur in de tekst. Word2vec wordt geïmporteerd vanuit de Gensim toolkit. Houd er rekening mee dat Gensim niet alleen een implementatie van word2vec biedt, maar ook Doc2vec en FastText, maar deze tutorial gaat helemaal over word2vec, dus we zullen bij het huidige onderwerp blijven.

Implementatie van word2vec met Gensim

Tot nu toe hebben we besproken wat word2vec is, de verschillende architecturen, waarom er een verschuiving is van een zak met woorden naar word2vec, de relatie tussen word2vec en NLTK met live code en activeringsfuncties. In deze sectie wordt word2vec geïmplementeerd met Gensim

Stap 1) Gegevensverzameling

De eerste stap om een ​​machine learning-model te implementeren of om natuurlijke taalverwerking te implementeren, is het verzamelen van gegevens

Let op de gegevens om een ​​intelligente chatbot te bouwen.

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

Dit is wat we uit de gegevens begrijpen

  • Deze gegevens bevatten drie dingen: tag, patroon en reacties. De tag is de intentie (wat is het onderwerp van discussie).
  • De gegevens zijn in JSON-indeling.
  • Een patroon is een vraag die gebruikers aan de bot stellen
  • Reacties is het antwoord dat de chatbot geeft op de bijbehorende vraag / patroon.

Stap 2) Voorverwerking van gegevens.

Het is erg belangrijk om de ruwe data te verwerken. Als opgeschoonde gegevens naar de machine worden gevoerd, reageert het model nauwkeuriger en leert het de gegevens efficiënter.

Deze stap omvat het verwijderen van stopwoorden, stamwoorden, onnodige woorden, enz. Voordat u verder gaat, is het belangrijk om gegevens te laden en deze om te zetten in een dataframe. Zie hiervoor de onderstaande code

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

Toelichting bij CODE.

  1. Omdat gegevens de vorm hebben van het json-formaat, wordt json geïmporteerd
  2. Bestand wordt opgeslagen in de variabele
  3. Bestand is geopend en geladen in gegevensvariabele

Nu worden gegevens geïmporteerd en is het tijd om gegevens om te zetten in een dataframe. Raadpleeg de onderstaande code om de volgende stap te zien

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

Toelichting bij CODE

1. Gegevens worden omgezet in een dataframe met panda's die hierboven zijn geïmporteerd.

2. Het converteert de lijst in kolompatronen naar een string.

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

Code Verklaring

1. Engelse stopwoorden worden geïmporteerd met behulp van de stopwoordmodule uit de nltk-toolkit

2. Alle woorden van de tekst worden omgezet in kleine letters met behulp van de voorwaarde en lambda-functie. Lambda-functie is een anonieme functie.

3. Alle rijen van de tekst in het dataframe worden gecontroleerd op tekenreeksinterpunctie en deze worden gefilterd.

4. Tekens zoals cijfers of punten worden verwijderd met een reguliere expressie.

5. Cijfers worden uit de tekst verwijderd.

6. Stopwoorden worden in dit stadium verwijderd.

7. Woorden worden nu gefilterd en verschillende vormen van hetzelfde woord worden verwijderd door middel van lemmatisering. Hiermee hebben we de gegevensvoorbewerking voltooid.

Uitgang:

, 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

Stap 3) Neuraal netwerk bouwen met word2vec

Nu is het tijd om een ​​model te bouwen met de Gensim-module word2vec. We moeten word2vec importeren uit Gensim. Laten we dit doen, en dan gaan we bouwen en in de laatste fase zullen we het model controleren op realtime gegevens.

from gensim.models import Word2Vec

Nu kunnen we het model met succes bouwen met Word2Vec. Raadpleeg de volgende regel code om te leren hoe u het model maakt met Word2Vec. Tekst wordt aan het model geleverd in de vorm van een lijst, dus we zullen de tekst van dataframe naar lijst converteren met behulp van de onderstaande code

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)

Verklaringen van Code

1. De grotere_lijst gemaakt waaraan de binnenste lijst is toegevoegd. Dit is het formaat dat wordt ingevoerd in het model Word2Vec.

2. Loop wordt geïmplementeerd en elke invoer van de patroonkolom van het dataframe wordt herhaald.

3. Elk element van de kolompatronen wordt opgesplitst en opgeslagen in de binnenste lijst li

4. de binnenste lijst wordt toegevoegd aan de buitenste lijst.

5. Deze lijst is bedoeld voor het Word2Vec-model. Laten we enkele van de hier verstrekte parameters begrijpen

Min_count: het negeert alle woorden met een lagere totale frequentie dan deze.

Grootte: het vertelt de dimensionaliteit van het woord vectoren.

Werknemers: dit zijn de draden om het model te trainen

Er zijn ook andere opties beschikbaar, en enkele belangrijke worden hieronder uitgelegd

Venster: maximale afstand tussen het huidige en het voorspelde woord binnen een zin.

Sg: Het is een trainingsalgoritme en 1 voor skip-gram en 0 voor een continu pakket met woorden. We hebben deze hierboven in detail besproken.

Hs: Als dit 1 is, gebruiken we hiërarchische softmax voor training en als 0 wordt een negatieve steekproef gebruikt.

Alpha: initiële leertempo

Laten we de laatste code hieronder weergeven

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

Stap 4) Model opslaan

Model kan worden opgeslagen in de vorm van een bak en modelformulier. Bin is het binaire formaat. Zie de onderstaande regels om het model op te slaan

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

Toelichting op bovenstaande code

1. Het model wordt opgeslagen in de vorm van een .model-bestand.

2. model wordt opgeslagen in de vorm van een .bin-bestand

We zullen dit model gebruiken om real-time tests uit te voeren, zoals vergelijkbare woorden, verschillende woorden en de meest voorkomende woorden.

Stap 5) Model laden en realtime testen uitvoeren

Model wordt geladen met behulp van onderstaande code

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

Als u het vocabulaire ervan wilt afdrukken, doet u dit met het onderstaande commando

vocab = lijst (model.wv.vocab)

Zie het resultaat

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

Stap 6) Controle van de meeste vergelijkbare woorden

Laten we de dingen praktisch implementeren

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

Zie het resultaat

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

Stap 7) Komt niet overeen met het woord uit de geleverde woorden

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

We hebben de woorden 'Tot later, bedankt voor uw bezoek' aangeleverd . Hiermee worden de meest ongelijke woorden uit deze woorden afgedrukt. Laten we deze code uitvoeren en het resultaat zoeken

Het resultaat na uitvoering van de bovenstaande code.

Thanks

Stap 8) Zoek de overeenkomst tussen twee woorden

Dit zal resulteren in een waarschijnlijkheid van overeenkomst tussen twee woorden. Raadpleeg de onderstaande code om deze sectie uit te voeren.

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

Het resultaat van de bovenstaande code is zoals hieronder

0.13706

U kunt vergelijkbare woorden verder vinden door de onderstaande code uit te voeren

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

Uitvoer van bovenstaande code

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

Gevolgtrekking

  • Word Embedding is een soort woordweergave waarmee woorden met een vergelijkbare betekenis kunnen worden begrepen door machine learning-algoritmen
  • Word Embedding wordt gebruikt om vergelijkbare woorden te berekenen, een groep verwante woorden te maken, functie voor tekstclassificatie, documentclustering, verwerking van natuurlijke taal
  • Word2vec is een ondiep tweelaags neuraal netwerkmodel om woordinsluiting te produceren voor een betere woordweergave
  • Word2vec vertegenwoordigt woorden in vectorruimtevoorstelling. Woorden worden weergegeven in de vorm van vectoren en de plaatsing gebeurt op zo'n manier dat woorden met dezelfde betekenis bij elkaar verschijnen en ongelijke woorden ver weg staan
  • Word2vec gebruikte 2 architecturen Continuous Bag of words (CBOW) en sla gram over
  • CBOW is meerdere keren sneller dan het overslaan van gram en biedt een betere frequentie voor veel voorkomende woorden, terwijl het overslaan van gram een ​​kleine hoeveelheid trainingsgegevens nodig heeft en zelfs zeldzame woorden of zinsdelen vertegenwoordigt.
  • NLTK en word2vec kunnen samen worden gebruikt om krachtige applicaties te creëren
  • De activeringsfunctie van het neuron bepaalt de output van dat neuron, gegeven een reeks inputs. In word2vec. Softmax Layer (genormaliseerde exponentiële functie) is de outputlaagfunctie die elk knooppunt activeert of activeert. Word2vec heeft ook een negatieve bemonstering beschikbaar
  • Gensim is een toolkit voor onderwerpmodellering die is geïmplementeerd in python