Incorporamento di parole e modello Word2Vec con esempio

Cos'è l'incorporamento di parole?

Incorporamento di parole è un tipo di rappresentazione delle parole che consente agli algoritmi di apprendimento automatico di comprendere parole con significati simili. Si tratta di una tecnica di modellazione del linguaggio e di apprendimento delle caratteristiche per mappare le parole in vettori di numeri reali utilizzando reti neurali, modelli probabilistici o riduzione delle dimensioni sulla matrice di co-occorrenza delle parole. Alcuni modelli di incorporamento delle parole sono Word2vec (Google), Glove (Stanford) e più veloce (Facebook).

L'incorporamento di parole è anche chiamato modello semantico distribuito o spazio vettoriale rappresentato o semantico distribuito o modello di spazio vettoriale. Mentre leggi questi nomi, ti imbatti nella parola semantica che significa classificare insieme parole simili. Ad esempio frutti come mela, mango, banana dovrebbero essere posizionati vicino mentre i libri saranno lontani da queste parole. In un senso più ampio, l'incorporamento delle parole creerà il vettore dei frutti che sarà posizionato lontano dalla rappresentazione vettoriale dei libri.

Dove viene utilizzato l'incorporamento delle parole?

L'incorporamento delle parole aiuta nella generazione di funzionalità, nel clustering di documenti, nella classificazione del testo e nelle attività di elaborazione del linguaggio naturale. Elenchiamoli e discutiamo su ciascuna di queste applicazioni.

  • Calcola parole simili: L'incorporamento delle parole viene utilizzato per suggerire parole simili alla parola sottoposta al modello di previsione. Oltre a ciò suggerisce anche parole diverse, nonché le parole più comuni.
  • Crea un gruppo di parole correlate: Viene utilizzato per il raggruppamento semantico che raggrupperà insieme cose con caratteristiche simili e dissimili lontane.
  • Funzionalità per la classificazione del testo: Il testo viene mappato in matrici di vettori che vengono alimentati al modello per l'addestramento e la previsione. I modelli di classificatore basati su testo non possono essere addestrati sulla stringa, quindi questo convertirà il testo in un formato addestrabile dalla macchina. Inoltre le sue caratteristiche di creazione di un aiuto semantico nella classificazione basata su testo.
  • Cluster di documenti: è un'altra applicazione in cui l'incorporamento di parole Word2vec è ampiamente utilizzato
  • Elaborazione del linguaggio naturale: Esistono molte applicazioni in cui l'incorporamento delle parole è utile e prevale sulle fasi di estrazione delle funzionalità come parti di etichettatura vocale, analisi sentimentale e analisi sintattica. Ora abbiamo una certa conoscenza dell'incorporamento delle parole. Viene inoltre gettata luce su diversi modelli per implementare l'incorporamento delle parole. L'intero tutorial sull'incorporamento di parole è incentrato su uno dei modelli (Word2vec).

Cos'è Word2vec?

Parola2vec è una tecnica/modello per produrre l'incorporamento delle parole per una migliore rappresentazione delle parole. È un metodo di elaborazione del linguaggio naturale che cattura un gran numero di precise relazioni sintattiche e semantiche tra le parole. Si tratta di una rete neurale poco profonda a due strati in grado di rilevare sinonimi e suggerire parole aggiuntive per frasi parziali una volta addestrata.

Prima di approfondire questo tutorial su Word2vec, vedere la differenza tra rete neurale superficiale e profonda, come mostrato nel diagramma di esempio di incorporamento di Word riportato di seguito:

La rete neurale superficiale è costituita solo da uno strato nascosto tra input e output mentre la rete neurale profonda contiene più strati nascosti tra input e output. L'input è soggetto a nodi mentre lo strato nascosto, così come lo strato di output, contiene neuroni.

Apprendimento superficiale e profondo
Apprendimento superficiale e profondo

Word2vec è una rete a due livelli in cui è presente un input nascosto e un output.

Word2vec è stato sviluppato da un gruppo di ricercatori guidati da Tomas Mikolov presso Google. Word2vec è migliore e più efficiente del modello di analisi semantica latente.

Perché Word2vec?

Word2vec rappresenta le parole nella rappresentazione dello spazio vettoriale. Le parole sono rappresentate sotto forma di vettori e il posizionamento avviene in modo tale che le parole con significato simile appaiano insieme e le parole dissimili si trovino molto distanti. Questa è anche definita relazione semantica. Le reti neurali non capiscono il testo ma capiscono solo i numeri. L'incorporamento di parole fornisce un modo per convertire il testo in un vettore numerico.

