Prevendo uma palavra usando o modelo Word2vec


20

Dada uma frase: "Quando eu abrir a ?? porta que começa a aquecer automaticamente"

Gostaria de obter a lista de possíveis palavras em ?? com uma probabilidade.

O conceito básico usado no modelo word2vec é "prever" uma palavra, dada o contexto circundante.

Depois que o modelo é construído, qual é a operação correta de vetores de contexto para executar minha tarefa de previsão em novas frases?

É simplesmente uma soma linear?

model.most_similar(positive=['When','I','open','the','door','it','starts' ,'heating','automatically'])

Eu implementei o algoritmo acima e me deparei com uma pergunta: Por que o softmax é usado? Deixe-me mostrar um exemplo de duas funções de normalização: def softmax (w, t = 1.0): # Fonte: gist.github.com/stober/1946926 e = np.exp (w / t) return e / np.sum ( e) def normalização (w): retorno w / np.sum (w) a = np.array ([. 0002, .0001, .01, .03]) normalização de impressão (a) print softmax (a, t = 1 ) Vamos comparar as saídas: [0.00496278 0.00248139 0.24813896 0.444441687] [0.24752496 0.24750021 0.24996263 0.25501221] Como podemos ver, o softmax fornece 0,03 aproximadamente a mesma probabilidade em comparação com .0001 (que é

Respostas:


9

O Word2vec funciona em dois modelos CBOW e skip-gram. Vamos usar o modelo CBOW, pois sua pergunta segue da mesma maneira que prevê a palavra-alvo, considerando as palavras ao redor.

Fundamentalmente, o modelo desenvolve matrizes de peso de entrada e saída, que dependem das palavras do contexto de entrada e da palavra-alvo de saída com a ajuda de uma camada oculta. Assim, a propagação traseira é usada para atualizar os pesos quando a diferença de erro entre o vetor de saída previsto e a matriz de saída atual.

Basicamente, a previsão da palavra-alvo a partir de determinadas palavras de contexto é usada como uma equação para obter a matriz de peso ideal para os dados fornecidos.

Para responder à segunda parte, parece um pouco complexo do que apenas uma soma linear.

  1. Obtenha todos os vetores de palavras de palavras de contexto
  2. Faça a média deles para descobrir o vetor hde tamanho da camada ocultaNx1
  3. Obtenha a matriz de saída syn1( word2vec.cou gensim) que é do tamanhoVxN
  4. Multiplique syn1por h, o vetor resultante será do ztamanhoVx1
  5. Calcule o vetor de probabilidade y = softmax(z)com tamanho Vx1, em que a probabilidade mais alta denota a representação de um ponto quente da palavra de destino no vocabulário. Vindica tamanho do vocabulário e Ntamanho do vetor de incorporação.

Fonte: http://cs224d.stanford.edu/lecture_notes/LectureNotes1.pdf

Atualização: Os modelos de memória de longo prazo estão atualmente fazendo um excelente trabalho na previsão das próximas palavras. Os modelos seq2seq são explicados no tutorial tensorflow . Há também uma postagem no blog sobre geração de texto.


Obrigado ! Você está ciente de alguma implementação disso? (como parte do gensim, por exemplo). Caso contrário, não parece muito complicado de calcular.
— DED

Oi, você poderia me dar mais detalhes sobre como recuperar a matriz de saída (syn1 no seu exemplo) do modelo de incorporação w2v treinado? Eu acho que o w2v caiu a matriz de saída quando terminar o treinamento.
— Charles Chow

Com base no meu entendimento, sua resposta da 2ª pergunta é reconstruir a matriz de saída, está correto?
— Charles Chow

1
Eu acho que vale a pena notar que isso não está funcionando como um classificador de sequência. A ordem das palavras é ignorada.
— Displayname

Pode-se obter a matriz de saída syn1apenas salvando o modelo. sim, a ordem é ignorada, pois o aplicativo pode ser usado com o modelo seq2seq baseado em LSTM.
— precisa saber é

4

A previsão de palavras ausentes foi adicionada como uma funcionalidade na versão mais recente do Word2Vec. Obviamente, sua sentença precisa corresponder à sintaxe de entrada do modelo Word2Vec usada para treinar o modelo (letras minúsculas, palavras finais, etc.)

Uso para prever as 3 principais palavras para "Quando eu abrir a porta?":

print(model.predict_output_word(['When','I','open','door']), topn = 3)

Como ele sabia que centerestava entre a 3ª e a 4ª palavra? Isso não faz sentido para mim. Eu imagino apenas número par palavras de contexto poderia ser colocado em e seria selecionar a palavra entre floor(len(n)/2))efloor(len(n)/2))+1
— bmc
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.