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 gruppo semanticoping che raggrupperร  insieme le cose con caratteristiche simili e quelle dissimili quelle distanti.
  • 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 di parole รจ utile e prevale sull'expressione delle funzionalitร tracfasi di elaborazione come l'etichettatura delle parti del discorso, l'analisi del sentiment e l'analisi sintattica. Ora abbiamo acquisito alcune conoscenze sull'embedding di parole. Vengono inoltre illustrati alcuni modelli per implementare l'embedding di parole. Questo tutorial sull'embedding di parole si concentra su uno di questi 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']

Code Spiegazione

  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 di Code

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 di Code

  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, ecc.ping รจ necessario generare testo utilizzando la voce e molti altri output non lineari, cosa che si ottiene 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 di Code:

  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 di Code:

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

Code Spiegazione:

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 di Code:

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.

Dimensioni: 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

Riassumi questo post con: