Tutorial de incorporação de palavras: word2vec usando Gensim (EXEMPLO)

Índice:

Anonim

O que é Word Embedding?

Incorporação de palavras é um tipo de representação de palavras que permite que palavras com significado semelhante sejam compreendidas por algoritmos de aprendizado de máquina. Tecnicamente falando, é um mapeamento de palavras em vetores de números reais usando a rede neural, modelo probabilístico ou redução de dimensão na matriz de coocorrência de palavras. É modelagem de linguagem e técnica de aprendizagem de recursos. A incorporação de palavras é uma maneira de realizar o mapeamento usando uma rede neural. Existem vários modelos de incorporação de palavras disponíveis, como word2vec (Google), Glove (Stanford) e o 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 estarão longe dessas palavras. Em um sentido mais amplo, a incorporação de palavras criará o vetor de frutas que será colocado longe da representação vetorial de livros.

Neste tutorial, você aprenderá

  • O que é Word Embedding?
  • Onde o Word Embedding é usado?
  • O que é word2vec?
  • O que o word2vec faz?
  • Por que Word2vec?
  • Arquitetura Word2vec
  • Saco contínuo de palavras.
  • Modelo Skip-Gram
  • A relação entre Word2vec e NLTK
  • Ativadores e Word2Vec
  • O que é Gensim?
  • Implementação de código de word2vec usando Gensim

Onde o Word Embedding é usado?

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 um desses aplicativos.

  • Calcule palavras semelhantes: a incorporação de palavras é usada para sugerir palavras semelhantes à palavra que está sendo submetida ao modelo de previsã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 juntas e diferentes à distância.
  • Recurso para classificação de texto: o texto é mapeado em matrizes de vetores que são alimentados ao modelo para treinamento e também para previsão. Modelos de classificadores baseados em texto não podem ser treinados na string, então isso converterá o texto em uma forma treinável por máquina. Além disso, seus recursos de construção semântica ajudam na classificação baseada em texto.
  • O clustering de documentos é outra aplicação onde a incorporação de palavras é amplamente usada
  • Processamento de linguagem natural: há muitos aplicativos 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 de incorporação de palavras. Alguma luz também é lançada em diferentes modelos para implementar a incorporação de palavras. Todo este tutorial é focado em um dos modelos (word2vec).

O que é word2vec?

Word2vec é a técnica / modelo para produzir incorporação de palavras para melhor representação de palavras. Ele captura um grande número de relações de palavras sintáticas e semânticas precisas. É uma rede neural rasa de duas camadas. Antes de prosseguir, veja a diferença entre redes neurais rasas e profundas:

A rede neural superficial consiste na única camada oculta entre a entrada e a saída, enquanto a rede neural profunda contém várias camadas ocultas entre a entrada e a saída. A entrada está sujeita a nós, enquanto a camada oculta, assim como a camada de saída, contém neurônios.

Figura: aprendizagem superficial vs. aprendizagem profunda

word2vec é uma rede de duas camadas em que há entrada, uma camada oculta e saída.

Word2vec foi desenvolvido por um grupo de pesquisadores liderado por Tomas Mikolov no Google. Word2vec é melhor e mais eficiente que o modelo de análise semântica latente.

O que o word2vec faz?

Word2vec representa palavras em representação de 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 sejam localizadas longe. Isso também é denominado como relacionamento semântico. As redes neurais não entendem texto, em vez disso, entendem 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 o que é 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. Em suma, o objetivo principal de uma frase é o contexto. A 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 através dos contextos.

Por que Word2vec?

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. Finalmente, veremos como funciona o word2vec porque é importante entender que está funcionando.

Abordagem para análise semântica latente

Essa é a abordagem usada antes da incorporação de palavras. Ele usou o conceito de Saco de palavras, onde as palavras são representadas na forma de vetores codificados. É uma representação vetorial esparsa em que a dimensão é igual ao tamanho do vocabulário. Se a palavra ocorrer no dicionário, ela é contada, caso contrário, não. Para entender mais, consulte o programa abaixo.

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