Word2vec ricostruisce il contesto linguistico delle parole. Prima di andare oltre cerchiamo di capire, cos'è il contesto linguistico? Nello scenario generale della vita, quando parliamo o scriviamo per comunicare, le altre persone cercano di capire quale sia l'obiettivo della frase. Ad esempio, "Qual è la temperatura dell'India", qui il contesto è che l'utente vuole sapere "temperatura dell'India" che è il contesto. In breve, l’obiettivo principale di una frase è il contesto. La parola o la frase che circonda il linguaggio parlato o scritto (divulgazione) aiuta a determinare il significato del contesto. Word2vec apprende la rappresentazione vettoriale delle parole attraverso i contesti.

Cosa fa Word2vec?

Prima dell'incorporamento delle parole

È importante sapere quale approccio viene utilizzato prima dell'incorporamento delle parole e quali sono i suoi demeriti, quindi passeremo all'argomento su come i demeriti vengono superati dall'incorporamento di Word utilizzando l'approccio Word2vec. Infine, spiegheremo come funziona Word2vec perché è importante capire come funziona.

Approccio per l'analisi semantica latente

Questo è l'approccio utilizzato prima dell'incorporamento delle parole. Ha utilizzato il concetto di Borsa di parole in cui le parole sono rappresentate sotto forma di vettori codificati. È una rappresentazione vettoriale sparsa in cui la dimensione è uguale alla dimensione del vocabolario. Se la parola ricorre nel dizionario viene conteggiata, altrimenti no. Per capirne di più consultare il programma sottostante.

Esempio Word2vec

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

Produzione:

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

Spiegazione del codice

  1. CountVectorizer è il modulo che viene utilizzato per memorizzare il vocabolario in base all'adattamento delle parole al suo interno. Questo è importato da sklearn.
  2. Crea l'oggetto utilizzando la classe CountVectorizer.
  3. Scrivere nella lista i dati da inserire nel CountVectorizer.
  4. I dati sono inseriti nell'oggetto creato dalla classe CountVectorizer.
  5. Applicare un approccio basato sul bagaglio di parole per contare le parole nei dati utilizzando il vocabolario. Se la parola o il token non sono disponibili nel vocabolario, la posizione dell'indice viene impostata su zero.
  6. La variabile nella riga 5 che è x viene convertita in un array (metodo disponibile per x). Ciò fornirà il conteggio di ciascun token nella frase o nell'elenco fornito nella riga 3.
  7. Questo mostrerà le caratteristiche che fanno parte del vocabolario quando viene adattato utilizzando i dati nella riga 4.

Nell'approccio semantico latente, la riga rappresenta parole univoche mentre la colonna rappresenta il numero di volte in cui quella parola appare nel documento. È una rappresentazione di parole sotto forma di matrice del documento. La frequenza inversa del documento (TFIDF) viene utilizzata per contare la frequenza delle parole nel documento, ovvero la frequenza del termine nel documento/frequenza del termine nell'intero corpus.

Difetto del metodo Bag of Words

  • Ignora l'ordine della parola, ad esempio this is bad = bad is this.
  • Ignora il contesto delle parole. Supponiamo che se scrivo la frase “Amava i libri. L’istruzione si trova meglio nei libri”. Creerebbe due vettori, uno per "Amava i libri" e l'altro per "L'istruzione si trova meglio nei libri". Li tratterebbe entrambi ortogonalmente, il che li rende indipendenti, ma in realtà sono legati tra loro

Per superare queste limitazioni è stato sviluppato il word embedding e Word2vec è un approccio per implementarlo.

Come funziona Word2vec?

Word2vec impara la parola prevedendo il contesto circostante. Prendiamo ad esempio la parola “Lui ama Calcio."

Vogliamo calcolare il Word2vec per la parola: amore.

supporre

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

Word ama si sposta su ogni parola del corpus. La relazione sintattica e semantica tra le parole è codificata. Questo aiuta a trovare parole simili e analogie.

Tutte le caratteristiche casuali della parola ama viene calcolato. Queste funzionalità vengono modificate o aggiornate riguardo alle parole vicine o di contesto con l'aiuto di a Propagazione posteriore metodo.

Un altro modo di apprendere è che se il contesto di due parole è simile o due parole hanno caratteristiche simili, allora tali parole sono correlate.

Parola2vec Architectura

Word2vec utilizza due architetture:

  1. Borsa continua di parole (CBOW)
  2. Salta il grammo

Prima di proseguire con questo tutorial Word2vec, discutiamo perché queste architetture o modelli sono importanti dal punto di vista della rappresentazione delle parole. L'apprendimento della rappresentazione delle parole è essenzialmente non supervisionato, ma sono necessari target/etichette per addestrare il modello. Skip-gram e CBOW convertono la rappresentazione non supervisionata in forma supervisionata per l'addestramento del modello.

In CBOW, la parola corrente viene prevista utilizzando la finestra delle finestre di contesto circostanti. Ad esempio, se wi-1,wi-2,wi + 1,wi + 2vengono fornite parole o contesto, questo modello fornirà wi

Skip-Gram funziona in modo opposto a CBOW, il che implica che predice la sequenza o il contesto dati dalla parola. Puoi invertire l'esempio per capirlo. Se wi viene fornito, questo predirà il contesto o wi-1,wi-2,wi + 1,wio+2.

Word2vec fornisce un'opzione per scegliere tra CBOW (continuous Bag of words) e skim-gram. Tali parametri vengono forniti durante l'addestramento del modello. Si può avere l'opzione di usare il campionamento negativo o il livello softmax gerarchico.

Sacco continuo di parole

Disegniamo un semplice diagramma di esempio Word2vec per comprendere l'architettura del bag of word continuo.

Borsa continua di parole Architectura

Borsa continua di parole Architectura

Calcoliamo matematicamente le equazioni. Supponiamo che V sia la dimensione del vocabolario e N sia la dimensione dello strato nascosto. L'input è definito come { xi-1, Xi-2, xio+1, xi + 2}. Otteniamo la matrice dei pesi moltiplicando V * N. Un'altra matrice si ottiene moltiplicando il vettore di input con la matrice dei pesi. Questo può essere compreso anche dalla seguente equazione.

h=xitW

dove xit? W sono rispettivamente il vettore di input e la matrice dei pesi,

Per calcolare la corrispondenza tra il contesto e la parola successiva, fare riferimento all'equazione seguente

u=rappresentazione prevista*h

dove si ottiene la rappresentazione prevista modello?h nell'equazione precedente.

Modello Skip-Gram

L'approccio Skip-Gram viene utilizzato per prevedere una frase data una parola di input. Per capirlo meglio disegniamo il diagramma come mostrato nell'esempio Word2vec qui sotto.

Modello Skip-Gram

Modello Skip-Gram

Si può trattarlo come il contrario del modello del sacco continuo di parole in cui l'input è la parola e il modello fornisce il contesto o la sequenza. Possiamo anche concludere che l'obiettivo viene fornito allo strato di input e di output viene replicato più volte per accogliere il numero scelto di parole di contesto. Il vettore di errore da tutto lo strato di output viene sommato per regolare i pesi tramite un metodo di backpropagation.

Quale modello scegliere?

CBOW è molte volte più veloce di skip gram e fornisce una frequenza migliore per le parole frequenti, mentre skip gram richiede una piccola quantità di dati di addestramento e rappresenta anche parole o frasi rare.

La relazione tra Word2vec e NLTK

NLTK è un toolkit per il linguaggio naturale. Viene utilizzato per la preelaborazione del testo. È possibile eseguire diverse operazioni come etichettare parti del discorso, lemmatizzare, derivare, rimuovere le parole di arresto, rimuovere parole rare o meno usate. Aiuta a pulire il testo e aiuta a preparare le caratteristiche delle parole efficaci. D'altro canto, Word2vec viene utilizzato per la corrispondenza semantica (elementi strettamente correlati tra loro) e sintattica (sequenza). Utilizzando Word2vec, è possibile trovare parole simili, parole diverse, riduzione dimensionale e molte altre. Un'altra caratteristica importante di Word2vec è convertire la rappresentazione dimensionale superiore del testo in una rappresentazione dimensionale inferiore dei vettori.

Dove usare NLTK e Word2vec?

Se è necessario eseguire alcune attività generiche come menzionato sopra come la tokenizzazione, il tagging POS e l'analisi, è necessario utilizzare NLTK mentre per prevedere le parole in base al contesto, alla modellazione degli argomenti o alla somiglianza dei documenti è necessario utilizzare Word2vec.

Relazione tra NLTK e Word2vec con l'aiuto del codice

