Incorporação de palavras e modelo Word2Vec com exemplo
O que é incorporação de palavras?
Incorporação de palavras é um tipo de representação de palavras que permite que algoritmos de aprendizado de máquina entendam palavras com significados semelhantes. É uma técnica de modelagem de linguagem e aprendizado de recursos para mapear palavras em vetores de números reais usando redes neurais, modelos probabilísticos ou redução de dimensão na matriz de coocorrência de palavras. Alguns modelos de incorporação de palavras são Word2vec (Google), Glove (Stanford) e mais rápido (Facebook).
Word Embedding também é chamado de modelo semântico distribuído ou espaço vetorial semântico representado distribuído ou modelo de espaço vetorial. Ao ler esses nomes, você se depara com a palavra semântica, que significa categorizar palavras semelhantes juntas. Por exemplo, frutas como maçã, manga, banana devem ser colocadas próximas, enquanto os livros ficarão distantes dessas palavras. Num sentido mais amplo, a incorporação de palavras criará o vetor de frutas que será colocado longe da representação vetorial dos livros.
Onde a incorporação de palavras é usada?
A incorporação de palavras ajuda na geração de recursos, agrupamento de documentos, classificação de texto e tarefas de processamento de linguagem natural. Vamos listá-los e discutir cada uma dessas aplicações.
- Calcule palavras semelhantes: A incorporação de palavras é usada para sugerir palavras semelhantes à palavra que está sendo submetida ao modelo de predição. Junto com isso também sugere palavras diferentes, bem como palavras mais comuns.
- Crie um grupo de palavras relacionadas: É usado para agrupamento semântico que agrupará coisas de características semelhantes e diferentes distantes.
- Recurso para classificação de texto: O texto é mapeado em matrizes de vetores que são alimentadas no modelo para treinamento e também para previsão. Modelos classificadores baseados em texto não podem ser treinados na string, portanto, isso converterá o texto em um formato treinável por máquina. Além disso, suas características de construção de ajuda semântica na classificação baseada em texto.
- Agrupamento de documentos: é outro aplicativo onde Word Embedding Word2vec é amplamente utilizado
- Processamento de linguagem natural: Existem muitas aplicações em que a incorporação de palavras é útil e vence as fases de extração de recursos, como marcação de classes gramaticais, análise sentimental e análise sintática. Agora temos algum conhecimento sobre incorporação de palavras. Alguma luz também é lançada sobre diferentes modelos para implementar a incorporação de palavras. Todo este tutorial de incorporação de palavras está focado em um dos modelos (Word2vec).
O que é Word2vec?
Word2vec é uma técnica/modelo para produzir incorporação de palavras para melhor representação de palavras. É um método de processamento de linguagem natural que captura um grande número de relações sintáticas e semânticas precisas entre palavras. É uma rede neural superficial de duas camadas que pode detectar palavras sinônimas e sugerir palavras adicionais para frases parciais, uma vez treinada.
Antes de prosseguir neste tutorial do Word2vec, veja a diferença entre redes neurais rasas e profundas, conforme mostrado no diagrama de exemplo de incorporação do Word abaixo:
A rede neural superficial consiste em apenas uma camada oculta entre entrada e saída, enquanto a rede neural profunda contém várias camadas ocultas entre entrada e saída. A entrada está sujeita a nós, enquanto a camada oculta, assim como a camada de saída, contém neurônios.

