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.

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
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
- CountVectorizer รจ il modulo che viene utilizzato per memorizzare il vocabolario in base all'adattamento delle parole al suo interno. Questo รจ importato da sklearn.
- Crea l'oggetto utilizzando la classe CountVectorizer.
- Scrivere nella lista i dati da inserire nel CountVectorizer.
- I dati sono inseriti nell'oggetto creato dalla classe CountVectorizer.
- 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.
- 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.
- 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:
- Borsa continua di parole (CBOW)
- 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.
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.
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'))
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)
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
- Viene importata la libreria nltk da cui รจ possibile scaricare il corpus abc che utilizzeremo nel passaggio successivo.
- Gensim รจ importato. Se Gensim Word2vec non รจ installato, installarlo utilizzando il comando "pip3 install gensim". Si prega di vedere lo screenshot qui sotto.
- importare il corpus abc che รจ stato scaricato utilizzando nltk.download('abc').
- Passa i file al modello Word2vec che viene importato utilizzando Gensim come frasi.
- Il vocabolario viene memorizzato sotto forma di variabile.
- Il modello viene testato su campioni di parole scientifiche poichรฉ questi file sono correlati alla scienza.
- 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.
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:
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:
- Poichรฉ i dati sono sotto forma di formato json, viene importato json
- Il file รจ memorizzato nella variabile
- 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