Resultado:

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

  1. CountVectorizer é o módulo usado para armazenar o vocabulário com base no ajuste das palavras nele. Isso é importado do sklearn
  2. Faça o objeto usando a classe CountVectorizer.
  3. Escreva os dados na lista que deve ser encaixada no CountVectorizer.
  4. Os dados são ajustados ao objeto criado a partir da classe CountVectorizer.
  5. 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, a posição do índice é definida como zero.
  6. A variável na linha 5 que é x é convertida em uma matriz (método disponível para x). Isso fornecerá a contagem de cada token na frase ou lista fornecida na Linha 3.
  7. 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 da matriz do documento. Frequência inversa do termo-frequência do documento (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.

Método de Falta de Saco de Palavras

  • Ignora a ordem da palavra, por exemplo, isso é ruim = ruim é isso.
  • Ele ignora o contexto das palavras. Suponha que se eu escrever a frase "Ele amava os livros. A educação se encontra melhor nos livros". Isso criaria dois vetores, um para "Ele amou os livros" e outro para "A educação é melhor encontrada nos livros". Trataria ambos ortogonais, o que os torna independentes, mas na realidade, eles estão relacionados um ao outro

Para superar essas limitações, a incorporação de palavras foi desenvolvida e o word2vec é uma abordagem para implementá-las.

Como funciona o Word2vec?

Word2vec aprende palavra prevendo seu contexto circundante. Por exemplo, consideremos a palavra "Ele adora futebol".

Queremos calcular o word2vec para a palavra: amores.

Suponha

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

Palavra ama se move sobre cada palavra no corpus. A relação sintática e semântica entre as palavras é codificada. Isso ajuda a encontrar palavras semelhantes e analogias.

Todas as características aleatórias da palavra amores são calculadas. Esses recursos são alterados ou atualizados em relação às palavras vizinhas ou de contexto com a ajuda de um método de propagação reversa.

Outra maneira de aprender é que se o contexto de duas palavras for semelhante ou duas palavras tiverem características semelhantes, essas palavras estarão relacionadas.

Arquitetura Word2vec

Existem duas arquiteturas usadas pelo word2vec

  1. Saco contínuo de palavras (CBOW)
  2. pular grama

Antes de prosseguir, vamos discutir por que essas arquiteturas ou modelos são importantes do ponto de vista da representação de palavras. A representação de palavras de aprendizagem é essencialmente não supervisionada, mas alvos / rótulos são necessários para treinar o modelo. Skip-gram e CBOW convertem a representação não supervisionada em forma supervisionada para o treinamento do modelo.

No CBOW, a palavra atual é prevista usando a janela das janelas de contexto ao redor. Por exemplo, se w i-1 , w i-2 , w i + 1 , w i + 2 recebem palavras ou contexto, este modelo fornecerá w i

Skip-Gram tem um desempenho oposto ao CBOW, o que implica que ele prevê a sequência ou contexto dado a partir da palavra. Você pode inverter o exemplo para entendê-lo. Se w i for dado, isso irá predizer o contexto ou w i-1 , w i-2 , w i + 1 , w i + 2.

Word2vec oferece a opção de escolher entre CBOW (contínuo saco de palavras) e skim-gram. Esses parâmetros são fornecidos durante o treinamento do modelo. Pode-se ter a opção de usar amostragem negativa ou camada softmax hierárquica.

Saco contínuo de palavras.

Vamos desenhar um diagrama simples para entender o saco contínuo de arquitetura de palavras.

Figura Saco Contínuo de Arquitetura do Word

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 {x i-1 , x i-2, x i + 1, x i + 2 }. Obtemos a matriz de peso multiplicando V * N. Outra matriz é obtida multiplicando o vetor de entrada com a matriz de peso. Isso também pode ser entendido pela seguinte equação.

h = xi t W

onde xi t ∧ W são o vetor de entrada e a matriz de ponderação, 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 model∧h na equação acima.

Modelo Skip-Gram

A abordagem Skip-Gram é usada para prever uma frase dada uma palavra de entrada. Para entender melhor, vamos desenhar o diagrama.

Figura Skip-Gram Model

Pode-se tratá-lo como o reverso do modelo de saco contínuo de palavras, em que a entrada é a palavra e o modelo fornece o contexto ou a sequência. Também podemos concluir que o destino é alimentado para a camada de entrada e saída é replicado 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?

CBOW é várias vezes mais rápido do que pular grama e fornece uma frequência melhor para palavras frequentes, enquanto pular grama precisa de uma pequena quantidade de dados de treinamento e representa até 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. É possível realizar diferentes operações, como marcação de classes gramaticais, lematização, lematização, remoção de palavras de interrupção, remoção de palavras raras ou menos usadas. Ajuda a limpar o texto e também a preparar os recursos das palavras eficazes. 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 dimensional superior do texto em dimensional inferior de vetores.

Onde usar NLTK e Word2vec?

Se for necessário realizar algumas tarefas de propósito geral, como mencionado acima, como tokenização, marcação e análise de POS, deve-se usar o NLTK, ao passo que, 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 a 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 o NLTK e o modelo pode ser criado usando o 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 que o NLTK oferece. Você pode baixar usando o comando

nltk(nltk.download('all'))

Figura Corpora baixado usando NLTK

Por favor, veja a imagem para o código.

import nltkimport gensimfrom nltk.corpus import abcmodel= gensim.models.Word2Vec(abc.sents())X= list(model.wv.vocab)data=model.most_similar('science')print(data)

Resultado:

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

  1. A biblioteca nltk é importada, de onde você pode baixar o abc corpus que usaremos na próxima etapa.
  2. Gensim é importado. Se o Gensim não estiver instalado, instale-o usando o comando "pip3 install gensim". Por favor, veja a imagem abaixo.

Figura Instalando Gensim usando PIP

  1. importe o corpus abc que foi baixado usando nltk.download ('abc').
  2. Passe os arquivos para o modelo word2vec que é importado usando Gensim como frases.
  3. O vocabulário é armazenado na forma da variável.
  4. O modelo é testado em ciência de palavras de amostra, pois esses arquivos estão relacionados à ciência.
  5. Aqui, a palavra semelhante de "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. Inspirado biologicamente 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.

Figura Entendendo a função de ativação

Aqui x1, x2,… x4 é o nó da rede neural.

w1, w2, w3 é o peso do nó,

∑ é a soma de todo o peso e valor do nó que funcionam como a 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 por voz e muitas outras saídas não lineares, é necessário o uso da função de ativação.

Como a camada de ativação é calculada na incorporação de palavras (word2vec)

Softmax Layer (função exponencial normalizada) é a função da camada de saída que ativa ou dispara cada nó. Outra abordagem usada é o softmax hierárquico, onde a complexidade é calculada por O (log 2 V), em que 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), veja o exemplo abaixo:

Figura Estrutura semelhante a árvore softmax hierárquica

Suponha que queiramos calcular a probabilidade de observar a palavra amor em 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. Portanto, permite decompor, cálculo da probabilidade de uma palavra ( amor ).

Que outras opções estão disponíveis além do Hierarchical Softmax?

Se estiver falando em um sentido geral, as opções de incorporação de palavras disponíveis são Softmax diferenciado, CNN-Softmax, Amostragem de importância, Amostragem de importância adaptativa, Estimativas de contraste de ruído, Amostragem negativa, autonormalização e normalização rara.

Falando especificamente sobre o Word2vec, temos amostras negativas disponíveis.

Amostragem negativa é uma forma de amostrar os dados de treinamento. É um pouco como uma descida gradiente estocástica, mas com alguma diferença. A amostragem negativa procura apenas exemplos de treinamento negativos. Baseia-se na estimativa de contraste de ruído e amostras de palavras aleatoriamente, 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, os dois vetores estão próximos um do outro.

Que conclusão pode ser tirada?

Os ativadores estão disparando os neurônios assim como nossos neurônios são disparados usando os estímulos externos. A camada Softmax é uma das funções da camada de saída que dispara 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 de aprendizado de máquina complexo pode ser implementado usando tal.

O que é Gensim?