Word2vec é uma rede de duas camadas onde há entrada, uma camada oculta e saída.
Word2vec foi desenvolvido por um grupo de pesquisadores liderado por Tomas Mikolov do Google. Word2vec é melhor e mais eficiente que o modelo de análise semântica latente.
Por que Word2vec?
Word2vec representa palavras na representação do espaço vetorial. As palavras são representadas na forma de vetores e o posicionamento é feito de forma que palavras com significados semelhantes apareçam juntas e palavras diferentes fiquem distantes. Isso também é denominado relacionamento semântico. As redes neurais não entendem texto, mas apenas números. A incorporação de palavras fornece uma maneira de converter texto em um vetor numérico.
Word2vec reconstrói o contexto linguístico das palavras. Antes de prosseguirmos, vamos entender o que é contexto linguístico? No cenário geral da vida, quando falamos ou escrevemos para nos comunicar, outras pessoas tentam descobrir qual é o objetivo da frase. Por exemplo, “Qual é a temperatura da Índia”, aqui o contexto é que o usuário deseja saber “temperatura da Índia”, que é o contexto. Resumindo, o objetivo principal de uma frase é o contexto. Palavra ou frase em torno da linguagem falada ou escrita (divulgação) ajuda a determinar o significado do contexto. Word2vec aprende a representação vetorial de palavras por meio dos contextos.
O que o Word2vec faz?
Antes da incorporação de palavras
É importante saber qual abordagem é usada antes da incorporação de palavras e quais são seus deméritos e então passaremos ao tópico de como os deméritos são superados pela incorporação de palavras usando a abordagem Word2vec. Por fim, veremos como funciona o Word2vec porque é importante entender como está funcionando.
Abordagem para Análise Semântica Latente
Esta é a abordagem usada antes dos embeddings de palavras. Utilizou o conceito de Saco de palavras onde as palavras são representadas na forma de vetores codificados. É uma representação vetorial esparsa onde a dimensão é igual ao tamanho do vocabulário. Se a palavra ocorrer no dicionário, ela será contada, caso contrário, não. Para entender mais, consulte o programa abaixo.
Exemplo 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())
Saída:
[[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']
Explicação do código
- CountVectorizer é o módulo usado para armazenar o vocabulário com base no ajuste das palavras nele. Isso é importado do sklearn.
- Faça o objeto usando a classe CountVectorizer.
- Escreva os dados da lista que serão ajustados no CountVectorizer.
- Os dados cabem no objeto criado a partir da classe CountVectorizer.
- Aplique uma abordagem de saco de palavras para contar palavras nos dados usando vocabulário. Se a palavra ou token não estiver disponível no vocabulário, essa posição do índice será definida como zero.
- A variável na linha 5 que é x é convertida em um array (método disponível para x). Isto fornecerá a contagem de cada token na frase ou lista fornecida na Linha 3.
- Isso mostrará os recursos que fazem parte do vocabulário quando ele é ajustado usando os dados da Linha 4.
Na abordagem Semântica Latente, a linha representa palavras únicas, enquanto a coluna representa o número de vezes que essa palavra aparece no documento. É uma representação de palavras na forma de matriz do documento. A frequência inversa do documento Term-Frequency (TFIDF) é usada para contar a frequência das palavras no documento, que é a frequência do termo no documento/frequência do termo em todo o corpus.
Deficiência do método Bag of Words
- Ignora a ordem da palavra, por exemplo, isso é ruim = ruim é isso.
- Ele ignora o contexto das palavras. Suponha que eu escreva a frase “Ele adorava livros. A educação se encontra melhor nos livros”. Criaria dois vetores, um para “Ele adorava livros” e outro para “A educação é melhor encontrada nos livros”. Trataria ambos de forma ortogonal, o que os torna independentes, mas na realidade, eles estão relacionados entre si
Para superar essas limitações, a incorporação de palavras foi desenvolvida e o Word2vec é uma abordagem para implementá-la.
Como funciona o Word2vec?
Word2vec aprende palavras prevendo o contexto circundante. Por exemplo, tomemos a palavra “Ele ama Futebol."
Queremos calcular o Word2vec para a palavra: amores.
Suponha
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 move-se sobre cada palavra do corpus. A relação sintática e semântica entre as palavras é codificada. Isso ajuda a encontrar palavras semelhantes e análogas.
Todas as características aleatórias da palavra ama é calculado. Esses recursos são alterados ou atualizados em relação a palavras vizinhas ou de contexto com a ajuda de um Retropropagação método.
Outra forma de aprender é que se o contexto de duas palavras for semelhante ou se duas palavras tiverem características semelhantes, então essas palavras estão relacionadas.
Word2vec Archiarquitetura
Existem duas arquiteturas usadas pelo Word2vec:
- Saco Contínuo de Palavras (CBOW)
- Pular grama
Antes de prosseguir neste tutorial do Word2vec, vamos discutir por que essas arquiteturas ou modelos são importantes do ponto de vista da representação de palavras. O aprendizado da representação de palavras não é essencialmente supervisionado, mas são necessários alvos/rótulos para treinar o modelo. Skip-gram e CBOW convertem representação não supervisionada em forma supervisionada para treinamento de modelo.
No CBOW, a palavra atual é prevista usando a janela das janelas de contexto circundantes. Por exemplo, se wi-1,wi-2,wi + 1,wi + 2recebem palavras ou contexto, este modelo fornecerá wi
Skip-Gram tem desempenho oposto ao CBOW, o que implica que ele prevê a sequência ou contexto fornecido a partir da palavra. Você pode inverter o exemplo para entendê-lo. Se nósi é dado, isso irá prever o contexto ou wi-1,wi-2,wi + 1,weu+2.
Word2vec oferece a opção de escolher entre CBOW (saco de palavras contínuo) e skim-gram. Tais parâmetros são fornecidos durante o treinamento do modelo. Pode-se ter a opção de usar amostragem negativa ou camada hierárquica softmax.
Saco Contínuo de Palavras
Vamos desenhar um diagrama de exemplo simples do Word2vec para entender o conjunto contínuo de arquitetura de palavras.

Vamos calcular as equações matematicamente. Suponha que V seja o tamanho do vocabulário e N seja o tamanho da camada oculta. A entrada é definida como { xi-1, xeu-2, xeu+1, xi + 2}. Obtemos a matriz de pesos multiplicando V * N. Outra matriz é obtida multiplicando o vetor de entrada pela matriz de pesos. Isso também pode ser entendido pela seguinte equação.
h=xitW
onde xit? W são o vetor de entrada e a matriz de pesos, respectivamente,
Para calcular a correspondência entre o contexto e a próxima palavra, consulte a equação abaixo
u=representação prevista*h
onde a representação prevista é obtida modelo?h na equação acima.
Modelo Skip-Gram
A abordagem Skip-Gram é usada para prever uma frase dada uma palavra de entrada. Para entendê-lo melhor, vamos desenhar o diagrama conforme mostrado no exemplo Word2vec abaixo.

Pode-se tratá-lo como o inverso do modelo Contínuo de saco de palavras, onde a entrada é a palavra e o modelo fornece o contexto ou a sequência. Também podemos concluir que o alvo é alimentado na camada de entrada e a camada de saída é replicada várias vezes para acomodar o número escolhido de palavras de contexto. O vetor de erro de toda a camada de saída é somado para ajustar os pesos por meio de um método de retropropagação.
Qual modelo escolher?
O CBOW é várias vezes mais rápido que o skip gram e fornece uma frequência melhor para palavras frequentes, enquanto o skip gram precisa de uma pequena quantidade de dados de treinamento e representa até mesmo palavras ou frases raras.
A relação entre Word2vec e NLTK
NLTK é um kit de ferramentas de linguagem natural. É usado para pré-processamento do texto. Pode-se realizar diferentes operações, como marcação de classes gramaticais, lematização, lematização, remoção de palavras irrelevantes, remoção de palavras raras ou menos usadas. Ajuda na limpeza do texto e também na preparação dos traços a partir das palavras efetivas. Por outro lado, Word2vec é usado para correspondência semântica (itens intimamente relacionados) e sintática (sequência). Usando o Word2vec, é possível encontrar palavras semelhantes, palavras diferentes, redução dimensional e muitas outras. Outra característica importante do Word2vec é converter a representação de maior dimensão do texto em menor dimensão de vetores.
Onde usar NLTK e Word2vec?
Se for necessário realizar algumas tarefas de uso geral mencionadas acima, como tokenização, marcação e análise de POS, deve-se usar NLTK, enquanto para prever palavras de acordo com algum contexto, modelagem de tópico ou similaridade de documento, deve-se usar Word2vec.
Relação de NLTK e Word2vec com ajuda de código
NLTK e Word2vec podem ser usados juntos para encontrar representação de palavras semelhantes ou correspondência sintática. O kit de ferramentas NLTK pode ser usado para carregar muitos pacotes que vêm com NLTK e o modelo pode ser criado usando Word2vec. Ele pode então ser testado nas palavras em tempo real. Vamos ver a combinação de ambos no código a seguir. Antes de prosseguir com o processamento, dê uma olhada nos corpora fornecidos pelo NLTK. Você pode baixar usando o comando
nltk(nltk.download('all'))

Por favor, veja a captura de tela para o código.
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)
Saída:
[('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)]
Explicação do Código
- A biblioteca nltk é importada, de onde você pode baixar o corpus abc que usaremos na próxima etapa.
- Gensim é importado. Se o Gensim Word2vec não estiver instalado, instale-o usando o comando “pip3 install gensim”. Por favor, veja a imagem abaixo.

- importe o corpus abc que foi baixado usando nltk.download('abc').
- Passe os arquivos para o modelo Word2vec que é importado usando Gensim como frases.
- O vocabulário é armazenado na forma de variável.
- O modelo é testado em exemplos de ciência de palavras, pois esses arquivos estão relacionados à ciência.
- Aqui a palavra semelhante “ciência” é prevista pelo modelo.
Ativadores e Word2Vec
A função de ativação do neurônio define a saída desse neurônio, dado um conjunto de entradas. Biologicamente inspirado por uma atividade em nossos cérebros onde diferentes neurônios são ativados usando diferentes estímulos. Vamos entender a função de ativação por meio do diagrama a seguir.

Aqui x1,x2,..x4 é o nó da rede neural.
w1, w2, w3 é o peso do nó,
? é a soma de todos os pesos e valores dos nós que funcionam como função de ativação.
Por que função de ativação?
Se nenhuma função de ativação for usada, a saída será linear, mas a funcionalidade da função linear será limitada. Para obter funcionalidades complexas, como detecção de objetos, classificação de imagens, digitação de texto usando voz e muitas outras saídas não lineares, é necessário o que é obtido usando a função de ativação.
Como a camada de ativação é calculada na incorporação de palavras (Word2vec)
Camada Softmax (função exponencial normalizada) é a função da camada de saída que ativa ou dispara cada nó. Outra abordagem utilizada é o softmax hierárquico onde a complexidade é calculada por O(log2V) onde o softmax é O(V) onde V é o tamanho do vocabulário. A diferença entre eles é a redução da complexidade na camada hierárquica softmax. Para entender sua funcionalidade (softmax hierárquico), observe o exemplo de incorporação do Word abaixo:

Suponha que queiramos calcular a probabilidade de observar a palavra gosta, dado um determinado contexto. O fluxo da raiz para o nó folha será o primeiro movimento para o nó 2 e depois para o nó 5. Portanto, se tivermos o tamanho do vocabulário de 8, apenas três cálculos serão necessários. Assim permite a decomposição, cálculo da probabilidade de uma palavra (gosta,).
Que outras opções estão disponíveis além do Softmax hierárquico?
Se falarmos em um sentido geral para incorporação de palavras, as opções disponíveis são Softmax Diferenciado, CNN-Softmax, Amostragem de Importância, Amostragem de Importância Adaptativa, Estimativas Contrastivas de Ruído, Amostragem Negativa, Auto-Normalização e Normalização infrequente.
Falando especificamente sobre Word2vec, temos amostragem negativa disponível.
A amostragem negativa é uma forma de amostrar os dados de treinamento. É um pouco como a descida gradiente estocástica, mas com algumas diferenças. A amostragem negativa procura apenas exemplos de treinamento negativos. É baseado na estimativa contrastiva de ruído e em amostras aleatórias de palavras, não no contexto. É um método de treinamento rápido e escolhe o contexto aleatoriamente. Se a palavra prevista aparecer no contexto escolhido aleatoriamente, ambos os vetores estarão próximos um do outro.
Que conclusão pode ser tirada?
Os ativadores estão disparando os neurônios da mesma forma que nossos neurônios são disparados usando estímulos externos. A camada Softmax é uma das funções da camada de saída que aciona os neurônios em caso de incorporação de palavras. No Word2vec temos opções como softmax hierárquico e amostragem negativa. Usando ativadores, pode-se converter a função linear em função não linear, e um algoritmo complexo de aprendizado de máquina pode ser implementado usando-os.
O que é Gensim?
Gensim é um kit de ferramentas de modelagem de tópicos e processamento de linguagem natural de código aberto que é implementado em Python e Cython. O kit de ferramentas Gensim permite aos usuários importar Word2vec para modelagem de tópicos para descobrir estruturas ocultas no corpo do texto. Gensim fornece não apenas uma implementação de Word2vec, mas também de Doc2vec e FastText.
Este tutorial é sobre Word2vec, então vamos nos ater ao tópico atual.
Como implementar Word2vec usando Gensim
Até agora discutimos o que é Word2vec, suas diferentes arquiteturas, por que há uma mudança de um saco de palavras para Word2vec, a relação entre Word2vec e NLTK com código ativo e funções de ativação.
Abaixo está o método passo a passo para implementar Word2vec usando Gensim:
Etapa 1) Coleta de dados
A primeira etapa para implementar qualquer modelo de aprendizado de máquina ou processamento de linguagem natural é a coleta de dados
Observe os dados para construir um chatbot inteligente, conforme mostrado no exemplo Gensim Word2vec abaixo.
[{"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"] } ]
Aqui está o que entendemos dos dados
- Esses dados contêm três coisas: tag, padrão e respostas. A tag é a intenção (qual é o tema da discussão).
- Os dados estão no formato JSON.
- Um padrão é uma pergunta que os usuários farão ao bot
- Respostas é a resposta que o chatbot fornecerá à pergunta/padrão correspondente.
Etapa 2) Pré-processamento de dados
É muito importante processar os dados brutos. Se os dados limpos forem alimentados na máquina, o modelo responderá com mais precisão e aprenderá os dados com mais eficiência.
Esta etapa envolve a remoção de palavras irrelevantes, lematização, palavras desnecessárias, etc. Antes de prosseguir, é importante carregar os dados e convertê-los em um quadro de dados. Por favor, veja o código abaixo para tal
import json json_file =’intents.json' with open('intents.json','r') as f: data = json.load(f)
Explicação do Código:
- Como os dados estão no formato json, o json é importado
- O arquivo é armazenado na variável
- O arquivo está aberto e carregado na variável de dados
Agora os dados são importados e é hora de convertê-los em quadro de dados. Por favor, veja o código abaixo para ver a próxima etapa
import pandas as pd df = pd.DataFrame(data) df['patterns'] = df['patterns'].apply(', '.join)
Explicação do Código:
1. Os dados são convertidos em quadro de dados usando pandas que foram importados acima.
2. Ele converterá a lista em padrões de coluna em string.
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()]))
Explicação do código:
1. Palavras irrelevantes em inglês são importadas usando o módulo de palavras irrelevantes do kit de ferramentas nltk
2. Todas as palavras do texto são convertidas em minúsculas usando for condição e função lambda. Função lambda é uma função anônima.
3. Todas as linhas do texto no quadro de dados são verificadas quanto a pontuações de string e são filtradas.
4. Caracteres como números ou pontos são removidos usando uma expressão regular.
5. Digits são removidos do texto.
6. As palavras irrelevantes são removidas nesta fase.
7. As palavras são filtradas agora e diferentes formas da mesma palavra são removidas usando lematização. Com eles, finalizamos o pré-processamento dos dados.
Saída:
, 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
Etapa 3) Construção de rede neural usando Word2vec
Agora é hora de construir um modelo usando o módulo Gensim Word2vec. Temos que importar o Word2vec do Gensim. Vamos fazer isso, depois construiremos e na etapa final verificaremos o modelo em dados em tempo real.
from gensim.models import Word2Vec
Agora, neste tutorial do Gensim Word2vec, podemos construir o modelo com sucesso usando Word2Vec. Consulte a próxima linha de código para aprender como criar o modelo usando Word2Vec. O texto é fornecido ao modelo na forma de uma lista, portanto, converteremos o texto do quadro de dados em lista usando o código abaixo
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)
Explicação do Código:
1. Criou a lista maior onde a lista interna é anexada. Este é o formato que alimenta o modelo Word2Vec.
2. O loop é implementado e cada entrada da coluna de padrões do quadro de dados é iterada.
3. Cada elemento dos padrões de coluna é dividido e armazenado na lista interna li
4. a lista interna é anexada à lista externa.
5. Esta lista é fornecida para o modelo Word2Vec. Vamos entender alguns dos parâmetros fornecidos aqui
Contagem_mín.: Irá ignorar todas as palavras com frequência total inferior a esta.
Tamanho: Ele informa a dimensionalidade dos vetores de palavras.
Trabalhadores: Estes são os threads para treinar o modelo
Existem também outras opções disponíveis, e algumas importantes são explicadas abaixo
Janela: Distância máxima entre a palavra atual e a prevista em uma frase.
Sg: É um algoritmo de treinamento e 1 para skip-gram e 0 para um saco contínuo de palavras. Discutimos isso em detalhes acima.
Hs: Se for 1, então estamos usando softmax hierárquico para treinamento e se for 0, então a amostragem negativa será usada.
Alfa: Taxa de aprendizagem inicial
Vamos exibir o código final abaixo:
#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)
Etapa 4) Salvamento do modelo
O modelo pode ser salvo na forma de bin e modelo. Bin é o formato binário. Por favor, veja as linhas abaixo para salvar o modelo
model.save("word2vec.model") model.save("model.bin")
Explicação do código acima
1. O modelo é salvo na forma de um arquivo .model.
2. O modelo é salvo na forma de arquivo .bin
Usaremos este modelo para fazer testes em tempo real, como palavras semelhantes, palavras diferentes e palavras mais comuns.
Etapa 5) Carregando o modelo e realizando testes em tempo real
O modelo é carregado usando o código abaixo:
model = Word2Vec.load('model.bin')
Se você quiser imprimir o vocabulário, faça-o usando o comando abaixo:
vocab = list(model.wv.vocab)
Por favor veja o resultado:
['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']
Etapa 6) Verificação de palavras mais semelhantes
Vamos implementar as coisas na prática:
similar_words = model.most_similar('thanks') print(similar_words)
Por favor veja o resultado:
[('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)]
Etapa 7) Não corresponde à palavra das palavras fornecidas
dissimlar_words = model.doesnt_match('See you later, thanks for visiting'.split()) print(dissimlar_words)
Nós fornecemos as palavras 'Até mais, obrigado pela visita'. Esta vontade imprima as palavras mais diferentes dessas palavras. Vamos executar este código e encontrar o resultado
O resultado após a execução do código acima:
Thanks
Etapa 8) Encontrar a semelhança entre duas palavras
Isso dirá o resultado na probabilidade de semelhança entre duas palavras. Por favor, veja o código abaixo como executar esta seção.
similarity_two_words = model.similarity('please','see') print("Please provide the similarity between these two words:") print(similarity_two_words)
O resultado do código acima é o seguinte
0.13706
Você pode encontrar ainda palavras semelhantes executando o código abaixo
similar = model.similar_by_word('kind') print(similar)
Saída do código acima:
[('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)]
Conclusão
- Word Embedding é um tipo de representação de palavras que permite que palavras com significados semelhantes sejam compreendidas por algoritmos de aprendizado de máquina
- Word Embedding é usado para calcular palavras semelhantes, criar um grupo de palavras relacionadas, recurso para classificação de texto, agrupamento de documentos, processamento de linguagem natural
- Word2vec explicado: Word2vec é um modelo de rede neural superficial de duas camadas para produzir embeddings de palavras para melhor representação de palavras
- Word2vec representa palavras na representação do espaço vetorial. As palavras são representadas na forma de vetores e o posicionamento é feito de forma que palavras com significados semelhantes apareçam juntas e palavras diferentes fiquem distantes.
- O algoritmo Word2vec usa 2 arquiteturas Continuous Bag of Words (CBOW) e skip gram
- O CBOW é várias vezes mais rápido que o skip gram e fornece uma frequência melhor para palavras frequentes, enquanto o skip gram precisa de uma pequena quantidade de dados de treinamento e representa até mesmo palavras ou frases raras.
- NLTK e Word2vec podem ser usados juntos para criar aplicativos poderosos
- A função de ativação do neurônio define a saída desse neurônio, dado um conjunto de entradas. No Word2vec. Camada Softmax (função exponencial normalizada) é a função da camada de saída que ativa ou dispara cada nó. Word2vec também tem amostragem negativa disponível
- Gensim é um kit de ferramentas de modelagem de tópicos implementado em python