Cos'è l'incorporamento di parole?
L'incorporamento di parole è un tipo di rappresentazione di parole che consente a parole con significato simile di essere comprese da algoritmi di apprendimento automatico. Tecnicamente parlando, è una mappatura di parole in vettori di numeri reali utilizzando la rete neurale, il modello probabilistico o la riduzione delle dimensioni sulla matrice di co-occorrenza di parole. È la modellazione del linguaggio e la tecnica di apprendimento delle caratteristiche. L'incorporamento di parole è un modo per eseguire la mappatura utilizzando una rete neurale. Sono disponibili vari modelli di word embedding come word2vec (Google), Glove (Stanford) e fast (Facebook).
Word Embedding è anche chiamato modello semantico distribuito o spazio vettoriale semantico o rappresentato distribuito o modello di spazio vettoriale. Mentre leggi questi nomi, ti imbatti nella parola semantica che significa classificare parole simili insieme. Ad esempio frutta come mela, mango, banana dovrebbe essere posizionata 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.
In questo tutorial imparerai
- Cos'è l'incorporamento di parole?
- Dove viene utilizzato l'incorporamento di parole?
- Cos'è word2vec?
- Cosa fa word2vec?
- Perché Word2vec?
- Architettura Word2vec
- Borsa continua di parole.
- Modello Skip-Gram
- La relazione tra Word2vec e NLTK
- Attivatori e Word2Vec
- Cos'è Gensim?
- Implementazione del codice di word2vec utilizzando Gensim
Dove viene utilizzato l'incorporamento di parole?
L'incorporamento di parole aiuta nella generazione di funzionalità, nel raggruppamento di documenti, nella classificazione del testo e nelle attività di elaborazione del linguaggio naturale. Cerchiamo di elencarli e discutere di ciascuna di queste applicazioni.
- Calcola parole simili: l' incorporamento di parole viene utilizzato per suggerire parole simili alla parola sottoposta al modello di previsione. Insieme a ciò suggerisce anche parole dissimili, così come le parole più comuni.
- Crea un gruppo di parole correlate: è usato 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 array di vettori che vengono inviati 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 una forma addestrabile dalla macchina. Ulteriori le sue caratteristiche di costruzione di aiuto semantico nella classificazione basata su testo.
- Il clustering dei documenti è un'altra applicazione in cui l'incorporamento di parole è ampiamente utilizzato
- Elaborazione del linguaggio naturale: ci sono molte applicazioni in cui l'incorporamento di parole è utile e vince sulle fasi di estrazione delle funzionalità come parti del tagging vocale, analisi sentimentale e analisi sintattica.
Ora abbiamo una certa conoscenza del word embedding. Viene anche fatta luce su diversi modelli per implementare l'incorporamento di parole. L'intero tutorial è incentrato su uno dei modelli (word2vec).
Cos'è word2vec?
Word2vec è la tecnica / modello per produrre word embedding per una migliore rappresentazione delle parole. Cattura un gran numero di relazioni sintattiche e semantiche precise. È una rete neurale a due strati superficiale. Prima di andare oltre, vedere la differenza tra rete neurale superficiale e profonda:
La rete neurale superficiale è costituita dall'unico strato nascosto tra input e output, mentre la rete neurale profonda contiene più strati nascosti tra input e output. L'input è soggetto ai nodi mentre il livello nascosto, così come il livello di output, contiene neuroni.
Figura: Apprendimento superficiale e apprendimento profondo
word2vec è una rete a due livelli in cui è presente un input e un output nascosto.
Word2vec è stato sviluppato da un gruppo di ricercatori guidato da Tomas Mikolov di Google. Word2vec è migliore e più efficiente del modello di analisi semantica latente.
Cosa fa word2vec?
Word2vec rappresenta le parole nella rappresentazione dello spazio vettoriale. Le parole sono rappresentate sotto forma di vettori e il posizionamento è fatto in modo tale che parole di significato simile appaiano insieme e parole dissimili si trovano lontano. Questo è anche definito come una relazione semantica. Le reti neurali non capiscono il testo, invece capiscono solo i numeri. Word Embedding fornisce un modo per convertire il testo in un vettore numerico.
Word2vec ricostruisce il contesto linguistico delle parole. Prima di andare oltre, capiamo, cos'è il contesto linguistico? Nello scenario di vita generale, quando parliamo o scriviamo per comunicare, altre persone cercano di capire qual è l'obiettivo della frase. Ad esempio, "Qual è la temperatura dell'India", qui il contesto è l'utente vuole conoscere la "temperatura dell'India" che è il contesto. In breve, l'obiettivo principale di una frase è il contesto. La parola o la frase che circonda la lingua parlata o scritta (divulgazione) aiuta a determinare il significato del contesto. Word2vec apprende la rappresentazione vettoriale delle parole attraverso i contesti.
Perché Word2vec?
Prima dell'incorporamento di Word
È importante sapere quale approccio viene utilizzato prima dell'incorporamento di parole e quali sono i suoi demeriti, quindi passeremo all'argomento di come i demeriti vengono superati dall'incorporamento di parole utilizzando l'approccio word2vec. Infine, sposteremo il funzionamento di word2vec perché è importante capire che funziona.
Approccio per l'analisi semantica latente
Questo è l'approccio utilizzato prima dell'incorporamento delle parole. Ha usato 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 compare nel dizionario, viene contata, altrimenti no. Per saperne di più, vedere il programma seguente.
from sklearn.feature_extraction.text import CountVectorizervectorizer=CountVectorizer()data_corpus=["guru99 is the best sitefor online tutorials. I love to visit guru99."]vocabulary=vectorizer.fit(data_corpus)X= vectorizer.transform(data_corpus)print(X.toarray())print(vocabulary.get_feature_names())
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
- CountVectorizer è il modulo che viene utilizzato per memorizzare il vocabolario in base all'adattamento delle parole al suo interno. Questo viene importato da sklearn
- Crea l'oggetto usando la classe CountVectorizer.
- Scrivere i dati nell'elenco che deve essere inserito in CountVectorizer.
- I dati si adattano all'oggetto creato dalla classe CountVectorizer.
- Applica un approccio bag of word per contare le parole nei dati usando 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 ogni token nella frase o nell'elenco fornito nella riga 3.
- Questo mostrerà le caratteristiche che fanno parte del vocabolario quando è adattato utilizzando i dati nella riga 4.
Nell'approccio semantico latente, la riga rappresenta parole uniche mentre la colonna rappresenta il numero di volte in cui quella parola appare nel documento. È una rappresentazione di parole nella forma della matrice del documento. Frequenza termine-frequenza inversa del documento (TFIDF) viene utilizzata per contare la frequenza delle parole nel documento che è 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, questo è cattivo = cattivo è questo.
- 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". Tratterebbe entrambi in modo ortogonale, il che li rende indipendenti, ma in realtà sono correlati 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. Ad esempio, prendiamo la parola " Ama il calcio".
Vogliamo calcolare la word2vec per la parola: ama.
Supponiamo
loves = Vin. P(Vout / Vin) is calculatedwhere,Vin is the input word.P is the probability of likelihood.Vout is the output word.
La parola ama si muove su ogni parola del corpus. La relazione sintattica e semantica tra le parole è codificata. Questo aiuta a trovare parole simili e analogie.
Vengono calcolate tutte le caratteristiche casuali della parola amori . Queste caratteristiche vengono modificate o aggiornate per quanto riguarda le parole vicine o di contesto con l'aiuto di un metodo di propagazione all'indietro.
Un altro modo di imparare è che se il contesto di due parole è simile o due parole hanno caratteristiche simili, allora tali parole sono correlate.
Architettura Word2vec
Ci sono due architetture usate da word2vec
- Sacchetto di parole continuo (CBOW)
- saltare il grammo
Prima di andare oltre, 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 per addestrare il modello sono necessari obiettivi / etichette. Skip-gram e CBOW convertono la rappresentazione non supervisionata in una forma supervisionata per l'addestramento del modello.
In CBOW, la parola corrente viene prevista utilizzando la finestra delle finestre contestuali circostanti. Ad esempio, se a w i-1 , w i-2 , w i + 1 , w i + 2 vengono fornite parole o contesto, questo modello fornirà w i
Skip-Gram esegue l'opposto di CBOW, il che implica che predice la sequenza o il contesto dati dalla parola. Puoi invertire l'esempio per capirlo. Se w i viene fornito, questo predice il contesto oppure w i-1 , w i-2 , w i + 1 , w i + 2.
Word2vec offre un'opzione per scegliere tra CBOW (sacchetto di parole continuo) e skim-gram. Tali parametri vengono forniti durante l'addestramento del modello. Si può avere la possibilità di utilizzare un campionamento negativo o un livello softmax gerarchico.
Borsa continua di parole.
Tracciamo un semplice diagramma per comprendere la borsa continua dell'architettura delle parole.
Figura borsa continua di Word Architecture
Calcoliamo matematicamente le equazioni. Supponiamo che V sia la dimensione del vocabolario e N sia la dimensione del livello nascosto. L'input è definito come {x i-1 , x i-2, x i + 1, x i + 2 }. Si ottiene 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 = xi t W
dove xi t ∧ W sono rispettivamente il vettore di input e la matrice del peso,
Per calcolare la corrispondenza tra il contesto e la parola successiva, fare riferimento all'equazione seguente
u = rappresentazione prevista * h
dove la rappresentazione prevista è ottenuta model∧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 tracciamo il diagramma.
Modello con salto di figura
Si può trattarlo come il contrario del modello di bag of word continuo in cui l'input è la parola e il modello fornisce il contesto o la sequenza. Possiamo anche concludere che l'obiettivo viene inviato al livello di input e di output viene replicato più volte per accogliere il numero scelto di parole di contesto. Il vettore di errore di tutto il livello di output viene sommato per regolare i pesi tramite un metodo di backpropagation.
Quale modello scegliere?
CBOW è molte volte più veloce del grammo e fornisce una frequenza migliore per le parole frequenti, mentre il salto del grammo richiede una piccola quantità di dati di allenamento 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. Si possono eseguire diverse operazioni come parti del discorso, lemmatizzazione, stemming, rimozione di parole di arresto, rimozione di parole rare o meno utilizzate. Aiuta a pulire il testo e aiuta a preparare le caratteristiche delle parole efficaci. In altro modo, word2vec viene utilizzato per la corrispondenza semantica (elementi strettamente correlati tra loro) e sintattica (sequenza). Usando word2vec, si possono trovare parole simili, parole dissimili, riduzione dimensionale e molti altri. Un'altra caratteristica importante di word2vec è convertire la rappresentazione dimensionale superiore del testo in vettori dimensionali inferiori.
Dove usare NLTK e Word2vec?
Se si devono svolgere alcune attività generiche come menzionato sopra come la tokenizzazione, la codifica POS e l'analisi, è necessario utilizzare NLTK mentre per prevedere le parole in base a un contesto, modellazione di argomenti o somiglianza di documenti è necessario utilizzare Word2vec.
Relazione di NLTK e Word2vec con l'aiuto del codice
NLTK e Word2vec possono essere usati insieme per trovare una rappresentazione di parole simili o una corrispondenza sintattica. Il toolkit NLTK può essere utilizzato per caricare molti pacchetti forniti con NLTK e il modello può essere creato utilizzando word2vec. Può quindi essere testato sulle parole in tempo reale. Vediamo la combinazione di entrambi nel codice seguente. Prima di procedere ulteriormente, dai un'occhiata ai corpora forniti da NLTK. Puoi scaricare usando il comando
nltk(nltk.download('all'))
Figure Corpora scaricata utilizzando NLTK
Si prega di vedere lo screenshot per il codice.
import nltkimport gensimfrom nltk.corpus import abcmodel= 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 del codice
- Viene importata la libreria nltk da cui è possibile scaricare l'abc corpus che utilizzeremo nel passaggio successivo.
- Gensim viene importato. Se Gensim non è installato, installalo utilizzando il comando "pip3 install gensim". Si prega di vedere lo screenshot qui sotto.
Figura Installazione di Gensim utilizzando PIP
- importa il corpus abc che è stato scaricato usando 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 è testato su un campione di word science poiché questi file sono correlati alla scienza.
- Qui la parola simile di "scienza" è prevista dal modello.
Attivatori e Word2Vec
La funzione di attivazione del neurone definisce l'output di quel neurone dato un insieme di input. Biologicamente ispirato da un'attività nel nostro cervello in cui diversi neuroni vengono attivati utilizzando stimoli diversi. Comprendiamo la funzione di attivazione attraverso il diagramma seguente.
Figura Comprensione della funzione di attivazione
Qui x1, x2,… x4 è il nodo della rete neurale.
w1, w2, w3 è il peso del nodo,
∑ è la somma di tutto il peso e il valore del nodo che funzionano come funzione di attivazione.
Perché la funzione di attivazione?
Se non viene utilizzata alcuna funzione di attivazione, l'uscita sarebbe lineare ma la funzionalità della funzione lineare è limitata. Per ottenere funzionalità complesse come il rilevamento di oggetti, la classificazione delle immagini, la digitazione di testo utilizzando la voce e molti altri output non lineari, è necessaria la funzione di attivazione.
Come viene calcolato il livello di attivazione nel word embedding (word2vec)
Softmax Layer (funzione esponenziale normalizzata) è la funzione del livello di output che attiva o attiva ogni nodo. Un altro approccio utilizzato è il softmax gerarchico dove la complessità è calcolata da O (log 2 V) dove 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à (Hierarchical softmax), guarda l'esempio seguente:
Figura 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 abbiamo avuto la dimensione del vocabolario di 8, sono necessari solo tre calcoli. Quindi consente la scomposizione, il calcolo della probabilità di una parola ( amore ).
Quali altre opzioni sono disponibili oltre a Softmax gerarchico?
Se si parla in senso generale per l'inclusione di parole, le opzioni disponibili sono Softmax differenziato, CNN-Softmax, Campionamento importanza, Campionamento importanza adattiva, Stime contrasto rumore, Campionamento negativo, Auto-normalizzazione e Normalizzazione rara.
Parlando specificamente di Word2vec, abbiamo a disposizione un campionamento negativo.
Il campionamento negativo è un modo per campionare i dati di addestramento. È un po 'come la discesa del gradiente stocastico, ma con qualche differenza. Il campionamento negativo cerca solo esempi di formazione negativi. Si basa sulla stima del contrasto del rumore e campiona in modo casuale le parole, 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 l'uno all'altro.
Quale conclusione si può trarre?
Gli attivatori attivano i neuroni proprio come i nostri neuroni vengono attivati utilizzando gli stimoli esterni. Il livello Softmax è una delle funzioni del livello di output che attiva i neuroni in caso di incorporamento di parole. In word2vec abbiamo opzioni come softmax gerarchico e campionamento negativo. Utilizzando gli attivatori, è possibile convertire la funzione lineare in una funzione non lineare e un algoritmo di apprendimento automatico complesso può essere implementato utilizzando tale.
Cos'è Gensim?
Gensim è un toolkit di modellazione di argomenti implementato in python. La modellazione di argomenti sta scoprendo la struttura nascosta nel corpo del testo. Word2vec è importato dal toolkit Gensim. Si noti che Gensim non solo fornisce un'implementazione di word2vec ma anche di Doc2vec e FastText, ma questo tutorial è tutto su word2vec, quindi ci atterremo all'argomento corrente.
Implementazione di word2vec utilizzando Gensim
Finora abbiamo discusso di cosa sia word2vec, le sue diverse architetture, perché c'è un passaggio da un sacco di parole a word2vec, la relazione tra word2vec e NLTK con codice live e funzioni di attivazione. In questa sezione, implementeremo word2vec usando Gensim
Passaggio 1) Raccolta dati
Il primo passo per implementare qualsiasi modello di apprendimento automatico o implementare l'elaborazione del linguaggio naturale è la raccolta dei dati
Si prega di osservare i dati per costruire un chatbot intelligente.
[{"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.
- Un pattern è una domanda che gli utenti chiederanno al bot
- Le risposte sono la risposta che il chatbot fornirà alla domanda / modello corrispondente.
Passaggio 2) Pre-elaborazione dei dati.
È molto importante elaborare i dati grezzi. Se i dati puliti vengono inviati alla macchina, il modello risponderà in modo più accurato e apprenderà i dati in modo più efficiente.
Questo passaggio comporta la rimozione di parole di arresto, parole con radice, 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 jsonjson_file =’intents.json'with open('intents.json','r') as f:data = json.load(f)
Spiegazione di CODE.
- Poiché i dati sono in formato json, viene importato json
- Il file è memorizzato nella variabile
- Il file è aperto e caricato nella variabile di dati
Ora i dati vengono importati ed è il momento di convertire i dati in frame di dati. Si prega di vedere il codice sottostante per vedere il passaggio successivo
import pandas as pddf = 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 in precedenza.
2. Convertirà l'elenco in pattern di colonna in stringa.
from nltk.corpus import stopwordsfrom textblob import Wordstop = stopwords.words('english')df['patterns'] = df['patterns'].apply(lambda x:' '.join(x.lower() for x in x.split()))df['patterns't']= df['patterns''].apply(lambda x: ' '.join(x for x in x.split() if x not in string.punctuation)df['patterns']= df['patterns'].str.replace('[^\w\s]','')df['patterns']= df['patterns'].apply(lambda x: ' '.join(x for x in x.split() if not x.isdigit()))df['patterns'] = df['patterns'].apply(lambda x:' '.join(x for x in x.split() if not x in stop))df['patterns'] = df['patterns'].apply(lambda x: " ".join([Word(word).lemmatize() for word in x.split()]))
Spiegazione del codice
1. Le parole di arresto in inglese vengono importate utilizzando il modulo delle parole di arresto dal toolkit nltk
2. Tutte le parole del testo vengono convertite in minuscolo utilizzando per condizione e funzione lambda. La funzione Lambda è una funzione anonima.
3. Tutte le righe del testo nel data frame vengono controllate per la punteggiatura delle stringhe e queste vengono filtrate.
4. I caratteri come numeri o punti vengono rimossi utilizzando un'espressione regolare.
5. Le cifre vengono rimosse dal testo.
6. Le stop words vengono rimosse in questa fase.
7. Le parole vengono ora filtrate e la forma diversa della stessa parola viene rimossa utilizzando la lemmatizzazione. Con questi, abbiamo terminato la preelaborazione dei dati.
Produzione:
, patterns, responses, tag0,hi one talk hello hi available,"['Hello, thanks for contacting us', 'Good to see you here', ' Hi there, how may I assist you?']",welcome1,bye see later goodbye come back soon,"['See you later, thanks for visiting', 'have a great day ahead', 'Wish you Come back again soon.']",goodbye2,thanks helping thank guidance thats helpful kind,"['Happy to help!', 'Any time!', 'My pleasure', 'It is my duty to help you']",thankful3,hour open tell opening time open timing please,"[""We're open every day 8am-7pm"", 'Our office hours are 8am-7pm every day', 'We open office at 8 am and close at 7 pm']",hoursopening4,pay using credit card pay using mastercard pay using cash,"['We accept VISA, Mastercard and credit card', 'We accept credit card, debit cards and cash. Please don’t worry']",payments
Passaggio 3) Creazione di reti neurali utilizzando word2vec
Ora è il momento di costruire un modello usando il modulo Gensim word2vec. Dobbiamo importare word2vec da Gensim. Facciamolo, quindi costruiremo e nella fase finale controlleremo il modello su dati in tempo reale.
from gensim.models import Word2Vec
Ora possiamo costruire con successo il modello usando 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 data frame 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)
Spiegazioni del codice
1. Creato l'elenco_grande in cui viene aggiunto l'elenco interno. Questo è il formato che viene fornito al modello Word2Vec.
2. Viene implementato il ciclo e ogni voce della colonna dei modelli del frame di dati viene iterata.
3. Ogni elemento dei pattern di colonna viene suddiviso e memorizzato nell'elenco interno li
4. L'elenco interno viene aggiunto all'elenco esterno.
5. Questo elenco viene fornito al modello Word2Vec. Cerchiamo di capire alcuni dei parametri forniti qui
Min_count: ignorerà tutte le parole con una frequenza totale inferiore a questa.
Dimensione: indica la dimensionalità dei vettori di parole.
Lavoratori: questi sono i fili 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.
Sg: È un algoritmo di addestramento e 1 per lo skip-gram e 0 per un sacco di parole continuo. Ne abbiamo discusso in dettaglio sopra.
Hs: Se questo è 1, stiamo usando il softmax gerarchico per l'allenamento e se 0 viene utilizzato il campionamento negativo.
Alpha: tasso di apprendimento iniziale
Mostriamo di seguito il codice finale
#list of libraries used by the codeimport stringfrom gensim.models import Word2Vecimport loggingfrom nltk.corpus import stopwordsfrom textblob import Wordimport jsonimport pandas as pd#data in json formatjson_file = 'intents.json'with open('intents.json','r') as f:data = json.load(f)#displaying the list of stopwordsstop = stopwords.words('english')#dataframedf = pd.DataFrame(data)df['patterns'] = df['patterns'].apply(', '.join)# print(df['patterns'])#print(df['patterns'])#cleaning the data using the NLP approachprint(df)df['patterns'] = df['patterns'].apply(lambda x:' '.join(x.lower() for x in x.split()))df['patterns']= df['patterns'].apply(lambda x: ' '.join(x for x in x.split() if x not in string.punctuation))df['patterns']= df['patterns'].str.replace('[^\w\s]','')df['patterns']= df['patterns'].apply(lambda x: ' '.join(x for x in x.split() if not x.isdigit()))df['patterns'] = df['patterns'].apply(lambda x:' '.join(x for x in x.split() if not x in stop))df['patterns'] = df['patterns'].apply(lambda x: " ".join([Word(word).lemmatize() for word in x.split()]))#taking the outer listbigger_list=[]for i in df['patterns']:li = list(i.split(" "))bigger_list.append(li)#structure of data to be taken by the model.word2vecprint("Data format for the overall list:",bigger_list)#custom data is fed to machine for further processingmodel = Word2Vec(bigger_list, min_count=1,size=300,workers=4)#print(model)
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
Useremo questo modello per eseguire test in tempo reale come parole simili, parole dissimili e parole più comuni.
Passaggio 5) Caricamento del modello ed esecuzione di test in tempo reale
Il modello viene caricato utilizzando il codice seguente
model = Word2Vec.load('model.bin')
Se vuoi stampare il vocabolario da esso è fatto usando il comando seguente
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
Cerchiamo di implementare 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 dalle parole fornite
dissimlar_words = model.doesnt_match('See you later, thanks for visiting'.split())print(dissimlar_words)
Abbiamo fornito le parole "Ci vediamo più tardi, grazie per la visita". Questo stamperà le parole più dissimili da queste parole. Eseguiamo questo codice e troviamo il risultato
Il risultato dopo l'esecuzione del codice precedente.
Thanks
Passaggio 8) Trovare la somiglianza tra due parole
Questo indicherà il risultato in probabilità di somiglianza tra due parole. Si prega di vedere il codice sottostante 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 precedente è il seguente
0.13706
Puoi trovare ulteriori parole simili eseguendo il codice seguente
similar = model.similar_by_word('kind')print(similar)
Uscita del codice precedente
[('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 di parole che consente a parole con significato simile di essere comprese da algoritmi di apprendimento automatico
- L'incorporamento di parole viene utilizzato per calcolare parole simili, creare un gruppo di parole correlate, funzionalità per la classificazione del testo, raggruppamento di documenti, elaborazione del linguaggio naturale
- Word2vec è un modello di rete neurale a due strati superficiale per produrre word embedding 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 è fatto in modo tale che parole di significato simile appaiano insieme e parole dissimili si trovano lontano
- Word2vec ha utilizzato 2 architetture Continuous Bag of Words (CBOW) e salta grammo
- CBOW è molte volte più veloce del grammo e fornisce una frequenza migliore per le parole frequenti, mentre il salto del grammo richiede una piccola quantità di dati di allenamento e rappresenta anche parole o frasi rare.
- NLTK e word2vec possono essere usati 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 ogni nodo. Word2vec ha anche il campionamento negativo disponibile
- Gensim è un toolkit di modellazione di argomenti implementato in python