Gensim é um kit de ferramentas de modelagem de tópicos que é implementado em python. A modelagem de tópicos está descobrindo estruturas ocultas no corpo do texto. Word2vec é importado do kit de ferramentas Gensim. Observe que o Gensim não só fornece uma implementação do word2vec, mas também do Doc2vec e FastText, mas este tutorial é totalmente sobre o word2vec, portanto, nos limitaremos ao tópico atual.

Implementação de 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 ao vivo e funções de ativação. Nesta seção, implementará o word2vec usando Gensim

Etapa 1) Coleta de dados

A primeira etapa para implementar qualquer modelo de aprendizado de máquina ou implementar processamento de linguagem natural é a coleta de dados

Observe os dados para construir um chatbot inteligente.

[{"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 tags, padrões e respostas. A tag é a intenção (qual é o tópico 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 jsonjson_file =’intents.json'with open('intents.json','r') as f:data = json.load(f)

Explicação do CODE.

  1. Como os dados estão no formato json, portanto, json é importado
  2. O arquivo é armazenado na variável
  3. O arquivo está aberto e carregado na variável de dados

Agora os dados são importados e é hora de converter os dados em um quadro de dados. Por favor, veja o código abaixo para ver a próxima etapa

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

Explicação do CODE

1. Os dados são convertidos em quadro de dados usando os pandas importados acima.

2. Ele irá converter a lista em padrões de coluna para string.

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

Explicação do código

1. Palavras de parada em inglês são importadas usando o módulo de palavras de parada do kit de ferramentas nltk

2. Todas as palavras do texto são convertidas em minúsculas usando para condição e função lambda. A 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. Os dígitos 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 a lematização. Com eles finalizamos o pré-processamento dos dados.

Resultado:

, 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

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, e então vamos construir e na fase final vamos verificar o modelo em dados em tempo real.

from gensim.models import Word2Vec

Agora, podemos construir com sucesso o modelo 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, então vamos converter o texto do quadro de dados para a 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ções do código

1. Criou a large_list 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

Min_count: Irá ignorar todas as palavras com uma frequência total inferior a esta.

Tamanho: informa a dimensionalidade dos vetores de palavras.

Trabalhadores: estes são os fios 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 é usada.

Alpha: taxa de aprendizado inicial

Deixe-nos mostrar o código final abaixo

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

Etapa 4) Salvar modelo

O modelo pode ser salvo na forma de compartimento 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 no formato de arquivo .bin

Usaremos esse modelo para fazer testes em tempo real, como palavras semelhantes, palavras diferentes e palavras mais comuns.

Etapa 5) Carregar o modelo e realizar o teste em tempo real

O modelo é carregado usando o código abaixo

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

Se quiser imprimir o vocabulário a partir do mesmo pode usar o comando abaixo

vocabulário = lista (modelo.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 das palavras mais semelhantes

Vamos implementar as coisas de forma 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 combina palavra com palavras fornecidas

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

Fornecemos as palavras 'Até mais, obrigado pela visita'. Isso imprimirá 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 para saber 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 mais 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

  • Incorporação de palavras é um tipo de representação de palavras que permite que palavras com significados semelhantes sejam compreendidas por algoritmos de aprendizado de máquina
  • A incorporação de palavras é usada para calcular palavras semelhantes, criar um grupo de palavras relacionadas, recurso para classificação de texto, agrupamento de documentos, processamento de linguagem natural
  • Word2vec é um modelo de rede neural de duas camadas superficial para produzir incorporação de palavras para melhor representação de palavras
  • Word2vec representa palavras em representação de 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 estejam localizadas longe
  • Word2vec usou 2 arquiteturas Continuous Bag of words (CBOW) e pula grama
  • CBOW é várias vezes mais rápido do que pular grama e fornece uma frequência melhor para palavras frequentes, enquanto pular grama precisa de uma pequena quantidade de dados de treinamento e representa até 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. Em word2vec. Softmax Layer (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ópico que é implementado em python