NLTK e Word2vec possono essere usati insieme per trovare la rappresentazione di parole simili o la corrispondenza sintattica. Il toolkit NLTK può essere usato per caricare molti pacchetti che vengono con NLTK e il modello può essere creato usando Word2vec. Può essere poi testato sulle parole in tempo reale. Vediamo la combinazione di entrambi nel seguente codice. Prima di procedere ulteriormente, dai un'occhiata ai corpora forniti da NLTK. Puoi scaricare usando il comando

nltk(nltk.download('all'))

Relazione tra NLTK e Word2vec

Corpora scaricato utilizzando NLTK

Si prega di vedere lo screenshot per il codice.

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)

Relazione tra NLTK e Word2vec con l'aiuto del codice

Produzione:

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

Spiegazione del codice

  1. Viene importata la libreria nltk da cui è possibile scaricare il corpus abc che utilizzeremo nel passaggio successivo.
  2. Gensim è importato. Se Gensim Word2vec non è installato, installarlo utilizzando il comando "pip3 install gensim". Si prega di vedere lo screenshot qui sotto.
Installazione di Gensim utilizzando PIP

Installazione di Gensim utilizzando PIP
  1. importare il corpus abc che è stato scaricato utilizzando nltk.download('abc').
  2. Passa i file al modello Word2vec che viene importato utilizzando Gensim come frasi.
  3. Il vocabolario viene memorizzato sotto forma di variabile.
  4. Il modello viene testato su campioni di parole scientifiche poiché questi file sono correlati alla scienza.
  5. Qui il modello prevede la parola simile “scienza”.

Attivatori e Word2Vec

La funzione di attivazione del neurone definisce l'output di quel neurone dato un set di input. Biologicamente ispirata da un'attività nei nostri cervelli in cui diversi neuroni vengono attivati ​​usando stimoli diversi. Cerchiamo di comprendere la funzione di attivazione attraverso il seguente diagramma.

Funzione di attivazione in Word2vec

Comprensione della funzione di attivazione

Qui x1,x2,..x4 è il nodo della rete neurale.

w1, w2, w3 è il peso del nodo,

? è la somma di tutti i pesi e i valori dei nodi che funzionano come funzione di attivazione.

Perché la funzione di attivazione?

Se non viene utilizzata alcuna funzione di attivazione, l'output sarebbe lineare, ma la funzionalità della funzione lineare è limitata. Per ottenere funzionalità complesse come il rilevamento di oggetti, la classificazione di immagini, la digitazione di testo tramite voce e molti altri output non lineari, è necessario ottenere questa funzionalità tramite la funzione di attivazione.

Come viene calcolato il livello di attivazione nella parola incorporamento (Word2vec)

Softmax Layer (funzione esponenziale normalizzata) è la funzione di output layer che attiva o attiva ogni nodo. Un altro approccio utilizzato è Hierarchical softmax in cui la complessità è calcolata da O(log2V) in cui il softmax è O(V) dove V è la dimensione del vocabolario. La differenza tra questi è la riduzione della complessità nel livello softmax gerarchico. Per comprendere la sua funzionalità (softmax gerarchico), guarda l'esempio di incorporamento di Word qui sotto:

Struttura gerarchica ad albero Softmax

Struttura gerarchica ad albero softmax

Supponiamo di voler calcolare la probabilità di osservare la parola amore dato un certo contesto. Il flusso dalla radice al nodo foglia sarà il primo spostamento al nodo 2 e poi al nodo 5. Quindi, se avessimo una dimensione del vocabolario pari a 8, saranno necessari solo tre calcoli. Quindi consente la scomposizione, il calcolo della probabilità di una parola (amore).

Quali altre opzioni sono disponibili oltre a Hierarchical Softmax?

Se si parla in senso generale di incorporamento di parole, le opzioni disponibili sono Softmax differenziato, CNN-Softmax, campionamento di importanza, campionamento di importanza adattivo, stime contrastive del rumore, campionamento negativo, autonormalizzazione e normalizzazione poco frequente.

Parlando specificamente di Word2vec abbiamo a disposizione il campionamento negativo.

Il campionamento negativo è un modo per campionare i dati di training. È un po’ come la discesa del gradiente stocastico, ma con qualche differenza. Il campionamento negativo cerca solo esempi di training negativi. Si basa sulla stima contrastiva del rumore e campiona le parole in modo casuale, non nel contesto. È un metodo di allenamento veloce e sceglie il contesto in modo casuale. Se la parola prevista appare nel contesto scelto a caso, entrambi i vettori sono vicini tra loro.

Quale conclusione si può trarre?

Gli attivatori attivano i neuroni proprio come i nostri neuroni vengono attivati ​​usando gli stimoli esterni. Il livello Softmax è una delle funzioni del livello di output che attiva i neuroni in caso di word embedding. In Word2vec abbiamo opzioni come softmax gerarchico e campionamento negativo. Utilizzando gli attivatori, si può convertire la funzione lineare in funzione non lineare e un algoritmo di apprendimento automatico complesso può essere implementato usando tale.

Cos'è Gensim?

Gensim è un toolkit open source per la modellazione di argomenti e l'elaborazione del linguaggio naturale implementato in Python e Citone. Il toolkit Gensim consente agli utenti di importare Word2vec per la modellazione degli argomenti per scoprire la struttura nascosta nel corpo del testo. Gensim fornisce non solo un'implementazione di Word2vec ma anche di Doc2vec e FastText.

Questo tutorial riguarda interamente Word2vec, quindi resteremo fedeli all'argomento corrente.

Come implementare Word2vec utilizzando Gensim

Finora abbiamo parlato di cosa sia Word2vec, delle sue diverse architetture, del motivo per cui si passa da un "bag of words" a Word2vec, della relazione tra Word2vec e NLTK con codice live e funzioni di attivazione.

Di seguito è riportato il metodo passo passo per implementare Word2vec utilizzando Gensim:

Passaggio 1) Raccolta dati

Il primo passo per implementare qualsiasi modello di machine learning o implementare l'elaborazione del linguaggio naturale è la raccolta dei dati

Si prega di osservare i dati per creare un chatbot intelligente come mostrato nell'esempio Gensim Word2vec riportato di seguito.

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

Ecco cosa capiamo dai dati

  • Questi dati contengono tre elementi: tag, pattern e risposte. Il tag è l'intento (qual è l'argomento di discussione).
  • I dati sono in formato JSON.
  • Uno schema è una domanda che gli utenti porranno al bot
  • Le risposte sono la risposta che il chatbot fornirà alla domanda/schema corrispondente.

Passaggio 2) Preelaborazione dei dati

È molto importante elaborare i dati grezzi. Se i dati puliti vengono forniti alla macchina, il modello risponderà in modo più accurato e apprenderà i dati in modo più efficiente.

Questo passaggio prevede la rimozione di stop word, radici, parole non necessarie, ecc. Prima di procedere, è importante caricare i dati e convertirli in un frame di dati. Si prega di consultare il codice seguente per tale

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

Spiegazione del codice:

  1. Poiché i dati sono sotto forma di formato json, viene importato json
  2. Il file è memorizzato nella variabile
  3. Il file è aperto e caricato nella variabile dati

Ora i dati vengono importati ed è il momento di convertirli in un frame di dati. Si prega di consultare il codice seguente per vedere il passaggio successivo

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

Spiegazione del codice:

1. I dati vengono convertiti in frame di dati utilizzando i panda importati sopra.

2. Convertirà l'elenco nei modelli di colonna in stringa.

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

Spiegazione del codice:

1. Le parole stop inglesi vengono importate utilizzando il modulo parole stop dal toolkit nltk

2. Tutte le parole del testo vengono convertite in minuscolo utilizzando la condizione e la funzione lambda. Funzione Lambda è una funzione anonima.

3. In tutte le righe del testo nel frame dati viene controllata la punteggiatura delle stringhe e queste vengono filtrate.

4. Caratteri come numeri o punti vengono rimossi utilizzando un'espressione regolare.

5. Digivengono rimossi dal testo.

6. Le parole d'arresto vengono rimosse in questa fase.

7. Le parole ora vengono filtrate e le forme diverse della stessa parola vengono rimosse utilizzando la lemmatizzazione. Con questi abbiamo terminato la preelaborazione dei dati.

Produzione:

, 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

Passaggio 3) Creazione di una rete neurale utilizzando Word2vec

Ora è il momento di costruire un modello utilizzando il modulo Gensim Word2vec. Dobbiamo importare Word2vec da Gensim. Facciamolo, poi costruiremo e nella fase finale controlleremo il modello su dati in tempo reale.

from gensim.models import Word2Vec

Ora in questo tutorial di Gensim Word2vec, possiamo costruire con successo il modello utilizzando Word2Vec. Fare riferimento alla riga di codice successiva per apprendere come creare il modello utilizzando Word2Vec. Il testo viene fornito al modello sotto forma di elenco, quindi convertiremo il testo dal frame dati all'elenco utilizzando il codice seguente

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)

Spiegazione del codice:

1. Creato il big_list in cui viene aggiunto l'elenco interno. Questo è il formato che viene dato in pasto al modello Word2Vec.

2. Viene implementato il ciclo e ogni voce della colonna pattern del frame di dati viene ripetuta.

3. Ogni elemento dei modelli di colonna viene suddiviso e archiviato nell'elenco interno li

4. L'elenco interno viene aggiunto all'elenco esterno.

5. Questo elenco viene fornito al modello Word2Vec. Cerchiamo di comprendere alcuni dei parametri forniti qui

Conteggio_min: Ignorerà tutte le parole con una frequenza totale inferiore a questa.

Misura Indica la dimensionalità dei vettori di parole.

Lavoratori: Questi sono i thread per addestrare il modello

Sono disponibili anche altre opzioni e alcune importanti sono spiegate di seguito

finestra: Distanza massima tra la parola corrente e quella prevista all'interno di una frase.

Sig.: È un algoritmo di training e 1 per skip-gram e 0 per un Continuous bag of words. Ne abbiamo discusso in dettaglio sopra.

Ora: Se è 1, per l'addestramento utilizziamo il softmax gerarchico, mentre se è 0, viene utilizzato il campionamento negativo.

Alfa: Tasso di apprendimento iniziale

Mostriamo il codice finale di seguito:

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

Passaggio 4) Salvataggio del modello

Il modello può essere salvato sotto forma di contenitore e modulo modello. Bin è il formato binario. Si prega di consultare le righe seguenti per salvare il modello

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

Spiegazione del codice sopra

1. Il modello viene salvato sotto forma di file .model.

2. il modello viene salvato sotto forma di file .bin

Utilizzeremo questo modello per eseguire test in tempo reale come parole simili, parole diverse e parole più comuni.

Passaggio 5) Caricamento del modello ed esecuzione dei test in tempo reale

Il modello viene caricato utilizzando il codice seguente:

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

Se vuoi stampare il vocabolario da esso, usa il comando seguente:

vocab = list(model.wv.vocab)

Si prega di vedere il risultato:

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

Passaggio 6) Controllo delle parole più simili

Implementiamo le cose praticamente:

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

Si prega di vedere il risultato:

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

Passaggio 7) Non corrisponde alla parola tra le parole fornite

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

Abbiamo fornito le parole "Ci vediamo dopo, grazie per la visita". Questo sarà stampa le parole più dissimili da queste parole. Eseguiamo questo codice e troviamo il risultato

Il risultato dopo l'esecuzione del codice sopra:

Thanks

Passaggio 8) Trovare la somiglianza tra due parole

Questo dirà il risultato della probabilità di somiglianza tra due parole. Si prega di consultare il codice seguente su come eseguire questa sezione.

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

Il risultato del codice sopra è il seguente

0.13706

Puoi trovare ulteriormente parole simili eseguendo il codice seguente

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

Output del codice sopra:

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

Conclusione

  • L'incorporamento di parole è un tipo di rappresentazione delle parole che consente alle parole con significato simile di essere comprese dagli algoritmi di apprendimento automatico
  • L'incorporamento delle parole viene utilizzato per calcolare parole simili, creare un gruppo di parole correlate, funzionalità per la classificazione del testo, clustering di documenti, elaborazione del linguaggio naturale
  • Word2vec spiegato: Word2vec è un modello di rete neurale superficiale a due livelli per produrre incorporamenti di parole per una migliore rappresentazione delle parole
  • Word2vec rappresenta le parole nella rappresentazione dello spazio vettoriale. Le parole sono rappresentate sotto forma di vettori e il posizionamento avviene in modo tale che le parole con significato simile appaiano insieme e le parole dissimili si trovino molto distanti
  • L'algoritmo Word2vec utilizza 2 architetture Continuous Bag of words (CBOW) e skip gram
  • CBOW è molte volte più veloce di skip gram e fornisce una frequenza migliore per le parole frequenti, mentre skip gram richiede una piccola quantità di dati di addestramento e rappresenta anche parole o frasi rare.
  • NLTK e Word2vec possono essere utilizzati insieme per creare potenti applicazioni
  • La funzione di attivazione del neurone definisce l'output di quel neurone dato un insieme di input. In Word2vec. Softmax Layer (funzione esponenziale normalizzata) è la funzione del livello di output che attiva o attiva ciascun nodo. Word2vec dispone anche del campionamento negativo
  • Gensim è un toolkit di modellazione di argomenti implementato in Python